From 5cd018adc39c29e3b09ac83fe5014762a366c0fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2026 23:34:28 +0000 Subject: [PATCH] :seedling: bump github.com/operator-framework/api from 0.45.0 to 0.46.0 Bumps [github.com/operator-framework/api](https://github.com/operator-framework/api) from 0.45.0 to 0.46.0. - [Release notes](https://github.com/operator-framework/api/releases) - [Changelog](https://github.com/operator-framework/api/blob/master/RELEASE.md) - [Commits](https://github.com/operator-framework/api/compare/v0.45.0...v0.46.0) --- updated-dependencies: - dependency-name: github.com/operator-framework/api dependency-version: 0.46.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 36 +- go.sum | 124 +-- .../Microsoft/go-winio/.golangci.yml | 266 +++--- .../github.com/Microsoft/go-winio/backup.go | 3 +- .../Microsoft/go-winio/backuptar/strconv.go | 4 +- .../Microsoft/go-winio/backuptar/tar.go | 10 +- vendor/github.com/Microsoft/go-winio/ea.go | 2 +- vendor/github.com/Microsoft/go-winio/file.go | 14 +- .../github.com/Microsoft/go-winio/fileinfo.go | 1 - .../github.com/Microsoft/go-winio/hvsock.go | 1 - .../Microsoft/go-winio/internal/fs/fs.go | 2 +- .../go-winio/internal/fs/zsyscall_windows.go | 8 +- .../internal/socket/zsyscall_windows.go | 8 +- .../go-winio/internal/stringbuffer/wstring.go | 4 +- vendor/github.com/Microsoft/go-winio/pipe.go | 40 +- .../go-winio/pkg/bindfilter/bind_filter.go | 17 +- .../pkg/bindfilter/zsyscall_windows.go | 8 +- .../Microsoft/go-winio/pkg/guid/guid.go | 2 +- .../go-winio/pkg/guid/guid_nonwindows.go | 1 - .../go-winio/pkg/guid/guid_windows.go | 1 - .../go-winio/pkg/guid/variant_string.go | 5 +- .../Microsoft/go-winio/privilege.go | 1 - .../github.com/Microsoft/go-winio/reparse.go | 61 +- vendor/github.com/Microsoft/go-winio/sd.go | 1 - .../github.com/Microsoft/go-winio/vhd/vhd.go | 106 ++- .../Microsoft/go-winio/vhd/zvhd_windows.go | 26 +- .../Microsoft/go-winio/zsyscall_windows.go | 8 +- .../docker/cli/cli/config/config.go | 9 +- .../docker/cli/cli/config/configfile/file.go | 5 +- .../cli/cli/config/memorystore/store.go | 2 +- .../github.com/google/cel-go/cel/BUILD.bazel | 3 + .../google/cel-go/cel/async/BUILD.bazel | 35 + .../google/cel-go/cel/async/async.go | 235 ++++++ vendor/github.com/google/cel-go/cel/cel.go | 21 + vendor/github.com/google/cel-go/cel/decls.go | 30 + vendor/github.com/google/cel-go/cel/env.go | 278 ++++--- .../github.com/google/cel-go/cel/folding.go | 209 ++++- vendor/github.com/google/cel-go/cel/io.go | 28 +- .../github.com/google/cel-go/cel/library.go | 53 +- .../github.com/google/cel-go/cel/options.go | 102 ++- .../github.com/google/cel-go/cel/program.go | 313 ++++++- .../github.com/google/cel-go/cel/validator.go | 222 ++++- .../github.com/google/cel-go/checker/env.go | 2 +- .../google/cel-go/checker/options.go | 5 +- .../google/cel-go/checker/scopes.go | 73 +- .../google/cel-go/common/ast/ast.go | 8 + .../google/cel-go/common/ast/navigable.go | 23 + .../google/cel-go/common/decls/decls.go | 118 ++- .../google/cel-go/common/stdlib/standard.go | 27 +- .../google/cel-go/common/types/BUILD.bazel | 11 + .../google/cel-go/common/types/bytes.go | 5 +- .../google/cel-go/common/types/native.go | 583 ++++++++++++++ .../google/cel-go/common/types/provider.go | 761 +++++++++++------- .../google/cel-go/common/types/regex.go | 49 ++ .../google/cel-go/common/types/string.go | 6 +- .../google/cel-go/common/types/struct.go | 39 + .../google/cel-go/common/types/timestamp.go | 80 +- .../google/cel-go/common/types/unknown.go | 5 +- vendor/github.com/google/cel-go/ext/README.md | 8 + .../github.com/google/cel-go/ext/encoders.go | 96 ++- vendor/github.com/google/cel-go/ext/lists.go | 288 ++++++- vendor/github.com/google/cel-go/ext/math.go | 61 +- vendor/github.com/google/cel-go/ext/native.go | 748 +---------------- .../github.com/google/cel-go/ext/network.go | 203 ++++- .../google/cel-go/interpreter/BUILD.bazel | 3 + .../google/cel-go/interpreter/activation.go | 13 + .../google/cel-go/interpreter/async.go | 530 ++++++++++++ .../cel-go/interpreter/attribute_patterns.go | 3 + .../google/cel-go/interpreter/decorators.go | 73 ++ .../google/cel-go/interpreter/frame.go | 136 +++- .../cel-go/interpreter/interpretable.go | 126 ++- .../google/cel-go/interpreter/interpreter.go | 14 + .../google/cel-go/interpreter/planner.go | 22 + .../google/cel-go/interpreter/runtimecost.go | 46 +- .../github.com/google/cel-go/parser/helper.go | 4 + .../google/cel-go/parser/options.go | 13 + .../github.com/google/cel-go/parser/parser.go | 18 + .../github.com/klauspost/compress/.gitignore | 3 + .../github.com/klauspost/compress/AGENTS.md | 104 +++ .../github.com/klauspost/compress/README.md | 53 +- .../klauspost/compress/fse/compress.go | 3 +- .../klauspost/compress/fse/decompress.go | 6 + .../klauspost/compress/huff0/bitwriter.go | 93 +-- .../klauspost/compress/huff0/compress.go | 31 +- .../klauspost/compress/huff0/decompress.go | 49 +- .../compress/huff0/decompress_amd64.go | 2 +- .../compress/huff0/decompress_amd64.s | 14 +- .../compress/huff0/decompress_arm64.go | 2 +- .../compress/huff0/decompress_arm64.s | 248 +++--- .../compress/huff0/decompress_asm.go | 2 +- .../compress/huff0/decompress_generic.go | 2 +- .../internal/cpuinfo/cpuinfo_amd64.go | 2 +- .../compress/internal/cpuinfo/cpuinfo_amd64.s | 4 +- .../compress/internal/le/unsafe_disabled.go | 2 +- .../compress/internal/le/unsafe_enabled.go | 2 +- .../compress/internal/regmask/regmask.go | 50 ++ .../compress/internal/regmask/regmask_386.go | 39 + .../klauspost/compress/zstd/bitwriter.go | 39 + .../klauspost/compress/zstd/blockdec.go | 59 +- .../klauspost/compress/zstd/blockenc.go | 177 ++-- .../klauspost/compress/zstd/decoder.go | 30 +- .../klauspost/compress/zstd/dict.go | 14 +- .../klauspost/compress/zstd/enc_base.go | 1 + .../klauspost/compress/zstd/enc_better.go | 90 ++- .../klauspost/compress/zstd/enc_dfast.go | 67 +- .../klauspost/compress/zstd/framedec.go | 27 +- .../klauspost/compress/zstd/fse_decoder.go | 76 +- .../compress/zstd/fse_decoder_amd64.s | 110 +-- .../compress/zstd/fse_decoder_arm64.s | 124 +-- .../compress/zstd/fse_decoder_asm.go | 8 +- .../compress/zstd/fse_decoder_generic.go | 9 +- .../klauspost/compress/zstd/fse_predefined.go | 18 +- .../klauspost/compress/zstd/hash.go | 22 + .../klauspost/compress/zstd/history.go | 89 +- .../zstd/internal/xxhash/xxhash_amd64.s | 6 +- .../zstd/internal/xxhash/xxhash_arm64.s | 6 +- .../zstd/internal/xxhash/xxhash_asm.go | 7 +- .../zstd/internal/xxhash/xxhash_other.go | 2 +- .../klauspost/compress/zstd/matchlen_amd64.go | 2 +- .../klauspost/compress/zstd/matchlen_amd64.s | 2 +- .../compress/zstd/matchlen_generic.go | 2 +- .../klauspost/compress/zstd/seqdec.go | 41 +- .../klauspost/compress/zstd/seqdec_amd64.go | 12 +- .../klauspost/compress/zstd/seqdec_amd64.s | 614 +++++++++++++- .../klauspost/compress/zstd/seqdec_arm64.go | 13 +- .../klauspost/compress/zstd/seqdec_arm64.s | 652 +++++++++++++-- .../klauspost/compress/zstd/seqdec_asm.go | 35 +- .../klauspost/compress/zstd/seqdec_generic.go | 9 +- .../klauspost/compress/zstd/seqenc.go | 47 ++ .../zstd/{simple_go124.go => simple.go} | 2 - .../klauspost/compress/zstd/snappy.go | 12 + .../github.com/mattn/go-sqlite3/callback.go | 77 +- vendor/github.com/mattn/go-sqlite3/convert.go | 4 +- vendor/github.com/mattn/go-sqlite3/sqlite3.go | 223 ++++- .../mattn/go-sqlite3/sqlite3_func_crypt.go | 46 +- .../mattn/go-sqlite3/sqlite3_libsqlite3.go | 1 - .../go-sqlite3/sqlite3_load_extension_omit.go | 1 - .../sqlite3_opt_allow_uri_authority.go | 1 - .../mattn/go-sqlite3/sqlite3_opt_app_armor.go | 1 - .../go-sqlite3/sqlite3_opt_column_metadata.go | 1 - .../mattn/go-sqlite3/sqlite3_opt_dbstat.go | 1 - .../go-sqlite3/sqlite3_opt_foreign_keys.go | 1 - .../mattn/go-sqlite3/sqlite3_opt_fts5.go | 1 - .../mattn/go-sqlite3/sqlite3_opt_icu.go | 1 - .../go-sqlite3/sqlite3_opt_introspect.go | 1 - .../go-sqlite3/sqlite3_opt_math_functions.go | 1 - .../mattn/go-sqlite3/sqlite3_opt_os_trace.go | 1 - .../go-sqlite3/sqlite3_opt_percentile.go | 1 - .../mattn/go-sqlite3/sqlite3_opt_preupdate.go | 1 - .../go-sqlite3/sqlite3_opt_preupdate_hook.go | 1 - .../go-sqlite3/sqlite3_opt_preupdate_omit.go | 1 - .../go-sqlite3/sqlite3_opt_secure_delete.go | 1 - .../sqlite3_opt_secure_delete_fast.go | 1 - .../go-sqlite3/sqlite3_opt_serialize_omit.go | 1 - .../mattn/go-sqlite3/sqlite3_opt_stat4.go | 1 - .../go-sqlite3/sqlite3_opt_unlock_notify.go | 1 - .../mattn/go-sqlite3/sqlite3_opt_userauth.go | 1 - .../go-sqlite3/sqlite3_opt_vacuum_full.go | 1 - .../go-sqlite3/sqlite3_opt_vacuum_incr.go | 1 - .../mattn/go-sqlite3/sqlite3_opt_vtable.go | 12 +- .../mattn/go-sqlite3/sqlite3_solaris.go | 1 - .../mattn/go-sqlite3/sqlite3_sql.go | 1 - .../mattn/go-sqlite3/sqlite3_trace.go | 1 - .../go-sqlite3/sqlite3_usleep_windows.go | 1 - .../mattn/go-sqlite3/sqlite3_windows.go | 1 - .../mattn/go-sqlite3/static_mock.go | 1 - .../operator-framework/api/crds/defs.go | 3 + ...ors.coreos.com_clusterserviceversions.yaml | 391 ++++++++- .../operators.coreos.com_subscriptions.yaml | 128 ++- .../operator-framework/api/crds/zz_defs.go | 6 +- .../net/http/otelhttp/common.go | 2 +- .../net/http/otelhttp/config.go | 2 +- .../instrumentation/net/http/otelhttp/doc.go | 2 +- .../net/http/otelhttp/handler.go | 2 +- .../otelhttp/internal/request/body_wrapper.go | 8 +- .../net/http/otelhttp/internal/request/gen.go | 2 +- .../internal/request/resp_writer_wrapper.go | 8 +- .../http/otelhttp/internal/semconv/client.go | 70 +- .../net/http/otelhttp/internal/semconv/gen.go | 2 +- .../http/otelhttp/internal/semconv/server.go | 42 +- .../http/otelhttp/internal/semconv/util.go | 24 +- .../net/http/otelhttp/labeler.go | 2 +- .../net/http/otelhttp/start_time_context.go | 2 +- .../net/http/otelhttp/transport.go | 23 +- .../net/http/otelhttp/version.go | 4 +- vendor/go.opentelemetry.io/otel/.golangci.yml | 3 +- vendor/go.opentelemetry.io/otel/CHANGELOG.md | 32 +- vendor/go.opentelemetry.io/otel/Makefile | 30 +- vendor/go.opentelemetry.io/otel/README.md | 7 + vendor/go.opentelemetry.io/otel/VERSIONING.md | 6 + .../otel/attribute/hash.go | 70 +- .../otel/attribute/internal/xxhash/xxhash.go | 5 + .../go.opentelemetry.io/otel/attribute/set.go | 3 + vendor/go.opentelemetry.io/otel/renovate.json | 7 + .../otel/sdk/internal/attrnorm/truncate.go | 24 +- .../otel/sdk/internal/x/x.go | 4 +- .../otel/sdk/resource/resource.go | 3 + .../internal/observ/simple_span_processor.go | 40 +- .../otel/sdk/trace/simple_span_processor.go | 20 +- .../otel/sdk/trace/span.go | 31 + .../go.opentelemetry.io/otel/sdk/version.go | 2 +- .../{v1.41.0 => v1.43.0}/httpconv/metric.go | 42 +- vendor/go.opentelemetry.io/otel/version.go | 2 +- vendor/go.opentelemetry.io/otel/versions.yaml | 8 +- .../image/v5/docker/docker_client.go | 8 +- .../image/v5/docker/docker_image_src.go | 25 +- .../internal/manifest/docker_schema2_list.go | 3 +- .../v5/pkg/sysregistriesv2/shortnames.go | 67 +- .../sysregistriesv2/system_registries_v2.go | 2 +- .../go.podman.io/image/v5/version/version.go | 4 +- .../storage/internal/rootlookupcache/cache.go | 148 ++++ .../system => internal/stat}/stat_common.go | 2 +- .../system => internal/stat}/stat_darwin.go | 8 +- .../system => internal/stat}/stat_freebsd.go | 8 +- .../storage/internal/stat/stat_linux.go | 16 + .../system => internal/stat}/stat_netbsd.go | 8 +- .../system => internal/stat}/stat_openbsd.go | 8 +- .../system => internal/stat}/stat_solaris.go | 8 +- .../storage/internal/stat/stat_unix.go | 73 ++ .../storage/internal/stat/stat_windows.go | 68 ++ .../storage/internal/xattrs/errors.go | 8 + .../storage/internal/xattrs/xattrs_darwin.go | 181 +++++ .../storage/internal/xattrs/xattrs_freebsd.go | 223 +++++ .../storage/internal/xattrs/xattrs_linux.go | 184 +++++ .../storage/internal/xattrs/xattrs_unix.go | 48 ++ .../internal/xattrs/xattrs_unsupported.go | 78 ++ .../storage/pkg/fileutils/fileutils.go | 44 + .../storage/pkg/idtools/idtools.go | 24 +- .../storage/pkg/idtools/idtools_supported.go | 47 +- .../go.podman.io/storage/pkg/system/errors.go | 6 +- .../storage/pkg/system/extattr_freebsd.go | 74 +- .../storage/pkg/system/extattr_unsupported.go | 9 + .../go.podman.io/storage/pkg/system/lstat.go | 17 + .../storage/pkg/system/lstat_unix.go | 14 +- .../storage/pkg/system/lstat_windows.go | 18 +- .../storage/pkg/system/stat_linux.go | 19 +- .../storage/pkg/system/stat_unix.go | 60 +- .../storage/pkg/system/stat_windows.go | 63 +- .../go.podman.io/storage/pkg/system/xattrs.go | 55 +- .../storage/pkg/system/xattrs_darwin.go | 134 --- .../storage/pkg/system/xattrs_freebsd.go | 143 ---- .../storage/pkg/system/xattrs_linux.go | 146 ---- .../storage/pkg/system/xattrs_unsupported.go | 29 - .../storage/pkg/unshare/unshare_linux.go | 39 +- vendor/modules.txt | 49 +- 245 files changed, 9677 insertions(+), 3585 deletions(-) create mode 100644 vendor/github.com/google/cel-go/cel/async/BUILD.bazel create mode 100644 vendor/github.com/google/cel-go/cel/async/async.go create mode 100644 vendor/github.com/google/cel-go/common/types/native.go create mode 100644 vendor/github.com/google/cel-go/common/types/regex.go create mode 100644 vendor/github.com/google/cel-go/common/types/struct.go create mode 100644 vendor/github.com/google/cel-go/interpreter/async.go create mode 100644 vendor/github.com/klauspost/compress/AGENTS.md create mode 100644 vendor/github.com/klauspost/compress/internal/regmask/regmask.go create mode 100644 vendor/github.com/klauspost/compress/internal/regmask/regmask_386.go rename vendor/github.com/klauspost/compress/zstd/{simple_go124.go => simple.go} (98%) rename vendor/go.opentelemetry.io/otel/semconv/{v1.41.0 => v1.43.0}/httpconv/metric.go (100%) create mode 100644 vendor/go.podman.io/storage/internal/rootlookupcache/cache.go rename vendor/go.podman.io/storage/{pkg/system => internal/stat}/stat_common.go (94%) rename vendor/go.podman.io/storage/{pkg/system => internal/stat}/stat_darwin.go (51%) rename vendor/go.podman.io/storage/{pkg/system => internal/stat}/stat_freebsd.go (70%) create mode 100644 vendor/go.podman.io/storage/internal/stat/stat_linux.go rename vendor/go.podman.io/storage/{pkg/system => internal/stat}/stat_netbsd.go (51%) rename vendor/go.podman.io/storage/{pkg/system => internal/stat}/stat_openbsd.go (50%) rename vendor/go.podman.io/storage/{pkg/system => internal/stat}/stat_solaris.go (50%) create mode 100644 vendor/go.podman.io/storage/internal/stat/stat_unix.go create mode 100644 vendor/go.podman.io/storage/internal/stat/stat_windows.go create mode 100644 vendor/go.podman.io/storage/internal/xattrs/errors.go create mode 100644 vendor/go.podman.io/storage/internal/xattrs/xattrs_darwin.go create mode 100644 vendor/go.podman.io/storage/internal/xattrs/xattrs_freebsd.go create mode 100644 vendor/go.podman.io/storage/internal/xattrs/xattrs_linux.go create mode 100644 vendor/go.podman.io/storage/internal/xattrs/xattrs_unix.go create mode 100644 vendor/go.podman.io/storage/internal/xattrs/xattrs_unsupported.go create mode 100644 vendor/go.podman.io/storage/pkg/system/lstat.go diff --git a/go.mod b/go.mod index efbd078cbe..72115632b4 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/openshift/api v0.0.0-20261017003925-24b2699a9b32 github.com/openshift/client-go v0.0.0-20261006222332-348fc1ca8bb1 github.com/openshift/library-go v0.0.0-20261019145849-b3e46fec8a08 - github.com/operator-framework/api v0.45.0 + github.com/operator-framework/api v0.46.0 github.com/operator-framework/operator-registry v1.74.0 github.com/otiai10/copy v1.14.1 github.com/pkg/errors v0.9.1 @@ -32,7 +32,7 @@ require ( github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 github.com/stretchr/testify v1.12.1 - go.podman.io/image/v5 v5.41.2 + go.podman.io/image/v5 v5.42.0 go.uber.org/mock v0.6.0 go.yaml.in/yaml/v3 v3.0.5 golang.org/x/net v0.61.0 @@ -59,7 +59,7 @@ require ( github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect github.com/BurntSushi/toml v1.6.0 // indirect github.com/Masterminds/semver/v3 v3.4.0 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/Microsoft/go-winio v0.6.3-0.20260930231756-f19d9717deb0 // indirect github.com/Microsoft/hcsshim v0.13.0 // indirect github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/akrylysov/pogreb v0.10.2 // indirect @@ -81,10 +81,10 @@ require ( github.com/containers/ocicrypt v1.3.2 // indirect github.com/coreos/go-systemd/v22 v22.7.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/docker/cli v29.7.1+incompatible // indirect + github.com/docker/cli v29.9.0+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker-credential-helpers v0.9.8 // indirect - github.com/docker/go-connections v0.8.1 // indirect + github.com/docker/docker-credential-helpers v0.9.10 // indirect + github.com/docker/go-connections v0.8.2 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emicklei/go-restful/v3 v3.13.0 // indirect github.com/evanphx/json-patch/v5 v5.9.11 // indirect @@ -116,7 +116,7 @@ require ( github.com/golang-migrate/migrate/v4 v4.19.1 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/google/cel-go v0.29.2 // indirect + github.com/google/cel-go v0.31.0 // indirect github.com/google/gnostic-models v0.7.1 // indirect github.com/google/pprof v0.0.0-20260402051712-545e8a4df936 // indirect github.com/google/uuid v1.6.0 // indirect @@ -131,13 +131,13 @@ require ( github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/joelanford/ignore v0.1.2 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.20.1 // indirect + github.com/klauspost/compress v1.20.3 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-sqlite3 v1.14.49 // indirect + github.com/mattn/go-sqlite3 v1.14.52 // indirect github.com/moby/locker v1.0.1 // indirect - github.com/moby/moby/client v0.5.1 // indirect + github.com/moby/moby/client v0.6.2 // indirect github.com/moby/sys/capability v0.4.0 // indirect github.com/moby/sys/mountinfo v0.7.2 // indirect github.com/moby/sys/sequential v0.6.0 // indirect @@ -161,16 +161,16 @@ require ( go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect - go.opentelemetry.io/otel v1.45.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 // indirect + go.opentelemetry.io/otel v1.46.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.45.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.45.0 // indirect - go.opentelemetry.io/otel/metric v1.45.0 // indirect - go.opentelemetry.io/otel/sdk v1.45.0 // indirect - go.opentelemetry.io/otel/trace v1.45.0 // indirect + go.opentelemetry.io/otel/metric v1.46.0 // indirect + go.opentelemetry.io/otel/sdk v1.46.0 // indirect + go.opentelemetry.io/otel/trace v1.46.0 // indirect go.opentelemetry.io/proto/otlp v1.11.0 // indirect go.podman.io/common v0.69.0 // indirect - go.podman.io/storage v1.64.1 // indirect + go.podman.io/storage v1.65.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.1 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect @@ -184,8 +184,8 @@ require ( golang.org/x/tools v0.51.0 // indirect gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260825221802-da73d73af1c5 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260825221802-da73d73af1c5 // indirect google.golang.org/protobuf v1.36.12 // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/go.sum b/go.sum index ab21363ff9..6428ca2b8d 100644 --- a/go.sum +++ b/go.sum @@ -10,14 +10,14 @@ github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/Microsoft/go-winio v0.6.3-0.20260930231756-f19d9717deb0 h1:71VU8kW/LCxJkx41+YYys1EgQO+AUnPa1TrxTSyYUCU= +github.com/Microsoft/go-winio v0.6.3-0.20260930231756-f19d9717deb0/go.mod h1:ma0QpxizD4fyyzJ1C7MIblymTD2Nxz5Mho/3CepwIZg= github.com/Microsoft/hcsshim v0.13.0 h1:/BcXOiS6Qi7N9XqUcv27vkIuVOkBEcWstd2pMlWSeaA= github.com/Microsoft/hcsshim v0.13.0/go.mod h1:9KWJ/8DgU+QzYGupX4tzMhRQE8h6w90lH6HAaclpEok= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= -github.com/ProtonMail/go-crypto v1.4.1 h1:9RfcZHqEQUvP8RzecWEUafnZVtEvrBVL9BiF67IQOfM= -github.com/ProtonMail/go-crypto v1.4.1/go.mod h1:e1OaTyu5SYVrO9gKOEhTc+5UcXtTUa+P3uLudwcgPqo= +github.com/ProtonMail/go-crypto v1.5.2 h1:cucYnvqcY7UOXVD//mSyjeaPY0SSN3v5cDkYPxumINk= +github.com/ProtonMail/go-crypto v1.5.2/go.mod h1:/RaSu30DaKO4RY+XdV/ACcCcZkGr7AhUIduq5sjzzCo= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8= @@ -84,14 +84,14 @@ github.com/distribution/distribution/v3 v3.1.1 h1:KUbk7C8CfaLXy8kbf/hGq9cad/wCoL github.com/distribution/distribution/v3 v3.1.1/go.mod h1:d7lXwZpph0bVcOj4Aqn0nMrWHIwRQGdiV5TLeI+/w6Y= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v29.7.1+incompatible h1:ILZpP6B7fedIr6ANy824QkDp1WMJuouIq0O2SrBkB2w= -github.com/docker/cli v29.7.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v29.9.0+incompatible h1:Cw9x50ioSGgGwXJ4eO+hIBry/w3LLbyF8GPAEKz1fnE= +github.com/docker/cli v29.9.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker-credential-helpers v0.9.8 h1:bIREROb7So6PRlq6KTtdS9MPEjC29OQRkFNlvK2OX8Q= -github.com/docker/docker-credential-helpers v0.9.8/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c= -github.com/docker/go-connections v0.8.1 h1:JibmG5hULs5qXSr/cp/w3Pw5fZuStt4MOHMUExb29/M= -github.com/docker/go-connections v0.8.1/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= +github.com/docker/docker-credential-helpers v0.9.10 h1:LCWwv7UmS7fQVmdKDWeMuureOeY5kkbC5kZfkzxkS6k= +github.com/docker/docker-credential-helpers v0.9.10/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c= +github.com/docker/go-connections v0.8.2 h1:9d9DEokx5W7qlr0shkFXIxEA7+TTD+llwzcykSlxMNc= +github.com/docker/go-connections v0.8.2/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= github.com/docker/go-events v0.0.0-20250808211157-605354379745 h1:yOn6Ze6IbYI/KAw2lw/83ELYvZh6hvsygTVkD0dzMC4= github.com/docker/go-events v0.0.0-20250808211157-605354379745/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= @@ -134,8 +134,8 @@ github.com/go-git/go-billy/v5 v5.9.0 h1:jItGXszUDRtR/AlferWPTMN4j38BQ88XnXKbilmm github.com/go-git/go-billy/v5 v5.9.0/go.mod h1:jCnQMLj9eUgGU7+ludSTYoZL/GGmii14RxKFj7ROgHw= github.com/go-git/go-git/v5 v5.19.2 h1:wkfn7vOlUBu8ivAWKBWisTiwJK4jYHzTF8Ndv1LyGqY= github.com/go-git/go-git/v5 v5.19.2/go.mod h1:QqCBE1EFN5ddFmrliLQ3/ntRCUjZU3EJuwuB/jWEHjk= -github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= -github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-jose/go-jose/v4 v4.1.5 h1:RjgjO2LOtWOJKUC5wpwY9LR3B3vwVAz6JS2YHfYU6eA= +github.com/go-jose/go-jose/v4 v4.1.5/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8= github.com/go-logr/logr v1.4.4/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -209,8 +209,8 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/cel-go v0.29.2 h1:ZtDxkeiMmz0mxbKDYiNkE5Lk7V5edMRcaaDf2jX002k= -github.com/google/cel-go v0.29.2/go.mod h1:X0bD6iVNR8pkROSOoHVdgTkzmRcosof7WQqCD6wcMc8= +github.com/google/cel-go v0.31.0 h1:H0bhpFTqOvmHrBGrWKp7ZlhBm5Hh8PYUEXnwxT1LL7A= +github.com/google/cel-go v0.31.0/go.mod h1:X0bD6iVNR8pkROSOoHVdgTkzmRcosof7WQqCD6wcMc8= github.com/google/gnostic-models v0.7.1 h1:SisTfuFKJSKM5CPZkffwi6coztzzeYUhc3v4yxLWH8c= github.com/google/gnostic-models v0.7.1/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -221,8 +221,8 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/go-containerregistry v0.21.6 h1:T+yqQIlJXKrM98Om4DlW3GoWQAmhZuLMwoDOvVrtiUM= -github.com/google/go-containerregistry v0.21.6/go.mod h1:U7MMSBIJynke2MVQrQk19NP9k/uQsGz/h0amIFSHMbo= +github.com/google/go-containerregistry v0.22.1 h1:RZuuSYhTvlDvtsK+NkutoCZ//C0X2ebLK8X8l3ULs84= +github.com/google/go-containerregistry v0.22.1/go.mod h1:bJR35SK8XgisYmhg/FMQ/5RK0S/XrOAqLBV5/LR2XE0= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -270,10 +270,10 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.20.1 h1:T7kKElXUMXrUJ2E9QhQhxFtcK5rPyLdsGZvdbLMPdiQ= -github.com/klauspost/compress v1.20.1/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= -github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= -github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/compress v1.20.3 h1:zWNoFqq/lSuYQRim3dUXlXeA0IqwuZGicdG5ZTfY5j4= +github.com/klauspost/compress v1.20.3/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= +github.com/klauspost/pgzip v1.2.7 h1:02QB3Ttao6zOWDnSsv3bIvjN24bX0eGjWniQ8vuBfkA= +github.com/klauspost/pgzip v1.2.7/go.mod h1:g7E6NrOKHOzah4QwK6Ue1tNCJs8IDiNOfjiXTr85U2E= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -288,10 +288,10 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.27 h1:Feg/Oou5zI/wnpgDF6omIU0OokC9GxLC/WRknhVlIR0= -github.com/mattn/go-runewidth v0.0.27/go.mod h1:3qAiGCV4Koz/yuveO58qUefmUTRm8r0IGEXZ9jeHp/8= -github.com/mattn/go-sqlite3 v1.14.49 h1:B8jBHC3xhxZgxztrgruTuLucebnULQnx4W7cF7SAE9w= -github.com/mattn/go-sqlite3 v1.14.49/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= +github.com/mattn/go-runewidth v0.0.31 h1:1oCV4ReTlosDBc6rYRw5cL8S/4y8iv5oRl4SJ5IBgwo= +github.com/mattn/go-runewidth v0.0.31/go.mod h1:3qAiGCV4Koz/yuveO58qUefmUTRm8r0IGEXZ9jeHp/8= +github.com/mattn/go-sqlite3 v1.14.52 h1:wVbm2Qnf4OXkqhBTSPuCRZDRnxfbVrrmiCEroVdog8U= +github.com/mattn/go-sqlite3 v1.14.52/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= github.com/maxbrunsfeld/counterfeiter/v6 v6.14.0 h1:ycRiGl9/HL9uK7STIAmMegVljG1YujdquTpvl7HTROE= github.com/maxbrunsfeld/counterfeiter/v6 v6.14.0/go.mod h1:e/D0QNerKifXqW9s4ViRf5N1bnNGrzSFWCe2e0SuiQA= github.com/mfridman/tparse v0.18.0 h1:wh6dzOKaIwkUGyKgOntDW4liXSo37qg5AXbIhkMV3vE= @@ -302,8 +302,8 @@ github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4 github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/moby/client v0.5.1 h1:tYNaJno4c0HXz12y5BiqEDy0rVTYkWzI26lGvnTMiJw= -github.com/moby/moby/client v0.5.1/go.mod h1:odLstlZ6uSnfvAgVxMpvgmb8SUdd+siH2T0GBuxVAlM= +github.com/moby/moby/client v0.6.2 h1:ekSPlMccrZGcw6Scb8T9D39qE0mB+XupU/yS0zNw9N4= +github.com/moby/moby/client v0.6.2/go.mod h1:DGcnO7qmPJrqobx/ggQgQ/AUk+2wgVdQv7uxB0/mEsc= github.com/moby/sys/capability v0.4.0 h1:4D4mI6KlNtWMCM1Z/K0i7RV1FkX+DBDHKVJpCndZoHk= github.com/moby/sys/capability v0.4.0/go.mod h1:4g9IK291rVkms3LKCDOoYlnV8xKwoDTpIrNEE35Wq0I= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= @@ -338,8 +338,8 @@ github.com/openshift/client-go v0.0.0-20261006222332-348fc1ca8bb1 h1:HpoDz9EFYX1 github.com/openshift/client-go v0.0.0-20261006222332-348fc1ca8bb1/go.mod h1:lFvdJoRyqXFPBtBOFrIo3aAhGutLblBULzdjC96NavI= github.com/openshift/library-go v0.0.0-20261019145849-b3e46fec8a08 h1:4LH+5WsywCGVKS7N9Ut4YBeFFbQ7VX4TST5XZbKzH7k= github.com/openshift/library-go v0.0.0-20261019145849-b3e46fec8a08/go.mod h1:JOJKlqc8fqB/I632V61geb80zImgXC8FEQR3jn2/syI= -github.com/operator-framework/api v0.45.0 h1:hkROwtsLH3oszp4IW+WsXEFSDgveSahHI7DKStOtrUI= -github.com/operator-framework/api v0.45.0/go.mod h1:IQ4uuISTiIhV09oAurJSGD4KabayhY5nV6k1XmA235M= +github.com/operator-framework/api v0.46.0 h1:EitSlfRJZKYDewTK+ntH9L/p+NIKv/L1PgRoaIWH+to= +github.com/operator-framework/api v0.46.0/go.mod h1:oFXzh7rHCnMwC6N0B92NEsfQyLGJ7FrceAYemjwoKPI= github.com/operator-framework/operator-registry v1.74.0 h1:InCaEwEEydEZB9yHcal9oBlo2SqCgq12dJhqORR8uvU= github.com/operator-framework/operator-registry v1.74.0/go.mod h1:iKcgSTJr1WJtlDq8scnaWvUeCW/2WWdcyHocWuSGNQk= github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8= @@ -375,14 +375,14 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8= github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM= -github.com/secure-systems-lab/go-securesystemslib v0.11.0 h1:iuCR9kcMFD4QurdKrGvPLoKZLv9YvwPYVr0473BdtFs= -github.com/secure-systems-lab/go-securesystemslib v0.11.0/go.mod h1:+PMOTjUGwHj2vcZ+TFKlb1tXRbrdWE1LYDT5i9JC80Q= -github.com/sigstore/fulcio v1.8.7 h1:d7QJQxukgXarqPCT9uDNeyzt1Bbt/biw58/VfOnwI/o= -github.com/sigstore/fulcio v1.8.7/go.mod h1:7fX+QyigZxRGKTgHvTfOfxwwniCDxK02PVloHy5/vg4= -github.com/sigstore/protobuf-specs v0.5.1 h1:/5OPaNuolRJmQfeZLayJGFXMpsRJEdgC6ah1/+7Px7U= -github.com/sigstore/protobuf-specs v0.5.1/go.mod h1:DRBzpFuE+LnvQMN10/dU6nBeKwVLGEQ6o2FovN2Rats= -github.com/sigstore/sigstore v1.10.8 h1:1Mgkxvkw4AXMfIP1DOjc6kw0GkUgA8pGVpveN/EfOq4= -github.com/sigstore/sigstore v1.10.8/go.mod h1:f9+B/4iaYimvUkySyb2mvc73n3RLqNn24grHZM/ET8M= +github.com/secure-systems-lab/go-securesystemslib v0.11.1 h1:ayahDPjfSIqKegyt5YVGEvQ7SAi72GHXTy+b2YjUd5w= +github.com/secure-systems-lab/go-securesystemslib v0.11.1/go.mod h1:UyOjhoZLi76ir63u1ptubEevVe6dlNPmNxwgVvKqFFY= +github.com/sigstore/fulcio v1.8.8 h1:AtVoVQ4R7YaP6RHIH9puHyB398CHS/9WYc6d+gKf5Y0= +github.com/sigstore/fulcio v1.8.8/go.mod h1:RaFomAGGM7VZKAR9ZGqQhcf1Peryc9E1020/kbX8Uto= +github.com/sigstore/protobuf-specs v0.5.2 h1:RSWWUY8QrVTxbYH00jY/jg2e7YnjzrpwP+PeHTMll0E= +github.com/sigstore/protobuf-specs v0.5.2/go.mod h1:DRBzpFuE+LnvQMN10/dU6nBeKwVLGEQ6o2FovN2Rats= +github.com/sigstore/sigstore v1.10.11 h1:fjrwDfR0AWmRONYV/hKGJyqbT0osMtaBz9FTZ6MH9XI= +github.com/sigstore/sigstore v1.10.11/go.mod h1:ecPk+ftLqP8/TmzQFJmn0+QrL2yUQIJvyzVKNmDiw6U= github.com/sirupsen/logrus v1.10.2 h1:G2SED73/qrAu6YwbdxOD6peLkCBI3z7L+ykJFTXJBBo= github.com/sirupsen/logrus v1.10.2/go.mod h1:SLEg8TqYulVKKfIGHldVp2K2aYz2DKSVBq4g/H5bR7Q= github.com/smallstep/pkcs7 v0.2.1 h1:6Kfzr/QizdIuB6LSv8y1LJdZ3aPSfTNhTLqAx9CTLfA= @@ -419,14 +419,14 @@ github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= -github.com/ulikunitz/xz v0.5.16 h1:ld6NyySjx5lowVKwJvMRLnW5nxKX/xnpSiFYZ/Lxur0= -github.com/ulikunitz/xz v0.5.16/go.mod h1:H9Rt/W6/Qj27PGauhQc6nfCDy7vHpzsOThBSaYDoEhw= +github.com/ulikunitz/xz v0.5.17 h1:flR0y/x1hgM8EGV1AW3Xll6T413G0glV8UfBwR617V4= +github.com/ulikunitz/xz v0.5.17/go.mod h1:H9Rt/W6/Qj27PGauhQc6nfCDy7vHpzsOThBSaYDoEhw= github.com/vbatts/tar-split v0.12.3 h1:Cd46rkGXI3Td4yrVNwU8ripbxFaQbmesqhjBUUYAJSw= github.com/vbatts/tar-split v0.12.3/go.mod h1:sQOc6OlqGCr7HkGx/IDBeKiTIvqhmj8KffNhEXG4Nq0= -github.com/vbauerster/cupwriter v0.0.4 h1:9sBPe0uXWLZuWQU5lqVbhyFlxX6c09asST/YfatFAys= -github.com/vbauerster/cupwriter v0.0.4/go.mod h1:IFyzS6Xis5dnBH/rdAhrnuzg3c+KkUqEN6yE8lhJlDw= -github.com/vbauerster/mpb/v8 v8.14.0 h1:55SR80dptMfASxIG/oCEkBXgBhxeSu4GrVsjl16oKmA= -github.com/vbauerster/mpb/v8 v8.14.0/go.mod h1:HgpQPKfcWe3kbuGGPmi+jatHreMase5C3Fp5dpdAy0Q= +github.com/vbauerster/cupwriter v0.0.5 h1:pxlPgxPLIebXh8lJPOZmn2TmjPE8+PqJIFkKkr7hI9I= +github.com/vbauerster/cupwriter v0.0.5/go.mod h1:ptJDgOtLtGZp1gLzycD0TFnZztDhrQdsikG6EAA4xYQ= +github.com/vbauerster/mpb/v8 v8.16.2 h1:+UH2Nhn6asKkdX58hSgN+5Jqg/JcFSqCcU+8z0IiYYo= +github.com/vbauerster/mpb/v8 v8.16.2/go.mod h1:PFkxR+jl7Eew9ukpdUcodHBGq9ow74b6cXI7xL0t3mA= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xiang90/probing v0.0.0-20221125231312-a49e3df8f510 h1:S2dVYn90KE98chqDkyE9Z4N61UnQd+KOfgp5Iu53llk= @@ -459,10 +459,10 @@ go.opentelemetry.io/contrib/exporters/autoexport v0.67.0 h1:4fnRcNpc6YFtG3zsFw9a go.opentelemetry.io/contrib/exporters/autoexport v0.67.0/go.mod h1:qTvIHMFKoxW7HXg02gm6/Wofhq5p3Ib/A/NNt1EoBSQ= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI= -go.opentelemetry.io/otel v1.45.0 h1:pdrWmLHofpubmArBv1LgFSv1Z0Ie/ppdZzu+kUN5EeU= -go.opentelemetry.io/otel v1.45.0/go.mod h1:XZxIqPapzEYnhNSScF5DIqXhm/rYi0FzCe2XddAwZfQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 h1:3g7B90UzBltIDKq1/5mrTGxTnOFDV0ICOhLoxiZ8jlg= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0/go.mod h1:Ef8SuTh59BT7+ofpDxN9z+yOlc4t2GjLmKDgYNJL/NU= +go.opentelemetry.io/otel v1.46.0 h1:FHt5/CDyVxi/8IM1CH7VE/rRgq3kLHa2mSTVMO8AWyc= +go.opentelemetry.io/otel v1.46.0/go.mod h1:Gj3SEScelsNC45tp4nSxRYlS+f5iez7W8XPMCt905kE= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0 h1:deI9UQMoGFgrg5iLPgzueqFPHevDl+28YKfSpPTI6rY= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0/go.mod h1:PFx9NgpNUKXdf7J4Q3agRxMs3Y07QhTCVipKmLsMKnU= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.19.0 h1:HIBTQ3VO5aupLKjC90JgMqpezVXwFuq6Ryjn0/izoag= @@ -487,24 +487,24 @@ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0 h1:s/1iRkCKDfhlh1J go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0/go.mod h1:UI3wi0FXg1Pofb8ZBiBLhtMzgoTm1TYkMvn71fAqDzs= go.opentelemetry.io/otel/log v0.19.0 h1:KUZs/GOsw79TBBMfDWsXS+KZ4g2Ckzksd1ymzsIEbo4= go.opentelemetry.io/otel/log v0.19.0/go.mod h1:5DQYeGmxVIr4n0/BcJvF4upsraHjg6vudJJpnkL6Ipk= -go.opentelemetry.io/otel/metric v1.45.0 h1:7Eg1uH7CJ5cXv9is6tnBe1FI6rj1nwUdbFypRm3br/M= -go.opentelemetry.io/otel/metric v1.45.0/go.mod h1:HAPbm1nd3p1PmFH7v2dR+6BjXxw+Lq4a2+pndMAm08s= -go.opentelemetry.io/otel/sdk v1.45.0 h1:4VVSMgQ83dUgW2aoX5f6JgLvHwIvzcuLnF9lUdCSpCw= -go.opentelemetry.io/otel/sdk v1.45.0/go.mod h1:Sr40LgXV7DsKMMJMKOhUWOgMWTfAaqvm2kF0g7ilwuA= +go.opentelemetry.io/otel/metric v1.46.0 h1:yBnkXvgV7AXFILZc5K6IZe/CBFF3OS7BJ8ov6/lj0K8= +go.opentelemetry.io/otel/metric v1.46.0/go.mod h1:iPmdWqifKUdzziPkvvzIJXITl56fQx2mGM/DHLB3/2o= +go.opentelemetry.io/otel/sdk v1.46.0 h1:h5CNQQjEbuQXY/JfZtgt3i7HVFV3aHPO2OAwO2eTYPI= +go.opentelemetry.io/otel/sdk v1.46.0/go.mod h1:GAERFXFt5SYCEB+YiKUbMBeza6UaDH7GmGOZEfh2gSM= go.opentelemetry.io/otel/sdk/log v0.19.0 h1:scYVLqT22D2gqXItnWiocLUKGH9yvkkeql5dBDiXyko= go.opentelemetry.io/otel/sdk/log v0.19.0/go.mod h1:vFBowwXGLlW9AvpuF7bMgnNI95LiW10szrOdvzBHlAg= -go.opentelemetry.io/otel/sdk/metric v1.45.0 h1:oVFszMfyj1Am6s24Vtc7wBb8BKLcwepJjNEYILuiE3o= -go.opentelemetry.io/otel/sdk/metric v1.45.0/go.mod h1:vUWUxDZvu1WVRj8JA8S0AdhsPrZoDpA2DdZauIh4mDA= -go.opentelemetry.io/otel/trace v1.45.0 h1:l/mP6Uv7oNO7/TblbhpbgMidxhq1uO/rPsikOyVhxag= -go.opentelemetry.io/otel/trace v1.45.0/go.mod h1:qoJJA2xNMnxRrdISU/kLtfUH2wNeQbiv+jhs/CxI8bc= +go.opentelemetry.io/otel/sdk/metric v1.46.0 h1:0piZ26EG4RBfebb2jhDH6ERCYHoVWduc3kLgPCwSnSE= +go.opentelemetry.io/otel/sdk/metric v1.46.0/go.mod h1:I1PbKrdVc8Qu8HYVDNtqVIwLwjNrhsV/uFuxfwg8mO4= +go.opentelemetry.io/otel/trace v1.46.0 h1:OULy7ccdJnZtJ0UDYFOIGaCmiWzJ8Vi2G/Rsu60qs1c= +go.opentelemetry.io/otel/trace v1.46.0/go.mod h1:J7GAXweO77XSFkB/rmAqk9D6ihszhFjLU+d9WuUxDLI= go.opentelemetry.io/proto/otlp v1.11.0 h1:5rrYs0Ykyj50sdU/JU0x8etU+LubXWb+gED6TbEdMIk= go.opentelemetry.io/proto/otlp v1.11.0/go.mod h1:SmVizdCOAm3XBtG1g1NnOdhW6jtddT72hLMhv8VwA8E= go.podman.io/common v0.69.0 h1:tAM8gJRCgoPmyfXnYP+6VRfOQ6JySgafpY28OhDZpWc= go.podman.io/common v0.69.0/go.mod h1:g1iVXP+Xn/8He+96qpJw75pu054FRDQMiDGf2VKKspg= -go.podman.io/image/v5 v5.41.2 h1:YnVaFrGLPWSBmipKfNvlOsGcBtk5bUxlPxQ+A6CS/uo= -go.podman.io/image/v5 v5.41.2/go.mod h1:T/bzxEFpdpAzyHabPmcq5K+my3wBsht22sFkFjJSKT4= -go.podman.io/storage v1.64.1 h1:DqbG8scW/bD3xHiSRzV7O5fzn46qVC+SwmUN6C6Fr5w= -go.podman.io/storage v1.64.1/go.mod h1:ft0DzCRMZs1yn0rszmLYXEEwgd7IIc66JRwSRPUDwwc= +go.podman.io/image/v5 v5.42.0 h1:C//Ix0Thj2LYOQO6++NjU3McLFLQbf4czgUyH98R9gc= +go.podman.io/image/v5 v5.42.0/go.mod h1:mmIgf9EdpF68j8vdX1/OxhOSIknU1PO3G6/ClRkrwm4= +go.podman.io/storage v1.65.0 h1:GgY5VibEw6coVhOGYWuxZ4F7H2AaTfPiwL7E1CJ2dnM= +go.podman.io/storage v1.65.0/go.mod h1:ZDXsVSzdho+p4fDky+iMVCPwRtjS1kSiHcyhBwUB6M0= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= @@ -598,10 +598,10 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0= google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I= -google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d h1:FarXi840EJWSHYTN3ERkADbPWjl307+FGrA22KAVjjc= -google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d/go.mod h1:K/+WGbmBY7aNW1HDw1fJnKYo10i0DkAX6pows00dLig= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d h1:IL4hdHzcUv2l/gcg98/Rj3FbtE6axwqslOW8SW0C+S0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto/googleapis/api v0.0.0-20260825221802-da73d73af1c5 h1:izFU9hz7aeLI/Mi1J0991ae+xcwRLr7hTqWnB/9aIIU= +google.golang.org/genproto/googleapis/api v0.0.0-20260825221802-da73d73af1c5/go.mod h1:3LhxRw4YYkf+ylAfgaY9JlVLFKhokkCV8duhLLe7+t0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260825221802-da73d73af1c5 h1:1VUiZAXyC+zmiFYi+WLtBzr68Cj8wOofHjjrA/kkizc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260825221802-da73d73af1c5/go.mod h1:DjtHYE8FKJLivXcBEjGwndXfIC23G0VpXiXKqG179uA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= diff --git a/vendor/github.com/Microsoft/go-winio/.golangci.yml b/vendor/github.com/Microsoft/go-winio/.golangci.yml index faedfe937a..07a22649a0 100644 --- a/vendor/github.com/Microsoft/go-winio/.golangci.yml +++ b/vendor/github.com/Microsoft/go-winio/.golangci.yml @@ -1,9 +1,15 @@ +version: "2" +formatters: + enable: + - gofmt # files are gofmt'ed linters: enable: # style - containedctx # struct contains a context - dupl # duplicate code - - errname # erorrs are named correctly + - dupword # duplicate words in comments + - errname # errors are named correctly + - intrange # integer ranges in for loop - nolintlint # "//nolint" directives are properly explained - revive # golint replacement - unconvert # unnecessary conversions @@ -13,135 +19,155 @@ linters: - contextcheck # function uses a non-inherited context - errorlint # errors not wrapped for 1.13 - exhaustive # check exhaustiveness of enum switch statements - - gofmt # files are gofmt'ed + - gocritic # various code quality checks - gosec # security + - mirror # avoid allocations - nilerr # returns nil even with non-nil error - thelper # test helpers without t.Helper() - unparam # unused function params -issues: - exclude-dirs: - - pkg/etw/sample - - exclude-rules: - # err is very often shadowed in nested scopes - - linters: - - govet - text: '^shadow: declaration of "err" shadows declaration' + exclusions: + paths: + - pkg/etw/sample + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + # err is very often shadowed in nested scopes + - linters: + - govet + text: '^shadow: declaration of "err" shadows declaration' - # ignore long lines for skip autogen directives - - linters: - - revive - text: "^line-length-limit: " - source: "^//(go:generate|sys) " + # ignore long lines for skip autogen directives + - linters: + - revive + text: "^line-length-limit: " + source: "^//(go:generate|sys) " - #TODO: remove after upgrading to go1.18 - # ignore comment spacing for nolint and sys directives - - linters: - - revive - text: "^comment-spacings: no space between comment delimiter and comment text" - source: "//(cspell:|nolint:|sys |todo)" + # ignore comment spacing for sys directives + - linters: + - revive + text: "^comment-spacings: no space between comment delimiter and comment text" + source: "//(cspell:|sys )" - # not on go 1.18 yet, so no any - - linters: - - revive - text: "^use-any: since GO 1.18 'interface{}' can be replaced by 'any'" + # allow unjustified ignores of error checks in defer statements + - linters: + - nolintlint + text: "^directive `//nolint:errcheck` should provide explanation" + source: '^\s*defer ' - # allow unjustified ignores of error checks in defer statements - - linters: - - nolintlint - text: "^directive `//nolint:errcheck` should provide explanation" - source: '^\s*defer ' + # allow unjustified ignores of error lints for io.EOF + - linters: + - nolintlint + text: "^directive `//nolint:errorlint` should provide explanation" + source: '[=|!]= io.EOF' - # allow unjustified ignores of error lints for io.EOF - - linters: - - nolintlint - text: "^directive `//nolint:errorlint` should provide explanation" - source: '[=|!]= io.EOF' + - linters: + - gosec + text: "^G115: integer overflow conversion" -linters-settings: - exhaustive: - default-signifies-exhaustive: true - govet: - enable-all: true - disable: - # struct order is often for Win32 compat - # also, ignore pointer bytes/GC issues for now until performance becomes an issue - - fieldalignment - nolintlint: - require-explanation: true - require-specific: true - revive: - # revive is more configurable than static check, so likely the preferred alternative to static-check - # (once the perf issue is solved: https://github.com/golangci/golangci-lint/issues/2997) - enable-all-rules: - true + settings: + exhaustive: + default-signifies-exhaustive: true + gocritic: + disable-all: true + enabled-checks: + - nilValReturn + - sprintfQuotedString + govet: + enable-all: true + disable: + # struct order is often for Win32 compat + # also, ignore pointer bytes/GC issues for now until performance becomes an issue + - fieldalignment + nolintlint: + require-explanation: true + require-specific: true + revive: + # revive is more configurable than static check, so likely the preferred alternative to static-check + # (once the perf issue is solved: https://github.com/golangci/golangci-lint/issues/2997) + enable-all-rules: + true # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md - rules: - # rules with required arguments - - name: argument-limit - disabled: true - - name: banned-characters - disabled: true - - name: cognitive-complexity - disabled: true - - name: cyclomatic - disabled: true - - name: file-header - disabled: true - - name: function-length - disabled: true - - name: function-result-limit - disabled: true - - name: max-public-structs - disabled: true - # geneally annoying rules - - name: add-constant # complains about any and all strings and integers - disabled: true - - name: confusing-naming # we frequently use "Foo()" and "foo()" together - disabled: true - - name: flag-parameter # excessive, and a common idiom we use - disabled: true - - name: unhandled-error # warns over common fmt.Print* and io.Close; rely on errcheck instead - disabled: true - # general config - - name: line-length-limit - arguments: - - 140 - - name: var-naming - arguments: - - [] - - - CID - - CRI - - CTRD - - DACL - - DLL - - DOS - - ETW - - FSCTL - - GCS - - GMSA - - HCS - - HV - - IO - - LCOW - - LDAP - - LPAC - - LTSC - - MMIO - - NT - - OCI - - PMEM - - PWSH - - RX - - SACl - - SID - - SMB - - TX - - VHD - - VHDX - - VMID - - VPCI - - WCOW - - WIM + rules: + # rules with required arguments + - name: argument-limit + disabled: true + - name: banned-characters + disabled: true + - name: cognitive-complexity + disabled: true + - name: cyclomatic + disabled: true + # covered by "exhaustive" linter + - name: enforce-switch-style + disabled: true + - name: file-header + disabled: true + - name: function-length + disabled: true + - name: function-result-limit + disabled: true + - name: max-public-structs + disabled: true + # generally annoying rules + - name: add-constant # complains about any and all strings and integers + disabled: true + - name: confusing-naming # we frequently use "Foo()" and "foo()" together + disabled: true + - name: flag-parameter # excessive, and a common idiom we use + disabled: true + - name: multiline-if-init # too opinionated; see https://github.com/microsoft/go-winio/pull/325#issuecomment-5822487436 + disabled: true + - name: unhandled-error # warns over common fmt.Print* and io.Close; rely on errcheck instead + disabled: true + # general config + - name: line-length-limit + arguments: + - 140 + - name: var-naming + arguments: + - [] + - - CID + - CRI + - CTRD + - DACL + - DLL + - DOS + - ETW + - FSCTL + - GCS + - GMSA + - HCS + - HV + - IO + - LCOW + - LDAP + - LPAC + - LTSC + - MMIO + - NT + - OCI + - PMEM + - PWSH + - RX + - SACl + - SID + - SMB + - TX + - VHD + - VHDX + - VMID + - VPCI + - WCOW + - WIM + staticcheck: + # Enable all options, with some exceptions. + # For defaults, see https://golangci-lint.run/usage/linters/#staticcheck + checks: + - all + - -QF1008 # Omit embedded fields from selector expression; https://staticcheck.dev/docs/checks/#QF1008 + - -ST1003 # Poorly chosen identifier; https://staticcheck.dev/docs/checks/#ST1003 diff --git a/vendor/github.com/Microsoft/go-winio/backup.go b/vendor/github.com/Microsoft/go-winio/backup.go index b54341daac..37055fa6a9 100644 --- a/vendor/github.com/Microsoft/go-winio/backup.go +++ b/vendor/github.com/Microsoft/go-winio/backup.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio @@ -36,7 +35,7 @@ const ( StreamSparseAttributes = uint32(8) ) -//nolint:revive // var-naming: ALL_CAPS +//nolint:revive,nolintlint // var-naming: ALL_CAPS const ( WRITE_DAC = windows.WRITE_DAC WRITE_OWNER = windows.WRITE_OWNER diff --git a/vendor/github.com/Microsoft/go-winio/backuptar/strconv.go b/vendor/github.com/Microsoft/go-winio/backuptar/strconv.go index 455fd798eb..67389fa337 100644 --- a/vendor/github.com/Microsoft/go-winio/backuptar/strconv.go +++ b/vendor/github.com/Microsoft/go-winio/backuptar/strconv.go @@ -22,8 +22,8 @@ func parsePAXTime(s string) (time.Time, error) { // Split string into seconds and sub-seconds parts. ss, sn := s, "" - if pos := strings.IndexByte(s, '.'); pos >= 0 { - ss, sn = s[:pos], s[pos+1:] + if before, after, ok := strings.Cut(s, "."); ok { + ss, sn = before, after } // Parse the seconds. diff --git a/vendor/github.com/Microsoft/go-winio/backuptar/tar.go b/vendor/github.com/Microsoft/go-winio/backuptar/tar.go index 7f852bbf81..43aebb0f93 100644 --- a/vendor/github.com/Microsoft/go-winio/backuptar/tar.go +++ b/vendor/github.com/Microsoft/go-winio/backuptar/tar.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package backuptar @@ -17,7 +16,6 @@ import ( "golang.org/x/sys/windows" ) -//nolint:deadcode,varcheck // keep unused constants for potential future use const ( cISUID = 0004000 // Set uid cISGID = 0002000 // Set gid @@ -212,7 +210,7 @@ func WriteTarFileFromBackupStream(t *tar.Writer, r io.Reader, name string, size if err != nil { return err } - switch bhdr.Id { + switch bhdr.Id { //nolint:revive // ignore "switch" with identical branches. case winio.BackupData: hdr.Mode |= cISREG if !readTwice { @@ -256,6 +254,8 @@ func WriteTarFileFromBackupStream(t *tar.Writer, r io.Reader, name string, size case winio.BackupAlternateData, winio.BackupLink, winio.BackupPropertyData, winio.BackupObjectId, winio.BackupTxfsData: // ignore these streams + case winio.BackupSparseBlock: + // Skip sparse content during the metadata scan; copySparse handles it in the data pass. default: return fmt.Errorf("%s: unknown stream ID %d", name, bhdr.Id) } @@ -338,7 +338,7 @@ func WriteTarFileFromBackupStream(t *tar.Writer, r io.Reader, name string, size if err != nil { return err } - switch bhdr.Id { + switch bhdr.Id { //nolint:revive // ignore "switch" with identical branches. case winio.BackupAlternateData: if (bhdr.Attributes & winio.StreamSparseAttributes) != 0 { // Unsupported for now, since the size of the alternate stream is not present @@ -366,6 +366,8 @@ func WriteTarFileFromBackupStream(t *tar.Writer, r io.Reader, name string, size } case winio.BackupEaData, winio.BackupLink, winio.BackupPropertyData, winio.BackupObjectId, winio.BackupTxfsData: // ignore these streams + case winio.BackupSparseBlock: + // Empty sparse files skip copySparse and may leave a zero-size, zero-offset terminator. default: return fmt.Errorf("%s: unknown stream ID %d after data", name, bhdr.Id) } diff --git a/vendor/github.com/Microsoft/go-winio/ea.go b/vendor/github.com/Microsoft/go-winio/ea.go index e104dbdfdf..00a4bd96c8 100644 --- a/vendor/github.com/Microsoft/go-winio/ea.go +++ b/vendor/github.com/Microsoft/go-winio/ea.go @@ -95,7 +95,7 @@ func writeEa(buf *bytes.Buffer, ea *ExtendedAttribute, last bool) error { return err } - _, err = buf.Write([]byte(ea.Name)) + _, err = buf.WriteString(ea.Name) if err != nil { return err } diff --git a/vendor/github.com/Microsoft/go-winio/file.go b/vendor/github.com/Microsoft/go-winio/file.go index fe82a180db..19c5f8940e 100644 --- a/vendor/github.com/Microsoft/go-winio/file.go +++ b/vendor/github.com/Microsoft/go-winio/file.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio @@ -235,12 +234,17 @@ func (f *win32File) Read(b []byte) (int, error) { runtime.KeepAlive(b) // Handle EOF conditions. - if err == nil && n == 0 && len(b) != 0 { - return 0, io.EOF - } else if err == windows.ERROR_BROKEN_PIPE { //nolint:errorlint // err is Errno + switch err { + case windows.ERROR_BROKEN_PIPE: //nolint:errorlint // err is Errno return 0, io.EOF + case nil: + if n == 0 && len(b) != 0 { + return 0, io.EOF + } + return n, nil + default: + return n, err } - return n, err } // Write writes to a file handle. diff --git a/vendor/github.com/Microsoft/go-winio/fileinfo.go b/vendor/github.com/Microsoft/go-winio/fileinfo.go index c860eb9917..01cd891e84 100644 --- a/vendor/github.com/Microsoft/go-winio/fileinfo.go +++ b/vendor/github.com/Microsoft/go-winio/fileinfo.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/vendor/github.com/Microsoft/go-winio/hvsock.go b/vendor/github.com/Microsoft/go-winio/hvsock.go index c4fdd9d4ae..d4960f5b0a 100644 --- a/vendor/github.com/Microsoft/go-winio/hvsock.go +++ b/vendor/github.com/Microsoft/go-winio/hvsock.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go b/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go index 0cd9621df7..f3bc2aeb8a 100644 --- a/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go +++ b/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go @@ -243,7 +243,7 @@ const ( // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew func GetFinalPathNameByHandle(h windows.Handle, flags GetFinalPathFlag) (string, error) { b := stringbuffer.NewWString() - //TODO: can loop infinitely if Win32 keeps returning the same (or a larger) n? + // TODO: can loop infinitely if Win32 keeps returning the same (or a larger) n? for { n, err := windows.GetFinalPathNameByHandle(h, b.Pointer(), b.Cap(), uint32(flags)) if err != nil { diff --git a/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go index a94e234c70..f7b27abfcc 100644 --- a/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go @@ -15,12 +15,8 @@ var _ unsafe.Pointer // Do the interface allocations only once for common // Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) + errERROR_IO_PENDING error = windows.ERROR_IO_PENDING errERROR_EINVAL error = syscall.EINVAL ) @@ -30,7 +26,7 @@ func errnoErr(e syscall.Errno) error { switch e { case 0: return errERROR_EINVAL - case errnoERROR_IO_PENDING: + case windows.ERROR_IO_PENDING: return errERROR_IO_PENDING } return e diff --git a/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go index e1504126aa..06e84da653 100644 --- a/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go @@ -15,12 +15,8 @@ var _ unsafe.Pointer // Do the interface allocations only once for common // Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) + errERROR_IO_PENDING error = windows.ERROR_IO_PENDING errERROR_EINVAL error = syscall.EINVAL ) @@ -30,7 +26,7 @@ func errnoErr(e syscall.Errno) error { switch e { case 0: return errERROR_EINVAL - case errnoERROR_IO_PENDING: + case windows.ERROR_IO_PENDING: return errERROR_IO_PENDING } return e diff --git a/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go b/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go index 42ebc019fc..2295408733 100644 --- a/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go +++ b/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go @@ -7,7 +7,7 @@ import ( // TODO: worth exporting and using in mkwinsyscall? -// Uint16BufferSize is the buffer size in the pool, chosen somewhat arbitrarily to accommodate +// MinWStringCap is the buffer size in the pool, chosen somewhat arbitrarily to accommodate // large path strings: // MAX_PATH (260) + size of volume GUID prefix (49) + null terminator = 310. const MinWStringCap = 310 @@ -16,7 +16,7 @@ const MinWStringCap = 310 // is copied to heap and then referenced via pointer in the interface header that sync.Pool // stores. var pathPool = sync.Pool{ // if go1.18+ adds Pool[T], use that to store []uint16 directly - New: func() interface{} { + New: func() any { b := make([]uint16, MinWStringCap) return &b }, diff --git a/vendor/github.com/Microsoft/go-winio/pipe.go b/vendor/github.com/Microsoft/go-winio/pipe.go index a2da6639d0..16a42584fc 100644 --- a/vendor/github.com/Microsoft/go-winio/pipe.go +++ b/vendor/github.com/Microsoft/go-winio/pipe.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio @@ -11,6 +10,7 @@ import ( "net" "os" "runtime" + "sync" "time" "unsafe" @@ -179,14 +179,15 @@ func (f *win32MessageBytePipe) Read(b []byte) (int, error) { return 0, io.EOF } n, err := f.win32File.Read(b) - if err == io.EOF { //nolint:errorlint + switch err { + case io.EOF: //nolint:errorlint // error is not wrapped. // If this was the result of a zero-byte read, then // it is possible that the read was due to a zero-size // message. Since we are simulating CloseWrite with a // zero-byte message, ensure that all future Read() calls // also return EOF. f.readEOF = true - } else if err == windows.ERROR_MORE_DATA { //nolint:errorlint // err is Errno + case windows.ERROR_MORE_DATA: // ERROR_MORE_DATA indicates that the pipe's read mode is message mode // and the message still has more bytes. Treat this as a success, since // this package presents all named pipes as byte streams. @@ -316,8 +317,9 @@ type win32PipeListener struct { path string config PipeConfig acceptCh chan (chan acceptResponse) - closeCh chan int - doneCh chan int + closeOnce sync.Once + closeCh chan struct{} // closed (never sent on) to broadcast listener shutdown + doneCh chan struct{} } func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (windows.Handle, error) { @@ -344,7 +346,7 @@ func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (wi // The security descriptor is only needed for the first pipe. if first { if sd != nil { - //todo: does `sdb` need to be allocated on the heap, or can go allocate it? + // todo: does `sdb` need to be allocated on the heap, or can go allocate it? l := uint32(len(sd)) sdb, err := windows.LocalAlloc(0, l) if err != nil { @@ -445,13 +447,14 @@ func (l *win32PipeListener) makeConnectedServerPipe() (*win32File, error) { p = nil } case <-l.closeCh: - // Abort the connect request by closing the handle. - p.Close() + // Abort the connect request by closing the handle. Listener closure is + // authoritative: ConnectNamedPipe may race the handle close and report a + // connection or error (e.g. ERROR_NO_DATA) instead of ErrFileClosed, and + // that result must not be surfaced or cause listenerRoutine to retry. + _ = p.Close() p = nil - err = <-ch - if err == nil || err == ErrFileClosed { //nolint:errorlint // err is Errno - err = ErrPipeListenerClosed - } + <-ch + err = ErrPipeListenerClosed } return p, err } @@ -530,8 +533,8 @@ func ListenPipe(path string, c *PipeConfig) (net.Listener, error) { path: path, config: *c, acceptCh: make(chan (chan acceptResponse)), - closeCh: make(chan int), - doneCh: make(chan int), + closeCh: make(chan struct{}), + doneCh: make(chan struct{}), } go l.listenerRoutine() return l, nil @@ -573,11 +576,10 @@ func (l *win32PipeListener) Accept() (net.Conn, error) { } func (l *win32PipeListener) Close() error { - select { - case l.closeCh <- 1: - <-l.doneCh - case <-l.doneCh: - } + l.closeOnce.Do(func() { + close(l.closeCh) + }) + <-l.doneCh return nil } diff --git a/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go b/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go index 7c7f145f44..346673ba82 100644 --- a/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go +++ b/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package bindfilter @@ -24,7 +23,7 @@ import ( // BfSetupFilter flags. See: // https://github.com/microsoft/BuildXL/blob/a6dce509f0d4f774255e5fbfb75fa6d5290ed163/Public/Src/Utilities/Native/Processes/Windows/NativeContainerUtilities.cs#L193-L240 // -//nolint:revive // var-naming: ALL_CAPS +//nolint:revive,nolintlint // var-naming: ALL_CAPS const ( BINDFLT_FLAG_READ_ONLY_MAPPING uint32 = 0x00000001 // Tells bindflt to fail mapping with STATUS_INVALID_PARAMETER if a mapping produces @@ -32,7 +31,7 @@ const ( BINDFLT_FLAG_NO_MULTIPLE_TARGETS uint32 = 0x00000040 ) -//nolint:revive // var-naming: ALL_CAPS +//nolint:revive,nolintlint // var-naming: ALL_CAPS const ( BINDFLT_GET_MAPPINGS_FLAG_VOLUME uint32 = 0x00000001 BINDFLT_GET_MAPPINGS_FLAG_SILO uint32 = 0x00000002 @@ -109,7 +108,7 @@ func GetBindMappings(volumePath string) ([]BindMapping, error) { } if outBuffSize < 12 { - return nil, fmt.Errorf("invalid buffer returned") + return nil, errors.New("invalid buffer returned") } result := buf[:outBuffSize] @@ -132,7 +131,7 @@ func GetBindMappings(volumePath string) ([]BindMapping, error) { mappings := unsafe.Slice(mappingsPointer, header.MappingCount) mappingEntries := make([]BindMapping, header.MappingCount) - for i := 0; i < int(header.MappingCount); i++ { + for i := range int(header.MappingCount) { bindMapping, err := getBindMappingFromBuffer(result, mappings[i]) if err != nil { return nil, fmt.Errorf("fetching bind mappings: %w", err) @@ -185,15 +184,15 @@ func decodeEntry(buffer []byte) (string, error) { func getTargetsFromBuffer(buffer []byte, offset, count int) ([]string, error) { if len(buffer) < offset+count*6 { - return nil, fmt.Errorf("invalid buffer") + return nil, errors.New("invalid buffer") } targets := make([]string, count) - for i := 0; i < count; i++ { + for i := range count { entryBuf := buffer[offset+i*8 : offset+i*8+8] tgt := *(*mappingTargetEntry)(unsafe.Pointer(&entryBuf[0])) if len(buffer) < int(tgt.TargetRootOffset)+int(tgt.TargetRootLength) { - return nil, fmt.Errorf("invalid buffer") + return nil, errors.New("invalid buffer") } decoded, err := decodeEntry(buffer[tgt.TargetRootOffset : tgt.TargetRootOffset+tgt.TargetRootLength]) if err != nil { @@ -259,7 +258,7 @@ func getFinalPath(pth string) (string, error) { func getBindMappingFromBuffer(buffer []byte, entry mappingEntry) (BindMapping, error) { if len(buffer) < int(entry.VirtRootOffset)+int(entry.VirtRootLength) { - return BindMapping{}, fmt.Errorf("invalid buffer") + return BindMapping{}, errors.New("invalid buffer") } src, err := decodeEntry(buffer[entry.VirtRootOffset : entry.VirtRootOffset+entry.VirtRootLength]) diff --git a/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go index 1da9b3f3b4..22ad45a40b 100644 --- a/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go @@ -15,12 +15,8 @@ var _ unsafe.Pointer // Do the interface allocations only once for common // Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) + errERROR_IO_PENDING error = windows.ERROR_IO_PENDING errERROR_EINVAL error = syscall.EINVAL ) @@ -30,7 +26,7 @@ func errnoErr(e syscall.Errno) error { switch e { case 0: return errERROR_EINVAL - case errnoERROR_IO_PENDING: + case windows.ERROR_IO_PENDING: return errERROR_IO_PENDING } return e diff --git a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go index 48ce4e9243..fa1bde3a90 100644 --- a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go +++ b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go @@ -14,7 +14,7 @@ import ( "strconv" ) -//go:generate go run golang.org/x/tools/cmd/stringer -type=Variant -trimprefix=Variant -linecomment +//go:generate go tool stringer -type=Variant -trimprefix=Variant -linecomment // Variant specifies which GUID variant (or "type") of the GUID. It determines // how the entirety of the rest of the GUID is interpreted. diff --git a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go index 805bd35484..b933821a54 100644 --- a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go +++ b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows package guid diff --git a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go index 27e45ee5cc..4aa95a7068 100644 --- a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go +++ b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package guid diff --git a/vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go b/vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go index 4076d3132f..76e387d111 100644 --- a/vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go +++ b/vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go @@ -20,8 +20,9 @@ const _Variant_name = "UnknownNCSRFC 4122MicrosoftFuture" var _Variant_index = [...]uint8{0, 7, 10, 18, 27, 33} func (i Variant) String() string { - if i >= Variant(len(_Variant_index)-1) { + idx := int(i) - 0 + if i < 0 || idx >= len(_Variant_index)-1 { return "Variant(" + strconv.FormatInt(int64(i), 10) + ")" } - return _Variant_name[_Variant_index[i]:_Variant_index[i+1]] + return _Variant_name[_Variant_index[idx]:_Variant_index[idx+1]] } diff --git a/vendor/github.com/Microsoft/go-winio/privilege.go b/vendor/github.com/Microsoft/go-winio/privilege.go index d9b90b6e86..747eefd326 100644 --- a/vendor/github.com/Microsoft/go-winio/privilege.go +++ b/vendor/github.com/Microsoft/go-winio/privilege.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/vendor/github.com/Microsoft/go-winio/reparse.go b/vendor/github.com/Microsoft/go-winio/reparse.go index 67d1a104a6..9847fbd6c5 100644 --- a/vendor/github.com/Microsoft/go-winio/reparse.go +++ b/vendor/github.com/Microsoft/go-winio/reparse.go @@ -1,11 +1,11 @@ //go:build windows -// +build windows package winio import ( "bytes" "encoding/binary" + "errors" "fmt" "strings" "unicode/utf16" @@ -15,6 +15,9 @@ import ( const ( reparseTagMountPoint = 0xA0000003 reparseTagSymlink = 0xA000000C + reparseTagLxSymlink = 0xA000001D // WSL/MSYS2 native symlinks + + lxSymlinkVersion = 2 // LX symlink format version ) type reparseDataBuffer struct { @@ -31,6 +34,7 @@ type reparseDataBuffer struct { type ReparsePoint struct { Target string IsMountPoint bool + IsLxSymlink bool // True if this is an LX symlink (WSL/MSYS2 native) } // UnsupportedReparsePointError is returned when trying to decode a non-symlink or @@ -51,14 +55,19 @@ func DecodeReparsePoint(b []byte) (*ReparsePoint, error) { } func DecodeReparsePointData(tag uint32, b []byte) (*ReparsePoint, error) { - isMountPoint := false switch tag { case reparseTagMountPoint: - isMountPoint = true + return decodeWindowsReparsePointData(b, true) case reparseTagSymlink: + return decodeWindowsReparsePointData(b, false) + case reparseTagLxSymlink: + return decodeLxReparsePointData(b) default: return nil, &UnsupportedReparsePointError{tag} } +} + +func decodeWindowsReparsePointData(b []byte, isMountPoint bool) (*ReparsePoint, error) { nameOffset := 8 + binary.LittleEndian.Uint16(b[4:6]) if !isMountPoint { nameOffset += 4 @@ -69,16 +78,56 @@ func DecodeReparsePointData(tag uint32, b []byte) (*ReparsePoint, error) { if err != nil { return nil, err } - return &ReparsePoint{string(utf16.Decode(name)), isMountPoint}, nil + return &ReparsePoint{Target: string(utf16.Decode(name)), IsMountPoint: isMountPoint, IsLxSymlink: false}, nil +} + +func decodeLxReparsePointData(b []byte) (*ReparsePoint, error) { + // LX symlinks store the target as UTF-8 after a 4-byte version field + if len(b) < 4 { + return nil, errors.New("LX symlink buffer too short") + } + targetBytes := b[4:] + for i, c := range targetBytes { + if c == 0 { + targetBytes = targetBytes[:i] + break + } + } + target := string(targetBytes) + return &ReparsePoint{Target: target, IsMountPoint: false, IsLxSymlink: true}, nil } func isDriveLetter(c byte) bool { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') } -// EncodeReparsePoint encodes a Win32 REPARSE_DATA_BUFFER structure describing a symlink or -// mount point. +// EncodeReparsePoint encodes a Win32 REPARSE_DATA_BUFFER structure describing a symlink, +// mount point, or LX symlink. func EncodeReparsePoint(rp *ReparsePoint) []byte { + if rp == nil { + return nil + } + if rp.IsLxSymlink { + return encodeLxReparsePoint(rp) + } + return encodeWindowsReparsePoint(rp) +} + +func encodeLxReparsePoint(rp *ReparsePoint) []byte { + // LX symlink: 4-byte version + UTF-8 target + targetBytes := []byte(rp.Target) + dataLength := 4 + len(targetBytes) + + var b bytes.Buffer + _ = binary.Write(&b, binary.LittleEndian, uint32(reparseTagLxSymlink)) + _ = binary.Write(&b, binary.LittleEndian, uint16(dataLength)) + _ = binary.Write(&b, binary.LittleEndian, uint16(0)) + _ = binary.Write(&b, binary.LittleEndian, uint32(lxSymlinkVersion)) + _, _ = b.Write(targetBytes) + return b.Bytes() +} + +func encodeWindowsReparsePoint(rp *ReparsePoint) []byte { // Generate an NT path and determine if this is a relative path. var ntTarget string relative := false diff --git a/vendor/github.com/Microsoft/go-winio/sd.go b/vendor/github.com/Microsoft/go-winio/sd.go index c3685e98e1..7834c6adcb 100644 --- a/vendor/github.com/Microsoft/go-winio/sd.go +++ b/vendor/github.com/Microsoft/go-winio/sd.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package winio diff --git a/vendor/github.com/Microsoft/go-winio/vhd/vhd.go b/vendor/github.com/Microsoft/go-winio/vhd/vhd.go index b54cad1127..7305cb8879 100644 --- a/vendor/github.com/Microsoft/go-winio/vhd/vhd.go +++ b/vendor/github.com/Microsoft/go-winio/vhd/vhd.go @@ -1,11 +1,14 @@ //go:build windows -// +build windows package vhd import ( + "bytes" + "encoding/binary" "fmt" + "strings" "syscall" + "unsafe" "github.com/Microsoft/go-winio/pkg/guid" "golang.org/x/sys/windows" @@ -18,6 +21,8 @@ import ( //sys attachVirtualDisk(handle syscall.Handle, securityDescriptor *uintptr, attachVirtualDiskFlag uint32, providerSpecificFlags uint32, parameters *AttachVirtualDiskParameters, overlapped *syscall.Overlapped) (win32err error) = virtdisk.AttachVirtualDisk //sys detachVirtualDisk(handle syscall.Handle, detachVirtualDiskFlags uint32, providerSpecificFlags uint32) (win32err error) = virtdisk.DetachVirtualDisk //sys getVirtualDiskPhysicalPath(handle syscall.Handle, diskPathSizeInBytes *uint32, buffer *uint16) (win32err error) = virtdisk.GetVirtualDiskPhysicalPath +//sys getVirtualDiskInformation(handle syscall.Handle, bufferSize *uint32, info *virtualDiskInfo, sizeUsed *uint32) (win32err error) = virtdisk.GetVirtualDiskInformation +//sys setVirtualDiskInformation(handle syscall.Handle, info *virtualDiskInfo) (win32err error) = virtdisk.SetVirtualDiskInformation type ( CreateVirtualDiskFlag uint32 @@ -86,6 +91,20 @@ type AttachVirtualDiskParameters struct { Version2 AttachVersion2 } +// `virtualDiskInfo` struct is used to represent both GET_VIRTUAL_DISK_INFO +// (https://learn.microsoft.com/en-us/windows/win32/api/virtdisk/ns-virtdisk-get_virtual_disk_info) +// and SET_VIRTUAL_DISK_INFO +// (https://learn.microsoft.com/en-us/windows/win32/api/virtdisk/ns-virtdisk-set_virtual_disk_info) +// win32 types. Both of these win32 types have the same size and a very similar +// structure. These types use tagged unions which aren't directly supported in Go, so we +// keep this type unexported, and provide a cleaner interface to our callers by parsing +// the data buffer for the right type. +type virtualDiskInfo struct { + version uint32 + _ [4]byte // padding + data [24]byte // union of various types +} + const ( //revive:disable-next-line:var-naming ALL_CAPS VIRTUAL_STORAGE_TYPE_DEVICE_VHDX = 0x3 @@ -143,6 +162,34 @@ const ( // Flags for detaching a VHD. DetachVirtualDiskFlagNone DetachVirtualDiskFlag = 0x0 + + // Flags for setting information about a VHD - these should remain unexported as we provide APIs to directly get/set a particular field. + setVirtualDiskInfoUnspecified uint32 = 0x0 + setVirtualDiskInfoParentPath uint32 = 0x1 + setVirtualDiskInfoIdentifier uint32 = 0x2 + setVirtualDiskInfoParentPathWithDepth uint32 = 0x3 + setVirtualDiskInfoPhysicalSectorSize uint32 = 0x4 + setVirtualDiskInfoVirtualDiskID uint32 = 0x5 + setVirtualDiskInfoChangeTrackingState uint32 = 0x6 + setVirtualDiskInfoParentLocator uint32 = 0x7 + + // Flags for getting information about a VHD - these should remain unexported as we provide APIs to directly get/set a particular field. + getVirtualDiskInfoUnspecified uint32 = 0x0 + getVirtualDiskInfoSize uint32 = 0x1 + getVirtualDiskInfoIdentifier uint32 = 0x2 + getVirtualDiskInfoParentLocation uint32 = 0x3 + getVirtualDiskInfoParentIdentifier uint32 = 0x4 + getVirtualDiskInfoParentTimestamp uint32 = 0x5 + getVirtualDiskInfoVirtualStorageType uint32 = 0x6 + getVirtualDiskInfoProviderSubtype uint32 = 0x7 + getVirtualDiskInfoIs4kAligned uint32 = 0x8 + getVirtualDiskInfoPhysicalDisk uint32 = 0x9 + getVirtualDiskInfoVHDPhysicalSectorSize uint32 = 0xA + getVirtualDiskInfoSmallestSafeVirtualSize uint32 = 0xB + getVirtualDiskInfoFragmentation uint32 = 0xC + getVirtualDiskInfoIsLoaded uint32 = 0xD + getVirtualDiskInfoVirtualDiskID uint32 = 0xE + getVirtualDiskInfoChangeTrackingState uint32 = 0xF ) // CreateVhdx is a helper function to create a simple vhdx file at the given path using @@ -375,3 +422,60 @@ func CreateDiffVhd(diffVhdPath, baseVhdPath string, blockSizeInMB uint32) error } return nil } + +// SetVirtualDiskIdentifier sets the virtual disk identifier for the specified virtual disk. +func SetVirtualDiskIdentifier(vhdPath string, identifier guid.GUID) error { + handle, err := OpenVirtualDisk(vhdPath, VirtualDiskAccessNone, OpenVirtualDiskFlagNone) + if err != nil { + return fmt.Errorf("failed to open %s: %w", vhdPath, err) + } + defer syscall.Close(handle) + + info := &virtualDiskInfo{ + version: setVirtualDiskInfoIdentifier, + } + if strings.HasSuffix(vhdPath, ".vhdx") { + // VHDx requires a different version to set disk id + info.version = setVirtualDiskInfoVirtualDiskID + } + + if _, err := binary.Encode(info.data[:], binary.LittleEndian, identifier); err != nil { + return fmt.Errorf("failed to serialize virtual disk identifier: %w", err) + } + + if err := setVirtualDiskInformation(handle, info); err != nil { + return fmt.Errorf("failed to set virtual disk identifier: %w", err) + } + return nil +} + +// GetVirtualDiskIdentifier retrieves the virtual disk identifier for the specified virtual disk. +func GetVirtualDiskIdentifier(vhdPath string) (guid.GUID, error) { + handle, err := OpenVirtualDisk(vhdPath, VirtualDiskAccessNone, OpenVirtualDiskFlagNone) + if err != nil { + return guid.GUID{}, fmt.Errorf("failed to open %s: %w", vhdPath, err) + } + defer syscall.Close(handle) + + info := &virtualDiskInfo{ + version: getVirtualDiskInfoIdentifier, + } + if strings.HasSuffix(vhdPath, ".vhdx") { + // VHDx requires a different version to get disk id + info.version = getVirtualDiskInfoVirtualDiskID + } + + var sizeUsed uint32 + bufferSize := uint32(unsafe.Sizeof(*info)) + if err := getVirtualDiskInformation(handle, &bufferSize, info, &sizeUsed); err != nil { + return guid.GUID{}, fmt.Errorf("failed to get virtual disk identifier: %w", err) + } + + // Parse the response + id := &guid.GUID{} + reader := bytes.NewReader(info.data[:]) + if err := binary.Read(reader, binary.LittleEndian, id); err != nil { + return guid.GUID{}, fmt.Errorf("failed to parse virtual disk identifier: %w", err) + } + return *id, nil +} diff --git a/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go b/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go index 95c0407433..bcd753b8b9 100644 --- a/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go +++ b/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go @@ -15,12 +15,8 @@ var _ unsafe.Pointer // Do the interface allocations only once for common // Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) + errERROR_IO_PENDING error = windows.ERROR_IO_PENDING errERROR_EINVAL error = syscall.EINVAL ) @@ -30,7 +26,7 @@ func errnoErr(e syscall.Errno) error { switch e { case 0: return errERROR_EINVAL - case errnoERROR_IO_PENDING: + case windows.ERROR_IO_PENDING: return errERROR_IO_PENDING } return e @@ -42,8 +38,10 @@ var ( procAttachVirtualDisk = modvirtdisk.NewProc("AttachVirtualDisk") procCreateVirtualDisk = modvirtdisk.NewProc("CreateVirtualDisk") procDetachVirtualDisk = modvirtdisk.NewProc("DetachVirtualDisk") + procGetVirtualDiskInformation = modvirtdisk.NewProc("GetVirtualDiskInformation") procGetVirtualDiskPhysicalPath = modvirtdisk.NewProc("GetVirtualDiskPhysicalPath") procOpenVirtualDisk = modvirtdisk.NewProc("OpenVirtualDisk") + procSetVirtualDiskInformation = modvirtdisk.NewProc("SetVirtualDiskInformation") ) func attachVirtualDisk(handle syscall.Handle, securityDescriptor *uintptr, attachVirtualDiskFlag uint32, providerSpecificFlags uint32, parameters *AttachVirtualDiskParameters, overlapped *syscall.Overlapped) (win32err error) { @@ -79,6 +77,14 @@ func detachVirtualDisk(handle syscall.Handle, detachVirtualDiskFlags uint32, pro return } +func getVirtualDiskInformation(handle syscall.Handle, bufferSize *uint32, info *virtualDiskInfo, sizeUsed *uint32) (win32err error) { + r0, _, _ := syscall.SyscallN(procGetVirtualDiskInformation.Addr(), uintptr(handle), uintptr(unsafe.Pointer(bufferSize)), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(sizeUsed))) + if r0 != 0 { + win32err = syscall.Errno(r0) + } + return +} + func getVirtualDiskPhysicalPath(handle syscall.Handle, diskPathSizeInBytes *uint32, buffer *uint16) (win32err error) { r0, _, _ := syscall.SyscallN(procGetVirtualDiskPhysicalPath.Addr(), uintptr(handle), uintptr(unsafe.Pointer(diskPathSizeInBytes)), uintptr(unsafe.Pointer(buffer))) if r0 != 0 { @@ -103,3 +109,11 @@ func _openVirtualDisk(virtualStorageType *VirtualStorageType, path *uint16, virt } return } + +func setVirtualDiskInformation(handle syscall.Handle, info *virtualDiskInfo) (win32err error) { + r0, _, _ := syscall.SyscallN(procSetVirtualDiskInformation.Addr(), uintptr(handle), uintptr(unsafe.Pointer(info))) + if r0 != 0 { + win32err = syscall.Errno(r0) + } + return +} diff --git a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go index 89b66eda8c..f4329bbfd6 100644 --- a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go +++ b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go @@ -15,12 +15,8 @@ var _ unsafe.Pointer // Do the interface allocations only once for common // Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) + errERROR_IO_PENDING error = windows.ERROR_IO_PENDING errERROR_EINVAL error = syscall.EINVAL ) @@ -30,7 +26,7 @@ func errnoErr(e syscall.Errno) error { switch e { case 0: return errERROR_EINVAL - case errnoERROR_IO_PENDING: + case windows.ERROR_IO_PENDING: return errERROR_IO_PENDING } return e diff --git a/vendor/github.com/docker/cli/cli/config/config.go b/vendor/github.com/docker/cli/cli/config/config.go index 5a63780509..a7ea0acdd7 100644 --- a/vendor/github.com/docker/cli/cli/config/config.go +++ b/vendor/github.com/docker/cli/cli/config/config.go @@ -7,7 +7,6 @@ import ( "os/user" "path/filepath" "runtime" - "strings" "sync" "github.com/docker/cli/cli/config/configfile" @@ -98,9 +97,11 @@ func SetDir(dir string) { // Path returns the path to a file relative to the config dir func Path(p ...string) (string, error) { - path := filepath.Join(append([]string{Dir()}, p...)...) - if !strings.HasPrefix(path, Dir()+string(filepath.Separator)) { - return "", fmt.Errorf("path %q is outside of root config directory %q", path, Dir()) + root := Dir() + path := filepath.Join(append([]string{root}, p...)...) + + if rel, err := filepath.Rel(root, path); err != nil || !filepath.IsLocal(rel) { + return "", fmt.Errorf("path %q is outside of root config directory %q", path, root) } return path, nil } diff --git a/vendor/github.com/docker/cli/cli/config/configfile/file.go b/vendor/github.com/docker/cli/cli/config/configfile/file.go index 26e148f059..e32b1e767c 100644 --- a/vendor/github.com/docker/cli/cli/config/configfile/file.go +++ b/vendor/github.com/docker/cli/cli/config/configfile/file.go @@ -1,5 +1,5 @@ // FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16: -//go:build go1.25 +//go:build go1.26 package configfile @@ -232,8 +232,7 @@ func (c *ConfigFile) Save() (retErr error) { cfgFile = f } else if os.IsNotExist(err) { // extract the path from the error if the configfile does not exist or is a dangling symlink - var pathError *os.PathError - if errors.As(err, &pathError) { + if pathError, ok := errors.AsType[*os.PathError](err); ok { cfgFile = pathError.Path } } diff --git a/vendor/github.com/docker/cli/cli/config/memorystore/store.go b/vendor/github.com/docker/cli/cli/config/memorystore/store.go index 44523d392b..da1e94f416 100644 --- a/vendor/github.com/docker/cli/cli/config/memorystore/store.go +++ b/vendor/github.com/docker/cli/cli/config/memorystore/store.go @@ -1,5 +1,5 @@ // FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16: -//go:build go1.25 +//go:build go1.26 package memorystore diff --git a/vendor/github.com/google/cel-go/cel/BUILD.bazel b/vendor/github.com/google/cel-go/cel/BUILD.bazel index 46cb26d625..62a56036a0 100644 --- a/vendor/github.com/google/cel-go/cel/BUILD.bazel +++ b/vendor/github.com/google/cel-go/cel/BUILD.bazel @@ -26,6 +26,7 @@ go_library( importpath = "github.com/google/cel-go/cel", visibility = ["//visibility:public"], deps = [ + "//cel/async:go_default_library", "//checker:go_default_library", "//checker/decls:go_default_library", "//common:go_default_library", @@ -70,6 +71,7 @@ go_test( "inlining_test.go", "io_test.go", "optimizer_test.go", + "program_async_test.go", "prompt_test.go", "validator_test.go", ], @@ -84,6 +86,7 @@ go_test( "//cel/testdata:test_fds_with_source_info", ], deps = [ + "//cel/async:go_default_library", "//common/operators:go_default_library", "//common/overloads:go_default_library", "//common/types:go_default_library", diff --git a/vendor/github.com/google/cel-go/cel/async/BUILD.bazel b/vendor/github.com/google/cel-go/cel/async/BUILD.bazel new file mode 100644 index 0000000000..85b28bcdb5 --- /dev/null +++ b/vendor/github.com/google/cel-go/cel/async/BUILD.bazel @@ -0,0 +1,35 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +package( + licenses = ["notice"], # Apache 2.0 +) + +go_library( + name = "go_default_library", + srcs = [ + "async.go", + ], + importpath = "github.com/google/cel-go/cel/async", + visibility = ["//visibility:public"], + deps = [ + "//common/decls:go_default_library", + "//common/functions:go_default_library", + "//common/types:go_default_library", + "//common/types/ref:go_default_library", + "//interpreter:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = [ + "async_test.go", + ], + deps = [ + ":go_default_library", + "//common/decls:go_default_library", + "//common/functions:go_default_library", + "//common/types:go_default_library", + "//common/types/ref:go_default_library", + ], +) diff --git a/vendor/github.com/google/cel-go/cel/async/async.go b/vendor/github.com/google/cel-go/cel/async/async.go new file mode 100644 index 0000000000..a011114bdc --- /dev/null +++ b/vendor/github.com/google/cel-go/cel/async/async.go @@ -0,0 +1,235 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package async provides helpers for configuring and executing asynchronous CEL functions, +// including drain strategies, retry, timeout, concurrency limiting, and caching wrappers. +package async + +import ( + "context" + "errors" + "time" + + "github.com/google/cel-go/common/decls" + "github.com/google/cel-go/common/functions" + "github.com/google/cel-go/common/types" + "github.com/google/cel-go/common/types/ref" + "github.com/google/cel-go/interpreter" +) + +// Call describes a pending or completed asynchronous function call. +// This interface exposes a safe, read-only view of the internal interpreter state. +type Call = interpreter.AsyncCall + +// Observer provides callbacks for monitoring the lifecycle of asynchronous function calls. +// +// Implementations must be safe for concurrent use: the start and finish callbacks run on different +// goroutines, and finish callbacks for distinct calls may run concurrently. See +// interpreter.AsyncObserver for details. +type Observer = interpreter.AsyncObserver + +// BlockingOp is a blocking asynchronous function operation. +type BlockingOp = functions.BlockingAsyncOp + +// DrainAction dictates what ConcurrentEval should do after inspecting completions. +type DrainAction struct { + // Reevaluate indicates that the AST should be re-evaluated immediately. + // If true, WaitDuration is ignored. + Reevaluate bool + // WaitDuration indicates how long the evaluator should wait for additional + // completions before deciding to re-evaluate. A duration of 0 means wait + // indefinitely (block on the next completion). + WaitDuration time.Duration +} + +// DrainStrategy controls when ConcurrentEval re-evaluates after async completions. +// +// The evaluator consults the strategy each time a completion is received. +type DrainStrategy interface { + // NextAction evaluates the current state of asynchronous evaluation and + // determines the next step. + // + // - completed: The set of completions accumulated in the current batch. + // - active: The number of async calls currently launched but unresolved. + NextAction(completed []Call, active int) DrainAction +} + +// DrainNone returns a strategy that re-evaluates after every single completion. +// This is the default strategy. +func DrainNone() DrainStrategy { + return drainNone{} +} + +type drainNone struct{} + +func (drainNone) NextAction(completed []Call, active int) DrainAction { + return DrainAction{Reevaluate: active == 0 || len(completed) > 0} +} + +// DrainReady returns a strategy that waits for a short duration after the first +// completion to batch any other functions that complete at roughly the same time. +func DrainReady(debounce time.Duration) DrainStrategy { + return drainReady{debounce: debounce} +} + +type drainReady struct { + debounce time.Duration +} + +func (d drainReady) NextAction(completed []Call, active int) DrainAction { + if active == 0 { + return DrainAction{Reevaluate: true} // Nothing left to wait for + } + if len(completed) == 0 { + return DrainAction{Reevaluate: false, WaitDuration: 0} // Wait indefinitely for first + } + return DrainAction{Reevaluate: false, WaitDuration: d.debounce} // Wait for debounce period +} + +// DrainAll returns a strategy that waits for all currently pending calls to +// complete before re-evaluating. +// +// Note: This strategy is optimal for independent async calls, but will over-wait +// if some calls depend on the results of others. +func DrainAll() DrainStrategy { + return drainAll{} +} + +type drainAll struct{} + +func (drainAll) NextAction(completed []Call, active int) DrainAction { + return DrainAction{Reevaluate: active == 0} +} + +// Timeout wraps a BlockingAsyncOp with a per-call timeout. +// +// The timeout is enforced even when the wrapped function ignores its context: the function runs on +// its own goroutine and Timeout selects on the deadline, returning a timeout error when it +// fires. A function that ignores cancellation cannot be forcibly stopped (Go cannot kill a +// goroutine), so its goroutine continues running in the background until it returns on its own; +// only its result is abandoned. This is the recommended way to bound functions that may hang or +// are not under the caller's control. The extra goroutine is incurred only by Timeout-wrapped +// calls, not by async evaluation in general. +func Timeout(fn functions.BlockingAsyncOp, timeout time.Duration) functions.BlockingAsyncOp { + return func(ctx context.Context, args ...ref.Val) ref.Val { + tCtx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() + resCh := make(chan ref.Val, 1) + go func() { resCh <- fn(tCtx, args...) }() + select { + case res := <-resCh: + return res + case <-tCtx.Done(): + return types.NewErr("operation timed out after %v: %v", timeout, tCtx.Err()) + } + } +} + +// TimeoutBinding wraps a BlockingAsyncOp with a per-call timeout and returns an OverloadOpt. +func TimeoutBinding(fn functions.BlockingAsyncOp, timeout time.Duration) decls.OverloadOpt { + return decls.AsyncBinding(Timeout(fn, timeout)) +} + +// RetryOption configures the behavior of RetryBinding. +type RetryOption func(*retryConfig) + +type retryConfig struct { + maxAttempts int + backoff time.Duration +} + +// RetryAttempts sets the maximum number of attempts (including the first one). +func RetryAttempts(attempts int) RetryOption { + return func(c *retryConfig) { + c.maxAttempts = attempts + } +} + +// RetryBackoff sets the fixed backoff duration between attempts. +func RetryBackoff(backoff time.Duration) RetryOption { + return func(c *retryConfig) { + c.backoff = backoff + } +} + +// RetryableError is an interface that errors can implement to signal whether they are retryable. +type RetryableError interface { + error + IsRetryable() bool +} + +// Retry wraps a BlockingAsyncOp with a retry policy. +// It will retry the operation if it returns a types.Err that wraps a RetryableError returning true for IsRetryable. +func Retry(fn functions.BlockingAsyncOp, opts ...RetryOption) functions.BlockingAsyncOp { + config := &retryConfig{ + maxAttempts: 3, + backoff: 100 * time.Millisecond, + } + for _, opt := range opts { + opt(config) + } + + return func(ctx context.Context, args ...ref.Val) ref.Val { + var lastErr ref.Val + var backoff *time.Timer + defer func() { + if backoff != nil { + backoff.Stop() + } + }() + for i := 0; i < config.maxAttempts; i++ { + if i > 0 { + // Reuse a single timer across attempts and stop it on cancellation so the + // pending timer is not left to fire after the call returns. + if backoff == nil { + backoff = time.NewTimer(config.backoff) + } else { + backoff.Reset(config.backoff) + } + select { + case <-backoff.C: + case <-ctx.Done(): + backoff.Stop() + return types.NewErr("operation cancelled during retry: %v", ctx.Err()) + } + } + + res := fn(ctx, args...) + if !types.IsError(res) { + return res + } + + err := res.(*types.Err) + lastErr = res + + if !isRetryable(err) { + return res + } + } + return lastErr + } +} + +// RetryBinding wraps a BlockingAsyncOp with a retry policy and returns an OverloadOpt. +func RetryBinding(fn functions.BlockingAsyncOp, opts ...RetryOption) decls.OverloadOpt { + return decls.AsyncBinding(Retry(fn, opts...)) +} + +func isRetryable(err *types.Err) bool { + var re RetryableError + if errors.As(err, &re) { + return re.IsRetryable() + } + return false +} diff --git a/vendor/github.com/google/cel-go/cel/cel.go b/vendor/github.com/google/cel-go/cel/cel.go index eb5a9f4cc5..9ba957a7e3 100644 --- a/vendor/github.com/google/cel-go/cel/cel.go +++ b/vendor/github.com/google/cel-go/cel/cel.go @@ -17,3 +17,24 @@ // CEL is a non-Turing complete expression language designed to parse, check, and evaluate // expressions against user-defined environments. package cel + +// Compile is a convenience function that constructs a new Env using the provided EnvOption values, +// compiles the expression string, and plans an executable Program. +// +// Warning: Creating a new environment for every compilation is expensive. Environment setup should be done once +// and shared across expression compilations when the options remain the same. +func Compile(expression string, opts ...EnvOption) (Program, error) { + env, err := NewEnv(opts...) + if err != nil { + return nil, err + } + ast, iss := env.Compile(expression) + if iss.Err() != nil { + return nil, iss.Err() + } + prg, err := env.Program(ast, EvalOptions(OptOptimize)) + if err != nil { + return nil, err + } + return prg, nil +} diff --git a/vendor/github.com/google/cel-go/cel/decls.go b/vendor/github.com/google/cel-go/cel/decls.go index 4d4873bd6b..53941146dc 100644 --- a/vendor/github.com/google/cel-go/cel/decls.go +++ b/vendor/github.com/google/cel-go/cel/decls.go @@ -220,7 +220,11 @@ func ExcludeOverloads(overloadIDs ...string) OverloadSelector { // FunctionDecls provides one or more fully formed function declarations to be added to the environment. func FunctionDecls(funcs ...*decls.FunctionDecl) EnvOption { return func(e *Env) (*Env, error) { + if len(funcs) == 0 { + return e, nil + } var err error + e.ensureMutableFunctions() for _, fn := range funcs { if existing, found := e.functions[fn.Name()]; found { fn, err = existing.Merge(fn) @@ -346,6 +350,32 @@ func LateFunctionBinding() OverloadOpt { return decls.LateFunctionBinding() } +// AsyncBinding provides the implementation of an asynchronous overload. The provided function +// is called in its own goroutine with the provided context. The function should block until +// the result is available, and the framework manages goroutine and channel lifecycle. +// +// This follows the same pattern used by gRPC-Go and other major Go frameworks where user +// code is synchronous and the framework manages concurrency. +// +// Context contract: the function MUST return promptly once its context is cancelled. The +// framework cannot forcibly terminate the goroutine running the function, so a function that +// ignores cancellation will leak its goroutine and hold a concurrency slot (see +// AsyncMaxConcurrency) until it returns on its own. For functions that may hang or that are not +// under your control, wrap them with async.TimeoutBinding to bound their runtime. +func AsyncBinding(fn functions.BlockingAsyncOp) OverloadOpt { + return decls.AsyncBinding(fn) +} + +// SingletonAsyncBinding creates a singleton async function definition from a blocking function, +// to be used with all function overloads. The provided function is called in its own goroutine +// with the provided context. +// +// Note, this approach works well if operand is expected to have a specific trait which it implements, +// e.g. traits.ContainerType. Otherwise, prefer per-overload async bindings. +func SingletonAsyncBinding(fn functions.BlockingAsyncOp, traits ...int) FunctionOpt { + return decls.SingletonAsyncBinding(fn, traits...) +} + // OverloadIsNonStrict enables the function to be called with error and unknown argument values. // // Note: do not use this option unless absoluately necessary as it should be an uncommon feature. diff --git a/vendor/github.com/google/cel-go/cel/env.go b/vendor/github.com/google/cel-go/cel/env.go index 7139e415ea..794c62f781 100644 --- a/vendor/github.com/google/cel-go/cel/env.go +++ b/vendor/github.com/google/cel-go/cel/env.go @@ -17,6 +17,7 @@ package cel import ( "errors" "fmt" + "maps" "math" "slices" "strings" @@ -48,6 +49,10 @@ type Source = common.Source type Ast struct { source Source impl *celast.AST + // loadErr captures an error detected while loading the AST (e.g. an over-deep AST ingested via + // ParsedExprToAst / CheckedExprToAst) so it can be surfaced when the Ast is checked or planned + // instead of recursing into the checker or planner on adversarially deep input. + loadErr error } // NativeRep converts the AST to a Go-native representation. @@ -146,8 +151,24 @@ type Env struct { validators []ASTValidator costOptions []checker.CostOption - funcBindOnce sync.Once - functionBindings []*functions.Overload + // Flags for copy-on-write behavior with env.Extend. + funcsShared bool + featuresShared bool + appliedFeaturesShared bool + limitsShared bool + libsShared bool + + parent *Env + + // sharedDispatcher caches a dispatcher populated with the env's function + // bindings, built once and reused across every Program() constructed from + // this env. It is read-only after construction; each Program layers a thin + // child over it for per-program Functions(). Extended envs reuse the parent's + // dispatcher if functions are unchanged. + sharedDispatcher interpreter.Dispatcher + dispOnce sync.Once + hasAsync bool + dispErr error // Internal parser representation prsr *parser.Parser @@ -361,25 +382,24 @@ func NewEnv(opts ...EnvOption) (*Env, error) { // See the EnvOption helper functions for the options that can be used to configure the // environment. func NewCustomEnv(opts ...EnvOption) (*Env, error) { - registry, err := types.NewProtoRegistry() + registry, err := types.NewRegistry() if err != nil { return nil, err } return (&Env{ - variables: []*decls.VariableDecl{}, - functions: map[string]*decls.FunctionDecl{}, - functionBindings: []*functions.Overload{}, - macros: []parser.Macro{}, - Container: containers.DefaultContainer, - adapter: registry, - provider: registry, - features: map[int]bool{}, - appliedFeatures: map[int]bool{}, - limits: map[limitID]int{}, - libraries: map[string]SingletonLibrary{}, - validators: []ASTValidator{}, - progOpts: []ProgramOption{}, - costOptions: []checker.CostOption{}, + variables: []*decls.VariableDecl{}, + functions: map[string]*decls.FunctionDecl{}, + macros: []parser.Macro{}, + Container: containers.DefaultContainer, + adapter: registry, + provider: registry, + features: map[int]bool{}, + appliedFeatures: map[int]bool{}, + limits: map[limitID]int{}, + libraries: map[string]SingletonLibrary{}, + validators: []ASTValidator{}, + progOpts: []ProgramOption{}, + costOptions: []checker.CostOption{}, }).configure(opts) } @@ -395,6 +415,20 @@ func NewCustomEnv(opts ...EnvOption) (*Env, error) { // It is possible to have both non-nil Ast and Issues values returned from this call: however, // the mere presence of an Ast does not imply that it is valid for use. func (e *Env) Check(ast *Ast) (*Ast, *Issues) { + // Surface any error recorded while the Ast was loaded (e.g. an over-deep AST rejected by + // ParsedExprToAst / CheckedExprToAst) before recursing into the type checker on it. + if ast != nil && ast.loadErr != nil { + errs := common.NewErrors(ast.Source()) + errs.ReportErrorString(common.NoLocation, ast.loadErr.Error()) + return nil, NewIssuesWithSourceInfo(errs, ast.NativeRep().SourceInfo()) + } + if nodeLimit := e.configuredExpressionNodeLimit(); nodeLimit > 0 && ast != nil && ast.NativeRep() != nil { + if count := celast.NodeCount(ast.NativeRep()); count > nodeLimit { + errs := common.NewErrors(ast.Source()) + errs.ReportErrorString(common.NoLocation, fmt.Sprintf("expression node count exceeds limit: count %d, limit %d", count, nodeLimit)) + return nil, NewIssuesWithSourceInfo(errs, ast.NativeRep().SourceInfo()) + } + } // Construct the internal checker env, erroring if there is an issue adding the declarations. chk, err := e.initChecker() if err != nil { @@ -445,6 +479,15 @@ func (e *Env) configuredExpressionSizeLimit() int { return 100_000 } +// configuredExpressionNodeLimit returns the effective expression node limit. +// A zero value means "use default". +func (e *Env) configuredExpressionNodeLimit() int { + if l := e.limits[limitExpressionNodeCount]; l != 0 { + return l + } + return 100_000 +} + // Compile combines the Parse and Check phases CEL program compilation to produce an Ast and // associated issues. // @@ -489,34 +532,17 @@ func (e *Env) CompileSource(src Source) (*Ast, *Issues) { // TypeProvider are immutable, or that their underlying implementations are based on the // ref.TypeRegistry which provides a Copy method which will be invoked by this method. func (e *Env) Extend(opts ...EnvOption) (*Env, error) { - chk, chkErr := e.getCheckerOrError() - if chkErr != nil { + if _, chkErr := e.getCheckerOrError(); chkErr != nil { return nil, chkErr } - prsrOptsCopy := make([]parser.Option, len(e.prsrOpts)) - copy(prsrOptsCopy, e.prsrOpts) - - // The type-checker is configured with Declarations. The declarations may either be provided - // as options which have not yet been validated, or may come from a previous checker instance - // whose types have already been validated. - chkOptsCopy := make([]checker.Option, len(e.chkOpts)) - copy(chkOptsCopy, e.chkOpts) - - // Copy the declarations if needed. - if chk != nil { - // If the type-checker has already been instantiated, then the e.declarations have been - // validated within the chk instance. - chkOptsCopy = append(chkOptsCopy, checker.ValidatedDeclarations(chk)) - } - varsCopy := make([]*decls.VariableDecl, len(e.variables)) - copy(varsCopy, e.variables) - - // Copy macros and program options - macsCopy := make([]parser.Macro, len(e.macros)) - progOptsCopy := make([]ProgramOption, len(e.progOpts)) - copy(macsCopy, e.macros) - copy(progOptsCopy, e.progOpts) + prsrOptsCopy := slices.Clone(e.prsrOpts) + chkOptsCopy := slices.Clone(e.chkOpts) + varsCopy := slices.Clone(e.variables) + macsCopy := slices.Clone(e.macros) + progOptsCopy := slices.Clone(e.progOpts) + validatorsCopy := slices.Clone(e.validators) + costOptsCopy := slices.Clone(e.costOptions) // Copy the adapter / provider if they appear to be mutable. adapter := e.adapter @@ -545,53 +571,69 @@ func (e *Env) Extend(opts ...EnvOption) (*Env, error) { adapter = adapterReg.Copy() } - featuresCopy := make(map[int]bool, len(e.features)) - for k, v := range e.features { - featuresCopy[k] = v - } - appliedFeaturesCopy := make(map[int]bool, len(e.appliedFeatures)) - for k, v := range e.appliedFeatures { - appliedFeaturesCopy[k] = v - } - limitsCopy := make(map[limitID]int, len(e.limits)) - for k, v := range e.limits { - limitsCopy[k] = v - } - funcsCopy := make(map[string]*decls.FunctionDecl, len(e.functions)) - for k, v := range e.functions { - funcsCopy[k] = v - } - libsCopy := make(map[string]SingletonLibrary, len(e.libraries)) - for k, v := range e.libraries { - libsCopy[k] = v - } - validatorsCopy := make([]ASTValidator, len(e.validators)) - copy(validatorsCopy, e.validators) - - costOptsCopy := make([]checker.CostOption, len(e.costOptions)) - copy(costOptsCopy, e.costOptions) - ext := &Env{ + parent: e, Container: e.Container, variables: varsCopy, - functions: funcsCopy, + functions: e.functions, macros: macsCopy, contextProto: e.contextProto, progOpts: progOptsCopy, adapter: adapter, - features: featuresCopy, - limits: limitsCopy, - appliedFeatures: appliedFeaturesCopy, - libraries: libsCopy, + features: e.features, + limits: e.limits, + appliedFeatures: e.appliedFeatures, + libraries: e.libraries, validators: validatorsCopy, provider: provider, chkOpts: chkOptsCopy, prsrOpts: prsrOptsCopy, costOptions: costOptsCopy, + // Copy-on-write flags. + funcsShared: true, + featuresShared: true, + limitsShared: true, + appliedFeaturesShared: true, + libsShared: true, } return ext.configure(opts) } +func (e *Env) ensureMutableFunctions() { + if e.funcsShared { + e.functions = maps.Clone(e.functions) + e.funcsShared = false + } +} + +func (e *Env) ensureMutableLibraries() { + if e.libsShared { + e.libraries = maps.Clone(e.libraries) + e.libsShared = false + } +} + +func (e *Env) ensureMutableFeatures() { + if e.featuresShared { + e.features = maps.Clone(e.features) + e.featuresShared = false + } +} + +func (e *Env) ensureMutableAppliedFeatures() { + if e.appliedFeaturesShared { + e.appliedFeatures = maps.Clone(e.appliedFeatures) + e.appliedFeaturesShared = false + } +} + +func (e *Env) ensureMutableLimits() { + if e.limitsShared { + e.limits = maps.Clone(e.limits) + e.limitsShared = false + } +} + // HasFeature checks whether the environment enables the given feature // flag, as enumerated in options.go. func (e *Env) HasFeature(flag int) bool { @@ -622,25 +664,17 @@ func (e *Env) HasFunction(functionName string) bool { // Functions returns a shallow copy of the Functions, keyed by function name, that have been configured in the environment. func (e *Env) Functions() map[string]*decls.FunctionDecl { - shallowCopy := make(map[string]*decls.FunctionDecl, len(e.functions)) - for nm, fn := range e.functions { - shallowCopy[nm] = fn - } - return shallowCopy + return maps.Clone(e.functions) } // Variables returns a shallow copy of the variables associated with the environment. func (e *Env) Variables() []*decls.VariableDecl { - shallowCopy := make([]*decls.VariableDecl, len(e.variables)) - copy(shallowCopy, e.variables) - return shallowCopy + return slices.Clone(e.variables) } // Macros returns a shallow copy of macros associated with the environment. func (e *Env) Macros() []Macro { - shallowCopy := make([]Macro, len(e.macros)) - copy(shallowCopy, e.macros) - return shallowCopy + return slices.Clone(e.macros) } // HasValidator returns whether a specific ASTValidator has been configured in the environment. @@ -653,9 +687,9 @@ func (e *Env) HasValidator(name string) bool { return false } -// Validators returns the set of ASTValidators configured on the environment. +// Validators returns a shallow copy of the set of ASTValidators configured on the environment. func (e *Env) Validators() []ASTValidator { - return e.validators[:] + return slices.Clone(e.validators) } // Parse parses the input expression value `txt` to a Ast and/or a set of Issues. @@ -687,6 +721,12 @@ func (e *Env) ParseSource(src Source) (*Ast, *Issues) { // Program generates an evaluable instance of the Ast within the environment (Env). func (e *Env) Program(ast *Ast, opts ...ProgramOption) (Program, error) { + // Surface any error recorded while the Ast was loaded (e.g. an over-deep AST rejected by + // ParsedExprToAst / CheckedExprToAst) rather than recursing into the planner on it. This is a + // cheap field read; the depth traversal itself runs once at conversion time, not here. + if ast != nil && ast.loadErr != nil { + return nil, ast.loadErr + } return e.PlanProgram(ast.NativeRep(), opts...) } @@ -703,6 +743,41 @@ func (e *Env) PlanProgram(a *celast.AST, opts ...ProgramOption) (Program, error) return newProgram(e, a, optSet) } +func (e *Env) initDispatcher() (interpreter.Dispatcher, bool, error) { + e.dispOnce.Do(func() { + if e.parent != nil && e.funcsShared { + // The dispatcher setup is skipped when the child has mutated the function set. + // As the child function set contains a copy of all parent function declarations + // by virtue of copy on write semantics. + d, hasAsync, err := e.parent.initDispatcher() + e.sharedDispatcher = d + e.hasAsync = hasAsync + e.dispErr = err + return + } + hasAsync := false + var bindings []*functions.Overload + for _, fn := range e.functions { + bs, err := fn.Bindings() + if err != nil { + e.dispErr = err + return + } + for _, b := range bs { + if b.Async != nil { + hasAsync = true + } + } + bindings = append(bindings, bs...) + } + d := interpreter.NewDispatcher() + e.dispErr = d.Add(bindings...) + e.sharedDispatcher = d + e.hasAsync = hasAsync + }) + return e.sharedDispatcher, e.hasAsync, e.dispErr +} + // CELTypeAdapter returns the `types.Adapter` configured for the environment. func (e *Env) CELTypeAdapter() types.Adapter { return e.adapter @@ -828,6 +903,7 @@ func (e *Env) configure(opts []EnvOption) (*Env, error) { // If the default UTC timezone has been disabled, configure the legacy overloads if utcTime, isSet := e.features[featureDefaultUTCTimeZone]; isSet && !utcTime { if !e.appliedFeatures[featureDefaultUTCTimeZone] { + e.ensureMutableAppliedFeatures() e.appliedFeatures[featureDefaultUTCTimeZone] = true e, err = Lib(timeLegacyLibrary{})(e) if err != nil { @@ -859,6 +935,9 @@ func (e *Env) configure(opts []EnvOption) (*Env, error) { if l := e.limits[limitParseRecursionDepth]; l != 0 { prsrOpts = append(prsrOpts, parser.MaxRecursionDepth(l)) } + if l := e.limits[limitExpressionNodeCount]; l != 0 { + prsrOpts = append(prsrOpts, parser.MaxExpressionNodeCount(l)) + } e.prsr, err = parser.NewParser(prsrOpts...) if err != nil { return nil, err @@ -897,6 +976,15 @@ func (e *Env) initChecker() (*checker.Env, error) { chkOpts = append(chkOpts, checker.JSONFieldNames(e.HasFeature(featureJSONFieldNames))) + if e.parent != nil && e.funcsShared { + parentChk, err := e.parent.initChecker() + if err != nil { + e.setCheckerOrError(nil, err) + return + } + chkOpts = append(chkOpts, checker.ValidatedDeclarations(parentChk)) + } + ce, err := checker.NewEnv(e.Container, e.provider, chkOpts...) if err != nil { e.setCheckerOrError(nil, err) @@ -909,14 +997,16 @@ func (e *Env) initChecker() (*checker.Env, error) { return } // Add the function declarations which are derived from the FunctionDecl instances. - for _, fn := range e.functions { - if fn.IsDeclarationDisabled() { - continue - } - err = ce.AddFunctions(fn) - if err != nil { - e.setCheckerOrError(nil, err) - return + if e.parent == nil || !e.funcsShared { + for _, fn := range e.functions { + if fn.IsDeclarationDisabled() { + continue + } + err = ce.AddFunctions(fn) + if err != nil { + e.setCheckerOrError(nil, err) + return + } } } // Add function declarations here separately. diff --git a/vendor/github.com/google/cel-go/cel/folding.go b/vendor/github.com/google/cel-go/cel/folding.go index 0cff9517a4..e3459034cc 100644 --- a/vendor/github.com/google/cel-go/cel/folding.go +++ b/vendor/github.com/google/cel-go/cel/folding.go @@ -15,6 +15,8 @@ package cel import ( + "context" + "errors" "fmt" "github.com/google/cel-go/common/ast" @@ -93,7 +95,7 @@ func (opt *constantFoldingOptimizer) Optimize(ctx *OptimizerContext, a *ast.AST) for _, fold := range foldableExprs { // If the expression could be folded because it's a non-strict call, and the // branches are pruned, continue to the next fold. - if fold.Kind() == ast.CallKind && maybePruneBranches(ctx, fold) { + if fold.Kind() == ast.CallKind && maybePruneBranches(ctx, a, fold) { continue } // Late-bound function calls cannot be folded. @@ -102,9 +104,9 @@ func (opt *constantFoldingOptimizer) Optimize(ctx *OptimizerContext, a *ast.AST) } // Otherwise, assume all context is needed to evaluate the expression. err := opt.tryFold(ctx, a, fold) - // Ignore errors for identifiers, since there is no guarantee that the environment + // Ignore errors for identifiers or subexpressions that cannot be folded, since there is no guarantee that the environment // has a value for them. - if err != nil && fold.Kind() != ast.IdentKind { + if err != nil && fold.Kind() != ast.IdentKind && !errors.Is(err, errCannotFold) { ctx.ReportErrorAtID(fold.ID(), "constant-folding evaluation failed: %v", err.Error()) return a } @@ -142,24 +144,19 @@ func (opt *constantFoldingOptimizer) Optimize(ctx *OptimizerContext, a *ast.AST) return a } +var errCannotFold = errors.New("subexpression cannot be folded") + // tryFold attempts to evaluate a sub-expression to a literal. // // If the evaluation succeeds, the input expr value will be modified to become a literal, otherwise // the method will return an error. func (opt *constantFoldingOptimizer) tryFold(ctx *OptimizerContext, a *ast.AST, expr ast.Expr) error { - // Assume all context is needed to evaluate the expression. - subAST := &Ast{ - impl: ast.NewCheckedAST(ast.NewAST(expr, a.SourceInfo()), a.TypeMap(), a.ReferenceMap()), - } - prg, err := ctx.Program(subAST) - if err != nil { - return err - } activation := opt.knownValues if activation == nil { activation = NoVars() } - out, _, err := prg.Eval(activation) + navExpr := expr.(ast.NavigableExpr) + out, err := evaluateExpr(ctx, a, navExpr, activation) if err != nil { return err } @@ -168,6 +165,30 @@ func (opt *constantFoldingOptimizer) tryFold(ctx *OptimizerContext, a *ast.AST, return nil } +func evaluateExpr(ctx *OptimizerContext, a *ast.AST, navigableExpr ast.NavigableExpr, activation Activation) (ref.Val, error) { + partialActivation, err := ctx.PartialVars(activation) + if err != nil { + return nil, err + } + subAST := &Ast{ + impl: ast.NewCheckedAST(ast.NewAST(navigableExpr, a.SourceInfo()), a.TypeMap(), a.ReferenceMap()), + } + prg, err := ctx.Program(subAST) + if err != nil { + return nil, errCannotFold + } + // Folding will not attempt to call async functions which are all marked as late-bound, + // but the presence of such functions requires the use of `ConcurrentEval` in order to + // avoid an early return error which blocks async functions from running in `Eval` and + // `ContextEval` call paths. + resCh := prg.ConcurrentEval(context.Background(), partialActivation) + res := <-resCh + if res.Err != nil || types.IsUnknown(res.Val) { + return nil, errCannotFold + } + return res.Val, nil +} + func isLateBoundFunctionCall(ctx *OptimizerContext, expr ast.Expr) bool { call := expr.AsCall() function := ctx.Functions()[call.FunctionName()] @@ -181,12 +202,12 @@ func isLateBoundFunctionCall(ctx *OptimizerContext, expr ast.Expr) bool { // a branch can be removed. Evaluation will naturally prune logical and / or calls, // but conditional will not be pruned cleanly, so this is one small area where the // constant folding step reimplements a portion of the evaluator. -func maybePruneBranches(ctx *OptimizerContext, expr ast.NavigableExpr) bool { +func maybePruneBranches(ctx *OptimizerContext, a *ast.AST, expr ast.NavigableExpr) bool { call := expr.AsCall() args := call.Args() switch call.FunctionName() { case operators.LogicalAnd, operators.LogicalOr: - return maybeShortcircuitLogic(ctx, call.FunctionName(), args, expr) + return maybeShortcircuitLogic(ctx, a, call.FunctionName(), args, expr) case operators.Conditional: cond := args[0] truthy := args[1] @@ -207,21 +228,47 @@ func maybePruneBranches(ctx *OptimizerContext, expr ast.NavigableExpr) bool { return true } needle := args[0] - if needle.Kind() == ast.LiteralKind && haystack.Kind() == ast.ListKind { - needleValue := needle.AsLiteral() + if (needle.Kind() == ast.LiteralKind || isSelfEqualIdent(needle)) && haystack.Kind() == ast.ListKind { + needleIsLit := needle.Kind() == ast.LiteralKind + needleLitVal := needle.AsLiteral() + needleIdentVal := needle.AsIdent() list := haystack.AsList() - for _, e := range list.Elements() { - if e.Kind() == ast.LiteralKind && e.AsLiteral().Equal(needleValue) == types.True { + for _, elem := range list.Elements() { + if needleIsLit && elem.Kind() == ast.LiteralKind && elem.AsLiteral().Equal(needleLitVal) == types.True { + ctx.UpdateExpr(expr, ctx.NewLiteral(types.True)) + return true + } + if !needleIsLit && elem.Kind() == ast.IdentKind && elem.AsIdent() == needleIdentVal { ctx.UpdateExpr(expr, ctx.NewLiteral(types.True)) return true } } } + case operators.Add: + if len(args) == 2 && args[0].Kind() == ast.ListKind && args[1].Kind() == ast.ListKind { + leftList := args[0].AsList() + rightList := args[1].AsList() + + elems := make([]ast.Expr, 0, leftList.Size()+rightList.Size()) + elems = append(elems, leftList.Elements()...) + elems = append(elems, rightList.Elements()...) + + optIndices := make([]int32, 0, len(leftList.OptionalIndices())+len(rightList.OptionalIndices())) + optIndices = append(optIndices, leftList.OptionalIndices()...) + offset := int32(leftList.Size()) + for _, idx := range rightList.OptionalIndices() { + optIndices = append(optIndices, offset+idx) + } + + combinedList := ctx.NewList(elems, optIndices) + ctx.UpdateExpr(expr, combinedList) + return true + } } return false } -func maybeShortcircuitLogic(ctx *OptimizerContext, function string, args []ast.Expr, expr ast.NavigableExpr) bool { +func maybeShortcircuitLogic(ctx *OptimizerContext, a *ast.AST, function string, args []ast.Expr, expr ast.NavigableExpr) bool { shortcircuit := types.False skip := types.True if function == operators.LogicalOr { @@ -244,10 +291,14 @@ func maybeShortcircuitLogic(ctx *OptimizerContext, function string, args []ast.E } if len(newArgs) == 0 { newArgs = append(newArgs, args[0]) - ctx.UpdateExpr(expr, newArgs[0]) - return true + } + if len(newArgs) == len(args) { + return false } if len(newArgs) == 1 { + if !isBoolType(a, newArgs[0]) { + return false + } ctx.UpdateExpr(expr, newArgs[0]) return true } @@ -255,6 +306,16 @@ func maybeShortcircuitLogic(ctx *OptimizerContext, function string, args []ast.E return true } +func isBoolType(a *ast.AST, e ast.Expr) bool { + if a != nil && a.GetType(e.ID()) == types.BoolType { + return true + } + if e.Kind() == ast.LiteralKind && e.AsLiteral().Type() == types.BoolType { + return true + } + return false +} + // pruneOptionalElements works from the bottom up to resolve optional elements within // aggregate literals. // @@ -285,9 +346,9 @@ func pruneOptionalListElements(ctx *OptimizerContext, e ast.Expr) { updatedElems := []ast.Expr{} updatedIndices := []int32{} newOptIndex := -1 - for _, e := range elems { + for i, e := range elems { newOptIndex++ - if !l.IsOptional(int32(newOptIndex)) { + if !l.IsOptional(int32(i)) { updatedElems = append(updatedElems, e) continue } @@ -501,7 +562,7 @@ func (opt *constantFoldingOptimizer) constantExprMatcher(ctx *OptimizerContext, sel := e.AsSelect() // guaranteed to be a navigable value return constantMatcher(sel.Operand().(ast.NavigableExpr)) case ast.IdentKind: - return opt.knownValues != nil && a.ReferenceMap()[e.ID()] != nil + return opt.knownValues != nil && a.ReferenceMap()[e.ID()] != nil && !hasComprehensionVar(e) case ast.ComprehensionKind: if isNestedComprehension(e) { return false @@ -513,6 +574,9 @@ func (opt *constantFoldingOptimizer) constantExprMatcher(ctx *OptimizerContext, nested := e.AsComprehension() vars[nested.AccuVar()] = true vars[nested.IterVar()] = true + if nested.IterVar2() != "" { + vars[nested.IterVar2()] = true + } } if e.Kind() == ast.IdentKind && !vars[e.AsIdent()] { constantExprs = false @@ -554,22 +618,43 @@ func constantCallMatcher(e ast.NavigableExpr) bool { return true } } + if fnName == operators.Equals || fnName == operators.NotEquals { + if hasComprehensionVar(e) { + return false + } + if isExprConstantOfKind(children[0], types.BoolType) || isExprConstantOfKind(children[1], types.BoolType) { + return true + } + } if fnName == operators.In { + if hasComprehensionVar(e) { + return false + } haystack := children[1] if haystack.Kind() == ast.ListKind && haystack.AsList().Size() == 0 { return true } needle := children[0] - if needle.Kind() == ast.LiteralKind && haystack.Kind() == ast.ListKind { - needleValue := needle.AsLiteral() + if (needle.Kind() == ast.LiteralKind || isSelfEqualIdent(needle)) && haystack.Kind() == ast.ListKind { + needleIsLit := needle.Kind() == ast.LiteralKind + needleLitVal := needle.AsLiteral() + needleIdentVal := needle.AsIdent() list := haystack.AsList() - for _, e := range list.Elements() { - if e.Kind() == ast.LiteralKind && e.AsLiteral().Equal(needleValue) == types.True { + for _, elem := range list.Elements() { + if needleIsLit && elem.Kind() == ast.LiteralKind && elem.AsLiteral().Equal(needleLitVal) == types.True { + return true + } + if !needleIsLit && elem.Kind() == ast.IdentKind && elem.AsIdent() == needleIdentVal { return true } } } } + if fnName == operators.Add { + if len(children) == 2 && children[0].Kind() == ast.ListKind && children[1].Kind() == ast.ListKind { + return true + } + } // convert all other calls with constant arguments for _, child := range children { if !constantMatcher(child) { @@ -579,6 +664,74 @@ func constantCallMatcher(e ast.NavigableExpr) bool { return true } +// isSelfEqualIdent indicates whether the expression is an identifier whose static type +// guarantees that its runtime value is equal to itself. +// +// Matching an identifier against a list element by name only proves list membership when the +// value the name resolves to is self-equal. A double may be NaN, which is not equal to itself, +// and dyn, abstract, and struct types may all hold a NaN at runtime, so the check is limited +// to the scalar types which cannot, and to the aggregate types whose type parameters are +// themselves self-equal. +func isSelfEqualIdent(e ast.Expr) bool { + if e.Kind() != ast.IdentKind { + return false + } + nav, ok := e.(ast.NavigableExpr) + if !ok { + return false + } + return isSelfEqualType(nav.Type()) +} + +// isSelfEqualType indicates whether all runtime values of the given type are equal to themselves. +func isSelfEqualType(t *types.Type) bool { + if t == nil { + return false + } + switch t.Kind() { + case types.BoolKind, types.BytesKind, types.DurationKind, types.IntKind, + types.NullTypeKind, types.StringKind, types.TimestampKind, types.TypeKind, + types.UintKind: + return true + case types.ListKind, types.MapKind: + // Aggregates compare element-wise, so they are self-equal exactly when their type + // parameters are. A list(dyn) or map(string, double) may still contain a NaN. + for _, p := range t.Parameters() { + if !isSelfEqualType(p) { + return false + } + } + return true + default: + return false + } +} + +func isExprConstantOfKind(e ast.Expr, t *types.Type) bool { + return e.Kind() == ast.LiteralKind && e.AsLiteral().Type() == t +} + +func hasComprehensionVar(e ast.NavigableExpr) bool { + idents := ast.MatchDescendants(e, ast.KindMatcher(ast.IdentKind)) + for _, identNode := range idents { + identName := identNode.AsIdent() + curr := identNode + parent, found := curr.Parent() + for found { + if parent.Kind() == ast.ComprehensionKind { + compre := parent.AsComprehension() + if (compre.AccuVar() == identName || compre.IterVar() == identName || compre.IterVar2() == identName) && + curr.ID() != compre.IterRange().ID() && curr.ID() != compre.AccuInit().ID() { + return true + } + } + curr = parent + parent, found = parent.Parent() + } + } + return false +} + func isNestedComprehension(e ast.NavigableExpr) bool { parent, found := e.Parent() for found { diff --git a/vendor/github.com/google/cel-go/cel/io.go b/vendor/github.com/google/cel-go/cel/io.go index 2e611228d9..c991c95c3f 100644 --- a/vendor/github.com/google/cel-go/cel/io.go +++ b/vendor/github.com/google/cel-go/cel/io.go @@ -52,7 +52,12 @@ func CheckedExprToAstWithSource(checkedExpr *exprpb.CheckedExpr, src Source) (*A if err != nil { return nil, err } - return &Ast{source: src, impl: checked}, nil + out := &Ast{source: src, impl: checked} + if err := checkLoadedASTDepth(checked); err != nil { + out.loadErr = err + return out, err + } + return out, nil } // AstToCheckedExpr converts an Ast to an protobuf CheckedExpr value. @@ -83,7 +88,26 @@ func ParsedExprToAstWithSource(parsedExpr *exprpb.ParsedExpr, src Source) *Ast { src = common.NewInfoSource(parsedExpr.GetSourceInfo()) } e, _ := ast.ProtoToExpr(parsedExpr.GetExpr()) - return &Ast{source: src, impl: ast.NewAST(e, info)} + out := &Ast{source: src, impl: ast.NewAST(e, info)} + // ParsedExprToAstWithSource has no error return, so record an over-depth violation on the Ast + // to be surfaced when it is later checked or planned. + out.loadErr = checkLoadedASTDepth(out.impl) + return out +} + +// checkLoadedASTDepth guards ASTs that enter through the proto conversion helpers +// (ParsedExprToAst / CheckedExprToAst) against nesting deeper than the parser's recursion limit. +// Those entry points bypass the parser, so without this check a deeply nested loaded AST could +// exhaust the Go stack during later checking or planning. It returns a normal error rather than +// risking that overflow; the traversal itself is bounded so it stays safe on the same input. +// +// Embedders that fully control their AST inputs can skip this by building the AST through the +// common/ast package directly instead of these conversion helpers. +func checkLoadedASTDepth(a *ast.AST) error { + if ast.ExceedsDepth(a, defaultMaxASTDepth) { + return fmt.Errorf("input exceeds maximum expression nesting depth: %d", defaultMaxASTDepth) + } + return nil } // AstToParsedExpr converts an Ast to an protobuf ParsedExpr value. diff --git a/vendor/github.com/google/cel-go/cel/library.go b/vendor/github.com/google/cel-go/cel/library.go index 332eb3f170..43912eaae2 100644 --- a/vendor/github.com/google/cel-go/cel/library.go +++ b/vendor/github.com/google/cel-go/cel/library.go @@ -43,6 +43,7 @@ const ( optionalUnwrapFunc = "optional.unwrap" valueFunc = "value" unusedIterVar = "#unused" + targetVar = "@target" ) // Library provides a collection of EnvOption and ProgramOption values used to configure a CEL @@ -97,6 +98,7 @@ func Lib(l Library) EnvOption { if e.HasLibrary(singleton.LibraryName()) { return e, nil } + e.ensureMutableLibraries() e.libraries[singleton.LibraryName()] = singleton } var err error @@ -182,6 +184,9 @@ func (lib *stdLibrary) CompileOptions() []EnvOption { if err = lib.subset.Validate(); err != nil { return nil, err } + if len(funcs) > 0 { + e.ensureMutableFunctions() + } for _, fn := range funcs { existing, found := e.functions[fn.Name()] if found { @@ -609,22 +614,38 @@ func optMap(meh MacroExprFactory, target ast.Expr, args []ast.Expr) (ast.Expr, * return nil, meh.NewError(varIdent.ID(), "optMap() variable name must be a simple identifier") } mapExpr := args[1] - return meh.NewCall( + targetIdent := target + if target.Kind() != ast.IdentKind { + targetIdent = meh.NewIdent(targetVar) + } + res := meh.NewCall( operators.Conditional, - meh.NewMemberCall(hasValueFunc, target), + meh.NewMemberCall(hasValueFunc, targetIdent), meh.NewCall(optionalOfFunc, meh.NewComprehension( meh.NewList(), unusedIterVar, varName, - meh.NewMemberCall(valueFunc, meh.Copy(target)), + meh.NewMemberCall(valueFunc, meh.Copy(targetIdent)), meh.NewLiteral(types.False), meh.NewIdent(varName), mapExpr, ), ), meh.NewCall(optionalNoneFunc), - ), nil + ) + if target.Kind() != ast.IdentKind { + return meh.NewComprehension( + meh.NewList(), + unusedIterVar, + targetVar, + target, + meh.NewLiteral(types.False), + meh.NewIdent(targetVar), + res, + ), nil + } + return res, nil } func optFlatMap(meh MacroExprFactory, target ast.Expr, args []ast.Expr) (ast.Expr, *Error) { @@ -637,20 +658,36 @@ func optFlatMap(meh MacroExprFactory, target ast.Expr, args []ast.Expr) (ast.Exp return nil, meh.NewError(varIdent.ID(), "optFlatMap() variable name must be a simple identifier") } mapExpr := args[1] - return meh.NewCall( + targetIdent := target + if target.Kind() != ast.IdentKind { + targetIdent = meh.NewIdent(targetVar) + } + res := meh.NewCall( operators.Conditional, - meh.NewMemberCall(hasValueFunc, target), + meh.NewMemberCall(hasValueFunc, targetIdent), meh.NewComprehension( meh.NewList(), unusedIterVar, varName, - meh.NewMemberCall(valueFunc, meh.Copy(target)), + meh.NewMemberCall(valueFunc, meh.Copy(targetIdent)), meh.NewLiteral(types.False), meh.NewIdent(varName), mapExpr, ), meh.NewCall(optionalNoneFunc), - ), nil + ) + if target.Kind() != ast.IdentKind { + return meh.NewComprehension( + meh.NewList(), + unusedIterVar, + targetVar, + target, + meh.NewLiteral(types.False), + meh.NewIdent(targetVar), + res, + ), nil + } + return res, nil } func optUnwrap(value ref.Val) ref.Val { diff --git a/vendor/github.com/google/cel-go/cel/options.go b/vendor/github.com/google/cel-go/cel/options.go index 86a98d35db..709ce007a2 100644 --- a/vendor/github.com/google/cel-go/cel/options.go +++ b/vendor/github.com/google/cel-go/cel/options.go @@ -24,6 +24,7 @@ import ( "google.golang.org/protobuf/reflect/protoregistry" "google.golang.org/protobuf/types/dynamicpb" + "github.com/google/cel-go/cel/async" "github.com/google/cel-go/checker" "github.com/google/cel-go/common/containers" "github.com/google/cel-go/common/decls" @@ -109,12 +110,26 @@ const ( limitCodePointSize // The number of attempts to recover from a parse error. limitParseErrorRecovery + // The maximum nesting depth permitted for ASTs loaded outside the parser. + limitMaxASTDepth + // The maximum number of expression nodes permitted in parsing (including macro expansion). + limitExpressionNodeCount + // The maximum regex program plan size permitted. + limitRegexProgramSize ) +// defaultMaxASTDepth mirrors the parser's default maxRecursionDepth (250) and +// is applied to ASTs that enter through non-parser ingestion paths (e.g. via +// ParsedExprToAst / CheckedExprToAst) when no explicit limit is configured. +const defaultMaxASTDepth = 250 + var limitIDsToNames = map[limitID]string{ limitCodePointSize: "cel.limit.expression_code_points", limitParseErrorRecovery: "cel.limit.parse_error_recovery", limitParseRecursionDepth: "cel.limit.parse_recursion_depth", + limitMaxASTDepth: "cel.limit.max_ast_depth", + limitExpressionNodeCount: "cel.limit.expression_node_count", + limitRegexProgramSize: "cel.limit.regex_program_size", } func limitNameByID(id limitID) (string, bool) { @@ -735,6 +750,47 @@ func InterruptCheckFrequency(checkFrequency uint) ProgramOption { } } +// AsyncCallObserver sets the observer for monitoring asynchronous function calls during ConcurrentEval. +func AsyncCallObserver(observer async.Observer) ProgramOption { + return func(p *prog) (*prog, error) { + p.asyncObserver = observer + return p, nil + } +} + +// AsyncCompletionBufferSize sets the size of the buffer for the async completion channel. +// By default, the channel is unbuffered. +func AsyncCompletionBufferSize(size int) ProgramOption { + return func(p *prog) (*prog, error) { + p.asyncCompletionBufferSize = size + return p, nil + } +} + +// AsyncMaxConcurrency sets the maximum number of concurrently launched async calls during +// ConcurrentEval. This bounds the number of in-flight async goroutines, so a wide fan-out (such +// as an async call inside a comprehension over a large list) cannot exhaust memory. +// +// A value of 0 (unset) applies a built-in default bound. A positive value sets an explicit bound. +// A negative value disables the limiter (unbounded launches) and should only be used when +// concurrency is bounded by other means. +func AsyncMaxConcurrency(maxConcurrency int) ProgramOption { + return func(p *prog) (*prog, error) { + p.asyncMaxConcurrency = maxConcurrency + return p, nil + } +} + +// ConcurrentDrainStrategy configures the strategy for when to re-evaluate the program +// during a ConcurrentEval call after receiving asynchronous completion signals. +// By default, the program re-evaluates immediately after every completion. +func ConcurrentDrainStrategy(strategy async.DrainStrategy) ProgramOption { + return func(p *prog) (*prog, error) { + p.drainStrategy = strategy + return p, nil + } +} + // CostEstimatorOptions configure type-check time options for estimating expression cost. func CostEstimatorOptions(costOpts ...checker.CostOption) EnvOption { return func(e *Env) (*Env, error) { @@ -864,7 +920,11 @@ func ContextProtoVars(ctx proto.Message, opts ...types.RegistryOption) (Activati } regOpts := []types.RegistryOption{types.ProtoTypeDefs(ctx)} regOpts = append(regOpts, opts...) - reg, err := types.NewProtoRegistry(regOpts...) + var ro []any + for _, opt := range regOpts { + ro = append(ro, opt) + } + reg, err := types.NewRegistry(ro...) if err != nil { return nil, err } @@ -917,6 +977,7 @@ func DefaultUTCTimeZone(enabled bool) EnvOption { // features sets the given feature flags. See list of Feature constants above. func features(flag int, enabled bool) EnvOption { return func(e *Env) (*Env, error) { + e.ensureMutableFeatures() e.features[flag] = enabled return e, nil } @@ -927,6 +988,7 @@ func setLimit(id limitID, limit int) EnvOption { limit = -1 } return func(e *Env) (*Env, error) { + e.ensureMutableLimits() e.limits[id] = limit return e, nil } @@ -950,6 +1012,44 @@ func ParserExpressionSizeLimit(limit int) EnvOption { return setLimit(limitCodePointSize, limit) } +// ExpressionNodeLimit adjusts the maximum number of expression nodes permitted during parsing +// and checking, including nodes created by macro expansion. Defaults are defined in the parser +// package (100,000). A negative value means unbounded. +func ExpressionNodeLimit(limit int) EnvOption { + return setLimit(limitExpressionNodeCount, limit) +} + +// ExpressionNestingDepthLimit records the maximum nesting depth permitted for ASTs in the +// environment configuration so that the value round-trips through env.Config export/import. +// +// ASTs loaded outside the parser (e.g. via ParsedExprToAst / CheckedExprToAst) bypass the +// parser's recursion limit, so those conversion paths validate nesting depth against the +// parser-matching default (250) to avoid a Go stack overflow during later checking or planning. +// Embedders that fully control their AST inputs and want to skip the check can construct the AST +// through the common/ast package directly rather than the cel conversion helpers. +func ExpressionNestingDepthLimit(limit int) EnvOption { + return setLimit(limitMaxASTDepth, limit) +} + +// RegexProgramSizeLimit caps the maximum regex program plan size permitted for regular expressions. +// A negative or zero value means unbounded. +func RegexProgramSizeLimit(limit int) EnvOption { + return func(e *Env) (*Env, error) { + var err error + e, err = setLimit(limitRegexProgramSize, limit)(e) + if err != nil { + return nil, err + } + if limit > 0 { + e, err = ASTValidators(ValidateRegexProgramSizeLimit(limit))(e) + if err != nil { + return nil, err + } + } + return e, nil + } +} + // EnableHiddenAccumulatorName sets the parser to use the identifier '@result' for accumulators // which is not normally accessible from CEL source. func EnableHiddenAccumulatorName(enabled bool) EnvOption { diff --git a/vendor/github.com/google/cel-go/cel/program.go b/vendor/github.com/google/cel-go/cel/program.go index 1fb6587774..07849974a1 100644 --- a/vendor/github.com/google/cel-go/cel/program.go +++ b/vendor/github.com/google/cel-go/cel/program.go @@ -18,9 +18,12 @@ import ( "context" "errors" "fmt" + "time" + "github.com/google/cel-go/cel/async" "github.com/google/cel-go/common/ast" - "github.com/google/cel-go/common/functions" + "github.com/google/cel-go/common/operators" + "github.com/google/cel-go/common/overloads" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/interpreter" @@ -52,6 +55,21 @@ type Program interface { // // The output contract for `ContextEval` is otherwise identical to the `Eval` method. ContextEval(context.Context, any) (ref.Val, *EvalDetails, error) + + // ConcurrentEval evaluates the program concurrently, returning a channel that will receive + // the final EvalResult when all asynchronous operations complete, or the context expires. + // + // The vars value may either be an `Activation` or `map[string]any`. + // + // Liveness: ConcurrentEval relies on context cancellation to terminate. If an async function + // never returns and does not honor its context, and the supplied context has no deadline, the + // call will block indefinitely. Always pass a context with a deadline or cancellation. + // + // Error handling is fail-fast: as soon as a re-evaluation pass yields an error, that error is + // returned and any still in-flight async calls are cancelled (their contexts are done) and + // their results discarded. Async functions should therefore be free of unwanted side effects + // on partial evaluation, or guard them with idempotency/cancellation handling. + ConcurrentEval(context.Context, any) <-chan EvalResult } // Activation used to resolve identifiers by name and references by id. @@ -144,6 +162,13 @@ func (ed *EvalDetails) ActualCost() *uint64 { return &cost } +// EvalResult encapsulates the response from a ConcurrentEval call. +type EvalResult struct { + Val ref.Val + EvalDetails *EvalDetails + Err error +} + // prog is the internal implementation of the Program interface. type prog struct { *Env @@ -164,6 +189,40 @@ type prog struct { callCostEstimator interpreter.ActualCostEstimator costOptions []interpreter.CostTrackerOption costLimit *uint64 + + // hasAsync indicates the planned expression contains an asynchronous function call, which can + // only be resolved by ConcurrentEval. + hasAsync bool + + // Async evaluation configuration used by ConcurrentEval. + drainStrategy async.DrainStrategy + asyncObserver async.Observer + asyncCompletionBufferSize int + asyncMaxConcurrency int +} + +// scanOptTargets walks the AST once and reports whether the Optimize() +// decorator (needOpt) and the regex-constant compiler (needRegex) have any +// target node present. The conditions are a superset of what each decorator +// acts on, so a false negative — skipping a decorator that would have +// optimized something — is impossible. +func scanOptTargets(root ast.Expr) (needOpt, needRegex bool) { + ast.PostOrderVisit(root, ast.NewExprVisitor(func(e ast.Expr) { + switch e.Kind() { + case ast.ListKind, ast.MapKind: + needOpt = true // maybeBuildListLiteral / maybeBuildMapLiteral + case ast.CallKind: + switch fn := e.AsCall().FunctionName(); { + case fn == overloads.Matches: + needRegex = true + case fn == operators.In || fn == operators.OldIn: + needOpt = true // maybeOptimizeSetMembership + case overloads.IsTypeConversionFunction(fn): + needOpt = true // maybeOptimizeConstUnary + } + } + })) + return } // newProgram creates a program instance with an environment, an ast, and an optional list of @@ -171,8 +230,16 @@ type prog struct { // // If the program cannot be configured the prog will be nil, with a non-nil error response. func newProgram(e *Env, a *ast.AST, opts []ProgramOption) (Program, error) { - // Build the dispatcher, interpreter, and default program value. - disp := interpreter.NewDispatcher() + // Build the env's function bindings and shared dispatcher once (pure functions of the + // env). The dispatcher holding the env's function bindings is identical across every + // Program() built from it and read-only during planning — so assemble it once per env + // and layer a thin child over it here for per-program Functions() isolation, rather than + // re-indexing overloads on every Program() call. + sharedDisp, hasAsync, err := e.initDispatcher() + if err != nil { + return nil, err + } + disp := interpreter.ExtendDispatcher(sharedDisp) // Ensure the default attribute factory is set after the adapter and provider are // configured. @@ -181,10 +248,11 @@ func newProgram(e *Env, a *ast.AST, opts []ProgramOption) (Program, error) { plannerOptions: []interpreter.PlannerOption{}, dispatcher: disp, costOptions: []interpreter.CostTrackerOption{}, + drainStrategy: async.DrainReady(100 * time.Microsecond), + hasAsync: hasAsync, } // Configure the program via the ProgramOption values. - var err error for _, opt := range opts { p, err = opt(p) if err != nil { @@ -192,27 +260,6 @@ func newProgram(e *Env, a *ast.AST, opts []ProgramOption) (Program, error) { } } - e.funcBindOnce.Do(func() { - var bindings []*functions.Overload - e.functionBindings = []*functions.Overload{} - for _, fn := range e.functions { - bindings, err = fn.Bindings() - if err != nil { - return - } - e.functionBindings = append(e.functionBindings, bindings...) - } - }) - if err != nil { - return nil, err - } - - // Add the function bindings created via Function() options. - err = disp.Add(e.functionBindings...) - if err != nil { - return nil, err - } - // Set the attribute factory after the options have been set. var attrFactory interpreter.AttributeFactory attrFactorOpts := []interpreter.AttrFactoryOption{ @@ -242,13 +289,29 @@ func newProgram(e *Env, a *ast.AST, opts []ProgramOption) (Program, error) { } // Enable constant folding first. if p.evalOpts&OptOptimize == OptOptimize { - plannerOptions = append(plannerOptions, interpreter.Optimize()) - p.regexOptimizations = append(p.regexOptimizations, interpreter.MatchesRegexOptimization) + // The Optimize() decorator (set-membership, constant list/map literals, + // const type conversions) and the regex-constant compiler each walk + // every planned node. When the AST provably contains no node they can + // act on, adding them is pure overhead — so gate each on a single AST + // scan. The scan condition is a superset of what the decorators touch, + // so a decorator is only skipped when its target node is definitely + // absent and evaluation is never affected (an ungated regex would + // recompile per eval, etc.). + addOptimize, addRegex := scanOptTargets(a.Expr()) + if addOptimize { + plannerOptions = append(plannerOptions, interpreter.Optimize()) + } + if addRegex { + p.regexOptimizations = append(p.regexOptimizations, interpreter.MatchesRegexOptimization) + } } // Enable regex compilation of constants immediately after folding constants. if len(p.regexOptimizations) > 0 { plannerOptions = append(plannerOptions, interpreter.CompileRegexConstants(p.regexOptimizations...)) } + if limit := p.limits[limitRegexProgramSize]; limit > 0 { + plannerOptions = append(plannerOptions, interpreter.RegexProgramSizeLimit(limit)) + } // Enable exhaustive eval, state tracking and cost tracking last since they require a factory. if p.evalOpts&(OptExhaustiveEval|OptTrackState|OptTrackCost) != 0 { @@ -319,6 +382,11 @@ func (p *prog) Eval(input any) (out ref.Val, det *EvalDetails, err error) { } } }() + // Asynchronous calls cannot be resolved by a single-pass evaluation. Reject before doing any + // work (this also covers ContextEval, which delegates here); ConcurrentEval does not call Eval. + if p.hasAsync { + return nil, nil, errAsyncRequiresConcurrentEval + } // Build a hierarchical activation if there are default vars set. var frame *interpreter.ExecutionFrame if f, ok := input.(*interpreter.ExecutionFrame); ok { @@ -383,3 +451,194 @@ func (p *prog) newExecutionFrame(input any) (*interpreter.ExecutionFrame, error) return frame, nil } + +// newAsyncFrame creates an ExecutionFrame configured for asynchronous evaluation under the +// given context, wiring the observer and concurrency limit from the program options. +func (p *prog) newAsyncFrame(ctx context.Context, input any) (*interpreter.ExecutionFrame, error) { + frame, err := p.newExecutionFrame(input) + if err != nil { + return nil, err + } + if err := frame.SetContext(ctx, p.interruptCheckFrequency); err != nil { + frame.Close() + return nil, err + } + frame.SetAsyncObserver(p.asyncObserver) + frame.SetAsyncMaxConcurrency(resolveAsyncMaxConcurrency(p.asyncMaxConcurrency)) + return frame, nil +} + +// defaultAsyncMaxConcurrency bounds the number of concurrently launched async calls when the +// program does not configure AsyncMaxConcurrency. It exists so that a wide fan-out (e.g. an async +// call inside a comprehension over a large list) cannot spawn an unbounded number of goroutines. +const defaultAsyncMaxConcurrency = 100 + +// resolveAsyncMaxConcurrency maps the configured concurrency to the effective launch limit: +// - 0 (unset): apply defaultAsyncMaxConcurrency. +// - >0: use the configured value. +// - <0: unlimited (no launch limiter); use only if the caller bounds concurrency another way. +func resolveAsyncMaxConcurrency(configured int) int { + if configured == 0 { + return defaultAsyncMaxConcurrency + } + return configured +} + +// resolveCompletionBufferSize returns the size of the async completion channel. When unset, it +// defaults to the effective launch concurrency so that all in-flight calls can report completion +// without blocking. An unbuffered channel would make a completed call hold its launch slot until +// the evaluator drained it, throttling effective concurrency to the drain rate. +func (p *prog) resolveCompletionBufferSize() int { + if p.asyncCompletionBufferSize > 0 { + return p.asyncCompletionBufferSize + } + limit := resolveAsyncMaxConcurrency(p.asyncMaxConcurrency) + if limit < 0 { + // Unlimited launches: fall back to the default bound for the buffer so it stays finite. + return defaultAsyncMaxConcurrency + } + return limit +} + +// ConcurrentEval implements the Program interface. +func (p *prog) ConcurrentEval(ctx context.Context, input any) <-chan EvalResult { + resCh := make(chan EvalResult, 1) + if ctx == nil { + resCh <- EvalResult{Err: errors.New("context can not be nil")} + close(resCh) + return resCh + } + + go func() { + defer close(resCh) + // Ensure concurrent eval handles panic / recovery properly + defer func() { + if r := recover(); r != nil { + switch t := r.(type) { + case interpreter.EvalCancelledError: + resCh <- EvalResult{Err: t} + default: + resCh <- EvalResult{Err: fmt.Errorf("internal error: %v", r)} + } + } + }() + + frame, err := p.newAsyncFrame(ctx, input) + if err != nil { + resCh <- EvalResult{Err: err} + return + } + defer frame.Close() + + // Completions are signaled to this channel as async calls finish. The asyncCallState + // fan-in also selects on ctx.Done(), so the sender will not leak if this loop returns early. + completions := make(chan int64, p.resolveCompletionBufferSize()) + frame.SetCompletions(completions) + + for { + var out ref.Val + var det *EvalDetails + + if p.observable != nil { + det = &EvalDetails{} + out = p.observable.ObserveExec(frame, func(observed any) { + switch o := observed.(type) { + case interpreter.EvalState: + det.state = o + case *interpreter.CostTracker: + det.costTracker = o + } + }) + } else { + out = p.interpretable.Exec(frame) + } + + // Communicate errors quickly. + if types.IsError(out) { + var err error = out.(*types.Err) + if errors.Is(err, interpreter.InterruptError{}) { + err = fmt.Errorf("%w: %w", err, context.Cause(ctx)) + } + resCh <- EvalResult{Val: out, EvalDetails: det, Err: err} + return + } + + // A concrete (non-unknown) result is final. + unk, isUnknown := out.(*types.Unknown) + if !isUnknown || !unk.HasUnknownFunction() { + resCh <- EvalResult{Val: out, EvalDetails: det, Err: nil} + return + } + + // Post-execution dispatch: launch only the async calls required by the unknown result. + frame.DispatchPendingAsyncCalls(unk.IDs()) + + // The result depends on one or more unresolved async calls. Wait for completions and + // re-evaluate according to the configured drain strategy. + var batch []async.Call + + // Wait for at least one completion (or cancellation). + select { + case id := <-completions: + if call := frame.AsyncCall(id); call != nil { + batch = append(batch, call) + } + case <-ctx.Done(): + resCh <- EvalResult{Val: out, EvalDetails: det, Err: ctx.Err()} + return + } + + // Accumulate completions and consult the strategy. + var timer *time.Timer + reevaluate := false + for !reevaluate { + active := frame.ActiveAsyncCalls() + action := p.drainStrategy.NextAction(batch, active) + if action.Reevaluate { + break + } + + var timeoutCh <-chan time.Time + if action.WaitDuration > 0 { + if timer == nil { + timer = time.NewTimer(action.WaitDuration) + } else { + if !timer.Stop() { + select { + case <-timer.C: + default: + } + } + timer.Reset(action.WaitDuration) + } + timeoutCh = timer.C + } + + select { + case id := <-completions: + if call := frame.AsyncCall(id); call != nil { + batch = append(batch, call) + } + case <-timeoutCh: + reevaluate = true + case <-ctx.Done(): + if timer != nil { + timer.Stop() + } + resCh <- EvalResult{Val: out, EvalDetails: det, Err: ctx.Err()} + return + } + } + if timer != nil { + timer.Stop() + } + } + }() + + return resCh +} + +// errAsyncRequiresConcurrentEval is returned by the synchronous entry points (Eval, ContextEval) +// when the expression contains asynchronous function calls, which only ConcurrentEval can resolve. +var errAsyncRequiresConcurrentEval = errors.New( + "expression contains asynchronous function calls; use ConcurrentEval") diff --git a/vendor/github.com/google/cel-go/cel/validator.go b/vendor/github.com/google/cel-go/cel/validator.go index 952f88f41b..229defe79e 100644 --- a/vendor/github.com/google/cel-go/cel/validator.go +++ b/vendor/github.com/google/cel-go/cel/validator.go @@ -15,6 +15,7 @@ package cel import ( + "context" "fmt" "reflect" "regexp" @@ -22,14 +23,17 @@ import ( "github.com/google/cel-go/common/ast" "github.com/google/cel-go/common/env" "github.com/google/cel-go/common/overloads" + "github.com/google/cel-go/common/types" ) const ( - durationValidatorName = "cel.validator.duration" - regexValidatorName = "cel.validator.matches" - timestampValidatorName = "cel.validator.timestamp" - homogeneousValidatorName = "cel.validator.homogeneous_literals" - nestingLimitValidatorName = "cel.validator.comprehension_nesting_limit" + durationValidatorName = "cel.validator.duration" + regexValidatorName = "cel.validator.matches" + timestampValidatorName = "cel.validator.timestamp" + homogeneousValidatorName = "cel.validator.homogeneous_literals" + nestingLimitValidatorName = "cel.validator.comprehension_nesting_limit" + bindNestingLimitValidatorName = "cel.validator.bind_nesting_limit" + regexProgramSizeLimitValidatorName = "cel.validator.regex_program_size_limit" // HomogeneousAggregateLiteralExemptFunctions is the ValidatorConfig key used to configure // the set of function names which are exempt from homogeneous type checks. The expected type @@ -44,21 +48,25 @@ const ( var ( astValidatorFactories = map[string]ASTValidatorFactory{ nestingLimitValidatorName: func(val *env.Validator) (ASTValidator, error) { - if limit, found := val.ConfigValue("limit"); found { - // In case of protos, config value is of type by google.protobuf.Value, which numeric values are always a double. - if val, isDouble := limit.(float64); isDouble { - if val != float64(int64(val)) { - return nil, fmt.Errorf("invalid validator: %s, limit value is not a whole number: %v", nestingLimitValidatorName, limit) - } - return ValidateComprehensionNestingLimit(int(val)), nil - } - - if val, isInt := limit.(int); isInt { - return ValidateComprehensionNestingLimit(val), nil - } - return nil, fmt.Errorf("invalid validator: %s unsupported limit type: %v", nestingLimitValidatorName, limit) + limit, err := validatorIntConfig(val, "limit") + if err != nil { + return nil, err } - return nil, fmt.Errorf("invalid validator: %s missing limit", nestingLimitValidatorName) + return ValidateComprehensionNestingLimit(limit), nil + }, + bindNestingLimitValidatorName: func(val *env.Validator) (ASTValidator, error) { + limit, err := validatorIntConfig(val, "limit") + if err != nil { + return nil, err + } + return ValidateBindNestingLimit(limit), nil + }, + regexProgramSizeLimitValidatorName: func(val *env.Validator) (ASTValidator, error) { + limit, err := validatorIntConfig(val, "limit") + if err != nil { + return nil, err + } + return ValidateRegexProgramSizeLimit(limit), nil }, durationValidatorName: func(*env.Validator) (ASTValidator, error) { return ValidateDurationLiterals(), nil @@ -80,12 +88,20 @@ type ASTValidatorFactory func(*env.Validator) (ASTValidator, error) // ASTValidators configures a set of ASTValidator instances into the target environment. // -// Validators are applied in the order in which the are specified and are treated as singletons. -// The same ASTValidator with a given name will not be applied more than once. +// Validators are applied in the order in which they are specified. +// If an ASTValidator with the same name is already configured, it will be replaced. func ASTValidators(validators ...ASTValidator) EnvOption { return func(e *Env) (*Env, error) { for _, v := range validators { - if !e.HasValidator(v.Name()) { + found := false + for i, existing := range e.validators { + if existing.Name() == v.Name() { + e.validators[i] = v + found = true + break + } + } + if !found { e.validators = append(e.validators, v) } } @@ -232,6 +248,18 @@ func ValidateComprehensionNestingLimit(limit int) ASTValidator { return nestingLimitValidator{limit: limit} } +// ValidateBindNestingLimit ensures that cel.bind() macro nesting does not exceed the specified limit. +// +// This validator can be useful for preventing arbitrarily nested cel.bind() macro calls. +func ValidateBindNestingLimit(limit int) ASTValidator { + return bindNestingLimitValidator{limit: limit} +} + +// ValidateRegexProgramSizeLimit ensures that regex pattern literals do not exceed the specified regex program size limit. +func ValidateRegexProgramSizeLimit(limit int) ASTValidator { + return regexProgramSizeLimitValidator{limit: limit} +} + type argChecker func(env *Env, call, arg ast.Expr) error func newFormatValidator(funcName string, argNum int, check argChecker) formatValidator { @@ -284,8 +312,9 @@ func evalCall(env *Env, call, arg ast.Expr) error { if err != nil { return err } - _, _, err = prg.Eval(NoVars()) - return err + resCh := prg.ConcurrentEval(context.Background(), NoVars()) + res := <-resCh + return res.Err } func compileRegex(_ *Env, _, arg ast.Expr) error { @@ -430,8 +459,7 @@ func (v nestingLimitValidator) Validate(e *Env, _ ValidatorConfig, a *ast.AST, i } // When the comprehension has an empty range, continue to the next ancestor // as this comprehension does not have any associated cost. - iterRange := e.AsComprehension().IterRange() - if iterRange.Kind() == ast.ListKind && iterRange.AsList().Size() == 0 { + if isEmptyRangeComprehension(e) { e, hasParent = e.Parent() continue } @@ -445,3 +473,145 @@ func (v nestingLimitValidator) Validate(e *Env, _ ValidatorConfig, a *ast.AST, i } } } + +type bindNestingLimitValidator struct { + limit int +} + +// Name returns the name of the cel.bind nesting limit validator. +func (v bindNestingLimitValidator) Name() string { + return bindNestingLimitValidatorName +} + +// ToConfig converts the ASTValidator to an env.Validator specifying the validator name and the nesting limit +// as an integer value: {"limit": int} +func (v bindNestingLimitValidator) ToConfig() *env.Validator { + return env.NewValidator(v.Name()).SetConfig(map[string]any{"limit": v.limit}) +} + +type regexProgramSizeLimitValidator struct { + limit int +} + +// Name returns the name of the regex program size limit validator. +func (v regexProgramSizeLimitValidator) Name() string { + return regexProgramSizeLimitValidatorName +} + +// ToConfig converts the ASTValidator to an env.Validator specifying the validator name and the limit. +func (v regexProgramSizeLimitValidator) ToConfig() *env.Validator { + return env.NewValidator(v.Name()).SetConfig(map[string]any{"limit": v.limit}) +} + +// Validate implements the ASTValidator interface method. +func (v bindNestingLimitValidator) Validate(e *Env, _ ValidatorConfig, a *ast.AST, iss *Issues) { + root := ast.NavigateAST(a) + comprehensions := ast.MatchDescendants(root, ast.KindMatcher(ast.ComprehensionKind)) + var celBinds []ast.NavigableExpr + for _, comp := range comprehensions { + if isCelBind(comp) { + celBinds = append(celBinds, comp) + } + } + if len(celBinds) <= v.limit { + return + } + for _, comp := range celBinds { + count := 0 + e := comp + hasParent := true + for hasParent { + if isCelBind(e) { + count++ + if count > v.limit { + iss.ReportErrorAtID(comp.ID(), "cel.bind exceeds nesting limit") + break + } + } + e, hasParent = e.Parent() + } + } +} + +func (v regexProgramSizeLimitValidator) Validate(e *Env, _ ValidatorConfig, a *ast.AST, iss *Issues) { + if v.limit <= 0 { + return + } + root := ast.NavigateAST(a) + callExprs := ast.MatchDescendants(root, ast.KindMatcher(ast.CallKind)) + for _, call := range callExprs { + c := call.AsCall() + fn := c.FunctionName() + if !isRegexFunctionName(fn) { + continue + } + args := c.Args() + var regexArgIndex int + if (fn == overloads.Matches || fn == "matches") && c.Target() != nil { + regexArgIndex = 0 + } else { + regexArgIndex = 1 + } + if len(args) <= regexArgIndex { + continue + } + arg := args[regexArgIndex] + if arg.Kind() != ast.LiteralKind { + continue + } + pattern, ok := arg.AsLiteral().Value().(string) + if !ok { + continue + } + sz, err := types.RegexProgramSize(pattern) + if err != nil { + // Invalid regex literals are handled in a different validator. + continue + } + if sz > v.limit { + iss.ReportErrorAtID(arg.ID(), "regex program size %d exceeds limit of %d", sz, v.limit) + } + } +} + +func isEmptyRangeComprehension(e ast.NavigableExpr) bool { + if e.Kind() != ast.ComprehensionKind { + return false + } + iterRange := e.AsComprehension().IterRange() + return iterRange.Kind() == ast.ListKind && iterRange.AsList().Size() == 0 +} + +func isCelBind(e ast.NavigableExpr) bool { + if !isEmptyRangeComprehension(e) { + return false + } + compre := e.AsComprehension() + loopCond := compre.LoopCondition() + loopStep := compre.LoopStep() + return compre.IterVar() == unusedIterVar && + loopCond.Kind() == ast.LiteralKind && loopCond.AsLiteral().Value() == false && + loopStep.Kind() == ast.IdentKind && loopStep.AsIdent() == compre.AccuVar() +} + +func isRegexFunctionName(fn string) bool { + return fn == overloads.Matches || fn == "matches" || fn == "regex.extract" || fn == "regex.extractAll" || fn == "regex.replace" +} + +func validatorIntConfig(val *env.Validator, configKey string) (int, error) { + if limit, found := val.ConfigValue(configKey); found { + // In case of protos, config value is of type google.protobuf.Value, which numeric values are always a double. + if v, isDouble := limit.(float64); isDouble { + if v != float64(int64(v)) { + return 0, fmt.Errorf("invalid validator: %s, %s value is not a whole number: %v", val.Name, configKey, limit) + } + return int(v), nil + } + + if v, isInt := limit.(int); isInt { + return v, nil + } + return 0, fmt.Errorf("invalid validator: %s unsupported %s type: %v", val.Name, configKey, limit) + } + return 0, fmt.Errorf("invalid validator: %s missing %s", val.Name, configKey) +} diff --git a/vendor/github.com/google/cel-go/checker/env.go b/vendor/github.com/google/cel-go/checker/env.go index 477918c485..9c3de9517b 100644 --- a/vendor/github.com/google/cel-go/checker/env.go +++ b/vendor/github.com/google/cel-go/checker/env.go @@ -97,7 +97,7 @@ func NewEnv(container *containers.Container, provider types.Provider, opts ...Op filteredOverloadIDs = make(map[string]struct{}) } if envOptions.validatedDeclarations != nil { - declarations = envOptions.validatedDeclarations.Copy() + declarations = envOptions.validatedDeclarations.PushInherited() } return &Env{ container: container, diff --git a/vendor/github.com/google/cel-go/checker/options.go b/vendor/github.com/google/cel-go/checker/options.go index af714323ba..10d3bcbc0a 100644 --- a/vendor/github.com/google/cel-go/checker/options.go +++ b/vendor/github.com/google/cel-go/checker/options.go @@ -33,8 +33,8 @@ func CrossTypeNumericComparisons(enabled bool) Option { } } -// ValidatedDeclarations provides a references to validated declarations which will be copied -// into new checker instances. +// ValidatedDeclarations provides a reference to validated declarations which will be inherited +// as a parent scope without copying. func ValidatedDeclarations(env *Env) Option { return func(opts *options) error { opts.validatedDeclarations = env.validatedDeclarations() @@ -49,3 +49,4 @@ func JSONFieldNames(enabled bool) Option { return nil } } + diff --git a/vendor/github.com/google/cel-go/checker/scopes.go b/vendor/github.com/google/cel-go/checker/scopes.go index 9ae9832e15..2fcfdf29e2 100644 --- a/vendor/github.com/google/cel-go/checker/scopes.go +++ b/vendor/github.com/google/cel-go/checker/scopes.go @@ -25,8 +25,9 @@ import ( // Each Groups value is a mapping of names to Decls in the ident and function namespaces. // Lookups are performed such that bindings in inner scopes shadow those in outer scopes. type Scopes struct { - parent *Scopes - scopes *Group + parent *Scopes + inherited *Scopes + scopes *Group } // newScopes creates a new, empty Scopes. @@ -37,19 +38,6 @@ func newScopes() *Scopes { } } -// Copy creates a copy of the current Scopes values, including a copy of its parent if non-nil. -func (s *Scopes) Copy() *Scopes { - cpy := newScopes() - if s == nil { - return cpy - } - if s.parent != nil { - cpy.parent = s.parent.Copy() - } - cpy.scopes = s.scopes.copy() - return cpy -} - // Push creates a new Scopes value which references the current Scope as its parent. func (s *Scopes) Push() *Scopes { return &Scopes{ @@ -58,6 +46,14 @@ func (s *Scopes) Push() *Scopes { } } +// PushInherited creates a new Scopes value which references the current Scope as its inherited parent. +func (s *Scopes) PushInherited() *Scopes { + return &Scopes{ + inherited: s, + scopes: newGroup(), + } +} + // Pop returns the parent Scopes value for the current scope, or the current scope if the parent // is nil. func (s *Scopes) Pop() *Scopes { @@ -74,20 +70,6 @@ func (s *Scopes) AddIdent(decl *decls.VariableDecl) { s.scopes.idents[decl.Name()] = decl } -// FindIdent finds the first ident Decl with a matching name in Scopes, or nil if one cannot be -// found. -// Note: The search is performed from innermost to outermost. -func (s *Scopes) FindIdent(name string) *decls.VariableDecl { - name = strings.TrimPrefix(name, ".") - if ident, found := s.scopes.idents[name]; found { - return ident - } - if s.parent != nil { - return s.parent.FindIdent(name) - } - return nil -} - // FindIdentInScope finds the first ident Decl with a matching name in the current Scopes value, or // nil if one does not exist. // Note: The search is only performed on the current scope and does not search outer scopes. @@ -116,7 +98,13 @@ func (s *Scopes) FindGlobalIdent(name string) *decls.VariableDecl { for scope.parent != nil { scope = scope.parent } - return scope.FindIdentInScope(name) + if ident := scope.FindIdentInScope(name); ident != nil { + return ident + } + if scope.inherited != nil { + return scope.inherited.FindGlobalIdent(name) + } + return nil } // SetFunction adds the function Decl to the current scope. @@ -134,7 +122,14 @@ func (s *Scopes) FindFunction(name string) *decls.FunctionDecl { return fn } if s.parent != nil { - return s.parent.FindFunction(name) + if fn := s.parent.FindFunction(name); fn != nil { + return fn + } + } + if s.inherited != nil { + if fn := s.inherited.FindFunction(name); fn != nil { + return fn + } } return nil } @@ -147,22 +142,6 @@ type Group struct { functions map[string]*decls.FunctionDecl } -// copy creates a new Group instance with a shallow copy of the variables and functions. -// If callers need to mutate the exprpb.Decl definitions for a Function, they should copy-on-write. -func (g *Group) copy() *Group { - cpy := &Group{ - idents: make(map[string]*decls.VariableDecl, len(g.idents)), - functions: make(map[string]*decls.FunctionDecl, len(g.functions)), - } - for n, id := range g.idents { - cpy.idents[n] = id - } - for n, fn := range g.functions { - cpy.functions[n] = fn - } - return cpy -} - // newGroup creates a new Group with empty maps for identifiers and functions. func newGroup() *Group { return &Group{ diff --git a/vendor/github.com/google/cel-go/common/ast/ast.go b/vendor/github.com/google/cel-go/common/ast/ast.go index 3ae2e1063b..c8f8f8a022 100644 --- a/vendor/github.com/google/cel-go/common/ast/ast.go +++ b/vendor/github.com/google/cel-go/common/ast/ast.go @@ -172,6 +172,14 @@ func (a *AST) IDs() map[int64]bool { return visitor } +// NodeCount returns the total number of expression nodes in the AST, including macro calls. +func NodeCount(a *AST) int { + if a == nil { + return 0 + } + return len(a.IDs()) +} + // ClearUnusedIDs removes IDs not used in the AST or macro calls from SourceInfo. func (a *AST) ClearUnusedIDs() { ids := a.IDs() diff --git a/vendor/github.com/google/cel-go/common/ast/navigable.go b/vendor/github.com/google/cel-go/common/ast/navigable.go index 13e5777b50..364edfa3af 100644 --- a/vendor/github.com/google/cel-go/common/ast/navigable.go +++ b/vendor/github.com/google/cel-go/common/ast/navigable.go @@ -181,6 +181,29 @@ func PreOrderVisit(expr Expr, visitor Visitor) { visit(expr, visitor, preOrder, 0, 0) } +// ExceedsDepth determines whether the AST contains expressions nested deeper than the specified +// maxDepth. The root expression has depth 0, so a maxDepth of 250 permits expressions nested up +// to and including 250 levels deep. +// +// The traversal is bounded: it descends at most maxDepth+1 levels, so it remains safe to call on +// adversarially deep inputs that could otherwise exhaust the Go stack during later checking or +// planning. A non-positive maxDepth disables the check and returns false. +func ExceedsDepth(a *AST, maxDepth int) bool { + if a == nil || maxDepth <= 0 { + return false + } + exceedsDepth := false + visitor := NewExprVisitor(func(e Expr) { + if nav, ok := e.(NavigableExpr); ok && nav.Depth() >= maxDepth { + exceedsDepth = true + } + }) + // Bound the walk to maxDepth+1 levels so it never recurses past the first level that exceeds + // the limit, keeping the check itself safe on the deep inputs it guards against. + visit(NavigateAST(a), visitor, postOrder, 0, maxDepth+1) + return exceedsDepth +} + type visitOrder int const ( diff --git a/vendor/github.com/google/cel-go/common/decls/decls.go b/vendor/github.com/google/cel-go/common/decls/decls.go index cd4d3a5659..5c50b8e99e 100644 --- a/vendor/github.com/google/cel-go/common/decls/decls.go +++ b/vendor/github.com/google/cel-go/common/decls/decls.go @@ -16,6 +16,7 @@ package decls import ( + "context" "fmt" "strings" @@ -77,6 +78,9 @@ type FunctionDecl struct { // overloadOrdinals indicates the order in which the overload was declared. overloadOrdinals []string + + // overloadDecls caches the slice of overloads in declaration order. + overloadDecls []*OverloadDecl } type declarationState int @@ -150,7 +154,8 @@ func (f *FunctionDecl) Merge(other *FunctionDecl) (*FunctionDecl, error) { name: f.Name(), overloads: make(map[string]*OverloadDecl, len(f.overloads)), singleton: f.singleton, - overloadOrdinals: make([]string, len(f.overloads)), + overloadOrdinals: make([]string, len(f.overloadOrdinals)), + overloadDecls: make([]*OverloadDecl, len(f.overloadDecls)), // if one function is expecting type-guards and the other is not, then they // must not be disabled. disableTypeGuards: f.disableTypeGuards && other.disableTypeGuards, @@ -169,6 +174,7 @@ func (f *FunctionDecl) Merge(other *FunctionDecl) (*FunctionDecl, error) { } // baseline copy of the overloads and their ordinals copy(merged.overloadOrdinals, f.overloadOrdinals) + copy(merged.overloadDecls, f.overloadDecls) for oID, o := range f.overloads { merged.overloads[oID] = o } @@ -231,11 +237,13 @@ func (f *FunctionDecl) Subset(selector OverloadSelector) *FunctionDecl { } overloads := make(map[string]*OverloadDecl) overloadOrdinals := make([]string, 0, len(f.overloadOrdinals)) + overloadDecls := make([]*OverloadDecl, 0, len(f.overloadDecls)) for _, oID := range f.overloadOrdinals { overload := f.overloads[oID] if selector(overload) { overloads[oID] = overload overloadOrdinals = append(overloadOrdinals, oID) + overloadDecls = append(overloadDecls, overload) } } if len(overloads) == 0 { @@ -249,6 +257,7 @@ func (f *FunctionDecl) Subset(selector OverloadSelector) *FunctionDecl { disableTypeGuards: f.disableTypeGuards, state: f.state, overloadOrdinals: overloadOrdinals, + overloadDecls: overloadDecls, } return subset } @@ -272,6 +281,12 @@ func (f *FunctionDecl) AddOverload(overload *OverloadDecl) error { // Allow redefinition of an overload implementation so long as the signatures match. if overload.HasBinding() { f.overloads[oID] = overload + for i, decl := range f.overloadDecls { + if decl.ID() == oID { + f.overloadDecls[i] = overload + break + } + } } // Allow redefinition of the doc string. if len(overload.doc) != 0 && o.doc != overload.doc { @@ -287,20 +302,16 @@ func (f *FunctionDecl) AddOverload(overload *OverloadDecl) error { } f.overloadOrdinals = append(f.overloadOrdinals, overload.ID()) f.overloads[overload.ID()] = overload + f.overloadDecls = append(f.overloadDecls, overload) return nil } // OverloadDecls returns the overload declarations in the order in which they were declared. func (f *FunctionDecl) OverloadDecls() []*OverloadDecl { - var emptySet []*OverloadDecl if f == nil { - return emptySet - } - overloads := make([]*OverloadDecl, 0, len(f.overloads)) - for _, oID := range f.overloadOrdinals { - overloads = append(overloads, f.overloads[oID]) + return nil } - return overloads + return f.overloadDecls } // HasSingletonBinding indicates whether the function has a singleton binding definition. @@ -316,8 +327,12 @@ func (f *FunctionDecl) HasLateBinding() bool { if f == nil { return false } + if f.singleton != nil && f.singleton.Async != nil { + return true + } for _, oID := range f.overloadOrdinals { - if f.overloads[oID].HasLateBinding() { + o := f.overloads[oID] + if o.HasLateBinding() { return true } } @@ -342,6 +357,7 @@ func (f *FunctionDecl) Bindings() ([]*functions.Overload, error) { Unary: o.guardedUnaryOp(f.Name(), f.disableTypeGuards), Binary: o.guardedBinaryOp(f.Name(), f.disableTypeGuards), Function: o.guardedFunctionOp(f.Name(), f.disableTypeGuards), + Async: o.guardedAsyncOp(f.Name(), f.disableTypeGuards), OperandTrait: o.OperandTrait(), NonStrict: o.IsNonStrict(), } @@ -362,6 +378,7 @@ func (f *FunctionDecl) Bindings() ([]*functions.Overload, error) { Unary: f.singleton.Unary, Binary: f.singleton.Binary, Function: f.singleton.Function, + Async: f.singleton.Async, OperandTrait: f.singleton.OperandTrait, }, } @@ -380,6 +397,7 @@ func (f *FunctionDecl) Bindings() ([]*functions.Overload, error) { Unary: overloads[0].Unary, Binary: overloads[0].Binary, Function: overloads[0].Function, + Async: overloads[0].Async, NonStrict: overloads[0].NonStrict, OperandTrait: overloads[0].OperandTrait, }), nil @@ -538,6 +556,30 @@ func SingletonFunctionBinding(fn functions.FunctionOp, traits ...int) FunctionOp } } +// SingletonAsyncBinding creates a singleton async function definition to be used with all function overloads. +// The provided function is called in its own goroutine with the provided context. The function should +// block until the result is available, and the framework manages goroutine and channel lifecycle. +// +// Note, this approach works well if operand is expected to have a specific trait which it implements, +// e.g. traits.ContainerType. Otherwise, prefer per-overload async bindings. +func SingletonAsyncBinding(fn functions.BlockingAsyncOp, traits ...int) FunctionOpt { + trait := 0 + for _, t := range traits { + trait = trait | t + } + return func(f *FunctionDecl) (*FunctionDecl, error) { + if f.singleton != nil { + return nil, fmt.Errorf("function already has a singleton binding: %s", f.Name()) + } + f.singleton = &functions.Overload{ + Operator: f.Name(), + Async: wrapAsyncOp(fn), + OperandTrait: trait, + } + return f, nil + } +} + // Overload defines a new global overload with an overload id, argument types, and result type. Through the // use of OverloadOpt options, the overload may also be configured with a binding, an operand trait, and to // be non-strict. @@ -622,6 +664,8 @@ type OverloadDecl struct { binaryOp functions.BinaryOp // functionOp is a catch-all for zero-arity and three-plus arity functions. functionOp functions.FunctionOp + // asyncOp is an asynchronous function binding that returns a channel. + asyncOp functions.AsyncOp } // Examples returns a list of string examples for the overload. @@ -677,7 +721,7 @@ func (o *OverloadDecl) HasLateBinding() bool { if o == nil { return false } - return o.hasLateBinding + return o.hasLateBinding || o.asyncOp != nil } // OperandTrait returns the trait mask of the first operand to the overload call, e.g. @@ -750,7 +794,7 @@ func (o *OverloadDecl) SignatureOverlaps(other *OverloadDecl) bool { // HasBinding indicates whether the overload already has a definition. func (o *OverloadDecl) HasBinding() bool { - return o != nil && (o.unaryOp != nil || o.binaryOp != nil || o.functionOp != nil) + return o != nil && (o.unaryOp != nil || o.binaryOp != nil || o.functionOp != nil || o.asyncOp != nil) } // guardedUnaryOp creates an invocation guard around the provided unary operator, if one is defined. @@ -792,6 +836,22 @@ func (o *OverloadDecl) guardedFunctionOp(funcName string, disableTypeGuards bool } } +// guardedAsyncOp creates an invocation guard around the provided async function binding, if one is provided. +func (o *OverloadDecl) guardedAsyncOp(funcName string, disableTypeGuards bool) functions.AsyncOp { + if o.asyncOp == nil { + return nil + } + return func(ctx context.Context, args ...ref.Val) <-chan ref.Val { + if !o.matchesRuntimeSignature(disableTypeGuards, args...) { + ch := make(chan ref.Val, 1) + ch <- MaybeNoSuchOverload(funcName, args...) + close(ch) + return ch + } + return o.asyncOp(ctx, args...) + } +} + // matchesRuntimeUnarySignature indicates whether the argument type is runtime assiganble to the overload's expected argument. func (o *OverloadDecl) matchesRuntimeUnarySignature(disableTypeGuards bool, arg ref.Val) bool { return matchRuntimeArgType(o.IsNonStrict(), disableTypeGuards, o.ArgTypes()[0], arg) && @@ -825,6 +885,8 @@ func matchRuntimeArgType(nonStrict, disableTypeGuards bool, argType *types.Type, if nonStrict && (disableTypeGuards || types.IsUnknownOrError(arg)) { return true } + // Note, early returns and unknown aggregation happen in the interpretable.go file; however, this check is here + // for defense in depth or for scenarios where someone manipulates bindings to offer their own dispatch logic. if types.IsUnknownOrError(arg) { return false } @@ -897,6 +959,40 @@ func FunctionBinding(binding functions.FunctionOp) OverloadOpt { } } +// AsyncBinding provides the implementation of an asynchronous overload. The provided function +// is called in its own goroutine with the provided context. The function should block until +// the result is available, and the framework manages goroutine and channel lifecycle. +// +// This follows the same pattern used by gRPC-Go and other major Go frameworks where user +// code is synchronous and the framework manages concurrency. +func AsyncBinding(fn functions.BlockingAsyncOp) OverloadOpt { + return func(o *OverloadDecl) (*OverloadDecl, error) { + if o.HasBinding() { + return nil, fmt.Errorf("overload already has a binding: %s", o.ID()) + } + if o.hasLateBinding { + return nil, fmt.Errorf("overload already has a late binding: %s", o.ID()) + } + o.asyncOp = wrapAsyncOp(fn) + return o, nil + } +} + +// wrapAsyncOp adapts a blocking function into the channel-based AsyncOp used internally. +// +// The blocking function is invoked synchronously and its result delivered on a buffered channel. +// The interpreter always invokes an AsyncOp from a dedicated goroutine, so running the blocking +// call inline here keeps the framework to a single goroutine per async call rather than spawning +// an additional one to bridge blocking-to-channel. +func wrapAsyncOp(fn functions.BlockingAsyncOp) functions.AsyncOp { + return func(ctx context.Context, args ...ref.Val) <-chan ref.Val { + ch := make(chan ref.Val, 1) + ch <- fn(ctx, args...) + close(ch) + return ch + } +} + // LateFunctionBinding indicates that the function has a binding which is not known at compile time. // This is useful for functions which have side-effects or are not deterministically computable. func LateFunctionBinding() OverloadOpt { diff --git a/vendor/github.com/google/cel-go/common/stdlib/standard.go b/vendor/github.com/google/cel-go/common/stdlib/standard.go index bbbf2f7d9b..3a151462ed 100644 --- a/vendor/github.com/google/cel-go/common/stdlib/standard.go +++ b/vendor/github.com/google/cel-go/common/stdlib/standard.go @@ -16,6 +16,8 @@ package stdlib import ( + "fmt" + "math" "strconv" "strings" "time" @@ -310,6 +312,9 @@ func init() { argTypes(types.DurationType, types.DurationType), types.BoolType, decls.OverloadExamples(`duration('1ms') < duration('1s') // true`)), decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + if isNaN(lhs) || isNaN(rhs) { + return types.False + } cmp := lhs.(traits.Comparer).Compare(rhs) if cmp == types.IntNegOne { return types.True @@ -367,6 +372,9 @@ func init() { argTypes(types.DurationType, types.DurationType), types.BoolType, decls.OverloadExamples(`duration('1ms') <= duration('1s') // true`)), decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + if isNaN(lhs) || isNaN(rhs) { + return types.False + } cmp := lhs.(traits.Comparer).Compare(rhs) if cmp == types.IntNegOne || cmp == types.IntZero { return types.True @@ -424,6 +432,9 @@ func init() { argTypes(types.DurationType, types.DurationType), types.BoolType, decls.OverloadExamples(`duration('1ms') > duration('1us') // true`)), decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + if isNaN(lhs) || isNaN(rhs) { + return types.False + } cmp := lhs.(traits.Comparer).Compare(rhs) if cmp == types.IntOne { return types.True @@ -481,6 +492,9 @@ func init() { argTypes(types.DurationType, types.DurationType), types.BoolType, decls.OverloadExamples(`duration('60s') >= duration('1m') // true`)), decls.SingletonBinaryBinding(func(lhs, rhs ref.Val) ref.Val { + if isNaN(lhs) || isNaN(rhs) { + return types.False + } cmp := lhs.(traits.Comparer).Compare(rhs) if cmp == types.IntOne || cmp == types.IntZero { return types.True @@ -926,6 +940,11 @@ func noBinaryOverrides(rhs, lhs ref.Val) ref.Val { return types.NoSuchOverloadErr() } +func isNaN(val ref.Val) bool { + d, ok := val.(types.Double) + return ok && math.IsNaN(float64(d)) +} + func noFunctionOverrides(args ...ref.Val) ref.Val { return types.NoSuchOverloadErr() } @@ -1035,7 +1054,7 @@ func inTimeZone(ts, tz ref.Val) (time.Time, error) { } // If the input is not the name of a timezone (for example, 'US/Central'), it should be a numerical offset from UTC - // in the format ^(+|-)(0[0-9]|1[0-4]):[0-5][0-9]$. The numerical input is parsed in terms of hours and minutes. + // in the format ^(+|-)([01]\d|2[0-3]):[0-5][0-9]$. The numerical input is parsed in terms of hours and minutes. hr, err := strconv.Atoi(string(val[0:ind])) if err != nil { return time.Time{}, err @@ -1044,6 +1063,12 @@ func inTimeZone(ts, tz ref.Val) (time.Time, error) { if err != nil { return time.Time{}, err } + if hr < -23 || hr > 23 { + return time.Time{}, fmt.Errorf("timezone offset hours out of range [-23, 23]: %s", val) + } + if min < 0 || min > 59 { + return time.Time{}, fmt.Errorf("timezone offset minutes out of range [0, 59]: %s", val) + } var offset int if string(val[0]) == "-" { offset = hr*60 - min diff --git a/vendor/github.com/google/cel-go/common/types/BUILD.bazel b/vendor/github.com/google/cel-go/common/types/BUILD.bazel index 37d4df4954..4ecc40031d 100644 --- a/vendor/github.com/google/cel-go/common/types/BUILD.bazel +++ b/vendor/github.com/google/cel-go/common/types/BUILD.bazel @@ -21,12 +21,15 @@ go_library( "format.go", "list.go", "map.go", + "native.go", "null.go", "object.go", "optional.go", "overflow.go", "provider.go", + "regex.go", "string.go", + "struct.go", "timestamp.go", "types.go", "uint.go", @@ -67,10 +70,12 @@ go_test( "json_struct_test.go", "list_test.go", "map_test.go", + "native_test.go", "null_test.go", "object_test.go", "optional_test.go", "provider_test.go", + "regex_test.go", "string_test.go", "timestamp_test.go", "types_test.go", @@ -80,13 +85,19 @@ go_test( ], embed = [":go_default_library"], deps = [ + "//cel:go_default_library", + "//common/types/pb:go_default_library", "//common/types/ref:go_default_library", + "//common/types/traits:go_default_library", + "//ext:go_default_library", "//test:go_default_library", "//test/proto3pb:test_all_types_go_proto", "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library", "@org_golang_google_protobuf//encoding/protojson:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//types/known/anypb:go_default_library", "@org_golang_google_protobuf//types/known/durationpb:go_default_library", + "@org_golang_google_protobuf//types/known/structpb:go_default_library", "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", ], ) diff --git a/vendor/github.com/google/cel-go/common/types/bytes.go b/vendor/github.com/google/cel-go/common/types/bytes.go index 88da05315c..2eefb5d7f7 100644 --- a/vendor/github.com/google/cel-go/common/types/bytes.go +++ b/vendor/github.com/google/cel-go/common/types/bytes.go @@ -44,7 +44,10 @@ func (b Bytes) Add(other ref.Val) ref.Val { if !ok { return ValOrErr(other, "no such overload") } - return append(b, otherBytes...) + sum := make([]byte, 0, len(b)+len(otherBytes)) + sum = append(sum, b...) + sum = append(sum, otherBytes...) + return Bytes(sum) } // Compare implements traits.Comparer interface method by lexicographic ordering. diff --git a/vendor/github.com/google/cel-go/common/types/native.go b/vendor/github.com/google/cel-go/common/types/native.go new file mode 100644 index 0000000000..33c897b430 --- /dev/null +++ b/vendor/github.com/google/cel-go/common/types/native.go @@ -0,0 +1,583 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the me. +// limitations under the License. + +package types + +import ( + "errors" + "fmt" + "reflect" + "strings" + "time" + + "google.golang.org/protobuf/reflect/protoreflect" + + "github.com/google/cel-go/common/types/ref" + "github.com/google/cel-go/common/types/traits" + + structpb "google.golang.org/protobuf/types/known/structpb" +) + +var ( + nativeObjTraitMask = traits.FieldTesterType | traits.IndexerType + jsonValueType = reflect.TypeFor[*structpb.Value]() + jsonStructType = reflect.TypeFor[*structpb.Struct]() + + pbMsgInterfaceType = reflect.TypeFor[protoreflect.ProtoMessage]() + refValType = reflect.TypeFor[ref.Val]() + timestampType = reflect.TypeFor[time.Time]() + durationType = reflect.TypeFor[time.Duration]() + + errDuplicatedFieldName = errors.New("field name already exists in struct") +) + +// NewNativeType constructs a NativeType instance for a Go struct reflect.Type. +func NewNativeType(rawType reflect.Type, opts ...NativeTypeOption) (*NativeType, error) { + tpOptions := NativeTypeOptions{} + for _, opt := range opts { + if err := opt(&tpOptions); err != nil { + return nil, err + } + } + return newNativeType(rawType, tpOptions.fieldNameHandler) +} + +// NativeTypesFieldNameHandler is a handler for mapping a reflect.StructField to a CEL field name. +// This can be used to override the default Go struct field to CEL field name mapping. +type NativeTypesFieldNameHandler = func(field reflect.StructField) string + +// NativeTypeOptions holds options for native types. +type NativeTypeOptions struct { + fieldNameHandler NativeTypesFieldNameHandler +} + +// NativeTypeOption is a functional option for configuring handling of native types. +type NativeTypeOption func(*NativeTypeOptions) error + +// ParseStructTags configures if native types field names should be overridable by CEL struct tags. +// This is equivalent to ParseStructTag("cel"). +func ParseStructTags(enabled bool) NativeTypeOption { + if enabled { + return ParseStructTag("cel") + } + return ParseStructField(nil) +} + +// ParseStructTag configures the struct tag to parse. The 0th item in the tag is used as the name of the CEL field. +func ParseStructTag(tag string) NativeTypeOption { + return ParseStructField(fieldNameByTag(tag)) +} + +// ParseStructField configures how to parse Go struct fields. It can be used to customize struct field parsing. +func ParseStructField(handler NativeTypesFieldNameHandler) NativeTypeOption { + return func(opts *NativeTypeOptions) error { + opts.fieldNameHandler = handler + return nil + } +} + +func fieldNameByTag(structTagToParse string) func(field reflect.StructField) string { + return func(field reflect.StructField) string { + tag, found := field.Tag.Lookup(structTagToParse) + if found { + splits := strings.Split(tag, ",") + if len(splits) > 0 { + name := splits[0] + return name + } + } + return field.Name + } +} + +func isSkippedFieldName(name string) bool { + return name == "" || name == "-" +} + +// NativeType represents a CEL struct type descriptor generated from a native Go struct. +type NativeType struct { + typeName string + refType reflect.Type + fieldsByName map[string]reflect.StructField +} + +// ReflectType implements StructTypeDescriptor. +func (t *NativeType) ReflectType() reflect.Type { + return t.refType +} + +// Adapt implements StructTypeDescriptor. +func (t *NativeType) Adapt(adapter Adapter, value any) ref.Val { + if value == nil { + return NullValue + } + refVal := reflect.ValueOf(value) + if refVal.Kind() == reflect.Ptr { + if refVal.IsNil() { + return NullValue + } + refVal = refVal.Elem() + } + return &nativeObj{ + Adapter: adapter, + val: value, + valType: t, + refValue: refVal, + } +} + +// ConvertToNative implements ref.Val.ConvertToNative. +func (t *NativeType) ConvertToNative(typeDesc reflect.Type) (any, error) { + return nil, fmt.Errorf("type conversion error for type to '%v'", typeDesc) +} + +// ConvertToType implements ref.Val.ConvertToType. +func (t *NativeType) ConvertToType(typeVal ref.Type) ref.Val { + switch typeVal { + case TypeType: + return TypeType + } + return NewErr("type conversion error from '%s' to '%s'", TypeType, typeVal) +} + +// Equal returns true if both type names are equal to each other. +func (t *NativeType) Equal(other ref.Val) ref.Val { + otherType, ok := other.(ref.Type) + return Bool(ok && t.TypeName() == otherType.TypeName()) +} + +// HasTrait implements the ref.Type interface method. +func (t *NativeType) HasTrait(trait int) bool { + return nativeObjTraitMask&trait == trait +} + +// String implements the fmt.Stringer interface method. +func (t *NativeType) String() string { + return t.typeName +} + +// Type implements the ref.Val interface method. +func (t *NativeType) Type() ref.Type { + return TypeType +} + +// TypeName implements the ref.Type interface method. +func (t *NativeType) TypeName() string { + return t.typeName +} + +// Value implements the ref.Val interface method. +func (t *NativeType) Value() any { + return t.typeName +} + +func (t *NativeType) hasField(fieldName string) (reflect.StructField, bool) { + f, found := t.fieldsByName[fieldName] + if !found { + return reflect.StructField{}, false + } + return f, true +} + +// FieldNames provides the list of field names for this type. +func (t *NativeType) FieldNames() []string { + fields := make([]string, 0, len(t.fieldsByName)) + for fieldName := range t.fieldsByName { + fields = append(fields, fieldName) + } + return fields +} + +// FindFieldType looks up a field by name and provides the type and accessors. +func (t *NativeType) FindFieldType(fieldName string) (*FieldType, bool) { + refField, found := t.hasField(fieldName) + if !found { + return nil, false + } + celType, ok := convertToCelType(refField.Type) + if !ok { + return nil, false + } + return &FieldType{ + Type: celType, + IsSet: func(obj any) bool { + refVal := reflect.Indirect(reflect.ValueOf(obj)) + refFieldVal := safeGetFieldByIndex(refVal, refField.Index) + return refFieldVal.IsValid() && !refFieldVal.IsZero() + }, + GetFrom: func(obj any) (any, error) { + refVal := reflect.Indirect(reflect.ValueOf(obj)) + refFieldVal := safeGetFieldByIndex(refVal, refField.Index) + return getFieldValue(refFieldVal), nil + }, + }, true +} + +// NewValue constructs a new native Go struct instance populated with given field values. +func (t *NativeType) NewValue(adapter Adapter, fields map[string]ref.Val) ref.Val { + refPtr := reflect.New(t.refType) + refVal := refPtr.Elem() + for fieldName, val := range fields { + refFieldDef, isDefined := t.hasField(fieldName) + if !isDefined { + return NewErr("no such field: %s", fieldName) + } + fieldVal, err := val.ConvertToNative(refFieldDef.Type) + if err != nil { + return NewErrFromString(err.Error()) + } + refField := safeSetFieldByIndex(refVal, refFieldDef.Index) + if !refField.IsValid() { + return NewErr("cannot set field: %s", fieldName) + } + refField.Set(reflect.ValueOf(fieldVal)) + } + return adapter.NativeToValue(refPtr.Interface()) +} + +type nativeObj struct { + Adapter + val any + valType *NativeType + refValue reflect.Value +} + +func (o *nativeObj) ConvertToNative(typeDesc reflect.Type) (any, error) { + if o.refValue.Type() == typeDesc { + if reflect.TypeOf(o.val) == typeDesc { + return o.val, nil + } + return o.refValue.Interface(), nil + } + if typeDesc.Kind() == reflect.Pointer && o.refValue.Type() == typeDesc.Elem() { + if reflect.TypeOf(o.val) == typeDesc { + return o.val, nil + } + ptr := reflect.New(o.refValue.Type()) + ptr.Elem().Set(o.refValue) + return ptr.Interface(), nil + } + switch typeDesc { + case jsonValueType: + jsonStruct, err := o.ConvertToNative(jsonStructType) + if err != nil { + return nil, err + } + return structpb.NewStructValue(jsonStruct.(*structpb.Struct)), nil + case jsonStructType: + refVal := reflect.Indirect(o.refValue) + fields := make(map[string]*structpb.Value, refVal.NumField()) + for fieldName, fieldType := range o.valType.fieldsByName { + fieldValue := safeGetFieldByIndex(refVal, fieldType.Index) + if !fieldValue.IsValid() || fieldValue.IsZero() { + continue + } + fieldCELVal := o.NativeToValue(fieldValue.Interface()) + fieldJSONVal, err := fieldCELVal.ConvertToNative(jsonValueType) + if err != nil { + return nil, err + } + fields[fieldName] = fieldJSONVal.(*structpb.Value) + } + return &structpb.Struct{Fields: fields}, nil + } + return nil, fmt.Errorf("type conversion error from '%v' to '%v'", o.Type(), typeDesc) +} + +func (o *nativeObj) ConvertToType(typeVal ref.Type) ref.Val { + switch typeVal { + case TypeType: + return o.valType + default: + if typeVal.TypeName() == o.valType.typeName { + return o + } + } + return NewErr("type conversion error from '%s' to '%s'", o.Type(), typeVal) +} + +func (o *nativeObj) Equal(other ref.Val) ref.Val { + otherNtv, ok := other.(*nativeObj) + if !ok { + return False + } + val := o.val + otherVal := otherNtv.val + if reflect.TypeOf(val).Kind() != reflect.TypeOf(otherVal).Kind() { + val = o.refValue.Interface() + otherVal = otherNtv.refValue.Interface() + } + return Bool(reflect.DeepEqual(val, otherVal)) +} + +func (o *nativeObj) IsZeroValue() bool { + return o.refValue.IsZero() +} + +func (o *nativeObj) IsSet(field ref.Val) ref.Val { + refField, refErr := o.getReflectedField(field) + if refErr != nil { + return refErr + } + return Bool(!refField.IsZero()) +} + +func (o *nativeObj) Get(field ref.Val) ref.Val { + refField, refErr := o.getReflectedField(field) + if refErr != nil { + return refErr + } + return adaptFieldValue(o, refField) +} + +func (o *nativeObj) getReflectedField(field ref.Val) (reflect.Value, ref.Val) { + fieldName, ok := field.(String) + if !ok { + return reflect.Value{}, MaybeNoSuchOverloadErr(field) + } + fieldNameStr := string(fieldName) + refField, isDefined := o.valType.hasField(fieldNameStr) + if !isDefined { + return reflect.Value{}, NewErr("no such field: %s", fieldName) + } + refVal := reflect.Indirect(o.refValue) + return safeGetFieldByIndex(refVal, refField.Index), nil +} + +func (o *nativeObj) Type() ref.Type { + return o.valType +} + +func (o *nativeObj) Value() any { + return o.val +} + +func newNativeTypes(rawType reflect.Type, fieldNameHandler NativeTypesFieldNameHandler) ([]*NativeType, error) { + nt, err := newNativeType(rawType, fieldNameHandler) + if err != nil { + return nil, err + } + result := []*NativeType{nt} + + alreadySeen := make(map[string]struct{}) + var iterateStructMembers func(reflect.Type) + iterateStructMembers = func(t reflect.Type) { + if t.Implements(reflect.TypeFor[ref.Val]()) { + return + } + if k := t.Kind(); k == reflect.Pointer || k == reflect.Slice || k == reflect.Array || k == reflect.Map { + iterateStructMembers(t.Elem()) + return + } + if t.Kind() != reflect.Struct { + return + } + if _, seen := alreadySeen[t.String()]; seen { + return + } + alreadySeen[t.String()] = struct{}{} + nt, ntErr := newNativeType(t, fieldNameHandler) + if ntErr != nil { + err = ntErr + return + } + result = append(result, nt) + + for _, field := range reflect.VisibleFields(t) { + if !field.IsExported() || !isSupportedType(field.Type) { + continue + } + iterateStructMembers(field.Type) + } + } + iterateStructMembers(rawType) + + return result, err +} + +func toFieldName(f reflect.StructField, fieldNameHandler NativeTypesFieldNameHandler) string { + if fieldNameHandler == nil { + return f.Name + } + return fieldNameHandler(f) +} + +func newNativeType(rawType reflect.Type, fieldNameHandler NativeTypesFieldNameHandler) (*NativeType, error) { + refType := rawType + if refType.Kind() == reflect.Pointer { + refType = refType.Elem() + } + if !isValidObjectType(refType) { + return nil, fmt.Errorf("unsupported reflect.Type %v, must be reflect.Struct", rawType) + } + + fieldsByName := make(map[string]reflect.StructField) + for _, field := range reflect.VisibleFields(refType) { + if !field.IsExported() || !isSupportedType(field.Type) { + continue + } + fieldName := toFieldName(field, fieldNameHandler) + if isSkippedFieldName(fieldName) { + continue + } + if _, found := fieldsByName[fieldName]; found { + return nil, fmt.Errorf("invalid field name `%s` in struct `%s`: %w", fieldName, refType.Name(), errDuplicatedFieldName) + } + fieldsByName[fieldName] = field + } + + return &NativeType{ + typeName: fmt.Sprintf("%s.%s", simplePkgAlias(refType.PkgPath()), refType.Name()), + refType: refType, + fieldsByName: fieldsByName, + }, nil +} + +func adaptFieldValue(adapter Adapter, refField reflect.Value) ref.Val { + return adapter.NativeToValue(getFieldValue(refField)) +} + +func safeSetFieldByIndex(v reflect.Value, index []int) reflect.Value { + for _, i := range index { + if v.Kind() == reflect.Pointer { + if v.IsNil() { + v.Set(reflect.New(v.Type().Elem())) + } + v = v.Elem() + } + if v.Kind() != reflect.Struct || i >= v.NumField() { + return reflect.Value{} + } + v = v.Field(i) + } + return v +} + +func safeGetFieldByIndex(v reflect.Value, index []int) reflect.Value { + for _, i := range index { + if v.Kind() == reflect.Pointer { + if v.IsNil() { + v = reflect.New(v.Type().Elem()).Elem() + } else { + v = v.Elem() + } + } + if v.Kind() != reflect.Struct || i >= v.NumField() { + return reflect.Value{} + } + v = v.Field(i) + } + return v +} + +func getFieldValue(refField reflect.Value) any { + if !refField.IsValid() { + return nil + } + if refField.IsZero() { + switch refField.Kind() { + case reflect.Struct: + if refField.Type() == timestampType { + return time.Unix(0, 0) + } + case reflect.Pointer: + return reflect.New(refField.Type().Elem()).Interface() + } + } + return refField.Interface() +} + +func simplePkgAlias(pkgPath string) string { + paths := strings.Split(pkgPath, "/") + if len(paths) == 0 { + return "" + } + return paths[len(paths)-1] +} + +func isValidObjectType(refType reflect.Type) bool { + return refType.Kind() == reflect.Struct +} + +func isSupportedType(refType reflect.Type) bool { + switch refType.Kind() { + case reflect.Chan, reflect.Complex64, reflect.Complex128, reflect.Func, reflect.UnsafePointer, reflect.Uintptr: + return false + case reflect.Array, reflect.Slice: + return isSupportedType(refType.Elem()) + case reflect.Map: + return isSupportedType(refType.Key()) && isSupportedType(refType.Elem()) + } + return true +} + +func convertToCelType(refType reflect.Type) (*Type, bool) { + switch refType.Kind() { + case reflect.Bool: + return BoolType, true + case reflect.Float32, reflect.Float64: + return DoubleType, true + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if refType == durationType { + return DurationType, true + } + return IntType, true + case reflect.String: + return StringType, true + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return UintType, true + case reflect.Array, reflect.Slice: + refElem := refType.Elem() + if refElem == reflect.TypeOf(byte(0)) { + return BytesType, true + } + elemType, ok := convertToCelType(refElem) + if !ok { + return nil, false + } + return NewListType(elemType), true + case reflect.Map: + keyType, ok := convertToCelType(refType.Key()) + if !ok { + return nil, false + } + elemType, ok := convertToCelType(refType.Elem()) + if !ok { + return nil, false + } + return NewMapType(keyType, elemType), true + case reflect.Struct: + if refType == timestampType { + return TimestampType, true + } + if refType.Implements(refValType) { + emptyCelVal := reflect.New(refType).Elem().Interface().(ref.Val) + return emptyCelVal.Type().(*Type), true + } + return NewObjectType( + fmt.Sprintf("%s.%s", simplePkgAlias(refType.PkgPath()), refType.Name()), + ), true + case reflect.Pointer: + if refType.Implements(refValType) { + emptyCelVal := reflect.New(refType.Elem()).Interface().(ref.Val) + return emptyCelVal.Type().(*Type), true + } + if refType.Implements(pbMsgInterfaceType) { + pbMsg := reflect.New(refType.Elem()).Interface().(protoreflect.ProtoMessage) + return NewObjectType(string(pbMsg.ProtoReflect().Descriptor().FullName())), true + } + return convertToCelType(refType.Elem()) + } + return nil, false +} diff --git a/vendor/github.com/google/cel-go/common/types/provider.go b/vendor/github.com/google/cel-go/common/types/provider.go index 1bb2c11ed7..2321828d8a 100644 --- a/vendor/github.com/google/cel-go/common/types/provider.go +++ b/vendor/github.com/google/cel-go/common/types/provider.go @@ -16,7 +16,9 @@ package types import ( "fmt" + "maps" "reflect" + "sync/atomic" "time" "google.golang.org/protobuf/proto" @@ -54,11 +56,11 @@ type Provider interface { // Returns false if not found. FindStructType(structType string) (*Type, bool) - // FindStructFieldNames returns thet field names associated with the type, if the type + // FindStructFieldNames returns the field names associated with the type, if the type // is found. FindStructFieldNames(structType string) ([]string, bool) - // FieldStructFieldType returns the field type for a checked type value. Returns + // FindStructFieldType returns the field type for a checked type value. Returns // false if the field could not be found. FindStructFieldType(structType, fieldName string) (*FieldType, bool) @@ -88,15 +90,27 @@ type FieldType struct { // Registry provides type information for a set of registered types. type Registry struct { - revTypeMap map[string]*Type - pbdb *pb.Db + revTypeMap map[string]*Type + structTypes map[string]StructTypeDescriptor + reflectTypes map[reflect.Type]StructTypeDescriptor + shared atomic.Bool + pbdb *pb.Db + provider Provider + adapter Adapter + nativeOptions NativeTypeOptions } -// NewRegistry accepts a list of proto message instances and returns a type -// provider which can create new instances of the provided message or any -// message that proto depends upon in its FileDescriptor. -func NewRegistry(types ...proto.Message) (*Registry, error) { - return NewProtoRegistry(ProtoTypeDefs(types...)) +// NewRegistry accepts a list of proto message instances, ref.Type instances, or RegistryOption +// functions and returns a type provider. +func NewRegistry(types ...any) (*Registry, error) { + r, err := NewProtoRegistry() + if err != nil { + return nil, err + } + if err := registerTypeItems(r, types...); err != nil { + return nil, err + } + return r, nil } // RegistryOption configures the behavior of the registry. @@ -123,12 +137,20 @@ func ProtoTypeDefs(types ...proto.Message) RegistryOption { } } +// Types creates a RegistryOption which registers individual custom type references or descriptors with the registry. +func Types(types ...ref.Type) RegistryOption { + return func(r *Registry) (*Registry, error) { + err := r.RegisterType(types...) + if err != nil { + return nil, err + } + return r, nil + } +} + // NewProtoRegistry creates a proto-based registry with a set of configurable options. func NewProtoRegistry(opts ...RegistryOption) (*Registry, error) { - r := &Registry{ - revTypeMap: make(map[string]*Type), - pbdb: pb.NewDb(), - } + r := NewEmptyRegistry() err := r.RegisterType( BoolType, BytesType, @@ -164,21 +186,65 @@ func NewProtoRegistry(opts ...RegistryOption) (*Registry, error) { // NewEmptyRegistry returns a registry which is completely unconfigured. func NewEmptyRegistry() *Registry { return &Registry{ - revTypeMap: make(map[string]*Type), - pbdb: pb.NewDb(), + revTypeMap: make(map[string]*Type), + structTypes: make(map[string]StructTypeDescriptor), + reflectTypes: make(map[reflect.Type]StructTypeDescriptor), + pbdb: pb.NewDb(), } } +// ComposeTypes accepts a provider, adapter, and a list of types (ref.Type, proto.Message, protoreflect.FileDescriptor, or RegistryOption) +// and either: +// - Determines the provider and adapter are the same instance and a *Registry and registers the listed types via RegisterType or +// one of the other registration methods as appropriate. +// - Determines the provider and adapter are not the same, or not a *Registry and creates a new composed *Registry which references +// the new type information first and then proxies to the underlying provider and adapter methods as appropriate. +func ComposeTypes(provider Provider, adapter Adapter, types ...any) (Provider, Adapter, error) { + reg, isReg := provider.(*Registry) + aReg, isAdapterReg := adapter.(*Registry) + if isReg && isAdapterReg && reg == aReg { + if err := registerTypeItems(reg, types...); err != nil { + return nil, nil, err + } + return reg, reg, nil + } + + composedReg, err := NewRegistry(types...) + if err != nil { + return nil, nil, err + } + composedReg.provider = provider + composedReg.adapter = adapter + return composedReg, composedReg, nil +} + // Copy copies the current state of the registry into its own memory space. func (p *Registry) Copy() *Registry { - copy := &Registry{ - revTypeMap: make(map[string]*Type), - pbdb: p.pbdb.Copy(), + if p == nil { + return nil } - for k, v := range p.revTypeMap { - copy.revTypeMap[k] = v + p.shared.Store(true) + cpy := &Registry{ + revTypeMap: p.revTypeMap, + structTypes: p.structTypes, + reflectTypes: p.reflectTypes, + nativeOptions: p.nativeOptions, + pbdb: p.pbdb, + provider: p.provider, + adapter: p.adapter, + } + cpy.shared.Store(true) + return cpy +} + +func (p *Registry) ensureMutable() { + if p.shared.Load() { + p.revTypeMap = maps.Clone(p.revTypeMap) + p.structTypes = maps.Clone(p.structTypes) + p.reflectTypes = maps.Clone(p.reflectTypes) + p.pbdb = p.pbdb.Copy() + p.shared.Store(false) } - return copy } // JSONFieldNames returns whether json field names are enabled in this registry. @@ -191,6 +257,7 @@ func (p *Registry) WithJSONFieldNames(enabled bool) error { if enabled == p.pbdb.JSONFieldNames() { return nil } + p.ensureMutable() newDB := pb.NewDb(pb.JSONFieldNames(enabled)) files := p.pbdb.FileDescriptions() for _, fd := range files { @@ -207,6 +274,9 @@ func (p *Registry) WithJSONFieldNames(enabled bool) error { func (p *Registry) EnumValue(enumName string) ref.Val { enumVal, found := p.pbdb.DescribeEnum(enumName) if !found { + if p.provider != nil { + return p.provider.EnumValue(enumName) + } return NewErr("unknown enum name '%s'", enumName) } return Int(enumVal.Value()) @@ -217,70 +287,98 @@ func (p *Registry) EnumValue(enumName string) ref.Val { // // Deprecated: use FindStructFieldType func (p *Registry) FindFieldType(structType, fieldName string) (*ref.FieldType, bool) { - msgType, found := p.pbdb.DescribeType(structType) - if !found { - return nil, false + structType = sanitizeStructTypeName(structType) + if st, found := p.structTypes[structType]; found { + if ft, found := st.FindFieldType(fieldName); found { + exprType, err := TypeToExprType(ft.Type) + if err != nil { + return nil, false + } + return makeRefFieldType(exprType, ft.IsSet, ft.GetFrom, ft.IsJSONField), true + } } - field, found := msgType.FieldByName(fieldName) - if !found { - return nil, false + if msgType, found := p.pbdb.DescribeType(structType); found { + if field, found := msgType.FieldByName(fieldName); found { + return makeRefFieldType(field.CheckedType(), field.IsSet, field.GetFrom, p.pbdb.JSONFieldNames() && fieldName == field.JSONName()), true + } } - return &ref.FieldType{ - Type: field.CheckedType(), - IsSet: field.IsSet, - GetFrom: field.GetFrom, - IsJSONField: p.pbdb.JSONFieldNames() && fieldName == field.JSONName(), - }, true + if p.provider != nil { + if ft, ok := p.provider.FindStructFieldType(structType, fieldName); ok && ft != nil { + exprType, err := TypeToExprType(ft.Type) + if err != nil { + return nil, false + } + return makeRefFieldType(exprType, ft.IsSet, ft.GetFrom, ft.IsJSONField), true + } + } + return nil, false } // FindStructFieldNames returns the set of field names for the given struct type, // if the type exists in the registry. func (p *Registry) FindStructFieldNames(structType string) ([]string, bool) { - msgType, found := p.pbdb.DescribeType(structType) - if !found { - return []string{}, false + structType = sanitizeStructTypeName(structType) + if st, found := p.structTypes[structType]; found { + return st.FieldNames(), true + } + if msgType, found := p.pbdb.DescribeType(structType); found { + fieldMap := msgType.FieldMap() + fields := make([]string, len(fieldMap)) + idx := 0 + for f := range fieldMap { + fields[idx] = f + idx++ + } + return fields, true } - fieldMap := msgType.FieldMap() - fields := make([]string, len(fieldMap)) - idx := 0 - for f := range fieldMap { - fields[idx] = f - idx++ + if p.provider != nil { + return p.provider.FindStructFieldNames(structType) } - return fields, true + return []string{}, false } // FindStructFieldType returns the field type for a checked type value. Returns // false if the field could not be found. func (p *Registry) FindStructFieldType(structType, fieldName string) (*FieldType, bool) { - msgType, found := p.pbdb.DescribeType(structType) - if !found { - return nil, false + structType = sanitizeStructTypeName(structType) + if st, found := p.structTypes[structType]; found { + if ft, found := st.FindFieldType(fieldName); found { + return ft, true + } } - field, found := msgType.FieldByName(fieldName) - if !found { - return nil, false + if msgType, found := p.pbdb.DescribeType(structType); found { + if field, found := msgType.FieldByName(fieldName); found { + return &FieldType{ + Type: fieldDescToCELType(field), + IsSet: field.IsSet, + GetFrom: field.GetFrom, + IsJSONField: p.pbdb.JSONFieldNames() && fieldName == field.JSONName(), + }, true + } + } + if p.provider != nil { + return p.provider.FindStructFieldType(structType, fieldName) } - return &FieldType{ - Type: fieldDescToCELType(field), - IsSet: field.IsSet, - GetFrom: field.GetFrom, - IsJSONField: p.pbdb.JSONFieldNames() && fieldName == field.JSONName(), - }, true + return nil, false } // FindStructFieldDescription returns documentation for a field if available. // Returns false if the field could not be found. func (p *Registry) FindStructFieldDescription(structType, fieldName string) (string, bool) { - msgType, found := p.pbdb.DescribeType(structType) - if !found { - return "", false + structType = sanitizeStructTypeName(structType) + if msgType, found := p.pbdb.DescribeType(structType); found { + if field, found := msgType.FieldByName(fieldName); found { + return field.Documentation(), true + } } - field, found := msgType.FieldByName(fieldName) - if !found { - return "", false + if p.provider != nil { + if pd, ok := p.provider.(interface { + FindStructFieldDescription(string, string) (string, bool) + }); ok { + return pd.FindStructFieldDescription(structType, fieldName) + } } - return field.Documentation(), true + return "", false } // FindIdent takes a qualified identifier name and returns a ref.Val if one exists. @@ -291,6 +389,9 @@ func (p *Registry) FindIdent(identName string) (ref.Val, bool) { if enumVal, found := p.pbdb.DescribeEnum(identName); found { return Int(enumVal.Value()), true } + if p.provider != nil { + return p.provider.FindIdent(identName) + } return nil, false } @@ -298,17 +399,19 @@ func (p *Registry) FindIdent(identName string) (ref.Val, bool) { // // Deprecated: use FindStructType func (p *Registry) FindType(structType string) (*exprpb.Type, bool) { - if _, found := p.pbdb.DescribeType(structType); !found { - return nil, false + structType = sanitizeStructTypeName(structType) + if p.hasStructType(structType) { + return makeExprMessageType(structType), true } - if structType != "" && structType[0] == '.' { - structType = structType[1:] + if p.provider != nil { + if tp, ok := p.provider.(ref.TypeProvider); ok { + return tp.FindType(structType) + } + if _, ok := p.provider.FindStructType(structType); ok { + return makeExprMessageType(structType), true + } } - return &exprpb.Type{ - TypeKind: &exprpb.Type_Type{ - Type: &exprpb.Type{ - TypeKind: &exprpb.Type_MessageType{ - MessageType: structType}}}}, true + return nil, false } // FindStructType returns the Type give a qualified type name. @@ -319,13 +422,14 @@ func (p *Registry) FindType(structType string) (*exprpb.Type, bool) { // // Returns false if not found. func (p *Registry) FindStructType(structType string) (*Type, bool) { - if _, found := p.pbdb.DescribeType(structType); !found { - return nil, false + structType = sanitizeStructTypeName(structType) + if p.hasStructType(structType) { + return NewTypeTypeWithParam(NewObjectType(structType)), true } - if structType != "" && structType[0] == '.' { - structType = structType[1:] + if p.provider != nil { + return p.provider.FindStructType(structType) } - return NewTypeTypeWithParam(NewObjectType(structType)), true + return nil, false } // NewValue creates a new type value from a qualified name and map of field @@ -335,8 +439,15 @@ func (p *Registry) FindStructType(structType string) (*Type, bool) { // to convert the Val to the field's native type. If an error occurs during // conversion, the NewValue will be a types.Err. func (p *Registry) NewValue(structType string, fields map[string]ref.Val) ref.Val { + structType = sanitizeStructTypeName(structType) + if st, found := p.structTypes[structType]; found { + return st.NewValue(p, fields) + } td, found := p.pbdb.DescribeType(structType) if !found { + if p.provider != nil { + return p.provider.NewValue(structType, fields) + } return NewErr("unknown type '%s'", structType) } msg := td.New() @@ -355,6 +466,7 @@ func (p *Registry) NewValue(structType string, fields map[string]ref.Val) ref.Va // RegisterDescriptor registers the contents of a protocol buffer `FileDescriptor`. func (p *Registry) RegisterDescriptor(fileDesc protoreflect.FileDescriptor) error { + p.ensureMutable() fd, err := p.pbdb.RegisterDescriptor(fileDesc) if err != nil { return err @@ -364,6 +476,7 @@ func (p *Registry) RegisterDescriptor(fileDesc protoreflect.FileDescriptor) erro // RegisterMessage registers a protocol buffer message and its dependencies. func (p *Registry) RegisterMessage(message proto.Message) error { + p.ensureMutable() fd, err := p.pbdb.RegisterMessage(message) if err != nil { return err @@ -382,338 +495,418 @@ func (p *Registry) RegisterMessage(message proto.Message) error { // to CEL, even when they're not based on protobuf types. func (p *Registry) RegisterType(types ...ref.Type) error { for _, t := range types { - celType := maybeForeignType(t) existing, found := p.revTypeMap[t.TypeName()] - if !found { - p.revTypeMap[t.TypeName()] = celType + celType := maybeForeignType(t) + if found { + if !existing.IsEquivalentType(celType) { + return fmt.Errorf("type registration conflict. found: %v, input: %v", existing, celType) + } + if existing.traitMask != celType.traitMask { + return fmt.Errorf( + "type registered with conflicting traits: %v with traits %v, input: %v", + existing.TypeName(), existing.traitMask, celType.traitMask) + } continue } - if !existing.IsEquivalentType(celType) { - return fmt.Errorf("type registration conflict. found: %v, input: %v", existing, celType) - } - if existing.traitMask != celType.traitMask { - return fmt.Errorf( - "type registered with conflicting traits: %v with traits %v, input: %v", - existing.TypeName(), existing.traitMask, celType.traitMask) + + p.ensureMutable() + typeName := t.TypeName() + p.revTypeMap[typeName] = celType + if st, ok := t.(StructTypeDescriptor); ok { + // Conflicts are gated above so if we see a struct here, it's safe to register. + p.structTypes[typeName] = st + if rt := st.ReflectType(); rt != nil { + p.reflectTypes[rt] = st + if rt.Kind() == reflect.Ptr { + p.reflectTypes[rt.Elem()] = st + } else { + p.reflectTypes[reflect.PointerTo(rt)] = st + } + } } } return nil } -// NativeToValue converts various "native" types to ref.Val with this specific implementation -// providing support for custom proto-based types. -// -// This method should be the inverse of ref.Val.ConvertToNative. -func (p *Registry) NativeToValue(value any) ref.Val { - if val, found := nativeToValue(p, value); found { - return val - } - switch v := value.(type) { - case proto.Message: - typeName := string(v.ProtoReflect().Descriptor().FullName()) - td, found := p.pbdb.DescribeType(typeName) - if !found { - return NewErr("unknown type: '%s'", typeName) - } - unwrapped, isUnwrapped, err := td.MaybeUnwrap(v) - if err != nil { - return UnsupportedRefValConversionErr(v) - } - if isUnwrapped { - return p.NativeToValue(unwrapped) - } - typeVal, found := p.FindIdent(typeName) - if !found { - return NewErr("unknown type: '%s'", typeName) - } - return NewObject(p, td, typeVal, v) - case *pb.Map: - return NewProtoMap(p, v) - case protoreflect.List: - return NewProtoList(p, v) - case protoreflect.Message: - return p.NativeToValue(v.Interface()) - case protoreflect.Value: - return p.NativeToValue(v.Interface()) +// RegisterNativeType creates nativeType instances for the given reflect.Type and registers them. +func (p *Registry) RegisterNativeType(refType reflect.Type) error { + result, err := newNativeTypes(refType, p.nativeOptions.fieldNameHandler) + if err != nil { + return err } - return UnsupportedRefValConversionErr(value) -} - -func (p *Registry) registerAllTypes(fd *pb.FileDescription) error { - for _, typeName := range fd.GetTypeNames() { - // skip well-known type names since they're automatically sanitized - // during NewObjectType() calls. - if _, found := checkedWellKnowns[typeName]; found { - continue - } - err := p.RegisterType(NewObjectTypeValue(typeName)) - if err != nil { + for _, nt := range result { + if err := p.RegisterType(nt); err != nil { return err } } return nil } -func fieldDescToCELType(field *pb.FieldDescription) *Type { - if field.IsMap() { - return NewMapType( - singularFieldDescToCELType(field.KeyType), - singularFieldDescToCELType(field.ValueType)) - } - if field.IsList() { - return NewListType(singularFieldDescToCELType(field)) - } - return singularFieldDescToCELType(field) -} - -func singularFieldDescToCELType(field *pb.FieldDescription) *Type { - if field.IsMessage() { - return NewObjectType(string(field.Descriptor().Message().FullName())) +func (p *Registry) findStructDescriptorByReflectType(rt reflect.Type) (StructTypeDescriptor, bool) { + if rt == nil { + return nil, false } - if field.IsEnum() { - return IntType + if st, found := p.reflectTypes[rt]; found { + return st, true } - return ProtoCELPrimitives[field.ProtoKind()] -} - -// defaultTypeAdapter converts go native types to CEL values. -type defaultTypeAdapter struct{} - -var ( - // DefaultTypeAdapter adapts canonical CEL types from their equivalent Go values. - DefaultTypeAdapter = &defaultTypeAdapter{} -) - -// NativeToValue implements the ref.TypeAdapter interface. -func (a *defaultTypeAdapter) NativeToValue(value any) ref.Val { - if val, found := nativeToValue(a, value); found { - return val + if rt.Kind() == reflect.Ptr { + if st, found := p.reflectTypes[rt.Elem()]; found { + return st, true + } + } else { + if st, found := p.reflectTypes[reflect.PointerTo(rt)]; found { + return st, true + } } - return UnsupportedRefValConversionErr(value) + return nil, false } -// nativeToValue returns the converted (ref.Val, true) of a conversion is found, -// otherwise (nil, false) -func nativeToValue(a Adapter, value any) (ref.Val, bool) { +// NativeToValue converts various "native" types to ref.Val with this specific implementation +// providing support for custom proto-based types. +// +// This method should be the inverse of ref.Val.ConvertToNative. +func (p *Registry) NativeToValue(value any) ref.Val { switch v := value.(type) { case nil: - return NullValue, true + return NullValue case *Bool: if v != nil { - return *v, true + return *v } case *Bytes: if v != nil { - return *v, true + return *v } case *Double: if v != nil { - return *v, true + return *v } case *Int: if v != nil { - return *v, true + return *v } case *String: if v != nil { - return *v, true + return *v } case *Uint: if v != nil { - return *v, true + return *v } + case ref.Val: + return v case bool: - return Bool(v), true + return Bool(v) case int: - return Int(v), true + return Int(v) case int32: - return Int(v), true + return Int(v) case int64: - return Int(v), true + return Int(v) case uint: - return Uint(v), true + return Uint(v) case uint32: - return Uint(v), true + return Uint(v) case uint64: - return Uint(v), true + return Uint(v) case float32: - return Double(v), true + return Double(v) case float64: - return Double(v), true + return Double(v) case string: - return String(v), true + return String(v) case *dpb.Duration: - return Duration{Duration: v.AsDuration()}, true + return Duration{Duration: v.AsDuration()} case time.Duration: - return Duration{Duration: v}, true + return Duration{Duration: v} case *tpb.Timestamp: - return Timestamp{Time: v.AsTime()}, true + return Timestamp{Time: v.AsTime()} case time.Time: - return Timestamp{Time: v}, true + return Timestamp{Time: v} case *bool: if v != nil { - return Bool(*v), true + return Bool(*v) } case *float32: if v != nil { - return Double(*v), true + return Double(*v) } case *float64: if v != nil { - return Double(*v), true + return Double(*v) } case *int: if v != nil { - return Int(*v), true + return Int(*v) } case *int32: if v != nil { - return Int(*v), true + return Int(*v) } case *int64: if v != nil { - return Int(*v), true + return Int(*v) } case *string: if v != nil { - return String(*v), true + return String(*v) } case *uint: if v != nil { - return Uint(*v), true + return Uint(*v) } case *uint32: if v != nil { - return Uint(*v), true + return Uint(*v) } case *uint64: if v != nil { - return Uint(*v), true + return Uint(*v) } case []byte: - return Bytes(v), true + return Bytes(v) // specializations for common lists types. case []string: - return NewStringList(a, v), true + return NewStringList(p, v) case []ref.Val: - return NewRefValList(a, v), true + return NewRefValList(p, v) // specializations for common map types. case map[string]string: - return NewStringStringMap(a, v), true + return NewStringStringMap(p, v) case map[string]any: - return NewStringInterfaceMap(a, v), true + return NewStringInterfaceMap(p, v) case map[ref.Val]ref.Val: - return NewRefValMap(a, v), true + return NewRefValMap(p, v) // additional specializations may be added upon request / need. case *anypb.Any: if v == nil { - return UnsupportedRefValConversionErr(v), true + return UnsupportedRefValConversionErr(v) } unpackedAny, err := v.UnmarshalNew() if err != nil { - return NewErr("anypb.UnmarshalNew() failed for type %q: %v", v.GetTypeUrl(), err), true + return NewErr("anypb.UnmarshalNew() failed for type %q: %v", v.GetTypeUrl(), err) } - return a.NativeToValue(unpackedAny), true + return p.NativeToValue(unpackedAny) case *structpb.NullValue, structpb.NullValue: - return NullValue, true + return NullValue case *structpb.ListValue: - return NewJSONList(a, v), true + return NewJSONList(p, v) case *structpb.Struct: - return NewJSONStruct(a, v), true - case ref.Val: - return v, true + return NewJSONStruct(p, v) case protoreflect.EnumNumber: - return Int(v), true + return Int(v) case proto.Message: if v == nil { - return UnsupportedRefValConversionErr(v), true + return UnsupportedRefValConversionErr(v) } typeName := string(v.ProtoReflect().Descriptor().FullName()) - td, found := pb.DefaultDb.DescribeType(typeName) + pbdb := p.pbdb + if pbdb == nil { + pbdb = pb.DefaultDb + } + td, found := pbdb.DescribeType(typeName) if !found { - return nil, false + if p.adapter != nil { + return p.adapter.NativeToValue(value) + } + return NewErr("unknown type: '%s'", typeName) } - val, unwrapped, err := td.MaybeUnwrap(v) + unwrapped, isUnwrapped, err := td.MaybeUnwrap(v) if err != nil { - return UnsupportedRefValConversionErr(v), true + return UnsupportedRefValConversionErr(v) } - if !unwrapped { - return nil, false + if isUnwrapped { + return p.NativeToValue(unwrapped) + } + typeVal, found := p.FindIdent(typeName) + if !found { + return NewErr("unknown type: '%s'", typeName) } - return a.NativeToValue(val), true - // Note: dynamicpb.Message implements the proto.Message _and_ protoreflect.Message interfaces - // which means that this case must appear after handling a proto.Message type. + return NewObject(p, td, typeVal, v) + case *pb.Map: + return NewProtoMap(p, v) + case protoreflect.List: + return NewProtoList(p, v) case protoreflect.Message: - return a.NativeToValue(v.Interface()), true + return p.NativeToValue(v.Interface()) + case protoreflect.Value: + return p.NativeToValue(v.Interface()) default: - refValue := reflect.ValueOf(v) - if refValue.Kind() == reflect.Ptr { - if refValue.IsNil() { - return UnsupportedRefValConversionErr(v), true + rt := reflect.TypeOf(value) + if len(p.reflectTypes) > 0 { + if st, found := p.findStructDescriptorByReflectType(rt); found { + return st.Adapt(p, value) } - refValue = refValue.Elem() } - refKind := refValue.Kind() - switch refKind { + refVal := reflect.ValueOf(v) + if refVal.Kind() == reflect.Ptr { + if refVal.IsNil() { + break + } + refVal = refVal.Elem() + } + switch refVal.Kind() { case reflect.Array, reflect.Slice: - if refValue.Type().Elem() == reflect.TypeOf(byte(0)) { - if refValue.CanAddr() { - return Bytes(refValue.Bytes()), true + if refVal.Type().Elem() == reflect.TypeOf(byte(0)) { + if refVal.CanAddr() { + return Bytes(refVal.Bytes()) } - tmp := reflect.New(refValue.Type()) - tmp.Elem().Set(refValue) - return Bytes(tmp.Elem().Bytes()), true + tmp := reflect.New(refVal.Type()) + tmp.Elem().Set(refVal) + return Bytes(tmp.Elem().Bytes()) } - return NewDynamicList(a, v), true + return NewDynamicList(p, v) case reflect.Map: - return NewDynamicMap(a, v), true - // type aliases of primitive types cannot be asserted as that type, but rather need - // to be downcast to int32 before being converted to a CEL representation. + return NewDynamicMap(p, v) case reflect.Bool: - boolTupe := reflect.TypeOf(false) - return Bool(refValue.Convert(boolTupe).Interface().(bool)), true - case reflect.Int: - intType := reflect.TypeOf(int(0)) - return Int(refValue.Convert(intType).Interface().(int)), true - case reflect.Int8: - intType := reflect.TypeOf(int8(0)) - return Int(refValue.Convert(intType).Interface().(int8)), true - case reflect.Int16: - intType := reflect.TypeOf(int16(0)) - return Int(refValue.Convert(intType).Interface().(int16)), true - case reflect.Int32: - intType := reflect.TypeOf(int32(0)) - return Int(refValue.Convert(intType).Interface().(int32)), true - case reflect.Int64: - intType := reflect.TypeOf(int64(0)) - return Int(refValue.Convert(intType).Interface().(int64)), true - case reflect.Uint: - uintType := reflect.TypeOf(uint(0)) - return Uint(refValue.Convert(uintType).Interface().(uint)), true - case reflect.Uint8: - uintType := reflect.TypeOf(uint8(0)) - return Uint(refValue.Convert(uintType).Interface().(uint8)), true - case reflect.Uint16: - uintType := reflect.TypeOf(uint16(0)) - return Uint(refValue.Convert(uintType).Interface().(uint16)), true - case reflect.Uint32: - uintType := reflect.TypeOf(uint32(0)) - return Uint(refValue.Convert(uintType).Interface().(uint32)), true - case reflect.Uint64: - uintType := reflect.TypeOf(uint64(0)) - return Uint(refValue.Convert(uintType).Interface().(uint64)), true - case reflect.Float32: - doubleType := reflect.TypeOf(float32(0)) - return Double(refValue.Convert(doubleType).Interface().(float32)), true - case reflect.Float64: - doubleType := reflect.TypeOf(float64(0)) - return Double(refValue.Convert(doubleType).Interface().(float64)), true + return Bool(refVal.Bool()) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return Int(refVal.Int()) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return Uint(refVal.Uint()) + case reflect.Float32, reflect.Float64: + return Double(refVal.Float()) case reflect.String: - stringType := reflect.TypeOf("") - return String(refValue.Convert(stringType).Interface().(string)), true + return String(refVal.String()) } } - return nil, false + if p.adapter != nil { + return p.adapter.NativeToValue(value) + } + return UnsupportedRefValConversionErr(value) +} + +func (p *Registry) registerAllTypes(fd *pb.FileDescription) error { + for _, typeName := range fd.GetTypeNames() { + // skip well-known type names since they're automatically sanitized + // during NewObjectType() calls. + if _, found := checkedWellKnowns[typeName]; found { + continue + } + err := p.RegisterType(NewObjectTypeValue(typeName)) + if err != nil { + return err + } + } + return nil +} + +func (p *Registry) hasStructType(structType string) bool { + if _, found := p.structTypes[structType]; found { + return true + } + _, found := p.pbdb.DescribeType(structType) + return found +} + +func sanitizeStructTypeName(structType string) string { + if len(structType) > 0 && structType[0] == '.' { + return structType[1:] + } + return structType +} + +func registerTypeItems(r *Registry, types ...any) error { + opts := make([]any, 0, len(types)) + items := make([]any, 0, len(types)) + for _, t := range types { + switch t.(type) { + case NativeTypeOption: + opts = append(opts, t) + default: + items = append(items, t) + } + } + for _, opt := range opts { + if err := registerTypeItem(r, opt); err != nil { + return err + } + } + for _, item := range items { + if err := registerTypeItem(r, item); err != nil { + return err + } + } + return nil +} + +func registerTypeItem(r *Registry, t any) error { + switch v := t.(type) { + case proto.Message: + return r.RegisterMessage(v) + case protoreflect.FileDescriptor: + return r.RegisterDescriptor(v) + case ref.Type: + return r.RegisterType(v) + case reflect.Type: + return r.RegisterNativeType(v) + case reflect.Value: + return r.RegisterNativeType(v.Type()) + case NativeTypeOption: + return v(&r.nativeOptions) + case RegistryOption: + _, err := v(r) + return err + default: + return fmt.Errorf("unsupported type: %v (%T) must be reflect.Type or reflect.Value", t, t) + } +} + +func makeExprMessageType(structType string) *exprpb.Type { + return &exprpb.Type{ + TypeKind: &exprpb.Type_Type{ + Type: &exprpb.Type{ + TypeKind: &exprpb.Type_MessageType{ + MessageType: structType, + }, + }, + }, + } +} + +func makeRefFieldType(t *exprpb.Type, isSet ref.FieldTester, getFrom ref.FieldGetter, isJSONField bool) *ref.FieldType { + return &ref.FieldType{ + Type: t, + IsSet: isSet, + GetFrom: getFrom, + IsJSONField: isJSONField, + } +} + +func fieldDescToCELType(field *pb.FieldDescription) *Type { + if field.IsMap() { + return NewMapType( + singularFieldDescToCELType(field.KeyType), + singularFieldDescToCELType(field.ValueType)) + } + if field.IsList() { + return NewListType(singularFieldDescToCELType(field)) + } + return singularFieldDescToCELType(field) +} + +func singularFieldDescToCELType(field *pb.FieldDescription) *Type { + if field.IsMessage() { + return NewObjectType(string(field.Descriptor().Message().FullName())) + } + if field.IsEnum() { + return IntType + } + return ProtoCELPrimitives[field.ProtoKind()] +} + +// defaultTypeAdapter converts go native types to CEL values. +type defaultTypeAdapter struct{} + +var ( + // DefaultTypeAdapter adapts canonical CEL types from their equivalent Go values. + DefaultTypeAdapter = &defaultTypeAdapter{} + emptyRegistry = &Registry{pbdb: pb.DefaultDb} +) + +// NativeToValue implements the ref.TypeAdapter interface. +func (a *defaultTypeAdapter) NativeToValue(value any) ref.Val { + return emptyRegistry.NativeToValue(value) } func msgSetField(target protoreflect.Message, field *pb.FieldDescription, val ref.Val) error { diff --git a/vendor/github.com/google/cel-go/common/types/regex.go b/vendor/github.com/google/cel-go/common/types/regex.go new file mode 100644 index 0000000000..14173eb522 --- /dev/null +++ b/vendor/github.com/google/cel-go/common/types/regex.go @@ -0,0 +1,49 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package types + +import ( + "fmt" + "regexp" + "regexp/syntax" +) + +// RegexProgramSize calculates the instruction count (program plan size) of a regex pattern. +func RegexProgramSize(pattern string) (int, error) { + re, err := syntax.Parse(pattern, syntax.Perl) + if err != nil { + return 0, err + } + prog, err := syntax.Compile(re) + if err != nil { + return 0, err + } + return len(prog.Inst), nil +} + +// CompileRegexWithLimit compiles a regex pattern and verifies that its program plan size does not exceed limit. +// A limit <= 0 means unbounded. +func CompileRegexWithLimit(pattern string, limit int) (*regexp.Regexp, error) { + if limit > 0 { + sz, err := RegexProgramSize(pattern) + if err != nil { + return nil, err + } + if sz > limit { + return nil, fmt.Errorf("regex program size %d exceeds limit of %d", sz, limit) + } + } + return regexp.Compile(pattern) +} diff --git a/vendor/github.com/google/cel-go/common/types/string.go b/vendor/github.com/google/cel-go/common/types/string.go index 5f5a43358e..1335903a7b 100644 --- a/vendor/github.com/google/cel-go/common/types/string.go +++ b/vendor/github.com/google/cel-go/common/types/string.go @@ -122,7 +122,11 @@ func (s String) ConvertToType(typeVal ref.Type) ref.Val { return durationOf(d) } case TimestampType: - if t, err := time.Parse(time.RFC3339, s.Value().(string)); err == nil { + str := s.Value().(string) + if !isStrictRFC3339(str) { + return NewErr("invalid RFC 3339 timestamp %q", str) + } + if t, err := time.Parse(time.RFC3339, str); err == nil { if t.Unix() < minUnixTime || t.Unix() > maxUnixTime { return celErrTimestampOverflow } diff --git a/vendor/github.com/google/cel-go/common/types/struct.go b/vendor/github.com/google/cel-go/common/types/struct.go new file mode 100644 index 0000000000..61740a70e1 --- /dev/null +++ b/vendor/github.com/google/cel-go/common/types/struct.go @@ -0,0 +1,39 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package types + +import ( + "reflect" + + "github.com/google/cel-go/common/types/ref" +) + +// StructTypeDescriptor describes a CEL struct type, providing field metadata and value instantiation. +type StructTypeDescriptor interface { + // ReflectType returns the backing Go reflect.Type associated with the struct (or nil if non-reflected). + ReflectType() reflect.Type + + // FieldNames returns the list of field names defined on the struct. + FieldNames() []string + + // FindFieldType returns the field type and a boolean indicating if the field exists. + FindFieldType(fieldName string) (*FieldType, bool) + + // NewValue creates a new CEL struct value from the given map of field values. + NewValue(adapter Adapter, fields map[string]ref.Val) ref.Val + + // Adapt converts a native Go value (struct instance or pointer) to a CEL ref.Val. + Adapt(adapter Adapter, value any) ref.Val +} diff --git a/vendor/github.com/google/cel-go/common/types/timestamp.go b/vendor/github.com/google/cel-go/common/types/timestamp.go index c4484291be..aee47f0535 100644 --- a/vendor/github.com/google/cel-go/common/types/timestamp.go +++ b/vendor/github.com/google/cel-go/common/types/timestamp.go @@ -17,9 +17,11 @@ package types import ( "fmt" "reflect" + "regexp" "strconv" "strings" "time" + "unicode" "github.com/google/cel-go/common/overloads" "github.com/google/cel-go/common/types/ref" @@ -52,6 +54,79 @@ const ( maxUnixTime int64 = 253402300799 ) +// strictRFC3339Pattern gates the strings accepted by the `timestamp()` overload. +// time.Parse accepts inputs that RFC 3339 forbids: a ',' fractional-second +// separator, single-digit time fields, and numeric offsets whose hours exceed +// 23 or minutes exceed 59. Those slip past unnoticed and shift the parsed +// instant, so they are rejected before time.Parse runs. Month and day are held +// to the grammar ranges 01-12 and 01-31; the remaining calendar validation +// (day-of-month vs. month, leap years) is left to time.Parse. +// +// isStrictRFC3339 is the implementation used on the conversion path; the pattern +// is retained as the reference the scan is conformance tested against. +var strictRFC3339Pattern = regexp.MustCompile( + `^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])[Tt]([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d+)?([Zz]|[+-]([01]\d|2[0-3]):[0-5]\d)$`) + +// isStrictRFC3339 reports whether s matches strictRFC3339Pattern, hand-rolled to +// keep the conversion path off the regexp engine and its per-call cost. +func isStrictRFC3339(s string) bool { + // Shortest accepted form is "2006-01-02T15:04:05Z" (20 bytes): a 19-byte + // fixed-width date-time followed by at least a 'Z'/'z' zone. + if len(s) < 20 { + return false + } + // full-date "T" partial-time + if !isYear(s[0:4]) || !isChar(s[4], '-') || !isMonth(s[5:7]) || !isChar(s[7], '-') || !isDay(s[8:10]) || + !isChar(s[10], 't') || + !isHour(s[11:13]) || !isChar(s[13], ':') || !isMinute(s[14:16]) || !isChar(s[16], ':') || !isSecond(s[17:19]) { + return false + } + rest := s[19:] + // optional fractional seconds: "." 1*DIGIT + if rest[0] == '.' { + rest = rest[1:] + n := 0 + for n < len(rest) && isDigit(rest[n]) { + n++ + } + if n == 0 { + return false + } + rest = rest[n:] + } + // time-offset: "Z" or ("+" / "-") time-hour ":" time-minute + if len(rest) == 1 { + return isChar(rest[0], 'z') + } + if len(rest) == 6 && (rest[0] == '+' || rest[0] == '-') { + return isHour(rest[1:3]) && isChar(rest[3], ':') && isMinute(rest[4:6]) + } + return false +} + +func isDigit(c byte) bool { return c >= '0' && c <= '9' } + +// isChar reports whether got is want, case-insensitively; want must be lower case. +func isChar(got, want byte) bool { + g, w := rune(got), rune(want) + return g == w || unicode.ToLower(g) == w +} + +// inRange reports whether s is all decimal digits and its value lies in [lo, hi]. +func inRange(s string, lo, hi uint64) bool { + u, err := strconv.ParseUint(s, 10, 64) + return err == nil && u >= lo && u <= hi +} + +func isYear(s string) bool { return inRange(s, 0, 9999) } +func isMonth(s string) bool { return inRange(s, 1, 12) } +func isDay(s string) bool { return inRange(s, 1, 31) } +func isHour(s string) bool { return inRange(s, 0, 23) } +func isMinute(s string) bool { return inRange(s, 0, 59) } + +// isSecond permits 60 for a leap second. +func isSecond(s string) bool { return inRange(s, 0, 60) } + // Add implements traits.Adder.Add. func (t Timestamp) Add(other ref.Val) ref.Val { switch other.Type() { @@ -293,7 +368,7 @@ func timeZone(tz ref.Val, visitor timestampVisitor) timestampVisitor { } // If the input is not the name of a timezone (for example, 'US/Central'), it should be a numerical offset from UTC - // in the format ^(+|-)(0[0-9]|1[0-4]):[0-5][0-9]$. The numerical input is parsed in terms of hours and minutes. + // in the format ^(+|-)([01]\d|2[0-3]):[0-5][0-9]$. The numerical input is parsed in terms of hours and minutes. hr, err := strconv.Atoi(string(val[0:ind])) if err != nil { return WrapErr(err) @@ -302,6 +377,9 @@ func timeZone(tz ref.Val, visitor timestampVisitor) timestampVisitor { if err != nil { return WrapErr(err) } + if hr < -23 || hr > 23 { + return WrapErr(fmt.Errorf("timezone offset hours out of range [-23, 23]: %s", val)) + } if min < 0 || min > 59 { return WrapErr(fmt.Errorf("timezone offset minutes out of range [0, 59]: %s", val)) } diff --git a/vendor/github.com/google/cel-go/common/types/unknown.go b/vendor/github.com/google/cel-go/common/types/unknown.go index 24d86518b4..f43aff18e0 100644 --- a/vendor/github.com/google/cel-go/common/types/unknown.go +++ b/vendor/github.com/google/cel-go/common/types/unknown.go @@ -16,6 +16,7 @@ package types import ( "fmt" + "maps" "math" "reflect" "sort" @@ -297,9 +298,7 @@ func MergeUnknowns(unk1, unk2 *Unknown) *Unknown { out := &Unknown{ attributeTrails: make(map[int64][]*AttributeTrail, len(unk1.attributeTrails)+len(unk2.attributeTrails)), } - for id, ats := range unk1.attributeTrails { - out.attributeTrails[id] = ats - } + maps.Copy(out.attributeTrails, unk1.attributeTrails) for id, ats := range unk2.attributeTrails { existing, found := out.attributeTrails[id] if !found { diff --git a/vendor/github.com/google/cel-go/ext/README.md b/vendor/github.com/google/cel-go/ext/README.md index 523d908564..6133b5cbf3 100644 --- a/vendor/github.com/google/cel-go/ext/README.md +++ b/vendor/github.com/google/cel-go/ext/README.md @@ -33,6 +33,8 @@ Encoding utilities for marshalling data into standardized representations. ### Base64.Decode +**Introduced in version 0 (cost support in version 1)** + Decodes base64-encoded string to bytes. This function will return an error if the string input is not @@ -47,6 +49,8 @@ Examples: ### Base64.Encode +**Introduced in version 0 (cost support in version 1)** + Encodes bytes to a base64-encoded string. base64.encode() -> @@ -80,6 +84,8 @@ intended; however, there is some chance for collision. ### Math.Greatest +**Introduced in version 0 (cost support in version 3)** + Returns the greatest valued number present in the arguments to the macro. Greatest is a variable argument count macro which must take at least one @@ -107,6 +113,8 @@ Examples: ### Math.Least +**Introduced in version 0 (cost support in version 3)** + Returns the least valued number present in the arguments to the macro. Least is a variable argument count macro which must take at least one diff --git a/vendor/github.com/google/cel-go/ext/encoders.go b/vendor/github.com/google/cel-go/ext/encoders.go index 10beea4f13..97fc932a57 100644 --- a/vendor/github.com/google/cel-go/ext/encoders.go +++ b/vendor/github.com/google/cel-go/ext/encoders.go @@ -16,12 +16,15 @@ package ext import ( "encoding/base64" + "encoding/json" "fmt" "math" "github.com/google/cel-go/cel" + "github.com/google/cel-go/checker" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" + "github.com/google/cel-go/interpreter" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/types/known/structpb" ) @@ -106,6 +109,12 @@ func (lib *encoderLib) CompileOptions() []cel.EnvOption { }))), } if lib.version >= 1 { + estimators := []checker.CostOption{ + checker.OverloadCostEstimate("base64_decode_string", estimateDecode), + checker.OverloadCostEstimate("base64_encode_bytes", estimateEncode), + checker.OverloadCostEstimate("json_encode_dyn", estimateJSONEncode), + } + opts = append(opts, cel.CostEstimatorOptions(estimators...)) opts = append(opts, cel.Function("json.encode", cel.Overload("json_encode_dyn", []*cel.Type{cel.DynType}, cel.StringType, @@ -117,8 +126,17 @@ func (lib *encoderLib) CompileOptions() []cel.EnvOption { return opts } -func (*encoderLib) ProgramOptions() []cel.ProgramOption { - return []cel.ProgramOption{} +func (lib *encoderLib) ProgramOptions() []cel.ProgramOption { + var opts []cel.ProgramOption + if lib.version >= 1 { + trackers := []interpreter.CostTrackerOption{ + interpreter.OverloadCostTracker("base64_decode_string", trackDecode), + interpreter.OverloadCostTracker("base64_encode_bytes", trackEncode), + interpreter.OverloadCostTracker("json_encode_dyn", trackJSONEncode), + } + opts = append(opts, cel.CostTrackerOptions(trackers...)) + } + return opts } func base64DecodeString(str string) ([]byte, error) { @@ -136,6 +154,71 @@ func base64EncodeBytes(bytes []byte) (string, error) { return base64.StdEncoding.EncodeToString(bytes), nil } +func estimateEncode(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if len(args) != 1 { + return nil + } + sz := estimateSize(estimator, args[0]) + cost := sz.MultiplyByCostFactor(stringCostFactor).Add(callCostEstimate) + resSize := estimateEncodeSize(sz) + return &checker.CallEstimate{CostEstimate: cost, ResultSize: &resSize} +} + +func estimateJSONEncode(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if len(args) != 1 { + return nil + } + size := estimateJSONEncodeSize() + return &checker.CallEstimate{CostEstimate: checker.UnknownCostEstimate(), ResultSize: &size} +} + +func estimateDecode(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if len(args) != 1 { + return nil + } + sz := estimateSize(estimator, args[0]) + cost := sz.MultiplyByCostFactor(stringCostFactor).Add(callCostEstimate) + resSize := estimateDecodeSize(sz) + return &checker.CallEstimate{CostEstimate: cost, ResultSize: &resSize} +} + +func trackEncode(args []ref.Val, _ ref.Val) *uint64 { + sz := actualSize(args[0]) + cost := uint64(math.Ceil(float64(sz)*stringCostFactor)) + callCost + return &cost +} + +func trackJSONEncode(args []ref.Val, _ ref.Val) *uint64 { + maxCost := uint64(math.MaxUint64) + return &maxCost +} + +func trackDecode(args []ref.Val, _ ref.Val) *uint64 { + sz := actualSize(args[0]) + cost := uint64(math.Ceil(float64(sz)*stringCostFactor)) + callCost + return &cost +} + +func estimateEncodeSize(sz checker.SizeEstimate) checker.SizeEstimate { + minVal := (sz.Min*4 + 2) / 3 + maxVal := (sz.Max*4 + 2) / 3 + if sz.Max > math.MaxUint64/4 { + maxVal = math.MaxUint64 + } + return checker.SizeEstimate{Min: minVal, Max: maxVal} +} + +func estimateJSONEncodeSize() checker.SizeEstimate { + // TODO: provide a more sophisticated size estimate based on the CEL value's type. + return checker.UnknownSizeEstimate() +} + +func estimateDecodeSize(sz checker.SizeEstimate) checker.SizeEstimate { + minVal := sz.Min * 3 / 4 + maxVal := sz.Max * 3 / 4 + return checker.SizeEstimate{Min: minVal, Max: maxVal} +} + func jsonEncodeValue(val ref.Val) (string, error) { native, err := val.ConvertToNative(types.JSONValueType) if err != nil { @@ -149,5 +232,14 @@ func jsonEncodeValue(val ref.Val) (string, error) { if err != nil { return "", err } + var obj interface{} + if err := json.Unmarshal(jsonBytes, &obj); err != nil { + return "", fmt.Errorf("unmarshaling protojson: %w", err) + } + // Re-marshal with standard json.Marshal for deterministic compact output + jsonBytes, err = json.Marshal(obj) + if err != nil { + return "", fmt.Errorf("re-marshaling value: %w", err) + } return string(jsonBytes), nil } diff --git a/vendor/github.com/google/cel-go/ext/lists.go b/vendor/github.com/google/cel-go/ext/lists.go index b4ac258995..2196d218c8 100644 --- a/vendor/github.com/google/cel-go/ext/lists.go +++ b/vendor/github.com/google/cel-go/ext/lists.go @@ -192,7 +192,7 @@ func ListsVersion(version uint32) ListsOption { } // ListsMaxRangeSize sets the maximum number of elements lists.range() will -// allocate. If not set, the default is 10,000,000. Setting this to zero +// allocate. If not set, the default is 1,000,000. Setting this to zero // disables the limit (not recommended). func ListsMaxRangeSize(size int64) ListsOption { return func(lib *listsLib) *listsLib { @@ -363,23 +363,45 @@ func (lib listsLib) CompileOptions() []cel.EnvOption { if lib.version >= 3 { estimators := []checker.CostOption{ checker.OverloadCostEstimate("list_slice", estimateListSlice), - checker.OverloadCostEstimate("list_flatten", estimateListFlatten), - checker.OverloadCostEstimate("list_flatten_int", estimateListFlatten), checker.OverloadCostEstimate("lists_range", estimateListsRange), checker.OverloadCostEstimate("list_reverse", estimateListReverse), - checker.OverloadCostEstimate("list_distinct", estimateListDistinct), } - for _, t := range comparableTypes { + if lib.version == 3 { estimators = append(estimators, - checker.OverloadCostEstimate( - fmt.Sprintf("list_%s_sort", t.TypeName()), - estimateListSort(t), - ), - checker.OverloadCostEstimate( - fmt.Sprintf("list_%s_sortByAssociatedKeys", t.TypeName()), - estimateListSortBy(t), - ), + checker.OverloadCostEstimate("list_flatten", estimateListFlattenLegacy), + checker.OverloadCostEstimate("list_flatten_int", estimateListFlattenLegacy), + checker.OverloadCostEstimate("list_distinct", estimateListDistinctLegacy), + ) + for _, t := range comparableTypes { + estimators = append(estimators, + checker.OverloadCostEstimate( + fmt.Sprintf("list_%s_sort", t.TypeName()), + estimateListSortLegacy(t), + ), + checker.OverloadCostEstimate( + fmt.Sprintf("list_%s_sortByAssociatedKeys", t.TypeName()), + estimateListSortByLegacy(t), + ), + ) + } + } else { + estimators = append(estimators, + checker.OverloadCostEstimate("list_flatten", estimateListFlatten), + checker.OverloadCostEstimate("list_flatten_int", estimateListFlatten), + checker.OverloadCostEstimate("list_distinct", estimateListDistinct), ) + for _, t := range comparableTypes { + estimators = append(estimators, + checker.OverloadCostEstimate( + fmt.Sprintf("list_%s_sort", t.TypeName()), + estimateListSort(t), + ), + checker.OverloadCostEstimate( + fmt.Sprintf("list_%s_sortByAssociatedKeys", t.TypeName()), + estimateListSortBy(t), + ), + ) + } } opts = append(opts, cel.CostEstimatorOptions(estimators...)) } @@ -391,15 +413,23 @@ func (lib listsLib) CompileOptions() []cel.EnvOption { func (lib *listsLib) ProgramOptions() []cel.ProgramOption { var opts []cel.ProgramOption if lib.version >= 3 { - // TODO: Add cost trackers for list operations trackers := []interpreter.CostTrackerOption{ interpreter.OverloadCostTracker("list_slice", trackListOutputSize), - interpreter.OverloadCostTracker("list_flatten", trackListFlatten), - interpreter.OverloadCostTracker("list_flatten_int", trackListFlatten), interpreter.OverloadCostTracker("lists_range", trackListOutputSize), interpreter.OverloadCostTracker("list_reverse", trackListOutputSize), interpreter.OverloadCostTracker("list_distinct", trackListDistinct), } + if lib.version == 3 { + trackers = append(trackers, + interpreter.OverloadCostTracker("list_flatten", trackListFlattenLegacy), + interpreter.OverloadCostTracker("list_flatten_int", trackListFlattenLegacy), + ) + } else { + trackers = append(trackers, + interpreter.OverloadCostTracker("list_flatten", trackListFlatten), + interpreter.OverloadCostTracker("list_flatten_int", trackListFlatten), + ) + } for _, t := range comparableTypes { trackers = append(trackers, interpreter.OverloadCostTracker( @@ -657,8 +687,27 @@ func estimateListReverse(estimator checker.CostEstimator, target *checker.AstNod return estimateAllocatingListCall(1, estimateSize(estimator, *target)) } -// estimateListFlatten computes an O(n) flatten operation with a cost factor proportional to the flatten depth. +// estimateListFlatten computes an O(n) flatten operation with a cost factor proportional to the total number of flattened items. func estimateListFlatten(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if target == nil || len(args) > 1 { + return nil + } + depth := uint64(1) + if len(args) == 1 { + depth = nodeAsUintValue(args[0], math.MaxUint) + } + var resSize checker.SizeEstimate + if (*target).Expr() != nil && (*target).Expr().Kind() == ast.ListKind { + szVal := estimateLiteralFlattenSize((*target).Expr(), depth) + resSize = checker.FixedSizeEstimate(szVal) + } else { + resSize = estimateFlattenSize(estimator, *target, depth) + } + cost := resSize.AsCost() + return estimateListCallWithDirectCost(cost, resSize, true) +} + +func estimateListFlattenLegacy(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { if target == nil || len(args) > 1 { return nil } @@ -669,6 +718,42 @@ func estimateListFlatten(estimator checker.CostEstimator, target *checker.AstNod return estimateAllocatingListCall(float64(depth), estimateSize(estimator, *target)) } +func estimateFlattenSize(estimator checker.CostEstimator, node checker.AstNode, depth uint64) checker.SizeEstimate { + sz := estimateSize(estimator, node) + if depth == 0 { + return sz + } + tType := node.Type() + if tType.Kind() != types.ListKind || len(tType.Parameters()) == 0 { + return sz + } + elemType := tType.Parameters()[0] + elemNode := pathAstNode{ + path: append(append([]string(nil), node.Path()...), "@items"), + t: elemType, + } + flatElemSize := estimateFlattenSize(estimator, elemNode, depth-1) + return sz.Multiply(flatElemSize) +} + +func estimateLiteralFlattenSize(expr ast.Expr, depth uint64) uint64 { + if depth == 0 { + if expr.Kind() == ast.ListKind { + return uint64(expr.AsList().Size()) + } + return 1 + } + if expr.Kind() != ast.ListKind { + return 1 + } + listExpr := expr.AsList() + totalSize := uint64(0) + for _, el := range listExpr.Elements() { + totalSize += estimateLiteralFlattenSize(el, depth-1) + } + return totalSize +} + // Compute an O(n^2) with a cost factor of 2, equivalent to sets.contains with a result list // which can vary in size from 1 element to the original list size. func estimateListDistinct(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { @@ -676,8 +761,23 @@ func estimateListDistinct(estimator checker.CostEstimator, target *checker.AstNo return nil } sz := estimateSize(estimator, *target) - costFactor := 2.0 - return estimateAllocatingListCall(costFactor, sz.Multiply(sz)) + elemType := types.DynType + tType := (*target).Type() + if tType.Kind() == types.ListKind && len(tType.Parameters()) > 0 { + elemType = tType.Parameters()[0] + } + itemSize := estimateItemSize(estimator, *target) + elemCost := estimateElementEqualityCost(estimator, elemType, itemSize) + + costSize := sz.Multiply(sz) + cost := costSize.MultiplyByCost(elemCost).MultiplyByCostFactor(2.0) + + minSize := uint64(0) + if sz.Min > 0 { + minSize = 1 + } + resultSize := checker.SizeEstimate{Min: minSize, Max: sz.Max} + return estimateListCallWithDirectCost(cost, resultSize, true) } // estimateListSort computes an O(n^2) sort operation with a cost factor of 2 for the equality @@ -698,37 +798,53 @@ func estimateListSortBy(u *types.Type) checker.FunctionEstimator { if target == nil || len(args) != 1 { return nil } - // Estimate the size of the list used as the sort index - return estimateListSortCost(estimator, args[0], u) + // Estimate the size of the list used as the sort index, using target to resolve item size hints. + return estimateListSortByCost(estimator, *target, args[0], u) } } +func estimateListSortByCost(estimator checker.CostEstimator, target checker.AstNode, keysNode checker.AstNode, elemType *types.Type) *checker.CallEstimate { + sz := estimateSize(estimator, keysNode) + itemSize := estimateItemSize(estimator, target) + elemCost := estimateElementEqualityCost(estimator, elemType, itemSize) + + costSize := sz.Multiply(sz) + cost := costSize.MultiplyByCost(elemCost).MultiplyByCostFactor(2.0) + return estimateListCallWithDirectCost(cost, sz, true) +} + // estimateListSortCost estimates an O(n^2) sort operation with a cost factor of 2 for the equality // operations which occur during the sort computation. func estimateListSortCost(estimator checker.CostEstimator, node checker.AstNode, elemType *types.Type) *checker.CallEstimate { sz := estimateSize(estimator, node) - costFactor := 2.0 - switch elemType { - case types.StringType, types.BytesType: - costFactor += common.StringTraversalCostFactor - } - return estimateAllocatingListCall(costFactor, sz.Multiply(sz)) + itemSize := estimateItemSize(estimator, node) + elemCost := estimateElementEqualityCost(estimator, elemType, itemSize) + + costSize := sz.Multiply(sz) + cost := costSize.MultiplyByCost(elemCost).MultiplyByCostFactor(2.0) + return estimateListCallWithDirectCost(cost, sz, true) } // estimateAllocatingListCall computes cost as a function of the size of the result list with a // baseline cost for the call dispatch and the associated list allocation. func estimateAllocatingListCall(costFactor float64, listSize checker.SizeEstimate) *checker.CallEstimate { - return estimateListCall(costFactor, listSize, true) + return estimateListCallWithResultSize(costFactor, listSize, listSize, true) } -// estimateListCall computes cost as a function of the size of the target list and whether the -// call allocates memory. -func estimateListCall(costFactor float64, listSize checker.SizeEstimate, allocates bool) *checker.CallEstimate { - cost := listSize.MultiplyByCostFactor(costFactor).Add(callCostEstimate) +// estimateListCallWithResultSize computes cost as a function of the size of the target list and whether the +// call allocates memory, using a separate result size estimate for the output list. +func estimateListCallWithResultSize(costFactor float64, costSize checker.SizeEstimate, resultSize checker.SizeEstimate, allocates bool) *checker.CallEstimate { + cost := costSize.MultiplyByCostFactor(costFactor) + return estimateListCallWithDirectCost(cost, resultSize, allocates) +} + +// estimateListCallWithDirectCost computes cost using a pre-calculated CostEstimate and a separate result size estimate. +func estimateListCallWithDirectCost(cost checker.CostEstimate, resultSize checker.SizeEstimate, allocates bool) *checker.CallEstimate { if allocates { cost = cost.Add(checker.FixedCostEstimate(common.ListCreateBaseCost)) } - return &checker.CallEstimate{CostEstimate: cost, ResultSize: &listSize} + cost = cost.Add(callCostEstimate) + return &checker.CallEstimate{CostEstimate: cost, ResultSize: &resultSize} } // trackListOutputSize computes cost as a function of the size of the result list. @@ -736,9 +852,13 @@ func trackListOutputSize(_ []ref.Val, result ref.Val) *uint64 { return trackAllocatingListCall(1, actualSize(result)) } -// trackListFlatten computes cost as a function of the size of the result list and the depth of -// the flatten operation. -func trackListFlatten(args []ref.Val, _ ref.Val) *uint64 { +// trackListFlatten computes cost as a function of the size of the result list. +func trackListFlatten(args []ref.Val, result ref.Val) *uint64 { + resSize := actualSize(result) + return trackAllocatingListCall(1.0, resSize) +} + +func trackListFlattenLegacy(args []ref.Val, _ ref.Val) *uint64 { depth := 1.0 if len(args) == 2 { depth = float64(args[1].(types.Int)) @@ -785,3 +905,99 @@ func trackAllocatingListCall(costFactor float64, size uint64) *uint64 { cost := safeAdd(uint64(float64(size)*costFactor), callCost, common.ListCreateBaseCost) return &cost } + +func estimateListDistinctLegacy(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if target == nil || len(args) != 0 { + return nil + } + sz := estimateSize(estimator, *target) + costFactor := 2.0 + tType := (*target).Type() + if tType.Kind() == types.ListKind && len(tType.Parameters()) > 0 { + elemType := tType.Parameters()[0] + if elemType.Kind() == types.StringKind || elemType.Kind() == types.BytesKind { + costFactor += common.StringTraversalCostFactor + } + } + return estimateAllocatingListCall(costFactor, sz.Multiply(sz)) +} + +func estimateListSortLegacy(t *types.Type) checker.FunctionEstimator { + return func(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if target == nil || len(args) != 0 { + return nil + } + return estimateListSortCostLegacy(estimator, *target, t) + } +} + +func estimateListSortByLegacy(u *types.Type) checker.FunctionEstimator { + return func(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if target == nil || len(args) != 1 { + return nil + } + return estimateListSortCostLegacy(estimator, args[0], u) + } +} + +func estimateListSortCostLegacy(estimator checker.CostEstimator, node checker.AstNode, elemType *types.Type) *checker.CallEstimate { + sz := estimateSize(estimator, node) + costFactor := 2.0 + switch elemType { + case types.StringType, types.BytesType: + costFactor += common.StringTraversalCostFactor + } + return estimateAllocatingListCall(costFactor, sz.Multiply(sz)) +} + +type pathAstNode struct { + path []string + t *types.Type +} + +func (p pathAstNode) Path() []string { + return p.path +} + +func (p pathAstNode) Type() *types.Type { + return p.t +} + +func (p pathAstNode) Expr() ast.Expr { + return nil +} + +func (p pathAstNode) ComputedSize() *checker.SizeEstimate { + return nil +} + +func estimateItemSize(estimator checker.CostEstimator, node checker.AstNode) checker.SizeEstimate { + path := node.Path() + if len(path) == 0 { + return checker.SizeEstimate{Min: 0, Max: math.MaxUint64} + } + elemType := types.DynType + tType := node.Type() + if tType.Kind() == types.ListKind && len(tType.Parameters()) > 0 { + elemType = tType.Parameters()[0] + } + itemNode := pathAstNode{ + path: append(append([]string(nil), path...), "@items"), + t: elemType, + } + if l := estimator.EstimateSize(itemNode); l != nil { + return *l + } + return checker.SizeEstimate{Min: 0, Max: math.MaxUint64} +} + +func estimateElementEqualityCost(estimator checker.CostEstimator, elemType *types.Type, itemSize checker.SizeEstimate) checker.CostEstimate { + switch elemType.Kind() { + case types.StringKind, types.BytesKind: + return itemSize.MultiplyByCostFactor(common.StringTraversalCostFactor) + case types.ListKind, types.MapKind, types.StructKind: + return checker.UnknownCostEstimate() + default: + return checker.FixedCostEstimate(1) + } +} diff --git a/vendor/github.com/google/cel-go/ext/math.go b/vendor/github.com/google/cel-go/ext/math.go index 6df8e37736..e67b205def 100644 --- a/vendor/github.com/google/cel-go/ext/math.go +++ b/vendor/github.com/google/cel-go/ext/math.go @@ -20,10 +20,12 @@ import ( "strings" "github.com/google/cel-go/cel" + "github.com/google/cel-go/checker" "github.com/google/cel-go/common/ast" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" "github.com/google/cel-go/common/types/traits" + "github.com/google/cel-go/interpreter" ) // Math returns a cel.EnvOption to configure namespaced math helper macros and @@ -339,9 +341,9 @@ import ( // // Examples: // -// math.sqrt(81) // returns 9.0 -// math.sqrt(985.25) // returns 31.388692231439016 -// math.sqrt(-15) // returns NaN +// math.sqrt(81) // returns 9.0 +// math.sqrt(985.25) // returns 31.388692231439016 +// math.sqrt(-15) // returns NaN func Math(options ...MathOption) cel.EnvOption { m := &mathLib{version: math.MaxUint32} for _, o := range options { @@ -580,12 +582,35 @@ func (lib *mathLib) CompileOptions() []cel.EnvOption { ), ) } + if lib.version >= 3 { + estimators := []checker.CostOption{ + checker.OverloadCostEstimate("math_@min_list_double", estimateMathListCost), + checker.OverloadCostEstimate("math_@min_list_int", estimateMathListCost), + checker.OverloadCostEstimate("math_@min_list_uint", estimateMathListCost), + checker.OverloadCostEstimate("math_@max_list_double", estimateMathListCost), + checker.OverloadCostEstimate("math_@max_list_int", estimateMathListCost), + checker.OverloadCostEstimate("math_@max_list_uint", estimateMathListCost), + } + opts = append(opts, cel.CostEstimatorOptions(estimators...)) + } return opts } // ProgramOptions implements the Library interface method. -func (*mathLib) ProgramOptions() []cel.ProgramOption { - return []cel.ProgramOption{} +func (lib *mathLib) ProgramOptions() []cel.ProgramOption { + var opts []cel.ProgramOption + if lib.version >= 3 { + trackers := []interpreter.CostTrackerOption{ + interpreter.OverloadCostTracker("math_@min_list_double", trackMathListCost), + interpreter.OverloadCostTracker("math_@min_list_int", trackMathListCost), + interpreter.OverloadCostTracker("math_@min_list_uint", trackMathListCost), + interpreter.OverloadCostTracker("math_@max_list_double", trackMathListCost), + interpreter.OverloadCostTracker("math_@max_list_int", trackMathListCost), + interpreter.OverloadCostTracker("math_@max_list_uint", trackMathListCost), + } + opts = append(opts, cel.CostTrackerOptions(trackers...)) + } + return opts } func mathLeast(meh cel.MacroExprFactory, target ast.Expr, args []ast.Expr) (ast.Expr, *cel.Error) { @@ -723,21 +748,19 @@ func sign(val ref.Val) ref.Val { } } - func sqrt(val ref.Val) ref.Val { switch v := val.(type) { case types.Double: - return types.Double(math.Sqrt(float64(v))) + return types.Double(math.Sqrt(float64(v))) case types.Int: - return types.Double(math.Sqrt(float64(v))) + return types.Double(math.Sqrt(float64(v))) case types.Uint: - return types.Double(math.Sqrt(float64(v))) + return types.Double(math.Sqrt(float64(v))) default: - return types.NewErr("no such overload: sqrt") + return types.NewErr("no such overload: sqrt") } } - func bitAndPairInt(first, second ref.Val) ref.Val { l := first.(types.Int) r := second.(types.Int) @@ -946,3 +969,19 @@ func maybeSuffixError(val ref.Val, suffix string) ref.Val { } return val } + +func estimateMathListCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if len(args) != 1 { + return nil + } + sz := estimateSize(estimator, args[0]) + cost := sz.MultiplyByCostFactor(1.0).Add(callCostEstimate) + resultSize := checker.FixedSizeEstimate(1) + return &checker.CallEstimate{CostEstimate: cost, ResultSize: &resultSize} +} + +func trackMathListCost(args []ref.Val, _ ref.Val) *uint64 { + sz := actualSize(args[0]) + cost := safeAdd(sz, callCost) + return &cost +} diff --git a/vendor/github.com/google/cel-go/ext/native.go b/vendor/github.com/google/cel-go/ext/native.go index c30f26ad31..2598b38d65 100644 --- a/vendor/github.com/google/cel-go/ext/native.go +++ b/vendor/github.com/google/cel-go/ext/native.go @@ -15,31 +15,38 @@ package ext import ( - "errors" - "fmt" - "math" - "reflect" - "strings" - "time" - - "google.golang.org/protobuf/proto" - "google.golang.org/protobuf/reflect/protoreflect" - "github.com/google/cel-go/cel" "github.com/google/cel-go/common/types" - "github.com/google/cel-go/common/types/pb" - "github.com/google/cel-go/common/types/ref" - "github.com/google/cel-go/common/types/traits" - - structpb "google.golang.org/protobuf/types/known/structpb" ) +// NativeTypesOption is a functional interface for configuring handling of native types. +type NativeTypesOption = types.NativeTypeOption + +// NativeTypesFieldNameHandler is a handler for mapping a reflect.StructField to a CEL field name. +// This can be used to override the default Go struct field to CEL field name mapping. +type NativeTypesFieldNameHandler = types.NativeTypesFieldNameHandler + var ( - nativeObjTraitMask = traits.FieldTesterType | traits.IndexerType - jsonValueType = reflect.TypeOf(&structpb.Value{}) - jsonStructType = reflect.TypeOf(&structpb.Struct{}) + // ParseStructTags configures if native types field names should be overridable by CEL struct tags. + // This is equivalent to ParseStructTag("cel") + ParseStructTags = types.ParseStructTags + + // ParseStructTag configures the struct tag to parse. The 0th item in the tag is used as the name of the CEL field. + ParseStructTag = types.ParseStructTag + + // ParseStructField configures how to parse Go struct fields. It can be used to customize struct field parsing. + ParseStructField = types.ParseStructField ) +// NativeTypesVersion sets the native types version support for native extensions functions. +// +// Deprecated: NativeTypesVersion is a no-op and will be removed in a future release. +func NativeTypesVersion(version uint32) NativeTypesOption { + return func(*types.NativeTypeOptions) error { + return nil + } +} + // NativeTypes creates a type provider which uses reflect.Type and reflect.Value instances // to produce type definitions that can be used within CEL. // @@ -98,713 +105,14 @@ var ( // In case there are duplicated field names in the struct, an error will be returned. func NativeTypes(args ...any) cel.EnvOption { return func(env *cel.Env) (*cel.Env, error) { - nativeTypes := make([]any, 0, len(args)) - tpOptions := nativeTypeOptions{ - version: math.MaxUint32, - } - - for _, v := range args { - switch v := v.(type) { - case NativeTypesOption: - err := v(&tpOptions) - if err != nil { - return nil, err - } - default: - nativeTypes = append(nativeTypes, v) - } - } - - tp, err := newNativeTypeProvider(tpOptions, env.CELTypeAdapter(), env.CELTypeProvider(), nativeTypes...) - if err != nil { - return nil, err - } - - env, err = cel.CustomTypeAdapter(tp)(env) + p, a, err := types.ComposeTypes(env.CELTypeProvider(), env.CELTypeAdapter(), args...) if err != nil { return nil, err } - return cel.CustomTypeProvider(tp)(env) - } -} - -// NativeTypesOption is a functional interface for configuring handling of native types. -type NativeTypesOption func(*nativeTypeOptions) error - -// NativeTypesVersion sets the native types version support for native extensions functions. -func NativeTypesVersion(version uint32) NativeTypesOption { - return func(opts *nativeTypeOptions) error { - opts.version = version - return nil - } -} - -// NativeTypesFieldNameHandler is a handler for mapping a reflect.StructField to a CEL field name. -// This can be used to override the default Go struct field to CEL field name mapping. -type NativeTypesFieldNameHandler = func(field reflect.StructField) string - -func fieldNameByTag(structTagToParse string) func(field reflect.StructField) string { - return func(field reflect.StructField) string { - tag, found := field.Tag.Lookup(structTagToParse) - if found { - splits := strings.Split(tag, ",") - if len(splits) > 0 { - // We make the assumption that the leftmost entry in the tag is the name. - // This seems to be true for most tags that have the concept of a name/key, such as: - // https://pkg.go.dev/encoding/xml#Marshal - // https://pkg.go.dev/encoding/json#Marshal - // https://pkg.go.dev/go.mongodb.org/mongo-driver/bson#hdr-Structs - // https://pkg.go.dev/go.yaml.in/yaml/v3#Marshal - name := splits[0] - return name - } - } - - return field.Name - } -} - -type nativeTypeOptions struct { - // fieldNameHandler controls how CEL should perform struct field renames. - // This is most commonly used for switching to parsing based off the struct field tag, - // such as "cel" or "json". - fieldNameHandler NativeTypesFieldNameHandler - - // version is the native types library version. - version uint32 -} - -// ParseStructTags configures if native types field names should be overridable by CEL struct tags. -// This is equivalent to ParseStructTag("cel") -func ParseStructTags(enabled bool) NativeTypesOption { - return func(ntp *nativeTypeOptions) error { - if enabled { - ntp.fieldNameHandler = fieldNameByTag("cel") - } else { - ntp.fieldNameHandler = nil - } - return nil - } -} - -// ParseStructTag configures the struct tag to parse. The 0th item in the tag is used as the name of the CEL field. -// For example: -// If the tag to parse is "cel" and the struct field has tag cel:"foo", the CEL struct field will be "foo". -// If the tag to parse is "json" and the struct field has tag json:"foo,omitempty", the CEL struct field will be "foo". -func ParseStructTag(tag string) NativeTypesOption { - return func(ntp *nativeTypeOptions) error { - ntp.fieldNameHandler = fieldNameByTag(tag) - return nil - } -} - -// ParseStructField configures how to parse Go struct fields. It can be used to customize struct field parsing. -func ParseStructField(handler NativeTypesFieldNameHandler) NativeTypesOption { - return func(ntp *nativeTypeOptions) error { - ntp.fieldNameHandler = handler - return nil - } -} - -func newNativeTypeProvider(tpOptions nativeTypeOptions, adapter types.Adapter, provider types.Provider, refTypes ...any) (*nativeTypeProvider, error) { - nativeTypes := make(map[string]*nativeType, len(refTypes)) - for _, refType := range refTypes { - switch rt := refType.(type) { - case reflect.Type: - result, err := newNativeTypes(tpOptions.fieldNameHandler, rt) - if err != nil { - return nil, err - } - for idx := range result { - nativeTypes[result[idx].TypeName()] = result[idx] - } - case reflect.Value: - result, err := newNativeTypes(tpOptions.fieldNameHandler, rt.Type()) - if err != nil { - return nil, err - } - for idx := range result { - nativeTypes[result[idx].TypeName()] = result[idx] - } - default: - return nil, fmt.Errorf("unsupported native type: %v (%T) must be reflect.Type or reflect.Value", rt, rt) - } - } - return &nativeTypeProvider{ - nativeTypes: nativeTypes, - baseAdapter: adapter, - baseProvider: provider, - options: tpOptions, - }, nil -} - -type nativeTypeProvider struct { - nativeTypes map[string]*nativeType - baseAdapter types.Adapter - baseProvider types.Provider - options nativeTypeOptions -} - -// EnumValue proxies to the types.Provider configured at the times the NativeTypes -// option was configured. -func (tp *nativeTypeProvider) EnumValue(enumName string) ref.Val { - return tp.baseProvider.EnumValue(enumName) -} - -// FindIdent looks up natives type instances by qualified identifier, and if not found -// proxies to the composed types.Provider. -func (tp *nativeTypeProvider) FindIdent(typeName string) (ref.Val, bool) { - if t, found := tp.nativeTypes[typeName]; found { - return t, true - } - return tp.baseProvider.FindIdent(typeName) -} - -// FindStructType looks up the CEL type definition by qualified identifier, and if not found -// proxies to the composed types.Provider. -func (tp *nativeTypeProvider) FindStructType(typeName string) (*types.Type, bool) { - if _, found := tp.nativeTypes[typeName]; found { - return types.NewTypeTypeWithParam(types.NewObjectType(typeName)), true - } - if celType, found := tp.baseProvider.FindStructType(typeName); found { - return celType, true - } - return tp.baseProvider.FindStructType(typeName) -} - -func toFieldName(fieldNameHandler NativeTypesFieldNameHandler, f reflect.StructField) string { - if fieldNameHandler == nil { - return f.Name - } - - return fieldNameHandler(f) -} - -// FindStructFieldNames looks up the type definition first from the native types, then from -// the backing provider type set. If found, a set of field names corresponding to the type -// will be returned. -func (tp *nativeTypeProvider) FindStructFieldNames(typeName string) ([]string, bool) { - if t, found := tp.nativeTypes[typeName]; found { - fieldCount := t.refType.NumField() - fields := make([]string, fieldCount) - for i := 0; i < fieldCount; i++ { - fields[i] = toFieldName(tp.options.fieldNameHandler, t.refType.Field(i)) - } - return fields, true - } - if celTypeFields, found := tp.baseProvider.FindStructFieldNames(typeName); found { - return celTypeFields, true - } - return tp.baseProvider.FindStructFieldNames(typeName) -} - -// FindStructFieldType looks up a native type's field definition, and if the type name is not a native -// type then proxies to the composed types.Provider -func (tp *nativeTypeProvider) FindStructFieldType(typeName, fieldName string) (*types.FieldType, bool) { - t, found := tp.nativeTypes[typeName] - if !found { - return tp.baseProvider.FindStructFieldType(typeName, fieldName) - } - refField, isDefined := t.hasField(fieldName) - if !found || !isDefined { - return nil, false - } - celType, ok := convertToCelType(refField.Type) - if !ok { - return nil, false - } - return &types.FieldType{ - Type: celType, - IsSet: func(obj any) bool { - refVal := reflect.Indirect(reflect.ValueOf(obj)) - refField := refVal.FieldByName(refField.Name) - return !refField.IsZero() - }, - GetFrom: func(obj any) (any, error) { - refVal := reflect.Indirect(reflect.ValueOf(obj)) - refField := refVal.FieldByName(refField.Name) - return getFieldValue(refField), nil - }, - }, true -} - -// NewValue implements the ref.TypeProvider interface method. -func (tp *nativeTypeProvider) NewValue(typeName string, fields map[string]ref.Val) ref.Val { - t, found := tp.nativeTypes[typeName] - if !found { - return tp.baseProvider.NewValue(typeName, fields) - } - refPtr := reflect.New(t.refType) - refVal := refPtr.Elem() - for fieldName, val := range fields { - refFieldDef, isDefined := t.hasField(fieldName) - if !isDefined { - return types.NewErr("no such field: %s", fieldName) - } - fieldVal, err := val.ConvertToNative(refFieldDef.Type) - if err != nil { - return types.NewErrFromString(err.Error()) - } - refField := refVal.FieldByIndex(refFieldDef.Index) - refFieldVal := reflect.ValueOf(fieldVal) - refField.Set(refFieldVal) - } - return tp.NativeToValue(refPtr.Interface()) -} - -// NewValue adapts native values to CEL values and will proxy to the composed type adapter -// for non-native types. -func (tp *nativeTypeProvider) NativeToValue(val any) ref.Val { - if val == nil { - return types.NullValue - } - if v, ok := val.(ref.Val); ok { - return v - } - rawVal := reflect.ValueOf(val) - refVal := rawVal - if refVal.Kind() == reflect.Ptr { - refVal = reflect.Indirect(refVal) - } - // This isn't quite right if you're also supporting proto, - // but maybe an acceptable limitation. - switch refVal.Kind() { - case reflect.Array, reflect.Slice: - switch val := val.(type) { - case []byte: - return tp.baseAdapter.NativeToValue(val) - default: - if refVal.Type().Elem() == reflect.TypeOf(byte(0)) { - return tp.baseAdapter.NativeToValue(val) - } - return types.NewDynamicList(tp, val) - } - case reflect.Map: - return types.NewDynamicMap(tp, val) - case reflect.Struct: - switch val := val.(type) { - case proto.Message, *pb.Map, protoreflect.List, protoreflect.Message, protoreflect.Value, - time.Time: - return tp.baseAdapter.NativeToValue(val) - default: - return tp.newNativeObject(val, rawVal) - } - default: - return tp.baseAdapter.NativeToValue(val) - } -} - -func convertToCelType(refType reflect.Type) (*cel.Type, bool) { - switch refType.Kind() { - case reflect.Bool: - return cel.BoolType, true - case reflect.Float32, reflect.Float64: - return cel.DoubleType, true - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - if refType == durationType { - return cel.DurationType, true - } - return cel.IntType, true - case reflect.String: - return cel.StringType, true - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return cel.UintType, true - case reflect.Array, reflect.Slice: - refElem := refType.Elem() - if refElem == reflect.TypeOf(byte(0)) { - return cel.BytesType, true - } - elemType, ok := convertToCelType(refElem) - if !ok { - return nil, false - } - return cel.ListType(elemType), true - case reflect.Map: - keyType, ok := convertToCelType(refType.Key()) - if !ok { - return nil, false - } - // Ensure the key type is a int, bool, uint, string - elemType, ok := convertToCelType(refType.Elem()) - if !ok { - return nil, false - } - return cel.MapType(keyType, elemType), true - case reflect.Struct: - if refType == timestampType { - return cel.TimestampType, true - } - if refType.Implements(refValType) { - emptyCelVal := reflect.New(refType).Elem().Interface().(ref.Val) - return emptyCelVal.Type().(*cel.Type), true - } - return cel.ObjectType( - fmt.Sprintf("%s.%s", simplePkgAlias(refType.PkgPath()), refType.Name()), - ), true - case reflect.Pointer: - if refType.Implements(refValType) { - emptyCelVal := reflect.New(refType.Elem()).Interface().(ref.Val) - return emptyCelVal.Type().(*cel.Type), true - } - if refType.Implements(pbMsgInterfaceType) { - pbMsg := reflect.New(refType.Elem()).Interface().(protoreflect.ProtoMessage) - return cel.ObjectType(string(pbMsg.ProtoReflect().Descriptor().FullName())), true - } - return convertToCelType(refType.Elem()) - } - return nil, false -} - -func (tp *nativeTypeProvider) newNativeObject(val any, refValue reflect.Value) ref.Val { - valType, err := newNativeType(tp.options.fieldNameHandler, refValue.Type()) - if err != nil { - return types.NewErrFromString(err.Error()) - } - return &nativeObj{ - Adapter: tp, - val: val, - valType: valType, - refValue: refValue, - } -} - -type nativeObj struct { - types.Adapter - val any - valType *nativeType - refValue reflect.Value -} - -// ConvertToNative implements the ref.Val interface method. -// -// CEL does not have a notion of pointers, so whether a field is a pointer or value -// is handled as part of this conversion step. -func (o *nativeObj) ConvertToNative(typeDesc reflect.Type) (any, error) { - if o.refValue.Type() == typeDesc { - return o.val, nil - } - if o.refValue.Kind() == reflect.Pointer && o.refValue.Type().Elem() == typeDesc { - return o.refValue.Elem().Interface(), nil - } - if typeDesc.Kind() == reflect.Pointer && o.refValue.Type() == typeDesc.Elem() { - ptr := reflect.New(typeDesc.Elem()) - ptr.Elem().Set(o.refValue) - return ptr.Interface(), nil - } - switch typeDesc { - case jsonValueType: - jsonStruct, err := o.ConvertToNative(jsonStructType) + env, err = cel.CustomTypeAdapter(a)(env) if err != nil { return nil, err } - return structpb.NewStructValue(jsonStruct.(*structpb.Struct)), nil - case jsonStructType: - refVal := reflect.Indirect(o.refValue) - refType := refVal.Type() - fields := make(map[string]*structpb.Value, refVal.NumField()) - for i := 0; i < refVal.NumField(); i++ { - fieldType := refType.Field(i) - fieldValue := refVal.Field(i) - if !fieldValue.IsValid() || fieldValue.IsZero() { - continue - } - fieldName := toFieldName(o.valType.fieldNameHandler, fieldType) - fieldCELVal := o.NativeToValue(fieldValue.Interface()) - fieldJSONVal, err := fieldCELVal.ConvertToNative(jsonValueType) - if err != nil { - return nil, err - } - fields[fieldName] = fieldJSONVal.(*structpb.Value) - } - return &structpb.Struct{Fields: fields}, nil + return cel.CustomTypeProvider(p)(env) } - return nil, fmt.Errorf("type conversion error from '%v' to '%v'", o.Type(), typeDesc) } - -// ConvertToType implements the ref.Val interface method. -func (o *nativeObj) ConvertToType(typeVal ref.Type) ref.Val { - switch typeVal { - case types.TypeType: - return o.valType - default: - if typeVal.TypeName() == o.valType.typeName { - return o - } - } - return types.NewErr("type conversion error from '%s' to '%s'", o.Type(), typeVal) -} - -// Equal implements the ref.Val interface method. -// -// Note, that in Golang a pointer to a value is not equal to the value it contains. -// In CEL pointers and values to which they point are equal. -func (o *nativeObj) Equal(other ref.Val) ref.Val { - otherNtv, ok := other.(*nativeObj) - if !ok { - return types.False - } - val := o.val - otherVal := otherNtv.val - refVal := o.refValue - otherRefVal := otherNtv.refValue - if refVal.Kind() != otherRefVal.Kind() { - if refVal.Kind() == reflect.Pointer { - val = refVal.Elem().Interface() - } else if otherRefVal.Kind() == reflect.Pointer { - otherVal = otherRefVal.Elem().Interface() - } - } - return types.Bool(reflect.DeepEqual(val, otherVal)) -} - -// IsZeroValue indicates whether the contained Golang value is a zero value. -// -// Golang largely follows proto3 semantics for zero values. -func (o *nativeObj) IsZeroValue() bool { - return reflect.Indirect(o.refValue).IsZero() -} - -// IsSet tests whether a field which is defined is set to a non-default value. -func (o *nativeObj) IsSet(field ref.Val) ref.Val { - refField, refErr := o.getReflectedField(field) - if refErr != nil { - return refErr - } - return types.Bool(!refField.IsZero()) -} - -// Get returns the value fo a field name. -func (o *nativeObj) Get(field ref.Val) ref.Val { - refField, refErr := o.getReflectedField(field) - if refErr != nil { - return refErr - } - return adaptFieldValue(o, refField) -} - -func (o *nativeObj) getReflectedField(field ref.Val) (reflect.Value, ref.Val) { - fieldName, ok := field.(types.String) - if !ok { - return reflect.Value{}, types.MaybeNoSuchOverloadErr(field) - } - fieldNameStr := string(fieldName) - refField, isDefined := o.valType.hasField(fieldNameStr) - if !isDefined { - return reflect.Value{}, types.NewErr("no such field: %s", fieldName) - } - refVal := reflect.Indirect(o.refValue) - return refVal.FieldByIndex(refField.Index), nil -} - -// Type implements the ref.Val interface method. -func (o *nativeObj) Type() ref.Type { - return o.valType -} - -// Value implements the ref.Val interface method. -func (o *nativeObj) Value() any { - return o.val -} - -func newNativeTypes(fieldNameHandler NativeTypesFieldNameHandler, rawType reflect.Type) ([]*nativeType, error) { - nt, err := newNativeType(fieldNameHandler, rawType) - if err != nil { - return nil, err - } - result := []*nativeType{nt} - - alreadySeen := make(map[string]struct{}) - var iterateStructMembers func(reflect.Type) - iterateStructMembers = func(t reflect.Type) { - if t.Implements(reflect.TypeFor[ref.Val]()) { - // skip this field since it's a CEL ref.Val instance. - return - } - if k := t.Kind(); k == reflect.Pointer || k == reflect.Slice || k == reflect.Array || k == reflect.Map { - iterateStructMembers(t.Elem()) - return - } - if t.Kind() != reflect.Struct { - return - } - if _, seen := alreadySeen[t.String()]; seen { - return - } - alreadySeen[t.String()] = struct{}{} - nt, ntErr := newNativeType(fieldNameHandler, t) - if ntErr != nil { - err = ntErr - return - } - result = append(result, nt) - - for idx := 0; idx < t.NumField(); idx++ { - iterateStructMembers(t.Field(idx).Type) - } - } - iterateStructMembers(rawType) - - return result, err -} - -var ( - errDuplicatedFieldName = errors.New("field name already exists in struct") -) - -func newNativeType(fieldNameHandler NativeTypesFieldNameHandler, rawType reflect.Type) (*nativeType, error) { - refType := rawType - if refType.Kind() == reflect.Pointer { - refType = refType.Elem() - } - if !isValidObjectType(refType) { - return nil, fmt.Errorf("unsupported reflect.Type %v, must be reflect.Struct", rawType) - } - - // Since naming collisions can only happen with struct tag parsing, we only check for them if it is enabled. - if fieldNameHandler != nil { - fieldNames := make(map[string]struct{}) - - for idx := 0; idx < refType.NumField(); idx++ { - field := refType.Field(idx) - fieldName := toFieldName(fieldNameHandler, field) - - if _, found := fieldNames[fieldName]; found { - return nil, fmt.Errorf("invalid field name `%s` in struct `%s`: %w", fieldName, refType.Name(), errDuplicatedFieldName) - } else { - fieldNames[fieldName] = struct{}{} - } - } - } - - return &nativeType{ - typeName: fmt.Sprintf("%s.%s", simplePkgAlias(refType.PkgPath()), refType.Name()), - refType: refType, - fieldNameHandler: fieldNameHandler, - }, nil -} - -type nativeType struct { - typeName string - refType reflect.Type - fieldNameHandler NativeTypesFieldNameHandler -} - -// ConvertToNative implements ref.Val.ConvertToNative. -func (t *nativeType) ConvertToNative(typeDesc reflect.Type) (any, error) { - return nil, fmt.Errorf("type conversion error for type to '%v'", typeDesc) -} - -// ConvertToType implements ref.Val.ConvertToType. -func (t *nativeType) ConvertToType(typeVal ref.Type) ref.Val { - switch typeVal { - case types.TypeType: - return types.TypeType - } - return types.NewErr("type conversion error from '%s' to '%s'", types.TypeType, typeVal) -} - -// Equal returns true of both type names are equal to each other. -func (t *nativeType) Equal(other ref.Val) ref.Val { - otherType, ok := other.(ref.Type) - return types.Bool(ok && t.TypeName() == otherType.TypeName()) -} - -// HasTrait implements the ref.Type interface method. -func (t *nativeType) HasTrait(trait int) bool { - return nativeObjTraitMask&trait == trait -} - -// String implements the strings.Stringer interface method. -func (t *nativeType) String() string { - return t.typeName -} - -// Type implements the ref.Val interface method. -func (t *nativeType) Type() ref.Type { - return types.TypeType -} - -// TypeName implements the ref.Type interface method. -func (t *nativeType) TypeName() string { - return t.typeName -} - -// Value implements the ref.Val interface method. -func (t *nativeType) Value() any { - return t.typeName -} - -// fieldByName returns the corresponding reflect.StructField for the give name either by matching -// field tag or field name. -func (t *nativeType) fieldByName(fieldName string) (reflect.StructField, bool) { - if t.fieldNameHandler == nil { - return t.refType.FieldByName(fieldName) - } - - for i := 0; i < t.refType.NumField(); i++ { - f := t.refType.Field(i) - if toFieldName(t.fieldNameHandler, f) == fieldName { - return f, true - } - } - - return reflect.StructField{}, false -} - -// hasField returns whether a field name has a corresponding Golang reflect.StructField -func (t *nativeType) hasField(fieldName string) (reflect.StructField, bool) { - f, found := t.fieldByName(fieldName) - if !found || !f.IsExported() || !isSupportedType(f.Type) { - return reflect.StructField{}, false - } - return f, true -} - -func adaptFieldValue(adapter types.Adapter, refField reflect.Value) ref.Val { - return adapter.NativeToValue(getFieldValue(refField)) -} - -func getFieldValue(refField reflect.Value) any { - if refField.IsZero() { - switch refField.Kind() { - case reflect.Struct: - if refField.Type() == timestampType { - return time.Unix(0, 0) - } - case reflect.Pointer: - return reflect.New(refField.Type().Elem()).Interface() - } - } - return refField.Interface() -} - -func simplePkgAlias(pkgPath string) string { - paths := strings.Split(pkgPath, "/") - if len(paths) == 0 { - return "" - } - return paths[len(paths)-1] -} - -func isValidObjectType(refType reflect.Type) bool { - return refType.Kind() == reflect.Struct -} - -func isSupportedType(refType reflect.Type) bool { - switch refType.Kind() { - case reflect.Chan, reflect.Complex64, reflect.Complex128, reflect.Func, reflect.UnsafePointer, reflect.Uintptr: - return false - case reflect.Array, reflect.Slice: - return isSupportedType(refType.Elem()) - case reflect.Map: - return isSupportedType(refType.Key()) && isSupportedType(refType.Elem()) - } - return true -} - -var ( - pbMsgInterfaceType = reflect.TypeFor[protoreflect.ProtoMessage]() - refValType = reflect.TypeFor[ref.Val]() - timestampType = reflect.TypeFor[time.Time]() - durationType = reflect.TypeFor[time.Duration]() -) diff --git a/vendor/github.com/google/cel-go/ext/network.go b/vendor/github.com/google/cel-go/ext/network.go index affe59e2d3..bca0657077 100644 --- a/vendor/github.com/google/cel-go/ext/network.go +++ b/vendor/github.com/google/cel-go/ext/network.go @@ -16,13 +16,16 @@ package ext import ( "fmt" + "math" "net/netip" "reflect" "github.com/google/cel-go/cel" + "github.com/google/cel-go/checker" "github.com/google/cel-go/common/ast" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" + "github.com/google/cel-go/interpreter" ) const ( @@ -182,7 +185,11 @@ const ( var ( // Definitions for the Opaque Types - IPType = types.NewOpaqueType("net.IP") + + // IPType represents a network IP address. + IPType = types.NewOpaqueType("net.IP") + + // CIDRType represents a CIDR-format network range. CIDRType = types.NewOpaqueType("net.CIDR") ) @@ -196,13 +203,11 @@ func (*networkLib) LibraryName() string { func (*networkLib) CompileOptions() []cel.EnvOption { return []cel.EnvOption{ - // 1. Register Types cel.Types( IPType, CIDRType, ), - // 2. Register Functions cel.Function(cidrFunc, // K8s Parity: Following the pattern, this is "string_to_cidr" cel.Overload("string_to_cidr", []*cel.Type{cel.StringType}, CIDRType, @@ -288,11 +293,58 @@ func (*networkLib) CompileOptions() []cel.EnvOption { networkFormatValidator{funcName: ipFunc, argNum: 0, check: checkIP}, networkFormatValidator{funcName: cidrFunc, argNum: 0, check: checkCIDR}, ), + cel.CostEstimatorOptions( + checker.OverloadCostEstimate("string_to_cidr", estimateNetworkParseCost), + checker.OverloadCostEstimate("cidr_to_string", estimateNetworkNominalStringCost), + checker.OverloadCostEstimate("cidr_contains_cidr", estimateNetworkContainsCIDRCIDRCost), + checker.OverloadCostEstimate("cidr_contains_cidr_string", estimateNetworkContainsCIDRStringCost), + checker.OverloadCostEstimate("cidr_contains_ip_ip", estimateNetworkContainsIPIPCost), + checker.OverloadCostEstimate("cidr_contains_ip_string", estimateNetworkContainsIPStringCost), + checker.OverloadCostEstimate("ip_family", estimateNetworkNominalCost), + checker.OverloadCostEstimate("string_to_ip", estimateNetworkParseCost), + checker.OverloadCostEstimate("cidr_ip", estimateNetworkNominalOpaqueCost), + checker.OverloadCostEstimate("ip_to_string", estimateNetworkNominalStringCost), + checker.OverloadCostEstimate("ip_is_canonical", estimateIPIsCanonicalCost), + checker.OverloadCostEstimate("is_cidr", estimateNetworkParseBoolCost), + checker.OverloadCostEstimate("ip_is_global_unicast", estimateNetworkNominalCost), + checker.OverloadCostEstimate("is_ip", estimateNetworkParseBoolCost), + checker.OverloadCostEstimate("ip_is_link_local_multicast", estimateNetworkNominalCost), + checker.OverloadCostEstimate("ip_is_link_local_unicast", estimateNetworkNominalCost), + checker.OverloadCostEstimate("ip_is_loopback", estimateNetworkNominalCost), + checker.OverloadCostEstimate("cidr_is_mask", estimateNetworkNominalCost), + checker.OverloadCostEstimate("ip_is_unspecified", estimateNetworkNominalCost), + checker.OverloadCostEstimate("cidr_masked", estimateNetworkNominalOpaqueCost), + checker.OverloadCostEstimate("cidr_prefix_length", estimateNetworkNominalCost), + ), } } func (*networkLib) ProgramOptions() []cel.ProgramOption { - return []cel.ProgramOption{} + return []cel.ProgramOption{ + cel.CostTrackerOptions( + interpreter.OverloadCostTracker("string_to_cidr", trackNetworkParseCost), + interpreter.OverloadCostTracker("cidr_to_string", trackNetworkNominalCost), + interpreter.OverloadCostTracker("cidr_contains_cidr", trackNetworkContainsCIDRCIDRCost), + interpreter.OverloadCostTracker("cidr_contains_cidr_string", trackNetworkContainsCIDRStringCost), + interpreter.OverloadCostTracker("cidr_contains_ip_ip", trackNetworkContainsIPIPCost), + interpreter.OverloadCostTracker("cidr_contains_ip_string", trackNetworkContainsIPStringCost), + interpreter.OverloadCostTracker("ip_family", trackNetworkNominalCost), + interpreter.OverloadCostTracker("string_to_ip", trackNetworkParseCost), + interpreter.OverloadCostTracker("cidr_ip", trackNetworkNominalCost), + interpreter.OverloadCostTracker("ip_to_string", trackNetworkNominalCost), + interpreter.OverloadCostTracker("ip_is_canonical", trackIPIsCanonicalCost), + interpreter.OverloadCostTracker("is_cidr", trackNetworkParseCost), + interpreter.OverloadCostTracker("ip_is_global_unicast", trackNetworkNominalCost), + interpreter.OverloadCostTracker("is_ip", trackNetworkParseCost), + interpreter.OverloadCostTracker("ip_is_link_local_multicast", trackNetworkNominalCost), + interpreter.OverloadCostTracker("ip_is_link_local_unicast", trackNetworkNominalCost), + interpreter.OverloadCostTracker("ip_is_loopback", trackNetworkNominalCost), + interpreter.OverloadCostTracker("cidr_is_mask", trackNetworkNominalCost), + interpreter.OverloadCostTracker("ip_is_unspecified", trackNetworkNominalCost), + interpreter.OverloadCostTracker("cidr_masked", trackNetworkNominalCost), + interpreter.OverloadCostTracker("cidr_prefix_length", trackNetworkNominalCost), + ), + } } // networkAdapter adapts netip types while preserving existing adapters. @@ -478,8 +530,7 @@ func parseIPAddr(raw string) (netip.Addr, error) { return addr, nil } -// --- Opaque Type Wrappers --- - +// IP represents an IP address type. type IP struct { netip.Addr } @@ -527,6 +578,13 @@ func (i IP) Value() any { return i.Addr } +// Size returns the size of the IP address in bytes. +// /Used in the size estimation of the runtime cost. +func (i IP) Size() ref.Val { + return types.Int(int64(math.Ceil(float64(i.Addr.BitLen()) / 8))) +} + +// CIDR represents the CIDR network mask format. type CIDR struct { netip.Prefix } @@ -574,6 +632,12 @@ func (c CIDR) Value() any { return c.Prefix } +// Size returns the size of the CIDR prefix address in bytes. +// Used in the size estimation of the runtime cost. +func (c CIDR) Size() ref.Val { + return types.Int(int64(math.Ceil(float64(c.Prefix.Bits()) / 8))) +} + // --- Static Validators --- type argChecker func(e *cel.Env, call, arg ast.Expr) error @@ -617,3 +681,130 @@ func checkCIDR(e *cel.Env, call, arg ast.Expr) error { _, err := parseCIDR(pattern) return err } + +// Cost estimation functions for network extensions. + +func estimateNetworkParseCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if len(args) < 1 { + return nil + } + sz := estimateSize(estimator, args[0]) + resultSize := rangedSizeEstimate(4, 16) + return callEstimate(sz.MultiplyByCostFactor(stringCostFactor), &resultSize) +} + +func estimateNetworkParseBoolCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if len(args) < 1 { + return nil + } + sz := estimateSize(estimator, args[0]) + return callEstimate(sz.MultiplyByCostFactor(stringCostFactor), nil) +} + +func estimateIPIsCanonicalCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if len(args) < 1 { + return nil + } + sz := estimateSize(estimator, args[0]) + return callEstimate(sz.MultiplyByCostFactor(2*stringCostFactor), nil) +} + +func estimateNetworkNominalCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + return callEstimate(callCostEstimate, nil) +} + +func estimateNetworkNominalOpaqueCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + resultSize := rangedSizeEstimate(4, 16) + return callEstimate(callCostEstimate, &resultSize) +} + +func estimateNetworkNominalStringCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + resultSize := rangedSizeEstimate(3, 45) + return callEstimate(callCostEstimate, &resultSize) +} + +func estimateNetworkContainsIPIPCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + sz := rangedSizeEstimate(4, 16) + ipCompCost := sz.Add(sz).MultiplyByCostFactor(stringCostFactor) + return callEstimate(ipCompCost, nil) +} + +func estimateNetworkContainsIPStringCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if len(args) < 1 { + return nil + } + sz := rangedSizeEstimate(4, 16) + ipCompCost := sz.Add(sz).MultiplyByCostFactor(stringCostFactor) + argSz := estimateSize(estimator, args[0]) + ipCompCost = ipCompCost.Add(argSz.MultiplyByCostFactor(stringCostFactor)) + return callEstimate(ipCompCost, nil) +} + +func estimateNetworkContainsCIDRCIDRCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + sz := rangedSizeEstimate(4, 16) + ipCompCost := sz.Add(sz).MultiplyByCostFactor(stringCostFactor) + ipCompCost = ipCompCost.Add(sz.MultiplyByCostFactor(stringCostFactor)) + // K8s adds one for the extra IP traversal + ipCompCost = ipCompCost.Add(callCostEstimate) + return callEstimate(ipCompCost, nil) +} + +func estimateNetworkContainsCIDRStringCost(estimator checker.CostEstimator, target *checker.AstNode, args []checker.AstNode) *checker.CallEstimate { + if len(args) < 1 { + return nil + } + sz := rangedSizeEstimate(4, 16) + ipCompCost := sz.Add(sz).MultiplyByCostFactor(stringCostFactor) + ipCompCost = ipCompCost.Add(sz.MultiplyByCostFactor(stringCostFactor)) + argSz := estimateSize(estimator, args[0]) + ipCompCost = ipCompCost.Add(argSz.MultiplyByCostFactor(stringCostFactor)) + // K8s adds one for the extra IP traversal + ipCompCost = ipCompCost.Add(callCostEstimate) + return callEstimate(ipCompCost, nil) +} + +// Runtime cost tracking functions for network extensions. + +func trackNetworkParseCost(args []ref.Val, result ref.Val) *uint64 { + cost := uint64(math.Ceil(float64(actualSize(args[0])) * stringCostFactor)) + return &cost +} + +func trackIPIsCanonicalCost(args []ref.Val, result ref.Val) *uint64 { + cost := uint64(math.Ceil(float64(actualSize(args[0])) * 2 * stringCostFactor)) + return &cost +} + +func trackNetworkNominalCost(args []ref.Val, result ref.Val) *uint64 { + return &callCost +} + +func trackNetworkContainsIPIPCost(args []ref.Val, result ref.Val) *uint64 { + cidrSize := actualSize(args[0]) + cost := uint64(math.Ceil(float64(cidrSize+cidrSize) * stringCostFactor)) + return &cost +} + +func trackNetworkContainsIPStringCost(args []ref.Val, result ref.Val) *uint64 { + cidrSize := actualSize(args[0]) + otherSize := actualSize(args[1]) + cost := uint64(math.Ceil(float64(cidrSize+cidrSize) * stringCostFactor)) + cost = safeAdd(cost, uint64(math.Ceil(float64(otherSize)*stringCostFactor))) + return &cost +} + +func trackNetworkContainsCIDRCIDRCost(args []ref.Val, result ref.Val) *uint64 { + cidrSize := actualSize(args[0]) + cost := uint64(math.Ceil(float64(cidrSize+cidrSize) * stringCostFactor)) + cost = safeAdd(cost, uint64(math.Ceil(float64(cidrSize)*stringCostFactor)), 1) + return &cost +} + +func trackNetworkContainsCIDRStringCost(args []ref.Val, result ref.Val) *uint64 { + cidrSize := actualSize(args[0]) + otherSize := actualSize(args[1]) + cost := uint64(math.Ceil(float64(cidrSize+cidrSize) * stringCostFactor)) + cost = safeAdd(cost, uint64(math.Ceil(float64(cidrSize)*stringCostFactor)), 1) + cost = safeAdd(cost, uint64(math.Ceil(float64(otherSize)*stringCostFactor))) + return &cost +} diff --git a/vendor/github.com/google/cel-go/interpreter/BUILD.bazel b/vendor/github.com/google/cel-go/interpreter/BUILD.bazel index 1274a6f12d..40ac2ba696 100644 --- a/vendor/github.com/google/cel-go/interpreter/BUILD.bazel +++ b/vendor/github.com/google/cel-go/interpreter/BUILD.bazel @@ -9,6 +9,7 @@ go_library( name = "go_default_library", srcs = [ "activation.go", + "async.go", "attribute_patterns.go", "attributes.go", "decorators.go", @@ -46,6 +47,7 @@ go_test( name = "go_default_test", srcs = [ "activation_test.go", + "async_test.go", "attribute_patterns_test.go", "attributes_test.go", "frame_test.go", @@ -65,6 +67,7 @@ go_test( "//common/operators:go_default_library", "//common/stdlib:go_default_library", "//common/types:go_default_library", + "//common/types/ref:go_default_library", "//parser:go_default_library", "//test:go_default_library", "//test/proto2pb:go_default_library", diff --git a/vendor/github.com/google/cel-go/interpreter/activation.go b/vendor/github.com/google/cel-go/interpreter/activation.go index 023efbb807..bc9296ed4e 100644 --- a/vendor/github.com/google/cel-go/interpreter/activation.go +++ b/vendor/github.com/google/cel-go/interpreter/activation.go @@ -134,6 +134,19 @@ func (a *hierarchicalActivation) Unwrap() Activation { return a.parent } +// IsLocalVariable reports whether the variable name is locally bound in the hierarchical activation. +func (a *hierarchicalActivation) IsLocalVariable(name string) bool { + if holder, ok := a.child.(localVariableHolder); ok { + if holder.IsLocalVariable(name) { + return true + } + } + if holder, ok := a.parent.(localVariableHolder); ok { + return holder.IsLocalVariable(name) + } + return false +} + // AsPartialActivation checks the child first via direct type assertion (to // avoid recursion through the folder → frame → hierarchicalActivation cycle), // then walks the parent hierarchy via the free function. diff --git a/vendor/github.com/google/cel-go/interpreter/async.go b/vendor/github.com/google/cel-go/interpreter/async.go new file mode 100644 index 0000000000..4e391196bf --- /dev/null +++ b/vendor/github.com/google/cel-go/interpreter/async.go @@ -0,0 +1,530 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package interpreter + +import ( + "context" + "encoding/binary" + "fmt" + "hash/fnv" + "math" + "sync" + "sync/atomic" + + "github.com/google/cel-go/common/functions" + "github.com/google/cel-go/common/types" + "github.com/google/cel-go/common/types/ref" +) + +// Async extension function support. +// +// CEL supports `types.Unknown` as a first-class value, and concurrent (async) function execution +// in CEL invokes a stub function which checks for the presence of an existing result which matches +// the function call and call arguments, or which records the 'unexecuted' function and call arguments +// for concurrent execution in a later phase if the result is `types.Unknown` and indicates the +// expression ids of the functions necessary to advance the execution. +// +// This call pattern is repeated iteratively until there are either no more functions to call or no +// progress is made toward resolving the unknowns. + +// AsyncObserver provides callbacks for monitoring the lifecycle of asynchronous function calls. +// +// Implementations must be safe for concurrent use: OnCallStarted is invoked from the evaluator +// goroutine when a call is launched, while OnCallFinished is invoked from the call's own goroutine +// when it completes. The two callbacks therefore run on different goroutines, and OnCallFinished +// callbacks for distinct calls may run concurrently with each other. +type AsyncObserver interface { + // OnCallStarted is called when an asynchronous function is first launched. + OnCallStarted(callID int64, function, overload string, args []ref.Val) + // OnCallFinished is called when an asynchronous function completes. + OnCallFinished(callID int64, function, overload string, res ref.Val) +} + +// AsyncCall describes a pending or completed asynchronous function call. +type AsyncCall interface { + // CallID returns the unique identifier for this async call invocation. + CallID() int64 + // Function returns the name of the function being called. + Function() string + // Overload returns the specific overload ID being invoked. + Overload() string +} + +// evalAsyncFunc is the planned Interpretable for an asynchronous function call. +type evalAsyncFunc struct { + id int64 + function string + overload string + args []InterpretableV2 + impl functions.AsyncOp +} + +// ID implements the Interpretable interface method. +func (fn *evalAsyncFunc) ID() int64 { + return fn.id +} + +// Function returns the name of the function being invoked. +func (fn *evalAsyncFunc) Function() string { + return fn.function +} + +// OverloadID returns the overload id of the function being invoked. +func (fn *evalAsyncFunc) OverloadID() string { + return fn.overload +} + +// Args returns the argument Interpretables for the function call. +func (fn *evalAsyncFunc) Args() []InterpretableV2 { + return fn.args +} + +// Eval implements the Interpretable interface method. +func (fn *evalAsyncFunc) Eval(vars Activation) ref.Val { + return fn.Exec(AsFrame(vars)) +} + +// Exec implements the InterpretableV2 interface method. +func (fn *evalAsyncFunc) Exec(frame *ExecutionFrame) ref.Val { + argVals := make([]ref.Val, len(fn.args)) + var unk *types.Unknown + for i, arg := range fn.args { + argVals[i] = arg.Exec(frame) + if types.IsError(argVals[i]) { + return argVals[i] + } + unk, _ = types.MaybeMergeUnknowns(argVals[i], unk) + } + if unk != nil { + return unk + } + result := frame.ComputeResult(fn.ID(), fn.Function(), fn.OverloadID(), fn.impl, argVals) + return types.LabelErrNode(fn.id, result) +} + +// asyncCallStateTracker manages async call states across re-evaluations of a single program. +type asyncCallStateTracker struct { + mu sync.RWMutex + // calls buckets call states by a composite hash of (node id, overload, string/int/double/uint/bool args). + // A single AST node id may host many concurrently-live calls when it is evaluated inside a + // comprehension (once per element with different arguments), so each bucket may hold more + // than one state. The exact match within a bucket is resolved via asyncCallState.matches, + // which applies CEL's full equality semantics to the arguments. + calls map[uint64][]*asyncCallState + callsByID map[int64]*asyncCallState + nextCallID atomic.Int64 +} + +func newAsyncCallStateTracker() *asyncCallStateTracker { + return &asyncCallStateTracker{ + calls: make(map[uint64][]*asyncCallState), + callsByID: make(map[int64]*asyncCallState), + } +} + +var ( + hashZeroMarker = []byte{0} + hashStringMarker = []byte{'s'} + hashBoolTrueMarker = []byte{'b', 1} + hashBoolFalseMarker = []byte{'b', 0} + hashNumberMarker = []byte{'n'} + hashDefaultMarker = []byte{'x'} +) + +// hashCall computes the composite bucket key for an async call. +// +// Only string, int, double, uint, and bool argument values contribute to the hash. More complex types +// rely on a richer notion of equivalence (e.g. unordered maps, proto equality, custom types) +// that a byte-level hash cannot capture safely, so they are intentionally excluded from the key +// and are instead disambiguated within the bucket by asyncCallState.matches. +func hashCall(id int64, overload string, args []ref.Val) uint64 { + h := fnv.New64a() + var idBuf [8]byte + binary.LittleEndian.PutUint64(idBuf[:], uint64(id)) + h.Write(idBuf[:]) + h.Write([]byte(overload)) + h.Write(hashZeroMarker) + for _, arg := range args { + switch v := arg.(type) { + case types.String: + h.Write(hashStringMarker) + h.Write([]byte(string(v))) + case types.Bool: + if bool(v) { + h.Write(hashBoolTrueMarker) + } else { + h.Write(hashBoolFalseMarker) + } + case types.Int: + h.Write(hashNumberMarker) + var buf [8]byte + binary.LittleEndian.PutUint64(buf[:], math.Float64bits(float64(v))) + h.Write(buf[:]) + case types.Uint: + h.Write(hashNumberMarker) + var buf [8]byte + binary.LittleEndian.PutUint64(buf[:], math.Float64bits(float64(v))) + h.Write(buf[:]) + case types.Double: + h.Write(hashNumberMarker) + if math.IsNaN(float64(v)) { + h.Write([]byte("NaN")) + h.Write(hashZeroMarker) + continue + } + // Normalize -0.0 to 0.0. Go will treat -0.0 as 0.0 at compile time, + // but the function math.Copysign(0.0, -1.0) can be used to test the -0.0 case. + if v == types.Double(0.0) && math.Signbit(float64(v)) { + v = types.Double(0.0) + } + var buf [8]byte + binary.LittleEndian.PutUint64(buf[:], math.Float64bits(float64(v))) + h.Write(buf[:]) + default: + // Value intentionally omitted; bucket membership falls back to matches. + h.Write(hashDefaultMarker) + } + // Separator to avoid cross-argument collisions, e.g. ("a", "bc") vs ("ab", "c"). + h.Write(hashZeroMarker) + } + return h.Sum64() +} + +// findInBucket returns the call state in the bucket matching the same node id and call identity, +// or nil if no match is present. +func findInBucket(bucket []*asyncCallState, id int64, function, overload string, args []ref.Val) *asyncCallState { + for _, acs := range bucket { + if acs.matches(id, function, overload, args) { + return acs + } + } + return nil +} + +// getOrCreate returns the existing call state for the (node id, args) tuple, or registers and +// returns a new one. A newly registered call is assigned a unique callID and counted as pending. +func (t *asyncCallStateTracker) getOrCreate(id int64, function, overload string, argVals []ref.Val, impl functions.AsyncOp, gate *asyncGate) *asyncCallState { + key := hashCall(id, overload, argVals) + + t.mu.RLock() + acs := findInBucket(t.calls[key], id, function, overload, argVals) + t.mu.RUnlock() + if acs != nil { + return acs + } + + t.mu.Lock() + defer t.mu.Unlock() + // Check again in case it was created while waiting for the lock. + if acs := findInBucket(t.calls[key], id, function, overload, argVals); acs != nil { + return acs + } + + // Assign a new unique call ID for this async call. + acs = newAsyncCallState(id, function, overload, argVals, impl) + callID := t.nextCallID.Add(1) + acs.callID = callID + acs.gate = gate + t.calls[key] = append(t.calls[key], acs) + t.callsByID[callID] = acs + return acs +} + +func (t *asyncCallStateTracker) getByID(callID int64) *asyncCallState { + t.mu.RLock() + defer t.mu.RUnlock() + return t.callsByID[callID] +} + +func newAsyncCallState(id int64, function, overload string, argVals []ref.Val, impl functions.AsyncOp) *asyncCallState { + return &asyncCallState{ + id: id, + function: function, + overload: overload, + argVals: argVals, + impl: impl, + } +} + +// asyncCallState tracks the result of a single async function call across multiple re-evaluations. +type asyncCallState struct { + id int64 // AST expression node ID where the call is defined. + callID int64 // Unique incremental tracking ID assigned to this call. + function string + overload string + argVals []ref.Val + impl functions.AsyncOp + + mu sync.RWMutex + started bool + result ref.Val + + gate *asyncGate +} + +// CallID returns the unique identifier for this async call invocation. +func (acs *asyncCallState) CallID() int64 { + return acs.callID +} + +// Function returns the name of the function being called. +func (acs *asyncCallState) Function() string { + return acs.function +} + +// Overload returns the specific overload ID being invoked. +func (acs *asyncCallState) Overload() string { + return acs.overload +} + +// ResultOrUnknown returns the cached result if the call has completed, an Unknown +// with the call ID if pending, or nil if the call has not been started. +func (acs *asyncCallState) ResultOrUnknown() ref.Val { + if acs == nil { + return nil + } + acs.mu.RLock() + defer acs.mu.RUnlock() + if acs.result == nil && acs.started { + return types.NewUnknown(acs.callID, nil) + } + return acs.result +} + +// SetResult sets the completed result for an asynchronous function call. +func (acs *asyncCallState) SetResult(res ref.Val) { + if acs == nil { + return + } + acs.mu.Lock() + defer acs.mu.Unlock() + acs.result = res +} + +// launch returns a call's cached result, or starts the call (subject to the launch limiter) and +// returns an Unknown referencing its callID while the result is pending. +// +// Admission control: when a concurrency semaphore is configured, a launch slot is reserved with a +// non-blocking send. If no slot is free the call is left unstarted and an Unknown is returned; the +// call is retried on a later re-evaluation pass once an in-flight call completes and frees a slot. +// The reservation is non-blocking on purpose — the evaluator runs on a single goroutine, and +// blocking it here while completing calls block on an undrained completion channel would deadlock. +// The slot is held by the launched goroutine and released when it exits, so the number of live +// async goroutines is bounded by the semaphore capacity. +func (t *asyncCallStateTracker) launch(ctx context.Context, acs *asyncCallState, observer AsyncObserver) ref.Val { + if res := acs.ResultOrUnknown(); res != nil { + return res + } + gate := acs.gate + if !gate.TryAcquire() { + return types.NewUnknown(acs.callID, nil) + } + acs.mu.Lock() + if acs.started || acs.result != nil { + // Defensive: the evaluator is single-threaded so this should not happen, but if it does, + // return the reserved slot rather than leak it. + acs.mu.Unlock() + gate.Release() + return types.NewUnknown(acs.callID, nil) + } + acs.started = true + acs.mu.Unlock() + + if observer != nil { + observer.OnCallStarted(acs.callID, acs.function, acs.overload, acs.argVals) + } + go func() { + defer func() { + if observer != nil { + observer.OnCallFinished(acs.callID, acs.function, acs.overload, acs.ResultOrUnknown()) + } + gate.Complete(ctx, acs.callID) + }() + + ch := acs.impl(ctx, acs.argVals...) + // Early terminate with a CEL error when an implementation returns an empty channel. + if ch == nil { + acs.SetResult(types.NewErrFromString( + fmt.Sprintf("function %s returned an empty channel", acs.function))) + return + } + // Wait for the async computation to finish or for the context to be cancelled. + select { + case r, ok := <-ch: + if !ok { + acs.SetResult(types.NewErrFromString( + fmt.Sprintf("function %s returned an empty channel", acs.function))) + return + } + acs.SetResult(r) + case <-ctx.Done(): + // Evaluation context cancelled before the async operation completed. + acs.SetResult(types.WrapErr(context.Cause(ctx))) + } + }() + return types.NewUnknown(acs.callID, nil) +} + +// matches reports whether two call states refer to the same function, overload, and arguments. +func (acs *asyncCallState) matches(id int64, function, overload string, args []ref.Val) bool { + if acs == nil { + return false + } + if acs.id != id || acs.function != function || acs.overload != overload { + return false + } + if len(acs.argVals) != len(args) { + return false + } + for i, v := range acs.argVals { + otherV := args[i] + if types.Equal(v, otherV) == types.True { + continue + } + if n, ok := v.(types.Double); ok { + // Treat NaN as equivalent for the sake of function dispatch equality. + if otherN, ok := otherV.(types.Double); ok && math.IsNaN(float64(n)) && math.IsNaN(float64(otherN)) { + continue + } + } + return false + } + return true +} + +// trackerShrinkThreshold is the entry count above which a released tracker's maps are reallocated +// rather than cleared in place, so the pool does not retain a large backing array indefinitely. +const trackerShrinkThreshold = 1024 + +// asyncCallStateTrackerPool provides a synchronized pool of asyncCallStateTrackers. +type asyncCallTrackerPool struct { + sync.Pool +} + +func (pool *asyncCallTrackerPool) create() *asyncCallStateTracker { + return pool.Get().(*asyncCallStateTracker) +} + +func (pool *asyncCallTrackerPool) release(tracker *asyncCallStateTracker) { + if tracker == nil { + return + } + tracker.mu.Lock() + // Clearing with delete reuses the backing arrays, which is ideal for the common case but pins + // a large allocation in the pool after a wide fan-out (e.g. an async call over a big list). + // Past a threshold, reallocate so the high-water-mark memory is released to the GC instead of + // being retained by the pooled tracker. + if len(tracker.calls) > trackerShrinkThreshold || len(tracker.callsByID) > trackerShrinkThreshold { + tracker.calls = make(map[uint64][]*asyncCallState) + tracker.callsByID = make(map[int64]*asyncCallState) + } else { + for k := range tracker.calls { + delete(tracker.calls, k) + } + for k := range tracker.callsByID { + delete(tracker.callsByID, k) + } + } + tracker.nextCallID.Store(0) + tracker.mu.Unlock() + pool.Pool.Put(tracker) +} + +func newAsyncCallTrackerPool() *asyncCallTrackerPool { + return &asyncCallTrackerPool{ + Pool: sync.Pool{ + New: func() any { + return newAsyncCallStateTracker() + }, + }, + } +} + +var asyncCallStateTrackerPool = newAsyncCallTrackerPool() + +// asyncGate coordinates async call admission control and completion signaling. +type asyncGate struct { + semaphore chan struct{} + completions chan<- int64 + activeCalls atomic.Int32 +} + +func newAsyncGate(maxConcurrency int, completions chan<- int64) *asyncGate { + var sem chan struct{} + if maxConcurrency > 0 { + sem = make(chan struct{}, maxConcurrency) + } + return &asyncGate{ + semaphore: sem, + completions: completions, + } +} + +// TryAcquire attempts to acquire a concurrency slot and increments the active calls count. +func (g *asyncGate) TryAcquire() bool { + if g == nil { + return true + } + if g.semaphore != nil { + select { + case g.semaphore <- struct{}{}: + default: + return false + } + } + g.activeCalls.Add(1) + return true +} + +// Release releases a concurrency slot and decrements the active calls count (used for defensive recovery). +func (g *asyncGate) Release() { + if g == nil { + return + } + if g.semaphore != nil { + select { + case <-g.semaphore: + default: + } + } + g.activeCalls.Add(-1) +} + +// Complete releases a concurrency slot and notifies completions. +func (g *asyncGate) Complete(ctx context.Context, callID int64) { + if g == nil { + return + } + g.Release() + + if g.completions != nil { + // Prioritize context cancellation to prevent racy completion signals. + if ctx.Err() != nil { + return + } + select { + case g.completions <- callID: + case <-ctx.Done(): + } + } +} + +// ActiveCalls returns the number of active asynchronous calls. +func (g *asyncGate) ActiveCalls() int { + if g == nil { + return 0 + } + return int(g.activeCalls.Load()) +} diff --git a/vendor/github.com/google/cel-go/interpreter/attribute_patterns.go b/vendor/github.com/google/cel-go/interpreter/attribute_patterns.go index 41ca5cd219..bbaca52269 100644 --- a/vendor/github.com/google/cel-go/interpreter/attribute_patterns.go +++ b/vendor/github.com/google/cel-go/interpreter/attribute_patterns.go @@ -255,6 +255,9 @@ func (fac *partialAttributeFactory) matchesUnknownPatterns( patterns := vars.UnknownAttributePatterns() candidateIndices := map[int]struct{}{} for _, variable := range variableNames { + if holder, ok := vars.(localVariableHolder); ok && holder.IsLocalVariable(variable) { + continue + } for i, pat := range patterns { if pat.VariableMatches(variable) { if len(qualifiers) == 0 { diff --git a/vendor/github.com/google/cel-go/interpreter/decorators.go b/vendor/github.com/google/cel-go/interpreter/decorators.go index 9c973664ac..6c48e5c1b9 100644 --- a/vendor/github.com/google/cel-go/interpreter/decorators.go +++ b/vendor/github.com/google/cel-go/interpreter/decorators.go @@ -15,6 +15,8 @@ package interpreter import ( + "fmt" + "github.com/google/cel-go/common/overloads" "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" @@ -169,6 +171,77 @@ func decRegexOptimizer(regexOptimizations ...*RegexOptimization) InterpretableDe } } +func decRegexProgramSizeLimit(limit int) InterpretableDecoratorV2 { + return func(i InterpretableV2) (InterpretableV2, error) { + if limit <= 0 { + return i, nil + } + call, ok := i.(InterpretableCall) + if !ok { + return i, nil + } + if !isRegexFunction(call.Function(), call.OverloadID()) || len(call.Args()) < 2 { + return i, nil + } + regexArg := call.Args()[1] + if constVal, isConst := regexArg.(InterpretableConst); isConst { + if pattern, ok := constVal.Value().(types.String); ok { + sz, err := types.RegexProgramSize(string(pattern)) + if err != nil { + return i, nil + } + if sz > limit { + return nil, fmt.Errorf("regex program size %d exceeds limit of %d", sz, limit) + } + } + return i, nil + } + return ®exLimitCall{InterpretableCall: call, limit: limit}, nil + } +} + +func isRegexFunction(fn, overload string) bool { + switch fn { + case overloads.Matches, "regex.extract", "regex.extractAll", "regex.replace": + return true + } + switch overload { + case overloads.Matches, overloads.MatchesString, + "regex_extract_string_string", "regex_extractAll_string_string", + "regex_replace_string_string_string", "regex_replace_string_string_string_int": + return true + } + return false +} + +type regexLimitCall struct { + InterpretableCall + limit int +} + +func (r *regexLimitCall) Exec(frame *ExecutionFrame) ref.Val { + args := r.Args() + if len(args) >= 2 { + patternVal := args[1].Exec(frame) + if types.IsError(patternVal) { + return patternVal + } + if types.IsUnknown(patternVal) { + return patternVal + } + if pat, ok := patternVal.(types.String); ok { + sz, err := types.RegexProgramSize(string(pat)) + if err != nil { + return types.WrapErr(err) + } + if sz > r.limit { + return types.WrapErr(fmt.Errorf("regex program size %d exceeds limit of %d", sz, r.limit)) + } + } + } + return r.InterpretableCall.Exec(frame) +} + func maybeOptimizeConstUnary(i InterpretableV2, call InterpretableCall) (InterpretableV2, error) { args := call.Args() if len(args) != 1 { diff --git a/vendor/github.com/google/cel-go/interpreter/frame.go b/vendor/github.com/google/cel-go/interpreter/frame.go index 3cf2d6b6b5..20ab313c8f 100644 --- a/vendor/github.com/google/cel-go/interpreter/frame.go +++ b/vendor/github.com/google/cel-go/interpreter/frame.go @@ -21,6 +21,8 @@ import ( "sync" "sync/atomic" + "github.com/google/cel-go/common/functions" + "github.com/google/cel-go/common/types" "github.com/google/cel-go/common/types/ref" ) @@ -52,6 +54,15 @@ type evalContext struct { // cancel cancels the context when the evaluation is finished. cancel context.CancelFunc + + // asyncCalls tracks the state of async call invocations across re-evaluations. + asyncCalls *asyncCallStateTracker + + // gate coordinates async call admission control and completion signaling. + gate *asyncGate + + // observer for monitoring async calls. + observer AsyncObserver } // ExecutionFrame provides the context for a single evaluation of an expression. @@ -93,6 +104,8 @@ func (f *ExecutionFrame) SetContext(ctx context.Context, interruptCheckFrequency } f.ctx = evalContextPool.Get().(*evalContext) f.ctx.ctx, f.ctx.cancel = context.WithCancel(ctx) + f.ctx.asyncCalls = asyncCallStateTrackerPool.create() + f.ctx.gate = &asyncGate{} f.ctx.interrupt = ctx.Done() f.ctx.interruptCheckFrequency = interruptCheckFrequency f.ctx.interruptCheckCount.Store(0) @@ -108,6 +121,10 @@ func (f *ExecutionFrame) Close() { f.ctx.cancel = nil } f.ctx.ctx = nil + f.ctx.gate = nil + asyncCallStateTrackerPool.release(f.ctx.asyncCalls) + f.ctx.asyncCalls = nil + f.ctx.observer = nil f.ctx.interrupt = nil f.ctx.state = nil f.ctx.costs = nil @@ -118,17 +135,19 @@ func (f *ExecutionFrame) Close() { } f.ctx = nil f.parent = nil - switch a := f.Activation.(type) { - case *hierarchicalActivation: - if child, ok := a.child.(*inputActivation); ok { - activationInput.release(child) + if f.Activation != nil { + switch a := f.Activation.(type) { + case *hierarchicalActivation: + if child, ok := a.child.(*inputActivation); ok { + activationInput.release(child) + } + activationStack.release(a) + case *inputActivation: + activationInput.release(a) } - activationStack.release(a) - case *inputActivation: - activationInput.release(a) + f.Activation = nil + frameStack.Put(f) } - f.Activation = nil - frameStack.Put(f) } // Push pushes the given activation onto the activation stack and returns the new frame. @@ -177,6 +196,20 @@ func (f *ExecutionFrame) Unwrap() Activation { return f.Activation } +// IsLocalVariable reports whether the variable name is locally bound in the frame. +func (f *ExecutionFrame) IsLocalVariable(name string) bool { + if holder, ok := f.Activation.(localVariableHolder); ok { + if holder.IsLocalVariable(name) { + return true + } + } + // Search parent scopes + if f.parent != nil { + return f.parent.IsLocalVariable(name) + } + return false +} + // CheckInterrupt returns whether the evaluation has been interrupted. func (f *ExecutionFrame) CheckInterrupt() bool { if f.ctx == nil { @@ -198,6 +231,91 @@ func (f *ExecutionFrame) CheckInterrupt() bool { return false } +// ComputeResult tracks and computes the result of the given asynchronous function. +// +// The first invocation for a given (node id, args) tuple registers the call state and returns an +// Unknown which references the call's unique callID. Subsequent invocations return the cached +// result once the call has completed. Launching background execution is deferred to post-execution +// dispatch via DispatchPendingAsyncCalls. +func (f *ExecutionFrame) ComputeResult(id int64, function, overload string, impl functions.AsyncOp, argVals []ref.Val) ref.Val { + if f.ctx == nil || f.ctx.asyncCalls == nil { + return types.NewErrWithNodeID(id, "asynchronous function calls require concurrent evaluation and cannot be resolved by a synchronous Eval") + } + t := f.ctx.asyncCalls + acs := t.getOrCreate(id, function, overload, argVals, impl, f.ctx.gate) + if res := acs.ResultOrUnknown(); res != nil { + return res + } + return types.NewUnknown(acs.callID, nil) +} + +// DispatchPendingAsyncCalls launches pending asynchronous calls for the specified required call IDs. +func (f *ExecutionFrame) DispatchPendingAsyncCalls(callIDs []int64) { + if f.ctx == nil || f.ctx.asyncCalls == nil { + return + } + t := f.ctx.asyncCalls + for _, callID := range callIDs { + if acs := t.getByID(callID); acs != nil { + t.launch(f.ctx.ctx, acs, f.ctx.observer) + } + } +} + +// ActiveAsyncCalls returns the number of async function calls that have been launched +// but whose completions have not yet been drained. +func (f *ExecutionFrame) ActiveAsyncCalls() int { + if f.ctx == nil || f.ctx.gate == nil { + return 0 + } + return f.ctx.gate.ActiveCalls() +} + +// AsyncCall returns the state of an async call by its callID, or nil if not found. +func (f *ExecutionFrame) AsyncCall(callID int64) AsyncCall { + if f.ctx == nil || f.ctx.asyncCalls == nil { + return nil + } + acs := f.ctx.asyncCalls.getByID(callID) + if acs == nil { + return nil + } + return acs +} + +// SetCompletions configures a channel to receive callIDs when asynchronous evaluations finish. +func (f *ExecutionFrame) SetCompletions(ch chan<- int64) error { + if f.ctx == nil { + return errors.New("asynchronous evaluation options require the execution frame to have a context configured") + } + f.ctx.gate.completions = ch + return nil +} + +// SetAsyncObserver sets the observer for monitoring asynchronous function calls. +func (f *ExecutionFrame) SetAsyncObserver(observer AsyncObserver) error { + if f.ctx == nil { + return errors.New("asynchronous evaluation options require the execution frame to have a context configured") + } + f.ctx.observer = observer + return nil +} + +// SetAsyncMaxConcurrency sets the maximum concurrency for asynchronous function calls. +// +// A non-positive value indicates that concurrency is unbounded. +func (f *ExecutionFrame) SetAsyncMaxConcurrency(n int) error { + if f.ctx == nil { + return errors.New("asynchronous evaluation options require the execution frame to have a context configured") + } + if n > 0 { + f.ctx.gate.semaphore = make(chan struct{}, n) + } else { + f.ctx.gate.semaphore = nil + } + return nil +} + // frameStack provides a synchronized pool of ExecutionFrames. var frameStack = &sync.Pool{ New: func() any { diff --git a/vendor/github.com/google/cel-go/interpreter/interpretable.go b/vendor/github.com/google/cel-go/interpreter/interpretable.go index 5b94e23e6c..906c4f805f 100644 --- a/vendor/github.com/google/cel-go/interpreter/interpretable.go +++ b/vendor/github.com/google/cel-go/interpreter/interpretable.go @@ -438,13 +438,19 @@ func (eq *evalEq) ID() int64 { // Exec implements the InterpretableV2 interface method. func (eq *evalEq) Exec(frame *ExecutionFrame) ref.Val { lVal := eq.lhs.Exec(frame) - rVal := eq.rhs.Exec(frame) - if types.IsUnknownOrError(lVal) { + if types.IsError(lVal) { return lVal } - if types.IsUnknownOrError(rVal) { + rVal := eq.rhs.Exec(frame) + if types.IsError(rVal) { return rVal } + var unk *types.Unknown + unk, _ = types.MaybeMergeUnknowns(lVal, unk) + unk, _ = types.MaybeMergeUnknowns(rVal, unk) + if unk != nil { + return unk + } return types.Equal(lVal, rVal) } @@ -482,13 +488,19 @@ func (ne *evalNe) ID() int64 { // Exec implements the InterpretableV2 interface method. func (ne *evalNe) Exec(frame *ExecutionFrame) ref.Val { lVal := ne.lhs.Exec(frame) - rVal := ne.rhs.Exec(frame) - if types.IsUnknownOrError(lVal) { + if types.IsError(lVal) { return lVal } - if types.IsUnknownOrError(rVal) { + rVal := ne.rhs.Exec(frame) + if types.IsError(rVal) { return rVal } + var unk *types.Unknown + unk, _ = types.MaybeMergeUnknowns(lVal, unk) + unk, _ = types.MaybeMergeUnknowns(rVal, unk) + if unk != nil { + return unk + } return types.Bool(types.Equal(lVal, rVal) != types.True) } @@ -624,15 +636,20 @@ func (bin *evalBinary) ID() int64 { // Exec implements the InterpretableV2 interface method. func (bin *evalBinary) Exec(frame *ExecutionFrame) ref.Val { lVal := bin.lhs.Exec(frame) - rVal := bin.rhs.Exec(frame) - // Early return if any argument to the function is unknown or error. strict := !bin.nonStrict + if strict && types.IsError(lVal) { + return lVal + } + rVal := bin.rhs.Exec(frame) + if strict && types.IsError(rVal) { + return rVal + } if strict { - if types.IsUnknownOrError(lVal) { - return lVal - } - if types.IsUnknownOrError(rVal) { - return rVal + var unk *types.Unknown + unk, _ = types.MaybeMergeUnknowns(lVal, unk) + unk, _ = types.MaybeMergeUnknowns(rVal, unk) + if unk != nil { + return unk } } // If the implementation is bound and the argument value has the right traits required to @@ -697,14 +714,20 @@ func (fn *evalVarArgs) ID() int64 { // Exec implements the InterpretableV2 interface method. func (fn *evalVarArgs) Exec(frame *ExecutionFrame) ref.Val { argVals := make([]ref.Val, len(fn.args)) - // Early return if any argument to the function is unknown or error. strict := !fn.nonStrict + var unk *types.Unknown for i, arg := range fn.args { argVals[i] = arg.Exec(frame) - if strict && types.IsUnknownOrError(argVals[i]) { - return argVals[i] + if strict { + if types.IsError(argVals[i]) { + return argVals[i] + } + unk, _ = types.MaybeMergeUnknowns(argVals[i], unk) } } + if strict && unk != nil { + return unk + } // If the implementation is bound and the argument value has the right traits required to // invoke it, then call the implementation. arg0 := argVals[0] @@ -755,24 +778,32 @@ func (l *evalList) ID() int64 { // Exec implements the InterpretableV2 interface method. func (l *evalList) Exec(frame *ExecutionFrame) ref.Val { elemVals := make([]ref.Val, 0, len(l.elems)) - // If any argument is unknown or error early terminate. + var unk *types.Unknown for i, elem := range l.elems { elemVal := elem.Exec(frame) - if types.IsUnknownOrError(elemVal) { + if types.IsError(elemVal) { return elemVal } + unk, _ = types.MaybeMergeUnknowns(elemVal, unk) if l.hasOptionals && l.optionals[i] { - optVal, ok := elemVal.(*types.Optional) - if !ok { - return types.LabelErrNode(l.id, invalidOptionalElementInit(elemVal)) - } - if !optVal.HasValue() { - continue + if types.IsUnknown(elemVal) { + // skip optional checks for unknown values as they aren't fully resolved yet. + } else { + optVal, ok := elemVal.(*types.Optional) + if !ok { + return types.LabelErrNode(l.id, invalidOptionalElementInit(elemVal)) + } + if !optVal.HasValue() { + continue + } + elemVal = optVal.GetValue() } - elemVal = optVal.GetValue() } elemVals = append(elemVals, elemVal) } + if unk != nil { + return unk + } return types.NewRefValList(l.adapter, elemVals) } @@ -806,17 +837,21 @@ func (m *evalMap) ID() int64 { // Exec implements the InterpretableV2 interface method. func (m *evalMap) Exec(frame *ExecutionFrame) ref.Val { entries := make(map[ref.Val]ref.Val, len(m.keys)) - // If any argument is unknown or error early terminate. + var unk *types.Unknown for i, key := range m.keys { keyVal := key.Exec(frame) - if types.IsUnknownOrError(keyVal) { + if types.IsError(keyVal) { return keyVal } + unk, _ = types.MaybeMergeUnknowns(keyVal, unk) + valVal := m.vals[i].Exec(frame) - if types.IsUnknownOrError(valVal) { + if types.IsError(valVal) { return valVal } - if m.hasOptionals && m.optionals[i] { + unk, _ = types.MaybeMergeUnknowns(valVal, unk) + + if m.hasOptionals && m.optionals[i] && !types.IsUnknown(valVal) { optVal, ok := valVal.(*types.Optional) if !ok { return types.LabelErrNode(m.id, invalidOptionalEntryInit(keyVal, valVal)) @@ -829,6 +864,9 @@ func (m *evalMap) Exec(frame *ExecutionFrame) ref.Val { } entries[keyVal] = valVal } + if unk != nil { + return unk + } return types.NewRefValMap(m.adapter, entries) } @@ -875,13 +913,14 @@ func (o *evalObj) ID() int64 { // Exec implements the InterpretableV2 interface method. func (o *evalObj) Exec(frame *ExecutionFrame) ref.Val { fieldVals := make(map[string]ref.Val, len(o.fields)) - // If any argument is unknown or error early terminate. + var unk *types.Unknown for i, field := range o.fields { val := o.vals[i].Exec(frame) - if types.IsUnknownOrError(val) { + if types.IsError(val) { return val } - if o.hasOptionals && o.optionals[i] { + unk, _ = types.MaybeMergeUnknowns(val, unk) + if o.hasOptionals && o.optionals[i] && !types.IsUnknown(val) { optVal, ok := val.(*types.Optional) if !ok { return types.LabelErrNode(o.id, invalidOptionalEntryInit(field, val)) @@ -894,6 +933,9 @@ func (o *evalObj) Exec(frame *ExecutionFrame) ref.Val { } fieldVals[field] = val } + if unk != nil { + return unk + } return types.LabelErrNode(o.id, o.provider.NewValue(o.typeName, fieldVals)) } @@ -1602,6 +1644,26 @@ func (f *folder) Unwrap() Activation { return f.frame.parent } +// IsLocalVariable reports whether the variable name is locally bound by the folder scope. +func (f *folder) IsLocalVariable(name string) bool { + if name == f.accuVar { + return true + } + if !f.computeResult && (name == f.iterVar || name == f.iterVar2) { + return true + } + parent := f.Parent() + if parent == nil { + return false + } + if varHolder, ok := parent.(localVariableHolder); ok { + if varHolder.IsLocalVariable(name) { + return true + } + } + return false +} + // UnknownAttributePatterns implements the PartialActivation interface returning the unknown patterns // if they were provided to the input activation, or an empty set if the proxied activation is not partial. func (f *folder) UnknownAttributePatterns() []*AttributePattern { diff --git a/vendor/github.com/google/cel-go/interpreter/interpreter.go b/vendor/github.com/google/cel-go/interpreter/interpreter.go index 38174aff69..29df9d41ed 100644 --- a/vendor/github.com/google/cel-go/interpreter/interpreter.go +++ b/vendor/github.com/google/cel-go/interpreter/interpreter.go @@ -113,6 +113,12 @@ type activationWrapper interface { Unwrap() Activation } +// localVariableHolder identifies an Activation scope that holds local variables and supports testing +// whether a variable name is local to this scope. +type localVariableHolder interface { + IsLocalVariable(name string) bool +} + // evalStateFactory holds a reference to a factory function that produces an EvalState instance. type evalStateFactory struct { factory func() EvalState @@ -121,6 +127,9 @@ type evalStateFactory struct { // InitState produces an EvalState instance and bundles it into the ExecutionFrame in a way which is // not visible to expression evaluation. func (et *evalStateFactory) InitState(frame *ExecutionFrame) (any, error) { + if frame.ctx != nil && frame.ctx.state != nil { + return frame.ctx.state, nil + } state := et.factory() if frame.ctx == nil { frame.ctx = evalContextPool.Get().(*evalContext) @@ -218,6 +227,11 @@ func CompileRegexConstants(regexOptimizations ...*RegexOptimization) PlannerOpti return CustomDecoratorV2(decRegexOptimizer(regexOptimizations...)) } +// RegexProgramSizeLimit caps the maximum regex program plan size permitted during evaluation. +func RegexProgramSizeLimit(limit int) PlannerOption { + return CustomDecoratorV2(decRegexProgramSizeLimit(limit)) +} + type exprInterpreter struct { dispatcher Dispatcher container *containers.Container diff --git a/vendor/github.com/google/cel-go/interpreter/planner.go b/vendor/github.com/google/cel-go/interpreter/planner.go index 95fd34551c..396a9803fc 100644 --- a/vendor/github.com/google/cel-go/interpreter/planner.go +++ b/vendor/github.com/google/cel-go/interpreter/planner.go @@ -281,6 +281,10 @@ func (p *planBuilder) planCall(expr ast.Expr) (InterpretableV2, error) { if fnDef == nil { fnDef, _ = p.disp.FindOverload(fnName) } + // Async overloads are planned into an evalAsyncFunc regardless of arity. + if fnDef != nil && fnDef.Async != nil { + return p.planCallAsync(expr, fnName, oName, fnDef, args) + } switch argCount { case 0: return p.planCallZero(expr, fnName, oName, fnDef) @@ -303,6 +307,24 @@ func (p *planBuilder) planCall(expr ast.Expr) (InterpretableV2, error) { } } +// planCallAsync generates an asynchronous callable Interpretable. +func (p *planBuilder) planCallAsync(expr ast.Expr, + function string, + overload string, + impl *functions.Overload, + args []InterpretableV2) (InterpretableV2, error) { + if impl == nil || impl.Async == nil { + return nil, fmt.Errorf("no such overload: %s()", function) + } + return &evalAsyncFunc{ + id: expr.ID(), + function: function, + overload: overload, + args: args, + impl: impl.Async, + }, nil +} + // planCallZero generates a zero-arity callable Interpretable. func (p *planBuilder) planCallZero(expr ast.Expr, function string, diff --git a/vendor/github.com/google/cel-go/interpreter/runtimecost.go b/vendor/github.com/google/cel-go/interpreter/runtimecost.go index 68e4310106..81e4ef63c4 100644 --- a/vendor/github.com/google/cel-go/interpreter/runtimecost.go +++ b/vendor/github.com/google/cel-go/interpreter/runtimecost.go @@ -70,6 +70,9 @@ type costTrackerFactory struct { // InitState produces a CostTracker and bundles it into an Activation in a way which is not visible // to expression evaluation. func (ct *costTrackerFactory) InitState(frame *ExecutionFrame) (any, error) { + if frame.ctx != nil && frame.ctx.costs != nil { + return frame.ctx.costs, nil + } tracker, err := ct.factory() if err != nil { return nil, err @@ -257,7 +260,7 @@ func (c *CostTracker) costCall(call InterpretableCall, args []ref.Val, result re if tracker, found := c.overloadTrackers[call.OverloadID()]; found { callCost := tracker(args, result) if callCost != nil { - cost += *callCost + cost = safeAdd(cost, *callCost) return cost } } @@ -265,7 +268,7 @@ func (c *CostTracker) costCall(call InterpretableCall, args []ref.Val, result re if c.Estimator != nil { callCost := c.Estimator.CallCost(call.Function(), call.OverloadID(), args, result) if callCost != nil { - cost += *callCost + cost = safeAdd(cost, *callCost) return cost } } @@ -274,13 +277,13 @@ func (c *CostTracker) costCall(call InterpretableCall, args []ref.Val, result re switch call.OverloadID() { // O(n) functions case overloads.StartsWithString, overloads.EndsWithString: - cost += uint64(math.Ceil(float64(actualSize(args[1])) * common.StringTraversalCostFactor)) + cost = safeAdd(cost, uint64(math.Ceil(float64(actualSize(args[1]))*common.StringTraversalCostFactor))) case overloads.StringToBytes, overloads.BytesToString, overloads.ExtQuoteString, overloads.ExtFormatString: - cost += uint64(math.Ceil(float64(actualSize(args[0])) * common.StringTraversalCostFactor)) + cost = safeAdd(cost, uint64(math.Ceil(float64(actualSize(args[0]))*common.StringTraversalCostFactor))) case overloads.InList: // If a list is composed entirely of constant values this is O(1), but we don't account for that here. // We just assume all list containment checks are O(n). - cost += actualSize(args[1]) + cost = safeAdd(cost, actualSize(args[1])) // O(min(m, n)) functions case overloads.LessString, overloads.GreaterString, overloads.LessEqualsString, overloads.GreaterEqualsString, overloads.LessBytes, overloads.GreaterBytes, overloads.LessEqualsBytes, overloads.GreaterEqualsBytes, @@ -290,15 +293,12 @@ func (c *CostTracker) costCall(call InterpretableCall, args []ref.Val, result re // of 1. lhsSize := actualSize(args[0]) rhsSize := actualSize(args[1]) - minSize := lhsSize - if rhsSize < minSize { - minSize = rhsSize - } - cost += uint64(math.Ceil(float64(minSize) * common.StringTraversalCostFactor)) + minSize := min(rhsSize, lhsSize) + cost = safeAdd(cost, uint64(math.Ceil(float64(minSize)*common.StringTraversalCostFactor))) // O(m+n) functions case overloads.AddString, overloads.AddBytes: // In the worst case scenario, we would need to reallocate a new backing store and copy both operands over. - cost += uint64(math.Ceil(float64(actualSize(args[0])+actualSize(args[1])) * common.StringTraversalCostFactor)) + cost = safeAdd(cost, uint64(math.Ceil(float64(actualSize(args[0])+actualSize(args[1]))*common.StringTraversalCostFactor))) // O(nm) functions case overloads.Matches, overloads.MatchesString: // https://swtch.com/~rsc/regexp/regexp1.html applies to RE2 implementation supported by CEL @@ -311,11 +311,11 @@ func (c *CostTracker) costCall(call InterpretableCall, args []ref.Val, result re // For now, we're making a guess that each expression in a regex is typically at least 4 chars // in length. regexCost := uint64(math.Ceil(float64(actualSize(args[1])) * common.RegexStringLengthCostFactor)) - cost += strCost * regexCost + cost = safeAdd(cost, strCost*regexCost) case overloads.ContainsString: strCost := uint64(math.Ceil(float64(actualSize(args[0])) * common.StringTraversalCostFactor)) substrCost := uint64(math.Ceil(float64(actualSize(args[1])) * common.StringTraversalCostFactor)) - cost += strCost * substrCost + cost = safeAdd(cost, strCost*substrCost) default: // The following operations are assumed to have O(1) complexity. @@ -325,7 +325,7 @@ func (c *CostTracker) costCall(call InterpretableCall, args []ref.Val, result re // - Computing the size of strings, byte sequences, lists and maps. // - Logical operations and all operators on fixed width scalars (comparisons, equality) // - Any functions that don't have a declared cost either here or in provided ActualCostEstimator. - cost++ + cost = safeAdd(cost, 1) } return cost @@ -396,3 +396,21 @@ argloop: } return result, true } + +func safeAdd(x, y uint64, rest ...uint64) uint64 { + if y > 0 && x > math.MaxUint64-y { + return math.MaxUint64 + } + next := x + y + if len(rest) == 0 { + return next + } + return safeAdd(next, rest[0], rest[1:]...) +} + +func safeMul(x, y uint64) uint64 { + if y != 0 && x > math.MaxUint64/y { + return math.MaxUint64 + } + return x * y +} diff --git a/vendor/github.com/google/cel-go/parser/helper.go b/vendor/github.com/google/cel-go/parser/helper.go index f960be20ed..84bef80d5f 100644 --- a/vendor/github.com/google/cel-go/parser/helper.go +++ b/vendor/github.com/google/cel-go/parser/helper.go @@ -45,6 +45,10 @@ func (p *parserHelper) getSourceInfo() *ast.SourceInfo { return p.sourceInfo } +func (p *parserHelper) expressionCount() int64 { + return p.nextID - 1 +} + func (p *parserHelper) newLiteral(ctx any, value ref.Val) ast.Expr { return p.exprFactory.NewLiteral(p.newID(ctx), value) } diff --git a/vendor/github.com/google/cel-go/parser/options.go b/vendor/github.com/google/cel-go/parser/options.go index 4eb30f83e0..281021f122 100644 --- a/vendor/github.com/google/cel-go/parser/options.go +++ b/vendor/github.com/google/cel-go/parser/options.go @@ -22,6 +22,7 @@ type options struct { errorRecoveryTokenLookaheadLimit int errorRecoveryLimit int expressionSizeCodePointLimit int + maxExpressionNodeCount int macros map[string]Macro populateMacroCalls bool enableOptionalSyntax bool @@ -97,6 +98,18 @@ func ExpressionSizeCodePointLimit(expressionSizeCodePointLimit int) Option { } } +// MaxExpressionNodeCount limits the maximum number of expression nodes that may be emitted by the parser, +// including nodes created by macro expansion. +func MaxExpressionNodeCount(limit int) Option { + return func(opts *options) error { + if limit < -1 { + return fmt.Errorf("max expression node count must be greater than or equal to -1: %d", limit) + } + opts.maxExpressionNodeCount = limit + return nil + } +} + // Macros adds the given macros to the parser. func Macros(macros ...Macro) Option { return func(opts *options) error { diff --git a/vendor/github.com/google/cel-go/parser/parser.go b/vendor/github.com/google/cel-go/parser/parser.go index d1567b5ff0..338233543d 100644 --- a/vendor/github.com/google/cel-go/parser/parser.go +++ b/vendor/github.com/google/cel-go/parser/parser.go @@ -72,6 +72,12 @@ func NewParser(opts ...Option) (*Parser, error) { if p.expressionSizeCodePointLimit == -1 { p.expressionSizeCodePointLimit = int((^uint(0)) >> 1) } + if p.maxExpressionNodeCount == 0 { + p.maxExpressionNodeCount = 100_000 + } + if p.maxExpressionNodeCount == -1 { + p.maxExpressionNodeCount = int((^uint(0)) >> 1) + } // Bool is false by default, so populateMacroCalls will be false by default return p, nil } @@ -102,6 +108,7 @@ func (p *Parser) Parse(source common.Source) (*ast.AST, *common.Errors) { helper: newParserHelper(source, fac), macros: p.macros, maxRecursionDepth: p.maxRecursionDepth, + maxExpressionNodeCount: p.maxExpressionNodeCount, errorReportingLimit: p.errorReportingLimit, errorRecoveryLimit: p.errorRecoveryLimit, errorRecoveryLookaheadTokenLimit: p.errorRecoveryTokenLookaheadLimit, @@ -319,6 +326,7 @@ type parser struct { recursionDepth int errorReports int maxRecursionDepth int + maxExpressionNodeCount int errorReportingLimit int errorRecoveryLimit int errorRecoveryLookaheadTokenLimit int @@ -964,11 +972,21 @@ func (p *parser) expandMacro(exprID int64, function string, target ast.Expr, arg return nil, false } } + if int(p.helper.expressionCount()) > p.maxExpressionNodeCount { + loc := p.helper.getLocation(exprID) + p.helper.deleteID(exprID) + return p.reportError(loc, "expression count exceeds limit of %d while expanding macro '%s'", p.maxExpressionNodeCount, function), true + } eh := exprHelperPool.Get().(*exprHelper) defer exprHelperPool.Put(eh) eh.parserHelper = p.helper eh.id = exprID expr, err := macro.Expander()(eh, target, args) + if int(p.helper.expressionCount()) > p.maxExpressionNodeCount { + loc := p.helper.getLocation(exprID) + p.helper.deleteID(exprID) + return p.reportError(loc, "expression count exceeds limit of %d while expanding macro '%s'", p.maxExpressionNodeCount, function), true + } // An error indicates that the macro was matched, but the arguments were not well-formed. if err != nil { loc := err.Location diff --git a/vendor/github.com/klauspost/compress/.gitignore b/vendor/github.com/klauspost/compress/.gitignore index d31b378152..fb06aafe83 100644 --- a/vendor/github.com/klauspost/compress/.gitignore +++ b/vendor/github.com/klauspost/compress/.gitignore @@ -30,3 +30,6 @@ perf.data.old # gdb history .gdb_history + +# Silesia corpus, fetched by testdata/fetch_silesia.sh +**/testdata/silesia.tar* diff --git a/vendor/github.com/klauspost/compress/AGENTS.md b/vendor/github.com/klauspost/compress/AGENTS.md new file mode 100644 index 0000000000..61d24b585a --- /dev/null +++ b/vendor/github.com/klauspost/compress/AGENTS.md @@ -0,0 +1,104 @@ +# AGENTS.md + +Guidance for people and coding agents changing this repository. It records +conventions and traps learned while working on the decoders and encoders; the +README describes the packages themselves. + +## Checks before sending a change + +- `gofmt`, `go vet ./...` and `go fix -diff ./...` (which should report + nothing). Code written for specific platforms must be vetted for them too: + run `go vet` with `GOOS`/`GOARCH` set to each platform it targets. `go vet` + caches results per package and does not notice edits to files excluded by + build tags; use a fresh `GOCACHE` to confirm a stale-looking error. +- `go test ./...` with and without `-tags=noasm` (and `nounsafe` if you + touched `unsafe` code), on every architecture whose assembly changed. +- Decoder changes: run the fuzzers CI runs (see `.github/workflows/go.yml`), + also with `-tags=noasm`, `-tags=nounsafe` and `-asan`, for longer than CI + does, and for zstd both `FuzzDecodeAll` and the `NoBMI2` variants. +- Raising the Go version in the root `go.mod` breaks the nested modules + (`*/_generate`, `s2/cmd/_s2sx`) until they are updated too. In a `go` + directive, `1.25` sorts before `1.25.0`, so a dependency that needs + `1.25.0` forces the full form. + +## Tests + +- Put a new test in the existing test file for the code it exercises + (`decoder_test.go` for Reader/DecodeAll behaviour, `seqdec_test.go` for + sequence execution, and so on), and reuse its helpers. Use table tests for + three or more similar cases. +- Extend the existing fuzzers (`func Fuzz…`) rather than adding parallel + harnesses; if a new harness supersedes an old one, remove the old one in + the same change. +- Prove which path a test or benchmark exercises. A benchmark once ran the + pure-Go sequence decoder instead of the assembly because of how its buffers + were set up. A `panic` planted in the path is a quick check; `println` + output is easy to miss. +- `sync.Pool` drops about a quarter of `Put`s under `-race` by design; never + assume `Get` returns the last `Put`. +- Don't add tests whose only purpose is to catch someone deliberately undoing + a performance pin (an alignment, say); a comment explaining it is enough. + +## Performance claims + +- Use real data. The maintainer's corpora are at + https://klauspost.com/files/compress/ (logs, JSON, CSV, serialized data, + tar files); put `.zst` files in `zstd/testdata/benchmark-custom/` and run + `BenchmarkDecoderWithCustomFiles`. Silesia, enwik and generated data are + fine for correctness but are not accepted as evidence for a speed-up. +- When a result depends on how the data was compressed, report the levels + separately (for example `SpeedDefault` and `SpeedBestCompression`). +- Anchor `-bench` patterns at every level with `$`: `-bench 'BenchmarkFoo$'` + also runs `BenchmarkFooBar` otherwise, which has produced fake gains and + regressions. +- Code placement alone moves results by about ±2%. For an A/B, insert + `PCALIGN $64` before every `TEXT` in the `.s` files of *both* builds + (measurement only, not committed). +- Build both variants as test binaries up front, then run them in turns: one + short `-count 1` run of each, repeated for ten or more rounds, swapping + which goes first every round (AB, BA, AB, …) so neither build always gets + the warmer or colder slot. Never run all of A and then all of B. Clock + speed, temperature, cache and page-cache state, and background load drift + over a session; alternating spreads that drift over both builds instead of + turning it into a difference between them. Pin to one core, use an + otherwise idle machine, and compare the pooled results with `benchstat`. +- Report the number of regressed cases next to the geomean; a small win with + no regressions is a different result from a larger one with some. +- No CPU-model-specific code paths or thresholds. A gate for arm64 must be + measured on several Neoverse generations (N1, V1, V2, V3), not one core. + +## Pull requests + +- One commit per independent change, with fixups squashed in. Number the + changes in the description as "(1) … (sha)" and name the test file for + each test. +- Mention each `#NNN` once in prose; refer back in words. +- Don't open many PRs against the same area at once; reviewer time is the + scarce resource. +- Keep Go comments short; generator and assembly comments can explain in + detail. +- Keep private or company-internal references (internal service names, + private links, chat or agent-session URLs) out of code, commit messages and + PR text. + +## Assembly is generated + +- zstd, huff0 and s2 assembly is generated with [avo](https://github.com/mmcloughlin/avo) + from `zstd/_generate`, `huff0/_generate` and `s2/_generate`. Never edit the + `.s` files by hand: change the generator, run `go generate -v -x` in the + `_generate` directory, and commit the regenerated output. CI's `generate` job + fails if the committed files differ from the generator's output. +- The arm64 files are lowered from the same amd64 program by the + `honeycombio/avo` fork that the `_generate/go.mod` files `replace` avo with. + A change to the generator changes both architectures; build and test both. +- When moving the avo pin, regenerate and check the output is byte-identical + unless a change is intended, so unrelated printer changes don't slip into a + review. +- Never put a label directly on a `PCALIGN` (emit the `PCALIGN` before the + label). A jump to it makes the amd64 assembler jump to the wrong place + (Go ≤ 1.25, golang/go#74648) or loop forever when it has to widen a branch + (Go ≥ 1.26, golang/go#81792). Current versions of the avo fork reject it. +- Build tags: `noasm` selects the pure-Go code and `nounsafe` the code without + `unsafe`. Every assembly or `unsafe` path needs a portable fallback, and CI + runs the default, `noasm`, `nounsafe` and `nounsafe,noasm` builds. The + library doesn't use cgo. diff --git a/vendor/github.com/klauspost/compress/README.md b/vendor/github.com/klauspost/compress/README.md index bf31b905f8..2ba61f4c33 100644 --- a/vendor/github.com/klauspost/compress/README.md +++ b/vendor/github.com/klauspost/compress/README.md @@ -29,8 +29,41 @@ Use the links above for more information on each. # changelog +* Sep 25th, 2026 [1.20.1](https://github.com/klauspost/compress/releases/tag/v1.20.1) + * zstd: Apply reset options to reused frame decoders by @pellared in https://github.com/klauspost/compress/pull/1226 + * flate: Report unexpected EOF for truncated Huffman extra bits by @rupayon123 in https://github.com/klauspost/compress/pull/1229 + * flate: Avoid FMA in EstimatedBits for portable rounding by @malt3 in https://github.com/klauspost/compress/pull/1224 + * gzhttp: Preserve caller request headers in Transport by @jakezwang in https://github.com/klauspost/compress/pull/1225 + * gzhttp: Only decompress a request when gzip is the outermost coding by @youdie006 in https://github.com/klauspost/compress/pull/1223 + * zstd/huff0: Optimizations by @lizthegrey in https://github.com/klauspost/compress/pull/1203 https://github.com/klauspost/compress/pull/1205 https://github.com/klauspost/compress/pull/1207 https://github.com/klauspost/compress/pull/1204 https://github.com/klauspost/compress/pull/1208 https://github.com/klauspost/compress/pull/1211 https://github.com/klauspost/compress/pull/1209 https://github.com/klauspost/compress/pull/1210 + * flate: Speed improvements by @alex in https://github.com/klauspost/compress/pull/1220 https://github.com/klauspost/compress/pull/1218 https://github.com/klauspost/compress/pull/1216 https://github.com/klauspost/compress/pull/1215 https://github.com/klauspost/compress/pull/1214 https://github.com/klauspost/compress/pull/1217 + +* Sep 2nd, 2026 [1.20.0](https://github.com/klauspost/compress/releases/tag/v1.20.0) + * lzw: Add lzw reader/writer in https://github.com/klauspost/compress/pull/1189 + * xpress: Add Microsoft XPRESS (MS-XCA) decompression by @MP-GOWTHAM in https://github.com/klauspost/compress/pull/1195 + * s2: arm64 assembly encoders by @lizthegrey in https://github.com/klauspost/compress/pull/1187 + * zstd, huff0: Improved arm64 assembly by @lizthegrey in https://github.com/klauspost/compress/pull/1175 https://github.com/klauspost/compress/pull/1199 https://github.com/klauspost/compress/pull/1197 + * flate: Writer L7-9 with dictionary can emit the dictionary to stream in https://github.com/klauspost/compress/pull/1201 + * gzhttp: Limit jitter hash to jitterBuffer bytes by @VedantMadane in https://github.com/klauspost/compress/pull/1192 + * s2: Clamp the Go EncodeBetter skip to match the assembly by @lizthegrey in https://github.com/klauspost/compress/pull/1190 + * xxhash: Bound input of non-preemptive assembly by @AskAlexSharov in https://github.com/klauspost/compress/pull/1196 + +* Aug 6th, 2026 [1.19.2](https://github.com/klauspost/compress/releases/tag/v1.19.2) + * huff0: Add arm64 assembly for Decompress4X/1X by @lizthegrey in https://github.com/klauspost/compress/pull/1172 + * zstd: Re-enable unsafe decodeSync memory copies by @lizthegrey in https://github.com/klauspost/compress/pull/1171 + * zstd: Fix arm64 asm frame offsets placing locals on the saved LR slot by @lizthegrey in https://github.com/klauspost/compress/pull/1176 + * zstd: Avoid racing MaxDecodedSize write on shared dict litEnc by @zanarellidev in https://github.com/klauspost/compress/pull/1182 + * zstd: Keep BuildDict recent-offsets positive and loadable by @zanarellidev in https://github.com/klauspost/compress/pull/1184 + * zstd: Handle zero-literal BuildDict corpus by @cyphercodes in https://github.com/klauspost/compress/pull/1178 + * zstd: Don't clear the registered dictionary when decoding past the window by @sueun-dev in https://github.com/klauspost/compress/pull/1177 + +* Jul 20th, 2026 [1.19.1](https://github.com/klauspost/compress/releases/tag/v1.19.1) + * zstd: Validate SnappyConverter literal copies in https://github.com/klauspost/compress/pull/1170 + * flate: Use `Peek` instead of `ReadByte` for the `bufio.Reader` decode path by @joechenrh in https://github.com/klauspost/compress/pull/1169 + * zstd: Bump avo pin, regenerate arm64 asm by @lizthegrey in https://github.com/klauspost/compress/pull/1167 + * Jul 1st, 2026 [1.19.0](https://github.com/klauspost/compress/releases/tag/v1.19.0) - * zstd: Add true concurrent stream encodingin https://github.com/klauspost/compress/pull/1136 + * zstd: Add true concurrent stream encoding in https://github.com/klauspost/compress/pull/1136 * zstd: arm64 decoder asm by @lizthegrey in https://github.com/klauspost/compress/pull/1160 * flate: Add inflate checkpoints in https://github.com/klauspost/compress/pull/1154 * zstd: avoid unused BuildDict encoder allocation by @snissn in https://github.com/klauspost/compress/pull/1147 @@ -41,6 +74,22 @@ Use the links above for more information on each. * huff0: Allow building table from oversized histogram in https://github.com/klauspost/compress/pull/1156 * s2sx: Clean symlink targets in https://github.com/klauspost/compress/pull/1163 +
+ See changes to v1.18.x + +* Jun 30th, 2026 [1.18.7](https://github.com/klauspost/compress/releases/tag/v1.18.7) + * s2: Fix `NewDict` out-of-bounds read. Security release without other changes. + +* Apr 30th, 2026 [1.18.6](https://github.com/klauspost/compress/releases/tag/v1.18.6) + * s2: Fix amd64 stack frame corruption in https://github.com/klauspost/compress/pull/1145 + * gzhttp: Canonicalize ETag header by @justinmayhew in https://github.com/klauspost/compress/pull/1139 + * Pool hash tables in Go encode paths to reduce allocations by @huynhanx03 in https://github.com/klauspost/compress/pull/1143 + +* Mar 20th, 2026 [1.18.5](https://github.com/klauspost/compress/releases/tag/v1.18.5) + * zstd: Fix crash when changing encoder dictionary with same ID in https://github.com/klauspost/compress/pull/1135 + * zstd: Default to full zero frames in https://github.com/klauspost/compress/pull/1134 + * flate: Clean up histogram order in https://github.com/klauspost/compress/pull/1133 + * Feb 9th, 2026 [1.18.4](https://github.com/klauspost/compress/releases/tag/v1.18.4) * gzhttp: Add zstandard to server handler wrapper https://github.com/klauspost/compress/pull/1121 * zstd: Add ResetWithOptions to encoder/decoder https://github.com/klauspost/compress/pull/1122 @@ -72,6 +121,8 @@ Use the links above for more information on each. * flate: Fix matchlen L5+L6 https://github.com/klauspost/compress/pull/1049 * flate: Cleanup & reduce casts https://github.com/klauspost/compress/pull/1050 +
+
See changes to v1.17.x diff --git a/vendor/github.com/klauspost/compress/fse/compress.go b/vendor/github.com/klauspost/compress/fse/compress.go index 8c8baa4fc2..2a7cd684ea 100644 --- a/vendor/github.com/klauspost/compress/fse/compress.go +++ b/vendor/github.com/klauspost/compress/fse/compress.go @@ -659,7 +659,8 @@ func (s *Scratch) validateNorm() (err error) { if v >= 0 { total += int(v) } else { - total -= int(v) + // -1 takes one cell. Adding -v would let a wrapped -32768 pass. + total++ } } defer func() { diff --git a/vendor/github.com/klauspost/compress/fse/decompress.go b/vendor/github.com/klauspost/compress/fse/decompress.go index 0c7dd4ffef..85b55db579 100644 --- a/vendor/github.com/klauspost/compress/fse/decompress.go +++ b/vendor/github.com/klauspost/compress/fse/decompress.go @@ -3,6 +3,7 @@ package fse import ( "errors" "fmt" + "math" ) const ( @@ -123,6 +124,11 @@ func (s *Scratch) readNCount() error { remaining -= count gotTotal += count } + if count > math.MaxInt16 { + // Only one symbol filling a tableLog 15 table, which cannot be decoded. + // Truncated, it would leave the decoding table unwritten. + return fmt.Errorf("corruption detected (count %d > %d)", count, math.MaxInt16) + } s.norm[charnum&0xff] = int16(count) charnum++ previous0 = count == 0 diff --git a/vendor/github.com/klauspost/compress/huff0/bitwriter.go b/vendor/github.com/klauspost/compress/huff0/bitwriter.go index 41db94cded..c48e7eade0 100644 --- a/vendor/github.com/klauspost/compress/huff0/bitwriter.go +++ b/vendor/github.com/klauspost/compress/huff0/bitwriter.go @@ -5,6 +5,50 @@ package huff0 +import ( + "github.com/klauspost/compress/internal/le" + "github.com/klauspost/compress/internal/regmask" +) + +// bitState is a bit writer that stays in registers when passed and +// returned by value. It writes into a buffer owned by the caller. +type bitState struct { + c uint64 + nb uint + pos int +} + +// flush writes the whole bytes with one 8-byte store at pos, leaving +// at most 7 bits. buf must have 8 bytes of room at pos. +func (s bitState) flush(buf []byte) bitState { + le.Store64(buf, s.pos, s.c) + s.pos += int(s.nb >> 3) + s.c >>= (s.nb &^ 7) & regmask.Shift64ByUint + s.nb &= 7 + return s +} + +// add adds n bits from v, which must have no bits set above them. +// There must be room for them. +func (s bitState) add(v uint64, n uint) bitState { + s.c |= v << (s.nb & regmask.Shift64ByUint) + s.nb += n + return s +} + +// fourSymbols returns the codes for a, b, c and d packed in that order +// from the LSB, and their total length. +func fourSymbols(a, b, c, d cTableEntry) (uint64, uint) { + bitsA := uint(a.nBits) + bitsB := bitsA + uint(b.nBits) + bitsC := bitsB + uint(c.nBits) + v := uint64(a.val) | + uint64(b.val)<<(bitsA®mask.Shift64ByUint) | + uint64(c.val)<<(bitsB®mask.Shift64ByUint) | + uint64(d.val)<<(bitsC®mask.Shift64ByUint) + return v, bitsC + uint(d.nBits) +} + // bitWriter will write bits. // First bit will be LSB of the first byte of output. type bitWriter struct { @@ -33,55 +77,6 @@ func (b *bitWriter) encSymbol(ct cTable, symbol byte) { b.nBits += enc.nBits } -// encTwoSymbols will add up to 32 bits. value may not contain more set bits than indicated. -// It will not check if there is space for them, so the caller must ensure that it has flushed recently. -func (b *bitWriter) encTwoSymbols(ct cTable, av, bv byte) { - encA := ct[av] - encB := ct[bv] - sh := b.nBits & 63 - combined := uint64(encA.val) | (uint64(encB.val) << (encA.nBits & 63)) - b.bitContainer |= combined << sh - if false { - if encA.nBits == 0 { - panic("nbitsA 0") - } - if encB.nBits == 0 { - panic("nbitsB 0") - } - } - b.nBits += encA.nBits + encB.nBits -} - -// encFourSymbols adds up to 32 bits from four symbols. -// It will not check if there is space for them, -// so the caller must ensure that b has been flushed recently. -func (b *bitWriter) encFourSymbols(encA, encB, encC, encD cTableEntry) { - bitsA := encA.nBits - bitsB := bitsA + encB.nBits - bitsC := bitsB + encC.nBits - bitsD := bitsC + encD.nBits - combined := uint64(encA.val) | - (uint64(encB.val) << (bitsA & 63)) | - (uint64(encC.val) << (bitsB & 63)) | - (uint64(encD.val) << (bitsC & 63)) - b.bitContainer |= combined << (b.nBits & 63) - b.nBits += bitsD -} - -// flush32 will flush out, so there are at least 32 bits available for writing. -func (b *bitWriter) flush32() { - if b.nBits < 32 { - return - } - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24)) - b.nBits -= 32 - b.bitContainer >>= 32 -} - // flushAlign will flush remaining full bytes and align to next byte boundary. func (b *bitWriter) flushAlign() { nbBytes := (b.nBits + 7) >> 3 diff --git a/vendor/github.com/klauspost/compress/huff0/compress.go b/vendor/github.com/klauspost/compress/huff0/compress.go index a97cf1b5d3..1406b766c4 100644 --- a/vendor/github.com/klauspost/compress/huff0/compress.go +++ b/vendor/github.com/klauspost/compress/huff0/compress.go @@ -4,6 +4,7 @@ import ( "fmt" "math" "runtime" + "slices" "sync" ) @@ -243,23 +244,27 @@ func (s *Scratch) compress1xDo(dst, src []byte) []byte { bw.encSymbol(cTable, src[n+i-1]) } n -= 4 - if s.actualTableLog <= 8 { - for ; n >= 0; n -= 4 { - tmp := src[n : n+4] - // tmp should be len 4 - bw.flush32() - bw.encFourSymbols(cTable[tmp[3]], cTable[tmp[2]], cTable[tmp[1]], cTable[tmp[0]]) + + // flush leaves at most 7 bits, so four symbols (at most 4*tableLogMax + // bits) always fit. Each chunk checks room for bytesPer4 per four + // symbols plus the 8-byte store. + const bytesPer4 = (7 + 4*tableLogMax) / 8 + w := bitState{c: bw.bitContainer, nb: uint(bw.nBits), pos: len(bw.out)} + buf := bw.out[:cap(bw.out)] + for n >= 0 { + k := (len(buf) - w.pos - 8) / bytesPer4 + if k <= 0 { + buf = slices.Grow(buf[:w.pos], (n/4+1)*bytesPer4+8) + buf = buf[:cap(buf)] + continue } - } else { - for ; n >= 0; n -= 4 { + for stop := max(n-4*k, -4); n > stop; n -= 4 { + w = w.flush(buf) tmp := src[n : n+4] - // tmp should be len 4 - bw.flush32() - bw.encTwoSymbols(cTable, tmp[3], tmp[2]) - bw.flush32() - bw.encTwoSymbols(cTable, tmp[1], tmp[0]) + w = w.add(fourSymbols(cTable[tmp[3]], cTable[tmp[2]], cTable[tmp[1]], cTable[tmp[0]])) } } + bw.bitContainer, bw.nBits, bw.out = w.c, uint8(w.nb), buf[:w.pos] bw.close() return bw.out } diff --git a/vendor/github.com/klauspost/compress/huff0/decompress.go b/vendor/github.com/klauspost/compress/huff0/decompress.go index 7d0efa8818..9358784417 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress.go @@ -54,6 +54,10 @@ func ReadTable(in []byte, s *Scratch) (s2 *Scratch, remain []byte, err error) { if len(in) < int(iSize) { return s, nil, fmt.Errorf("input too small for table, want %d bytes, have %d", iSize, len(in)) } + // The low nibble is the weights' FSE tableLog - 5, which the format limits to 6. + if in[0]&15+5 > 6 { + return s, nil, errors.New("corrupt input: weights tableLog too big") + } // FSE compressed weights s.fse.DecompressLimit = 255 hw := s.huffWeight[:] @@ -70,17 +74,32 @@ func ReadTable(in []byte, s *Scratch) (s2 *Scratch, remain []byte, err error) { in = in[iSize:] } - // collect weight stats + // collect weight stats. Weights repeat, so four histograms keep each + // increment from waiting on the previous store to the same counter. + var hist [4][16]uint32 + var seen uint8 + w := s.huffWeight[:s.symbolLen] + for ; len(w) >= 4; w = w[4:] { + hist[0][w[0]&15]++ + hist[1][w[1]&15]++ + hist[2][w[2]&15]++ + hist[3][w[3]&15]++ + seen |= w[0] | w[1] | w[2] | w[3] + } + for _, v := range w { + hist[0][v&15]++ + seen |= v + } var rankStats [16]uint32 weightTotal := uint32(0) - for _, v := range s.huffWeight[:s.symbolLen] { - if v > tableLogMax { - return s, nil, errors.New("corrupt input: weight too large") - } - v2 := v & 15 - rankStats[v2]++ - // (1 << (v2-1)) is slower since the compiler cannot prove that v2 isn't 0. - weightTotal += (1 << v2) >> 1 + for i := range rankStats { + rankStats[i] = hist[0][i] + hist[1][i] + hist[2][i] + hist[3][i] + } + for i := 1; i < len(rankStats); i++ { + weightTotal += rankStats[i] << (i - 1) + } + if seen > 15 || rankStats[tableLogMax+1]|rankStats[tableLogMax+2]|rankStats[tableLogMax+3]|rankStats[tableLogMax+4] != 0 { + return s, nil, errors.New("corrupt input: weight too large") } if weightTotal == 0 { return s, nil, errors.New("corrupt input: weights zero") @@ -158,9 +177,17 @@ func ReadTable(in []byte, s *Scratch) (s2 *Scratch, remain []byte, err error) { nBits: uint8(d.entry), } + // length is a power of two; runs of 4 or more are filled 4 at a time. single := s.dt.single[*rank : *rank+length] - for i := range single { - single[i] = d + if length >= 4 { + for i := 0; i < len(single); i += 4 { + s4 := single[i : i+4 : i+4] + s4[0], s4[1], s4[2], s4[3] = d, d, d, d + } + } else { + for i := range single { + single[i] = d + } } *rank += length } diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go index e651f30ecb..169cf10458 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go @@ -1,4 +1,4 @@ -//go:build amd64 && !appengine && !noasm && gc +//go:build amd64 && !noasm && gc // amd64 stubs and dispatch for the asm loops used by decompress_asm.go. package huff0 diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s index f072c18f04..a6d5f4b389 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s +++ b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s @@ -1,6 +1,6 @@ // Code generated by command: go run gen.go -out ../decompress.s -arch amd64,arm64 -pkg=huff0. DO NOT EDIT. -//go:build !appengine && !noasm && gc +//go:build !noasm && gc // func decompress4x_main_loop_amd64(ctx *decompress4xContext) // Requires: BMI, CMOV @@ -67,6 +67,7 @@ outer_loop: IMUL3Q $0x05, CX, CX ADDQ SI, CX MOVQ CX, 96(AX) + PCALIGN $0x40 inner_loop: // stream 0, symbol 0 @@ -388,6 +389,7 @@ outer_loop: IMUL3Q $0x07, CX, CX ADDQ SI, CX MOVQ CX, 96(AX) + PCALIGN $0x40 inner_loop: // stream 0, symbol 0 @@ -781,6 +783,7 @@ outer_loop: IMUL3Q $0x0e, CX, CX ADDQ SI, CX MOVQ CX, 96(AX) + PCALIGN $0x40 inner_loop: // stream 0, symbol 0 @@ -1426,6 +1429,7 @@ outer_loop: IMUL3Q $0x05, R13, R13 ADDQ BX, R13 MOVQ R13, 96(AX) + PCALIGN $0x40 inner_loop: // stream 0, symbol 0 @@ -1707,6 +1711,7 @@ outer_loop: IMUL3Q $0x07, R13, R13 ADDQ BX, R13 MOVQ R13, 96(AX) + PCALIGN $0x40 inner_loop: // stream 0, symbol 0 @@ -2044,6 +2049,7 @@ outer_loop: IMUL3Q $0x0e, R13, R13 ADDQ BX, R13 MOVQ R13, 96(AX) + PCALIGN $0x40 inner_loop: // stream 0, symbol 0 @@ -2548,6 +2554,7 @@ outer_loop: JZ done IMUL3Q $0x05, CX, R12 ADDQ SI, R12 + PCALIGN $0x40 inner_loop: // symbol 0 @@ -2666,6 +2673,7 @@ outer_loop: JZ done IMUL3Q $0x07, CX, R12 ADDQ SI, R12 + PCALIGN $0x40 inner_loop: // symbol 0 @@ -2804,6 +2812,7 @@ outer_loop: JZ done IMUL3Q $0x0e, CX, R12 ADDQ SI, R12 + PCALIGN $0x40 inner_loop: // symbol 0 @@ -3012,6 +3021,7 @@ outer_loop: JZ done IMUL3Q $0x05, R11, R11 ADDQ BX, R11 + PCALIGN $0x40 inner_loop: // symbol 0 @@ -3119,6 +3129,7 @@ outer_loop: JZ done IMUL3Q $0x07, R11, R11 ADDQ BX, R11 + PCALIGN $0x40 inner_loop: // symbol 0 @@ -3242,6 +3253,7 @@ outer_loop: JZ done IMUL3Q $0x0e, R11, R11 ADDQ BX, R11 + PCALIGN $0x40 inner_loop: // symbol 0 diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_arm64.go b/vendor/github.com/klauspost/compress/huff0/decompress_arm64.go index d1988ad54d..d6bdef6a71 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_arm64.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress_arm64.go @@ -1,4 +1,4 @@ -//go:build arm64 && !appengine && !noasm && gc +//go:build arm64 && !noasm && gc // arm64 stubs and dispatch for the asm loops used by decompress_asm.go. // The asm (decompress_arm64.s) is generated by the avo arm64 lowering diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_arm64.s b/vendor/github.com/klauspost/compress/huff0/decompress_arm64.s index 971b8eb8bd..2db7345f25 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_arm64.s +++ b/vendor/github.com/klauspost/compress/huff0/decompress_arm64.s @@ -1,7 +1,7 @@ // Code generated by command: go run gen.go -out ../decompress.s -arch amd64,arm64 -pkg=huff0. DO NOT EDIT. // EXPERIMENTAL arm64 output lowered from an amd64 avo program. -//go:build arm64 && (!appengine && !noasm && gc) +//go:build arm64 && (!noasm && gc) // func decompress4x_main_loop_amd64(ctx *decompress4xContext) // Requires: BMI, CMOV @@ -51,36 +51,37 @@ outer_loop: // Iterations allowed by the input: a reload backs a pointer up by at most 7 bytes // (whatever nSyms is), so every read stays inside the block while the lowest // pointer stays above ilowest. - MOVD 64(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - MOVD 72(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - MOVD 80(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - MOVD 88(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - TST R1, R1 - BEQ done - MOVD $5, R16 - MUL R16, R1, R1 - ADD R5, R1, R1 - MOVD R1, 96(R0) + MOVD 64(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + MOVD 72(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + MOVD 80(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + MOVD 88(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + TST R1, R1 + BEQ done + MOVD $5, R16 + MUL R16, R1, R1 + ADD R5, R1, R1 + MOVD R1, 96(R0) + PCALIGN $0x40 inner_loop: // stream 0, symbol 0 @@ -355,36 +356,37 @@ outer_loop: // Iterations allowed by the input: a reload backs a pointer up by at most 7 bytes // (whatever nSyms is), so every read stays inside the block while the lowest // pointer stays above ilowest. - MOVD 64(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - MOVD 72(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - MOVD 80(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - MOVD 88(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - TST R1, R1 - BEQ done - MOVD $7, R16 - MUL R16, R1, R1 - ADD R5, R1, R1 - MOVD R1, 96(R0) + MOVD 64(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + MOVD 72(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + MOVD 80(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + MOVD 88(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + TST R1, R1 + BEQ done + MOVD $7, R16 + MUL R16, R1, R1 + ADD R5, R1, R1 + MOVD R1, 96(R0) + PCALIGN $0x40 inner_loop: // stream 0, symbol 0 @@ -715,36 +717,37 @@ outer_loop: // Iterations allowed by the input: a reload backs a pointer up by at most 7 bytes // (whatever nSyms is), so every read stays inside the block while the lowest // pointer stays above ilowest. - MOVD 64(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - MOVD 72(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - MOVD 80(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - MOVD 88(R0), R13 - MOVD 56(R0), R16 - SUB R16, R13, R13 - LSR $0x03, R13, R13 - CMP R1, R13 - CSEL LO, R13, R1, R1 - TST R1, R1 - BEQ done - MOVD $14, R16 - MUL R16, R1, R1 - ADD R5, R1, R1 - MOVD R1, 96(R0) + MOVD 64(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + MOVD 72(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + MOVD 80(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + MOVD 88(R0), R13 + MOVD 56(R0), R16 + SUB R16, R13, R13 + LSR $0x03, R13, R13 + CMP R1, R13 + CSEL LO, R13, R1, R1 + TST R1, R1 + BEQ done + MOVD $14, R16 + MUL R16, R1, R1 + ADD R5, R1, R1 + MOVD R1, 96(R0) + PCALIGN $0x40 inner_loop: // stream 0, symbol 0 @@ -1256,16 +1259,17 @@ outer_loop: // Iterations allowed by the input: a refill reads the 8 bytes below the window and // moves it down by at most 7, so every read stays inside the stream while ip stays // at least 8 above ilowest. - MOVD R7, R11 - SUB R8, R11, R11 - LSR $0x03, R11, R11 - CMP R1, R11 - CSEL LO, R11, R1, R1 - TST R1, R1 - BEQ done - MOVD $5, R16 - MUL R16, R1, R11 - ADD R5, R11, R11 + MOVD R7, R11 + SUB R8, R11, R11 + LSR $0x03, R11, R11 + CMP R1, R11 + CSEL LO, R11, R1, R1 + TST R1, R1 + BEQ done + MOVD $5, R16 + MUL R16, R1, R11 + ADD R5, R11, R11 + PCALIGN $0x40 inner_loop: // symbol 0 @@ -1367,16 +1371,17 @@ outer_loop: // Iterations allowed by the input: a refill reads the 8 bytes below the window and // moves it down by at most 7, so every read stays inside the stream while ip stays // at least 8 above ilowest. - MOVD R7, R11 - SUB R8, R11, R11 - LSR $0x03, R11, R11 - CMP R1, R11 - CSEL LO, R11, R1, R1 - TST R1, R1 - BEQ done - MOVD $7, R16 - MUL R16, R1, R11 - ADD R5, R11, R11 + MOVD R7, R11 + SUB R8, R11, R11 + LSR $0x03, R11, R11 + CMP R1, R11 + CSEL LO, R11, R1, R1 + TST R1, R1 + BEQ done + MOVD $7, R16 + MUL R16, R1, R11 + ADD R5, R11, R11 + PCALIGN $0x40 inner_loop: // symbol 0 @@ -1494,16 +1499,17 @@ outer_loop: // Iterations allowed by the input: a refill reads the 8 bytes below the window and // moves it down by at most 7, so every read stays inside the stream while ip stays // at least 8 above ilowest. - MOVD R7, R11 - SUB R8, R11, R11 - LSR $0x03, R11, R11 - CMP R1, R11 - CSEL LO, R11, R1, R1 - TST R1, R1 - BEQ done - MOVD $14, R16 - MUL R16, R1, R11 - ADD R5, R11, R11 + MOVD R7, R11 + SUB R8, R11, R11 + LSR $0x03, R11, R11 + CMP R1, R11 + CSEL LO, R11, R1, R1 + TST R1, R1 + BEQ done + MOVD $14, R16 + MUL R16, R1, R11 + ADD R5, R11, R11 + PCALIGN $0x40 inner_loop: // symbol 0 diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_asm.go b/vendor/github.com/klauspost/compress/huff0/decompress_asm.go index 71a80bbd55..0d9672ea75 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_asm.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress_asm.go @@ -1,4 +1,4 @@ -//go:build (amd64 || arm64) && !appengine && !noasm && gc +//go:build (amd64 || arm64) && !noasm && gc // This file contains the specialisation of Decoder.Decompress4X // and Decoder.Decompress1X that use an asm implementation of their main loops. diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_generic.go b/vendor/github.com/klauspost/compress/huff0/decompress_generic.go index e1bca5c686..8db45a1106 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_generic.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress_generic.go @@ -1,4 +1,4 @@ -//go:build (!amd64 && !arm64) || appengine || !gc || noasm +//go:build (!amd64 && !arm64) || !gc || noasm // This file contains a generic implementation of Decoder.Decompress4X. package huff0 diff --git a/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go b/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go index b97f9056f4..3d9e20f1a0 100644 --- a/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go +++ b/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go @@ -1,4 +1,4 @@ -//go:build amd64 && !appengine && !noasm && gc +//go:build amd64 && !noasm && gc package cpuinfo diff --git a/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s b/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s index 4465fbe9e9..f128c10c6f 100644 --- a/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s +++ b/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s @@ -1,6 +1,4 @@ -// +build !appengine -// +build gc -// +build !noasm +//go:build !noasm && gc #include "textflag.h" #include "funcdata.h" diff --git a/vendor/github.com/klauspost/compress/internal/le/unsafe_disabled.go b/vendor/github.com/klauspost/compress/internal/le/unsafe_disabled.go index 4f2a0d8c58..787ec9ef13 100644 --- a/vendor/github.com/klauspost/compress/internal/le/unsafe_disabled.go +++ b/vendor/github.com/klauspost/compress/internal/le/unsafe_disabled.go @@ -1,4 +1,4 @@ -//go:build !(amd64 || arm64 || ppc64le || riscv64) || nounsafe || purego || appengine +//go:build !(amd64 || arm64 || ppc64le || riscv64) || nounsafe || purego package le diff --git a/vendor/github.com/klauspost/compress/internal/le/unsafe_enabled.go b/vendor/github.com/klauspost/compress/internal/le/unsafe_enabled.go index 218a38bc4a..e60be8158e 100644 --- a/vendor/github.com/klauspost/compress/internal/le/unsafe_enabled.go +++ b/vendor/github.com/klauspost/compress/internal/le/unsafe_enabled.go @@ -1,6 +1,6 @@ // We enable 64 bit LE platforms: -//go:build (amd64 || arm64 || ppc64le || riscv64) && !nounsafe && !purego && !appengine +//go:build (amd64 || arm64 || ppc64le || riscv64) && !nounsafe && !purego package le diff --git a/vendor/github.com/klauspost/compress/internal/regmask/regmask.go b/vendor/github.com/klauspost/compress/internal/regmask/regmask.go new file mode 100644 index 0000000000..3da49d1544 --- /dev/null +++ b/vendor/github.com/klauspost/compress/internal/regmask/regmask.go @@ -0,0 +1,50 @@ +//go:build !386 + +// Package regmask provides masks for variable shift counts. +// +// Go defines a shift by more than the width of the shifted value as producing +// zero, so the compiler has to guard every variable shift against that: on +// amd64 with a CMP and an SBB, on arm64 with a CMP and a CSEL, and so on. When +// the count is known to be smaller than the width anyway, masking it with the +// width minus one lets the compiler drop the guard. The mask itself costs +// nothing on the architectures whose shift instructions already use only the +// low bits of the count, which the compiler knows about. +// +// Each constant is named for the width of the value being shifted and the type +// of the shift count, and may only be used where the count is always smaller +// than that width: +// +// x := y >> (n & regmask.Shift64ByUint) // y is 64 bits, n is a uint below 64 +package regmask + +const ( + // ShiftNByUint8 - shifting an N bit value by a uint8 + Shift8ByUint8 = 7 + Shift16ByUint8 = 15 + Shift32ByUint8 = 31 + Shift64ByUint8 = 63 + + // ShiftNByUint16 - shifting an N bit value by a uint16 + Shift8ByUint16 = Shift8ByUint8 + Shift16ByUint16 = Shift16ByUint8 + Shift32ByUint16 = Shift32ByUint8 + Shift64ByUint16 = Shift64ByUint8 + + // ShiftNByUint32 - shifting an N bit value by a uint32 + Shift8ByUint32 = Shift8ByUint8 + Shift16ByUint32 = Shift16ByUint8 + Shift32ByUint32 = Shift32ByUint8 + Shift64ByUint32 = Shift64ByUint8 + + // ShiftNByUint64 - shifting an N bit value by a uint64 + Shift8ByUint64 = Shift8ByUint8 + Shift16ByUint64 = Shift16ByUint8 + Shift32ByUint64 = Shift32ByUint8 + Shift64ByUint64 = Shift64ByUint8 + + // ShiftNByUint - shifting an N bit value by a uint + Shift8ByUint = Shift8ByUint8 + Shift16ByUint = Shift16ByUint8 + Shift32ByUint = Shift32ByUint8 + Shift64ByUint = Shift64ByUint8 +) diff --git a/vendor/github.com/klauspost/compress/internal/regmask/regmask_386.go b/vendor/github.com/klauspost/compress/internal/regmask/regmask_386.go new file mode 100644 index 0000000000..ff15f7c1af --- /dev/null +++ b/vendor/github.com/klauspost/compress/internal/regmask/regmask_386.go @@ -0,0 +1,39 @@ +//go:build 386 + +package regmask + +// A 64 bit shift on 386 is synthesized from 32 bit instructions, and masking its +// count makes the compiler emit more code rather than less, so those masks are +// no-ops here: each is the largest value its count type can hold, which the +// compiler folds away. Shifts of narrower values behave as elsewhere. +const ( + // ShiftNByUint8 - shifting an N bit value by a uint8 + Shift8ByUint8 = 7 + Shift16ByUint8 = 15 + Shift32ByUint8 = 31 + Shift64ByUint8 = 0xff + + // ShiftNByUint16 - shifting an N bit value by a uint16 + Shift8ByUint16 = Shift8ByUint8 + Shift16ByUint16 = Shift16ByUint8 + Shift32ByUint16 = Shift32ByUint8 + Shift64ByUint16 = 0xffff + + // ShiftNByUint32 - shifting an N bit value by a uint32 + Shift8ByUint32 = Shift8ByUint8 + Shift16ByUint32 = Shift16ByUint8 + Shift32ByUint32 = Shift32ByUint8 + Shift64ByUint32 = 0xffffffff + + // ShiftNByUint64 - shifting an N bit value by a uint64 + Shift8ByUint64 = Shift8ByUint8 + Shift16ByUint64 = Shift16ByUint8 + Shift32ByUint64 = Shift32ByUint8 + Shift64ByUint64 = 0xffffffffffffffff + + // ShiftNByUint - shifting an N bit value by a uint + Shift8ByUint = Shift8ByUint8 + Shift16ByUint = Shift16ByUint8 + Shift32ByUint = Shift32ByUint8 + Shift64ByUint = ^uint(0) +) diff --git a/vendor/github.com/klauspost/compress/zstd/bitwriter.go b/vendor/github.com/klauspost/compress/zstd/bitwriter.go index b22b297e62..668ac26108 100644 --- a/vendor/github.com/klauspost/compress/zstd/bitwriter.go +++ b/vendor/github.com/klauspost/compress/zstd/bitwriter.go @@ -5,6 +5,45 @@ package zstd +import ( + "github.com/klauspost/compress/internal/le" + "github.com/klauspost/compress/internal/regmask" +) + +// bitState is a bit writer that stays in registers when passed and +// returned by value. It writes into a buffer owned by the caller. +type bitState struct { + c uint64 + nb uint + pos int +} + +// flush writes the whole bytes with one 8-byte store at pos, leaving +// at most 7 bits. buf must have 8 bytes of room at pos. +func (s bitState) flush(buf []byte) bitState { + le.Store64(buf, s.pos, s.c) + s.pos += int(s.nb >> 3) + s.c >>= (s.nb &^ 7) & regmask.Shift64ByUint + s.nb &= 7 + return s +} + +// add adds n bits from v, which must have no bits set above them. +// There must be room for them. +func (s bitState) add(v uint64, n uint) bitState { + s.c |= v << (s.nb & regmask.Shift64ByUint) + s.nb += n + return s +} + +// addState adds the bits that FSE-encode tt from state, and returns +// the next state from tab. +func (s bitState) addState(state uint16, tab []uint16, tt symbolTransform) (bitState, uint16) { + nbBitsOut := (uint32(state) + tt.deltaNbBits) >> 16 + s = s.add(uint64(state&bitMask16[nbBitsOut&31]), uint(nbBitsOut)) + return s, tab[int32(state>>(nbBitsOut®mask.Shift16ByUint32))+int32(tt.deltaFindState)] +} + // bitWriter will write bits. // First bit will be LSB of the first byte of output. type bitWriter struct { diff --git a/vendor/github.com/klauspost/compress/zstd/blockdec.go b/vendor/github.com/klauspost/compress/zstd/blockdec.go index 89b20d6a84..74fc557019 100644 --- a/vendor/github.com/klauspost/compress/zstd/blockdec.go +++ b/vendor/github.com/klauspost/compress/zstd/blockdec.go @@ -418,6 +418,8 @@ func (b *blockDec) decodeLiterals(in []byte, hist *history) (remain []byte, err if len(literals) != litRegenSize { return in, fmt.Errorf("literal output size mismatch want %d, got %d", litRegenSize, len(literals)) } + // Re-cap to get extra size. + literals = b.literalBuf[:len(literals)] case literalsBlockCompressed: if len(in) < litCompSize { @@ -493,7 +495,20 @@ func (b *blockDec) decodeCompressed(hist *history) error { return nil } before := len(hist.decoders.out) - err = hist.decoders.decodeSync(hist.b[hist.ignoreBuffer:]) + h := hist.b[hist.ignoreBuffer:] + if hist.ext != nil { + h = hist.ext + } + if hist.dict == nil && hist.decoders.useTwoPass() { + // Two passes, as the concurrent decoder does: knowing the offsets + // up front lets executeSimple prefetch match sources. + if err := b.decodeSequences(hist); err != nil { + return err + } + err = hist.decoders.executeSimple(b.sequence, h) + } else { + err = hist.decoders.decodeSync(h) + } if err != nil { return err } @@ -604,16 +619,11 @@ func (b *blockDec) prepareSequences(in []byte, hist *history) (err error) { if seq.fse == nil || seq.fse.preDefined { seq.fse = fseDecoderPool.Get().(*fseDecoder) } - err := seq.fse.readNCount(&br, uint16(maxTableSymbol[i])) + err := seq.fse.readNCount(&br, tableIndex(i)) if err != nil { println("Read table error:", err) return err } - err = seq.fse.transform(symbolTableX[i]) - if err != nil { - println("Transform table error:", err) - return err - } if debugDecoder { println("Read table ok", "symbolLen:", seq.fse.symbolLen) } @@ -673,38 +683,41 @@ func (b *blockDec) decodeSequences(hist *history) error { return err } +// executeSequences executes the block's sequences straight into the history +// ring, as decodeCompressed does, and copies the result to b.dst for output. func (b *blockDec) executeSequences(hist *history) error { - hbytes := hist.b - if len(hbytes) > hist.windowSize { - hbytes = hbytes[len(hbytes)-hist.windowSize:] - } + hist.ensureBlockRing() + start := len(hist.b) hist.decoders.windowSize = hist.windowSize - hist.decoders.out = b.dst[:0] - err := hist.decoders.execute(b.sequence, hbytes) + hist.decoders.out = hist.b + err := hist.decoders.execute(b.sequence, hist.ext) if err != nil { return err } - return b.updateHistory(hist) + return b.updateHistory(hist, start) } -func (b *blockDec) updateHistory(hist *history) error { +// updateHistory copies the block's output, which starts at out[start], to +// b.dst and keeps it as history. +func (b *blockDec) updateHistory(hist *history, start int) error { if len(b.data) > maxCompressedBlockSize { return fmt.Errorf("compressed block size too large (%d)", len(b.data)) } - // Set output and release references. - b.dst = hist.decoders.out + out := hist.decoders.out + b.dst = append(b.dst[:0], out[start:]...) hist.recentOffsets = hist.decoders.prevOffset if b.Last { // if last block we don't care about history. - println("Last block, no history returned") - hist.b = hist.b[:0] - return nil - } else { - hist.append(b.dst) if debugDecoder { - println("Finished block with ", len(b.sequence), "sequences. Added", len(b.dst), "to history, now length", len(hist.b)) + println("Last block, no history returned") } + hist.b = hist.b[:0] + return nil + } + hist.b = out + if debugDecoder { + println("Finished block with ", len(b.sequence), "sequences. Added", len(b.dst), "to history, now length", len(hist.b)) } hist.decoders.out, hist.decoders.literals = nil, nil diff --git a/vendor/github.com/klauspost/compress/zstd/blockenc.go b/vendor/github.com/klauspost/compress/zstd/blockenc.go index 0e33aea442..697e91f081 100644 --- a/vendor/github.com/klauspost/compress/zstd/blockenc.go +++ b/vendor/github.com/klauspost/compress/zstd/blockenc.go @@ -628,38 +628,6 @@ func (b *blockEnc) encode(org []byte, raw, rawAllLits bool) error { return err } - // Choose the best compression mode for each type. - // Will evaluate the new vs predefined and previous. - chooseComp := func(cur, prev, preDef *fseEncoder) (*fseEncoder, seqCompMode) { - // See if predefined/previous is better - hist := cur.count[:cur.symbolLen] - nSize := cur.approxSize(hist) + cur.maxHeaderSize() - predefSize := preDef.approxSize(hist) - prevSize := prev.approxSize(hist) - - // Add a small penalty for new encoders. - // Don't bother with extremely small (<2 byte gains). - nSize = nSize + (nSize+2*8*16)>>4 - switch { - case predefSize <= prevSize && predefSize <= nSize || forcePreDef: - if debugEncoder { - println("Using predefined", predefSize>>3, "<=", nSize>>3) - } - return preDef, compModePredefined - case prevSize <= nSize: - if debugEncoder { - println("Using previous", prevSize>>3, "<=", nSize>>3) - } - return prev, compModeRepeat - default: - if debugEncoder { - println("Using new, predef", predefSize>>3, ". previous:", prevSize>>3, ">", nSize>>3, "header max:", cur.maxHeaderSize()>>3, "bytes") - println("tl:", cur.actualTableLog, "symbolLen:", cur.symbolLen, "norm:", cur.norm[:cur.symbolLen], "hist", cur.count[:cur.symbolLen]) - } - return cur, compModeFSE - } - } - // Write compression mode var mode uint8 if llEnc.useRLE { @@ -670,7 +638,7 @@ func (b *blockEnc) encode(org []byte, raw, rawAllLits bool) error { } } else { var m seqCompMode - llEnc, m = chooseComp(llEnc, b.coders.llPrev, &fsePredefEnc[tableLiteralLengths]) + llEnc, m = b.chooseComp(llEnc, b.coders.llPrev, &fsePredefEnc[tableLiteralLengths]) mode |= uint8(m) << 6 } if ofEnc.useRLE { @@ -681,7 +649,7 @@ func (b *blockEnc) encode(org []byte, raw, rawAllLits bool) error { } } else { var m seqCompMode - ofEnc, m = chooseComp(ofEnc, b.coders.ofPrev, &fsePredefEnc[tableOffsets]) + ofEnc, m = b.chooseComp(ofEnc, b.coders.ofPrev, &fsePredefEnc[tableOffsets]) mode |= uint8(m) << 4 } @@ -693,7 +661,7 @@ func (b *blockEnc) encode(org []byte, raw, rawAllLits bool) error { } } else { var m seqCompMode - mlEnc, m = chooseComp(mlEnc, b.coders.mlPrev, &fsePredefEnc[tableMatchLengths]) + mlEnc, m = b.chooseComp(mlEnc, b.coders.mlPrev, &fsePredefEnc[tableMatchLengths]) mode |= uint8(m) << 2 } b.output = append(b.output, mode) @@ -753,54 +721,57 @@ func (b *blockEnc) encode(org []byte, raw, rawAllLits bool) error { println("Encoded seq", seq, s, "codes:", s.llCode, s.mlCode, s.ofCode, "states:", ll.state, ml.state, of.state, "bits:", llB, mlB, ofB) } seq-- - // Store sequences in reverse... - for seq >= 0 { - s = b.sequences[seq] - - ofB := ofTT[s.ofCode] - wr.flush32() // tablelog max is below 8 for each, so it will fill max 24 bits. - //of.encode(ofB) - nbBitsOut := (uint32(of.state) + ofB.deltaNbBits) >> 16 - dstState := int32(of.state>>(nbBitsOut&15)) + int32(ofB.deltaFindState) - wr.addBits16NC(of.state, uint8(nbBitsOut)) - of.state = of.stateTable[dstState] - - // Accumulate extra bits. - outBits := ofB.outBits & 31 - extraBits := uint64(s.offset & bitMask32[outBits]) - extraBitsN := outBits - - mlB := mlTT[s.mlCode] - //ml.encode(mlB) - nbBitsOut = (uint32(ml.state) + mlB.deltaNbBits) >> 16 - dstState = int32(ml.state>>(nbBitsOut&15)) + int32(mlB.deltaFindState) - wr.addBits16NC(ml.state, uint8(nbBitsOut)) - ml.state = ml.stateTable[dstState] - - outBits = mlB.outBits & 31 - extraBits = extraBits<> 16 - dstState = int32(ll.state>>(nbBitsOut&15)) + int32(llB.deltaFindState) - wr.addBits16NC(ll.state, uint8(nbBitsOut)) - ll.state = ll.stateTable[dstState] - - outBits = llB.outBits & 31 - extraBits = extraBits<= 0 { + n := (len(buf) - w.pos - 16) / seqMaxBytes + if n <= 0 { + buf = slices.Grow(buf[:w.pos], (seq+1)*seqMaxBytes+16) + buf = buf[:cap(buf)] + continue + } + for stop := max(seq-n, -1); seq > stop; seq-- { + s := seqs[seq] + ofB, mlB, llB := ofTT[s.ofCode], mlTT[s.mlCode], llTT[s.llCode] + + // w.nb <= 37 here, and the states add at most 26 bits. + w, ofState = w.addState(ofState, ofTab, ofB) + w, mlState = w.addState(mlState, mlTab, mlB) + w, llState = w.addState(llState, llTab, llB) + + ofBits, mlBits, llBits := ofB.outBits&31, mlB.outBits&31, llB.outBits&31 + extra := uint64(s.offset&bitMask32[ofBits])<<(mlBits+llBits) | + uint64(s.matchLen&bitMask32[mlBits])< 63 { + w = w.flush(buf) + if extraN > 56 { + // Only offsets over 24 bits get here. + low := uint(mlBits + llBits) + w = w.add(extra&(1<>= low + extraN -= low + } + } + w = w.add(extra, extraN).flush(buf) - if debugSequences { - println("Encoded seq", seq, s) + if debugSequences { + println("Encoded seq", seq, s) + } } - - seq-- } + wr.bitContainer, wr.nBits, wr.out = w.c, uint8(w.nb), buf[:w.pos] + of.state, ml.state, ll.state = ofState, mlState, llState ml.flush(mlEnc.actualTableLog) of.flush(ofEnc.actualTableLog) ll.flush(llEnc.actualTableLog) @@ -826,6 +797,54 @@ func (b *blockEnc) encode(org []byte, raw, rawAllLits bool) error { return nil } +// chooseComp chooses the cheapest of the new, predefined and previous table. +func (b *blockEnc) chooseComp(cur, prev, preDef *fseEncoder) (*fseEncoder, seqCompMode) { + hist := cur.count[:cur.symbolLen] + nSize := cur.approxSize(hist) + cur.maxHeaderSize() + predefSize := preDef.approxSize(hist) + prevSize := prev.approxSize(hist) + + // Add a small penalty for new encoders. + // Don't bother with extremely small (<2 byte gains). + nSize = nSize + (nSize+2*8*16)>>4 + // The previous table may come from a dictionary and fit poorly, + // so it is compared against the exact header size, without penalty. + nSizePrev := nSize + if prevSize != math.MaxUint32 { + // Written to spare capacity; the real header goes there later. + if hdr, err := cur.writeCount(b.output[len(b.output):]); err == nil { + nSizePrev = cur.approxSize(hist) + uint32(len(hdr))*8 + } + } + // Each stream ends with a flush of tableLog bits. + nSize += uint32(cur.actualTableLog) + nSizePrev += uint32(cur.actualTableLog) + if predefSize != math.MaxUint32 { + predefSize += uint32(preDef.actualTableLog) + } + if prevSize != math.MaxUint32 { + prevSize += uint32(prev.actualTableLog) + } + switch { + case predefSize <= prevSize && predefSize <= nSize || forcePreDef: + if debugEncoder { + println("Using predefined", predefSize>>3, "<=", nSize>>3) + } + return preDef, compModePredefined + case prevSize <= nSizePrev: + if debugEncoder { + println("Using previous", prevSize>>3, "<=", nSizePrev>>3) + } + return prev, compModeRepeat + default: + if debugEncoder { + println("Using new, predef", predefSize>>3, ". previous:", prevSize>>3, ">", nSize>>3, "header max:", cur.maxHeaderSize()>>3, "bytes") + println("tl:", cur.actualTableLog, "symbolLen:", cur.symbolLen, "norm:", cur.norm[:cur.symbolLen], "hist", cur.count[:cur.symbolLen]) + } + return cur, compModeFSE + } +} + var errIncompressible = errors.New("incompressible") func (b *blockEnc) genCodes() { diff --git a/vendor/github.com/klauspost/compress/zstd/decoder.go b/vendor/github.com/klauspost/compress/zstd/decoder.go index 90ef3bb03f..3aec681d6a 100644 --- a/vendor/github.com/klauspost/compress/zstd/decoder.go +++ b/vendor/github.com/klauspost/compress/zstd/decoder.go @@ -546,7 +546,7 @@ func (d *Decoder) nextBlockSync() (ok bool) { if d.current.err != nil { return false } - d.frame.history.ensureBlock() + d.frame.history.ensureBlockRing() if debugDecoder { println("History trimmed:", len(d.frame.history.b), "decoded already:", d.syncStream.decodedFrame) } @@ -751,7 +751,8 @@ func (d *Decoder) startStreamDecoder(ctx context.Context, r io.Reader, output ch wg.Add(1) // Async 3: Execute sequences... - frameHistCache := d.frame.history.b + // Reuse the history ring across streams. + frameRing := d.frame.history.ring go func() { var hist history var decodedFrame uint64 @@ -770,20 +771,12 @@ func (d *Decoder) startStreamDecoder(ctx context.Context, r io.Reader, output ch } hist.reset() hist.windowSize = block.async.newHist.windowSize - hist.allocFrameBuffer = block.async.newHist.allocFrameBuffer if block.async.newHist.dict != nil { hist.setDict(block.async.newHist.dict) } - - if cap(hist.b) < hist.allocFrameBuffer { - if cap(frameHistCache) >= hist.allocFrameBuffer { - hist.b = frameHistCache - } else { - hist.b = make([]byte, 0, hist.allocFrameBuffer) - println("Alloc history sized", hist.allocFrameBuffer) - } + if hist.ring == nil { + hist.ring = frameRing } - hist.b = hist.b[:0] fcs = block.async.fcs decodedFrame = 0 } @@ -806,13 +799,15 @@ func (d *Decoder) startStreamDecoder(ctx context.Context, r io.Reader, output ch for i := range block.dst { block.dst[i] = v } - hist.append(block.dst) + hist.ensureBlockRing() + hist.appendKeep(block.dst) do.b = block.dst case blockTypeRaw: if debugDecoder { println("add raw block length:", len(block.data)) } - hist.append(block.data) + hist.ensureBlockRing() + hist.appendKeep(block.data) do.b = block.data case blockTypeCompressed: if debugDecoder { @@ -845,7 +840,7 @@ func (d *Decoder) startStreamDecoder(ctx context.Context, r io.Reader, output ch output <- do } close(output) - frameHistCache = hist.b + frameRing = hist.ring wg.Done() if debugDecoder { println("decoder goroutines finished") @@ -924,9 +919,6 @@ decodeStream: err := frame.next(dec) if !historySent { h := frame.history - if debugDecoder { - println("Alloc History:", h.allocFrameBuffer) - } hist.reset() if h.dict != nil { hist.setDict(h.dict) @@ -973,7 +965,7 @@ decodeStream: close(seqDecode) wg.Wait() hist.reset() - d.frame.history.b = frameHistCache + d.frame.history.ring = frameRing } func (d *Decoder) setDict(frame *frameDec) (err error) { diff --git a/vendor/github.com/klauspost/compress/zstd/dict.go b/vendor/github.com/klauspost/compress/zstd/dict.go index 67f40e7914..7fbdedfff1 100644 --- a/vendor/github.com/klauspost/compress/zstd/dict.go +++ b/vendor/github.com/klauspost/compress/zstd/dict.go @@ -17,6 +17,7 @@ type dict struct { litEnc *huff0.Scratch llDec, ofDec, mlDec sequenceDec + llEnc, ofEnc, mlEnc *fseEncoder offsets [3]int content []byte } @@ -99,17 +100,12 @@ func loadDict(b []byte) (*dict, error) { off: 0, } readDec := func(i tableIndex, dec *fseDecoder) error { - if err := dec.readNCount(&br, uint16(maxTableSymbol[i])); err != nil { + if err := dec.readNCount(&br, i); err != nil { return err } if br.overread() { return io.ErrUnexpectedEOF } - err = dec.transform(symbolTableX[i]) - if err != nil { - println("Transform table error:", err) - return err - } if debugDecoder || debugEncoder { println("Read table ok", "symbolLen:", dec.symbolLen) } @@ -145,6 +141,9 @@ func loadDict(b []byte) (*dict, error) { if d.offsets[0] > len(d.content) || d.offsets[1] > len(d.content) || d.offsets[2] > len(d.content) { return nil, fmt.Errorf("initial offset bigger than dictionary content size %d, offsets: %v", len(d.content), d.offsets) } + d.llEnc = newDictSeqEncoder(d.llDec.fse, tableLiteralLengths) + d.ofEnc = newDictSeqEncoder(d.ofDec.fse, tableOffsets) + d.mlEnc = newDictSeqEncoder(d.mlDec.fse, tableMatchLengths) return &d, nil } @@ -219,6 +218,9 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { if len(contents) == 0 { return nil, errors.New("no content provided") } + if o.Level < speedNotSet || o.Level >= speedLast { + return nil, fmt.Errorf("unknown encoder level %d", o.Level) + } d := dict{ id: o.ID, litEnc: nil, diff --git a/vendor/github.com/klauspost/compress/zstd/enc_base.go b/vendor/github.com/klauspost/compress/zstd/enc_base.go index c4fea575d6..40505ce65d 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_base.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_base.go @@ -194,6 +194,7 @@ func (e *fastBase) resetBase(d *dict, singleBlock bool) { } // Transfer litenc. e.blk.dictLitEnc = d.litEnc + e.blk.coders.seedPrevFromDict(d) e.hist = append(e.hist, d.content...) } } diff --git a/vendor/github.com/klauspost/compress/zstd/enc_better.go b/vendor/github.com/klauspost/compress/zstd/enc_better.go index 523d57f3ad..42b46a38c4 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_better.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_better.go @@ -26,6 +26,16 @@ const ( betterShortTableShardSize = betterShortTableSize / betterShortTableShardCnt // Size of an individual shard ) +// betterHashL is hashLen(u, betterLongTableBits, betterLongLen) with prime = prime8bytes. +func betterHashL(u, prime uint64) uint32 { + return uint32((u * prime) >> (64 - betterLongTableBits)) +} + +// betterHashS is hashLen(u, betterShortTableBits, betterShortLen) with prime = prime5bytes. +func betterHashS(u, prime uint64) uint32 { + return uint32(((u << (64 - 40)) * prime) >> (64 - betterShortTableBits)) +} + type prevEntry struct { offset int32 prev int32 @@ -126,6 +136,7 @@ func (e *betterFastEncoder) Encode(blk *blockEnc, src []byte) { // Override src src = e.hist sLimit := int32(len(src)) - inputMargin + primeL, primeS := hashPrimes8and5() // stepSize is the number of bytes to skip on every main loop iteration. // It should be >= 1. const stepSize = 1 @@ -163,8 +174,8 @@ encodeLoop: panic("offset0 was 0") } - nextHashL := hashLen(cv, betterLongTableBits, betterLongLen) - nextHashS := hashLen(cv, betterShortTableBits, betterShortLen) + nextHashL := betterHashL(cv, primeL) + nextHashS := betterHashS(cv, primeS) candidateL := e.longTable[nextHashL] candidateS := e.table[nextHashS] @@ -218,14 +229,13 @@ encodeLoop: break encodeLoop } // Index skipped... - for index0 < s-1 { + for end := s - 1; index0 < end; index0 += 2 { cv0 := load6432(src, index0) cv1 := cv0 >> 8 - h0 := hashLen(cv0, betterLongTableBits, betterLongLen) + h0 := betterHashL(cv0, primeL) off := index0 + e.cur + e.table[betterHashS(cv1, primeS)] = tableEntry{offset: off + 1, val: uint32(cv1)} e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset} - e.table[hashLen(cv1, betterShortTableBits, betterShortLen)] = tableEntry{offset: off + 1, val: uint32(cv1)} - index0 += 2 } cv = load6432(src, s) continue @@ -275,14 +285,13 @@ encodeLoop: } // Index skipped... - for index0 < s-1 { + for end := s - 1; index0 < end; index0 += 2 { cv0 := load6432(src, index0) cv1 := cv0 >> 8 - h0 := hashLen(cv0, betterLongTableBits, betterLongLen) + h0 := betterHashL(cv0, primeL) off := index0 + e.cur + e.table[betterHashS(cv1, primeS)] = tableEntry{offset: off + 1, val: uint32(cv1)} e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset} - e.table[hashLen(cv1, betterShortTableBits, betterShortLen)] = tableEntry{offset: off + 1, val: uint32(cv1)} - index0 += 2 } cv = load6432(src, s) // Swap offsets @@ -356,7 +365,7 @@ encodeLoop: // See if we can find a long match at s+1 const checkAt = 1 cv := load6432(src, s+checkAt) - nextHashL = hashLen(cv, betterLongTableBits, betterLongLen) + nextHashL = betterHashL(cv, primeL) candidateL = e.longTable[nextHashL] coffsetL = candidateL.offset - e.cur @@ -423,7 +432,7 @@ encodeLoop: // and still picked up as part of the match if they do. const skipBeginning = 3 - nextHashL := hashLen(load6432(src, s+matched), betterLongTableBits, betterLongLen) + nextHashL := betterHashL(load6432(src, s+matched), primeL) s2 := s + skipBeginning cv := load3232(src, s2) candidateL := e.longTable[nextHashL] @@ -501,13 +510,12 @@ encodeLoop: // Index match start+1 (long) -> s - 1 off := index0 + e.cur - for index0 < s-1 { + for end := s - 1; index0 < end; index0 += 2 { cv0 := load6432(src, index0) cv1 := cv0 >> 8 - h0 := hashLen(cv0, betterLongTableBits, betterLongLen) + e.table[betterHashS(cv1, primeS)] = tableEntry{offset: off + 1, val: uint32(cv1)} + h0 := betterHashL(cv0, primeL) e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset} - e.table[hashLen(cv1, betterShortTableBits, betterShortLen)] = tableEntry{offset: off + 1, val: uint32(cv1)} - index0 += 2 off += 2 } @@ -525,8 +533,8 @@ encodeLoop: } // Store this, since we have it. - nextHashL := hashLen(cv, betterLongTableBits, betterLongLen) - nextHashS := hashLen(cv, betterShortTableBits, betterShortLen) + nextHashL := betterHashL(cv, primeL) + nextHashS := betterHashS(cv, primeS) // We have at least 4 byte match. // No need to check backwards. We come straight from a match @@ -644,6 +652,7 @@ func (e *betterFastEncoderDict) Encode(blk *blockEnc, src []byte) { // Override src src = e.hist sLimit := int32(len(src)) - inputMargin + primeL, primeS := hashPrimes8and5() // stepSize is the number of bytes to skip on every main loop iteration. // It should be >= 1. const stepSize = 1 @@ -681,8 +690,8 @@ encodeLoop: panic("offset0 was 0") } - nextHashL := hashLen(cv, betterLongTableBits, betterLongLen) - nextHashS := hashLen(cv, betterShortTableBits, betterShortLen) + nextHashL := betterHashL(cv, primeL) + nextHashS := betterHashS(cv, primeS) candidateL := e.longTable[nextHashL] candidateS := e.table[nextHashS] @@ -737,17 +746,16 @@ encodeLoop: break encodeLoop } // Index skipped... - for index0 < s-1 { + for end := s - 1; index0 < end; index0 += 2 { cv0 := load6432(src, index0) cv1 := cv0 >> 8 - h0 := hashLen(cv0, betterLongTableBits, betterLongLen) + h0 := betterHashL(cv0, primeL) off := index0 + e.cur - e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset} - e.markLongShardDirty(h0) - h1 := hashLen(cv1, betterShortTableBits, betterShortLen) + h1 := betterHashS(cv1, primeS) e.table[h1] = tableEntry{offset: off + 1, val: uint32(cv1)} e.markShortShardDirty(h1) - index0 += 2 + e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset} + e.markLongShardDirty(h0) } cv = load6432(src, s) continue @@ -797,17 +805,16 @@ encodeLoop: } // Index skipped... - for index0 < s-1 { + for end := s - 1; index0 < end; index0 += 2 { cv0 := load6432(src, index0) cv1 := cv0 >> 8 - h0 := hashLen(cv0, betterLongTableBits, betterLongLen) + h0 := betterHashL(cv0, primeL) off := index0 + e.cur - e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset} - e.markLongShardDirty(h0) - h1 := hashLen(cv1, betterShortTableBits, betterShortLen) + h1 := betterHashS(cv1, primeS) e.table[h1] = tableEntry{offset: off + 1, val: uint32(cv1)} e.markShortShardDirty(h1) - index0 += 2 + e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset} + e.markLongShardDirty(h0) } cv = load6432(src, s) // Swap offsets @@ -881,7 +888,7 @@ encodeLoop: // See if we can find a long match at s+1 const checkAt = 1 cv := load6432(src, s+checkAt) - nextHashL = hashLen(cv, betterLongTableBits, betterLongLen) + nextHashL = betterHashL(cv, primeL) candidateL = e.longTable[nextHashL] coffsetL = candidateL.offset - e.cur @@ -942,7 +949,7 @@ encodeLoop: } // Try to find a better match by searching for a long match at the end of the current best match if s+matched < sLimit { - nextHashL := hashLen(load6432(src, s+matched), betterLongTableBits, betterLongLen) + nextHashL := betterHashL(load6432(src, s+matched), primeL) cv := load3232(src, s) candidateL := e.longTable[nextHashL] coffsetL := candidateL.offset - e.cur - matched @@ -1017,16 +1024,15 @@ encodeLoop: // Index match start+1 (long) -> s - 1 off := index0 + e.cur - for index0 < s-1 { + for end := s - 1; index0 < end; index0 += 2 { cv0 := load6432(src, index0) cv1 := cv0 >> 8 - h0 := hashLen(cv0, betterLongTableBits, betterLongLen) - e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset} - e.markLongShardDirty(h0) - h1 := hashLen(cv1, betterShortTableBits, betterShortLen) + h1 := betterHashS(cv1, primeS) e.table[h1] = tableEntry{offset: off + 1, val: uint32(cv1)} e.markShortShardDirty(h1) - index0 += 2 + h0 := betterHashL(cv0, primeL) + e.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset} + e.markLongShardDirty(h0) off += 2 } @@ -1044,8 +1050,8 @@ encodeLoop: } // Store this, since we have it. - nextHashL := hashLen(cv, betterLongTableBits, betterLongLen) - nextHashS := hashLen(cv, betterShortTableBits, betterShortLen) + nextHashL := betterHashL(cv, primeL) + nextHashS := betterHashS(cv, primeS) // We have at least 4 byte match. // No need to check backwards. We come straight from a match diff --git a/vendor/github.com/klauspost/compress/zstd/enc_dfast.go b/vendor/github.com/klauspost/compress/zstd/enc_dfast.go index 712ba7ab58..aae59862aa 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_dfast.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_dfast.go @@ -22,6 +22,16 @@ const ( ) +// dFastHashL is hashLen(u, dFastLongTableBits, dFastLongLen) with prime = prime8bytes. +func dFastHashL(u, prime uint64) uint32 { + return uint32((u * prime) >> (64 - dFastLongTableBits)) +} + +// dFastHashS is hashLen(u, dFastShortTableBits, dFastShortLen) with prime = prime5bytes. +func dFastHashS(u, prime uint64) uint32 { + return uint32(((u << (64 - 40)) * prime) >> (64 - dFastShortTableBits)) +} + type doubleFastEncoder struct { fastEncoder longTable [dFastLongTableSize]tableEntry @@ -87,6 +97,7 @@ func (e *doubleFastEncoder) Encode(blk *blockEnc, src []byte) { // Override src src = e.hist sLimit := int32(len(src)) - inputMargin + primeL, primeS := hashPrimes8and5() // stepSize is the number of bytes to skip on every main loop iteration. // It should be >= 1. const stepSize = 1 @@ -123,8 +134,8 @@ encodeLoop: panic("offset0 was 0") } - nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen) - nextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen) + nextHashL := dFastHashL(cv, primeL) + nextHashS := dFastHashS(cv, primeS) candidateL := e.longTable[nextHashL] candidateS := e.table[nextHashS] @@ -204,7 +215,7 @@ encodeLoop: // See if we can find a long match at s+1 const checkAt = 1 cv := load6432(src, s+checkAt) - nextHashL = hashLen(cv, dFastLongTableBits, dFastLongLen) + nextHashL = dFastHashL(cv, primeL) candidateL = e.longTable[nextHashL] coffsetL = s - (candidateL.offset - e.cur) + checkAt @@ -297,16 +308,16 @@ encodeLoop: cv1 := load6432(src, index1) te0 := tableEntry{offset: index0 + e.cur, val: uint32(cv0)} te1 := tableEntry{offset: index1 + e.cur, val: uint32(cv1)} - e.longTable[hashLen(cv0, dFastLongTableBits, dFastLongLen)] = te0 - e.longTable[hashLen(cv1, dFastLongTableBits, dFastLongLen)] = te1 + e.longTable[dFastHashL(cv0, primeL)] = te0 + e.longTable[dFastHashL(cv1, primeL)] = te1 cv0 >>= 8 cv1 >>= 8 te0.offset++ te1.offset++ te0.val = uint32(cv0) te1.val = uint32(cv1) - e.table[hashLen(cv0, dFastShortTableBits, dFastShortLen)] = te0 - e.table[hashLen(cv1, dFastShortTableBits, dFastShortLen)] = te1 + e.table[dFastHashS(cv0, primeS)] = te0 + e.table[dFastHashS(cv1, primeS)] = te1 cv = load6432(src, s) @@ -323,8 +334,8 @@ encodeLoop: } // Store this, since we have it. - nextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen) - nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen) + nextHashS := dFastHashS(cv, primeS) + nextHashL := dFastHashL(cv, primeL) // We have at least 4 byte match. // No need to check backwards. We come straight from a match @@ -399,6 +410,7 @@ func (e *doubleFastEncoder) EncodeNoHist(blk *blockEnc, src []byte) { // Override src sLimit := int32(len(src)) - inputMargin + primeL, primeS := hashPrimes8and5() // stepSize is the number of bytes to skip on every main loop iteration. // It should be >= 1. const stepSize = 1 @@ -429,8 +441,8 @@ encodeLoop: var t int32 for { - nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen) - nextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen) + nextHashL := dFastHashL(cv, primeL) + nextHashS := dFastHashS(cv, primeS) candidateL := e.longTable[nextHashL] candidateS := e.table[nextHashS] @@ -511,7 +523,7 @@ encodeLoop: // See if we can find a long match at s+1 const checkAt = 1 cv := load6432(src, s+checkAt) - nextHashL = hashLen(cv, dFastLongTableBits, dFastLongLen) + nextHashL = dFastHashL(cv, primeL) candidateL = e.longTable[nextHashL] coffsetL = s - (candidateL.offset - e.cur) + checkAt @@ -601,16 +613,16 @@ encodeLoop: cv1 := load6432(src, index1) te0 := tableEntry{offset: index0 + e.cur, val: uint32(cv0)} te1 := tableEntry{offset: index1 + e.cur, val: uint32(cv1)} - e.longTable[hashLen(cv0, dFastLongTableBits, dFastLongLen)] = te0 - e.longTable[hashLen(cv1, dFastLongTableBits, dFastLongLen)] = te1 + e.longTable[dFastHashL(cv0, primeL)] = te0 + e.longTable[dFastHashL(cv1, primeL)] = te1 cv0 >>= 8 cv1 >>= 8 te0.offset++ te1.offset++ te0.val = uint32(cv0) te1.val = uint32(cv1) - e.table[hashLen(cv0, dFastShortTableBits, dFastShortLen)] = te0 - e.table[hashLen(cv1, dFastShortTableBits, dFastShortLen)] = te1 + e.table[dFastHashS(cv0, primeS)] = te0 + e.table[dFastHashS(cv1, primeS)] = te1 cv = load6432(src, s) @@ -627,8 +639,8 @@ encodeLoop: } // Store this, since we have it. - nextHashS := hashLen(cv1>>8, dFastShortTableBits, dFastShortLen) - nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen) + nextHashS := dFastHashS(cv1>>8, primeS) + nextHashL := dFastHashL(cv, primeL) // We have at least 4 byte match. // No need to check backwards. We come straight from a match @@ -733,6 +745,7 @@ func (e *doubleFastEncoderDict) Encode(blk *blockEnc, src []byte) { // Override src src = e.hist sLimit := int32(len(src)) - inputMargin + primeL, primeS := hashPrimes8and5() // stepSize is the number of bytes to skip on every main loop iteration. // It should be >= 1. const stepSize = 1 @@ -769,8 +782,8 @@ encodeLoop: panic("offset0 was 0") } - nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen) - nextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen) + nextHashL := dFastHashL(cv, primeL) + nextHashS := dFastHashS(cv, primeS) candidateL := e.longTable[nextHashL] candidateS := e.table[nextHashS] @@ -852,7 +865,7 @@ encodeLoop: // See if we can find a long match at s+1 const checkAt = 1 cv := load6432(src, s+checkAt) - nextHashL = hashLen(cv, dFastLongTableBits, dFastLongLen) + nextHashL = dFastHashL(cv, primeL) candidateL = e.longTable[nextHashL] coffsetL = s - (candidateL.offset - e.cur) + checkAt @@ -946,8 +959,8 @@ encodeLoop: cv1 := load6432(src, index1) te0 := tableEntry{offset: index0 + e.cur, val: uint32(cv0)} te1 := tableEntry{offset: index1 + e.cur, val: uint32(cv1)} - longHash1 := hashLen(cv0, dFastLongTableBits, dFastLongLen) - longHash2 := hashLen(cv1, dFastLongTableBits, dFastLongLen) + longHash1 := dFastHashL(cv0, primeL) + longHash2 := dFastHashL(cv1, primeL) e.longTable[longHash1] = te0 e.longTable[longHash2] = te1 e.markLongShardDirty(longHash1) @@ -958,8 +971,8 @@ encodeLoop: te1.offset++ te0.val = uint32(cv0) te1.val = uint32(cv1) - hashVal1 := hashLen(cv0, dFastShortTableBits, dFastShortLen) - hashVal2 := hashLen(cv1, dFastShortTableBits, dFastShortLen) + hashVal1 := dFastHashS(cv0, primeS) + hashVal2 := dFastHashS(cv1, primeS) e.table[hashVal1] = te0 e.markShardDirty(hashVal1) e.table[hashVal2] = te1 @@ -980,8 +993,8 @@ encodeLoop: } // Store this, since we have it. - nextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen) - nextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen) + nextHashL := dFastHashL(cv, primeL) + nextHashS := dFastHashS(cv, primeS) // We have at least 4 byte match. // No need to check backwards. We come straight from a match diff --git a/vendor/github.com/klauspost/compress/zstd/framedec.go b/vendor/github.com/klauspost/compress/zstd/framedec.go index 81d8b9c922..fb836c412e 100644 --- a/vendor/github.com/klauspost/compress/zstd/framedec.go +++ b/vendor/github.com/klauspost/compress/zstd/framedec.go @@ -258,18 +258,6 @@ func (d *frameDec) reset(br byteBuffer) error { return ErrWindowSizeTooSmall } d.history.windowSize = int(d.WindowSize) - if !d.o.lowMem || d.history.windowSize < maxBlockSize { - // Alloc 2x window size if not low-mem, or window size below 2MB. - d.history.allocFrameBuffer = d.history.windowSize * 2 - } else { - if d.o.lowMem { - // Alloc with 1MB extra. - d.history.allocFrameBuffer = d.history.windowSize + maxBlockSize/2 - } else { - // Alloc with 2MB extra. - d.history.allocFrameBuffer = d.history.windowSize + maxBlockSize - } - } if debugDecoder { println("Frame: Dict:", d.DictionaryID, "FrameContentSize:", d.FrameContentSize, "singleseg:", d.SingleSegment, "window:", d.WindowSize, "crc:", d.HasCheckSum) @@ -355,14 +343,12 @@ func (d *frameDec) runDecoder(dst []byte, dec *blockDec) ([]byte, error) { if debugDecoder { println("maxSyncLen:", d.history.decoders.maxSyncLen) } - if !d.o.limitToCap && uint64(cap(dst)) < d.history.decoders.maxSyncLen { - // Alloc for output - dst2 := make([]byte, len(dst), d.history.decoders.maxSyncLen+compressedBlockOverAlloc) - copy(dst2, dst) - dst = dst2 - } } var err error + // Hash each block while it is still in cache rather than the whole + // frame at the end. + hashCRC := d.HasCheckSum && !d.o.ignoreChecksum + crcDone := crcStart for { err = dec.reset(d.rawInput, d.WindowSize) if err != nil { @@ -375,6 +361,10 @@ func (d *frameDec) runDecoder(dst []byte, dec *blockDec) ([]byte, error) { if err != nil { break } + if hashCRC { + d.crc.Write(d.history.b[crcDone:]) + crcDone = len(d.history.b) + } if uint64(len(d.history.b)-crcStart) > d.o.maxDecodedSize { println("runDecoder: maxDecodedSize exceeded", uint64(len(d.history.b)-crcStart), ">", d.o.maxDecodedSize) err = ErrDecoderSizeExceeded @@ -405,7 +395,6 @@ func (d *frameDec) runDecoder(dst []byte, dec *blockDec) ([]byte, error) { if d.o.ignoreChecksum { err = d.consumeCRC() } else { - d.crc.Write(dst[crcStart:]) err = d.checkCRC() } } diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder.go b/vendor/github.com/klauspost/compress/zstd/fse_decoder.go index 2f8860a722..12ac2b5497 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_decoder.go +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder.go @@ -43,13 +43,36 @@ type fseDecoder struct { preDefined bool } +// codeShare returns, in 1/256ths, the table's probability mass on symbols +// minCode and above: for a table read from the block, the share of its +// sequences with those codes. The predefined tables describe the format's +// defaults, not the block, and RLE tables have no distribution; both +// report -1. +func (s *fseDecoder) codeShare(minCode int) int { + if s == nil || s.preDefined || s.actualTableLog == 0 { + return -1 + } + n := 0 + for c := minCode; c < int(s.symbolLen); c++ { + switch v := int(s.norm[c]); { + case v > 0: + n += v + case v < 0: + n++ // -1 marks a probability below one slot; it occupies one + } + } + return n * 256 >> s.actualTableLog +} + // tableStep returns the next table index. func tableStep(tableSize uint32) uint32 { return (tableSize >> 1) + (tableSize >> 3) + 3 } -// readNCount will read the symbol distribution so decoding tables can be constructed. -func (s *fseDecoder) readNCount(b *byteReader, maxSymbol uint16) error { +// readNCount will read the symbol distribution for table t and build its +// decoding table. +func (s *fseDecoder) readNCount(b *byteReader, t tableIndex) error { + maxSymbol := uint16(maxTableSymbol[t]) var ( charnum uint16 previous0 bool @@ -167,7 +190,8 @@ func (s *fseDecoder) readNCount(b *byteReader, maxSymbol uint16) error { if s.symbolLen <= 1 { return fmt.Errorf("symbolLen (%d) too small", s.symbolLen) } - if s.symbolLen > maxSymbolValue+1 { + // A run of zero counts can step past maxSymbol, so check the total. + if s.symbolLen > maxSymbol+1 { return fmt.Errorf("symbolLen (%d) too big", s.symbolLen) } if remaining != 1 { @@ -180,7 +204,30 @@ func (s *fseDecoder) readNCount(b *byteReader, maxSymbol uint16) error { return fmt.Errorf("corruption detected (total %d != %d)", gotTotal, 1<> 3) - return s.buildDtable() + return s.buildDtable(&symbolExtX[t]) +} + +// symbolExt holds, per symbol, a decSymbol with only addBits and baseline set. +type symbolExt [maxMatchLengthSymbol + 1]decSymbol + +// buildDtable builds the decoding table, taking each state's addBits and +// baseline from its symbol's entry in ext. +func (s *fseDecoder) buildDtable(ext *symbolExt) error { + if int(s.symbolLen) > len(ext) { + return fmt.Errorf("symbolLen (%d) too big", s.symbolLen) + } + if err := s.fillDtable(ext); err != nil { + return err + } + // addBits never decreases with the symbol (checked in initPredefined), + // so the last symbol has the most. It may exceed the table's actual + // maximum only if the last symbol has no states, which just costs an + // extra bitreader fill. + s.maxBits = 0 + if s.symbolLen > 0 { + s.maxBits = ext[s.symbolLen-1].addBits() + } + return nil } func (s *fseDecoder) mustReadFrom(r io.Reader) { @@ -268,27 +315,6 @@ func (s *fseDecoder) setRLE(symbol decSymbol) { s.dt[0] = symbol } -// transform will transform the decoder table into a table usable for -// decoding without having to apply the transformation while decoding. -// The state will contain the base value and the number of bits to read. -func (s *fseDecoder) transform(t []baseOffset) error { - tableSize := uint16(1 << s.actualTableLog) - s.maxBits = 0 - for i, v := range s.dt[:tableSize] { - add := v.addBits() - if int(add) >= len(t) { - return fmt.Errorf("invalid decoding table entry %d, symbol %d >= max (%d)", i, v.addBits(), len(t)) - } - lu := t[add] - if lu.addBits > s.maxBits { - s.maxBits = lu.addBits - } - v.setExt(lu.addBits, lu.baseLine) - s.dt[i] = v - } - return nil -} - type fseState struct { dt []decSymbol state decSymbol diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.s b/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.s index deeadc49eb..87f05503ce 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.s @@ -1,126 +1,132 @@ // Code generated by command: go run gen_fse.go -out ../fse_decoder.s -arch amd64,arm64 -pkg=zstd. DO NOT EDIT. -//go:build !appengine && !noasm && gc && !noasm +//go:build !noasm && gc // func buildDtable_asm(s *fseDecoder, ctx *buildDtableAsmContext) int TEXT ·buildDtable_asm(SB), $0-24 MOVQ ctx+8(FP), CX - MOVQ s+0(FP), DI + MOVQ s+0(FP), R8 // Load values - MOVBQZX 4098(DI), DX + MOVBQZX 4098(R8), DX XORQ AX, AX BTSQ DX, AX MOVQ (CX), BX MOVQ 16(CX), SI - LEAQ -1(AX), R8 + MOVQ 24(CX), DI + LEAQ -1(AX), R9 MOVQ 8(CX), CX - MOVWQZX 4096(DI), DI + MOVWQZX 4096(R8), R8 // End load values // Init, lay down lowprob symbols - XORQ R9, R9 + XORQ R10, R10 JMP init_main_loop_condition init_main_loop: - MOVWQSX (CX)(R9*2), R10 - CMPW R10, $-1 + MOVWQSX (CX)(R10*2), R11 + CMPW R11, $-1 JNE do_not_update_high_threshold - MOVB R9, 1(SI)(R8*8) - DECQ R8 - MOVQ $0x0000000000000001, R10 + MOVB R10, 1(SI)(R9*8) + DECQ R9 + MOVQ $0x0000000000000001, R11 do_not_update_high_threshold: - MOVW R10, (BX)(R9*2) - INCQ R9 + MOVW R11, (BX)(R10*2) + INCQ R10 init_main_loop_condition: - CMPQ R9, DI + CMPQ R10, R8 JL init_main_loop // Spread symbols // Calculate table step - MOVQ AX, R9 - SHRQ $0x01, R9 MOVQ AX, R10 - SHRQ $0x03, R10 - LEAQ 3(R9)(R10*1), R9 + SHRQ $0x01, R10 + MOVQ AX, R11 + SHRQ $0x03, R11 + LEAQ 3(R10)(R11*1), R10 // Fill add bits values - LEAQ -1(AX), R10 - XORQ R11, R11 + LEAQ -1(AX), R11 XORQ R12, R12 + XORQ R13, R13 JMP spread_main_loop_condition spread_main_loop: - XORQ R13, R13 - MOVWQSX (CX)(R12*2), R14 + XORQ R14, R14 + MOVWQSX (CX)(R13*2), R15 JMP spread_inner_loop_condition spread_inner_loop: - MOVB R12, 1(SI)(R11*8) + MOVB R13, 1(SI)(R12*8) adjust_position: - ADDQ R9, R11 - ANDQ R10, R11 - CMPQ R11, R8 + ADDQ R10, R12 + ANDQ R11, R12 + CMPQ R12, R9 JG adjust_position - INCQ R13 + INCQ R14 spread_inner_loop_condition: - CMPQ R13, R14 + CMPQ R14, R15 JL spread_inner_loop - INCQ R12 + INCQ R13 spread_main_loop_condition: - CMPQ R12, DI + CMPQ R13, R8 JL spread_main_loop - TESTQ R11, R11 + TESTQ R12, R12 JZ spread_check_ok MOVQ ctx+8(FP), AX - MOVQ R11, 24(AX) + MOVQ R12, 32(AX) MOVQ $+1, ret+16(FP) RET spread_check_ok: // Build Decoding table - XORQ DI, DI + XORQ R8, R8 build_table_main_table: - MOVBQZX 1(SI)(DI*8), CX - MOVWQZX (BX)(CX*2), R8 - LEAQ 1(R8), R9 - MOVW R9, (BX)(CX*2) - MOVQ R8, R9 - BSRQ R9, R9 + MOVBQZX 1(SI)(R8*8), R9 + MOVWQZX (BX)(R9*2), R10 + LEAQ 1(R10), CX + MOVW CX, (BX)(R9*2) + MOVQ R10, R11 + BSRQ R11, R11 MOVQ DX, CX - SUBQ R9, CX - SHLQ CL, R8 - SUBQ AX, R8 - MOVB CL, (SI)(DI*8) - MOVW R8, 2(SI)(DI*8) - CMPQ R8, AX + SUBQ R11, CX + SHLQ CL, R10 + SUBQ AX, R10 + MOVQ (DI)(R9*8), R9 + ORQ CX, R9 + MOVQ R10, R11 + ANDQ $0x0000ffff, R11 + SHLQ $0x10, R11 + ORQ R11, R9 + MOVQ R9, (SI)(R8*8) + CMPQ R10, AX JLE build_table_check1_ok MOVQ ctx+8(FP), CX - MOVQ R8, 24(CX) - MOVQ AX, 32(CX) + MOVQ R10, 32(CX) + MOVQ AX, 40(CX) MOVQ $+2, ret+16(FP) RET build_table_check1_ok: TESTB CL, CL JNZ build_table_check2_ok - CMPW R8, DI + CMPW R10, R8 JNE build_table_check2_ok MOVQ ctx+8(FP), AX - MOVQ R8, 24(AX) - MOVQ DI, 32(AX) + MOVQ R10, 32(AX) + MOVQ R8, 40(AX) MOVQ $+3, ret+16(FP) RET build_table_check2_ok: - INCQ DI - CMPQ DI, AX + INCQ R8 + CMPQ R8, AX JL build_table_main_table MOVQ $+0, ret+16(FP) RET diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder_arm64.s b/vendor/github.com/klauspost/compress/zstd/fse_decoder_arm64.s index 8ca913eaec..f83b76b320 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_decoder_arm64.s +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder_arm64.s @@ -1,122 +1,126 @@ // Code generated by command: go run gen_fse.go -out ../fse_decoder.s -arch amd64,arm64 -pkg=zstd. DO NOT EDIT. // EXPERIMENTAL arm64 output lowered from an amd64 avo program. -//go:build arm64 && (!appengine && !noasm && gc && !noasm) +//go:build arm64 && (!noasm && gc) // func buildDtable_asm(s *fseDecoder, ctx *buildDtableAsmContext) int TEXT ·buildDtable_asm(SB), $0-24 MOVD ctx+8(FP), R1 - MOVD s+0(FP), R6 + MOVD s+0(FP), R7 // Load values - MOVBU 4098(R6), R2 + MOVBU 4098(R7), R2 MOVD $0, R0 MOVD $1, R16 LSL R2, R16, R16 ORR R16, R0, R0 MOVD (R1), R3 MOVD 16(R1), R5 - SUB $1, R0, R7 + MOVD 24(R1), R6 + SUB $1, R0, R8 MOVD 8(R1), R1 - MOVHU 4096(R6), R6 + MOVHU 4096(R7), R7 // End load values // Init, lay down lowprob symbols - MOVD $0, R8 + MOVD $0, R9 JMP init_main_loop_condition init_main_loop: - MOVH (R1)(R8<<1), R9 + MOVH (R1)(R9<<1), R10 MOVD $-1, R16 AND $0xffff, R16, R16 - AND $0xffff, R9, R15 + AND $0xffff, R10, R15 CMP R16, R15 BNE do_not_update_high_threshold - ADD R7<<3, R5, R15 - MOVB R8, 1(R15) - SUB $1, R7, R7 - MOVD $0x0000000000000001, R9 + ADD R8<<3, R5, R15 + MOVB R9, 1(R15) + SUB $1, R8, R8 + MOVD $0x0000000000000001, R10 do_not_update_high_threshold: - MOVH R9, (R3)(R8<<1) - ADD $1, R8, R8 + MOVH R10, (R3)(R9<<1) + ADD $1, R9, R9 init_main_loop_condition: - CMP R6, R8 + CMP R7, R9 BLT init_main_loop // Spread symbols // Calculate table step - LSR $0x01, R0, R8 - LSR $0x03, R0, R9 - ADD R9, R8, R8 - ADD $3, R8, R8 + LSR $0x01, R0, R9 + LSR $0x03, R0, R10 + ADD R10, R9, R9 + ADD $3, R9, R9 // Fill add bits values - SUB $1, R0, R9 - MOVD $0, R10 + SUB $1, R0, R10 MOVD $0, R11 + MOVD $0, R12 JMP spread_main_loop_condition spread_main_loop: - MOVD $0, R12 - MOVH (R1)(R11<<1), R13 + MOVD $0, R13 + MOVH (R1)(R12<<1), R14 JMP spread_inner_loop_condition spread_inner_loop: - ADD R10<<3, R5, R15 - MOVB R11, 1(R15) + ADD R11<<3, R5, R15 + MOVB R12, 1(R15) adjust_position: - ADD R8, R10, R10 - AND R9, R10, R10 - CMP R7, R10 + ADD R9, R11, R11 + AND R10, R11, R11 + CMP R8, R11 BGT adjust_position - ADD $1, R12, R12 + ADD $1, R13, R13 spread_inner_loop_condition: - CMP R13, R12 + CMP R14, R13 BLT spread_inner_loop - ADD $1, R11, R11 + ADD $1, R12, R12 spread_main_loop_condition: - CMP R6, R11 + CMP R7, R12 BLT spread_main_loop - TST R10, R10 + TST R11, R11 BEQ spread_check_ok MOVD ctx+8(FP), R0 - MOVD R10, 24(R0) + MOVD R11, 32(R0) MOVD $+1, R16 MOVD R16, ret+16(FP) RET spread_check_ok: // Build Decoding table - MOVD $0, R6 + MOVD $0, R7 build_table_main_table: - ADD R6<<3, R5, R15 - MOVBU 1(R15), R1 - MOVHU (R3)(R1<<1), R7 - ADD $1, R7, R8 - MOVH R8, (R3)(R1<<1) - MOVD R7, R8 - CLZ R8, R16 - MOVD $63, R8 - SUB R16, R8, R8 + ADD R7<<3, R5, R15 + MOVBU 1(R15), R8 + MOVHU (R3)(R8<<1), R9 + ADD $1, R9, R1 + MOVH R1, (R3)(R8<<1) + MOVD R9, R10 + CLZ R10, R16 + MOVD $63, R10 + SUB R16, R10, R10 MOVD R2, R1 - SUB R8, R1, R1 - LSL R1, R7, R7 - SUB R0, R7, R7 - ADD R6<<3, R5, R15 - MOVB R1, (R15) - ADD R6<<3, R5, R15 - MOVH R7, 2(R15) - CMP R0, R7 + SUB R10, R1, R1 + LSL R1, R9, R9 + SUB R0, R9, R9 + MOVD (R6)(R8<<3), R8 + ORR R1, R8, R8 + MOVD R9, R10 + AND $0x0000ffff, R10, R10 + LSL $0x10, R10, R10 + ORR R10, R8, R8 + MOVD R8, (R5)(R7<<3) + CMP R0, R9 BLE build_table_check1_ok MOVD ctx+8(FP), R1 - MOVD R7, 24(R1) - MOVD R0, 32(R1) + MOVD R9, 32(R1) + MOVD R0, 40(R1) MOVD $+2, R16 MOVD R16, ret+16(FP) RET @@ -124,20 +128,20 @@ build_table_main_table: build_table_check1_ok: TST $0xff, R1 BNE build_table_check2_ok - AND $0xffff, R6, R16 - AND $0xffff, R7, R15 + AND $0xffff, R7, R16 + AND $0xffff, R9, R15 CMP R16, R15 BNE build_table_check2_ok MOVD ctx+8(FP), R0 - MOVD R7, 24(R0) - MOVD R6, 32(R0) + MOVD R9, 32(R0) + MOVD R7, 40(R0) MOVD $+3, R16 MOVD R16, ret+16(FP) RET build_table_check2_ok: - ADD $1, R6, R6 - CMP R0, R6 + ADD $1, R7, R7 + CMP R0, R7 BLT build_table_main_table MOVD $+0, R16 MOVD R16, ret+16(FP) diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder_asm.go b/vendor/github.com/klauspost/compress/zstd/fse_decoder_asm.go index 4ffc7e3c9f..7394eefb42 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_decoder_asm.go +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder_asm.go @@ -1,4 +1,4 @@ -//go:build (amd64 || arm64) && !appengine && !noasm && gc +//go:build (amd64 || arm64) && !noasm && gc package zstd @@ -15,6 +15,7 @@ type buildDtableAsmContext struct { stateTable *uint16 norm *int16 dt *uint64 + ext *uint64 // outputs --- set by the procedure in the case of error; // for interpretation please see the error handling part below @@ -35,12 +36,13 @@ const ( errorNewStateNoBits = 3 ) -// buildDtable will build the decoding table. -func (s *fseDecoder) buildDtable() error { +// fillDtable fills the decoding table; see buildDtable. +func (s *fseDecoder) fillDtable(ext *symbolExt) error { ctx := buildDtableAsmContext{ stateTable: &s.stateTable[0], norm: &s.norm[0], dt: (*uint64)(&s.dt[0]), + ext: (*uint64)(&ext[0]), } code := buildDtable_asm(s, &ctx) diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go b/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go index 38fd2ccb2a..f40353bb39 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go @@ -1,4 +1,4 @@ -//go:build (!amd64 && !arm64) || appengine || !gc || noasm +//go:build (!amd64 && !arm64) || !gc || noasm package zstd @@ -7,8 +7,8 @@ import ( "fmt" ) -// buildDtable will build the decoding table. -func (s *fseDecoder) buildDtable() error { +// fillDtable fills the decoding table; see buildDtable. +func (s *fseDecoder) fillDtable(ext *symbolExt) error { tableSize := uint32(1 << s.actualTableLog) highThreshold := tableSize - 1 symbolNext := s.stateTable[:256] @@ -56,7 +56,6 @@ func (s *fseDecoder) buildDtable() error { nextState := symbolNext[symbol] symbolNext[symbol] = nextState + 1 nBits := s.actualTableLog - byte(highBits(uint32(nextState))) - s.dt[u&maxTableMask].setNBits(nBits) newState := (nextState << nBits) - tableSize if newState > tableSize { return fmt.Errorf("newState (%d) outside table size (%d)", newState, tableSize) @@ -65,7 +64,7 @@ func (s *fseDecoder) buildDtable() error { // Seems weird that this is possible with nbits > 0. return fmt.Errorf("newState (%d) == oldState (%d) and no bits", newState, u) } - s.dt[u&maxTableMask].setNewState(newState) + s.dt[u&maxTableMask] = ext[symbol] | decSymbol(nBits) | decSymbol(newState)<<16 } } return nil diff --git a/vendor/github.com/klauspost/compress/zstd/fse_predefined.go b/vendor/github.com/klauspost/compress/zstd/fse_predefined.go index 474cb77d2b..7880b6fdfe 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_predefined.go +++ b/vendor/github.com/klauspost/compress/zstd/fse_predefined.go @@ -25,6 +25,10 @@ var ( // https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#the-codes-for-literals-lengths-match-lengths-and-offsets symbolTableX [3][]baseOffset + // symbolExtX holds symbolTableX as decSymbols carrying only addBits and + // baseline, which buildDtable merges into each state. + symbolExtX [3]symbolExt + // maxTableSymbol is the biggest supported symbol for each table type // https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#the-codes-for-literals-lengths-match-lengths-and-offsets maxTableSymbol = [3]uint8{tableLiteralLengths: maxLiteralLengthSymbol, tableOffsets: maxOffsetLengthSymbol, tableMatchLengths: maxMatchLengthSymbol} @@ -105,6 +109,15 @@ func initPredefined() { } fillBase(tmp[2:], 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30) symbolTableX[tableOffsets] = tmp + for i, t := range symbolTableX { + for j, lu := range t { + // fseDecoder.buildDtable takes maxBits from the last symbol. + if j > 0 && lu.addBits < t[j-1].addBits { + panic(fmt.Sprintf("table %v: addBits decreases at symbol %d", tableIndex(i), j)) + } + symbolExtX[i][j] = newDecSymbol(0, lu.addBits, 0, lu.baseLine) + } + } // Fill predefined tables and transform them. // https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#default-distributions @@ -135,10 +148,7 @@ func initPredefined() { -1, -1, -1, -1, -1}) f.symbolLen = 53 } - if err := f.buildDtable(); err != nil { - panic(fmt.Errorf("building table %v: %v", tableIndex(i), err)) - } - if err := f.transform(symbolTableX[i]); err != nil { + if err := f.buildDtable(&symbolExtX[i]); err != nil { panic(fmt.Errorf("building table %v: %v", tableIndex(i), err)) } f.preDefined = true diff --git a/vendor/github.com/klauspost/compress/zstd/hash.go b/vendor/github.com/klauspost/compress/zstd/hash.go index 5d73c21ebd..2b606a3b35 100644 --- a/vendor/github.com/klauspost/compress/zstd/hash.go +++ b/vendor/github.com/klauspost/compress/zstd/hash.go @@ -4,6 +4,8 @@ package zstd +import "runtime" + const ( prime3bytes = 506832829 prime4bytes = 2654435761 @@ -13,6 +15,12 @@ const ( prime8bytes = 0xcf1bbcdcb7a56463 ) +// hashPrimesInRegs reports whether encoders should keep the 64-bit hash primes +// in registers rather than as constants. The compiler rebuilds a constant at +// every use: one instruction on amd64, but up to 4 on arm64, which also has +// the registers to spare. See hashPrimes8and5. +const hashPrimesInRegs = runtime.GOARCH == "arm64" + // hashLen returns a hash of the lowest mls bytes of with length output bits. // mls must be >=3 and <=8. Any other value will return hash for 4 bytes. // length should always be < 32. @@ -33,3 +41,17 @@ func hashLen(u uint64, length, mls uint8) uint32 { return (uint32(u) * prime4bytes) >> (32 - length) } } + +// hashPrimes85 is a var so arm64 keeps the primes in registers instead of +// rebuilding each 64-bit prime with up to 4 instructions per use. +var hashPrimes85 = [2]uint64{prime8bytes, prime5bytes} + +// hashPrimes8and5 returns prime8bytes and prime5bytes for encoders that hash +// 8 and 5 bytes. Where registers are too scarce to hold them, it returns the +// constants. +func hashPrimes8and5() (prime8, prime5 uint64) { + if hashPrimesInRegs { + return hashPrimes85[0], hashPrimes85[1] + } + return prime8bytes, prime5bytes +} diff --git a/vendor/github.com/klauspost/compress/zstd/history.go b/vendor/github.com/klauspost/compress/zstd/history.go index 09164856d2..76e4c30f8d 100644 --- a/vendor/github.com/klauspost/compress/zstd/history.go +++ b/vendor/github.com/klauspost/compress/zstd/history.go @@ -24,16 +24,26 @@ type history struct { // when checking for matches in history ignoreBuffer int - windowSize int - allocFrameBuffer int // needed? - error bool - dict *dict + windowSize int + error bool + dict *dict + + // ring backs b when streaming (see ensureBlockRing). + // ext holds the part of the previous lap of ring still in the window, + // which precedes b[0] in the stream; nil when b holds all history. + // The previous lap is ring[extStart:extEnd]. + ring []byte + ext []byte + extStart int + extEnd int } // reset will reset the history to initial state of a frame. // The history must already have been initialized to the desired size. func (h *history) reset() { h.b = h.b[:0] + h.ext = nil + h.extStart, h.extEnd = 0, 0 h.ignoreBuffer = 0 h.error = false h.recentOffsets = [3]int{1, 4, 8} @@ -67,47 +77,40 @@ func (h *history) setDict(dict *dict) { h.huffTree = dict.litEnc } -// append bytes to history. -// This function will make sure there is space for it, -// if the buffer has been allocated with enough extra space. -func (h *history) append(b []byte) { - if len(b) >= h.windowSize { - // Discard all history by simply overwriting - h.b = h.b[:h.windowSize] - copy(h.b, b[len(b)-h.windowSize:]) - return - } - - // If there is space, append it. - if len(b) < cap(h.b)-len(h.b) { - h.b = append(h.b, b...) - return - } - - // Move data down so we only have window size left. - // We know we have less than window size in b at this point. - discard := len(b) + len(h.b) - h.windowSize - copy(h.b, h.b[discard:]) - h.b = h.b[:h.windowSize] - copy(h.b[h.windowSize-len(b):], b) -} - -// ensureBlock will ensure there is space for at least one block... -func (h *history) ensureBlock() { - if cap(h.b) < h.allocFrameBuffer { - h.b = make([]byte, 0, h.allocFrameBuffer) - return +// ensureBlockRing makes room for the next block without moving history, +// as the reference decoder does. b is a prefix of ring capped to one block +// of space. When a block no longer fits, the data written so far becomes +// ext and writing restarts at the front of ring. ext is trimmed so the +// block space ahead of b never overlaps it; with ring sized to window plus +// two blocks of space, b and ext together always hold a full window. +func (h *history) ensureBlockRing() { + // Room for the largest block plus the overrun of the fast copies. + ringBlockSpace := min(h.windowSize, maxCompressedBlockSize) + compressedBlockOverAlloc + size := h.windowSize + 2*ringBlockSpace + pos := len(h.b) + if cap(h.ring) < size || (pos > 0 && &h.b[0] != &h.ring[0]) { + // No ring yet, or b no longer lives in it: start one, keeping up + // to a window of what was decoded so far as the previous lap. + keep := min(pos, h.windowSize) + if cap(h.ring) < size { + h.ring = make([]byte, size) + } + h.ring = h.ring[:size] + copy(h.ring[size-keep:], h.b[pos-keep:]) + h.extStart, h.extEnd = size-keep, size + pos = 0 + } else if pos+ringBlockSpace > size { + // Wrap: everything written this lap becomes the previous lap. + h.extStart, h.extEnd = 0, pos + pos = 0 } - - avail := cap(h.b) - len(h.b) - if avail >= h.windowSize || avail > maxCompressedBlockSize { - return + h.ring = h.ring[:size] + end := pos + ringBlockSpace + h.b = h.ring[:pos:end] + h.ext = nil + if start := max(end, h.extStart); start < h.extEnd { + h.ext = h.ring[start:h.extEnd] } - // Move data down so we only have window size left. - // We know we have less than window size in b at this point. - discard := len(h.b) - h.windowSize - copy(h.b, h.b[discard:]) - h.b = h.b[:h.windowSize] } // append bytes to history without ever discarding anything. diff --git a/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_amd64.s b/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_amd64.s index e4c688efd3..95d7980786 100644 --- a/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_amd64.s @@ -1,8 +1,4 @@ -//go:build !appengine && gc && !purego && !noasm -// +build !appengine -// +build gc -// +build !purego -// +build !noasm +//go:build gc && !purego && !noasm #include "textflag.h" diff --git a/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s b/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s index e88cc2fc91..a09d43bd9f 100644 --- a/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s +++ b/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s @@ -1,8 +1,4 @@ -//go:build !appengine && gc && !purego && !noasm -// +build !appengine -// +build gc -// +build !purego -// +build !noasm +//go:build gc && !purego && !noasm #include "textflag.h" diff --git a/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_asm.go b/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_asm.go index d4221edf4f..8a0170dffa 100644 --- a/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_asm.go +++ b/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_asm.go @@ -1,9 +1,4 @@ -//go:build (amd64 || arm64) && !appengine && gc && !purego && !noasm -// +build amd64 arm64 -// +build !appengine -// +build gc -// +build !purego -// +build !noasm +//go:build (amd64 || arm64) && gc && !purego && !noasm package xxhash diff --git a/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_other.go b/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_other.go index 9576426e68..83fd719123 100644 --- a/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_other.go +++ b/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_other.go @@ -1,4 +1,4 @@ -//go:build (!amd64 && !arm64) || appengine || !gc || purego || noasm +//go:build (!amd64 && !arm64) || !gc || purego || noasm package xxhash diff --git a/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.go b/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.go index 1ed18927f9..1d89a6008e 100644 --- a/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.go +++ b/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.go @@ -1,4 +1,4 @@ -//go:build amd64 && !appengine && !noasm && gc +//go:build amd64 && !noasm && gc // Copyright 2019+ Klaus Post. All rights reserved. // License information can be found in the LICENSE file. diff --git a/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s b/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s index 0782b86e3d..760046f0d8 100644 --- a/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s @@ -1,6 +1,6 @@ // Copied from S2 implementation. -//go:build !appengine && !noasm && gc && !noasm +//go:build !noasm && gc #include "textflag.h" diff --git a/vendor/github.com/klauspost/compress/zstd/matchlen_generic.go b/vendor/github.com/klauspost/compress/zstd/matchlen_generic.go index 379746c96c..ec47656cb2 100644 --- a/vendor/github.com/klauspost/compress/zstd/matchlen_generic.go +++ b/vendor/github.com/klauspost/compress/zstd/matchlen_generic.go @@ -1,4 +1,4 @@ -//go:build !amd64 || appengine || !gc || noasm +//go:build !amd64 || !gc || noasm // Copyright 2019+ Klaus Post. All rights reserved. // License information can be found in the LICENSE file. diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec.go b/vendor/github.com/klauspost/compress/zstd/seqdec.go index d1a7732fcc..4b488e0cc6 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec.go @@ -76,6 +76,31 @@ type sequenceDecs struct { maxSyncLen uint64 } +// twoPassFarCode is the offset code from which a match counts as far: 20 is +// 1 MiB, the distance every measured arm64 core gains from. A Neoverse N1 +// (Graviton2, Ampere Altra) gains from 128 KiB too, but that needs a +// per-core threshold override; not worth the CPU-specific special case for +// a core class already being phased out of the fleet. +const twoPassFarCode = 20 + +// useTwoPass reports whether the block is decoded in two passes with the +// match-source prefetch (seqdec_arm64.go): a window of at least +// decodeTwoPassMinWindow and, unless the offset table is predefined or +// RLE, a share of at least twoPassMinFarShare of codes twoPassFarCode+. +func (s *sequenceDecs) useTwoPass() bool { + if s.windowSize < decodeTwoPassMinWindow { + return false + } + fse := s.offsets.fse + if fse != nil && !fse.preDefined && fse.actualTableLog != 0 && int(fse.symbolLen) <= twoPassFarCode { + // No symbol reaches twoPassFarCode, so codeShare can only return 0: + // skip finding it. + return false + } + share := fse.codeShare(twoPassFarCode) + return share < 0 || share >= twoPassMinFarShare +} + // initialize all 3 decoders from the stream input. func (s *sequenceDecs) initialize(br *bitReader, hist *history, out []byte) error { if err := s.litLengths.init(br); err != nil { @@ -240,11 +265,17 @@ func (s *sequenceDecs) execute(seqs []seqVals, hist []byte) error { return nil } +// decodeSyncGoOnly makes decodeSync skip the assembly decoder, so tests can +// compare it with the Go one in the same binary. +var decodeSyncGoOnly bool + // decode sequences from the stream with the provided history. func (s *sequenceDecs) decodeSync(hist []byte) error { - supported, err := s.decodeSyncSimple(hist) - if supported { - return err + if !decodeSyncGoOnly { + supported, err := s.decodeSyncSimple(hist) + if supported { + return err + } } br := s.br @@ -367,13 +398,13 @@ func (s *sequenceDecs) decodeSync(hist []byte) error { if mo > len(out)+len(hist) || mo > s.windowSize { if len(s.dict) == 0 { - return fmt.Errorf("match offset (%d) bigger than current history (%d)", mo, len(out)+len(hist)-startSize) + return fmt.Errorf("match offset (%d) bigger than current history (%d)", mo, len(out)-startSize) } // we may be in dictionary. dictO := len(s.dict) - (mo - (len(out) + len(hist))) if dictO < 0 || dictO >= len(s.dict) { - return fmt.Errorf("match offset (%d) bigger than current history (%d)", mo, len(out)+len(hist)-startSize) + return fmt.Errorf("match offset (%d) bigger than current history (%d)", mo, len(out)-startSize) } end := dictO + ml if end > len(s.dict) { diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go index 1281da885c..968f5b6a5e 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go @@ -1,8 +1,10 @@ -//go:build amd64 && !appengine && !noasm && gc +//go:build amd64 && !noasm && gc package zstd import ( + "math" + "github.com/klauspost/compress/internal/cpuinfo" ) @@ -10,6 +12,14 @@ import ( // in seqdec_asm.go; this file only declares the amd64 asm routines and the // dispatch helpers that pick the BMI2 / non-BMI2 (and 56-bit / safe) variant. +// See seqdec_arm64.go. Disabled here: on Sapphire Rapids, Granite Rapids +// and Zen 4 the two-pass decode costs 7-12% on real data; their caches +// already cover the offsets involved. +var ( + twoPassMinFarShare = 257 // never: the share is at most 256 + decodeTwoPassMinWindow = math.MaxInt +) + // sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm. // // Please refer to seqdec_generic.go for the reference implementation. diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s index 798d940231..6895ec59d9 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s @@ -1,6 +1,6 @@ // Code generated by command: go run gen.go -out ../seqdec.s -arch amd64,arm64 -pkg=zstd. DO NOT EDIT. -//go:build !appengine && !noasm && gc && !noasm +//go:build !noasm && gc // func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int // Requires: CMOV @@ -29,6 +29,7 @@ TEXT ·sequenceDecs_decode_amd64(SB), $40-32 MOVQ 144(AX), R11 MOVQ 152(AX), R12 MOVQ 160(AX), R13 + PCALIGN $0x40 sequenceDecs_decode_amd64_main_loop: MOVQ (SP), R14 @@ -354,6 +355,7 @@ TEXT ·sequenceDecs_decode_56_amd64(SB), $40-32 MOVQ 144(AX), R11 MOVQ 152(AX), R12 MOVQ 160(AX), R13 + PCALIGN $0x40 sequenceDecs_decode_56_amd64_main_loop: MOVQ (SP), R14 @@ -650,6 +652,7 @@ TEXT ·sequenceDecs_decode_bmi2(SB), $40-32 MOVQ 144(CX), R10 MOVQ 152(CX), R11 MOVQ 160(CX), R12 + PCALIGN $0x40 sequenceDecs_decode_bmi2_main_loop: MOVQ (SP), R13 @@ -957,6 +960,7 @@ TEXT ·sequenceDecs_decode_56_bmi2(SB), $40-32 MOVQ 144(CX), R10 MOVQ 152(CX), R11 MOVQ 160(CX), R12 + PCALIGN $0x40 sequenceDecs_decode_56_bmi2_main_loop: MOVQ (SP), R13 @@ -1209,21 +1213,33 @@ error_overread: RET // func sequenceDecs_executeSimple_amd64(ctx *executeAsmContext) bool -// Requires: SSE -TEXT ·sequenceDecs_executeSimple_amd64(SB), $8-9 +// Requires: MMX+, SSE +TEXT ·sequenceDecs_executeSimple_amd64(SB), $32-9 MOVQ ctx+0(FP), R10 MOVQ 8(R10), CX TESTQ CX, CX JZ empty_seqs MOVQ (R10), AX - MOVQ 24(R10), DX - MOVQ 32(R10), BX - MOVQ 80(R10), SI - MOVQ 104(R10), DI - MOVQ 120(R10), R8 - MOVQ 56(R10), R9 - MOVQ 64(R10), R10 - ADDQ R10, R9 + + // seqsEnd = seqsBase + 24 * len(seqs) if ctx.prefetch, else seqsBase (prefetch off) + MOVQ AX, DX + MOVBQZX 128(R10), R11 + TESTQ R11, R11 + JZ prefetch_off + LEAQ (CX)(CX*2), DX + SHLQ $0x03, DX + ADDQ AX, DX + +prefetch_off: + MOVQ DX, (SP) + MOVQ 24(R10), DX + MOVQ 32(R10), BX + MOVQ 80(R10), SI + MOVQ 104(R10), DI + MOVQ 120(R10), R8 + MOVQ 56(R10), R9 + MOVQ 64(R10), R10 + ADDQ R10, R9 // seqsBase += 24 * seqIndex LEAQ (DX)(DX*2), R11 @@ -1232,8 +1248,233 @@ TEXT ·sequenceDecs_executeSimple_amd64(SB), $8-9 // outBase += outPosition ADDQ DI, BX - + MOVQ BX, 8(SP) + MOVQ BX, R11 + SUBQ DI, R11 + MOVQ R11, 16(SP) + NEGQ R11 + ADDQ R9, R11 + MOVQ R11, 24(SP) + + // Prime the prefetch window + MOVQ (SP), R11 + LEAQ (AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_0 + MOVQ 8(SP), R12 + MOVQ (AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 16(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_0 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_0: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 8(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_0: + MOVQ (SP), R11 + LEAQ 24(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_1 + MOVQ 8(SP), R12 + MOVQ 24(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 40(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_1 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_1: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 32(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_1: + MOVQ (SP), R11 + LEAQ 48(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_2 + MOVQ 8(SP), R12 + MOVQ 48(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 64(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_2 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_2: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 56(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_2: + MOVQ (SP), R11 + LEAQ 72(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_3 + MOVQ 8(SP), R12 + MOVQ 72(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 88(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_3 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_3: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 80(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_3: + MOVQ (SP), R11 + LEAQ 96(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_4 + MOVQ 8(SP), R12 + MOVQ 96(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 112(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_4 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_4: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 104(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_4: + MOVQ (SP), R11 + LEAQ 120(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_5 + MOVQ 8(SP), R12 + MOVQ 120(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 136(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_5 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_5: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 128(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_5: + MOVQ (SP), R11 + LEAQ 144(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_6 + MOVQ 8(SP), R12 + MOVQ 144(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 160(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_6 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_6: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 152(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_6: + MOVQ (SP), R11 + LEAQ 168(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_7 + MOVQ 8(SP), R12 + MOVQ 168(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 184(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_7 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_7: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 176(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + PCALIGN $0x40 + +prefetch_skip_7: main_loop: + MOVQ (SP), R11 + LEAQ 192(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_8 + MOVQ 8(SP), R12 + MOVQ 192(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 208(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_8 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_8: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 200(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_8: MOVQ (AX), R11 MOVQ 16(AX), R12 MOVQ 8(AX), R13 @@ -1431,6 +1672,19 @@ copy_2: // Copy overlapping match copy_overlapping_match: ADDQ R13, DI + CMPQ R12, $0x10 + JB copy_slow_3 + MOVQ BX, R12 + ADDQ R13, BX + +copy_3: + MOVUPS (R11), X0 + MOVUPS X0, (R12) + ADDQ $0x10, R11 + ADDQ $0x10, R12 + SUBQ $0x10, R13 + JHI copy_3 + JMP handle_loop copy_slow_3: MOVBQZX (R11), R12 @@ -1476,21 +1730,33 @@ empty_seqs: RET // func sequenceDecs_executeSimple_safe_amd64(ctx *executeAsmContext) bool -// Requires: SSE -TEXT ·sequenceDecs_executeSimple_safe_amd64(SB), $8-9 +// Requires: MMX+, SSE +TEXT ·sequenceDecs_executeSimple_safe_amd64(SB), $32-9 MOVQ ctx+0(FP), R10 MOVQ 8(R10), CX TESTQ CX, CX JZ empty_seqs MOVQ (R10), AX - MOVQ 24(R10), DX - MOVQ 32(R10), BX - MOVQ 80(R10), SI - MOVQ 104(R10), DI - MOVQ 120(R10), R8 - MOVQ 56(R10), R9 - MOVQ 64(R10), R10 - ADDQ R10, R9 + + // seqsEnd = seqsBase + 24 * len(seqs) if ctx.prefetch, else seqsBase (prefetch off) + MOVQ AX, DX + MOVBQZX 128(R10), R11 + TESTQ R11, R11 + JZ prefetch_off + LEAQ (CX)(CX*2), DX + SHLQ $0x03, DX + ADDQ AX, DX + +prefetch_off: + MOVQ DX, (SP) + MOVQ 24(R10), DX + MOVQ 32(R10), BX + MOVQ 80(R10), SI + MOVQ 104(R10), DI + MOVQ 120(R10), R8 + MOVQ 56(R10), R9 + MOVQ 64(R10), R10 + ADDQ R10, R9 // seqsBase += 24 * seqIndex LEAQ (DX)(DX*2), R11 @@ -1499,8 +1765,233 @@ TEXT ·sequenceDecs_executeSimple_safe_amd64(SB), $8-9 // outBase += outPosition ADDQ DI, BX - + MOVQ BX, 8(SP) + MOVQ BX, R11 + SUBQ DI, R11 + MOVQ R11, 16(SP) + NEGQ R11 + ADDQ R9, R11 + MOVQ R11, 24(SP) + + // Prime the prefetch window + MOVQ (SP), R11 + LEAQ (AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_0 + MOVQ 8(SP), R12 + MOVQ (AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 16(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_0 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_0: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 8(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_0: + MOVQ (SP), R11 + LEAQ 24(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_1 + MOVQ 8(SP), R12 + MOVQ 24(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 40(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_1 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_1: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 32(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_1: + MOVQ (SP), R11 + LEAQ 48(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_2 + MOVQ 8(SP), R12 + MOVQ 48(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 64(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_2 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_2: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 56(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_2: + MOVQ (SP), R11 + LEAQ 72(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_3 + MOVQ 8(SP), R12 + MOVQ 72(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 88(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_3 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_3: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 80(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_3: + MOVQ (SP), R11 + LEAQ 96(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_4 + MOVQ 8(SP), R12 + MOVQ 96(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 112(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_4 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_4: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 104(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_4: + MOVQ (SP), R11 + LEAQ 120(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_5 + MOVQ 8(SP), R12 + MOVQ 120(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 136(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_5 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_5: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 128(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_5: + MOVQ (SP), R11 + LEAQ 144(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_6 + MOVQ 8(SP), R12 + MOVQ 144(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 160(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_6 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_6: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 152(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_6: + MOVQ (SP), R11 + LEAQ 168(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_7 + MOVQ 8(SP), R12 + MOVQ 168(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 184(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_7 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_7: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 176(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + PCALIGN $0x40 + +prefetch_skip_7: main_loop: + MOVQ (SP), R11 + LEAQ 192(AX), R12 + CMPQ R12, R11 + JAE prefetch_skip_8 + MOVQ 8(SP), R12 + MOVQ 192(AX), R11 + ADDQ R11, R12 + MOVQ R12, R13 + MOVQ 208(AX), R11 + SUBQ R11, R13 + MOVQ 16(SP), R11 + CMPQ R13, R11 + JAE prefetch_in_out_8 + MOVQ 24(SP), R11 + ADDQ R11, R13 + +prefetch_in_out_8: + PREFETCHT0 (R13) + PREFETCHT0 64(R13) + MOVQ 200(AX), R11 + ADDQ R11, R12 + MOVQ R12, 8(SP) + +prefetch_skip_8: MOVQ (AX), R11 MOVQ 16(AX), R12 MOVQ 8(AX), R13 @@ -1787,6 +2278,19 @@ copy_2_end: // Copy overlapping match copy_overlapping_match: ADDQ R13, DI + CMPQ R12, $0x10 + JB copy_slow_3 + +copy_3_blocks: + MOVUPS (R11), X0 + MOVUPS X0, (BX) + ADDQ $0x10, R11 + ADDQ $0x10, BX + SUBQ $0x10, R13 + CMPQ R13, $0x10 + JAE copy_3_blocks + TESTQ R13, R13 + JZ handle_loop copy_slow_3: MOVBQZX (R11), R12 @@ -1875,7 +2379,8 @@ TEXT ·sequenceDecs_decodeSync_amd64(SB), $96-32 ADDQ R10, 64(SP) // outBase += outPosition - ADDQ R12, R10 + ADDQ R12, R10 + PCALIGN $0x40 sequenceDecs_decodeSync_amd64_main_loop: MOVQ (SP), R13 @@ -2299,6 +2804,19 @@ copy_2: // Copy overlapping match copy_overlapping_match: ADDQ AX, R12 + CMPQ R13, $0x10 + JB copy_slow_3 + MOVQ R10, R13 + ADDQ AX, R10 + +copy_3: + MOVUPS (CX), X0 + MOVUPS X0, (R13) + ADDQ $0x10, CX + ADDQ $0x10, R13 + SUBQ $0x10, AX + JHI copy_3 + JMP handle_loop copy_slow_3: MOVBQZX (CX), R13 @@ -2429,7 +2947,8 @@ TEXT ·sequenceDecs_decodeSync_bmi2(SB), $96-32 ADDQ R9, 64(SP) // outBase += outPosition - ADDQ R11, R9 + ADDQ R11, R9 + PCALIGN $0x40 sequenceDecs_decodeSync_bmi2_main_loop: MOVQ (SP), R12 @@ -2835,6 +3354,19 @@ copy_2: // Copy overlapping match copy_overlapping_match: ADDQ CX, R11 + CMPQ R13, $0x10 + JB copy_slow_3 + MOVQ R9, R13 + ADDQ CX, R9 + +copy_3: + MOVUPS (R12), X0 + MOVUPS X0, (R13) + ADDQ $0x10, R12 + ADDQ $0x10, R13 + SUBQ $0x10, CX + JHI copy_3 + JMP handle_loop copy_slow_3: MOVBQZX (R12), R13 @@ -2965,7 +3497,8 @@ TEXT ·sequenceDecs_decodeSync_safe_amd64(SB), $96-32 ADDQ R10, 64(SP) // outBase += outPosition - ADDQ R12, R10 + ADDQ R12, R10 + PCALIGN $0x40 sequenceDecs_decodeSync_safe_amd64_main_loop: MOVQ (SP), R13 @@ -3478,6 +4011,19 @@ copy_2_end: // Copy overlapping match copy_overlapping_match: ADDQ AX, R12 + CMPQ R13, $0x10 + JB copy_slow_3 + +copy_3_blocks: + MOVUPS (CX), X0 + MOVUPS X0, (R10) + ADDQ $0x10, CX + ADDQ $0x10, R10 + SUBQ $0x10, AX + CMPQ AX, $0x10 + JAE copy_3_blocks + TESTQ AX, AX + JZ handle_loop copy_slow_3: MOVBQZX (CX), R13 @@ -3608,7 +4154,8 @@ TEXT ·sequenceDecs_decodeSync_safe_bmi2(SB), $96-32 ADDQ R9, 64(SP) // outBase += outPosition - ADDQ R11, R9 + ADDQ R11, R9 + PCALIGN $0x40 sequenceDecs_decodeSync_safe_bmi2_main_loop: MOVQ (SP), R12 @@ -4103,6 +4650,19 @@ copy_2_end: // Copy overlapping match copy_overlapping_match: ADDQ CX, R11 + CMPQ R13, $0x10 + JB copy_slow_3 + +copy_3_blocks: + MOVUPS (R12), X0 + MOVUPS X0, (R9) + ADDQ $0x10, R12 + ADDQ $0x10, R9 + SUBQ $0x10, CX + CMPQ CX, $0x10 + JAE copy_3_blocks + TESTQ CX, CX + JZ handle_loop copy_slow_3: MOVBQZX (R12), R13 diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.go b/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.go index 5ad262acff..5b911ab57e 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.go @@ -1,4 +1,4 @@ -//go:build arm64 && !appengine && !noasm && gc +//go:build arm64 && !noasm && gc package zstd @@ -7,6 +7,17 @@ package zstd // by the avo arm64 lowering printer) and the dispatch helpers. arm64 has no // BMI2, so each helper selects only between the 56-bit / safe variants. +// The synchronous decoder takes the two-pass path, and executeSimple +// prefetches, when the window is at least decodeTwoPassMinWindow and the +// block's offset table puts at least twoPassMinFarShare/256 of its +// sequences 128 KiB or more back (sequenceDecs.useTwoPass). Thresholds +// from the per-file N1 measurement in #1212; variables so tests can force +// either path. +var ( + twoPassMinFarShare = 46 + decodeTwoPassMinWindow = 1 << 20 +) + // sequenceDecs_decode_arm64 implements the main loop of sequenceDecs in arm64 asm. // // Please refer to seqdec_generic.go for the reference implementation. diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.s b/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.s index 56391bfc18..d1d16588c4 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.s +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.s @@ -1,35 +1,36 @@ // Code generated by command: go run gen.go -out ../seqdec.s -arch amd64,arm64 -pkg=zstd. DO NOT EDIT. // EXPERIMENTAL arm64 output lowered from an amd64 avo program. -//go:build arm64 && (!appengine && !noasm && gc && !noasm) +//go:build arm64 && (!noasm && gc) // func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int // Requires: CMOV TEXT ·sequenceDecs_decode_arm64(SB), $40-32 - MOVD br+8(FP), R1 - MOVD 24(R1), R2 - MOVBU 40(R1), R3 - MOVD (R1), R0 - MOVD 32(R1), R5 - ADD R5, R0, R0 - MOVD R0, 8(RSP) - MOVD ctx+16(FP), R0 - MOVD 72(R0), R6 - MOVD 80(R0), R7 - MOVD 88(R0), R8 - MOVD (R0), R1 - MOVD R1, 16(RSP) - MOVD 24(R0), R1 - MOVD R1, 24(RSP) - MOVD 48(R0), R1 - MOVD R1, 32(RSP) - MOVD 96(R0), R1 - MOVD R1, 40(RSP) - MOVD 104(R0), R9 - MOVD s+0(FP), R0 - MOVD 144(R0), R10 - MOVD 152(R0), R11 - MOVD 160(R0), R12 + MOVD br+8(FP), R1 + MOVD 24(R1), R2 + MOVBU 40(R1), R3 + MOVD (R1), R0 + MOVD 32(R1), R5 + ADD R5, R0, R0 + MOVD R0, 8(RSP) + MOVD ctx+16(FP), R0 + MOVD 72(R0), R6 + MOVD 80(R0), R7 + MOVD 88(R0), R8 + MOVD (R0), R1 + MOVD R1, 16(RSP) + MOVD 24(R0), R1 + MOVD R1, 24(RSP) + MOVD 48(R0), R1 + MOVD R1, 32(RSP) + MOVD 96(R0), R1 + MOVD R1, 40(RSP) + MOVD 104(R0), R9 + MOVD s+0(FP), R0 + MOVD 144(R0), R10 + MOVD 152(R0), R11 + MOVD 160(R0), R12 + PCALIGN $0x40 sequenceDecs_decode_amd64_main_loop: MOVD 8(RSP), R13 @@ -326,30 +327,31 @@ error_overread: // func sequenceDecs_decode_56_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int // Requires: CMOV TEXT ·sequenceDecs_decode_56_arm64(SB), $40-32 - MOVD br+8(FP), R1 - MOVD 24(R1), R2 - MOVBU 40(R1), R3 - MOVD (R1), R0 - MOVD 32(R1), R5 - ADD R5, R0, R0 - MOVD R0, 8(RSP) - MOVD ctx+16(FP), R0 - MOVD 72(R0), R6 - MOVD 80(R0), R7 - MOVD 88(R0), R8 - MOVD (R0), R1 - MOVD R1, 16(RSP) - MOVD 24(R0), R1 - MOVD R1, 24(RSP) - MOVD 48(R0), R1 - MOVD R1, 32(RSP) - MOVD 96(R0), R1 - MOVD R1, 40(RSP) - MOVD 104(R0), R9 - MOVD s+0(FP), R0 - MOVD 144(R0), R10 - MOVD 152(R0), R11 - MOVD 160(R0), R12 + MOVD br+8(FP), R1 + MOVD 24(R1), R2 + MOVBU 40(R1), R3 + MOVD (R1), R0 + MOVD 32(R1), R5 + ADD R5, R0, R0 + MOVD R0, 8(RSP) + MOVD ctx+16(FP), R0 + MOVD 72(R0), R6 + MOVD 80(R0), R7 + MOVD 88(R0), R8 + MOVD (R0), R1 + MOVD R1, 16(RSP) + MOVD 24(R0), R1 + MOVD R1, 24(RSP) + MOVD 48(R0), R1 + MOVD R1, 32(RSP) + MOVD 96(R0), R1 + MOVD R1, 40(RSP) + MOVD 104(R0), R9 + MOVD s+0(FP), R0 + MOVD 144(R0), R10 + MOVD 152(R0), R11 + MOVD 160(R0), R12 + PCALIGN $0x40 sequenceDecs_decode_56_amd64_main_loop: MOVD 8(RSP), R13 @@ -620,13 +622,25 @@ error_overread: // skipped sequenceDecs_decode_56_bmi2 (generic twin preferred on arm64) // func sequenceDecs_executeSimple_amd64(ctx *executeAsmContext) bool -// Requires: SSE -TEXT ·sequenceDecs_executeSimple_arm64(SB), $8-9 +// Requires: MMX+, SSE +TEXT ·sequenceDecs_executeSimple_arm64(SB), $32-9 MOVD ctx+0(FP), R9 MOVD 8(R9), R1 TST R1, R1 BEQ empty_seqs MOVD (R9), R0 + + // seqsEnd = seqsBase + 24 * len(seqs) if ctx.prefetch, else seqsBase (prefetch off) + MOVD R0, R2 + MOVBU 128(R9), R10 + TST R10, R10 + BEQ prefetch_off + ADD R1<<1, R1, R2 + LSL $0x03, R2, R2 + ADD R0, R2, R2 + +prefetch_off: + MOVD R2, 8(RSP) MOVD 24(R9), R2 MOVD 32(R9), R3 MOVD 80(R9), R5 @@ -642,9 +656,234 @@ TEXT ·sequenceDecs_executeSimple_arm64(SB), $8-9 ADD R10, R0, R0 // outBase += outPosition - ADD R6, R3, R3 - + ADD R6, R3, R3 + MOVD R3, 16(RSP) + MOVD R3, R10 + SUB R6, R10, R10 + MOVD R10, 24(RSP) + NEG R10, R10 + ADD R8, R10, R10 + MOVD R10, 32(RSP) + + // Prime the prefetch window + MOVD 8(RSP), R10 + MOVD R0, R11 + CMP R10, R11 + BHS prefetch_skip_0 + MOVD 16(RSP), R11 + MOVD (R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 16(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_0 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_0: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 8(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_0: + MOVD 8(RSP), R10 + ADD $24, R0, R11 + CMP R10, R11 + BHS prefetch_skip_1 + MOVD 16(RSP), R11 + MOVD 24(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 40(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_1 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_1: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 32(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_1: + MOVD 8(RSP), R10 + ADD $48, R0, R11 + CMP R10, R11 + BHS prefetch_skip_2 + MOVD 16(RSP), R11 + MOVD 48(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 64(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_2 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_2: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 56(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_2: + MOVD 8(RSP), R10 + ADD $72, R0, R11 + CMP R10, R11 + BHS prefetch_skip_3 + MOVD 16(RSP), R11 + MOVD 72(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 88(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_3 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_3: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 80(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_3: + MOVD 8(RSP), R10 + ADD $96, R0, R11 + CMP R10, R11 + BHS prefetch_skip_4 + MOVD 16(RSP), R11 + MOVD 96(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 112(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_4 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_4: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 104(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_4: + MOVD 8(RSP), R10 + ADD $120, R0, R11 + CMP R10, R11 + BHS prefetch_skip_5 + MOVD 16(RSP), R11 + MOVD 120(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 136(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_5 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_5: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 128(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_5: + MOVD 8(RSP), R10 + ADD $144, R0, R11 + CMP R10, R11 + BHS prefetch_skip_6 + MOVD 16(RSP), R11 + MOVD 144(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 160(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_6 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_6: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 152(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_6: + MOVD 8(RSP), R10 + ADD $168, R0, R11 + CMP R10, R11 + BHS prefetch_skip_7 + MOVD 16(RSP), R11 + MOVD 168(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 184(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_7 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_7: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 176(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + PCALIGN $0x40 + +prefetch_skip_7: main_loop: + MOVD 8(RSP), R10 + ADD $192, R0, R11 + CMP R10, R11 + BHS prefetch_skip_8 + MOVD 16(RSP), R11 + MOVD 192(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 208(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_8 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_8: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 200(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_8: MOVD (R0), R10 MOVD 16(R0), R11 MOVD 8(R0), R12 @@ -861,7 +1100,20 @@ copy_2: // Copy overlapping match copy_overlapping_match: - ADD R12, R6, R6 + ADD R12, R6, R6 + CMP $0x10, R11 + BLO copy_slow_3 + MOVD R3, R11 + ADD R12, R3, R3 + +copy_3: + FMOVQ (R10), F0 + FMOVQ F0, (R11) + ADD $0x10, R10, R10 + ADD $0x10, R11, R11 + SUBS $0x10, R12, R12 + BHI copy_3 + JMP handle_loop copy_slow_3: MOVBU (R10), R11 @@ -912,13 +1164,25 @@ empty_seqs: RET // func sequenceDecs_executeSimple_safe_amd64(ctx *executeAsmContext) bool -// Requires: SSE -TEXT ·sequenceDecs_executeSimple_safe_arm64(SB), $8-9 +// Requires: MMX+, SSE +TEXT ·sequenceDecs_executeSimple_safe_arm64(SB), $32-9 MOVD ctx+0(FP), R9 MOVD 8(R9), R1 TST R1, R1 BEQ empty_seqs MOVD (R9), R0 + + // seqsEnd = seqsBase + 24 * len(seqs) if ctx.prefetch, else seqsBase (prefetch off) + MOVD R0, R2 + MOVBU 128(R9), R10 + TST R10, R10 + BEQ prefetch_off + ADD R1<<1, R1, R2 + LSL $0x03, R2, R2 + ADD R0, R2, R2 + +prefetch_off: + MOVD R2, 8(RSP) MOVD 24(R9), R2 MOVD 32(R9), R3 MOVD 80(R9), R5 @@ -934,9 +1198,234 @@ TEXT ·sequenceDecs_executeSimple_safe_arm64(SB), $8-9 ADD R10, R0, R0 // outBase += outPosition - ADD R6, R3, R3 - + ADD R6, R3, R3 + MOVD R3, 16(RSP) + MOVD R3, R10 + SUB R6, R10, R10 + MOVD R10, 24(RSP) + NEG R10, R10 + ADD R8, R10, R10 + MOVD R10, 32(RSP) + + // Prime the prefetch window + MOVD 8(RSP), R10 + MOVD R0, R11 + CMP R10, R11 + BHS prefetch_skip_0 + MOVD 16(RSP), R11 + MOVD (R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 16(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_0 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_0: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 8(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_0: + MOVD 8(RSP), R10 + ADD $24, R0, R11 + CMP R10, R11 + BHS prefetch_skip_1 + MOVD 16(RSP), R11 + MOVD 24(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 40(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_1 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_1: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 32(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_1: + MOVD 8(RSP), R10 + ADD $48, R0, R11 + CMP R10, R11 + BHS prefetch_skip_2 + MOVD 16(RSP), R11 + MOVD 48(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 64(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_2 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_2: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 56(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_2: + MOVD 8(RSP), R10 + ADD $72, R0, R11 + CMP R10, R11 + BHS prefetch_skip_3 + MOVD 16(RSP), R11 + MOVD 72(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 88(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_3 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_3: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 80(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_3: + MOVD 8(RSP), R10 + ADD $96, R0, R11 + CMP R10, R11 + BHS prefetch_skip_4 + MOVD 16(RSP), R11 + MOVD 96(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 112(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_4 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_4: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 104(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_4: + MOVD 8(RSP), R10 + ADD $120, R0, R11 + CMP R10, R11 + BHS prefetch_skip_5 + MOVD 16(RSP), R11 + MOVD 120(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 136(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_5 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_5: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 128(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_5: + MOVD 8(RSP), R10 + ADD $144, R0, R11 + CMP R10, R11 + BHS prefetch_skip_6 + MOVD 16(RSP), R11 + MOVD 144(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 160(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_6 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_6: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 152(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_6: + MOVD 8(RSP), R10 + ADD $168, R0, R11 + CMP R10, R11 + BHS prefetch_skip_7 + MOVD 16(RSP), R11 + MOVD 168(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 184(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_7 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_7: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 176(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + PCALIGN $0x40 + +prefetch_skip_7: main_loop: + MOVD 8(RSP), R10 + ADD $192, R0, R11 + CMP R10, R11 + BHS prefetch_skip_8 + MOVD 16(RSP), R11 + MOVD 192(R0), R10 + ADD R10, R11, R11 + MOVD R11, R12 + MOVD 208(R0), R10 + SUB R10, R12, R12 + MOVD 24(RSP), R10 + CMP R10, R12 + BHS prefetch_in_out_8 + MOVD 32(RSP), R10 + ADD R10, R12, R12 + +prefetch_in_out_8: + PRFM (R12), PLDL1KEEP + PRFM 64(R12), PLDL1KEEP + MOVD 200(R0), R10 + ADD R10, R11, R11 + MOVD R11, 16(RSP) + +prefetch_skip_8: MOVD (R0), R10 MOVD 16(R0), R11 MOVD 8(R0), R12 @@ -1263,6 +1752,19 @@ copy_2_end: // Copy overlapping match copy_overlapping_match: ADD R12, R6, R6 + CMP $0x10, R11 + BLO copy_slow_3 + +copy_3_blocks: + FMOVQ (R10), F0 + FMOVQ F0, (R3) + ADD $0x10, R10, R10 + ADD $0x10, R3, R3 + SUB $0x10, R12, R12 + CMP $0x10, R12 + BHS copy_3_blocks + TST R12, R12 + BEQ handle_loop copy_slow_3: MOVBU (R10), R11 @@ -1360,7 +1862,8 @@ TEXT ·sequenceDecs_decodeSync_arm64(SB), $96-32 MOVD R16, 72(RSP) // outBase += outPosition - ADD R11, R9, R9 + ADD R11, R9, R9 + PCALIGN $0x40 sequenceDecs_decodeSync_amd64_main_loop: MOVD 8(RSP), R12 @@ -1794,7 +2297,20 @@ copy_2: // Copy overlapping match copy_overlapping_match: - ADD R0, R11, R11 + ADD R0, R11, R11 + CMP $0x10, R12 + BLO copy_slow_3 + MOVD R9, R12 + ADD R0, R9, R9 + +copy_3: + FMOVQ (R1), F0 + FMOVQ F0, (R12) + ADD $0x10, R1, R1 + ADD $0x10, R12, R12 + SUBS $0x10, R0, R0 + BHI copy_3 + JMP handle_loop copy_slow_3: MOVBU (R1), R12 @@ -1943,7 +2459,8 @@ TEXT ·sequenceDecs_decodeSync_safe_arm64(SB), $96-32 MOVD R16, 72(RSP) // outBase += outPosition - ADD R11, R9, R9 + ADD R11, R9, R9 + PCALIGN $0x40 sequenceDecs_decodeSync_safe_amd64_main_loop: MOVD 8(RSP), R12 @@ -2486,6 +3003,19 @@ copy_2_end: // Copy overlapping match copy_overlapping_match: ADD R0, R11, R11 + CMP $0x10, R12 + BLO copy_slow_3 + +copy_3_blocks: + FMOVQ (R1), F0 + FMOVQ F0, (R9) + ADD $0x10, R1, R1 + ADD $0x10, R9, R9 + SUB $0x10, R0, R0 + CMP $0x10, R0 + BHS copy_3_blocks + TST R0, R0 + BEQ handle_loop copy_slow_3: MOVBU (R1), R12 diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_asm.go b/vendor/github.com/klauspost/compress/zstd/seqdec_asm.go index 94559c459a..543c49074b 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_asm.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_asm.go @@ -1,4 +1,4 @@ -//go:build (amd64 || arm64) && !appengine && !noasm && gc +//go:build (amd64 || arm64) && !noasm && gc package zstd @@ -55,6 +55,9 @@ type executeAsmContext struct { outPosition int litPosition int windowSize int + // prefetch enables the match-source prefetch in the execute loop; see + // sequenceDecs.useTwoPass. + prefetch bool } const noError = 0 @@ -95,10 +98,15 @@ const errorOverread = 6 // See #1168. An asan-instrumented fuzz job (see .github/workflows/go.yml) // covers the extended-copy path, which -race and plain fuzzing cannot. func (s *sequenceDecs) useSafeDecodeSync() bool { - if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc { + // A block never produces more than maxBlockSize bytes. + maxBlockSize := min(s.windowSize, maxCompressedBlockSize) + if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxBlockSize+compressedBlockOverAlloc { return true } - if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) { + // The block, not the rest of the frame, must fit with the slack: a + // buffer sized exactly to the frame needs the safe copies only for the + // final block(s). + if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < min(int(s.maxSyncLen), maxBlockSize) { return true } if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc { @@ -112,7 +120,8 @@ func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) { if len(s.dict) > 0 { return false, nil } - if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSize { + maxBlockSize := min(s.windowSize, maxCompressedBlockSize) + if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxBlockSize { return false, nil } @@ -120,8 +129,6 @@ func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) { br := s.br - maxBlockSize := min(s.windowSize, maxCompressedBlockSize) - ctx := decodeSyncAsmContext{ llTable: s.litLengths.fse.dt[:maxTablesize], mlTable: s.matchLengths.fse.dt[:maxTablesize], @@ -154,7 +161,7 @@ func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) { case errorMatchOffTooBig: return true, fmt.Errorf("match offset (%d) bigger than current history (%d)", - ctx.mo, ctx.outPosition+len(hist)-startSize) + ctx.mo, ctx.outPosition-startSize) case errorNotEnoughLiterals: return true, fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", @@ -267,8 +274,10 @@ func (s *sequenceDecs) decode(seqs []seqVals) error { // executeSimple handles cases when dictionary is not used. func (s *sequenceDecs) executeSimple(seqs []seqVals, hist []byte) error { - // Ensure we have enough output size... - if len(s.out)+s.seqSize+compressedBlockOverAlloc > cap(s.out) { + // Grow only if the block does not fit. Lacking just the slack is + // handled by the safe copies below, so a buffer sized exactly to the + // frame is not reallocated and copied on its last block. + if len(s.out)+s.seqSize > cap(s.out) { addBytes := s.seqSize + len(s.out) + compressedBlockOverAlloc s.out = append(s.out, make([]byte, addBytes)...) s.out = s.out[:len(s.out)-addBytes] @@ -290,10 +299,12 @@ func (s *sequenceDecs) executeSimple(seqs []seqVals, hist []byte) error { litPosition: 0, literals: s.literals, windowSize: s.windowSize, + prefetch: s.useTwoPass(), } - // useSafe avoids overwriting the output buffer when the literals slice has - // not been allocated with the required over-allocation slack. - useSafe := cap(s.literals) < len(s.literals)+compressedBlockOverAlloc + // useSafe avoids writing past either buffer when the literals or the + // output lack the extended copies' over-allocation slack. + useSafe := cap(s.literals) < len(s.literals)+compressedBlockOverAlloc || + cap(out) < len(out)+compressedBlockOverAlloc ok := executeSimpleAsm(&ctx, useSafe) if !ok { diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go b/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go index 8a3db6ba22..efeed96185 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go @@ -1,10 +1,17 @@ -//go:build (!amd64 && !arm64) || appengine || !gc || noasm +//go:build (!amd64 && !arm64) || !gc || noasm package zstd import ( "fmt" "io" + "math" +) + +// See seqdec_arm64.go; the pure Go decoder has neither path. +var ( + twoPassMinFarShare = 257 // never: the share is at most 256 + decodeTwoPassMinWindow = math.MaxInt ) // decode sequences from the stream with the provided history but without dictionary. diff --git a/vendor/github.com/klauspost/compress/zstd/seqenc.go b/vendor/github.com/klauspost/compress/zstd/seqenc.go index 65045eabdd..6fb8885992 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqenc.go +++ b/vendor/github.com/klauspost/compress/zstd/seqenc.go @@ -110,3 +110,50 @@ func ofCode(offset uint32) uint8 { // A valid offset will always be > 0. return uint8(bits.Len32(offset) - 1) } + +// newDictSeqEncoder builds an encoder for a dictionary sequence table. +// Returns nil if the table is missing or unusable. +func newDictSeqEncoder(src *fseDecoder, t tableIndex) *fseEncoder { + if src == nil || src.symbolLen == 0 { + return nil + } + var e fseEncoder + e.norm = src.norm + e.symbolLen = src.symbolLen + e.actualTableLog = src.actualTableLog + if e.buildCTable() != nil { + return nil + } + e.setBits(bitTables[t]) + return &e +} + +// seedPrevFromDict loads the dictionary sequence tables as the "previous" +// encoders, so the first block can use repeat mode. +func (s *seqCoders) seedPrevFromDict(d *dict) { + seed := func(dst, src *fseEncoder) { + if src == nil { + return + } + ct := dst.ct + dst.symbolLen = src.symbolLen + dst.actualTableLog = src.actualTableLog + dst.maxBits = src.maxBits + dst.zeroBits = src.zeroBits + dst.useRLE = false + dst.preDefined = false + dst.reUsed = true + dst.norm = src.norm + // tableSymbol is only used while building, so it is not copied. + ct.stateTable = append(ct.stateTable[:0], src.ct.stateTable...) + if cap(ct.symbolTT) < len(src.ct.symbolTT) { + ct.symbolTT = make([]symbolTransform, len(src.ct.symbolTT)) + } + ct.symbolTT = ct.symbolTT[:len(src.ct.symbolTT)] + copy(ct.symbolTT, src.ct.symbolTT[:src.symbolLen]) + dst.ct = ct + } + seed(s.llPrev, d.llEnc) + seed(s.mlPrev, d.mlEnc) + seed(s.ofPrev, d.ofEnc) +} diff --git a/vendor/github.com/klauspost/compress/zstd/simple_go124.go b/vendor/github.com/klauspost/compress/zstd/simple.go similarity index 98% rename from vendor/github.com/klauspost/compress/zstd/simple_go124.go rename to vendor/github.com/klauspost/compress/zstd/simple.go index 2efc0497bf..9b6c39ac00 100644 --- a/vendor/github.com/klauspost/compress/zstd/simple_go124.go +++ b/vendor/github.com/klauspost/compress/zstd/simple.go @@ -1,8 +1,6 @@ // Copyright 2025+ Klaus Post. All rights reserved. // License information can be found in the LICENSE file. -//go:build go1.24 - package zstd import ( diff --git a/vendor/github.com/klauspost/compress/zstd/snappy.go b/vendor/github.com/klauspost/compress/zstd/snappy.go index 36c56f36d7..06ed593ea4 100644 --- a/vendor/github.com/klauspost/compress/zstd/snappy.go +++ b/vendor/github.com/klauspost/compress/zstd/snappy.go @@ -69,6 +69,10 @@ var ( // No CRC value is being generated and not all CRC values of the Snappy stream are checked. // However, it provides really fast recompression of Snappy streams. // The converter can be reused to avoid allocations, even after errors. +// +// Deprecated: Decode the stream with s2.NewReader, which reads Snappy streams, +// and compress the output with an Encoder. This validates the input and +// compresses much better. type SnappyConverter struct { r io.Reader err error @@ -373,6 +377,14 @@ func decodeSnappy(blk *blockEnc, src []byte) error { offset = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24 } + // A zstd match is at least zstdMinMatch bytes. A shorter copy + // cannot be represented as a sequence and would underflow the + // matchLen computation below, producing an out-of-range match + // length code. + if length < zstdMinMatch { + return ErrSnappyCorrupt + } + if offset <= 0 || blk.size+lits < int(offset) /*|| length > len(blk)-d */ { println("offset <= 0 || blk.size+lits < int(offset)", offset, blk.size+lits, int(offset), blk.size, lits) diff --git a/vendor/github.com/mattn/go-sqlite3/callback.go b/vendor/github.com/mattn/go-sqlite3/callback.go index b7df2be7f6..7dcf08d1f4 100644 --- a/vendor/github.com/mattn/go-sqlite3/callback.go +++ b/vendor/github.com/mattn/go-sqlite3/callback.go @@ -29,7 +29,6 @@ import ( "math" "reflect" "sync" - "sync/atomic" "unsafe" ) @@ -104,27 +103,28 @@ type handleVal struct { val any } -var handleLock sync.Mutex -var handleVals atomic.Value // stores map[unsafe.Pointer]handleVal +// handleVals maps unsafe.Pointer handles to handleVal. A sync.Map keeps +// lookups lock-free on the hot callback path while insertion and removal +// stay O(1); the previous copy-on-write map made every registration copy +// the whole table, so opening N connections (each registering several +// functions) was quadratic in time and allocation. +var handleVals sync.Map func newHandle(db *SQLiteConn, v any) unsafe.Pointer { - val := handleVal{db: db, val: v} var p unsafe.Pointer = C.malloc(C.size_t(1)) if p == nil { panic("can't allocate 'cgo-pointer hack index pointer': ptr == nil") } - - handleLock.Lock() - defer handleLock.Unlock() - - next := cloneHandleVals(len(loadHandleVals()) + 1) - next[p] = val - handleVals.Store(next) + handleVals.Store(p, handleVal{db: db, val: v}) return p } func lookupHandleVal(handle unsafe.Pointer) handleVal { - return loadHandleVals()[handle] + v, ok := handleVals.Load(handle) + if !ok { + return handleVal{} + } + return v.(handleVal) } func lookupHandle(handle unsafe.Pointer) any { @@ -134,55 +134,20 @@ func lookupHandle(handle unsafe.Pointer) any { // deleteHandle releases a single handle created by newHandle. It is a no-op // if the handle is unknown (e.g. already released). func deleteHandle(handle unsafe.Pointer) { - handleLock.Lock() - defer handleLock.Unlock() - - current := loadHandleVals() - if _, ok := current[handle]; !ok { - return + if _, ok := handleVals.LoadAndDelete(handle); ok { + C.free(handle) } - next := make(map[unsafe.Pointer]handleVal, len(current)-1) - for h, v := range current { - if h == handle { - continue - } - next[h] = v - } - handleVals.Store(next) - C.free(handle) } func deleteHandles(db *SQLiteConn) { - handleLock.Lock() - defer handleLock.Unlock() - - current := loadHandleVals() - if len(current) == 0 { - return - } - - next := make(map[unsafe.Pointer]handleVal, len(current)) - for handle, val := range current { - if val.db == db { - C.free(handle) - continue + handleVals.Range(func(handle, val any) bool { + if val.(handleVal).db == db { + if _, ok := handleVals.LoadAndDelete(handle); ok { + C.free(handle.(unsafe.Pointer)) + } } - next[handle] = val - } - handleVals.Store(next) -} - -func loadHandleVals() map[unsafe.Pointer]handleVal { - m, _ := handleVals.Load().(map[unsafe.Pointer]handleVal) - return m -} - -func cloneHandleVals(size int) map[unsafe.Pointer]handleVal { - next := make(map[unsafe.Pointer]handleVal, size) - for handle, val := range loadHandleVals() { - next[handle] = val - } - return next + return true + }) } // This is only here so that tests can refer to it. diff --git a/vendor/github.com/mattn/go-sqlite3/convert.go b/vendor/github.com/mattn/go-sqlite3/convert.go index f7a9dcd725..a77fc4c0f1 100644 --- a/vendor/github.com/mattn/go-sqlite3/convert.go +++ b/vendor/github.com/mattn/go-sqlite3/convert.go @@ -159,7 +159,7 @@ func convertAssign(dest, src any) error { } dpv := reflect.ValueOf(dest) - if dpv.Kind() != reflect.Ptr { + if dpv.Kind() != reflect.Pointer { return errors.New("destination not a pointer") } if dpv.IsNil() { @@ -192,7 +192,7 @@ func convertAssign(dest, src any) error { // This also allows scanning into user defined types such as "type Int int64". // For symmetry, also check for string destination types. switch dv.Kind() { - case reflect.Ptr: + case reflect.Pointer: if src == nil { dv.Set(reflect.Zero(dv.Type())) return nil diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3.go b/vendor/github.com/mattn/go-sqlite3/sqlite3.go index c30bb8f1e7..c519de7693 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3.go @@ -220,6 +220,25 @@ _sqlite3_prepare_v2_internal(sqlite3 *db, const char *zSql, int nBytes, sqlite3_ } #endif +// Steps a statement once and reports the post-step column count and the +// cumulative re-prepare count, in a single CGO crossing. Used for the +// eager first step of cached statements: only after the first step is an +// expired statement guaranteed to have been re-prepared following a +// schema change, so only then do the column count and metadata describe +// the current schema. +static int +_sqlite3_step_columns(sqlite3_stmt* stmt, int* ncol, int* repreps) +{ + int rv = _sqlite3_step_internal(stmt); + *ncol = sqlite3_column_count(stmt); +#ifdef SQLITE_STMTSTATUS_REPREPARE + *repreps = sqlite3_stmt_status(stmt, SQLITE_STMTSTATUS_REPREPARE, 0); +#else + *repreps = -1; +#endif + return rv; +} + void _sqlite3_result_text(sqlite3_context* ctx, const char* s, int n) { sqlite3_result_text(ctx, s, n, &free); } @@ -445,8 +464,11 @@ type SQLiteDriver struct { // SQLiteConn implements driver.Conn. type SQLiteConn struct { - mu sync.Mutex - db *C.sqlite3 + mu sync.Mutex + db *C.sqlite3 + // activeRows identifies the cancellable Rows currently calling sqlite3_step. + // It is guarded by mu so a stale cancellation cannot interrupt later work. + activeRows *SQLiteRows loc *time.Location txlock string funcs []*functionInfo @@ -477,6 +499,10 @@ type SQLiteStmt struct { namedParams map[string][3]int cacheKey string metadata *sqliteStmtMetadata + // repreps is the statement's cumulative re-prepare count observed + // at the last eager first step; a change means SQLite re-prepared + // the statement after a schema change and metadata must be rebuilt. + repreps C.int } type sqliteStmtMetadata struct { @@ -492,14 +518,18 @@ type SQLiteResult struct { // SQLiteRows implements driver.Rows. type SQLiteRows struct { - s *SQLiteStmt - nc int32 // Number of columns - cls bool // True if we need to close the parent statement in Close - cols []string - decltype []string - colvals *C.sqlite3_go_col - ctx context.Context // no better alternative to pass context into Next() method - closemu sync.Mutex + s *SQLiteStmt + nc int32 // Number of columns + cls bool // True if we need to close the parent statement in Close + cols []string + decltype []string + colvals *C.sqlite3_go_col + ctx context.Context // no better alternative to pass context into Next() method + stopCancellation func() bool + // pendingStep buffers the result of the eager first step taken for + // cached statements in query(); -1 when no step is buffered. + pendingStep C.int + closemu sync.Mutex } type functionInfo struct { @@ -968,7 +998,7 @@ func (c *SQLiteConn) exec(ctx context.Context, query string, args []driver.Named na := s.NumInput() if len(args)-start < na { s.Close() - return nil, fmt.Errorf("not enough args to execute query: want %d got %d", na, len(args)) + return nil, fmt.Errorf("not enough args to execute query: want %d got %d", na, len(args)-start) } stmtArgs := stmtArgs(args, start, na) res, err = s.(*SQLiteStmt).exec(ctx, stmtArgs) @@ -1609,6 +1639,18 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { return nil, err } + if conn.stmtCacheEnabled && int(C.sqlite3_libversion_number()) < 3020000 { + // Schema-change detection for cached statements relies on + // SQLITE_STMTSTATUS_REPREPARE (3.20.0); with an older runtime + // library run without the cache rather than risk serving + // statements whose metadata a schema change has expired. The + // compile-time check in _sqlite3_step_columns is not enough: + // with USE_LIBSQLITE3 the header and the runtime library can + // differ. + conn.stmtCache = nil + conn.stmtCacheEnabled = false + } + exec := func(s string) error { cs := C.CString(s) rv := C.sqlite3_exec(db, cs, nil, nil, nil) @@ -2354,13 +2396,24 @@ func (s *SQLiteStmt) query(ctx context.Context, args []driver.NamedValue) (drive } rows := &SQLiteRows{ - s: s, - nc: int32(C.sqlite3_column_count(s.s)), - cls: s.cls, - cols: nil, - decltype: nil, - colvals: nil, - ctx: ctx, + s: s, + cls: s.cls, + ctx: ctx, + pendingStep: -1, + } + if s.cacheKey != "" { + // A schema change expires cached statements and SQLite only + // re-prepares them on their next step, so the column count and + // metadata read before stepping could describe the old schema. + // Take the query's first step eagerly (it was going to run at + // the first Next anyway) and read them afterwards. + rv, err := rows.eagerFirstStepLocked() + if err != nil { + return nil, err + } + rows.pendingStep = rv + } else { + rows.nc = int32(C.sqlite3_column_count(s.s)) } if rows.nc > 0 { rows.colvals = (*C.sqlite3_go_col)(C.malloc(C.size_t(rows.nc) * C.size_t(unsafe.Sizeof(C.sqlite3_go_col{})))) @@ -2466,6 +2519,7 @@ func (s *SQLiteStmt) Readonly() bool { func (rc *SQLiteRows) Close() error { rc.closemu.Lock() defer rc.closemu.Unlock() + rc.stopWatchingCancellation() s := rc.s if s == nil { if rc.colvals != nil { @@ -2497,6 +2551,40 @@ func (rc *SQLiteRows) Close() error { return nil } +func (c *SQLiteConn) interruptActiveRows(rows *SQLiteRows) { + c.mu.Lock() + defer c.mu.Unlock() + if c.activeRows == rows && c.db != nil { + C.sqlite3_interrupt(c.db) + } +} + +func (rc *SQLiteRows) stopWatchingCancellation() { + if rc.stopCancellation == nil { + return + } + // A false return is harmless: a callback already in progress can interrupt + // only while rc owns conn.activeRows, which is guarded by conn.mu. + rc.stopCancellation() + rc.stopCancellation = nil +} + +func (rc *SQLiteRows) startStepping() { + conn := rc.s.c + conn.mu.Lock() + conn.activeRows = rc + conn.mu.Unlock() +} + +func (rc *SQLiteRows) finishStepping() { + conn := rc.s.c + conn.mu.Lock() + if conn.activeRows == rc { + conn.activeRows = nil + } + conn.mu.Unlock() +} + func (s *SQLiteStmt) cacheMetadata() bool { return !s.cls || s.cacheKey != "" } @@ -2583,33 +2671,88 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error { return io.EOF } - if rc.ctx.Done() == nil { - return rc.nextSyncLocked(dest) + if rv := rc.pendingStep; rv >= 0 { + rc.pendingStep = -1 + return rc.readStepResultLocked(dest, rv) } - sema := make(chan struct{}) - var err error - go func() { - err = rc.nextSyncLocked(dest) - close(sema) - }() - select { - case <-sema: - return err - case <-rc.ctx.Done(): - select { - case <-sema: // no need to interrupt - default: - // this is still racy and can be no-op if executed between sqlite3_* calls in nextSyncLocked. - C.sqlite3_interrupt(rc.s.c.db) - <-sema // ensure goroutine completed + + if rc.stopCancellation == nil { + if rc.ctx.Done() == nil { + rv := C._sqlite3_step_internal(rc.s.s) + return rc.readStepResultLocked(dest, rv) } - return rc.ctx.Err() + conn := rc.s.c + rc.stopCancellation = context.AfterFunc(rc.ctx, func() { + conn.interruptActiveRows(rc) + }) + } + if err := rc.ctx.Err(); err != nil { + return err + } + rv := rc.stepCancellableLocked() + err := rc.readStepResultLocked(dest, rv) + if ctxErr := rc.ctx.Err(); ctxErr != nil { + return ctxErr } + return err +} + +// eagerFirstStepLocked performs the first step of a cached statement +// under the same cancellation rules as Next, records the post-step +// column count, and drops the statement's cached metadata when SQLite +// re-prepared it after a schema change. Note that this runs the first +// step at query time, so a data-modifying statement issued through +// Query executes even if Next is never called. +func (rc *SQLiteRows) eagerFirstStepLocked() (C.int, error) { + s := rc.s + s.mu.Lock() + defer s.mu.Unlock() + + if rc.ctx.Done() != nil && rc.stopCancellation == nil { + conn := s.c + rc.stopCancellation = context.AfterFunc(rc.ctx, func() { + conn.interruptActiveRows(rc) + }) + } + if err := rc.ctx.Err(); err != nil { + rc.stopWatchingCancellation() + return 0, err + } + var ncol, repreps C.int + var rv C.int + if rc.ctx.Done() == nil { + rv = C._sqlite3_step_columns(s.s, &ncol, &repreps) + } else { + rc.startStepping() + rv = C._sqlite3_step_columns(s.s, &ncol, &repreps) + rc.finishStepping() + } + if err := rc.ctx.Err(); err != nil { + rc.stopWatchingCancellation() + C._sqlite3_reset_clear(s.s) + return 0, err + } + if rv != C.SQLITE_ROW && rv != C.SQLITE_DONE { + rc.stopWatchingCancellation() + err := s.c.lastError() + C._sqlite3_reset_clear(s.s) + return 0, err + } + rc.nc = int32(ncol) + if repreps != s.repreps { + s.repreps = repreps + s.metadata = nil + } + return rv, nil +} + +func (rc *SQLiteRows) stepCancellableLocked() C.int { + rc.startStepping() + defer rc.finishStepping() + return C._sqlite3_step_internal(rc.s.s) } -// nextSyncLocked moves cursor to next; must be called with locked mutex. -func (rc *SQLiteRows) nextSyncLocked(dest []driver.Value) error { - rv := C._sqlite3_step_internal(rc.s.s) +func (rc *SQLiteRows) readStepResultLocked(dest []driver.Value, rv C.int) error { if rv == C.SQLITE_DONE { return io.EOF } diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_func_crypt.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_func_crypt.go index bd9a3bc097..5a8cd36c71 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_func_crypt.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_func_crypt.go @@ -11,43 +11,41 @@ import ( "crypto/sha512" ) -// This file provides several different implementations for the -// default embedded sqlite_crypt function. -// This function is uses a caesar-cypher by default -// and is used within the UserAuthentication module to encode -// the password. +// This file provides several different implementations for the default +// embedded sqlite_crypt function. This function uses a caesar-cypher by +// default and is used within the UserAuthentication module to encode the +// password. // // The provided functions can be used as an overload to the sqlite_crypt // function through the use of the RegisterFunc on the connection. // -// Because the functions can serv a purpose to an end-user -// without using the UserAuthentication module -// the functions are default compiled in. +// Because the functions can serve a purpose to an end-user without using the +// UserAuthentication module the functions are default compiled in. // // From SQLITE3 - user-auth.txt // The sqlite_user.pw field is encoded by a built-in SQL function -// "sqlite_crypt(X,Y)". The two arguments are both BLOBs. The first argument -// is the plaintext password supplied to the sqlite3_user_authenticate() -// interface. The second argument is the sqlite_user.pw value and is supplied +// "sqlite_crypt(X,Y)". The two arguments are both BLOBs. The first argument is +// the plain-text password supplied to the sqlite3_user_authenticate() +// interface. The second argument is the sqlite_user.pw value and is supplied // so that the function can extract the "salt" used by the password encoder. -// The result of sqlite_crypt(X,Y) is another blob which is the value that -// ends up being stored in sqlite_user.pw. To verify credentials X supplied -// by the sqlite3_user_authenticate() routine, SQLite runs: +// The result of sqlite_crypt(X,Y) is another blob which is the value that ends +// up being stored in sqlite_user.pw. To verify credentials X supplied by the +// sqlite3_user_authenticate() routine, SQLite runs: // // sqlite_user.pw == sqlite_crypt(X, sqlite_user.pw) // // To compute an appropriate sqlite_user.pw value from a new or modified -// password X, sqlite_crypt(X,NULL) is run. A new random salt is selected -// when the second argument is NULL. +// password X, sqlite_crypt(X,NULL) is run. A new random salt is selected when +// the second argument is NULL. // -// The built-in version of of sqlite_crypt() uses a simple Caesar-cypher -// which prevents passwords from being revealed by searching the raw database -// for ASCII text, but is otherwise trivally broken. For better password -// security, the database should be encrypted using the SQLite Encryption -// Extension or similar technology. Or, the application can use the -// sqlite3_create_function() interface to provide an alternative -// implementation of sqlite_crypt() that computes a stronger password hash, -// perhaps using a cryptographic hash function like SHA1. +// The built-in version of of sqlite_crypt() uses a simple Caesar-cypher which +// prevents passwords from being revealed by searching the raw database for +// ASCII text, but is otherwise trivally broken. For better password security, +// the database should be encrypted using the SQLite Encryption Extension or +// similar technology. Or, the application can use the +// sqlite3_create_function() interface to provide an alternative implementation +// of sqlite_crypt() that computes a stronger password hash, perhaps using a +// cryptographic hash function like SHA1. // CryptEncoderSHA1 encodes a password with SHA1 func CryptEncoderSHA1(pass []byte, hash any) []byte { diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_libsqlite3.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_libsqlite3.go index 6ef2308620..45714dacc3 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_libsqlite3.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_libsqlite3.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build libsqlite3 -// +build libsqlite3 package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension_omit.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension_omit.go index d4f8ce6512..3503ce1cf2 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension_omit.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension_omit.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_omit_load_extension -// +build sqlite_omit_load_extension package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_allow_uri_authority.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_allow_uri_authority.go index 51240cbf6e..91b41b4611 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_allow_uri_authority.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_allow_uri_authority.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_allow_uri_authority -// +build sqlite_allow_uri_authority package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_app_armor.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_app_armor.go index 565dbc298f..f28ebe8b03 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_app_armor.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_app_armor.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build !windows && sqlite_app_armor -// +build !windows,sqlite_app_armor package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_column_metadata.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_column_metadata.go index 9aff0b1bf3..2ca311242a 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_column_metadata.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_column_metadata.go @@ -1,5 +1,4 @@ //go:build sqlite_column_metadata -// +build sqlite_column_metadata package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_dbstat.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_dbstat.go index d033846144..c8f10eb213 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_dbstat.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_dbstat.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_dbstat -// +build sqlite_dbstat package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_foreign_keys.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_foreign_keys.go index 82c944e1b1..2fbae03ef6 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_foreign_keys.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_foreign_keys.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_foreign_keys -// +build sqlite_foreign_keys package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_fts5.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_fts5.go index 2645f284b3..6c041bcad0 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_fts5.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_fts5.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_fts5 || fts5 -// +build sqlite_fts5 fts5 package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_icu.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_icu.go index 2d47827bea..1c148c2fbc 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_icu.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_icu.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_icu || icu -// +build sqlite_icu icu package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_introspect.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_introspect.go index cd2e540116..e0e3a1930f 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_introspect.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_introspect.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_introspect -// +build sqlite_introspect package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_math_functions.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_math_functions.go index bd62d9a2ac..dc1ab98d22 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_math_functions.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_math_functions.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_math_functions -// +build sqlite_math_functions package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_os_trace.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_os_trace.go index 9a30566b3b..62a4bd79c7 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_os_trace.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_os_trace.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_os_trace -// +build sqlite_os_trace package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_percentile.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_percentile.go index 3461d9a557..ff75e728d7 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_percentile.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_percentile.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_percentile -// +build sqlite_percentile package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate.go index ed725eeb9d..629abcf0f7 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build cgo -// +build cgo package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_hook.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_hook.go index 37e048ffd9..90c3c6ee28 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_hook.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_hook.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_preupdate_hook -// +build sqlite_preupdate_hook package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_omit.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_omit.go index f60da6c169..1289dc9d4b 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_omit.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_omit.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build !sqlite_preupdate_hook && cgo -// +build !sqlite_preupdate_hook,cgo package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete.go index 6bb05b843e..600e84b556 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_secure_delete -// +build sqlite_secure_delete package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete_fast.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete_fast.go index 982020aebf..eda669b98f 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete_fast.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete_fast.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_secure_delete_fast -// +build sqlite_secure_delete_fast package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_serialize_omit.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_serialize_omit.go index d00ead0b6c..6d6ce017b9 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_serialize_omit.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_serialize_omit.go @@ -1,5 +1,4 @@ //go:build libsqlite3 && !sqlite_serialize -// +build libsqlite3,!sqlite_serialize package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_stat4.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_stat4.go index 799fbb0fc0..12b211334e 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_stat4.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_stat4.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_stat4 -// +build sqlite_stat4 package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go index dddb655da8..7cb8d6eadf 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build cgo && sqlite_unlock_notify -// +build cgo,sqlite_unlock_notify package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_userauth.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_userauth.go index 5a49276659..c1a14106de 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_userauth.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_userauth.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_userauth -// +build sqlite_userauth package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_full.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_full.go index df13c9d2d6..2341464907 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_full.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_full.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_vacuum_full -// +build sqlite_vacuum_full package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_incr.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_incr.go index a2e48814b0..6cf38d68cb 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_incr.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_incr.go @@ -5,7 +5,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_vacuum_incr -// +build sqlite_vacuum_incr package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vtable.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vtable.go index b2b2404bcb..cee38ec649 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vtable.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vtable.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_vtable || vtable -// +build sqlite_vtable vtable package sqlite3 @@ -423,8 +422,15 @@ func goVRelease(pVTab unsafe.Pointer, isDestroy C.int) *C.char { } else { err = vt.vTab.Disconnect() } - // The vtab is gone as far as SQLite is concerned regardless of the - // callback result, so release the handle either way. + if err != nil && isDestroy == 1 { + // SQLite retains p->pVtab when xDestroy fails and later calls + // xDisconnect on the same object; keep the handle registered so + // that call can resolve it (a missing handle panics above). + return mPrintf("%s", err.Error()) + } + // On xDisconnect (success or error) SQLite discards the vtab object, + // and on successful xDestroy it clears p->pVtab; release the handle + // in both cases. deleteHandle(pVTab) if err != nil { return mPrintf("%s", err.Error()) diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_solaris.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_solaris.go index fb4d325173..26680e0df2 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_solaris.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_solaris.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build solaris -// +build solaris package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_sql.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_sql.go index 47c522f488..6148a03d44 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_sql.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_sql.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build cgo -// +build cgo package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_trace.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_trace.go index 6c47cce191..d7979bd205 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_trace.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_trace.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build sqlite_trace || trace -// +build sqlite_trace trace package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_usleep_windows.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_usleep_windows.go index 6527f6fd99..29a99e5dcb 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_usleep_windows.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_usleep_windows.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build cgo -// +build cgo package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_windows.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_windows.go index f863bcd369..6a2bc09867 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_windows.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_windows.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build windows -// +build windows package sqlite3 diff --git a/vendor/github.com/mattn/go-sqlite3/static_mock.go b/vendor/github.com/mattn/go-sqlite3/static_mock.go index d2c5a27609..17248686a7 100644 --- a/vendor/github.com/mattn/go-sqlite3/static_mock.go +++ b/vendor/github.com/mattn/go-sqlite3/static_mock.go @@ -4,7 +4,6 @@ // license that can be found in the LICENSE file. //go:build !cgo -// +build !cgo package sqlite3 diff --git a/vendor/github.com/operator-framework/api/crds/defs.go b/vendor/github.com/operator-framework/api/crds/defs.go index 1781c1dfa0..4a81a7eabb 100644 --- a/vendor/github.com/operator-framework/api/crds/defs.go +++ b/vendor/github.com/operator-framework/api/crds/defs.go @@ -2,6 +2,9 @@ package crds // Generate embedded files from CRDs to avoid file path changes when this package is imported. //go:generate go run github.com/go-bindata/go-bindata/v3/go-bindata -pkg crds -o zz_defs.go -ignore=.*\.go -nometadata . +// go-bindata emits a leading-space package comment. Two gofmt passes normalize it. +//go:generate gofmt -w zz_defs.go +//go:generate gofmt -w zz_defs.go import ( "bytes" diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml index 12b1a5aff4..858b2651ab 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml @@ -632,7 +632,7 @@ spec: properties: apiGroups: description: |- - APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of + apiGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. "" represents the core API group and "*" represents all API groups. type: array items: @@ -640,7 +640,7 @@ spec: x-kubernetes-list-type: atomic nonResourceURLs: description: |- - NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path + nonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. type: array @@ -648,19 +648,19 @@ spec: type: string x-kubernetes-list-type: atomic resourceNames: - description: ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. + description: resourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. type: array items: type: string x-kubernetes-list-type: atomic resources: - description: Resources is a list of resources this rule applies to. '*' represents all resources. + description: resources is a list of resources this rule applies to. '*' represents all resources. type: array items: type: string x-kubernetes-list-type: atomic verbs: - description: Verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs. + description: verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs. type: array items: type: string @@ -1798,7 +1798,9 @@ spec: - key properties: key: - description: The key to select. + description: |- + The key to select from the ConfigMap's Data field. + Keys in the BinaryData field are not currently propagated to container env vars. type: string name: description: |- @@ -2050,6 +2052,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -2156,6 +2163,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -2233,6 +2245,13 @@ spec: required: - port properties: + mode: + description: |- + mode specifies the connection mode for the gRPC health probe. + Set to "TLS" to use TLS without certificate verification. + Set to "Plaintext" to use a plaintext (insecure) connection explicitly. + If not specified, the probe uses a plaintext (insecure) connection. + type: string port: description: Port number of the gRPC service. Number must be in the range 1 to 65535. type: integer @@ -2287,6 +2306,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -2439,6 +2463,13 @@ spec: required: - port properties: + mode: + description: |- + mode specifies the connection mode for the gRPC health probe. + Set to "TLS" to use TLS without certificate verification. + Set to "Plaintext" to use a plaintext (insecure) connection explicitly. + If not specified, the probe uses a plaintext (insecure) connection. + type: string port: description: Port number of the gRPC service. Number must be in the range 1 to 65535. type: integer @@ -2493,6 +2524,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -2934,6 +2970,13 @@ spec: required: - port properties: + mode: + description: |- + mode specifies the connection mode for the gRPC health probe. + Set to "TLS" to use TLS without certificate verification. + Set to "Plaintext" to use a plaintext (insecure) connection explicitly. + If not specified, the probe uses a plaintext (insecure) connection. + type: string port: description: Port number of the gRPC service. Number must be in the range 1 to 65535. type: integer @@ -2988,6 +3031,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -3122,10 +3170,20 @@ spec: - mountPath - name properties: - mountPath: + bindMountOptions: description: |- - Path within the container at which the volume should be mounted. Must - not contain ':'. + bindMountOptions is the list of additional bind mount options to apply when + mounting this volume into the container. Allowed values are noexec, + nodev, and nosuid. These are Linux mount options and have no effect on + Windows nodes. + This field is not supported with image volumes. + This is an alpha field and requires enabling the VolumeBindMountOptions feature gate. + type: array + items: + type: string + x-kubernetes-list-type: set + mountPath: + description: Path within the container at which the volume should be mounted. type: string mountPropagation: description: |- @@ -3336,7 +3394,9 @@ spec: - key properties: key: - description: The key to select. + description: |- + The key to select from the ConfigMap's Data field. + Keys in the BinaryData field are not currently propagated to container env vars. type: string name: description: |- @@ -3584,6 +3644,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -3690,6 +3755,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -3763,6 +3833,13 @@ spec: required: - port properties: + mode: + description: |- + mode specifies the connection mode for the gRPC health probe. + Set to "TLS" to use TLS without certificate verification. + Set to "Plaintext" to use a plaintext (insecure) connection explicitly. + If not specified, the probe uses a plaintext (insecure) connection. + type: string port: description: Port number of the gRPC service. Number must be in the range 1 to 65535. type: integer @@ -3817,6 +3894,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -3957,6 +4039,13 @@ spec: required: - port properties: + mode: + description: |- + mode specifies the connection mode for the gRPC health probe. + Set to "TLS" to use TLS without certificate verification. + Set to "Plaintext" to use a plaintext (insecure) connection explicitly. + If not specified, the probe uses a plaintext (insecure) connection. + type: string port: description: Port number of the gRPC service. Number must be in the range 1 to 65535. type: integer @@ -4011,6 +4100,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -4421,6 +4515,13 @@ spec: required: - port properties: + mode: + description: |- + mode specifies the connection mode for the gRPC health probe. + Set to "TLS" to use TLS without certificate verification. + Set to "Plaintext" to use a plaintext (insecure) connection explicitly. + If not specified, the probe uses a plaintext (insecure) connection. + type: string port: description: Port number of the gRPC service. Number must be in the range 1 to 65535. type: integer @@ -4475,6 +4576,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -4618,10 +4724,20 @@ spec: - mountPath - name properties: - mountPath: + bindMountOptions: description: |- - Path within the container at which the volume should be mounted. Must - not contain ':'. + bindMountOptions is the list of additional bind mount options to apply when + mounting this volume into the container. Allowed values are noexec, + nodev, and nosuid. These are Linux mount options and have no effect on + Windows nodes. + This field is not supported with image volumes. + This is an alpha field and requires enabling the VolumeBindMountOptions feature gate. + type: array + items: + type: string + x-kubernetes-list-type: set + mountPath: + description: Path within the container at which the volume should be mounted. type: string mountPropagation: description: |- @@ -4684,6 +4800,63 @@ spec: x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map + evictionResponders: + description: |- + evictionResponders reference responders that react to Evictions based on EvictionRequests. + Responders should observe and communicate through the Eviction Resource API to help with + the graceful termination of a pod. The responders are selected sequentially, according to + their specified priority. + + Responders should periodically report on an eviction progress by updating the + .status.responders[].heartbeatTime field of the Eviction object. If this field is not updated + within the heartbeat deadline defined by the Eviction API (currently 20 minutes), the eviction + is passed over to the next responder with a lower priority. If there is no other responder, + the last default imperative-eviction.k8s.io/evictor responder with a priority of 100 will + evict the pod using the imperative Eviction API (pods//eviction subresource). + + The maximum length of the responders list is 10. + Responders are not supported when the pod is part of a PodGroup (.spec.schedulingGroup is set). + This field can only be set on creation and is immutable afterwards. + type: array + items: + description: |- + EvictionResponder allows you to specify the responder reacting to an Eviction. + Responders should observe and communicate through the Eviction Resource API to help with + the graceful eviction of a target (e.g. termination of a pod). + type: object + required: + - name + - priority + properties: + name: + description: |- + name allows you to identify the responder responding to the Eviction. + + It must be a valid domain-prefixed key (such as "acme.io/foo"). + Domain names *.k8s.io and *.kubernetes.io are reserved. + This field must be unique for each responder. + This field is required. + type: string + priority: + description: |- + priority for this responder. Higher priorities are selected first by the evictionrequest-controller. + If there are responders with the same priority, the responder whose domain name comes first in the + alphabetical higher domain order, will be picked. This means that the top domain labels are compared + alphabetically first, followed by the lower domain labels. The key is compared last. + + The responder that is the managing controller of the pod should set the value of + this field to 10000 to allow both for preemption or fallback registration by other + responders. + + The minimum value is 0 and the maximum value is 100000. + The interval 0-999 is reserved for responders with *.k8s.io suffix. + This field is required. + type: integer + format: int32 + x-kubernetes-map-type: atomic + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map hostAliases: description: |- HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts @@ -4755,7 +4928,6 @@ spec: - `hostNetwork` must be set to false. This field must be a valid DNS subdomain as defined in RFC 1123 and contain at most 64 characters. - Requires the HostnameOverride feature gate to be enabled. type: string imagePullSecrets: description: |- @@ -4871,7 +5043,9 @@ spec: - key properties: key: - description: The key to select. + description: |- + The key to select from the ConfigMap's Data field. + Keys in the BinaryData field are not currently propagated to container env vars. type: string name: description: |- @@ -5123,6 +5297,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -5229,6 +5408,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -5306,6 +5490,13 @@ spec: required: - port properties: + mode: + description: |- + mode specifies the connection mode for the gRPC health probe. + Set to "TLS" to use TLS without certificate verification. + Set to "Plaintext" to use a plaintext (insecure) connection explicitly. + If not specified, the probe uses a plaintext (insecure) connection. + type: string port: description: Port number of the gRPC service. Number must be in the range 1 to 65535. type: integer @@ -5360,6 +5551,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -5512,6 +5708,13 @@ spec: required: - port properties: + mode: + description: |- + mode specifies the connection mode for the gRPC health probe. + Set to "TLS" to use TLS without certificate verification. + Set to "Plaintext" to use a plaintext (insecure) connection explicitly. + If not specified, the probe uses a plaintext (insecure) connection. + type: string port: description: Port number of the gRPC service. Number must be in the range 1 to 65535. type: integer @@ -5566,6 +5769,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -6007,6 +6215,13 @@ spec: required: - port properties: + mode: + description: |- + mode specifies the connection mode for the gRPC health probe. + Set to "TLS" to use TLS without certificate verification. + Set to "Plaintext" to use a plaintext (insecure) connection explicitly. + If not specified, the probe uses a plaintext (insecure) connection. + type: string port: description: Port number of the gRPC service. Number must be in the range 1 to 65535. type: integer @@ -6061,6 +6276,11 @@ spec: - type: integer - type: string x-kubernetes-int-or-string: true + protocol: + description: |- + Protocol selects the wire protocol for the probe connection. + Nil defaults to HTTP/1.1. + type: string scheme: description: |- Scheme to use for connecting to the host. @@ -6195,10 +6415,20 @@ spec: - mountPath - name properties: - mountPath: + bindMountOptions: description: |- - Path within the container at which the volume should be mounted. Must - not contain ':'. + bindMountOptions is the list of additional bind mount options to apply when + mounting this volume into the container. Allowed values are noexec, + nodev, and nosuid. These are Linux mount options and have no effect on + Windows nodes. + This field is not supported with image volumes. + This is an alpha field and requires enabling the VolumeBindMountOptions feature gate. + type: array + items: + type: string + x-kubernetes-list-type: set + mountPath: + description: Path within the container at which the volume should be mounted. type: string mountPropagation: description: |- @@ -6343,6 +6573,8 @@ spec: description: |- PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. + When Priority Admission Controller is enabled, it prevents users from setting + this field. The admission controller populates this field from PriorityClassName. Defaults to PreemptLowerPriority if unset. type: string priority: @@ -6685,11 +6917,8 @@ spec: Eligible volumes are in-tree FibreChannel and iSCSI volumes, and all CSI volumes whose CSI driver announces SELinux support by setting spec.seLinuxMount: true in their CSIDriver instance. Other volumes are always re-labelled recursively. - "MountOption" value is allowed only when SELinuxMount feature gate is enabled. - If not specified and SELinuxMount feature gate is enabled, "MountOption" is used. - If not specified and SELinuxMount feature gate is disabled, "MountOption" is used for ReadWriteOncePod volumes - and "Recursive" for all other volumes. + If not specified, "MountOption" is used. This field affects only Pods that have SELinux label set, either in PodSecurityContext or in SecurityContext of all containers. @@ -7292,6 +7521,13 @@ spec: mode, like fsGroup, and the result can be other mode bits set. type: integer format: int32 + defaultUser: + description: |- + defaultUser is Optional: The owner UID of the created files by default. + The defaultUser field is only used as a fallback when the item-level user field is unset. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 items: description: |- items if unspecified, each key-value pair in the Data field of the referenced @@ -7329,6 +7565,13 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic name: description: |- @@ -7407,6 +7650,13 @@ spec: mode, like fsGroup, and the result can be other mode bits set. type: integer format: int32 + defaultUser: + description: |- + defaultUser is Optional: The owner UID of the created files by default. + The defaultUser field is only used as a fallback when the item-level user field is unset. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 items: description: Items is a list of downward API volume file type: array @@ -7464,6 +7714,13 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic emptyDir: description: |- @@ -7478,6 +7735,18 @@ spec: Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir type: string + mode: + description: |- + mode specifies the permission bits for the emptyDir directory, in numeric + notation (e.g., 0755, 01777). Must be a value between 0000 and 01777. + If not specified, defaults to 0777. + This might be in conflict with other options that affect the file + mode, like fsGroup. If fsGroup is specified, the fsGroup permissions + will override the mode specified here. + This field has no effect on Windows. + This field is alpha and requires EmptyDirVolumeMode featuregate to be enabled. + type: integer + format: int32 sizeLimit: description: |- sizeLimit is the total amount of local storage required for this EmptyDir volume. @@ -7575,8 +7844,8 @@ spec: * An existing PVC (PersistentVolumeClaim) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. - When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, - and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + dataSource contents will be copied to dataSourceRef, and dataSourceRef contents will be + copied to dataSource when dataSourceRef.namespace is not specified. If the namespace is specified, then dataSourceRef will not be copied to dataSource. type: object required: @@ -7619,7 +7888,6 @@ spec: specified. * While dataSource only allows local objects, dataSourceRef allows objects in any namespaces. - (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. type: object required: @@ -8162,6 +8430,13 @@ spec: mode, like fsGroup, and the result can be other mode bits set. type: integer format: int32 + defaultUser: + description: |- + defaultUser is Optional: The owner UID of the created files by default. + The defaultUser field is only used as a fallback when the item-level user field is unset. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 sources: description: |- sources is the list of volume projections. Each entry in this list @@ -8262,6 +8537,13 @@ spec: Mutually-exclusive with name. The contents of all selected ClusterTrustBundles will be unified and deduplicated. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 configMap: description: configMap information about the configMap data to project type: object @@ -8303,6 +8585,13 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic name: description: |- @@ -8378,6 +8667,13 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic podCertificate: description: |- @@ -8483,6 +8779,13 @@ spec: signerName: description: Kubelet's generated CSRs will be addressed to this signer. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 userAnnotations: description: |- userAnnotations allow pod authors to pass additional information to @@ -8542,6 +8845,13 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic name: description: |- @@ -8584,6 +8894,13 @@ spec: path is the path relative to the mount point of the file to project the token into. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic quobyte: description: |- @@ -8779,6 +9096,13 @@ spec: mode, like fsGroup, and the result can be other mode bits set. type: integer format: int32 + defaultUser: + description: |- + defaultUser is Optional: The owner UID of the created files by default. + The defaultUser field is only used as a fallback when the item-level user field is unset. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 items: description: |- items If unspecified, each key-value pair in the Data field of the referenced @@ -8816,6 +9140,13 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic optional: description: optional field specify whether the Secret or its keys must be defined @@ -8920,7 +9251,7 @@ spec: properties: apiGroups: description: |- - APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of + apiGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. "" represents the core API group and "*" represents all API groups. type: array items: @@ -8928,7 +9259,7 @@ spec: x-kubernetes-list-type: atomic nonResourceURLs: description: |- - NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path + nonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. type: array @@ -8936,19 +9267,19 @@ spec: type: string x-kubernetes-list-type: atomic resourceNames: - description: ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. + description: resourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. type: array items: type: string x-kubernetes-list-type: atomic resources: - description: Resources is a list of resources this rule applies to. '*' represents all resources. + description: resources is a list of resources this rule applies to. '*' represents all resources. type: array items: type: string x-kubernetes-list-type: atomic verbs: - description: Verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs. + description: verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs. type: array items: type: string diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml index 7dc8de79c3..c7a5473e45 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml @@ -995,7 +995,9 @@ spec: - key properties: key: - description: The key to select. + description: |- + The key to select from the ConfigMap's Data field. + Keys in the BinaryData field are not currently propagated to container env vars. type: string name: description: |- @@ -1325,10 +1327,20 @@ spec: - mountPath - name properties: - mountPath: + bindMountOptions: description: |- - Path within the container at which the volume should be mounted. Must - not contain ':'. + bindMountOptions is the list of additional bind mount options to apply when + mounting this volume into the container. Allowed values are noexec, + nodev, and nosuid. These are Linux mount options and have no effect on + Windows nodes. + This field is not supported with image volumes. + This is an alpha field and requires enabling the VolumeBindMountOptions feature gate. + type: array + items: + type: string + x-kubernetes-list-type: set + mountPath: + description: Path within the container at which the volume should be mounted. type: string mountPropagation: description: |- @@ -1589,6 +1601,13 @@ spec: mode, like fsGroup, and the result can be other mode bits set. type: integer format: int32 + defaultUser: + description: |- + defaultUser is Optional: The owner UID of the created files by default. + The defaultUser field is only used as a fallback when the item-level user field is unset. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 items: description: |- items if unspecified, each key-value pair in the Data field of the referenced @@ -1626,6 +1645,13 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic name: description: |- @@ -1704,6 +1730,13 @@ spec: mode, like fsGroup, and the result can be other mode bits set. type: integer format: int32 + defaultUser: + description: |- + defaultUser is Optional: The owner UID of the created files by default. + The defaultUser field is only used as a fallback when the item-level user field is unset. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 items: description: Items is a list of downward API volume file type: array @@ -1761,6 +1794,13 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic emptyDir: description: |- @@ -1775,6 +1815,18 @@ spec: Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir type: string + mode: + description: |- + mode specifies the permission bits for the emptyDir directory, in numeric + notation (e.g., 0755, 01777). Must be a value between 0000 and 01777. + If not specified, defaults to 0777. + This might be in conflict with other options that affect the file + mode, like fsGroup. If fsGroup is specified, the fsGroup permissions + will override the mode specified here. + This field has no effect on Windows. + This field is alpha and requires EmptyDirVolumeMode featuregate to be enabled. + type: integer + format: int32 sizeLimit: description: |- sizeLimit is the total amount of local storage required for this EmptyDir volume. @@ -1872,8 +1924,8 @@ spec: * An existing PVC (PersistentVolumeClaim) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. - When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, - and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + dataSource contents will be copied to dataSourceRef, and dataSourceRef contents will be + copied to dataSource when dataSourceRef.namespace is not specified. If the namespace is specified, then dataSourceRef will not be copied to dataSource. type: object required: @@ -1916,7 +1968,6 @@ spec: specified. * While dataSource only allows local objects, dataSourceRef allows objects in any namespaces. - (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. type: object required: @@ -2459,6 +2510,13 @@ spec: mode, like fsGroup, and the result can be other mode bits set. type: integer format: int32 + defaultUser: + description: |- + defaultUser is Optional: The owner UID of the created files by default. + The defaultUser field is only used as a fallback when the item-level user field is unset. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 sources: description: |- sources is the list of volume projections. Each entry in this list @@ -2559,6 +2617,13 @@ spec: Mutually-exclusive with name. The contents of all selected ClusterTrustBundles will be unified and deduplicated. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 configMap: description: configMap information about the configMap data to project type: object @@ -2600,6 +2665,13 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic name: description: |- @@ -2675,6 +2747,13 @@ spec: description: 'Required: resource to select' type: string x-kubernetes-map-type: atomic + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic podCertificate: description: |- @@ -2780,6 +2859,13 @@ spec: signerName: description: Kubelet's generated CSRs will be addressed to this signer. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 userAnnotations: description: |- userAnnotations allow pod authors to pass additional information to @@ -2839,6 +2925,13 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic name: description: |- @@ -2881,6 +2974,13 @@ spec: path is the path relative to the mount point of the file to project the token into. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic quobyte: description: |- @@ -3076,6 +3176,13 @@ spec: mode, like fsGroup, and the result can be other mode bits set. type: integer format: int32 + defaultUser: + description: |- + defaultUser is Optional: The owner UID of the created files by default. + The defaultUser field is only used as a fallback when the item-level user field is unset. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 items: description: |- items If unspecified, each key-value pair in the Data field of the referenced @@ -3113,6 +3220,13 @@ spec: May not contain the path element '..'. May not start with the string '..'. type: string + user: + description: |- + user is Optional: The owner UID of the created file. + If specified, the item-level user field takes precedence over defaultUser. + (Alpha) This field requires the AtomicWriteVolumeUserFields feature gate to be enabled. + type: integer + format: int64 x-kubernetes-list-type: atomic optional: description: optional field specify whether the Secret or its keys must be defined diff --git a/vendor/github.com/operator-framework/api/crds/zz_defs.go b/vendor/github.com/operator-framework/api/crds/zz_defs.go index 492f0f0294..edd491e4e9 100644 --- a/vendor/github.com/operator-framework/api/crds/zz_defs.go +++ b/vendor/github.com/operator-framework/api/crds/zz_defs.go @@ -1,6 +1,6 @@ // Code generated by go-bindata. (@generated) DO NOT EDIT. -//Package crds generated by go-bindata.// sources: +// Package crds generated by go-bindata.// sources: // operators.coreos.com_catalogsources.yaml // operators.coreos.com_clusterserviceversions.yaml // operators.coreos.com_installplans.yaml @@ -105,7 +105,7 @@ func operatorsCoreosCom_catalogsourcesYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_clusterserviceversionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\x23\xb9\x95\x27\x0c\xff\xef\x4f\x81\x90\x7b\x5e\x49\x63\x91\xaa\xb2\xc7\x7e\x3d\xb5\xb3\xe3\xd0\x56\x55\x77\xeb\xe9\x2e\x95\x42\x92\xdb\x8f\xa3\xdd\x6b\x83\x99\x87\x24\x46\x99\x40\x0e\x80\xa4\x8a\xde\xde\xef\xfe\x04\x0e\x80\xbc\xf0\x22\x91\x09\x48\xcc\xaa\x4e\x38\xc2\x5d\x22\x93\xc0\x49\x5c\x0e\xce\xf5\x77\x68\xc1\x7e\x00\xa9\x98\xe0\x6f\x08\x2d\x18\x7c\xd2\xc0\xcd\x5f\x6a\x7c\xff\x47\x35\x66\xe2\x7c\xf1\xfa\x57\xf7\x8c\xa7\x6f\xc8\xdb\x52\x69\x91\xdf\x80\x12\xa5\x4c\xe0\x1d\x4c\x19\x67\x9a\x09\xfe\xab\x1c\x34\x4d\xa9\xa6\x6f\x7e\x45\x08\xe5\x5c\x68\x6a\x3e\x56\xe6\x4f\x42\x12\xc1\xb5\x14\x59\x06\x72\x34\x03\x3e\xbe\x2f\x27\x30\x29\x59\x96\x82\xc4\xce\xfd\xd0\x8b\x57\xe3\xdf\xbe\x1a\xbf\xfa\x15\x21\x9c\xe6\xf0\x86\x24\x59\xa9\x34\x48\x05\x72\xc1\x12\x70\x8f\xa9\xb1\x28\x40\x52\x2d\xa4\x1a\x27\x42\x82\x30\xff\xc9\x7f\xa5\x0a\x48\xcc\x60\x33\x29\xca\xe2\x0d\xd9\xf8\x8c\xed\xd7\xd3\x44\x35\xcc\x84\x64\xfe\x6f\x42\x46\x44\x64\x39\xfe\xdb\xbd\xab\x1d\xfe\xd6\x0e\xef\x26\x08\xbf\xcf\x98\xd2\xdf\x6d\x7f\xe6\x7b\xa6\x34\x3e\x57\x64\xa5\xa4\xd9\xb6\x17\xc1\x47\xd4\x5c\x48\x7d\x55\x93\x65\xc8\x48\xd4\xa2\xf9\x6f\xf7\x20\xe3\xb3\x32\xa3\x72\x4b\x6f\xbf\x22\x44\x25\xa2\x80\x37\x04\x3b\x2b\x68\x02\xe9\xaf\x08\xf1\x63\xd9\xce\x47\x84\xa6\x29\xae\x17\xcd\xae\x25\xe3\x1a\xe4\x5b\x91\x95\x39\xaf\x06\x37\xcf\xa4\xa0\x12\xc9\x0a\x8d\x6b\x72\x37\x07\x9c\x35\x22\xa6\x44\xcf\x81\xbc\xbd\xfd\xa1\x7a\x94\x90\xff\x52\x82\x5f\x53\x3d\x7f\x43\xc6\x66\x01\xc6\x29\x53\x45\x46\x97\x86\x84\xc6\x53\x76\x35\xdf\xd9\xef\x1a\x9f\xeb\xa5\xa1\x57\x69\xc9\xf8\xec\xb1\xf1\xdd\x4b\xec\x46\xc2\xa2\xb1\x4e\xcd\xe1\x7f\x58\xfb\x7c\xd7\xe1\x25\x64\x40\x95\x9b\x01\xa6\xf6\x23\xc7\xfd\x78\x8d\x9c\x9b\xb5\xcf\x77\x25\xc7\xaf\x06\x35\x23\x13\x3d\xa7\xda\x92\x25\xb8\x21\xb5\xc8\x68\x02\xea\x51\x82\xd6\x1e\xf1\x14\xad\x7d\xb1\x85\xa4\x66\x97\x9a\xea\x52\x8d\x8b\xf9\xa6\x77\xbc\x9e\x3f\xf9\x86\xf6\xc1\xc5\x6b\x9a\x15\x73\xfa\xda\x7d\xa8\x92\x39\xe4\xb4\xde\x92\xa2\x00\x7e\x71\x7d\xf9\xc3\xef\x6e\x57\xbe\x20\xed\xd9\xd9\x78\x18\x09\x53\x66\xaa\x90\x6f\x11\xcf\xb8\x70\xed\x96\x05\x90\x7f\x6c\xfc\xcd\x6d\x01\xc9\x3f\xc6\x6b\x94\x8b\xc9\x7f\x41\xa2\x1b\x1f\x4b\xf8\xef\x92\x49\x48\x9b\x14\x99\x09\xf2\xcc\x70\xe5\x63\x33\xff\x8d\x8f\x0a\x69\xb8\x94\x6e\x70\x20\xdb\x1a\xdc\xb8\xf5\xf9\xca\xdb\xfe\x3c\x5a\xf9\x96\x10\x33\x49\xee\xad\x53\xc3\x9a\x41\xe1\x0e\x75\x1b\x16\x52\x37\xb3\xd5\x4e\x96\x50\x48\x50\xc0\x2d\xb3\xc6\x4d\xc5\xdd\x5b\x8e\xd7\x3a\x37\x53\x04\x52\x19\x8e\x55\x66\xa9\xe1\xe9\x0b\x90\x9a\x48\x48\xc4\x8c\xb3\x7f\x56\xbd\x2b\xa2\x05\x0e\x9b\x51\x0d\x4a\x13\x64\x33\x9c\x66\x64\x41\xb3\x12\xce\x08\xe5\xe9\x5a\xdf\x39\x5d\x12\x09\x66\x5c\x52\xf2\x46\x8f\xf8\x13\xb5\x4e\xcb\x07\x21\x81\x30\x3e\x15\x6f\xc8\x5c\xeb\x42\xbd\x39\x3f\x9f\x31\xed\x6f\xab\x44\xe4\x79\xc9\x99\x5e\x9e\xe3\xc5\xc3\x26\xa5\xb9\x09\xce\x53\x58\x40\x76\xae\xd8\x6c\x44\x65\x32\x67\x1a\x12\x5d\x4a\x38\xa7\x05\x1b\xe1\xcb\x70\xbc\xb1\xc6\x79\xfa\x6b\xe9\xb6\x89\x5a\x19\x78\xe3\x79\x20\xfe\xc2\xd8\x73\xb1\xcc\x05\x62\x37\xa7\xed\xd0\xbe\x6c\xbd\x26\xe6\x23\x33\x8d\x37\xef\x6f\xef\x88\xa7\xc8\x1d\x75\x5c\xa2\xfa\xd1\x0d\x33\xe4\x57\xcb\xcc\x2c\xe3\x53\x90\xf6\x97\x53\x29\x72\xec\x15\x78\x5a\x08\xc6\x35\xfe\x91\x64\x0c\xb8\x26\xaa\x9c\xe4\x4c\x2b\xdc\xd6\xa0\xb4\x59\xc8\xf5\x8e\xdf\xe2\xed\x4e\x26\x40\xca\x22\xa5\x1a\xd2\xf5\x47\x2e\x39\x79\x4b\x73\xc8\xde\x52\x05\x2f\xbe\x76\x66\x8d\xd4\xc8\x2c\xc8\xce\xab\xd7\x94\x5d\xd6\x7f\xb0\x76\xea\x09\xf1\xc2\xc6\x3e\xcb\xbd\x95\xd1\x90\x14\x92\x8c\x4a\x2b\x2f\x11\x0d\x59\x46\x3e\x7e\xff\x81\xcc\xc5\x83\x39\x48\x8c\x2b\x4d\xb3\x0c\x0f\xa6\x93\x69\xd6\xba\xc6\x3b\x20\xa1\x9c\xe4\x94\xd3\x19\x10\x5a\x14\x8a\x4c\x85\x24\x94\xcc\xd8\x02\xb8\x67\x00\xab\x6b\xb1\xf5\xfd\xb6\x71\x36\x62\x6f\xa4\x8d\x97\xbc\xff\xd6\x11\xbc\xf2\xcd\x36\x5e\x67\xda\x9a\xb8\xb8\xdf\xc4\x9a\x76\x51\x77\x81\x47\x8a\x93\x92\x2b\x2d\x4b\xdc\x25\x29\xb9\x87\xa5\x3b\x5d\x39\x2d\x88\xd2\xc2\x7c\xf8\xc0\xf4\x9c\xd0\xe6\xc9\xa2\x1a\x8f\xcb\x64\xfd\xb5\x4c\x53\xa0\xc9\x64\x49\x8c\x70\x8c\xec\x4c\x0b\x91\x21\xaf\xc3\xfe\x0c\x5b\x23\x12\xb4\x64\xb0\x00\x42\xe5\x84\x69\x49\xe5\xb2\xda\x5b\xeb\xe7\xe0\xd1\xf9\xc7\x79\x69\xc8\x6a\xdb\x67\x8f\x3c\xb6\xb3\x89\xbd\x4e\x9c\xa8\x98\x56\xe2\x7a\xf7\x89\xbe\xbe\x74\x3b\xb8\x96\xfd\x95\xdb\xc1\xa0\x88\xd9\xa9\x4e\x2c\xaa\x94\x08\x24\xc0\x6d\xcd\x94\x08\x59\xed\x2d\x32\x59\x6e\x1c\xa3\xb1\xd5\xc9\x04\x0c\x1b\x94\x94\x9b\xa9\xdf\x78\x84\x3a\x4c\xec\x63\x9b\xd1\x34\xf1\xc0\x37\xed\xfc\x66\xdf\x54\x4a\xba\x99\x7a\x42\x98\x86\x7c\x4b\xcf\x64\x75\x9a\x9b\xf3\x59\x7d\x6c\x08\x5c\xb0\x14\xcc\xc4\x6a\xca\xec\x2e\x33\x3c\x81\x4e\x44\xa9\xed\x7c\xba\x47\x52\xb2\x60\x94\xd0\xd9\x4c\xc2\x0c\xf7\xff\xd6\x61\x9f\x98\x13\xdb\xb6\x1f\xfb\xba\x8d\xac\x8e\xf5\xe8\x13\x86\xfd\x3e\xfa\x00\xdf\xc4\x3c\x9a\x0f\xac\x8b\xf1\xed\xf6\xd4\x1a\xda\x46\x13\x33\x27\x7e\x6a\x85\x7c\xf4\xe1\x5d\xd6\xd6\xb6\x27\x56\xd8\xb6\xf6\x3a\xaf\x10\xe2\xbe\x9d\x98\x33\x53\x5f\x00\x86\x73\xe0\x83\x35\x4b\x9f\x00\x29\x40\x4e\x85\xcc\xcd\xe1\xe1\x84\x92\xc4\x8a\xb2\x15\xdf\x42\x86\xcb\x93\xc7\xa6\x93\xec\xba\xfe\xb6\xed\xb2\x0b\x6c\x1b\x91\x82\xea\xf9\x13\x8f\xed\xb6\x54\xb6\x35\x27\xed\xc9\x87\x9f\x60\x7c\x6b\x7d\xd7\xf7\x56\xf4\xbe\xcd\x34\x44\xef\x14\xaf\xac\x5d\x7a\xdd\x85\x73\xaf\xb6\x1b\xfa\xf0\x01\x94\x32\xf2\x02\x0a\xa1\x92\x3e\x10\xe0\x89\x30\x3c\xe5\xff\xb9\xfd\x78\x65\x47\xdf\xc4\x5d\xd7\xdb\xa5\x26\x2c\x2f\x32\xc8\x8d\x2c\x4a\x7e\xfc\x40\xa5\x9a\xd3\x0c\xe4\x4f\x78\x2b\xfe\xf8\x67\x9e\xb7\x3f\x49\xe8\xf6\x83\xdd\x6c\x46\xc8\x54\x90\x1a\xf6\x97\x42\x46\x97\x96\xb0\x14\x12\x91\x9a\x6b\x41\x48\x52\x18\x65\x21\x2f\x4a\x0d\x84\xda\x6f\xf1\x1d\x18\x9f\xed\x42\xf9\x5e\xab\x41\x8c\x48\x95\x53\xfd\x86\x4c\x96\xfa\xa9\xd3\x46\xc8\xa7\x51\xba\x2b\xdb\x69\x12\xf3\x34\xf3\xb1\x6d\x27\x16\xd4\xec\xf8\xc9\xb7\x34\xf2\x36\x65\x1c\xe4\xb5\x90\x7a\x17\x3e\x69\x14\xbb\x19\xac\x8b\xa3\xcd\xe6\xa7\x8c\x71\xfd\xbb\xdf\x3e\xf2\x64\x0a\x45\x26\x96\x66\xff\x3c\x7d\x3c\x77\x7c\x9f\x9d\x59\xc9\xae\xfd\xed\xca\x3e\x76\xec\xcf\x5a\x2a\x63\xf4\xb4\x49\xfb\xec\xd4\x11\x8f\xf5\x6e\x95\x02\x7d\xb0\xfb\xf6\xfa\xd2\xdb\x7a\x6e\x60\x0a\x12\x78\xe2\xf9\x5c\xf5\xa7\x16\x84\x92\xef\xca\x09\x48\x0e\x1a\x54\x43\x13\x58\x16\xe0\x0d\x6b\x60\x7f\x20\x41\x92\x52\xb3\x8c\xfd\x73\x93\x39\x62\xd3\x5b\x45\xbf\x69\x9f\x90\xa9\xfc\x63\x4f\x48\x56\xfe\xb1\xa7\xe4\x2b\xdb\xf6\xb9\xba\x9f\xde\x85\xb6\xb5\xd6\x09\x8d\x20\x4e\x63\xa8\x56\x26\x6d\x2f\x45\x74\x4e\xfe\xf4\x36\xdf\x40\xe9\x35\xda\xf2\x5b\xb6\xf0\x6d\x04\x93\x93\x6d\x6e\x92\xb1\x51\xf8\xc7\x68\xa1\xff\xf1\xa7\xb1\xed\xf2\x74\x4c\xde\xe7\x85\x5e\x7a\x33\x10\x7b\xa2\x73\xa6\x08\x17\x7a\x5d\x10\x8c\x3e\x4d\x8b\xcd\x46\xc8\x27\x67\xea\xe2\xfa\xd2\x5b\xdb\x5f\x70\x69\x55\x01\x49\x0f\x04\xfd\xdb\x16\x19\x2d\x31\x7f\xca\x20\x4b\x09\x33\x32\xbc\x21\x96\x4c\x32\x91\xdc\x3b\x4b\xfe\xcd\x3b\xa2\x84\xe5\x39\x46\xd1\x33\x92\x7f\x22\xb8\x2a\x73\x20\xec\x29\x26\x32\x48\xf6\x83\x64\xdf\x6c\x83\x64\x3f\x48\xf6\xad\x66\x9d\x74\x7d\x60\x8e\x2b\x84\x6c\x65\x8f\xf8\xdc\xc0\x20\x1f\x6b\x03\x83\xc4\x36\x30\xc8\x81\x41\x3e\xd5\xf1\x93\x6f\xb9\x93\xa4\xfb\x64\x5f\x4f\xf1\x8e\xc1\x73\x30\x78\x0e\x06\xcf\x81\x6b\xc3\xf5\xe9\xda\x70\x7d\x0e\xd7\x67\xbb\x7d\x76\xd7\xe7\xe0\x39\x18\x3c\x07\x83\xe7\x60\xf0\x1c\x34\xdb\xe0\x39\x18\x3c\x07\x83\xe7\x60\xf0\x1c\x6c\x69\x83\x64\xdf\xb1\xd3\x41\xb2\x1f\x24\xfb\x6d\x6d\xf0\x1c\x0c\x9e\x83\x81\x41\x0e\x0c\x72\x60\x90\x5b\x5a\x1f\x3d\x07\x49\x06\x94\x6f\x56\xe7\x57\x92\x1b\xf1\x39\x14\x00\xd9\x94\xb9\xd4\x3e\xf7\x6b\x32\x81\x39\x5d\x30\x51\x4a\xf2\x30\x07\xee\xf3\x52\xc9\x0c\xb4\x32\xbb\x00\x34\x6c\xd2\x00\x9f\x60\x6f\x8f\xb3\xb4\x11\x01\x4e\x27\xd9\xc6\x8e\x9f\xe2\x5e\xee\x97\x8f\x7b\x4a\x26\x42\x98\xb7\x5b\x9f\x31\xd4\x5e\xbc\x36\x10\x21\xa9\x65\x9b\xce\xb5\x39\xb1\xe5\xed\xcd\xbb\x67\x4d\x67\xd9\xd8\xc9\x65\x35\x36\x41\x17\x0e\xa6\xfd\x99\x2b\xcf\x7c\xfa\xf1\x81\x43\x8a\x49\xe9\x67\x84\x69\xf3\x80\x61\x2c\x2c\x61\x3a\x5b\x56\xe4\x7d\xde\x79\x32\x6f\x6f\xde\xed\xee\xe6\xf2\xab\xb4\xb5\xeb\x88\x1e\xad\xc1\x5f\x35\xf8\xab\xaa\x36\x08\x6d\x1d\x3b\x1d\x84\xb6\x41\x68\xdb\xd6\xe2\x0b\x6d\x7d\xf7\xef\x0c\x5e\x19\x32\x78\x65\xfc\x63\x83\x57\xe6\xc9\xc7\x07\xaf\xcc\xe0\x95\x19\xbc\x32\x8f\xb7\x41\x7e\x75\x6d\x90\x5f\x07\xf9\xb5\xdd\x3e\x3b\xf9\x75\xf0\xca\x0c\x0c\x72\x60\x90\x75\x1b\x18\xe4\xc0\x20\x5b\xed\x73\xcc\xe7\x18\x2c\xdc\x83\x85\x7b\xb0\x70\x0f\x17\xe0\x70\x01\x0e\x17\xe0\x53\x1d\x0f\x16\x6e\xdf\x06\x0b\xf7\x60\xe1\x6e\xb5\xc1\xc2\x3d\x58\xb8\x07\x0b\xf7\x60\xe1\xde\xd2\x06\xf9\xb5\x63\xa7\x83\xfc\x3a\xc8\xaf\xdb\xda\x60\xe1\x1e\x2c\xdc\x03\x83\x1c\x18\xe4\xc0\x20\xb7\xb4\x3e\x5a\xb8\x9f\x38\xbc\xbb\xec\xd2\xa6\xbd\xda\x89\xcd\x3e\xd2\x7d\x4c\xde\x52\x4e\x18\x4f\xb2\x32\x05\xfc\x66\x0a\x54\x97\x12\xd4\x19\xc9\x58\xce\x7c\xb1\x0e\x21\xcd\xa6\x19\x25\x54\x81\x72\x7d\x6c\x1c\xaa\xea\x77\xc3\xb7\x8f\xbf\xe6\xe3\x7c\xe4\xd1\x5a\x67\x55\xd8\x3e\xe3\xbe\x1f\xb7\xad\xf6\x26\x83\x25\x3b\x4c\xb3\x19\xdf\x3c\x88\xb5\x5b\x6c\xa1\x9f\x27\x5f\x7b\xdb\x16\x7c\x64\xcb\x3d\x79\xb9\x3c\x75\xa5\x8c\xc8\x84\x2a\xf8\xc3\xbf\xad\x95\xb8\x6a\x3e\x92\x43\xca\xa8\x19\x6a\xe3\x13\x4f\x5f\x33\xf5\x10\xdb\x37\xf9\x0e\x87\xa5\x22\xa3\x63\x2f\xae\x9c\x4d\xd7\x23\x62\xf6\x5d\x7a\x69\xfb\xb8\xd5\x92\x6a\x98\x2d\x1b\x75\x9b\x70\x9b\xd5\x42\x03\xdf\x52\xc2\xcc\x6b\xa0\x1b\x87\x78\x98\x83\xb4\x47\xcc\xd7\x0a\x52\x7e\x20\xa6\xaa\x74\xa1\x2e\xf9\x1f\x4f\xe5\xff\xf8\x71\x36\x7c\xfd\xd4\xfa\x6e\xaa\xa0\xe4\xdb\xae\x17\xa4\x9f\xcf\x77\xd6\x43\xf6\xae\x02\x82\x59\x9d\xe0\x82\x4a\x73\x31\x79\x4f\x1a\x8a\x67\xf5\xd3\x5b\xfb\x5f\x59\xb6\x6d\x77\xd4\x0e\xb2\xda\xd3\x32\xda\xa8\x81\x63\xb3\xcd\xab\xb7\x8b\x68\xe6\x6a\x43\x5e\x83\xcc\x99\x52\xdb\x92\xa2\xda\xa4\x3f\x75\x8b\xed\x70\x7b\xad\xc8\xcc\x7e\x5d\xfc\x1b\x35\xc8\xa9\x04\x68\x6b\x65\x99\xd0\x84\xc8\x32\x33\xe2\x34\x4f\x89\xab\x53\x44\x68\x92\x88\x92\x6b\xc2\x01\x52\x4c\xac\xda\xb8\xbd\x77\xb8\xfb\x76\x90\xa0\x77\x95\x9f\x47\x96\xce\x27\x9f\x72\xef\x70\x61\x5f\x61\x63\x91\xac\x66\xdb\x5d\xde\xc6\xe1\x9f\x16\x22\xf6\x91\x4c\x76\x96\x4b\xba\xc8\xac\xd7\x22\x63\xc9\xf2\xa6\xcc\x80\xcc\x45\x96\x2a\xac\xf9\x66\x2e\xcf\xca\x27\xda\xd4\xa5\x0a\x7c\x1a\x5f\xf2\x8c\x4c\x4a\x4d\x52\x01\xd6\x6c\xe8\xd0\xa5\x9a\x3f\xdf\x69\x7c\xeb\x29\x7f\x98\xdb\x62\x84\xa6\x63\x42\x8b\x22\xc3\xcc\x49\x61\x04\x8f\x87\x39\x4b\xe6\xb6\x24\x6c\x41\x13\xd8\xf4\xd8\xee\x72\xe9\x4e\xba\x1a\xd9\x4b\x5f\x23\xde\xec\x3d\x79\x6a\xd7\x91\x3d\x15\x37\x62\xcb\x82\x7d\x23\x45\x59\xec\xf8\x78\xb7\x3d\x40\x6c\xc9\x30\x3b\x90\xb9\x8e\xf4\x8a\x88\xe5\xbf\x74\x4e\x72\xbb\xd4\xca\x59\x60\x9d\x47\x66\x8c\xe9\x8f\x79\x99\x69\x56\x64\xf8\x13\x8b\x80\xa5\x08\x95\x50\x5f\x70\x67\x84\xf2\xa5\xf7\xb9\xbb\x12\x86\x90\x12\x3a\x33\x3d\x6a\x2c\x8f\x2a\xa6\x3b\x53\x6d\x6b\x24\x96\xb9\x91\xbf\x1a\x36\x60\x85\xea\x3e\x5f\xd6\x54\x90\x07\x96\x65\x46\xf9\xa1\x59\x26\x1e\x20\x1d\x93\xa3\xa3\xd5\x0b\x28\x11\xb2\x41\x37\xb2\xba\xa3\x7f\x6d\x3d\x65\xf8\x5a\xfd\x62\xbb\x29\x72\xfb\x6a\x21\x64\x3f\x4d\x84\xec\xaf\x73\x11\x54\xa5\xee\x2b\x07\xd5\x28\x63\x4a\x8f\x1c\x95\x5a\xe4\x2c\xd9\xa9\x13\x2e\xb8\x77\x44\xfc\xf9\xe6\xfb\x67\xdf\xa0\x57\xed\xe1\x5c\x4d\x4e\xd0\x66\x8f\x16\x54\x6a\x46\x33\x52\xca\x4c\xd9\x3d\x4a\x8d\xc2\x22\x7d\x15\xd4\x39\xc5\x38\x8f\x04\x14\xb2\x0b\x42\xfe\xd5\xee\x4a\xb7\x19\x2c\x2b\x13\x3c\x5b\x12\x6a\xb7\xc2\xb4\xcc\xb2\x33\x32\x65\x9c\x9a\x8b\x0c\x0a\x9f\xc3\xbb\x83\x69\xa6\x6e\xb7\x8c\x27\x60\xa6\x69\x54\xf9\x26\x90\x72\x33\xb2\x61\x99\x15\x4f\x4b\xcf\x5c\xd9\x4f\x6b\xa9\x52\x8e\x14\xc3\xdf\x12\x3a\xc9\x00\x35\x0d\x27\x73\xde\x88\x0c\x5d\x8a\x95\xdf\x03\x6b\x85\xd2\xe6\xd7\xff\x8b\xf1\x5d\xb5\x75\xdb\x6e\xf0\x6a\x4f\x28\x27\xc0\xf4\x1c\x24\x0e\xbd\x34\xfc\xd7\x6c\xf6\xfa\x50\x9d\xa8\x32\x99\x9b\x29\x3a\x2a\x44\xaa\x8e\x0c\x77\x3e\x52\x90\x48\xd0\xea\xe8\xd4\xfc\xb5\xfa\xae\x38\x5f\xcd\xdf\x9d\xd3\x82\x1d\x9d\x9e\x11\x9c\x70\x2c\x50\x2a\xf4\xfc\x17\x7e\x8e\xfc\x84\xb5\xca\x8b\x3f\xd5\x5a\xa7\xe8\xa6\xd9\x83\xab\xac\x29\x0a\x5b\x94\xd2\xdc\x9f\x1a\x30\xed\xdc\x9c\x14\xdc\x73\x0d\x1f\xf4\xca\x45\x4a\xc8\x05\x27\x60\xbd\x86\xa0\x49\x0e\x94\xbb\xa7\x61\x01\x72\xa9\xe7\xe8\x48\x54\x15\x17\x1d\x56\x6e\x87\x68\x84\xba\x6d\x5c\x35\xc7\xca\xfc\x0a\xd5\xc7\xcd\x16\x7f\x5e\x5d\xa1\xe3\x7f\x3d\x5e\xbd\x92\xea\x3b\xf8\x97\xbd\x1e\x28\x84\x75\x5a\x8b\x1f\xcc\x2f\xdb\xeb\x60\x3f\xb2\x97\x49\xc5\x0e\xbf\xff\xde\x16\x7b\x76\x13\xfe\x1d\xe3\xa9\xaa\x80\x55\x53\x7b\x4b\xb8\x45\xdb\xb8\x52\x48\xe1\x2f\x76\x95\xd6\x95\xae\x5d\x15\xa5\x27\x68\x6c\x68\xe5\x7d\x50\xa4\xb1\x5e\x74\x4b\x4a\x36\x6c\xf7\xcc\x7a\xe7\x8d\x58\x99\xd1\x09\x64\xca\x19\x10\xa1\x41\x3e\xb9\xf8\xfe\x43\x55\xba\x5d\x02\x7d\xc2\x28\xfe\x0c\xea\xf3\x0e\x61\x3e\x6b\x25\xf2\xd7\xdb\xee\x6a\x0e\x4e\xc5\x7e\x4e\x2c\x72\x0b\xda\x9e\xd5\x9c\x16\xe6\xa8\xda\x3e\xac\x73\x65\xc5\x71\xf2\x3d\xce\xf4\xd3\x27\x6e\x2f\xf5\x70\xf7\x92\xcf\x9b\x06\xd9\xe9\xbc\xed\x16\x4a\xb4\x47\x87\x8f\x99\xf2\xea\xd6\x9a\xe6\x95\x0d\xed\xf4\x42\xa7\xc9\x25\xb4\xe9\x50\x48\x41\x59\x70\x1d\x0b\x70\x24\xfd\xe7\x75\x17\x91\x97\x60\x1f\xfd\x7c\x44\x14\x64\x90\x6c\xaa\xc9\xbe\xe9\x61\x0d\x79\x91\x3d\x75\xf2\xc8\xde\xba\x7c\xce\xf8\x0d\xd0\x74\x79\x0b\x89\xe0\xe9\x8e\x5c\xba\x9b\xb2\xf4\x81\x71\x96\x97\x39\xe1\x65\x3e\x01\x5c\x0b\x65\x07\x45\x8e\x63\x0d\x2a\x94\x70\x78\xc8\x96\x8e\xcb\xa4\xa4\x10\xa9\x67\x3c\x13\xa3\xd5\xd3\x74\xd7\x4b\xe7\x81\xe9\x39\x96\xad\xe0\x4b\x33\x14\xd3\xf5\x8d\x28\x49\x22\xa9\x32\x42\xe3\x19\x0e\xcd\xb4\xb9\x45\x27\x80\x2e\x76\x96\x82\xd9\x32\x74\x41\x59\x66\xb4\x9c\x5d\xaf\xc5\x77\x30\xa5\x65\xa6\xd1\x3e\xf4\x8a\x9c\x18\xc2\xbd\x72\xbf\xa9\x5b\xa3\x77\x28\x21\xb8\xf9\xaf\x85\x5d\xc2\x97\x3b\xdd\xc3\xcf\xb7\x0b\x10\xba\x6f\xbb\x02\xa2\xfb\x56\xd0\x52\xed\x6a\x66\x6a\xed\x86\x4b\x9e\x9a\x43\xd8\x94\xe6\x1b\xf7\x08\x53\xae\xe7\xdd\x66\xf5\x71\x28\xaf\x0d\x54\x4b\x31\x93\xa0\xd4\x3b\xa0\x69\xc6\x38\xbc\xc0\xa6\xbe\x9b\x03\xc9\xe9\x27\xdc\xd8\x9a\xe5\x60\x84\xad\xe6\xb6\xa6\xcd\xd7\xd7\x82\xe4\xf4\x1e\x2a\x3a\xc9\x04\xa6\x42\xee\x10\xd2\xe1\x1b\x53\xcd\xcd\x64\x37\xed\x94\xb2\x0c\xd2\x31\x52\xd2\x18\xcb\x6c\x76\x29\xb2\x0c\xa4\xdd\x87\xe6\x6f\xc6\x4b\x20\x5a\xec\x38\x58\x21\x05\x9a\x26\xec\x00\x4d\x69\x06\xa5\x05\x6a\xba\xb4\x37\x0e\x1e\x36\x42\xc9\xf5\xca\xfc\xbf\xff\x94\xa0\x11\x7e\xc7\x01\x25\x50\x85\x9d\xd9\x63\xa3\x4a\x39\xa5\x89\x97\x5f\x5b\x2f\x67\x23\x66\xc6\xe4\x4a\x68\x17\xba\x5c\x4d\xa9\xf9\xf5\x8e\xe3\xa1\xa6\x0f\x04\x94\x66\x39\x72\x9b\xb4\xc4\x90\x54\x33\x18\xae\x25\xdd\xbc\x77\x5b\x67\xfd\x0f\xaf\x5e\xed\x28\x3a\x3f\xff\xa9\x95\x80\xb6\x99\x67\xdd\xf0\x57\x15\xf7\xf6\xb7\x6b\x21\x52\x65\xb6\x1f\x73\xaa\x4a\x21\xcc\x3b\x4a\x8c\xe5\x60\x4a\x33\x3e\x2b\x99\x9a\x93\x09\xe8\x07\x00\x4e\xe0\x93\x85\x97\xdb\x71\xbc\x7f\x82\x14\xb8\xdf\xcc\x6a\xd5\x0e\xc9\xd6\x1a\xbc\xee\xcf\x02\x2c\x98\x62\x82\x7f\xcb\x94\x16\x72\xf9\x3d\xcb\xd9\x13\x35\x2d\x7c\xeb\xce\x7d\xea\xeb\x54\x64\x29\xb9\xb1\x5b\xe0\x16\xec\xcc\x48\x40\xf7\x87\x16\xd6\x36\x42\x0c\x47\x98\xd0\xe4\x7e\xd7\x5b\x6d\xef\x55\xdd\xb6\x5e\x1d\x6e\xd1\xd7\xaf\xfa\xb2\xac\x5e\x50\x7b\xce\xa5\x44\x95\xa0\x1a\x09\xef\x0e\x7b\xb0\xde\x7f\xb2\xd3\xdd\x5a\xda\x87\xb9\x50\x80\x0f\x10\x2a\x9f\x96\x09\x9b\xaf\xe1\x7d\xa2\x4c\x55\x9c\x16\xe3\x55\x38\x28\x42\xa7\xd3\xf6\x13\xe9\x1e\x92\xb2\x6d\x97\x9a\xe4\xa5\xd2\x24\xa7\x3a\x99\x5b\xeb\xb4\x48\x2b\xe9\xf5\x58\x39\x2d\x73\x9f\xa5\xdd\xd9\x3d\xb6\xbf\x23\x8b\x58\x3a\xdf\x7f\x2a\xcc\xe5\xf1\x94\xcb\xbb\xdd\x5a\xeb\xbc\xda\x4d\xdb\x6a\x93\xb5\x17\xd7\xa9\x09\x78\x97\xda\x8b\xbb\xf9\x09\x5a\xe2\x2f\xae\xde\xed\x7e\x6a\xba\x18\x65\xf6\x36\xcb\x74\xf7\x91\x98\x76\xf1\xc8\x1c\x78\xa7\x89\xfb\xa6\xed\xcd\x43\xfd\x59\x9d\x11\x4a\xee\x61\x79\x66\x25\x8f\x06\x28\xaa\x79\x78\x2f\x42\x24\x64\x4e\x3c\x05\xd3\x23\x76\x68\xc7\xd8\x7d\xb6\x3b\x6c\x4c\x3f\xf8\x3e\xfe\x5b\xdf\x46\x86\xd0\x3d\x7f\xe1\x27\x68\x8f\x9f\xed\x7f\x76\x6c\xbb\x87\xe5\x7e\x3f\x58\xd9\x49\x66\x15\x9c\x16\x6f\xf7\x88\xf9\xa0\xd2\x1e\xaa\x6d\xb1\x9f\x63\xbd\xd9\x3a\x18\x14\x6d\xf3\x93\x18\xf4\x7a\x7b\x1e\x94\xe6\xb8\x2d\x3b\xad\x99\x96\x63\x65\xf7\xaf\xe1\x30\x73\x56\xd8\x9c\x3e\xe7\x6d\xdc\x7f\x13\xdb\xf6\x03\xcd\x58\x5a\x0d\x69\xb9\xcf\x25\x3f\x33\xb2\xb5\xf9\x0f\x5e\x3f\x56\xe2\x7f\x27\x40\x5d\x09\x8d\x9f\xbc\xd8\x1a\xd8\xd7\x7a\xe9\x15\xb0\xa3\x3a\xa7\x15\xb2\x55\xb4\x57\xd8\x94\x35\x37\xd3\x1e\x57\xb9\x8e\xf4\x54\xe4\x92\x13\x21\xdd\xd4\xed\x3d\xa8\xe9\xcc\x0d\x6c\x87\xc4\x8b\x74\x62\x9d\xb5\xe8\xfe\xda\x38\xa6\x5b\x21\x21\x5b\x0b\x14\x71\x78\x37\x34\xca\x82\xf6\x1b\x34\x57\x14\x19\x6a\x67\x4e\x69\xa2\x3e\xb4\x6a\x47\xaf\x48\xb3\xe5\x20\x67\xe8\xc5\x4e\x76\xf6\xba\x56\x44\x77\xb8\xf8\x6c\xdb\xfb\xfa\x6b\x0e\xd8\x61\x23\x47\xf1\x25\x45\xeb\x06\xe5\x15\x6b\x86\xee\x28\xf1\xec\x75\xaa\x1a\xc3\xb5\x6c\xe4\xff\xc7\x5c\xea\xb8\xe9\xfe\x2f\x29\x28\x93\x6a\x4c\x2e\x88\x62\x7c\x96\x41\xeb\x3b\x67\x02\x68\x74\xb3\xd7\xe0\x85\x19\xd4\xdc\xbd\x0b\x9a\x39\x43\x0c\xe5\x04\xac\x39\xde\xd0\xb1\x2a\xbe\x9d\x39\x09\xdb\x5c\x45\x55\xfc\xc3\xd1\x3d\x2c\x8f\xce\xb6\x86\x99\x6f\x6e\xcd\x93\x7a\x74\xc9\x8f\xac\x08\xb3\x76\xd6\x2a\x79\x07\x83\x2c\x8e\xf0\xbb\xa3\x98\xb2\xe1\x9e\xb2\x4a\x57\x67\x42\x7b\xd0\x3d\x8e\x49\x6b\x57\xe7\xb4\xd8\x77\x53\xfb\xc0\xce\x0e\x3a\xda\xdd\xaa\x71\xc9\x45\x40\x6b\x41\x4a\x05\x56\x8d\x46\x66\x47\xc0\xeb\x62\xa8\x79\xa1\xd5\x8b\xc3\x03\xea\x4e\xbd\x51\x68\x8c\x8a\xcf\xf8\xec\xcf\x45\x4a\xf5\x4e\x39\x45\xb6\x75\x3f\xdb\x37\x76\x40\x52\xe2\x88\x66\x27\x4f\xd9\x8c\x14\x54\xd2\x5c\x8d\xc9\xb5\x2b\x37\x80\xfb\x9a\x4d\x9b\xee\x1b\x37\xcf\x77\xcb\x02\xc8\xff\xdc\x7f\x40\xfb\x86\xcf\x7c\x0e\xba\x09\xc5\x39\xfd\x74\x5b\xca\xd9\x1e\xd3\x4f\x82\x85\x96\xa6\x25\xba\xb6\x09\xe1\x46\x6d\x82\x08\xa9\x64\x0e\x69\x99\x41\x4a\xe8\x44\x2c\xa0\xe5\x27\xab\x7e\xb6\xe7\xd0\x68\xa8\xd8\xf3\x37\x3f\x18\x0e\xe7\x89\x32\x42\xd6\x44\x89\xac\xd4\x95\x3d\xeb\x04\x3e\xbd\x21\xbf\xc7\xf8\x2d\x4a\x0a\x90\x09\x70\x4d\x67\xb0\x6a\x78\xb4\xcf\xbd\x7e\xf5\x2f\xa7\xfb\x12\x80\xe2\x8c\x19\xdf\x99\x81\x5f\x99\xdd\xf9\x81\x7e\xfa\x33\xaf\x9d\x34\x4c\x91\x1d\x8d\x50\x75\xbb\x58\x79\x11\x1c\x25\x4b\xca\x0c\x4d\xcc\x18\x17\xd7\x78\x9d\xc9\x92\x48\x51\x62\x64\x1c\x29\x8b\x7d\xc7\x6a\x9a\xcb\x7e\xfb\xfb\x7f\xd9\xf7\xe7\xef\x3f\xd1\xbc\xc8\xe0\x8d\xaf\xfb\x62\x6d\x7d\x46\x9f\xd0\x82\xfc\xee\xd5\xbf\x9c\xd9\x28\x01\x78\x68\xd8\x9e\xea\x7d\x44\xcd\x26\x2a\x0b\xc2\x72\x9b\x27\x03\xd9\x12\x3b\xda\x57\x82\x33\x57\x5c\x9b\x85\x28\x4d\xa5\x56\x67\x04\x03\xf4\x2a\x4d\x50\x0b\x4d\xb3\x15\x73\x27\x1a\x1a\xe1\xc1\x6e\x85\x54\xe0\x5a\x02\x7a\x1d\xf6\xa4\xe2\xf5\xef\x5e\xfd\xcb\xba\x51\xfb\x23\x4f\x00\xc7\xc1\xfe\x31\x5e\x73\x02\xc0\xc9\x3d\xcb\x32\x48\xf7\x15\xb1\x9f\x9a\xc8\x69\x29\xf5\x1c\xe4\x19\x01\xae\xbc\x27\xc2\xbc\xfb\xca\x7b\x23\x2d\xb2\xe4\x7c\x7f\x09\x94\x5a\x7f\x28\x3a\x37\x1a\xce\x0e\x37\xed\x46\x30\xd3\x24\x17\x4a\x6f\x9e\x8e\xbd\x06\xa3\x7c\xf9\x71\xba\xaf\x78\x3d\xea\x60\xcc\x5d\xff\x75\x07\xe1\xbc\x25\x7d\x30\xae\x47\x42\x8e\x6c\x37\x6f\x88\x96\xe5\x3e\x02\x5f\xde\x62\x21\x3d\xbc\x01\xca\x06\x83\x5b\xdb\x04\x9f\x1d\x1b\xef\xce\x6e\x53\xf1\xc0\x63\x5d\x1a\x78\xdb\x77\xba\x2e\x5e\x84\x85\xb7\x3d\x43\x2b\x9c\xc7\xcc\x83\x79\xfa\xff\xbf\x7e\xe4\xf7\x55\xa9\x57\x6e\x82\xed\xbc\xdd\xb1\xd6\x8a\x75\x1b\xb5\x06\x03\x20\xce\x56\x68\xdd\x93\x82\x0d\x6f\x56\x71\xd5\xa9\xb0\xe1\xc1\x66\x13\x98\x07\x2c\x51\x1b\xae\xb8\x9a\x01\xef\x7d\x95\x6d\xb9\xaa\xec\x3b\xd6\xb1\x1f\x1a\xc3\x2e\x0d\x1b\x56\xdb\xf8\xf0\x9e\x43\x67\x40\x95\xde\xb4\x84\x03\xd7\x7e\xb2\x3d\x9e\xe1\xbb\xda\xda\xaa\xa3\xd1\x5d\x70\xc6\x2b\x3f\x19\x26\xaf\x4f\x80\x1c\xdd\x80\x8d\x62\xb2\x19\x09\x2d\xa5\xe5\xa8\xf2\x5f\x9b\xc5\x0e\xd2\x67\x76\x9e\x36\xef\x82\x7b\x56\x7f\xb4\x1b\xa3\x91\x9d\xe7\x3c\x80\xee\x0a\xaa\x42\xa2\x6c\x7c\xd7\xee\x6e\x68\x70\xd9\x27\xee\x08\xfb\x97\x19\xab\x02\x92\xb1\x04\xe4\x2a\x36\x69\xd0\xda\x55\xd0\xdc\x72\x91\x3d\xd0\xa5\x3a\xea\x8d\x6a\x9e\x83\xa6\x8f\x27\xa5\xaf\xb6\xee\x02\xc1\xad\xa6\x3c\xa5\x32\x75\x6f\x74\xac\xaa\xd1\xf7\xe1\x08\x1f\x30\x3c\x89\x4f\xc5\x1b\x32\xd7\xba\x50\x6f\xce\xcf\x67\x4c\x8f\xef\xff\xa8\xc6\x4c\x9c\x27\x22\xcf\x4b\xce\xf4\xf2\x1c\xa3\x8d\xd8\xa4\xd4\x42\xaa\xf3\x14\x16\x90\x9d\x2b\x36\x1b\x51\x99\xcc\x99\x86\x44\x97\x12\xce\x69\xc1\x46\x89\xe0\x0b\xe0\xe8\xbf\x18\xe7\xe9\xaf\x3d\x49\xcf\xab\xc3\xb7\xd8\x04\x3a\x54\xe4\x02\x46\x25\xbf\xe7\xe2\x81\x8f\xd0\xbc\xa7\xf6\x62\x18\xbb\x45\xad\xfa\x16\xb0\x86\xfb\x04\xb5\x16\x62\x0f\x9b\xe0\xb3\xaf\xac\x99\xa2\x11\xe5\xe9\xc8\x86\x6a\x3d\xef\x02\x77\x71\xab\x8e\xea\x70\xd0\xdd\xa9\xeb\x66\x0d\xa2\x89\x66\x0b\xe8\x14\x94\xe8\x5b\x98\x62\xf0\xd1\x67\x5d\xa5\xa5\xb4\x7b\xa9\x11\xa5\xe8\x43\x34\x72\xba\x44\x19\x1e\x89\x25\xc2\x0a\x6f\x5c\xa4\xe0\x5c\x8e\x8b\x3d\x42\x07\x7d\xbb\x35\x6c\xf9\xce\x68\x9b\x2e\xd2\x11\x3d\xba\x4b\xa5\x21\xb7\x57\x81\x1d\x2d\x5b\x12\x2d\x97\x36\x3c\x52\xde\x13\xa6\x7d\xcc\xa1\x51\xef\xef\xf1\x39\xa5\x44\xc2\x50\xa4\xaf\x97\xad\x9b\xae\xe2\xbd\x5a\x94\x14\x42\x31\x7c\x2f\x27\xb8\xec\xd7\x5f\x77\x99\xa7\x11\x7e\xf4\x87\x7f\xdb\x67\x1f\x4d\x11\x58\x73\x4f\x6f\x7b\x3b\x3c\x77\xda\xcc\x79\x76\x4b\x7f\xac\xbc\x55\xd0\x08\xa2\x89\xe0\x4a\x4b\xca\xb6\x63\x49\x6c\x6e\x1d\x43\x22\xba\xc7\x1d\x10\xdc\x9d\x17\x9d\x26\x85\xac\x67\x15\x78\x81\x05\xb7\xbc\x9f\xea\xe6\xc4\x58\xa8\x09\x9f\x1d\xb3\x27\xbb\xb5\xad\xf3\x1c\x91\xa0\x79\xb2\xbf\xb6\xc0\xbe\xe9\x3b\xd4\x37\x6e\xab\xf7\xba\x9c\x71\x51\x7d\xfc\xfe\x13\x24\xe5\xae\x98\x6c\xeb\x2d\xd4\xed\x6e\x9b\x91\xf6\xbc\x99\xda\x45\x2f\x5b\xea\x0d\x87\xf0\x5f\x38\xa1\x52\xe0\x7a\x39\xe9\x52\x51\xcd\xd4\x74\x5f\x47\xb0\x6f\x66\x55\xab\x75\x87\x46\x28\x57\x75\x62\xaa\xb0\x38\x94\x19\x6c\x7e\x36\xd3\xc8\x39\x93\xb9\x10\x6a\x1f\x33\x51\xb3\x51\xbb\xe9\xf0\x1d\x16\x4c\xd8\x00\x25\xc4\x1c\x90\x24\x37\x6c\xd3\x5d\xf1\x0d\xa2\xac\x6b\xb0\xfe\x19\xdb\x57\x57\xf7\x0d\xcd\x7d\xd5\xe6\xf0\x81\x38\x66\x70\x74\x6f\x99\x3f\x66\x28\xac\x2b\x4d\x54\x99\x1b\x52\x1e\x80\xcd\xe6\x5a\x9d\x11\x36\xde\xdb\x5e\xe4\x9b\x39\x46\x40\x93\x79\xe3\x15\x72\x00\xdd\x2a\x96\xdd\x3c\x7b\x4d\x1f\xe8\xc9\xa3\x90\x46\x4f\x37\x87\xef\x70\x56\xc9\x0d\xab\x47\x62\xe3\x36\x38\x23\xa0\x93\xf1\xe9\xfe\x71\x15\xb6\xd5\xe0\x75\x66\x16\x27\x4b\xc2\x34\x98\xcb\x18\x55\x7f\x29\xca\x99\x9d\x6b\xf0\x29\x62\x38\x07\x55\xf6\x3d\x86\xbd\xa5\xe9\xfe\x26\x09\xdf\x8e\xec\xa2\x1d\x99\x13\x83\x73\x5b\xe6\x1e\x7a\x19\x57\x00\x1d\xe0\x50\x21\x4e\x48\x50\x85\xb0\x66\xb2\x55\xd7\xf8\xff\xd8\xd3\x01\xde\x6c\x66\xa8\x13\x75\x5a\x6f\xad\x39\x9b\xcd\xfd\xce\xa2\x4e\x3e\x68\xef\xc8\x6e\x1b\xac\x7b\x58\x88\x6d\x1d\x83\x43\x6c\x8b\xc3\x05\x1b\x49\xef\xf5\xf1\x6c\x1c\x09\x0d\x32\xaf\x96\x0d\x4f\x0d\x5e\x2b\xce\x2d\xed\x8b\xb8\xbb\xc3\x4a\x5e\x75\xa6\xe2\xc4\x9c\x72\xc2\x8c\x06\x69\xf8\xd4\x48\x14\xa7\x63\x72\x41\x78\x59\xb1\xe5\xc7\x08\xe3\xa2\xa2\xcb\x75\x64\x88\x55\xa2\xee\xab\x2b\xb7\x0e\xb9\x4a\x6d\xeb\x16\x8d\xd9\x6c\x23\x37\x03\xf0\x74\xd9\x95\xc7\x3a\xb1\x6b\xd4\xb1\x83\x30\xb1\xc0\xf7\xe1\xdf\xa2\x7b\x1f\xab\xb0\xe8\x96\xaf\xd4\x51\xbd\x20\xf3\xb3\xa6\x1c\x5f\xf1\x80\x36\xbb\xb1\x73\xd1\x75\x57\x90\x38\x3b\x83\x44\x9a\x57\x12\x14\x60\xbe\xb9\xad\xcc\x72\x05\xa1\xd1\x9a\xed\xd6\x7d\x39\x59\xe2\xb7\x7b\xc6\xde\x6f\x6f\xa1\xcc\xb5\x6e\x41\x6c\xb6\x6e\xb1\x18\x6e\xdd\x56\x77\x6f\x9c\x68\xf5\x08\x84\xe1\x70\x71\x62\xd8\xb7\x0c\x10\xe7\xf4\xd8\x16\xce\x61\xeb\xb6\x7f\x14\xfc\xb6\x7e\xa2\x2d\x47\x2c\x16\x61\x5b\x87\x38\xfa\xcd\x6d\x2d\xb8\xed\x79\xc2\xea\x37\xb7\x80\xf8\xd8\x4d\xad\x6b\x08\xfe\xe6\x16\x9f\x51\x98\x76\xf3\x02\x51\xfa\x9b\xdb\x4e\xb1\xfb\x67\xed\xc0\x7d\xf2\x8d\xb6\x8c\xe9\xfb\xa0\x5b\xb6\x6e\x91\x57\xbc\x5b\xc0\xff\xe6\xf6\x3c\xeb\x7d\xf1\x72\x29\x01\x9b\xdb\x81\x13\x05\xf6\x24\x6a\x3b\x41\xdf\x68\x43\xcc\xf7\xfa\xac\xf1\xe3\x48\xd4\x34\x48\xb0\x30\x7b\x3e\xaa\xdc\x29\xd8\x67\x0e\x70\xc2\x3b\x24\x31\xb9\xb5\x90\x80\xa8\x8f\x98\xf5\xd1\xc9\x28\xbc\xbd\xed\x9c\x3d\x11\x92\x0d\xb1\xb9\xc5\x93\xd7\x6c\x8b\x24\xb5\xd9\x16\x99\x7b\x44\xcb\xb2\x78\xf1\xce\x51\x4f\xf8\xda\x3a\x23\x0f\xa8\x22\x58\x77\xe8\xa0\x22\x3c\xd9\x06\x15\x61\x50\x11\x9e\x6e\x83\x8a\xb0\xde\x06\x15\x61\x50\x11\x82\xda\xa0\x22\x3c\xd9\x06\x15\xe1\xc9\x36\xa8\x08\x75\x1b\x54\x84\xfe\xab\x08\xa1\x19\xb2\x9b\x9b\xf5\xb7\x44\x73\xfb\xfc\xc5\xba\x1b\x57\xfd\x3c\xa8\xdc\xf8\x30\xf7\xb6\xc3\xc7\x48\xd1\xb7\x4e\xd4\xb8\x43\x27\x91\x4b\xf6\x96\x94\xcf\x80\xbc\x1e\xbd\x7e\xb5\x77\x52\x45\xb3\x85\xc4\xa6\x37\xdb\xbe\xa0\x51\xeb\x2d\xfa\xce\xd8\x16\xbf\xd0\xbf\x90\x1e\xc7\xd9\xab\xb8\x8a\x96\xf2\xb9\x25\xbe\xa6\xaa\x48\x90\x83\xde\x3f\x21\xc2\xb7\xa6\x63\x9a\xe5\x50\x05\xbd\x59\xb6\xee\xd2\x78\xea\xa4\x58\xc1\x5d\x80\x84\xd9\x96\x5d\xb7\x5d\xa7\xb7\x4d\x80\xda\x64\xf3\x09\x98\x37\xee\x1a\x4a\xa4\x89\x12\x39\x58\xb8\x36\x7f\x75\x98\xd7\x05\xbf\x0d\xc8\x09\x8c\x67\x63\x92\x96\xe0\x60\x10\x6c\xd6\xc9\xe9\x59\x23\x38\xb3\x6b\x2c\x91\x11\x78\x24\xfe\xc7\x4c\xac\x8b\xe9\x84\x05\x70\x5d\xd2\x2c\x5b\x12\x58\xb0\x44\x57\x2b\x80\xc9\x59\x4c\xab\x80\xb9\x0e\x56\x45\x43\xd5\xcf\xd1\x1a\xff\xea\x26\x9e\x84\xeb\x89\x6b\x74\x74\xe7\xe9\x2b\x05\x01\xec\x0c\x8d\xb7\x5a\x92\xb4\x19\xcd\x06\xa4\xe1\x3f\xf1\xe0\x7e\xbc\xe9\x1a\xbb\x43\x22\xc9\x23\xc1\x32\x48\x4c\xd5\xc0\x05\xcc\x08\xe9\x42\x7a\xd6\x67\x70\x43\xc8\xcc\x06\xfc\x8f\xbd\x73\xf3\xdb\x4d\xcf\x21\xef\x82\x21\xb2\xa9\x19\xda\xee\x44\x21\x32\x31\x5b\x36\x37\x9e\xab\xdb\x5f\xa3\x9d\x53\xa2\xca\x89\x53\x6e\xcd\xd9\xbf\x5a\xd9\xa9\x43\xb0\xc7\xd6\x36\x04\x7b\xac\xb5\xc1\x92\x3b\x58\x72\xf7\xe8\x67\xb0\xe4\x0e\x96\xdc\xc1\x92\x3b\x58\x72\xbb\xb6\xc1\x92\xbb\x17\x51\x83\x25\x97\x0c\x96\xdc\xad\x6d\xb0\xe4\xba\x36\x04\x7b\x6c\x6c\x83\x8a\xb0\x6f\x1b\x54\x84\xf0\x7e\x06\x15\x61\x50\x11\x06\x15\x61\x50\x11\xba\xb6\x41\x45\xd8\x8b\xa8\x41\x45\x20\x83\x8a\xb0\xb5\x0d\x2a\xc2\x7a\xc7\xd1\x82\x3d\x9e\x81\xdc\x98\x84\x16\x22\x8d\x0e\xe7\x52\x88\xf4\x11\x34\x17\xeb\x0b\x4f\xc4\x28\x13\x09\xc5\x5a\x82\xcc\xfe\xc4\xc5\xa0\x28\x9a\xdb\x50\x80\x33\xf2\x4f\xc1\xc1\x62\x40\xd8\xda\x9d\x39\x10\xa1\xe7\x80\x65\xba\x4e\xd4\x69\x87\x44\xf6\x01\x0d\x66\x97\x36\xa0\xc1\x0c\x68\x30\x03\x1a\xcc\xcb\xa2\xc1\xcc\xa9\x72\x25\x2e\x50\x28\xda\x0e\x0e\xd3\xe0\xd8\x77\x20\xf3\x01\x1b\xe6\xa9\xb6\xa6\x8b\xbb\xe3\x63\x56\xb8\xb1\xd9\xed\x8c\xa7\x2e\x9c\x12\xd2\xeb\xf6\x3c\x3b\xc3\x1d\x4e\x0b\x4d\x53\x48\x49\x01\x72\x64\x0f\x8f\x20\x53\xe6\x2a\xcc\xac\x9c\x66\x37\xc3\x5d\x19\x62\x4f\x00\x57\xda\x33\x11\xd0\xd3\xe1\x51\x57\xda\xaf\x12\x2d\x54\xa9\x19\xb1\xd5\x12\x7f\x3e\x3b\x0c\x96\x38\xf6\xc2\x11\xd1\x2e\x4c\xe9\xbb\x20\x8b\x61\x2c\xf3\x1e\x9a\xdf\x6e\xf7\xaa\x29\xbb\xbd\xc5\x36\x69\xf8\x42\x9d\xff\x5d\x82\x5c\x12\xb1\x00\x59\x1b\xab\xfc\x4d\xab\x5c\x8c\x36\x62\xe1\xbb\x3a\xb4\xe1\xaa\xe9\xe5\xd4\xa2\x4c\xf1\x32\xcb\xce\x6c\xef\xab\x6c\xcf\x5f\x44\xb6\xf2\x92\x30\xdf\x47\xf2\x5e\x44\x31\x70\xc7\xb4\xff\xc6\x8e\x24\x23\x3d\xab\x58\xbb\xbd\xc5\x35\x4f\x44\x34\x4e\x3c\x93\xf5\xb0\x2f\x95\x71\xb7\xb7\xe7\xf4\x2f\x91\xd8\x3e\x26\x12\xd9\xcf\x44\x22\xfa\x9a\x48\x5c\x7f\x13\x89\xee\x73\x22\x31\xfd\x4e\xe4\xc5\x2b\xfd\x6e\x6f\xd1\xcd\x8a\xb1\x5d\x51\xe4\xd9\x18\x0c\x79\xe9\x8a\xc2\xdb\xdb\xcb\xd4\x1a\xde\xde\x9e\x61\x17\xc4\x74\x4f\x91\x67\xdd\x03\x07\xa9\x69\xbc\xbd\xf5\xd2\x69\xf5\x28\x61\xcf\x5e\x07\x79\x7b\x8b\xee\x03\x22\xcf\xe0\x07\x22\xb1\x7d\x41\xe4\x79\x8e\xec\x33\xfb\x84\x5e\x60\x80\x4e\xd5\x9b\xb7\xb7\xe7\xe0\x39\x07\xad\xf8\xfc\x18\x59\x07\xac\x05\xbd\xbd\x1d\xbe\x4a\xf4\xf6\x16\x59\x3a\x0f\xad\x2c\xfd\x14\xa1\x51\x58\xc5\xf3\xb8\x5f\x49\xeb\x5c\x7c\x07\xcb\xb8\xc1\x9f\x11\x4e\xee\x87\x16\x75\x5e\xfd\xd4\xae\x86\x5d\x2d\xb5\xa3\xaf\xcd\x0a\xec\xce\x47\xe0\x2a\x62\x67\x59\x30\x0d\x13\x20\x9a\xde\x03\x46\x5c\x08\x2c\x47\xc2\x52\xb0\x75\x6b\xec\x56\xc7\xf1\xcd\x16\x2f\x15\xa4\x86\x90\x4c\x88\xfb\xb2\xf0\x47\x05\xd3\x8a\x63\x1c\x4c\xc6\x13\x91\xfb\xfc\x69\x9b\x4d\x67\x4e\xbc\xe3\x05\x23\x5b\x67\xcc\x7e\x8e\xe4\xe0\x25\xed\x8c\xaa\xff\x68\x19\xf9\xfe\x41\xa8\x22\xff\x40\xf5\x87\x93\x13\xfc\xe1\xe9\x3f\xc2\x43\x33\xab\x25\xb0\x7e\x39\x51\x22\x87\x5d\x29\x52\xde\x5e\x9d\xc7\x66\x37\x98\x20\x5f\x1b\xa5\x39\x71\xc7\xd6\x9f\x7e\x42\xb9\x66\xa7\x95\x29\x7a\x4c\x70\x7f\xa1\xee\x97\x0a\x7e\xac\x2d\xd5\x9e\xeb\xfb\x0e\xc2\x23\x32\xab\x95\xab\x23\x7b\xac\x87\x7b\xec\xca\xbe\xdb\x2a\x7c\x55\xcd\x38\x2b\xe3\x05\x8f\x7b\xe7\x63\x07\x9c\xca\x3b\x15\x72\xc2\xd2\x14\xb0\xd0\x66\xf5\xaa\x13\xe1\xa1\x31\xea\x23\x67\xf8\x7e\x6b\xef\x84\x13\x73\x91\x29\x71\xb6\x3a\x4e\x42\xb9\x07\x3f\x00\x6d\xab\x75\xb6\x86\x25\x4c\x99\x65\x51\x10\xac\x7e\xf5\x2e\x3c\xfc\xb9\xee\x89\xc8\x29\x02\x4c\xf5\xfc\xae\x58\x25\x70\xb8\x2e\xa2\x5f\x17\x5c\xe8\xe1\xc6\x18\x6e\x8c\x95\x1b\x63\xed\xe0\x3d\xdf\xa5\xb1\x36\xd4\x70\x6f\xf4\xfc\xde\xe0\x34\x07\x55\xd0\x04\x3e\x23\x0f\xb3\x35\xff\xdb\xbc\x35\x4f\xbe\x6a\x94\xd3\x06\x99\x47\xf5\x0a\x78\xa8\x1a\xbc\xb1\xb0\xdf\xd4\x87\x42\x95\xbc\x51\x6b\xb5\x41\x8c\xe5\x9b\xab\x51\x7f\xc1\x94\x78\x35\x5f\x70\x50\xe8\x7c\x85\x2a\xf6\xb4\x31\x38\x8e\x15\xfe\xda\x08\x41\x53\xbb\x59\x78\xba\x0a\x4a\x53\x8f\x88\x7e\xe0\x1c\x28\x57\xe4\xc8\x07\xc5\x1e\xab\xfa\x89\x1d\x8b\x2a\x3f\xd6\xaa\xf2\x56\x15\x45\x27\xff\xe7\xff\x9e\xb6\x4a\x5a\xd5\x04\x0d\x5e\xfe\x9d\xdb\xe0\xe5\x0f\x6a\x83\x97\x7f\xf0\xf2\xc7\xe8\x6b\xf0\xf2\x0f\x5e\xfe\x8d\x6d\xf0\xf2\x0f\x5e\xfe\xc1\xcb\x3f\x78\xf9\xd7\xdb\xe0\xe5\x1f\xbc\xfc\x8d\x36\x78\xf9\xbb\x93\x35\x78\xf9\xf7\x6c\x83\x97\x3f\xa6\x97\xbf\x36\x5c\xf4\xcd\xfa\xd6\x34\x69\xb9\x4c\x56\xd4\x3e\x35\xd5\x2c\xa9\xd1\xa3\xfc\x53\xf6\x5f\xfd\x32\xc5\x35\xcd\x64\xcf\x63\x88\x6b\x1a\xfb\xd6\xec\xa9\x91\xec\x70\x5b\xad\x6e\x95\x5d\x6e\x6d\xe4\x67\x35\xc8\x0d\xe6\xf6\x6e\x54\xd6\xa9\x65\x7d\x3b\xea\x77\x1e\xcc\x40\xcd\x45\x99\xa5\x46\xb8\xad\x90\x0e\x52\x72\xe2\x3d\x6b\xa7\x66\x2b\x72\xa1\xdb\x5f\x72\xcd\x46\xf5\x13\x55\xa2\x20\xba\x05\x7d\x35\x8f\xf0\x25\xf6\x36\x82\xda\x7b\xe4\x70\x17\xaa\x24\xfb\xfa\x74\x98\x1b\x1a\x64\xeb\x1d\x98\x22\x29\x4c\x19\xb7\x20\x2d\xb2\xe4\xdc\x08\xe7\x82\xbb\x1c\xfa\x60\xfa\xac\x48\x60\x5d\x7d\x8e\x0f\x59\x93\x06\xce\x07\xda\x35\xea\xe5\x6f\xa4\x49\x53\x64\xa2\x94\x3b\x9c\x77\xc1\x9d\x53\xd5\x7c\x62\xfb\x09\x26\xad\x62\x51\xb8\x22\xac\x7a\xfb\x70\xee\xf4\x1e\xb9\x52\xf3\xc5\x98\xc2\xfd\x41\xb3\x4c\x3c\x84\x4b\x1b\x51\xce\x75\xe4\xb2\x35\x81\xa7\xed\x61\xef\xaa\x37\x2b\xb9\xbf\x61\x9a\xed\x50\x30\x67\xc7\x36\x14\xcc\x79\xba\x0d\x05\x73\x1e\x2f\x98\xd3\x88\x6c\x6a\x56\xce\xe9\x3a\xdb\x58\x6f\xe7\x00\x95\x73\x08\xf9\xcb\x1c\x90\x6f\x48\xb0\xe1\x48\x65\xa6\x59\x51\x23\xa2\x29\xbb\xf2\x99\x35\xc4\x4d\x1d\xb2\x4e\x9b\x8b\x19\x1a\x69\x32\xef\x48\xc0\x0a\x0f\x44\x2a\x10\x77\x4d\xe1\xcd\x66\x11\x65\xd0\x0f\x6c\xcb\xca\x78\x0b\x9d\x05\xf6\x61\x9f\x3f\xfe\x47\xc0\xad\xf3\x0e\xc5\x9e\x76\xbc\x9d\x22\x27\x46\x5a\xca\x96\x2e\xea\xac\x75\xfd\xb4\xc4\xac\xce\xc3\x5a\x2f\xc2\x02\xbc\x8a\x36\x63\x0b\xe0\xb5\x8c\x76\xa2\x4e\x4f\xbd\xae\xb8\x2a\x7b\x76\x1e\x33\x44\x66\xed\x7e\xaf\xee\x2b\x6b\xae\xc8\x8a\x9d\xc7\xdd\x20\x63\xfe\x47\x43\x16\xfb\xcf\xa7\xa5\xcc\xce\x43\x5b\xd6\xe6\xe1\x96\x1a\xdb\xaa\x96\x2e\x3b\xf6\xdd\x13\xec\x98\x70\x18\x90\x18\x7e\xd8\x68\xf0\x1f\x71\xeb\x53\x1d\x02\xf6\xe3\x00\x90\x1f\xbf\xa4\x82\x51\xbd\x0c\xfe\xe9\x9d\x9d\xe9\x39\xd0\xe2\x7b\x1d\xec\x33\xc0\xc5\x07\xf5\xf3\x8b\x82\x8b\x3f\x50\x30\xcf\x2f\x10\x35\xbe\x07\xc1\x3b\x87\x0c\xdc\xf9\xc5\xa1\xc6\xf7\x28\x50\xa7\x97\x41\x3a\x7d\x0b\xd0\x19\x60\xd8\x83\xda\xe7\x09\xc3\x1e\x35\x08\x27\x36\x1f\xe9\x61\xf0\x4d\x0f\x03\x6f\xfa\x1a\x74\x13\x51\x52\x7e\x9e\x60\x9b\x48\x2c\xe0\x79\x82\x6c\xe2\xa5\x46\xc7\x3c\x95\x87\x86\xcf\xe8\x45\x2e\x74\x9f\x61\x33\x7a\x95\x00\xdd\xaf\xe4\xe7\x43\x24\x3e\xf7\x06\x26\xe3\x80\x10\x19\x71\xc4\xc0\x08\xc2\xdf\x73\xf0\xfb\x78\xb2\x58\x54\x38\x8c\xa8\x3c\xff\xf0\x30\x18\x5f\x2c\xdb\x8f\x08\x7f\x31\x70\xfe\xad\xad\xef\x9c\xff\xb9\xe1\x2e\x0e\x0b\x75\x31\xf0\xff\x9d\x5a\x54\x58\x8b\x67\xf6\x9c\xbe\x24\x9c\x45\x3f\xa0\x2c\x5e\x0c\xc6\xa2\x3f\x10\x16\x2f\x06\x5f\x31\x78\xac\x07\x8f\x75\xbb\x0d\x1e\xeb\xc1\x63\xbd\x4f\x3f\x83\xc7\x7a\xf0\x58\x0f\x1e\xeb\xc1\x63\x1d\xd8\x06\x8f\x75\x47\xa2\x06\x8f\xf5\xe6\x36\x78\xac\x07\x8f\xf5\xe0\xb1\x5e\x6b\x83\xc7\x3a\x88\xc0\x9e\x7a\xac\xe3\x40\x42\xc4\x3c\x91\x7d\x82\x82\xe8\x03\x0c\xc4\x4b\x41\x40\xf4\x0e\xfe\x61\x30\x41\xef\x46\x5d\x1c\xa8\x87\x98\x47\xb8\xdf\x10\x0f\x7d\x86\x77\xe8\x29\xb4\xc3\xf3\xc0\x3a\x3c\x27\xa4\x43\xf0\x99\x8d\x7a\x5a\x0b\x91\x5e\x70\xcd\x7c\x0a\xd9\xfe\xe7\xb4\x75\x3a\xdf\xe1\x1f\x13\xb0\x67\xac\x75\x60\x9a\x79\xf2\xb2\xcc\x40\xb9\x34\x71\xba\x10\x2c\x25\x45\xa9\xb5\xcd\xbc\x75\xe7\xd3\x6f\x7c\x9a\xdb\x4c\xf9\x33\xf2\x4f\xc1\xe1\x8c\x80\x4e\xc6\x66\x73\x63\x0e\xba\xd0\x73\x90\xe6\xf1\x13\x75\x7a\xba\xff\x9a\x04\xc9\x67\x61\xa6\xbd\x42\xc2\x14\xe4\x67\x81\xac\x80\x9e\x67\x07\x5f\x20\xad\xc3\xdb\x52\x8f\x21\x02\xee\x0b\x7b\xfc\xb4\x70\x59\xef\x78\xec\x6d\xda\x79\xd7\x1b\x12\xf1\x0d\x5a\x1b\x08\x1a\x6e\x8e\x2d\x18\x07\x67\x64\x52\x6a\xc2\x34\x02\x03\x24\x73\x21\x54\x57\xee\xe2\x92\x94\xf1\x45\x16\x4c\x58\x73\xba\xe0\x80\xa8\x03\x42\x56\x3c\xb0\x41\x94\x55\x25\xea\x9f\xb1\xae\xca\x56\x2e\x94\xae\x77\x88\x37\xce\x9a\xc1\xab\x3b\x67\x26\xc1\x50\xa4\x89\x2a\x73\x43\x8a\x05\x54\x51\x16\x02\xa0\xe3\xb0\x53\x23\x62\xd1\x64\xde\x78\x85\x1c\x40\x5b\xd7\x9c\xcf\x72\x6e\x1c\xe2\xa6\xce\x74\xe2\x73\x5e\x3b\x8e\x6d\x3a\x03\xa5\xcf\xb6\x22\x8e\x6c\xdf\x0b\x96\x27\x9c\x76\x35\x4a\x25\x22\x2f\x4a\x0d\x46\x8e\x2f\x73\xb3\x9b\x98\xc6\x88\x15\x64\x46\x52\x94\x33\x3b\xe1\x1e\xe4\xc1\x4e\x44\x8d\x20\xc2\x53\xa2\xca\x89\x96\x34\xd1\xdd\x6f\xff\x23\xbb\x7c\x47\x55\x60\x11\xd2\xc2\xa6\x15\x4e\x08\x99\x53\xd5\x8c\xb8\xa9\xaf\xd7\x27\x70\x72\xfe\x47\xc0\x05\x6b\x06\x3e\x51\x0d\x41\x67\xce\x66\x73\xbf\xe7\x8c\x92\x8c\xa6\x85\xd6\x5e\xfd\xdc\x01\x26\xcc\x01\x76\x47\x09\xa5\x96\x7a\xe3\xdb\x19\x4f\xc9\x5f\xf0\x5b\x48\x57\xd3\xae\x71\x3b\x58\xdb\x01\x4d\x53\x23\x8f\x80\x1c\xd9\x83\x24\xc8\x94\x39\x4d\x69\xe5\x64\xbb\x19\xee\xca\x21\xfb\x01\x12\xb0\xb2\xe3\x02\x7a\xb2\x33\xdf\xb1\x83\x18\xae\xb6\x95\x57\x89\xa6\xb4\xdc\xb8\x69\x1e\x93\x0b\x2b\x18\x79\x36\x66\x34\xf8\xb3\x35\x18\xac\xf5\x53\x6d\x67\xa6\x07\x41\x11\x71\xfc\xb5\x31\x90\x25\x48\x44\xf7\x6a\x34\x84\x09\xf2\x32\xe5\x7f\x5e\x00\x69\x82\x1c\x06\x6d\x82\x0c\xa5\x67\xfa\x15\xcb\x43\x86\xd2\x33\x3d\x8b\xed\x21\x43\xe9\x99\xa1\xf4\x4c\xf7\xd6\x87\xd8\x1f\x32\x94\x9e\xe9\x41\x2c\x10\x19\x4a\xcf\xec\xd2\x86\xd2\x33\x43\xe9\x99\xf5\x36\x94\x9e\x19\x4a\xcf\x34\xda\x50\x7a\xa6\x3b\x59\xbd\x8b\x27\x22\x3d\x8e\x29\x22\x43\xe9\x99\xc8\xa5\x67\xe2\x65\x49\x93\x67\x38\xb9\x87\x46\xc8\x20\x7d\x49\x97\x26\x3d\x47\xca\x20\x7d\xcb\x99\x26\xbd\xcb\x9b\x26\x07\xca\x9d\x26\x7d\x42\xce\x20\x87\x45\xcf\x20\x7d\xcc\xcf\xfb\x3c\x2a\x17\x45\x45\xd4\x20\xcf\x71\x57\x1c\x1e\x59\x83\x7c\xe9\xd7\x45\x44\x84\x0d\x32\xdc\x18\xbb\xb4\xcf\xe1\xc6\x78\x6e\xc4\x0d\x72\x70\xd4\x0d\x32\xdc\x1b\x5d\x5b\x54\x24\x0e\xf2\x32\x1e\xe6\x97\x44\xe4\x20\xbd\x41\xe5\x20\x2f\x89\xcc\x41\x7a\x85\xce\x41\x5e\x12\xa1\x83\x0c\x5e\xfe\xc1\xcb\xbf\x73\x1b\xbc\xfc\x83\x97\x3f\x46\x5f\x83\x97\x7f\xf0\xf2\x6f\x6c\x83\x97\x7f\xf0\xf2\x0f\x5e\xfe\xc1\xcb\xbf\xde\x06\x2f\xff\xe0\xe5\x6f\xb4\xc1\xcb\xdf\x9d\xac\xc1\xcb\xbf\x67\x1b\xbc\xfc\x31\xbd\xfc\x71\xd0\x44\xc8\x33\x9c\xda\x3e\xa1\x8a\x90\x9e\x20\x8b\x90\x17\x44\x17\x21\x7d\x44\x18\x21\x83\xb9\xbd\x33\x95\x71\x50\x47\xc8\x33\x1c\xf5\x7e\xa3\x8f\x90\x9e\x23\x90\x90\xfe\xa2\x90\x90\x67\x43\x22\x21\xcf\x8c\x46\x42\x62\x9d\x6b\x9b\xa2\xda\x17\x9c\x1f\x4b\xcd\x5a\x66\x6d\xab\xc2\xff\xa3\x89\xf3\x61\x9a\xad\x3b\x34\x92\xf2\x19\x90\xd7\xa3\xd7\xaf\x5e\x85\xe7\xee\x32\xae\x61\x06\x21\xd6\xcb\xa9\x90\x39\xd5\xd8\xd3\xef\x7e\xdb\xa9\x9f\xe8\x6c\x7b\x1b\xdc\x43\xff\x60\x50\x9c\x4d\xa4\x0d\x43\xd1\x92\xfe\xb7\x60\x92\xa0\x56\x60\x4e\x6b\x0e\x9a\x74\xf6\x0d\x34\x80\x37\x34\xcb\xe1\xcc\xf3\x7e\x1b\x13\xe1\x03\x00\x1c\x1a\x4b\x4a\x04\x77\x22\x9b\x61\x77\x5d\xf7\x5e\xf7\x57\x4e\x80\x2a\x44\x3e\x98\x80\x79\xed\x8e\xe3\x53\x6d\x61\x7e\x0a\xc1\xb8\xf6\x86\x1e\xf3\xce\xe0\x37\x84\xc3\x10\x4a\x4b\xb0\x16\xd4\x3a\xc6\xa9\x2c\x52\xaa\xe1\x34\x44\x55\x54\x4b\xa5\x21\x47\x28\x19\x23\xe9\x51\x0c\xfe\x21\x5a\x2e\x31\x00\x64\x01\x5c\x97\x34\xcb\x96\x04\x16\xcc\xc5\xef\x98\xe1\x31\x7a\x89\x69\x15\x34\xf3\x7f\x99\x03\x72\x10\x09\x36\x30\xa9\xcc\x34\x2b\xb2\x1a\x85\xc4\x2e\x7f\x66\x4d\x72\x53\x07\xba\xd3\xe6\x67\x86\x46\x9a\xcc\x3b\x12\xb0\xc2\x0d\x91\x0a\xc3\x80\xa4\xc2\x3b\xce\xe2\xcc\xa0\x47\xd8\xa8\x0a\xaa\xb2\xd5\x59\xcc\x1f\xf6\xf9\x23\x81\x04\xdc\x3f\xef\x50\x00\x6a\x47\xde\x29\x72\x62\xe4\xa6\x6c\xe9\xe2\xcf\x5a\x17\x51\x4b\xe0\xea\x3c\xac\xf5\x27\x2c\xc0\x2b\x6b\x33\xb6\x00\x5e\x4b\x6b\x27\xea\xf4\xd4\x6b\x8d\xab\x52\x68\xe7\x31\x43\xa4\xd7\xee\x37\xec\xbe\x52\xe7\x8a\xd4\xd8\x79\xdc\x0d\xd2\xe6\x7f\x34\xa4\xb2\xff\x7c\x5a\xde\xec\x3c\xb4\x65\x6d\x1e\x84\xa9\xb1\xad\x6a\x39\xb3\x63\xdf\x3d\x41\x91\x09\x07\x04\x89\xe1\x91\x8d\x06\x04\xf2\xcc\x05\x93\x5e\x00\x00\xe4\x00\xe0\x1f\x43\xe1\x9e\xa1\x70\x4f\xbb\x0d\x85\x7b\x86\xc2\x3d\xfb\xf4\x33\x14\xee\x19\x0a\xf7\x0c\x85\x7b\x86\xc2\x3d\x81\xad\x47\x21\x3b\xbd\x0c\xd7\xe9\x5b\xa8\xce\x50\xb8\x27\xa8\x0d\x85\x7b\x86\xc2\x3d\x43\xe1\x9e\x46\x1b\x0a\xf7\x84\x1c\xcd\x78\x49\xd2\x31\x4f\xe5\xa1\x81\x34\x7a\x91\x15\xdd\x67\x00\x8d\x5e\xa5\x42\xf7\x2b\x0d\xfa\x10\x29\xd0\xbd\x01\xcc\x38\x20\x58\xc6\x50\xe7\x69\xa7\x16\x15\x18\x23\x2a\xcf\x3f\x3c\x20\xc6\x17\xcb\xf6\x23\x02\x61\x0c\x9c\x7f\x6b\xeb\x3b\xe7\x7f\x6e\xe0\x8b\xc3\x82\x5e\x0c\xfc\x7f\xa7\x16\x15\xe0\xe2\x99\x3d\xa7\x2f\x09\x6c\xd1\x0f\x50\x8b\x17\x03\xb4\xe8\x0f\x98\xc5\x8b\x01\x59\x0c\x1e\xeb\xc1\x63\xdd\x6e\x83\xc7\x7a\xf0\x58\xef\xd3\xcf\xe0\xb1\x1e\x3c\xd6\x83\xc7\x7a\xf0\x58\x07\xb6\xc1\x63\xdd\x91\xa8\xc1\x63\xbd\xb9\x0d\x1e\xeb\xc1\x63\x3d\x78\xac\xd7\xda\xe0\xb1\x0e\x22\xb0\xa7\x1e\xeb\x38\xe0\x10\x31\x4f\x64\x9f\x40\x21\xfa\x00\x08\xf1\x52\x60\x10\xbd\x03\x82\x18\x4c\xd0\xbb\x51\x17\x07\xf4\x21\xe6\x11\xee\x37\xd8\x43\x9f\x81\x1e\x7a\x0a\xf2\xf0\x3c\x00\x0f\xcf\x09\xee\x10\x7c\x66\xa3\x9d\x56\x5a\x6a\x91\x8b\x92\xeb\x5b\x90\x0b\x96\xc0\x45\x92\x98\xbf\xee\xc4\x3d\xec\x99\xd5\xdf\x3a\xa2\x17\x8f\x74\x4b\x18\x4f\x59\x82\xb6\xc9\x87\x39\xe8\xb9\x4b\x9b\xc3\xe7\x08\xb5\x0f\x12\x8d\x4f\xd6\x27\x14\xe9\x34\x77\x2c\x66\x76\x63\xd7\xfb\x2e\x81\x9d\xa1\x89\x10\x19\xd0\x7d\x5c\xd1\x4e\x66\x04\xb9\x27\xa3\x0e\xe3\x59\xdf\x3b\x51\xa2\x1e\x9d\x4c\x20\x13\x7c\xe6\x72\xc8\x1d\xd7\xd9\x77\x17\xbe\xad\xbb\x73\xae\xda\xa4\x94\x12\xb8\xce\x96\x38\xcd\x69\x0a\x29\x41\xf3\x54\x2e\x16\xfb\x6f\xf2\x3b\x64\x47\x5e\x87\xa7\x9a\x64\x40\xcd\x7b\x70\xa8\x5f\xc4\x30\x34\x4a\xae\x3b\xd0\x5e\xf9\x96\x2d\x88\x40\xa7\xf5\xdf\xff\xc6\xee\x74\x47\xb7\x4f\x83\xd7\xcb\x50\x4a\x4b\xd0\xc8\xd7\x98\x0f\x64\x90\x4b\x51\x92\x07\x6a\x55\x29\x59\x72\x64\xa9\x38\x51\x1d\x16\x39\x40\xe9\xe8\x6e\x8c\x1f\xe1\xbd\xb4\xe7\xcf\x42\x8c\xe3\x54\xce\x3a\x89\x4e\x31\x64\x89\x0b\x39\x2b\xad\xa6\xe8\x8e\x22\x70\x2d\x97\x88\x87\xd1\xed\x5e\xb8\x9b\xb7\x4e\x48\x4e\x67\x70\xac\xc8\xdb\x0f\xef\xcc\xad\x83\x11\x48\x6c\x6a\x65\x76\x77\x0b\x15\x52\x2c\x58\xda\xf5\x1a\xfa\x81\x4a\x46\x27\x99\xd1\x7a\xa7\x20\x81\x1b\x49\xfa\xab\x93\x1f\x2e\x6e\xfe\x7e\x75\xf1\xe1\xfd\x29\xea\xbf\xf0\xa9\xa0\xdc\xb0\x83\x52\xd5\xc8\x3c\x8e\xc2\x63\x45\x80\x2f\x98\x14\xdc\xcc\x02\xda\x0d\x29\x59\xb8\x4e\x3b\x51\x54\x07\x8e\x48\x50\x22\x5b\x40\x6a\xb1\x34\x2a\x02\xeb\xf0\x9d\xa2\xd4\xde\x82\xea\x63\x6f\x4a\x9e\xcc\x29\x9f\x41\x3a\x26\xef\x44\x69\x5e\xec\xab\xaf\xf0\x25\x24\xa4\x65\x02\xdd\x74\x1c\x6b\x82\xb7\x27\xf7\xab\x33\x2f\xb3\x98\xdb\x1f\x63\x6f\x08\xa8\x84\x16\x7e\x6a\x9a\xb3\xa7\x96\x5c\xd3\x4f\x6f\x2c\x16\xc7\xd1\x57\x8d\xaf\x8e\xba\x07\xae\x15\x52\x98\x57\xb1\xb2\xa0\x7d\xfb\x8c\x69\x90\x34\x23\x47\xcd\x11\xc6\xe4\xbd\xa1\x0b\xd2\xe6\xda\x5a\x30\x1a\x58\x80\x44\xdb\xaa\x5b\xd9\x33\x22\x61\x46\x65\x9a\x81\xea\x66\x14\x12\xd3\xea\x0a\xb7\xa6\x16\xb7\xab\xa0\xb2\x19\x73\xa1\xc7\xa1\x8c\xdb\xb7\x0f\x02\xc1\x4e\xa6\xe2\x0d\x99\x6b\x5d\xa8\x37\xe7\xe7\xb5\x14\x34\x66\xe2\x3c\x15\x89\x3a\xd7\x54\xdd\xab\x73\xc6\x0d\xf3\x1b\xa5\x54\xd3\x51\x83\xeb\x9e\x5b\xd9\x78\x94\x88\x3c\xa7\x3c\x1d\x51\x77\x8e\x47\xd5\xce\x3e\xff\xb5\x93\x1e\x47\xb4\x7a\x8a\xf1\x11\x1d\xa9\x39\x74\x5a\xb9\x30\x45\x31\x40\x41\x0c\x14\x32\x23\x2b\x84\x6e\x2e\x0f\xc5\xb0\xdf\x57\xfc\xd9\x2e\xc5\x98\x5c\x09\xed\xf0\x8a\x5c\x44\x25\xde\xb6\xb8\xca\x31\x59\xf8\xfb\xab\xbb\x9b\xbf\x5e\x7f\xbc\xbc\xba\x1b\x38\xf9\xc0\xc9\xb1\x0d\x9c\x7c\xe0\xe4\x1d\x06\xee\x0b\x27\x07\xbe\x38\x14\x17\xf7\x4a\x71\x83\x63\x55\x5b\xd5\x25\x0a\x54\x61\xde\xd5\x3e\xe8\xb6\x45\xa3\xec\xf4\x83\xed\x98\xd6\x64\xbf\xe7\x8b\x1f\x68\x3b\xe2\x84\x6f\x9c\x42\xe2\x1e\xb0\x1a\xfa\xdb\xb0\x09\x0c\xf6\x7c\x85\xc6\x85\x75\x52\x48\x6d\x0b\x8f\xd9\x32\x43\x77\x37\x78\xc7\x33\x77\x5f\xd1\xbc\xb2\xd5\x6e\x5a\xf2\x10\x2b\xe6\x07\xeb\x50\x55\xee\x50\x52\xbe\x24\x85\x64\x5c\xe3\x56\xba\xb8\x7d\x7b\x79\x49\x92\x39\x95\x34\xd1\x20\x15\x81\x4f\x09\x14\x9a\x1c\xff\xcf\xe3\xee\x63\x46\xf0\x75\xa0\xf5\xba\x0f\x2b\xb3\x8f\xe0\x16\x30\x4c\x2d\xf2\x15\x12\x16\x4c\x94\x2a\x5b\x56\x1e\x82\xcd\x7c\x74\x95\x81\x12\xca\x43\x28\x30\xfb\xc2\x9b\x77\x37\x0e\xb8\x22\x74\x6e\x12\x20\x43\x6c\xed\x87\x15\x3d\x1d\x11\x31\x04\xd0\x80\xf1\x37\x88\xae\xbb\x8b\xa1\x01\xe3\x76\x12\x60\xb7\x09\xa3\x01\x74\xb4\xc5\xd8\x80\x8e\xde\xd9\xbc\x2e\x14\x36\x8e\x02\xa6\x26\x16\x27\xfb\x5a\x8a\x3c\x12\x37\xbb\x45\xc0\xc2\x2a\xcf\x6e\xd3\x51\x3d\x76\xc1\xeb\x2d\x45\xc0\xa9\xb4\x55\xa6\x9b\xf9\x3c\x30\xdb\x2d\x4a\xd4\x4c\x9c\xc0\xeb\x44\xf0\x29\x9b\x7d\xa0\xc5\x77\xb0\xbc\x81\x69\x98\xaf\xbe\x3d\xdf\xe8\xb6\x74\xe1\xbf\x78\x81\x1a\x91\xcb\x0e\x16\xe6\xba\x8c\x16\x74\x14\x2b\x34\x3f\x3c\x2c\x3f\x5e\x14\x7d\x94\x08\xfa\xd6\x42\xba\x6c\xe1\x3a\x5d\x36\x56\x82\x45\x94\xc0\xcc\x30\x49\xd4\xb7\xf8\xd1\xd1\x4d\xc9\xd4\x5d\x0f\x51\x82\xcc\xef\x6a\xb4\x73\xa6\x08\x4c\xa7\x90\x68\xb6\x80\xac\x42\x48\x4f\xcf\xc8\xa4\xd4\x1e\x9b\x7c\x42\x93\xfb\x07\x2a\x53\x45\x12\x91\x17\x54\xb3\x09\xcb\x98\x5e\x12\x16\xa3\xbe\x96\x0b\x15\x70\x80\xeb\x3e\xc6\x9a\x2b\x4d\xf1\x2a\x14\xce\x10\x68\x56\xdb\xc6\x50\x50\x9f\x20\x67\xb9\xa9\x07\x1a\x8f\x42\x4a\x2e\x94\x26\x09\x48\x23\xd4\x65\x4b\xf2\x20\x45\x8c\x1a\x18\xbb\x1a\x73\x12\xc1\x8d\xfc\xaf\xce\xc5\xc2\xc8\x82\xf0\x70\xfe\x20\xe4\x3d\xe3\xb3\x91\x79\xf1\x91\x65\x56\xea\x1c\x63\x5b\xce\x7f\x8d\xff\xe9\xd3\x29\x22\x3e\xa3\xfb\x0d\x39\x3a\x0a\xec\x4b\x14\x36\x8c\x33\xf2\xa9\xbc\xc5\x00\xa1\x65\x4b\x74\xaa\x2e\x14\x23\xfa\x30\xad\x90\x4f\x79\xf7\xbc\xd3\x02\x22\x4d\xf3\xfe\x81\x15\xeb\xed\xb9\xca\x8c\x21\x3b\x88\x7b\x7b\x07\xf3\xc0\xfa\xfa\xb7\xcc\xca\xb1\xc2\x42\xa4\x6f\x88\x2a\x8b\x42\x48\xad\x48\x0e\x9a\xa6\x54\xd3\xb1\x39\x10\x67\xed\x3f\x31\x04\xec\x8c\xfc\xa3\xfa\xd0\xe2\x11\xfc\x78\xfc\x1f\xdf\xbd\xff\xeb\x7f\x1e\xff\xf4\x8f\xe6\x77\x28\xae\xd9\xec\xa2\xc6\x03\x81\xaf\xa0\x0a\x48\xc6\x5c\xa4\x70\x85\xd4\xe1\x9f\xaa\x15\xf0\xe3\xbe\xd0\x54\x97\x6a\x3c\x17\x4a\x5f\x5e\x57\x7f\x16\x22\x5d\xfd\x2b\x30\xc7\xa9\x87\x72\x0f\xae\xed\x35\xd5\xdd\x11\xe6\x49\x54\xe9\x87\x16\xec\x07\x90\xaa\x73\xcd\x96\x66\x6b\x9d\x07\xd7\x6b\x05\x85\x9f\xcc\x21\xa7\xf8\xcf\xaf\xfd\x14\x98\xfb\xf8\x41\x32\xad\x31\x06\xcc\x15\xa8\x10\xd3\x33\xcf\x5a\xad\x52\xb5\x78\x1d\x5c\xa0\x2d\x2a\xe7\xaf\x56\x30\xf2\x84\xe1\x8c\xb8\xd9\xb2\x1c\xa0\x86\x5b\x59\x0b\xf9\xbc\xb8\xbe\x24\x0b\x3b\xc3\x3d\x9a\x9c\xe7\x63\xd7\x19\x44\x57\xb7\x82\x19\xf6\xd7\x15\x55\x6e\x99\x1a\xaa\x9b\x53\x98\x91\xf2\xd0\x05\xba\xb1\xcc\xc7\xa6\xe3\xbe\xe7\x0b\x33\xae\x22\x53\xa0\xba\x94\x40\x66\x54\xfb\x02\x3e\xc0\x8d\x4e\x1e\x98\xa2\xd2\x43\x9e\x19\x9e\xc2\x3d\x22\x45\x28\xcb\x35\x9d\x2c\x44\x56\xe6\x78\xb9\xf5\x84\x7b\xc7\xd7\x5d\xa3\xa8\x72\x5e\x01\x76\x51\x14\xad\xc3\x40\x2e\x0c\xb3\x5f\x60\xce\xb1\x7d\x06\x4d\x8f\x58\xa6\xa9\x5d\x9b\x49\x69\x2a\x75\x94\xba\x7c\xa4\x06\xf0\xf2\x96\xee\x3a\xc0\xc3\x5a\xb9\xf2\x17\xf7\x5d\xd4\xcd\x16\x4f\x23\x17\x59\x31\xc7\xcc\xa1\x59\xa5\x07\x6f\x3c\xed\x67\x15\x84\x83\x62\xff\x44\x0b\x5b\xc6\x72\xa6\xad\x5a\xf9\xfa\xb7\x7f\x6c\x10\xda\xa3\xbb\xe1\xd9\xd4\x9c\x28\x3b\x76\x93\xae\x64\xb6\xeb\x23\x6a\x52\x95\x1c\xed\x9f\x8b\x83\x34\x91\x0a\x70\x26\x53\x4c\xab\x36\x23\xd4\x27\x68\x41\x65\x15\x25\x54\x4e\x32\xa6\xe6\x71\x4a\x58\x5f\x4e\xab\xd5\x31\xfd\x2b\xc0\xb0\x63\x2d\x4b\xa8\x12\xba\x6a\xd9\xc3\xcc\xc5\x0a\x95\x11\x48\xd8\x66\x62\x6e\xd7\xcd\xab\xdd\xf9\xd7\x98\xbb\x55\x47\xc3\x8f\x7f\xf5\x6c\xf3\x30\xa5\x99\x7a\xb9\x89\xa0\x9c\x80\x94\x42\x56\x6e\x28\x09\xba\x94\xbc\x4e\x72\xbf\x16\x29\x49\x24\x58\x68\xc2\x1e\x29\xeb\xa4\x69\x14\xc1\x39\x0b\xec\xae\x88\x2f\x64\x47\xbb\xde\x0c\x6d\xcd\xfb\xcd\x8a\x06\xf6\xe2\xb2\xde\xbc\x36\x58\x62\x0c\x41\xd0\xb4\x0f\x8e\x09\x55\x45\xe4\xcc\xb6\xf4\x25\x0f\xdd\x69\xc0\x01\x8f\xc7\xe3\x63\x4b\xa5\x90\xf6\x2a\xb5\x16\x45\xf3\x79\xaf\xae\x85\x5a\xa8\x7a\x06\x33\x3c\x6f\x18\x95\xdd\x12\x61\xae\x90\x9f\x2a\xef\x62\x8d\x25\xab\x7f\x06\xca\x94\xaf\x44\xf6\x75\xaf\x6d\x60\x9e\x4a\xbf\x78\x15\xa3\x7f\x63\x53\xf5\xab\x7a\x6a\x56\xf8\xb1\xf8\x34\x46\xe5\x00\xa5\x43\x0d\xc5\x27\xb6\xcb\x71\x52\x94\x67\xae\xfb\x71\x0e\xb9\x90\xcb\xea\x4f\x28\xe6\x90\x83\xa4\xd9\x48\x69\x21\xe9\x0c\xce\xaa\xc1\xed\xcf\xaa\xbf\xec\x0f\x5b\xe4\xad\xff\xda\x46\x77\xd4\x99\x57\xce\xde\xf7\x05\xea\x72\x7e\xdd\x7a\xa2\x40\x55\xdb\xea\x19\xf8\xcf\x71\x15\x30\x67\x7d\x6e\xd5\x2c\xa2\x4b\xdd\x72\x23\x75\x56\x0b\x1c\x18\xf7\x61\x85\x3c\x75\xdc\x1f\x3e\x44\x48\xca\x16\x4c\xc5\x80\xd1\xda\xe0\x9e\x60\xce\xae\x21\x4a\x5d\x94\xda\x55\xbe\xae\x2c\x28\x9f\x0a\xa1\x30\x5a\xa4\x2a\x9e\xd8\x32\x0d\xbe\x0e\xf5\xbc\xa0\x8c\xa1\x41\xf2\x37\xe4\x7f\x9f\xfc\xed\x37\x3f\x8f\x4e\xff\x74\x72\xf2\xe3\xab\xd1\xbf\xff\xf4\x9b\x93\xbf\x8d\xf1\x1f\xff\x7a\xfa\xa7\xd3\x9f\xfd\x1f\xbf\x39\x3d\x3d\x39\xf9\xf1\xbb\x0f\xdf\xdc\x5d\xbf\xff\x89\x9d\xfe\xfc\x23\x2f\xf3\x7b\xfb\xd7\xcf\x27\x3f\xc2\xfb\x9f\x76\xec\xe4\xf4\xf4\x4f\x5f\x05\x93\x4e\xf9\xf2\x63\x20\xf7\xb6\x6d\x14\xad\x70\xf9\x6a\x8f\x91\x5c\x6d\xad\xab\x90\x71\x3d\x12\x72\x64\xbb\x7e\x83\x4a\x4a\xe0\x00\x7e\x7b\xc5\x3e\xff\x37\x9e\x6b\xd6\xb7\x59\x25\x14\xf6\xe8\x80\x3f\x97\xa0\xa1\x20\x91\xa0\x5f\x22\x4c\xc6\x8e\xe4\x35\xc3\x15\x54\x8f\x2f\xed\x06\xfd\x25\x44\xce\x54\xf5\x93\x71\x5d\x6b\x4d\xca\xa8\x57\xe3\x5a\x09\xa2\xc4\xda\x11\xdd\x73\xf7\x10\x08\xa8\x4e\x86\x48\x9b\x90\x36\x44\xda\x6c\x21\x65\x88\xb4\x09\x6a\x9f\x65\xa4\xcd\xad\xe5\x49\xbf\xc8\x30\x9b\xf5\x04\x33\xd3\xe9\x7d\xe7\x82\x33\x9d\x33\x77\xb6\x65\xba\xe5\xb4\xd8\xbb\x37\xe0\x8b\xae\xc1\xd5\x31\x53\xdd\xbc\xd9\x43\x0b\x52\x88\xa2\xcc\xa8\xde\x92\x45\x11\x29\xef\xad\x67\x9e\xb3\xbf\xcc\x81\x3b\xd1\xcf\xc5\xf0\x33\x4e\xf2\x32\xd3\xac\xe8\x98\x10\x50\xa9\x96\x15\x38\x24\xa1\x4a\x89\x84\x51\x9f\x08\xee\x80\xad\x94\xf6\xaf\x8c\x96\x79\x4d\xef\x31\x87\x26\x81\x14\x78\xd2\xd1\x72\xf8\x83\x05\xa3\xf4\x73\x3b\x59\x9a\x7b\xe8\x3d\x5f\xb8\x3b\x89\xa4\xa5\x4d\x70\x85\xda\x57\x1a\x65\xdc\x2f\x2b\x9b\xd1\x9c\x4b\x97\xad\xd0\x48\x6a\x44\x09\xb2\x32\x22\x56\xe0\xd9\x55\x08\x24\xa6\x7f\x58\x36\xdd\xed\xc2\x0b\x56\x0e\xc2\x45\xf1\x2a\x1b\x21\x48\xc7\x5a\x93\xc1\xeb\x30\xd1\xb6\xec\xdd\x79\x84\x1e\x25\x70\x84\x4b\xe5\x71\x25\xf2\xe7\x90\xc6\xfb\x22\x89\xf7\x44\x0a\x7f\x1e\x09\xbc\x9f\xd2\x77\x34\xc9\x3b\x8e\xd4\x1d\x47\xe2\xde\x23\xae\x3d\xa6\x94\x1d\x47\xc2\x7e\x0e\xfb\x5a\x21\x61\xca\x3e\xf5\x21\x6d\xf9\xa3\x77\x5f\x68\xf8\x84\xa6\x9a\x42\x42\x01\xbc\x42\x1e\xf6\x1e\x58\xa0\xc9\x7c\xc8\x38\x27\x95\x5d\x34\xee\x85\x7d\xbb\xc9\x52\x36\xdc\xd6\x64\xb8\xad\xf7\x68\xc3\x6d\x3d\xdc\xd6\x2f\x72\x5b\x3b\x6e\xf5\xe5\x5f\xd5\x91\x91\x96\x10\x43\xee\x50\x06\xa8\xb7\x6d\x28\x3b\xe4\xcc\xcf\x89\xf6\x55\x1d\xc5\x3a\xc6\xf3\x1c\x47\xee\x76\xe2\xda\x4c\xb6\x0a\xba\xd0\xc2\xb2\x3d\x32\x67\x33\xb3\x3d\x33\x58\x40\xe6\xd4\x6a\x92\x53\x4e\x67\xb6\x84\x89\x16\x55\x09\x5f\x21\xb1\x42\xa9\x64\x1d\xd1\xd3\x57\x30\x01\xd1\x82\x65\xb8\x4c\x26\x68\x8a\x5f\x4a\x91\x65\x46\x5e\xc9\xd8\x3d\x90\x77\x50\x64\x62\xe9\xaa\x90\xf0\x94\xdc\x6a\xaa\x61\x5a\x66\xb7\xa0\x3b\x85\x77\x07\x71\x1c\x24\xf8\xba\xcc\xb2\x6b\x91\xb1\xa4\x93\xf7\x2f\xc6\x56\xbc\xc4\x0d\x58\x94\x59\x46\x0a\x24\xa4\xdb\x3e\xfc\xc8\xf1\x2a\xbf\xc8\x1e\xe8\x52\x9d\x91\x2b\x58\x80\x3c\x23\x97\xd3\x2b\xa1\xaf\xad\x11\xa9\x5b\xbf\x4d\x4c\x10\xdb\x39\x61\x53\xf2\x06\xcb\x2f\x6a\xa2\xe9\x0c\x63\x8b\x7d\x18\xf1\x99\xd9\x50\xcd\x41\x89\x30\x8c\xf2\x81\xa9\x43\xda\xf6\xc2\x4f\xe9\xaf\x71\x74\x73\x75\x76\x3e\xb5\x41\x7b\x35\x63\x53\x48\x96\x49\x76\x30\x86\x79\x91\x60\x7a\x6d\x5d\xec\xa5\xc1\x4e\xd4\x52\x69\xc8\x3d\x9e\x3d\x9a\x74\x19\x27\x12\x54\x21\xb8\x42\x29\xaf\xe6\x12\xd5\x8b\x10\x4c\x92\xe9\x98\xd4\x11\xd1\xe2\xdb\x59\x31\x08\x55\x09\x0a\xa1\xf4\xad\xa6\x52\x77\x95\x4f\x62\xe9\x02\xd7\x9e\x10\x73\x92\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\xdc\x4e\xa7\x1a\xab\x18\x34\x58\xbd\xb2\x31\xfb\x8d\xbc\x91\x39\xe5\x69\x06\x92\x4c\x29\xcb\x54\xf7\xcc\x81\x36\x34\x97\x91\xcf\x41\xe6\x8c\xa3\xf7\xc2\x46\x9d\x62\xf4\xb7\xf9\x2b\x49\x84\x4c\x5d\xbd\x00\xa6\x95\xff\x2a\x88\x89\x9a\xf6\x11\x25\xbb\xc6\xf6\x5e\x0d\xda\x25\x93\x4c\x24\xf7\x8a\x94\x5c\xb3\xcc\xbe\xbc\x10\xf7\xa8\xbf\x64\xc8\x4e\x3a\x0f\xdd\x9d\x4b\x55\xff\x1c\x55\x07\x6c\x64\xa8\x52\xe7\xbf\xae\xbf\xc2\x0f\x3a\x12\x17\x41\x8b\x8e\xa1\x43\xc3\x27\x48\xa2\x95\xda\x79\xff\x09\x92\x56\xa1\x2b\x07\xa4\x6a\x76\x94\x03\x4f\x8e\xe4\x77\xb4\xad\x67\x75\xbb\x03\x40\xab\x9b\x2d\x76\x48\xcf\x5b\xb7\x08\xae\x64\xaf\x5f\x93\x8c\x71\x68\x2f\x8c\x62\x29\xb4\x17\xc7\xba\x3d\x9d\x92\x4b\x52\x26\xb1\xc6\xd0\xd2\xa3\x7e\x05\x93\xe6\x69\xc1\x32\x3c\x42\x68\x72\x72\x7c\x7e\x7c\xba\xb6\x47\x8e\x15\xa6\x5f\xd8\x6b\x71\xec\xa0\xb3\xab\x97\x52\x2c\x2f\xb2\x25\xbe\xc7\x71\x7a\x46\x98\x8e\x11\x23\x64\x6e\x43\x59\x72\x3f\x2b\x0e\xea\xfb\x8c\x28\x41\xb4\xa4\xbe\xb4\x9e\xfd\xd4\x3c\xa4\x65\xe9\x2e\xf4\x93\xe3\x9f\x8f\xcf\x08\xe8\xe4\x94\x3c\x08\x7e\xac\x71\xfa\xc6\xe4\x4e\x90\x32\x38\xe7\x89\xd4\x84\x2c\x45\x49\x38\x80\x3b\x5b\x45\xc6\x12\xa6\xb3\x25\x5e\x37\x44\x94\x36\x43\xcf\x88\x16\x01\x10\xe5\xcd\xf6\xfe\x13\xd3\x0e\x7c\xc3\xf0\xef\x57\xb8\x9b\xec\x95\x45\xa8\x51\x46\x16\x70\x3e\x07\x9a\xe9\xb9\xcd\x66\xe0\x82\x8f\xfe\x09\x52\x20\x8c\x39\x77\xdf\x7c\x71\x65\xe2\x23\x06\x32\x3d\x53\x45\x35\x73\xed\x7d\x03\x9d\x45\x22\xb2\xca\x8f\xbe\xbd\xbb\xbb\xfe\x06\x74\x93\xcb\x73\xfc\x90\x7c\xf3\xfe\xce\xe7\xb0\xa0\xa1\x1f\xe4\x54\xc8\xbc\x07\xec\x3d\x4e\x70\xed\x88\x14\x42\xf6\xe1\x96\x99\x0b\x15\xb4\x9c\xe4\x19\xae\x98\x6f\x85\xd2\xd6\x97\x63\x75\x13\x8e\x89\x8d\xa2\x9d\x90\xe1\xd3\xf7\x2f\xaf\xc7\xe4\xaf\xa2\x34\x13\x32\xa1\x93\x6c\x59\x15\x32\x52\x10\x5a\xf4\x94\x90\x23\x43\xca\x91\xb9\x41\xcc\xce\xff\x16\x68\x0a\x52\x21\x83\x06\x1a\xa9\x3c\x6b\x84\xe3\xde\xa0\x2d\xea\x52\xbe\x2d\x95\x16\x39\x99\xbb\xd7\x6e\x43\x9c\xbb\xc3\x39\xb6\xc7\xd5\xc1\xc9\x4a\x28\x2c\x13\x77\xbf\xf9\xe2\x58\xf4\x1a\xf7\xb2\xf3\xee\x3e\x9f\x58\x31\xb5\x39\x6d\xce\xc1\x61\x81\x4a\x1d\x6f\x33\x5b\x35\x5a\xdc\x6b\x94\xf2\xbe\xf1\x72\x06\x48\x18\xf8\xf9\x6a\x47\xe8\xec\x09\xee\x29\x5e\x1a\x02\x89\x16\x6a\x4f\x9e\xad\xec\xbf\x11\x68\xdd\xe6\xb3\x36\xe8\xee\xd6\xf3\x4d\x9d\x33\x55\xa1\x05\x24\x94\x0b\xce\x12\x9a\xb1\x7f\x42\x4a\xca\x42\x70\x97\x5b\x87\x92\x6d\x42\x15\x8c\xd0\xf3\xce\xb5\xab\x45\x5c\xa3\x5d\x1b\xee\xa0\x85\x40\x71\x0f\x83\xe7\x0c\xbb\xb7\x54\xc7\xac\x7d\x1f\xad\xbc\x7c\x20\x74\x7b\xb3\xad\x39\xd4\x5b\x8b\x15\x67\xc7\x93\xcf\x42\x9c\x24\x91\x80\x17\xd6\xb1\xcd\xb4\x20\x34\x49\x10\xcf\xdb\x5e\x57\xc8\x78\x15\xc8\x45\xf8\xfe\x8a\x36\xaf\x46\x04\xec\x9b\xec\x65\x63\x0e\x24\xe1\x65\x3e\x01\x59\x03\x43\x4a\xbd\x3e\xa7\x51\xac\x2e\x6e\x58\x3b\x9c\xf7\xd2\x7a\x19\x83\xf2\x19\x90\xd7\x66\xe4\x3f\xfc\xfe\xf7\xbf\xfb\x7d\x84\x71\xcc\xeb\x55\x25\x42\x39\xb9\xbc\xb8\xba\xf8\xfb\xed\x0f\x6f\x11\x6e\x3e\xb4\xfb\x48\x49\xb2\xb1\x53\x64\xa3\x26\xc8\x3e\x6b\x7a\x2c\x02\x37\x06\x73\xd9\xd8\x47\xe2\x16\xa9\x32\x9b\xb0\x54\x16\xa2\xde\xe9\x24\x8d\x6a\xb8\x46\x8d\x0a\xdf\x9d\x4d\x67\x9e\x61\x58\xbd\xe0\x54\x2a\x03\x28\xa2\x69\xfc\xb7\xa6\xb7\x56\x39\x20\x92\x96\xd2\x56\xa5\xad\x9c\x57\xb5\x2d\xdf\x39\xad\x90\x86\x2f\x48\xf9\x57\x90\x08\x9e\x86\xa8\x00\xb1\x44\x5a\x47\x49\xd4\x33\x77\x6b\xfb\xf4\x26\xe2\xfa\x2a\x71\x83\xa1\x26\x19\xba\xa2\xa4\x5a\xd5\x38\x7c\xd2\xa2\x41\x60\x6f\x7f\xf8\xb7\xee\x0e\xb2\xa4\xb8\x15\xc9\x7d\x44\x13\x59\x20\x03\x7b\x67\x4e\x5a\x62\x7d\x81\x77\x6f\xaf\x2d\x71\x66\x65\xae\x3e\xde\xd5\xd0\x2f\x46\x0a\xa7\xe4\x7b\xef\x9b\xfa\xd6\x79\x0b\x29\x4f\xc9\x3d\x14\x61\xda\xa5\x61\x98\x3e\x8c\xb0\x1d\x45\x38\x76\x25\xbb\x11\x65\xce\xa6\x57\x5b\x46\xe0\xa3\xff\xac\x44\x1c\x56\x01\xa8\xe1\x9c\x47\x47\xa0\x53\x42\xa6\x94\x65\x84\xa2\x55\x5e\xb3\x1c\xc8\xc3\x1c\xb8\x35\xf6\xd7\xd1\x12\x5f\x10\xc3\xf9\x52\xad\x8d\xc7\x3e\x24\xfc\xcd\xde\x56\xc3\x50\x54\x8c\x2f\x5b\x0d\x70\x3c\x5b\xb6\x50\xcd\x06\x35\x60\x97\x36\xa8\x01\x1d\xd5\x80\x42\xc2\xad\x16\x9d\x65\xcd\x68\x01\x37\x96\x8c\x2d\xe1\x36\x13\x98\x0a\x09\xab\xf1\x36\x8d\x38\x18\x17\x39\x1f\x10\x19\x7c\x71\x7d\x59\xf9\xbe\x44\x2b\xd6\xc5\x22\x17\xab\x32\x99\x7b\x37\x29\x07\xa5\xce\x31\xb2\xa6\x2c\xac\x61\x19\xaf\xb6\x52\x42\xf7\x28\x9f\x42\x02\xe4\x38\x8f\x67\x35\x9a\x90\x79\x5d\xe0\xf6\x43\xd0\x89\xf5\x9b\xfb\xb0\x22\x87\x13\xeb\xa7\x6b\x1a\xe4\xce\xaf\x27\x36\x91\x54\xcd\x01\x73\x67\xe1\x13\xd3\xca\x0e\x6a\xd1\x58\xfd\x8c\x1b\x79\x61\x26\x69\x02\xa4\x00\xc9\x84\x11\x31\x4a\xae\x53\xf1\xc0\xc9\x04\x66\x8c\x2b\xbf\x62\x21\x24\xf9\x2d\x81\x91\x44\x4c\x55\xb5\xbb\xc7\xe4\xa6\x55\x39\xce\xa1\x8b\x25\xa2\xe6\x99\x6e\x8a\xce\x22\x4d\x09\x0a\x2f\xb8\x0d\x4a\x9a\x65\xcb\x7a\xe3\x35\x01\x42\xb7\xcc\x50\xf7\x0d\x61\x67\xf6\xa4\xe4\xf8\xa2\x29\x64\x74\x69\x33\xc8\xa7\x8c\xa3\xf5\x57\xaa\xd3\x71\x78\x68\x56\x67\x02\x85\x6c\xf4\xb9\x75\x67\x30\x45\x24\xd0\x24\x08\xc7\x78\x88\x01\x7b\xaa\x0d\x31\x60\x43\x0c\xd8\x10\x03\xb6\xde\x86\x18\xb0\x76\x1b\x62\xc0\xb6\x13\xd4\x67\xa7\xdd\x10\x03\x36\x58\x65\xd6\xdb\x10\x03\xd6\xa9\x0d\x31\x60\x4f\xb6\xde\xb1\xe8\x21\x06\x6c\x87\x36\xc4\x80\xed\xd8\x86\x18\xb0\x21\x06\x6c\x88\x01\x1b\x62\xc0\x02\xda\x10\x03\xb6\xff\xeb\x0d\xce\x9f\xee\x6d\x88\x01\x1b\x62\xc0\xf6\x6c\x43\x0c\xd8\x4a\x1b\x62\xc0\x86\x18\xb0\xc7\xda\x10\x03\x36\xc4\x80\xb9\x36\x58\x1b\xd7\xda\x10\x03\xb6\xa1\x0d\x31\x60\xfb\x8d\x33\xa8\x01\x61\x9d\x3d\x8b\x1a\xa0\xb4\x28\x6e\xd9\x2c\x00\x17\x32\xd6\x31\xb8\xad\x28\x71\xa0\x91\xca\x15\xdb\x55\xf6\x43\x6f\xc7\x52\x0e\xb2\xaf\x19\x11\xd6\xb8\x49\x26\x60\x54\x04\xf3\x5a\x45\xc8\x6d\x72\x39\x45\x07\x72\x03\xc9\xcd\x9c\x0a\x0f\x13\xc8\x5a\x65\x1d\xda\xe2\xb3\xbf\xdd\x18\x37\xba\x4b\x77\x0a\x1a\xf3\x91\x50\x6e\x2b\xa3\xba\x32\xd9\xe6\x7a\xbf\x16\xa9\xf2\x95\x24\xb8\xe0\x23\x0b\xd6\x3a\x36\x04\x8f\x85\x1a\x07\x58\x83\x03\x91\xd9\x6c\x8c\xdc\xb5\x14\x93\x83\xa1\xb3\x5d\x63\xfc\x11\x4b\x5c\x80\x9e\x98\xb6\x10\xd7\x2c\x81\x1d\x91\xd6\xda\x81\x61\x58\xac\xd9\x43\x70\x31\xc7\xb0\xab\xa0\xc0\x43\xa2\xb9\xed\x1d\x39\xe5\x51\x2a\xd5\x79\x21\xec\xff\xd5\x71\x53\x8d\x80\xa9\xce\x7e\x94\x03\xc3\xcb\x85\x44\x49\x1d\x2c\x42\xaa\x27\x11\x66\x11\xa2\xa2\x62\xca\x4a\x3d\x8d\x86\xea\x67\x24\x54\x1f\xa3\xa0\x0e\x11\x01\x75\xf0\xe8\xa7\x38\x6e\xf5\x08\x2e\xf5\x48\x12\xe9\x33\xb8\xa7\x5c\x20\xfd\xdd\x5c\x82\x9a\x8b\xac\x33\xc3\x89\xc5\x6c\x3e\x30\xce\xf2\x32\xc7\x2a\x14\x86\xa7\xb0\x45\x15\xec\xaf\x3c\xcb\x70\xd7\xbd\x8d\x38\xc0\x72\x15\x29\x60\x19\x70\xca\x32\xb3\xb5\x10\x2c\x74\x4e\x17\x28\x94\x96\x49\x02\x90\x86\x88\xa5\x4d\x6b\xf5\xef\xc6\x15\x85\x16\xa3\x9f\x29\xf2\x3a\xec\xaa\x09\xd3\x7b\x1a\xe6\xbc\xdf\xfd\xb6\x53\x1f\x33\x59\xc4\xb9\xa5\xbf\xb9\xb9\x7e\xdb\xba\xa5\xf1\x83\x6f\xf1\x18\xbf\x9d\x43\x72\x7f\xe3\x42\x69\x0e\x77\x33\x87\x9b\x99\x82\x4c\x4c\x31\x04\x83\x50\x2b\x4a\xdb\x87\x2c\xa4\x5e\x71\x81\xce\x70\x15\x41\x2e\x58\x02\xe3\x17\x30\x54\xc4\x52\xfe\xc3\x0f\x02\x41\x37\x01\xbe\x78\x5f\xc4\xae\x5b\x4b\x4e\xe5\x61\x68\xd8\xa8\x1c\xa5\x18\x34\x9a\xd1\xa4\x5a\x9b\xd9\xe6\x43\x17\x44\xc6\x89\x02\xa8\x14\x9a\x19\xd3\xf3\x72\x32\x4e\x44\x7e\x6e\x58\x87\xfd\xbf\x49\x26\x26\xe7\x39\x55\x1a\xa4\xd1\x71\xdc\xb5\x3e\x4a\x0c\x05\x8c\xcf\xc6\x79\x7a\x3a\xfe\x55\x10\x0d\x97\xce\x56\xee\xd2\xb0\xb6\x18\x09\x26\x60\xf8\xbe\x90\x2b\xd6\x02\x33\x29\xe1\x9b\x34\xf8\xfe\x0e\x2d\x2a\x12\x18\x96\x7c\x90\x90\xe4\x81\x6b\x93\x08\x0e\x81\x98\x4c\xa5\x1f\x61\xc7\xcf\x16\x72\x1c\xe5\xac\x46\x0a\x35\xee\x51\x98\x71\x6f\x74\xa1\xbe\x84\x16\x47\x0b\x2b\x8e\x15\x52\x1c\x25\x9c\x38\x46\x28\x71\xbc\x30\xe2\x38\x21\xc4\xf1\xc3\x87\x9f\x2d\x74\xf8\xb3\x08\x1b\x8e\xe8\x1f\x8b\x14\x2e\xfc\x12\xa1\xc2\xfd\xb5\xc1\x90\x08\xe1\xc1\x2f\x17\x1a\x1c\x65\x1e\xa3\x6a\xb1\x81\x2c\xe1\x00\xa1\xc0\x2f\xe1\xff\x7f\x36\xdf\x7f\x04\xbf\x7f\x4c\x9f\x7f\x34\x7f\xff\xb3\x85\xfc\x86\x87\xfb\x46\xb5\x29\xbc\x48\x98\x6f\xcc\x10\xdf\xe0\xf5\x65\x9c\x69\x46\xb3\x77\x90\xd1\xe5\x6d\x58\x20\x68\xac\x95\xb8\x5a\x0b\x16\xb5\x66\xeb\x76\x5c\xc3\x9c\x2a\xe2\x5d\xdd\x0e\xe2\xc5\xfb\xd2\x9d\x08\x4c\x28\x7a\x9c\xcd\xfb\x75\xf6\x5a\x93\xfe\x79\xae\x49\x6f\xcc\xe3\x16\x57\xa5\x27\xbb\xe6\x5b\xf1\x40\xc4\x54\x03\x27\x27\x8c\xfb\x9d\x73\xda\xb0\xd2\xd4\xee\x91\x60\x7f\x87\xe9\xf5\xf5\x2b\x3f\xc8\x97\xe7\xf7\x40\xcf\x90\x52\xbd\xf6\x7c\x39\x1a\x9f\x76\x7d\xb9\x07\xa7\x65\xd6\x76\x7f\x59\x97\x58\x1c\xdf\xd7\xeb\x31\xf9\xe0\xc4\x89\xd7\x48\x4f\xc5\x8a\x28\x4f\x89\xc3\xe7\xfa\xf2\xf6\x49\x70\xa8\x7b\x5b\xb9\xa9\x62\xd3\xdb\xf1\x2c\xf6\x06\x36\x52\xa6\x20\xd4\x3c\x85\x02\xe8\x60\x74\xed\x8d\xd1\xf5\x40\x11\xd8\x5f\x9e\xb6\xf5\xf2\x11\xd7\x83\xb6\xf5\x4b\xd1\xb6\x1a\xb0\x78\xdf\x48\x9a\xc0\x75\x9f\x84\x37\xcf\x40\xea\x44\xc0\x5a\x86\xab\xd8\x05\x07\xb0\x89\x63\x35\xe8\x21\xe2\xfb\x4d\xcb\x2c\x5b\x5a\x1b\x62\x0b\x01\xb3\xfb\xd6\xba\x9b\xc3\x1a\x74\x20\xba\x52\x37\x50\x57\xeb\x26\x85\x14\x4e\x22\x91\x25\xe7\x46\xc4\x70\xc7\xc9\x10\x6f\x74\x11\x05\xbc\xbb\x39\x9d\xb6\x80\x0d\x5d\x10\x3a\x06\x7a\xce\x81\xd4\xf9\x4b\x6d\x42\xcc\xa8\x53\x21\x13\x36\xc9\x96\x64\x4e\x33\xa3\x2c\xb9\x20\xed\x7b\x96\x65\xae\x9b\x80\xa0\x70\xd0\xd6\xf5\x6c\x25\x9a\x4c\xf0\x19\x4e\x06\xb5\x84\xc0\xa7\x02\x12\x33\x66\x92\x01\xe5\x65\x61\xe9\x34\xf2\xd1\x52\x94\xd2\xd3\x19\x14\x15\xdf\x18\x9d\x29\xc2\x59\x76\xe6\xa7\xbc\x0d\x81\xb9\xbe\xe7\x6b\x93\xb2\x82\xd4\xa1\x57\x3e\x30\x05\x67\xd8\x67\x67\x9a\x2c\x2d\xbe\x6a\xbf\xdd\x37\xf6\xb3\x42\x8a\x05\x4b\xeb\x18\x7d\xb3\x2d\x30\x3e\xbe\xf3\x58\x3f\x60\xbf\x9e\xb5\x72\xc1\x47\x1c\x66\x14\xc5\x63\xc7\xd0\x6c\x44\xa7\x1d\xdf\xc6\x0f\xf2\x94\x25\x54\x83\xc2\x9c\x84\x16\xb4\xed\x82\xd1\xce\x94\x98\xf7\x69\xec\x28\x72\xc2\x05\x11\x98\x59\x58\x72\xa6\x97\xe8\xd1\x9b\x97\x9a\xa4\xe2\x81\x9f\x86\x1c\x4c\x1b\xe6\x40\xc9\x04\x34\xad\x93\x03\xbd\x48\xa6\x08\x70\x3a\xc9\xcc\xd9\xc3\x88\xff\xbb\x8d\x1b\x80\x4c\x81\xea\x52\x02\x99\x51\x1d\xc0\x25\x36\x48\xf3\x76\x3d\x1f\xdf\x76\x4c\x39\x7f\xdd\x94\x94\x5c\x41\xa0\x20\x1b\x4d\x05\xe8\x98\xf1\x6a\x4e\xb4\x28\x75\x4f\xee\x91\x6d\xa6\x23\x9b\xb9\xd3\x50\x12\x59\x0e\x8a\x88\x32\xc0\x92\xd7\x52\xff\xdc\x70\x31\x35\xbc\xc1\xee\xb4\xb1\x75\x75\x9b\xc6\xd8\x61\x57\x0d\xa9\xbc\x81\x4f\xe0\xc3\xad\x6c\x06\xf5\xbb\xab\xdb\xbf\x7f\x7f\xf1\xbf\xde\x7f\xdf\x6d\xe1\xdf\xd3\x64\xde\xc4\x16\xe7\x84\xe2\x45\x81\x4c\x7e\x4e\x17\x40\x28\x29\x39\xfb\xef\xd2\x85\xbc\x9d\x54\xe3\x75\x64\xab\x51\xd2\x7b\x82\x04\x5f\x73\x4b\x74\xe2\x1c\x31\xd6\xf4\x7b\xa6\x10\xa8\x1a\x89\x70\x81\xff\x42\x01\x99\x4a\x91\xaf\x28\x5a\xe4\xaa\x0a\xae\x5b\x9a\x1b\x86\x5a\xd5\x6c\x0e\xb2\x9b\x44\xfe\xee\xe3\xfb\x5b\xcc\xc1\x2f\xa4\x05\x76\xc7\xe4\x02\xec\x13\x47\xb7\xa9\x83\x96\x9e\x74\x4c\x2e\xf8\xd2\x7e\x69\x99\x59\x47\x11\x25\x63\x4a\x03\x0a\xa7\x4e\x91\xf4\xe1\x81\x47\xaf\xc6\xf8\xbf\x23\x42\xd3\x54\x1a\x4d\xb3\xca\xd1\x48\x56\xb3\xcc\x3a\x8d\x6c\xf5\x57\x36\xc9\x1a\x93\xcb\x41\x63\x1a\x47\xa7\x0e\x3f\x88\xd4\xad\x04\x0a\x81\x18\xbf\x63\xa5\x5b\xa5\x25\xd5\x30\x63\x09\xc9\x41\xce\x80\x14\x54\x27\x73\x92\xd3\x25\x49\x84\x94\x65\x61\x21\x46\x52\xaa\x69\xb7\x91\xbf\x16\x92\xe4\x9e\x3b\x1b\x6e\x66\x44\xf2\xdb\xcd\x81\xa0\x35\xcb\x6e\xfe\x93\x29\x55\x82\x3a\x7f\xfd\xea\x8f\xbf\xfd\x7d\x47\xf5\x3a\xe2\xc1\xed\x1a\xfa\x14\x10\xf2\xd4\x0e\xff\xf2\x1b\x0c\x83\xae\x5b\xc8\x30\x6e\x87\xd8\x9d\x8f\xdc\x50\x31\x3e\xcb\x82\x0d\x20\xc1\x66\xc0\x50\x23\xe0\xa8\x7e\x83\xeb\xae\xb6\xc0\x70\x4b\x60\x8b\x86\xee\xa6\x94\x78\x56\xb0\x5a\x82\xf3\x76\x2f\xc7\x90\x05\x6f\x28\x76\x97\xd7\x9e\x4b\x85\xd8\x8f\x50\x9b\xa8\x0c\x53\x16\x7d\xc4\x0e\x6b\xe3\x1d\xce\xc8\x2b\xf2\x1f\xe4\x13\xf9\x0f\xb4\x82\xfd\xa1\xfb\x50\x71\x6c\x4c\x31\xc2\xf8\xe7\x42\xe9\xcb\xeb\x48\x0b\xfd\x17\x73\x5f\x99\x1e\xcd\x7a\x68\x41\x26\xcc\x99\x23\xe0\x93\x06\x69\xd4\x40\xb7\x86\xa1\x33\x17\x64\x51\x33\x04\x7e\x2e\xbb\x3b\x34\xb8\xe0\x72\xda\x8e\xfe\x7f\xa1\xfd\x8d\x03\x7f\x2b\x94\xbe\x72\xdc\xba\x09\xa1\xd3\xa4\x23\xc7\x8b\xb8\xc5\xee\x43\x46\xfd\x60\xf6\x5e\x5d\x63\x83\xa4\x02\x13\x20\x6c\x0e\xe7\x9c\x05\x30\x87\xfe\x9c\xd8\xb0\x38\xd1\x78\x5b\xf7\xb1\xad\xb5\x62\xd3\x47\x8b\x8c\x53\x52\x1a\x65\x69\x0a\x91\x8e\x51\xbf\x09\xa0\xc2\xcc\x46\xda\x10\x06\x1e\x51\x8d\xc6\x56\x5f\xab\xbc\xc3\x78\xe0\x0c\xc7\x4a\x28\xef\x2a\xc3\xda\x26\x61\x0a\x52\xda\x3c\xe1\xc9\xd2\xa7\x1b\x05\xef\xb6\x20\x2e\x57\x48\xa1\x45\x22\x3a\xc3\xa6\xc4\xdc\x2a\xd7\x8e\x16\x9c\x7b\xf4\xd5\x56\xde\xf1\x3f\xbf\xbb\x3e\x23\x77\x6f\xaf\xcf\x88\x90\xe4\xf6\x6d\x58\xf0\x53\xd3\x04\x73\x74\xf7\xf6\xfa\xe8\xa0\x2b\xd0\xc8\x61\xba\x7b\x7b\xdd\xa1\x93\xf5\xf0\xd9\x9c\x16\xa3\x7b\x58\x76\x94\xee\x62\x48\x98\xa3\x6a\x63\x45\x79\x21\x3b\xcd\x39\x2d\xf6\xee\x4d\x02\x4d\x59\xaf\x91\x5c\x7c\xd6\x61\x45\x69\x3c\x48\x97\x5c\x2c\x20\xb5\x5a\xb3\x1f\x05\x78\x5a\x08\x66\x74\xa4\x01\xe7\xe5\xb1\x36\xe0\xbc\xec\xdf\x06\x9c\x97\x4d\x6d\xc0\x79\xd9\xa3\x0d\x38\x2f\xb6\x0d\x38\x2f\x6d\x42\xfa\x98\x63\x34\xe0\xbc\x3c\xd9\x06\x9c\x97\xad\x6d\xc0\x79\xd9\xab\x0d\x38\x2f\xeb\x6d\xc0\x79\x79\xa4\x0d\x38\x2f\x55\x1b\x70\x5e\x06\x9c\x97\xcf\x97\x6b\x0f\x38\x2f\xab\x6d\xc0\x79\x19\x70\x5e\x06\x9c\x97\x66\x1b\x70\x5e\xb6\xb4\x01\xe7\x65\xc0\x79\x19\x70\x5e\x1e\x6f\x03\xce\x4b\xe7\x36\xe0\xbc\xec\xd7\x86\xcc\xc3\x3d\xdb\x80\xf3\x32\xe0\xbc\xac\xb6\x01\xe7\xe5\xc9\xd6\x0f\xf3\xf8\x80\xf3\x32\xe0\xbc\x3c\xda\x06\x9c\x97\x01\xe7\xe5\xd1\x36\xe0\xbc\x74\x68\xbd\x33\xba\x0e\x38\x2f\x03\xce\xcb\x63\x63\x0c\xda\xd6\x7e\x6d\xc0\x79\x19\x70\x5e\xd6\xda\x80\xf3\xb2\xde\x06\x9c\x97\x01\xe7\x65\xc0\x79\x19\x70\x5e\xaa\x36\xe0\xbc\x7c\xe9\x76\x27\x09\x8a\xfd\x13\xae\x45\xc6\x92\xe5\xa1\xb2\x7d\x6e\x40\x89\x52\x26\xe6\xa2\x47\x6a\x48\x81\xe4\x54\x86\x88\x40\xd9\x1c\x99\x9c\x65\x6d\x49\x95\x7b\xa3\x40\x1b\xd1\x1f\x8a\x39\xe4\x20\x69\xd6\x48\x6f\xfd\x02\xf0\x1d\x6e\x1a\xab\xda\xc4\x79\x90\x6e\xa6\x9f\x67\xa2\x7b\x80\xf5\xe0\x5f\xf0\xaa\x7b\x78\xc3\xc8\xd7\xf6\xb6\xd3\xd7\xcd\x92\x1b\x6c\x52\x68\xbe\x48\x1f\x72\x4d\x9b\x98\x4c\xd5\x2e\xd2\xa2\xba\x09\xd8\xd6\xcd\x45\x8b\x22\x63\x21\x59\xbb\x84\xdc\x96\x28\xfa\x80\xf3\xcf\xab\x37\x24\x29\xca\x33\x92\x43\x2e\x64\x40\xd6\x46\x04\xf5\xb2\xb5\x55\xfa\xb0\x4e\x37\x96\x20\x3f\xf9\x5a\xe0\xfc\x2f\xad\x32\x53\x43\x68\x55\x6b\xc5\x3c\xd3\x0d\x0a\x84\xbb\x9c\xae\x46\xca\x32\xdd\x32\x51\x5d\x09\x7d\xe3\x0e\xf7\xc1\xd6\x2b\x72\x38\x85\x9f\xc2\x83\x41\x6a\xbd\x15\x79\x51\x6a\x68\x5d\x9f\x76\x8a\xad\x46\xc4\x54\x28\x43\x3f\x4c\xaa\x6a\x22\xf8\x94\xcd\x9c\x69\xe0\x3c\xa7\x9c\xce\x60\x54\xcd\xf6\xa8\xbe\xa8\xcf\x3b\x5f\xd4\x07\xcb\x53\x4d\x32\xca\xba\x47\x35\xc6\x62\x13\x6f\x91\x0a\xc4\x28\xab\xa3\xfd\x31\x71\xae\x9a\xe6\xb3\x2a\xa6\x9d\x59\xbe\x31\xf6\x5f\xd9\x1f\x9f\x05\xa8\xb6\x54\xa3\x21\x05\xb5\xb6\x0d\x3b\x35\x4c\x9b\xb5\x82\x5e\x0a\x05\x18\x75\xc5\x5a\x77\xbb\x2b\x25\x4b\x4e\x73\x96\xf8\x13\x76\x91\x65\x22\xb1\x06\xa3\xb6\xca\x1b\x83\x64\xa3\x89\xe7\x79\xa9\xe9\x24\x83\x31\xb9\xb4\xf8\x19\x82\x67\x4b\x2f\xae\xba\xf8\x89\x00\x29\x95\x44\x09\xce\x0d\x0c\xcc\x6d\x6d\xe2\x9b\xe6\xa6\xb2\x80\x1f\xc0\x0d\x2b\x13\x1c\x08\x70\x2d\x97\x66\xff\x5d\x8b\xf4\xd6\x6c\xc1\xd6\xd3\xc1\x38\x20\x81\xf1\xb8\x31\x62\x71\x03\xe3\x70\xe3\x44\xcf\x86\x47\xce\xc6\x8d\x9a\xad\xfd\x1b\x16\xc6\xa8\x99\x8e\xd4\xda\x16\x85\x48\xc7\x1b\x58\x13\x11\xd3\x40\x0a\xcc\x88\xd7\x22\x35\x42\x93\x04\xcb\x9f\xaa\x33\x6a\xad\x9b\x97\x86\xb8\x7b\x34\x47\x52\x5d\x4b\x53\x74\x41\x59\x66\x0e\x70\x20\x01\xeb\x90\x90\x61\x2e\xa3\x48\x8e\x14\x97\x39\xd0\xa7\xcd\xe2\x72\xce\x5a\x69\x6b\xc9\x5c\x28\xe0\xc8\x2f\x69\x95\x5e\x54\x25\x3f\x38\x16\x93\xda\xbb\x38\x34\xc4\xf9\x72\x4a\x20\x2f\xf4\xf2\x8c\xc0\x02\xe4\x52\xcf\x31\x14\xa2\x02\x35\x45\xb6\xc6\x14\xc9\x69\xda\xd8\x1d\x67\x44\x78\xeb\x78\xe0\xf0\x78\x3f\x38\x9d\xac\xcc\xb4\xd5\xd0\x98\xaa\x72\x3c\x0e\xbd\x6b\x62\x63\xed\x90\x50\xa6\x19\x13\x2b\x87\x20\xce\x6b\xce\xba\xa1\xea\x92\x88\x67\xe1\x7b\xa4\xa2\x91\xd7\x62\xb6\x44\x4e\x3f\xa1\xed\x94\xe6\xa2\xe4\xda\x82\xe8\x58\x8d\xa1\x92\xf2\x6c\xf6\xcf\x0b\x06\xf3\x3d\xab\x6c\x4f\xe2\x5c\xed\x34\xf5\xb8\x19\xd7\x31\x92\xa8\xa9\xd6\x20\xf9\x1b\xf2\xbf\x4f\xfe\xf6\x9b\x9f\x47\xa7\x7f\x3a\x39\xf9\xf1\xd5\xe8\xdf\x7f\xfa\xcd\xc9\xdf\xc6\xf8\x8f\x7f\x3d\xfd\xd3\xe9\xcf\xfe\x8f\xdf\x9c\x9e\x9e\x9c\xfc\xf8\xdd\x87\x6f\xee\xae\xdf\xff\xc4\x4e\x7f\xfe\x91\x97\xf9\xbd\xfd\xeb\xe7\x93\x1f\xe1\xfd\x4f\x3b\x76\x72\x7a\xfa\xa7\xaf\xba\xbb\x46\x43\xe3\x00\xe2\x45\x01\x44\x8a\x01\x78\x96\x08\x00\xc7\x63\x0f\x7e\xf8\xdd\x15\xb8\x76\xfc\x9d\xeb\xe4\xb1\xe3\x2f\x83\x6d\x32\x97\xd3\x7a\x7c\xa6\x88\xc8\x99\xd6\x90\xba\xbb\xb7\x01\xcc\xb3\x62\x0f\x72\x0c\x0b\x31\xb5\x28\xde\xde\x0d\x80\x98\xda\x8c\xd4\x99\xac\xea\x7e\x45\x0b\x18\x27\x2c\x2f\x32\xc8\x81\x6b\x64\x3c\x23\xaf\xdb\xa2\x39\x71\x5c\xbf\x81\xf3\x0f\xc0\xa7\x04\x20\x75\x44\x0e\xbc\xb1\xd1\x06\xde\x38\xf0\xc6\xa7\x5a\xb0\x4d\x3c\x92\x4f\xb1\x26\xc2\xd9\xb2\x94\x97\x94\xd1\x42\x5e\xe1\x37\x88\x29\x46\x71\x2c\x58\x5a\xb6\xfc\x80\x15\xf2\x69\x80\xdb\xb1\x1d\xb7\x82\x3e\x64\x58\x40\x56\x11\x61\xcd\xf4\x63\xf2\x17\x1b\x6b\xd4\x54\x34\xdb\x06\xf5\x6e\x0e\xb9\x4d\xaf\xdb\x86\xab\x70\xaa\xee\xb1\x5a\x21\xa9\x0a\x85\xaa\x33\x44\xcc\x6e\xeb\x36\x15\x17\x15\xd7\xc8\x96\x67\x44\x81\xb6\x09\x40\x73\x58\x59\x26\xaa\xc8\xd1\x45\xf6\x40\x97\xea\xa8\xf2\x49\x32\xce\xf4\x4a\x65\x84\x4e\x34\x20\x70\xad\xe9\x70\x2a\x8c\xcc\x8b\x25\x1f\xa6\x53\x48\x3a\x6a\xb3\x16\x20\x64\x9d\x36\x17\x2c\xaf\x19\x2f\xcd\xdb\xfa\x59\x85\x94\x08\xde\x69\x20\xf8\xc4\x34\x29\xb9\x66\x99\x11\xd6\x89\x84\x59\x99\xd1\xa6\x21\xd0\xbd\x99\x8f\xe1\x4b\xc7\xe4\x23\x4f\xa0\xf9\x70\x37\x4b\xf5\xca\x00\x46\x78\xc8\x40\x43\x7a\x86\x5d\xb7\x5f\x5d\xd9\x28\xb8\xd6\xc9\xaf\x96\xb2\xd3\xf0\x7e\x2e\xab\x28\xa7\xb1\x3d\x50\x55\x08\x06\x49\xd9\x74\x6a\x46\x46\x65\x9b\x0b\x99\xd3\x75\xaa\x28\x4f\x3b\x8d\x6e\x4e\x2e\xe6\xbe\x34\x21\x88\xb1\xec\xcc\x91\x62\x29\x24\x54\x1e\x35\x0b\x96\x5c\x64\x7a\x2e\xca\xd9\xbc\xde\x15\x61\x53\x4e\x94\xc6\xd8\x2f\x33\x99\xca\x5b\x2e\x56\x36\x9b\x32\x32\x0b\x4f\xc0\x8a\x56\x02\x2c\xc3\x78\xa0\x1d\xc7\x5e\x0b\x01\xb0\x01\xe7\x76\xcd\x7d\x42\x18\x06\x18\x42\xda\xc8\xde\xe3\xf0\x49\x47\x78\xe1\x31\xb9\xb4\x68\x1c\x67\xed\x5e\x5b\x53\x62\x27\xa3\x11\x60\xe7\x43\x45\x3b\x46\x17\xae\x0c\xc0\xaa\xfc\x37\x04\x4d\xb6\x9d\x53\xbe\xf4\xe9\x26\x18\x00\x67\xd3\xe4\xaa\x0c\x98\xac\x9b\x0d\xbd\x3a\x4b\x2f\x5e\x03\xa8\x75\x42\x6f\xca\xec\x70\xde\xcb\x9b\x66\xf5\x91\xcc\x55\x07\x92\x86\x22\x9f\x72\x34\x87\xe4\xde\x9e\xbc\x14\x2c\x7b\x03\x07\xc2\x1b\x7a\xba\xe6\xa2\xcc\x52\x0b\xf9\x5b\x73\x67\xe4\xb4\x36\xbe\xd3\x92\x41\x25\x10\x30\x1a\x02\xe2\xa2\xb0\x6e\xec\x5b\xc8\xd4\x6c\x6f\xcb\x92\xb1\x63\x6b\xd5\xf6\xb9\x38\x8e\x24\xe4\xf2\x89\xe0\xf6\x9e\x3c\x73\x37\x77\x4e\x19\xef\x2a\xda\xd5\xef\xc0\x66\x5c\x48\x34\x5a\x4f\x09\x17\x6d\x1a\xda\x47\x7e\x85\x8a\xce\x32\x47\x15\x87\xb4\x51\xda\xa9\x97\xd3\x8e\xff\x30\x07\xa3\xad\xb5\x69\xe9\xca\xb6\x1b\x2b\x2a\x0d\x47\x1c\x1b\x62\x94\x96\x14\x31\x9c\x5d\xb2\x87\xec\xba\xf1\x8d\xd0\x7d\xa1\x49\x2e\x94\x26\xbf\x7d\xd5\x98\xe3\x20\x3b\xda\x88\xe0\x49\x44\x87\x5f\x25\xa6\x20\x0c\x07\xc5\x44\xad\xae\xbd\x5e\xa6\xc0\x35\x4b\x68\xd6\x20\xd4\x5c\x12\x53\x21\x27\x2c\x4d\x01\xe3\xee\xb1\x5a\x05\xaa\x9c\x1d\x35\x5d\x14\x5d\xeb\x01\x1a\x31\x20\xf5\xc6\xfa\xf0\xe7\xdb\x3b\xf4\x61\xb6\xe5\xbd\x5a\xe7\xef\x26\x1a\x2d\xcc\x2b\x68\xc3\x14\x9a\xfb\xd9\x8a\xb3\xad\x91\xbe\x8c\x90\x3e\xf3\x3e\x66\xa7\x34\x0c\x3d\x73\xf1\xb0\xce\x47\x98\x11\xd9\x78\xda\x39\x1b\xb3\x07\x71\x7c\x76\xe3\x1f\x28\xf6\xce\x0e\xde\x87\x68\xae\xdb\x2a\x71\xd3\x6c\x6c\xea\xd2\x36\xe9\x3d\x70\xc3\xca\xd6\x17\x7e\x5a\x01\x7c\x31\x89\xe6\xae\x10\xdc\x2a\x3c\xcd\x54\x33\x65\x4e\xb3\xbd\x18\xd1\xdd\x54\x08\x57\x5e\xae\x0a\xca\x3e\x72\x9b\xf3\xc8\x5c\xd6\x9e\xd9\x87\x01\x6e\x47\x70\x7c\x46\xb0\x8e\x98\x59\x7d\x2b\xd2\x10\x1b\xd7\x4a\xb8\x43\x25\xf4\xd8\x7c\x1e\xbc\x6f\x53\x2b\xf3\xa0\xc0\x63\xd6\xb5\xbd\xaa\x5f\x46\x9c\x83\x39\x93\x54\x8b\xee\xf6\xae\x38\xb1\x0e\x9e\x8c\x7e\xb9\xb0\x5b\x9b\x42\x42\x66\xaf\xe3\x39\x2b\xc8\x04\xf4\x03\x00\xdf\x2c\xa7\xa5\x70\xa2\x4e\xbd\xa1\x26\x90\x88\x3a\x34\xd4\x86\xd8\x8e\xc9\x75\xeb\x98\xe3\xe5\x1e\x0e\x3b\x77\xc9\xdf\xac\xb2\x28\x54\xbc\x3c\x9b\xf1\x2c\x6c\xc3\xbb\x62\x80\x54\x58\x38\x57\xf5\xb2\x80\xda\xc6\xda\x3b\x07\xbf\xde\x95\xd0\x61\x6f\x18\xfc\x6a\x46\xbe\x73\x06\x83\x67\x79\xcb\x48\x91\x24\x2e\x8e\xbb\x47\xa7\xb0\x7d\xd5\xba\xb9\x73\x5b\xbf\x62\xce\xad\x10\xbc\x06\xfb\x0e\xdd\x39\x95\x4e\xf1\xfb\xdf\x13\xb0\x8e\xaa\x08\x7a\x85\x6f\x71\xf0\x38\xa3\x20\x72\xc6\x03\xe1\x26\xd1\x80\xb8\xc9\x23\x61\x21\xdd\xa0\x67\x23\x47\x9a\x2b\x48\x4a\xc9\xf4\xd2\xe8\x02\xf0\xa9\x93\xc1\x3a\xc6\x59\xb9\x6d\x93\xd1\x72\xaa\x78\x12\x89\x28\x6c\x79\x91\x95\xda\xdd\xb5\xc5\xa5\xe4\x68\x2b\xee\xb6\xa3\x2f\xa7\x66\x45\xac\x79\x04\x1d\x25\x18\xb4\xbc\x4a\x98\x77\xba\x58\x19\xeb\xbf\x4b\xb6\xa0\x99\x61\xc3\xf5\x2f\xae\x31\x7d\xb4\xf9\xa3\xe7\x8c\x6c\xd7\x54\xdd\xd7\xee\x5d\x18\x15\x22\xad\xbd\xb9\xe7\x7e\xea\xf0\x23\xf8\xa4\x3f\xc3\xa8\x76\xe4\x52\xd7\x92\x2d\x58\x06\x33\x78\xaf\x12\x6a\x45\x98\x43\x47\x46\x5c\x6c\xa1\x0b\x77\xa6\x14\x99\xaa\x6c\x4f\xd4\x27\xcf\xa3\x11\x66\x46\x19\xc7\xc2\xd3\x01\xd2\xaa\x1b\x54\xd9\xec\x7d\xa6\x15\x29\xa8\x34\xbb\xd0\x67\xe9\x5b\x7f\xc6\x44\x88\xcc\x55\x2a\xca\x96\x35\x5d\xac\x7b\x08\x2b\x1a\xd0\xc5\xdf\x39\x3c\xfc\xdd\x50\xa1\xc8\x34\xa3\xb3\xda\x9f\x62\xf3\x1e\xdb\xc7\x33\x18\x38\x60\xeb\x44\x63\x19\x9e\xd2\xdc\x63\x0f\x74\xa9\x6a\x48\x85\xa6\xd9\xbd\xfb\x8d\xf2\xfa\x14\xf9\x09\x55\xa4\x1a\xbb\x9b\xbf\xc7\xb4\xdf\x9e\xa2\x71\xff\xed\xc5\xf5\xdf\x6f\xff\x7a\xfb\xf7\x8b\x77\x1f\x2e\xaf\x3a\x77\x76\x25\x34\xd8\xd0\x16\xbd\x2d\xfb\xb4\xca\xc8\x1a\x0b\x35\xc6\xb8\x55\xc4\xf3\xe5\xa9\x78\x08\x0c\xee\x37\x7b\x0a\x68\x37\xeb\x09\x2d\x8a\x0b\x99\x0b\x79\x2d\xc5\x94\x65\x9d\x25\xfe\x58\x27\x78\x85\x1c\x1f\xe6\x7b\xe1\x3e\xae\xaf\x1b\x0b\x31\xb9\x9e\x4d\xd2\xb8\x32\x18\x02\x19\x9a\x6e\xba\x87\x15\xad\xba\xf3\x8f\xd5\x2a\x89\xdd\x0f\xd1\x41\xf7\xcc\xc1\x01\xbc\x0c\x19\x1d\x7f\x1e\xc3\x34\x90\x89\x84\x66\x58\xc2\x3a\x6c\xe3\x93\xc8\x8a\xc9\x2a\x5d\x0d\xc0\x11\xea\xb7\x33\xc9\x04\x4d\xad\x0f\xcb\x32\xff\x14\x7c\x61\x35\x2f\x76\x61\xd6\x42\x10\x21\x77\x16\xec\x01\xc7\xf3\x08\x29\x85\x84\x4a\xaa\x59\x19\x5e\xd8\x7a\x72\x41\x43\x7e\x68\xe7\x80\xb8\xb7\x6c\x61\x79\x85\x9e\xb9\x6a\x18\x77\xc0\xd8\x14\xed\x29\x68\xe7\x34\x8a\xfa\xb2\xb0\x06\xce\xef\xfd\x32\x04\xd4\xbe\x8d\xa4\x3c\x63\x27\x3d\xd9\x9d\x76\x7e\xaa\x1d\x69\x93\xc1\xef\x99\x99\xc1\x69\xcd\xa4\xfd\xb6\xf1\x32\x88\xcd\x08\x0f\xdc\x8f\x3f\x60\x95\x75\xcf\xff\x23\x18\xa7\xaa\x25\x26\xa3\xc6\xd1\x2a\x24\x8c\xd6\x8f\x57\xa8\xbe\x7f\x53\x72\xcd\x72\xf0\xf0\xa7\xa3\x15\x99\x48\xda\xaf\x8f\x55\x55\x6c\x28\xca\x46\x27\xe4\xcf\x1c\xcf\x2b\x87\x94\x8c\x08\x17\xf5\x12\x01\x9f\x0a\x99\xa0\xe1\xe1\xa0\x1b\x3c\xa1\x05\x9d\xb0\x8c\x85\x30\xf3\x58\x1b\x1c\x6b\x77\x36\xe8\xc1\x18\xa0\x34\x3d\x4f\xa5\x28\xec\x4d\xec\x71\xc9\xc2\xb3\x32\xdb\xf8\x37\xcd\x32\x53\xce\x12\xd5\x22\x64\x26\x29\xd7\x75\xfc\xde\xda\xc6\xf9\x25\xca\x20\x31\x84\x00\x9a\xc6\xab\x82\x7b\x91\x1a\x9e\xd1\x5c\xb6\xe0\x73\xd5\xb7\x8a\x3a\x6f\xfd\xcb\x35\x30\x66\xc8\xf5\xc7\xdb\xcb\xff\x77\xe5\xdc\x74\x17\xed\x6c\xeb\x77\x3d\x0d\xc3\x0f\xa2\x6d\x9b\x1b\x57\x84\x7c\xd8\x38\x5f\xf6\xc6\xa9\x0c\x44\x07\x07\x03\xbf\x29\x9b\x1e\x67\xc6\x1b\xa4\x91\x3c\x48\xd6\xb9\xae\x70\x33\xdb\xbd\x36\x03\x74\x25\x10\xf3\x08\xd7\x0c\xc3\xa5\x1b\xd6\x5a\x2d\x6c\x9d\x6d\x27\x76\x85\xd5\x89\x68\xde\xae\x53\x9a\xa9\xcf\xf5\x8a\x0c\x31\xed\x14\x52\x24\x1f\x44\xc9\xe3\xa0\x8b\x07\xec\xb8\x8a\x10\x92\x02\x17\xda\x59\x53\x50\x97\x10\x53\xfc\x96\xd8\x9c\xb5\x46\xe1\x90\x96\x9c\x13\x20\x66\xdd\x35\x44\xab\x2a\x7e\xc5\xcb\xe1\x56\x7f\x29\xd5\x5a\x60\xa4\x93\xab\xea\x14\xb6\x69\x40\x24\x83\x04\x9a\xda\x40\x1a\xaa\xe7\x16\xd1\x3e\xa7\xea\x1e\x52\xfb\xc1\x67\xba\x33\x03\x98\xac\x99\x90\x8f\x3c\x5b\xde\x08\xa1\xbf\xae\x8a\xe7\x1f\x7a\x97\xfe\xa5\x0a\x4b\x6d\x1a\x14\xd1\x46\x4c\x91\xe4\x11\x2e\x22\xf2\xa8\x46\xc9\xff\x50\x16\x65\x16\xe4\x97\xca\xa1\x64\xc9\x2f\xd4\x37\x52\x94\x9d\xe5\xa9\x98\xba\xdf\x37\x97\xef\xf0\x12\x2a\x1d\xf8\x32\xd7\x72\x59\x08\xc6\xb5\xb7\x3e\x45\x74\xa0\xfc\xd9\xc1\x5c\x37\xb9\x4c\x30\xa2\x2d\x21\x1f\xe8\x92\xd0\x4c\x89\xca\xbc\xc5\x37\xb9\x3e\xbd\x5f\xd5\x7c\x3d\x11\x7a\xbe\xe6\x50\xed\x9a\x46\x63\xda\xfa\x78\x67\x0d\x0c\xe7\x3a\x38\x85\xf1\xb5\x61\x35\x22\xac\x14\x12\x12\x48\x81\x27\x9f\xeb\x89\x38\x34\xa4\x30\x9e\xaa\x2b\xc1\x0d\x7b\x3d\xf4\xb9\xba\xac\x6c\x85\x6e\x35\x9a\xa7\x08\xcd\xca\xce\xa1\x47\x11\x7e\x1b\x99\x6b\xa9\x42\xa2\x40\x2f\xa7\xe8\x81\xb4\x9b\xee\xbb\x72\x02\x99\x59\x6c\x96\x65\x3e\xf2\xdd\x86\x09\xb0\x9c\xce\x80\x50\x5d\x1d\x42\x2d\x08\x70\x55\x4a\xb7\x6f\x3a\x66\x38\x99\x56\x25\x67\xb9\x57\xfb\xf3\xe5\x3b\xf2\x8a\x9c\x98\x77\xb3\xd1\x7b\x53\xca\x32\x44\xf4\xf6\x71\xb3\x4d\x79\x7c\xea\xf3\xbb\x82\xa6\x00\xf9\x08\x11\xd2\x5e\x2d\x67\x84\x0b\xa2\xca\x64\xde\x88\xfe\xaf\xac\xb3\xae\xbc\x53\x10\x28\xc8\xc0\x76\xe2\xdd\x87\x7f\x56\xd0\x39\x5c\x35\xe6\x75\xf8\xe7\x17\xbc\x0e\x9b\xea\x9a\x39\xfe\xed\x05\xb3\x67\x35\x07\x4d\x53\xaa\xa9\xbb\x26\xfd\x03\xc3\xae\x1d\x2e\xcb\x80\xcb\x52\xc1\xf7\x8c\x97\x9f\x6c\x01\x95\x5e\xb8\x20\x6e\xdf\x23\x45\x24\xf1\x0b\x2d\x1a\x3e\x34\xef\x2d\x88\x90\x2e\x71\xd9\x3a\x46\x67\x5b\x34\x60\xbc\x25\xa8\xc5\xc1\xc4\x8c\x46\xca\x53\x91\xaf\x11\x69\x54\x76\xa0\xc9\xbc\x33\x35\x8d\x08\x8e\xe1\x60\xba\xf6\xcb\x76\xce\x60\x2a\x69\x34\x3b\xfb\xf7\x98\x98\xca\x54\xb5\x73\x6d\xa6\x6a\x46\x27\x90\x39\x88\x5a\x8b\x5b\x1e\xf1\x84\x45\xb2\x47\x4b\x11\x31\x3c\xe5\x46\xd8\xa8\x2a\x5a\x4d\x84\xe9\xfe\xb3\x98\x87\xa8\x81\x10\x77\x2e\xd2\xa3\x9e\x07\xb4\x47\x7e\x0e\xf3\x50\x06\x08\x88\x64\x75\x1e\x8c\xb4\xd9\x9e\x07\x94\xbf\xfa\x3e\x0f\x0a\x92\x44\xe4\x45\x4f\xa2\x16\xef\x6c\x44\xbc\xa1\x68\xd7\x08\xc5\xf6\xc3\x34\x28\xf4\xd8\x95\xc5\xa2\xda\xde\x83\xbe\x36\xd6\xff\xaf\x71\x9d\x23\xb7\x5b\xbd\xe3\xdd\xe8\xc1\xd1\x91\xd5\x88\xae\xc3\x5f\xe2\x8d\x37\x84\x44\xb6\xda\x8b\x87\x44\x36\xd0\xeb\x29\x9a\xe7\x5b\xe1\x89\x5f\x42\x60\xa4\x51\x02\x70\x5e\x81\x23\x22\x4f\x41\xf5\xfc\xcc\x65\x8f\x2e\xc0\xb3\xe7\x7b\x6b\xf1\x3a\x46\x8e\xe3\x09\xf2\xec\xa6\x8e\x1f\xb5\xa8\xf6\x51\xe3\x28\x37\xc5\x4e\xda\x67\xae\x3e\xde\x35\x31\xed\x29\x5f\x5a\xbc\xc6\x00\x84\x31\xdb\xfa\x27\x56\x3c\x67\x7c\xe5\xea\x2a\x3e\x77\x78\x65\x50\x7f\x9b\xa3\x2b\x5f\xee\x94\xee\x16\x71\xb9\x1a\x6f\x19\x95\x84\xd5\xe0\xcb\xf5\x31\x22\xac\x5c\xf0\x11\x70\x57\x67\x8f\x0c\x20\x7f\xb1\x14\x79\x2d\x3b\xf1\x00\x82\xaa\x69\x04\xa1\x59\x68\x09\x37\xdb\x36\x59\x41\xfc\x29\xa8\x60\xdd\xd7\xad\x01\xed\xe2\xa7\x21\xa3\x3f\x61\xc1\xf8\xbc\x2d\x11\x99\xd1\x28\x3e\x73\x3b\xc4\x2c\x57\xf4\xad\x84\xd4\xc6\x2c\xdd\x16\x90\xf4\xe5\xb6\xf8\xe6\xc3\xed\x45\x9b\x32\x94\x85\x5d\x11\x0b\xc0\xef\x09\x4d\x73\xa6\x14\x3a\x7c\x60\x32\x17\xe2\x3e\x68\xc8\x13\x9f\xf6\x3a\x63\x7a\x5e\x4e\xc6\x89\xc8\x1b\x19\xb0\x23\xc5\x66\xea\xdc\x71\x94\x91\x99\xb8\x53\xc2\x78\x56\x65\x0d\xa3\xb5\x10\x71\xb9\xba\xc3\xba\x35\x5f\x9e\x24\xd5\xdb\xe3\xd6\xc3\x5c\x91\x2a\x4c\x7a\x7d\x7a\xb0\xd2\x08\x6e\xde\x83\x4b\x1d\xeb\xbb\x2a\xac\xf2\xdf\xca\xce\xda\xf2\xee\xcd\xaa\x19\xce\x8b\xb3\x71\x1e\xad\xf2\x7a\xf0\x49\x72\x42\x7f\x02\x2a\x28\x1a\x35\xe6\x99\xfb\xb6\x26\xa9\x89\x6b\xc7\xa6\x2d\x74\xa6\x76\xfe\x3b\xba\xb7\x8f\xcd\x2f\x7d\x88\xe4\x71\xac\x42\x2f\x17\x59\x66\x16\x92\x3a\x10\xb4\x46\xa4\x25\xaa\x26\x6d\x74\x39\x8b\x7f\x6b\x94\x85\xe6\x5b\xe0\x45\x12\xc6\x14\x2c\x06\x99\xb9\x0c\x1c\x7e\x85\xd9\x40\x38\x36\x25\x39\xfb\x64\x28\x6c\x8e\xd8\x06\x6c\x45\xc7\xff\xe6\xaf\x03\x2a\x5d\x13\x0c\x3e\xa8\xf0\xcb\xcf\xcc\x0a\x35\x07\xf1\x89\xca\xda\x5c\x5b\xe6\x8b\x2b\xd0\x46\x51\xb3\xf3\xd6\xf4\x3e\x18\xc5\x4a\x96\x11\x0e\x43\x88\x67\x98\x34\xbd\xc3\x51\x39\x45\xe0\x79\x40\x4f\xb1\xa3\xc9\xc8\x20\x5e\x78\x7b\x29\xcf\x31\xd9\x90\x4a\xf3\x62\x1e\x64\xb2\xbb\x17\xf9\x19\x7d\x55\xa4\x2f\xfe\xaa\x40\xae\xdf\xc4\xdd\x3d\x18\xe6\x49\x13\xfb\x97\xad\x07\x2f\x5d\x8b\x74\x0d\x12\x18\x81\x85\x19\xcd\xba\x17\x55\xbd\x9c\x36\x61\x34\xb9\x70\xe6\x11\x5b\x6a\xdc\xc6\xcc\x7f\x82\xa4\xd4\x90\x3a\x64\x70\x67\x52\xb6\xa8\xc2\x6d\x6a\x3a\x53\xe0\x13\xe6\x27\x80\x01\x4a\xea\xac\x2e\x8b\xe6\x74\x9d\x0a\x6b\xf5\x8c\xfc\x17\x72\x49\xe5\xc1\xad\x32\xb6\x00\x0e\x4a\x5d\x57\x3f\xef\x3a\x15\x08\x92\x91\x50\xee\x75\x2b\x73\xa6\x9d\x85\xdb\x21\x80\x3b\x4c\x8d\x09\x90\x82\x4a\x9a\x9b\x3b\x58\x11\xb7\x3c\x13\x98\x31\x9b\xa2\xd7\xb8\x14\x2b\x08\xf1\x6e\x00\xb7\xa8\xd8\x30\x4d\x72\x36\x9b\xdb\xd3\x42\x28\xc9\x04\x9f\x11\x1f\x37\x96\x09\x9a\x12\x64\x2c\x42\x92\x07\x2a\x73\x23\x0b\xd0\x64\x8e\x41\x68\x94\x93\xb4\x34\xe7\x81\x20\xe0\xf5\x72\xa4\x34\xd5\xe0\x80\xe9\x3a\xdb\xe0\xfc\x34\x1d\xa0\x5c\xeb\x73\xd7\xc9\x3f\x30\xb6\x8d\x39\x69\x51\xac\x20\xef\x3f\x41\x52\x1d\x6b\x8b\xfe\x9c\xe7\x08\xde\x27\xfc\x71\xf6\xc8\x6d\xc1\xc2\x60\x4f\x54\x65\xf7\x86\x7d\x91\x4d\xde\xba\x09\x67\x5e\xfb\xb4\x7f\x1a\x7d\xb4\xbd\x08\xca\x3b\xb1\x1a\x05\x8c\x10\xa9\x5a\xc8\x7b\x73\x72\x2d\x5e\x8f\x90\x55\xe5\xfc\x20\xb2\x3c\x1d\x08\x5f\x2d\x84\x26\x27\xc7\xe7\xc7\xa7\x6b\x7b\xe1\x58\x35\xd3\x0c\x6c\x76\x72\xfd\x42\x8a\xe5\x45\xb6\xc4\x77\x38\xb6\xe5\xb7\x03\xc1\x04\x7d\xc0\x6a\x55\x8a\x52\xcd\x21\xcb\xce\x88\x32\xe2\x2f\xf5\xf5\x3c\xec\xa7\xe6\x21\x2d\xcb\xc4\x9a\xc9\x4e\x8e\x7f\x3e\x3e\x23\xa0\x93\x53\xf2\x20\xf8\xb1\xb6\x0e\x0f\x72\x87\x3a\x64\x10\x4d\x15\x11\x4b\x51\x12\x0e\xe0\xce\x4e\x55\x38\x2a\xa1\x46\xfd\x29\xad\x8c\x6e\x01\x30\x20\xcb\xc2\xe4\xb9\xf7\x9f\x98\x36\xa2\x88\x2e\xd1\x4c\xf1\xca\x6a\x0a\x80\x98\xf0\x54\xe1\x4d\x77\x3e\x07\x9a\xe9\xf9\xb2\xd2\x5e\xfe\x09\x52\x60\xad\x50\xee\xbe\x09\x97\xa1\x7a\x90\xc2\xd9\xdf\x64\x4a\x23\x60\x94\x12\xee\xe6\x12\xd4\x5c\x64\x07\x4f\xa9\xfc\xe0\x4a\xaf\x25\x82\x2b\xc3\x53\x8c\x8a\xed\x68\x54\x55\x36\x9b\x95\x59\x5c\xad\x03\x81\xa7\x4c\x42\xea\x84\x25\x57\x7e\x62\x4e\x17\x28\x29\x18\x79\x0e\xd2\x10\xd5\xa4\xa9\x13\xfd\x6e\x5c\x51\x58\xa5\xc0\xbd\xee\x49\xd8\x66\x47\x1c\xc7\x99\x2c\xe2\xdc\xd2\xdf\xdc\x5c\xbf\x6d\xdd\xd2\xf8\xc1\xb7\x78\x8c\xdf\xce\x21\xb9\xbf\x09\xab\xac\xda\x93\xd0\x82\x42\xc8\x43\x0a\x06\x66\xf8\x68\x52\xc1\xb5\x90\x9a\xf0\x32\x9f\x80\xf4\x06\x85\x19\xae\x22\xc8\x05\x4b\x60\x4c\xae\xec\x77\xde\x39\xef\x2b\x01\x53\x3e\x03\xf2\xda\x1c\x88\x3f\xfc\xfe\xf7\xbf\xfb\x7d\x38\x8f\x0e\x07\x35\x8d\x03\x68\xea\x5e\xbc\x2f\x62\xd7\xad\x25\x67\x93\xb1\xd9\x51\x8a\x4a\x5d\x46\x93\x6a\x6d\x66\x9b\x0f\x5d\x98\x55\x52\x01\x90\x0d\xee\x0a\xc3\x3a\xec\xff\x4d\x32\x31\x39\xcf\xa9\xd2\x20\x8d\x8e\xe3\xae\xf5\x11\x42\xff\x32\x3e\x1b\xe7\xe9\x69\x40\xa9\x7f\xd2\x50\xab\xd7\xca\xbb\xb5\x20\x5f\xb6\x94\x6a\x33\x93\x72\x70\x13\x3c\xf1\x54\xbe\x21\x47\xdd\x2a\x7b\x99\x25\xf8\x06\xe2\x64\xa2\x7d\x7b\x77\x77\xfd\x0d\xe8\x26\xc3\xe6\xf8\x21\xf9\xe6\xfd\x5d\x55\xfa\xdb\xec\x2e\x9b\xd4\x34\x70\xed\x10\xae\x3d\x17\x61\xb5\xdf\x63\xfb\x5d\x2c\x2b\xc1\x3a\x65\x9c\x43\x62\x16\xfa\xac\x55\x65\xd6\xc7\x21\x5e\x5e\x8f\xc9\x5f\x45\x89\x22\x17\x9d\x64\x4b\xf2\x40\x2d\xba\x40\x37\x78\xe7\xba\x1d\x19\x32\x8e\x0c\xd7\x32\xbb\xfa\x5b\xa0\xa9\xad\x1b\x89\xa6\x9d\x83\x9f\xd5\x06\x4d\xd1\x96\xed\x6d\xa9\xb4\xc8\xc9\xdc\xbd\xaa\x9d\xc3\xba\xb8\xbe\x95\x8d\xec\x11\x44\xdf\x8f\x22\x12\x0a\xab\x2d\xb9\xdf\x7c\x11\xba\xd0\x1a\x17\xb2\xf3\xdc\xa8\xcc\x43\x49\xd2\x9c\x2a\x27\xe8\xa3\x09\x93\x39\x1e\xd5\xd9\x24\x56\xb7\x28\x15\x3e\x48\xa4\x2a\x1f\x24\xb4\x38\x7f\xdd\x49\xb8\x13\x32\x4e\xbd\x10\xd3\x78\xa0\x7b\xcd\xb6\xb8\xd5\x0a\x88\x73\xb5\xb9\xcd\x65\x03\x70\x0c\xa1\xa1\x08\x81\xc4\x1b\x93\xab\x62\xa6\x94\x0b\xce\x12\xeb\xce\x20\x65\x21\x38\x11\xa5\x2e\x4a\x8d\xa6\xa0\x84\x2a\x18\x2d\xa8\x64\x86\xa1\x9a\xf1\xeb\x1f\x96\xdc\x9c\x76\x2d\x04\xda\x49\x2a\xa7\xb3\xa5\x38\x9c\xcc\x48\xd2\x0c\xf1\xc5\x28\x22\xaf\xf0\xda\xe2\x84\xef\x68\xd2\x6b\x1b\x0c\xb1\xf5\xbc\xe7\xf1\xd4\x3a\xaa\xe7\x18\xd9\x87\xbe\x2c\x1f\x18\x8a\x8c\xd3\xa8\x0d\x3d\x48\xbc\x89\xaa\xc5\x06\xb2\x04\xf4\xb7\x0b\xb9\xa2\x07\x1b\x0a\xd7\xe7\x30\x52\xac\xc9\xf3\xab\xd5\xee\xb5\xfc\x08\x94\x93\xcb\x8b\xab\x8b\xbf\xdf\xfe\xf0\xf6\xef\x57\x17\x1f\xde\x87\x74\x1d\x5c\xc7\x3d\x66\x25\xf7\x68\xb5\xdc\x9f\xa1\x9a\xbb\x6f\x2a\x99\x43\x7f\xc2\x4c\x6e\x91\x9a\x26\x40\x98\xd3\x01\x1a\xb5\x89\xc3\x10\xe3\xc8\x8a\xd1\xd4\x30\x9e\x83\x72\x1c\x17\x55\xf0\x0e\x32\xba\xbc\x85\x44\xf0\xf4\xe0\xd1\xd9\x57\x15\xb3\x51\x96\xa0\xaa\x24\x33\xac\x20\x66\xf9\xa2\xac\xae\x90\xb4\x8f\x0f\x68\x86\x34\xd8\xf7\xeb\xec\xb5\x26\xfd\xf3\x5c\x93\xde\x98\xc7\x0b\x90\x0c\x23\x82\xfa\xb0\x6b\xbe\x15\x0f\xae\xba\xfa\x09\xe3\x7e\xe7\x9c\x36\xac\x34\xb5\x7b\x24\x1c\x4d\x4d\x0b\xf2\xfa\x95\x1f\xe4\xcb\xf3\x7b\xb8\x48\x9f\x5e\x7b\xbe\x1c\x8d\x4f\xbb\xbe\xea\xb0\xa5\xb6\xfb\x2b\x24\x7e\x88\xac\xb0\xf1\xd7\xe3\x2a\x4f\xed\x35\xd2\x53\xb1\x22\xca\x53\x1f\x72\xf6\xe5\xed\x13\x9d\x14\xb7\x22\xb9\x8f\x64\x76\xbd\x7b\x7b\x6d\x7b\x5b\x89\x67\xb1\x37\xb0\x91\x32\x05\xa1\xe6\x29\x14\x40\x07\xa3\x6b\x6f\x8c\xae\xc7\x36\xad\x8b\x66\x6f\xf6\x36\xa0\x1e\x0f\xda\x56\xdd\xbc\xe0\x23\xdb\xd5\x48\x06\x6d\x6b\x4b\x1b\xb4\xad\x3d\x9a\x4d\x22\xc1\x60\xd0\x6f\x24\x4d\xe0\xba\x4f\xc2\x9b\x67\x20\x24\x2d\xa5\x2b\xf1\x56\xc9\x70\x15\xbb\xe0\x00\xa9\xe5\x1f\xee\x55\x80\xcc\xcc\x9b\xd8\xf0\x68\xb4\x21\xd6\x81\xc5\xa5\x0c\x10\xf3\xee\xe6\xae\x6b\x27\xe2\x7a\x27\xf3\x26\xea\x6a\xdd\xa4\xa8\x80\xc9\x7d\x05\x0f\x77\x9c\x0c\xf1\x58\xf6\x1c\x78\x77\x73\x3a\x6d\xae\x20\x51\x6c\x66\xa6\xcb\x55\x69\xb6\x31\xc2\x55\x19\xbc\x9a\x10\x33\xea\x54\xc8\x84\x4d\xb2\x25\x99\xd3\xcc\x28\x4b\x0f\x4c\xcf\x09\x25\xf7\x2c\xcb\x5c\x37\xdd\x27\xea\x16\x5c\xae\xa6\x95\x68\x32\xc1\x67\x38\x19\xd4\xe5\x64\x7c\x2a\x20\x31\x63\x26\x19\x50\x5e\x16\x96\x4e\x23\x1f\x2d\x45\x19\x21\x2d\xc3\x3b\xbe\x2b\x79\x8a\x33\x07\x3f\x62\x8b\xa8\x3d\xba\xe7\xdb\xc9\xb5\xe4\xa3\x9e\x83\x7c\x60\x0a\x6c\x51\xb7\xce\x34\x59\x5a\xda\x25\xdd\xec\x67\x15\x84\x8a\xcb\x1c\x34\xdb\x02\x53\x59\x3b\x8f\xf5\x03\xf6\xeb\x59\x2b\x17\x7c\xc4\x61\x66\x81\x1a\x1c\x43\xb3\x11\x9d\x76\x7c\x1b\x3f\x58\x65\x1b\x28\x2d\x0a\xc2\xf2\x1c\x52\xa3\x1f\x67\x4b\xb2\x60\xb4\x33\x25\x08\x0a\x51\xef\x28\x72\xc2\x05\x11\x85\xb9\xba\x4a\xce\xf4\x12\x3d\x7a\xf3\x52\x93\x54\x3c\xf0\x80\x7c\xab\x3b\x17\xe6\x40\xc9\x04\x34\x75\x36\x70\x73\x08\x9c\x48\xa6\x08\x70\x3a\xc9\xcc\xd9\xc3\x24\x81\xbb\x8d\x1b\x80\x4c\x81\xea\x52\x02\x99\x51\x1d\xc0\x25\x36\x48\xf3\x76\x3d\x1f\xdf\x76\x4c\x39\x7f\x5d\x20\x0e\x73\x3f\x90\x0d\xcd\x89\x16\xa5\xee\xc9\x3d\xb2\xcd\x74\x64\x21\x2e\x1a\x4a\x22\xcb\x41\x11\x51\x46\xaa\xfd\xf0\xda\x0d\x17\x53\xc3\x1b\xec\x4e\x1b\x9b\xd2\x29\xeb\x54\x01\x38\xc6\x16\xdb\x02\xde\xef\xf2\x70\x1b\xf8\x95\x93\x72\x3a\x05\x89\x37\x1d\x12\xbc\x16\x76\x5f\xd5\xd4\xf2\x77\x58\x37\xe3\xad\x0b\xf8\x02\x7d\x86\xb5\x03\x1c\x98\xc4\x96\x21\x1d\xc8\x26\x96\xcc\x95\xa0\x10\x0b\x9e\x93\xf7\x1f\xbf\xee\xb6\x45\x63\x54\x16\x08\x4b\x59\xc5\xf7\xfc\xc8\xbb\xc5\x24\xc6\xdd\x0f\x9b\x50\x5f\xdc\xb6\x48\x32\xa1\x5c\x7a\x34\xae\x4b\x32\xa7\x9c\x83\x37\x46\x31\x8d\x96\xec\x09\x00\x27\xa2\x00\x1b\x94\xd7\x89\x18\x4a\x14\xe3\xb3\x0c\x08\xd5\x9a\x26\xf3\xb1\xa1\x8e\xfb\xbd\x50\xe7\x21\xbb\x4f\x94\x96\x40\x73\xbb\x27\x24\xe4\x94\xd9\xe1\x09\x4d\xa4\x50\x8a\xe4\x65\xa6\x59\x51\x75\xd6\xcd\x8a\x08\x88\x08\xa1\x6c\x5a\xaa\x5f\x2b\x4c\x2b\xa9\x13\x9e\xcf\x6a\x0a\xdd\xeb\x8b\x66\xe1\x20\x34\x9d\x9d\x99\x6f\x21\x2f\xf4\xb2\x4a\x4c\xec\xa6\x03\x4d\x99\x54\x9a\x24\x19\x03\xae\xdd\x9b\x59\xc8\x41\xa4\xe1\xcc\x8b\xd3\xdc\xcd\x88\x72\x53\xc2\x53\x54\xbe\x0b\xad\x6c\xfe\x5d\x45\x84\xef\x2a\x65\xca\xd9\x3a\x54\xb7\xec\x3f\xea\xab\xc4\xd8\x8d\xe3\x67\x04\xb7\x8e\x17\x70\x2c\x45\xee\xa3\x06\x09\x8d\x9a\xd7\x75\xee\x64\x18\x5f\xc1\xda\xde\xfe\x5c\x9f\xb5\x30\x07\x6a\xdd\x02\x53\x61\xd6\xb8\x0e\x6e\x28\x0e\x0b\x73\x0e\x20\x01\x23\x8a\xd2\x88\x4c\xe6\xc5\x79\x4c\x43\x96\xfb\x00\x4a\xd1\x19\x5c\x77\x0c\x47\x88\xc1\x70\x6a\x43\x1b\xc6\x31\xd4\xdb\x66\x0e\x16\xe8\x4a\x8b\xc6\x27\xcd\x24\xaf\xa6\xf2\x98\xdb\x17\xe9\x44\x81\x57\x9a\x1e\x24\xd3\x1a\x70\x97\x62\x55\x25\x0c\x40\x5b\x05\xef\x6c\x27\x97\x75\x1a\xcf\x4d\x7a\x73\x3c\x23\x7e\xf0\xd4\xa6\x69\x4d\x80\x4c\x24\x83\x29\x99\x32\xcc\x1b\xc3\x8c\xaa\x33\x5b\x85\x80\x62\xdc\x2e\x55\x0a\x24\xbe\xb6\x33\x0b\xf8\xd7\xef\x46\xcf\x5f\xdc\xfb\x6b\x59\xf2\x84\x36\xca\x65\x22\xb6\x18\x9b\x92\x19\x66\x71\x39\x25\xf8\xdf\x5e\xfd\xfb\x1f\xc8\x64\x69\xe4\x35\x54\xc4\xb4\xd0\x34\xf3\x04\x90\x0c\xf8\xcc\xac\x22\xb2\xdc\x6e\x7c\xa3\x85\x4f\x55\x2d\x4e\xc6\x72\xa6\xed\x04\xbd\xfe\xed\xfd\x24\xe8\xe8\x21\x7f\x3c\x4f\x61\x71\xde\xd8\x42\xa3\x4c\xcc\xba\xf5\xfa\x36\x46\x36\x71\x90\x9d\x6d\xc3\x89\x16\x19\x4b\x96\x87\x3a\xd3\xbe\x78\x09\x99\x8b\x07\x6b\xcc\x59\x3f\xaa\x0d\xa8\x97\x42\x14\x65\x86\x13\x47\xbe\xae\xf0\xf9\x4a\x05\xab\xd0\x47\xa1\x46\xc2\x06\xb7\x43\x27\xaa\x1b\x76\xe5\xce\x71\x29\x8c\x9e\x4c\xe1\x80\x27\x9c\xcf\xad\xaa\x43\xd2\xd9\x1a\xf7\x35\xcd\xb2\x09\x4d\xee\xef\xc4\xf7\x62\xa6\x3e\xf2\xf7\x52\x0a\xd9\x7e\xe7\x8c\x9a\x3b\x7d\x5e\xf2\x7b\xac\x68\x5b\x83\xd1\x8a\x99\x8b\x29\xf4\xf8\x01\x8d\xb7\xeb\x44\x8c\x7f\x4b\x0b\x0f\xea\x45\x12\x6f\x83\xab\x47\x86\x4f\xac\x36\xb4\x71\x02\x86\xe6\xae\x09\xf8\xd0\x7a\x0f\xd5\x3c\xda\xbf\x7d\xf5\x6f\x7f\xb4\xcc\x85\x08\x49\xfe\xf8\x0a\x53\x8e\xd5\x99\xbd\x00\xf0\x06\x36\xa2\x56\x4e\xb3\xac\xab\x97\xa0\xc9\x02\xbe\xee\x5c\x28\xba\x07\x47\x5e\x1f\xec\x74\xef\xac\x32\xde\xdd\xfd\x15\xf5\x45\xa6\x15\x64\xd3\x33\x8b\xf6\x52\x99\xb5\x8e\x51\xba\x3a\x76\x57\x5e\x77\xa4\xa0\xc3\x2b\x6d\x0b\x91\x95\x39\xbc\x83\x05\x4b\xba\x39\x30\x5b\xab\xd2\xea\xcd\x9b\xe9\x33\xa6\x10\x04\x68\x92\x89\xe4\x9e\xa4\xee\xcb\x46\xa8\xfc\x6a\x85\xeb\xee\xb3\xd0\x35\x69\x20\x20\x59\x60\xeb\xfb\xb7\xd2\x04\x72\x5a\x14\x15\x42\x89\xa4\x0f\xad\xc9\x40\xd6\x84\xe8\xa8\x81\x6e\xc4\x60\x67\x7a\xa8\x2b\x7d\xe4\xde\xc8\x5c\x53\x9d\xbb\xe8\x9c\x5b\x10\xee\x89\xaf\xa9\xef\xee\xc7\x6c\x6d\x88\xba\x43\x7f\x1a\x0a\xfc\xb7\xc5\x5b\x58\x43\xc6\xaa\x20\x87\xaa\x8d\x61\x25\x48\xb3\x7d\xf0\x96\xe9\x6e\xbe\x8c\xe0\x0c\x0d\xcb\x91\x68\xcd\x0b\xaf\x9c\xd0\x39\xd5\x4e\x3f\xf2\x5e\x76\x4a\x0a\x90\x8a\x29\x23\x3a\xfd\x80\x07\xea\x6d\x46\x59\xde\x70\xdf\x1d\x6a\x12\xd6\x23\xea\x73\x5a\x8c\xee\x61\xd9\x71\xc3\x05\x1e\x97\x6d\x01\xfe\x39\x2d\x3a\xde\x03\x58\xb0\x37\xfc\x1a\xe8\x78\x39\x5f\x8b\xd4\xd1\x81\xd7\x83\x2d\x0f\xfc\x2c\x6a\x6c\x44\x19\xe8\xd0\x57\xce\x0f\xf5\xc2\xb5\x6f\x1c\xf3\x49\x75\xe5\xd8\xa7\xbe\xa4\x8b\x06\xdf\xef\x73\xbd\x67\x2a\xe2\x23\xb1\xd3\xa0\x48\x27\xbc\x9d\xdc\xce\x68\x5f\x47\x2d\x83\x96\x3d\x99\x0d\xd5\xd7\x19\x9a\xc6\xb6\x28\x40\x00\x01\xe6\x28\xba\x41\xc9\xf1\x9b\xe3\x83\xde\x71\x76\x65\xa4\x28\xe8\x0c\x35\xd3\x3e\x2c\xd0\x2a\x4d\x4d\x0c\xda\xb9\x78\xb0\xdf\xdb\xe8\x92\xc2\x3d\x05\x69\x0d\x64\x3e\x17\x41\xab\x63\x23\x07\xfd\x8e\x70\xda\xb5\xc5\x2a\x7c\xa0\x4b\x42\xa5\x28\x79\x50\x1a\x34\x3a\x46\x2a\xc7\xd9\x87\x95\x97\xbd\x12\x1c\xbc\x93\x3e\x64\x94\xbb\x1a\xc3\x9c\x29\x1b\xaf\xc0\x38\x79\x3d\x7e\xfd\x2a\x98\xf6\x1b\x48\x4a\xa9\xd8\x02\x6e\x5c\x8d\xf3\x86\x53\xe5\x72\x7a\x2d\x94\x62\x93\x0c\x13\xb7\xb4\x20\xef\x39\x9d\x64\x90\xae\xbf\x68\x15\x38\x82\x6f\x2c\x64\x13\xad\x34\x80\xc2\x13\x7b\x82\x9b\x01\x9f\x66\x80\x80\xa8\x8f\x7e\x49\x92\xb8\xae\x2b\x92\xe4\x55\x25\x49\xda\x7b\xef\xa0\xef\xea\x0b\xdf\xf7\x81\x93\x7c\x70\xbe\x81\xba\xb2\x3d\xf3\x95\x93\xf1\xa3\x07\xc9\xb4\x3b\xdc\x0f\x4c\x01\x39\x41\xab\xc4\xca\x66\x0c\x02\x68\x6e\xda\xb0\x02\x2b\xe0\xc7\x00\x58\x96\xab\x47\xb7\x0f\xab\xb4\xce\x4f\xea\x08\xfc\x07\x67\xc0\xaa\x57\xd0\x71\xff\xfa\x5e\x9e\x53\x9e\x66\x41\x3c\xa3\x9a\x95\x6c\x19\x84\x85\x73\x39\x25\x4d\x96\xe8\xfc\x97\x8d\x6a\x12\x73\xaa\x08\x17\x24\x07\x8a\x01\x9a\xe6\x76\xf1\x5c\xb0\x85\xd5\x1c\x8f\x06\xbb\xd9\xed\x35\xd6\xbc\x10\x1c\xbb\x7e\xc7\x94\x63\xcf\x86\x8f\x38\x0d\xc4\x86\x75\xe4\x34\x0d\x49\xed\x6e\xcc\x69\xbd\x78\xe3\x3a\x68\x72\x95\x92\xfa\xe2\x58\xa1\xe5\x39\xe8\x38\x73\x25\xc8\xcd\xf0\x25\xc6\x09\x6e\x30\xcb\xd5\x41\x32\x41\xde\x6c\xdb\x56\x5f\xb7\xba\x16\xd7\xde\x75\x33\xc5\x15\xc1\x01\x34\x3c\xfd\xaa\x67\x0d\x5e\xe8\x63\x44\xad\x4b\xdd\xd5\x40\x71\x19\x8f\x61\x48\xde\xde\x29\x51\x99\x7b\x66\xc0\x41\x52\xe7\x57\xf0\x21\xa2\x0e\x7c\x85\x2a\xc1\x43\x0f\xc4\x13\x1b\xce\xf0\xfb\xa7\xc5\x14\xfb\xb3\x00\x42\x50\xce\x39\x11\x72\xe5\xb4\x3b\x8f\xc9\x26\x89\x25\xe6\x5b\xaf\x40\x73\xd9\xcd\xdf\xc0\xfc\x34\x8b\xf2\xdf\x25\x5b\xd0\x0c\x2c\x86\xbd\x67\x0d\x07\x15\x26\x54\x39\xe9\xab\xda\xe8\xf4\x43\x54\x3b\x36\x07\x3d\x6c\xd5\x20\x23\xc9\x13\x47\x47\xe4\xc4\x8e\x71\x6c\x41\x76\x0f\x2b\xe4\xba\xb5\x7a\xff\xa9\x08\xa8\xdc\x1a\x6f\xbd\xde\x7f\x2a\x28\xc6\x69\x14\xbd\x58\xb8\xff\x05\x73\xba\x00\xc4\x34\x66\x19\x95\x19\x06\xa5\xdf\xda\x29\x23\x93\x52\x13\xe0\x0b\x26\x05\xcf\xcd\xf1\x43\xf0\x19\xc3\x99\x24\x20\x18\x7c\x02\x8a\x7c\x75\xf2\xc3\xc5\x0d\x26\x2d\x9d\x3a\xb4\x7c\xf7\x7e\xa5\x42\x7c\x80\x95\x77\x68\x74\xd7\xc7\xfd\x46\xfc\xbb\x9b\xed\x82\xf2\x89\x9f\x0b\xf3\x6e\x79\xa9\x4b\x9a\x21\xf4\x73\x92\x95\xe6\x2e\x3c\xd8\xce\x8e\x6f\x03\x0f\xb1\xe4\xc5\x34\x81\x3b\xe0\xef\x77\xac\xd3\x71\x8d\x71\x50\xdf\x36\xf6\xeb\x1a\x0c\x79\xe7\x1a\x0f\x1b\x40\x28\xd7\x04\x9d\x63\x55\x01\x53\x36\xf3\x70\xdc\x5d\xdc\x2d\x3c\x03\x4b\x27\xd8\xe4\x6f\x5f\x93\x74\xcd\xc2\x88\x35\x5a\x0e\x6e\xc3\xef\x70\x18\xe2\x1d\x83\x0e\x86\xe8\x38\xbb\x3e\xe5\xea\x2d\x2e\xcd\x7e\x14\x87\x6d\xf4\xdb\x4a\x93\x35\x1b\xe1\xdd\xd5\x6d\xb3\xa0\x87\x75\xfe\x89\xbd\x57\xf2\xba\xee\xa2\xae\x7a\x83\x15\xf1\x2a\x07\x2a\xc8\x99\x15\xa7\x11\x79\xb6\x92\xaf\xdf\x5d\xdd\xee\x39\x96\xdf\xcd\x56\x18\x9e\x50\x65\x63\xa4\xdf\x5d\xdd\xda\xb8\xb5\xfd\x68\xef\xec\x48\xe9\xee\x83\x40\x00\x37\xc4\xd6\xea\xc0\xb1\xc3\xb9\xdc\x45\x15\x0f\x62\x16\x1f\x7d\xbe\x96\x1a\x72\x79\x4d\x68\x9a\x4a\x0c\x67\xee\x72\x96\x5b\x88\x76\xb4\x28\xaa\xa8\x54\x2c\x12\x43\x15\x34\x5f\xbd\xb1\x07\x50\xf0\xe9\xb8\x7e\xb6\xbd\x2b\x8b\x8c\xd9\xf0\xd3\xe6\x10\x75\x09\x9d\x5c\x2c\xba\xf0\xa7\x10\x0f\x63\x67\xff\x62\x90\x7c\x10\x15\x73\x4e\x74\x2d\x4f\x1b\x7b\x97\x4a\x50\x22\x5b\xd4\xc5\xf3\x83\x77\xa7\x63\x47\x18\x92\x58\xed\x4e\x5f\x81\xf6\x99\x76\x26\x70\x2d\x19\xac\xef\x4a\x72\x63\xde\xae\x44\x76\x56\x91\xc0\x16\x80\x29\x4b\xae\x42\x70\x87\x91\x71\x18\x9f\x77\x4b\xf4\xdc\x66\xdd\x50\x8d\x27\x93\x4a\x2f\x0a\xe0\x9b\x07\xbc\xe2\x41\x8e\xc8\x0a\x32\x7d\xfa\xee\xea\xd6\xde\xa4\x76\xba\x1c\x9e\xb7\xda\xb8\x77\x3a\x5f\x72\xe4\xf0\x65\x92\x42\xdc\x36\xd1\x72\x4a\xab\x92\xa6\x6c\xe3\x04\x1f\xab\x40\x88\xd4\x1b\x17\x9a\x10\x96\x08\x1c\x60\x39\x08\x42\x2a\x6d\xc7\x86\xf8\xb4\xd7\x47\x26\x0b\x47\x3b\xc8\xbb\x46\xbd\x2b\x14\x50\x99\xcc\xbb\x6c\xec\xd8\x97\x85\xa5\x84\xa4\xc2\x66\x88\x4d\x85\x44\x0f\xfc\x08\x45\x9d\x4c\x88\xfb\xb2\x78\x1e\xe9\xc6\x0d\x5c\x50\x3d\x7f\xb6\x4b\xa4\x35\xc6\x20\xdf\x74\xdf\xb3\x29\x57\x5d\xf2\x5c\x02\x95\x2f\xd0\x56\xe5\xc2\x91\x6b\xa4\xb6\xfd\x2f\xa3\x96\x19\xec\x6d\x56\x2a\x0d\xf2\x6b\x26\x95\x3e\xda\xb7\xa7\x1f\x68\xc6\x1c\x70\xb2\x0d\x61\x39\x6e\x76\xf7\x17\xa6\xe7\xae\x50\xef\xf1\x59\xfb\x2b\xf3\xb7\x23\xe3\x98\x08\x49\x8e\xaf\x04\x87\xbd\x83\x87\x56\x34\xd0\x4a\xf0\xa9\xae\xf4\xad\x32\x9b\x9b\x44\x05\x99\x05\x55\xc1\x2f\x3a\x9f\xb3\x3b\x57\x3b\xd9\xd0\xe3\x25\x05\x05\x9a\x50\x2c\x3a\x89\x7d\xcf\xeb\x82\xc5\xb6\x38\x9a\x2d\xf4\x2c\x9c\xce\xbb\x6c\x2c\xed\x9e\x83\x37\xaa\xab\x69\xb1\x7d\x01\xba\xa8\xb6\x7b\x9f\x33\x44\x0c\x01\x57\x4e\xe6\x7b\xc6\xef\xf7\x3c\xe4\x61\x27\xe4\xfd\xda\xe8\x0d\x88\x16\xef\x7b\x67\xdc\x82\x26\x18\x51\x8f\x4e\x44\xa9\x7d\x89\x9b\xa6\x17\x9e\xf1\xff\xb2\xfb\x02\x03\x58\x11\x00\x67\xdf\x55\xd9\x60\x00\x57\x67\x36\xcc\xc5\x5b\xb8\xd5\x92\x6b\x8a\xb5\xb6\xdf\x89\xe4\x1e\x24\xc9\x0c\xcd\xfb\x6e\xbe\x3a\x8f\xb5\x55\x55\x79\xef\xb4\x96\xae\x11\x19\x50\xcc\x21\x07\x49\xb3\xca\x00\xfa\xa2\x8b\xfe\xbd\xbb\xbd\x2b\x32\x9a\x49\x9c\xb6\x3c\xa2\x2b\x94\x2b\xd2\x31\x79\xbf\xe9\xa9\x9c\x2e\x7d\xe1\x77\xc6\xd1\x77\xf8\x89\x29\xbd\xff\x0d\x53\x88\xb4\x89\x91\x5a\x2a\x90\xa3\x0a\x33\x97\x50\x57\x7c\xd1\xe7\xd3\xa6\x30\x29\x67\x33\xc6\x67\x63\x2b\x1e\xa0\x18\x52\x17\x88\xad\x6d\x61\x0f\x73\xd8\x37\x42\x26\x91\x40\x31\x7e\x18\x95\x15\x1b\x32\xc1\x9a\xbd\xe7\x22\xb5\x9d\x4f\x96\xd6\x02\xeb\xf7\x64\x05\xa4\x44\x2e\x39\x11\xd2\xd5\xc5\xa0\x69\x4a\xf6\x0e\xd3\xd9\xb0\x22\xd8\x57\x3d\xbf\x96\xb8\xb2\xf6\xcf\x1f\xab\xfa\x57\x8d\x05\x52\xe5\xc4\xc8\xbe\xa5\xdc\xb7\xd6\x75\x57\x19\xa5\x93\x7c\x12\x2a\x8b\x5e\xf0\x7a\x7b\xbe\x6d\x22\x11\x50\xa2\x21\x2f\x84\xa4\x72\xb9\x9a\x6e\x62\x6e\x12\xb3\x7d\xcd\x02\xad\xcc\xed\xb5\x48\x8d\x90\xb0\x37\x19\x1b\xb6\xed\x82\x19\xb5\x73\xd3\xce\xdd\x78\x9e\xf0\x6a\xe3\x82\xf8\x35\x23\x1d\xa8\x50\xc9\x1c\xd2\x12\xd1\xa7\x66\x25\x95\x94\x6b\x30\xfc\xd3\x85\xb0\x2e\x5b\x81\x1c\x15\x52\x43\x05\xdb\xb6\xc4\xbc\x51\x2c\xee\x6c\x3e\xc1\xba\xd2\x5d\xc2\x4d\x9c\x70\x6c\x3a\x6a\xc0\x41\xdc\xcd\x81\x18\x49\x32\x03\x8d\x93\x0f\x0b\x96\x68\x3f\xc8\x14\x17\x61\xc3\xd6\x4f\x68\x69\xa1\x1e\xf6\x0f\x00\xba\x16\xae\x8e\x6a\x02\xe6\x4e\xd2\xaa\x9e\x5a\x97\xf5\xc8\x3a\xc5\x95\xdc\xf9\x93\xbd\x89\xe0\xfa\x60\x3e\x71\x24\xd1\x28\xd2\x99\x69\xe2\xdb\x3d\xc2\x98\xab\x35\xde\xb0\x12\x7b\x0e\x15\x60\x80\xe9\x9e\xf2\xd0\x29\x55\x21\xc4\xd6\x43\xe5\xec\x60\x49\x40\x17\x72\x56\xe6\x98\x34\xef\x74\x5b\xe0\x5a\x2e\x0b\xc1\xba\xfa\xed\xcd\x51\x43\x37\xe3\xb1\x22\x6f\x3f\xbc\x6b\x02\xbe\x35\xcb\xf4\x79\x38\xc0\x6e\x83\xfc\x10\x37\x40\x81\x5c\x4e\x09\xad\x84\xbe\x4e\x14\xd5\x17\xb5\xb3\xf9\x38\xd7\x6f\x45\xa0\xb7\xc0\x32\x5e\x18\x09\x16\xe5\xf4\x46\x5d\x9f\x64\x4e\xf9\xcc\xb0\xaa\x77\xa2\x34\x2f\xf6\xd5\x57\xf8\x12\x12\xd2\x32\xe9\x18\x5c\x8a\x80\xd1\x0e\x15\xe9\x2b\x1f\xe6\xe5\x0a\x88\x19\x5d\x14\x54\x42\x0b\x3f\x35\xcd\xd9\xb3\x52\xee\x1b\xc2\xc6\x30\x26\x47\x5f\x35\xbe\x3a\x42\x8a\x3b\x51\x53\x48\x61\x5e\xc5\x81\x30\xe1\xdb\x67\x4c\x23\xff\x38\x6a\x8e\x30\x26\xef\x0d\x5d\x18\x35\x5d\xad\x6d\x03\x57\x67\x52\xaf\xec\x19\x91\x30\xa3\x32\xcd\xa0\x23\x80\x88\x98\x56\x4a\x86\x05\xaa\x74\xbb\x0a\x19\x23\xe2\x0a\x70\xa1\xc7\x71\x5c\xdf\xbb\x22\xda\x69\xaa\xee\xd5\xb9\x55\x67\x46\x29\xd5\x74\x44\x0b\x6b\x0f\x62\x82\x9f\x5b\x53\xf7\xc8\x15\x29\x1f\x51\x77\x7a\x47\xd5\xce\x3e\xff\xb5\x83\x5f\x1d\xd1\xea\x29\xc6\x47\x74\x84\x65\xbb\x3b\xdb\x6f\x0e\x90\x76\x17\x3d\x70\x26\xa8\x1c\x53\x40\xd9\xfd\x18\x6c\xfa\x7d\xc5\x95\xed\x52\x8c\xc9\x95\xd0\xbe\xba\x7e\x5a\x27\x1a\x06\x14\x67\x6f\x32\xee\xf7\x57\x77\x37\x7f\xbd\xfe\x78\x79\x75\x37\xf0\xef\x81\x7f\x63\x1b\xf8\xf7\xc0\xbf\x3b\x0c\xdc\x17\xfe\x0d\x7c\x71\x28\xde\x5d\xd9\xbb\x36\x19\x18\x57\xaa\xbd\x06\x26\x8a\x7f\x41\x89\xf6\xef\xf9\xe2\x07\x6a\x54\xc7\x42\x82\x42\x05\xc5\x68\xac\x9b\x82\x94\xdd\x03\x68\x09\xac\x63\x3a\x3f\xdb\x4c\xfb\x03\xe6\xc9\x47\xcc\x13\x0d\x8a\x9d\xbf\x6a\x14\x00\xd9\xb4\xe4\x21\x71\xdf\x1f\xe8\xd2\xd6\x47\xb2\x87\x92\xf2\x25\x29\x24\xe3\x1a\xb7\xd2\xc5\xed\xdb\xcb\x4b\x92\xcc\xa9\xa4\x09\x3a\xa8\xe0\x53\x02\x85\x26\xc7\xff\xf3\xb0\x69\xf2\x81\xd5\x54\xe3\xad\xcc\x3e\x82\x5b\xc0\x30\xb5\xc8\x57\x48\x58\x30\x51\xaa\x6c\x59\x95\xed\xdf\xcc\x47\xd7\xd1\x14\x02\x93\xc4\x96\xde\xcd\xb4\x79\xc0\x15\xa1\x73\x93\x00\x19\x30\xfc\x81\x45\x4f\x47\x44\x0c\x01\x34\x60\xfc\x0d\xa2\xeb\xee\x62\x68\xc0\xb8\x9d\x04\xd8\x6d\xc2\x68\x00\x1d\x6d\x31\x36\xa0\xa3\x76\x16\xcd\xe1\x39\xd9\xd7\x52\xe4\x91\xb8\xd9\xad\x35\x68\xfb\xd8\x8a\x4d\x47\xb5\x8a\xba\x6a\x8a\x47\x4e\xa5\xad\x6b\xa7\x18\x75\x3a\x2f\x74\xc7\xbc\x0f\x12\xab\x6e\x7c\x9c\x12\xeb\x36\x6a\xfe\x03\x2d\xbe\x83\xe5\x0d\x04\x56\x89\x6a\xcf\x37\xc6\x5f\x28\x42\xc9\x3d\x2c\x6d\x70\xe5\x5b\x3f\x58\x58\xa1\xac\x1e\x96\xdd\xbf\x87\x6e\x60\xf4\xbe\xc5\xab\x97\x7f\x0f\x01\x50\x09\xbe\xad\x15\x53\x37\x4b\x88\xfa\x87\x59\xd3\x5e\x95\x8f\x0f\x93\x44\x7d\x8b\x59\x9e\xce\xb6\xa6\x64\xea\xae\x87\x08\x13\xb7\x0a\x97\x03\xd3\x29\x24\xda\xa7\xe0\xdb\xdd\x7c\x86\x59\x9a\x69\x69\x6b\x7c\xd2\xe4\xfe\x81\xca\x54\x91\x44\xe4\x05\xd5\x6c\xc2\x32\xa6\x97\x61\xf9\xf9\xbe\xe1\x0d\x5f\x01\x8c\x5b\xa6\x48\x2e\xb9\xd2\x14\xaf\x42\xe1\x0c\x81\x66\xb5\x6b\x94\x5f\x04\x03\xb6\xdc\x14\x33\x81\xa8\x0c\x2f\xcc\x6f\x48\xc9\x85\xd2\x24\x01\x69\x84\xba\x6c\x49\x1e\xa4\xe0\x1d\xb1\xb7\xdb\x6d\xcf\xf2\x32\x62\x61\x64\x41\x78\x38\x77\x79\x82\x23\xf3\xe2\x23\xcb\xac\xd4\x39\x66\xa1\x9c\xff\x1a\xff\xd3\xa7\x53\x44\x7c\x96\xe1\x1b\x72\x74\x14\xd8\x97\xf0\x41\x4b\x71\x4f\xe5\xad\x0b\xa6\x6b\x8a\x4e\xd5\x85\x42\x2c\x22\x30\xf2\x29\x8f\x83\xe0\xb4\x80\x48\xd3\x1c\x06\x67\x63\x5b\xcb\x52\x95\xd3\x22\xcc\x50\x55\x37\x64\x07\x71\x6f\xef\x60\x1e\x58\x5f\xff\x96\x59\x55\x55\x3a\xd3\x37\x1e\xdf\x43\x91\x1c\x34\x4d\xa9\xa6\x63\x73\x20\xce\xda\x7f\xaa\x82\x26\x70\x46\xfe\x51\x7d\x98\xd1\x09\x64\xea\xc7\xe3\xff\xf8\xee\xfd\x5f\xff\xf3\xf8\xa7\x7f\x34\xbf\x43\x71\x0d\x0d\xa7\xcd\x07\x02\x5f\x01\x63\xa5\xb8\x48\xe1\x0a\xa9\xc3\x3f\x9d\xa6\x77\x91\x24\xa2\xe4\xda\x7d\x81\xe0\xee\xe3\xb9\x50\xfa\xf2\xba\xfa\xb3\x10\xe9\xea\x5f\x01\x25\xfc\x48\x3f\xe5\x1e\x5c\xdb\x00\xb0\x47\xdb\xe2\x49\x3f\xb4\x60\x3f\x80\x54\x41\xf8\x80\xbe\xb5\x33\x36\x6c\xaf\x7e\x1b\xab\x64\x0e\x39\xc5\x7f\x7e\xed\xa7\xc0\xdc\xc7\x55\xf9\x0d\x8e\x28\xfa\xe6\x0e\x6c\xd7\xf4\x3d\x5a\xbc\x0e\xd2\x38\x6d\x8b\xc8\xf9\xab\x15\x8c\x3c\x61\x38\x23\x6e\xb6\x2c\x07\xa8\xe4\x47\x6f\xa5\xa8\xc3\x20\x2f\xae\x2f\xc9\xc2\xce\x70\x8f\x26\xe7\xf9\xd8\x75\x06\xd1\xd5\xad\x60\x86\xfd\x75\x45\x95\x5b\xa6\x86\xea\xe6\x14\x66\xa4\x3c\x74\x81\x6e\x3c\x56\xbf\xe9\xf4\x3d\x5f\x98\x71\x55\xab\xd4\xa4\x97\x27\x79\x20\xac\x0f\xe9\x27\xcf\x0c\xd5\x15\xb1\x2c\x7a\x28\xcb\x35\x9d\x58\x88\x94\xab\xae\x5e\x04\xdf\xfa\xac\xbb\x46\x51\xe5\xbc\x02\xdc\x80\xe6\xa9\x0e\x03\xb9\x30\xcc\x7e\x81\xb9\x32\xf7\x3e\x76\xb5\x90\xb0\x00\xae\xab\xa0\x6b\x57\xf7\x8b\x4a\xcd\xe2\xe8\x24\x8e\x22\x55\x59\xba\xeb\xb0\x0e\x6b\xe5\xca\x5f\xdc\x77\x51\xb7\x77\x25\x1a\x5b\x2f\xb2\x62\x4e\xcd\x5b\xcf\x2a\x3d\x78\xe3\x69\xb7\xd1\x13\x66\xee\x14\xfb\x27\xac\xd4\x6e\x79\xfd\xdb\x3f\x36\x08\xed\xd1\xdd\xf0\x6c\x6a\x4e\x94\x1d\xbb\x49\x57\xc2\x6a\x3c\xdb\xd5\x24\x57\x09\xaf\x7e\x2e\x9c\x4d\xe1\xbb\x09\x70\x26\xd3\x4f\x4c\xe9\x33\x5b\x36\xd0\x9f\xa0\x05\x95\x55\x94\x50\x39\xc9\x98\x9a\x87\xb2\x7b\xdb\x2e\xa7\xd5\xea\xac\x94\x51\xac\x70\x92\x6b\xd9\xc3\xcc\xc5\x0a\x95\x11\x48\xd8\x66\x62\x6e\xa3\x14\xd6\xee\xfc\x6b\x4c\x90\xa8\xe3\xa3\x83\x30\xf5\x1e\x9f\x07\x0b\x1d\xfb\x52\x13\xb1\x86\xa1\x28\x41\x97\xd2\xf0\xac\xd4\xf2\x89\x6b\x91\xba\x9c\x96\x78\xc2\x5f\x0c\x65\x9d\x34\x8d\x22\x5d\x8b\x2a\x36\x5b\x11\x5f\xc8\x8e\x76\xbd\xed\x00\x3d\x57\x49\xef\x9e\x49\x44\x31\xae\x39\x26\x24\x21\xb3\xf5\xd8\x11\x69\xd6\xa5\x06\x78\xe8\x79\x33\xe0\xf1\x78\x7c\x6c\xa9\x14\xae\xda\xa9\xb5\x28\x9a\xcf\x7b\x75\x2d\xd4\x42\xd5\x33\x98\xe1\x79\xc3\xa8\xec\x96\xc8\x42\xb2\xba\xa9\xf2\x2e\xd6\x58\xb2\xfa\x67\xa0\x4c\xf9\x4c\x95\xaf\x7b\x6d\x03\x6b\xe6\xd3\xb4\x82\x0f\xde\x10\x04\xcd\xf5\xdf\x3b\xe1\x47\x55\xc5\xfa\x41\xe9\x50\x43\xf1\x89\xed\x72\x9c\x14\xe5\x99\xeb\x7e\x9c\x43\x2e\xe4\xb2\xfa\xb3\xca\x02\x1a\x29\x2d\x24\x9d\x21\xec\xb8\x1d\xdc\xfe\xac\xfa\xcb\xfe\xb0\x45\xde\xfa\xaf\x6d\x74\x47\x52\x4a\x09\x5c\x67\xcb\x1a\xcf\xf7\x8b\xd3\xe5\xfc\xba\xf5\x44\x81\xaa\xb6\xd5\x33\xf0\x9f\xe3\x3a\x6f\x11\x7d\x6e\xd5\x2c\xa2\x4b\xdd\x95\x07\x3a\xab\x05\x0e\x8c\xfb\xb0\x42\x9e\x3a\xee\x0f\x1f\x22\x24\x65\x0b\xa6\x44\x00\xf4\x6b\xd5\xd1\xba\x7b\xc2\xe3\xe7\xb9\x42\x94\x36\x1d\xbd\xb2\xa0\x7c\x2a\xb0\x28\x75\x75\xd8\x57\x4c\x83\xaf\x43\x3d\x2f\x28\x63\x68\x90\xfc\x0d\xf9\xdf\x27\x7f\xfb\xcd\xcf\xa3\xd3\x3f\x9d\x9c\xfc\xf8\x6a\xf4\xef\x3f\xfd\xe6\xe4\x6f\x63\xfc\xc7\xbf\x9e\xfe\xe9\xf4\x67\xff\xc7\x6f\x4e\x4f\x4f\x4e\x7e\xfc\xee\xc3\x37\x77\xd7\xef\x7f\x62\xa7\x3f\xff\xc8\xcb\xfc\xde\xfe\xf5\xf3\xc9\x8f\xf0\xfe\xa7\x1d\x3b\x39\x3d\xfd\xd3\x57\xc1\xa4\x53\xbe\xfc\x18\xc8\xbd\x6d\x1b\xb9\xcd\xc2\xb8\x86\x19\xec\x9f\x9e\xba\xbd\xc7\x48\xae\xb6\xd6\x55\xc8\xb8\x1e\x09\x39\xb2\x5d\xbf\x41\x25\x25\x70\x00\xbf\xbd\x62\x9f\x7f\x8f\xbf\xf4\xa6\xbe\xcd\x2a\xa1\xb0\x47\x07\xfc\xb9\x04\x0d\x05\x89\x04\xfd\x12\x61\x32\x76\xa4\x46\x59\x3d\x07\x9d\x85\x1e\xb1\x2f\xed\x06\xfd\x25\x44\xce\x78\xa7\x91\x5d\xd7\x5a\x93\x32\xea\xd5\xb8\x56\x82\x28\xb1\x76\x44\xf7\xdc\x3d\x04\x84\x98\xf9\x36\x44\xda\x74\x6e\x43\xa4\xcd\x16\x52\x86\x48\x9b\xa0\xf6\x59\x46\xda\xdc\x5a\x9e\xf4\x8b\x0c\xb3\x89\x8f\xac\xdf\x31\x73\x27\x26\xa8\x3e\xf0\x45\xd7\xe0\xea\x98\xa9\x6e\xde\xec\x81\x50\x5c\x45\x99\x51\xbd\x25\x8b\x22\x52\xde\x5b\xcf\x3c\x67\x7f\xb1\x10\x36\xf7\x16\xd5\x46\x69\x7c\xcd\xbc\xcc\x34\x2b\x3a\x26\x04\x54\xaa\xa5\x4d\x2d\x30\xcc\x9f\x2a\x25\x12\x8b\xf8\x53\x81\xe4\x65\x54\x69\xff\xca\x68\x99\xd7\xf4\x1e\x73\x68\x12\x48\x81\xef\x8b\xc5\xe4\xdb\x0f\x16\x2d\xd0\xcf\xed\x64\x69\xee\xa1\xf7\x7c\xe1\xee\x24\x92\x7a\xc0\xca\xda\x57\x1a\x65\xdc\x2f\x2b\x9b\xd1\x9c\x4b\x97\xad\xd0\x48\x6a\x44\x09\xb2\x06\xe5\x41\x6f\x8e\x98\xd6\x21\x90\x98\xfe\x61\xd9\x74\xb7\x0b\x2f\x58\x39\x08\x17\xc5\xab\x6c\x84\x20\x1d\x6b\x4d\x06\xaf\xc3\x44\xdb\xb2\x77\xe7\x11\x7a\x94\xc0\x11\x2e\x95\xc7\x95\xc8\x9f\x43\x1a\xef\x8b\x24\xde\x13\x29\xfc\x79\x24\xf0\x7e\x4a\xdf\xd1\x24\xef\x38\x52\x77\x1c\x89\x7b\x8f\xb8\xf6\x98\x52\x76\x1c\x09\xfb\x39\xec\x6b\x85\x84\x29\xfb\xd4\x87\xb4\x65\x8f\xb8\x4a\x34\x7c\x42\x53\x4d\x21\xa1\x00\x5e\x01\x7a\x7b\x0f\x2c\xd0\x64\x3e\x64\x9c\x93\xca\x2e\x1a\xf7\xc2\xbe\xdd\x64\x29\x1b\x6e\x6b\x32\xdc\xd6\x7b\xb4\xe1\xb6\x1e\x6e\xeb\x17\xb9\xad\x1d\xb7\xfa\xf2\xaf\xea\xc8\x48\x4b\x88\x21\x77\xf0\x92\x8e\x96\x8c\x80\xda\x34\x7b\x1e\xc5\x3a\xc6\xf3\x1c\x47\xee\x72\xe2\x82\xce\x19\x8e\x7a\x5d\x66\x59\x97\x3a\x17\xb6\xc5\x58\x80\x4b\x9c\xf6\xa2\xcc\x32\x57\x1b\xa1\xdb\xec\x7f\xe4\x78\x81\x5d\x64\x0f\x74\xa9\xce\xc8\x15\x2c\x40\x9e\x91\xcb\xe9\x95\xd0\xd7\xd6\x74\xd2\xad\xdf\x26\x12\x86\xed\x9c\xb0\x29\x79\x93\x51\x0d\x4a\x13\x4d\x67\x18\x51\x5b\x57\xef\x14\xb2\x35\x68\x5d\x9f\xfc\x80\x16\xad\xf0\xbd\xf9\x6b\x0f\x20\x3f\x3a\xcc\x5e\xcd\xd8\x14\x92\x65\x92\x85\xb3\x89\xef\x7d\x4f\x3e\xe2\xdc\x8b\x07\x18\xa7\xb4\x01\xa1\xfa\x33\x2c\x03\x56\x08\xa5\x6f\x35\x95\xfa\xd0\xb5\xc0\xae\x3d\x21\x66\xb2\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\x20\x48\xa7\x1a\x24\xa1\xcd\x7a\xb3\xca\x06\x81\x37\x12\x11\xe6\x94\xa7\x19\x48\x32\xa5\x2c\x53\xdd\x43\xd1\x57\xea\xda\x2a\x4c\xcc\x64\xdc\x02\xe0\x63\x18\xa3\x47\x98\xa7\x49\x22\x64\x8a\x31\xb4\xc2\x23\xb1\xe3\x4b\x84\xf0\x27\xd3\x3e\xa2\xa8\x90\x53\x4e\x67\x90\xbb\xaa\xf5\x6d\xb2\x26\x99\x48\xee\x15\x29\xb9\x66\x99\x7d\x79\x21\xee\x51\x20\xce\xf0\xa4\x76\x1e\xba\x3b\x03\xa8\xfe\x39\xaa\x0e\xe1\xc8\x50\xa5\xce\x7f\x5d\x7f\x85\x1f\x74\x24\x2e\x82\x5a\x16\x43\x29\x83\x4f\x90\x84\x08\x88\x6d\xeb\xfd\x27\x48\xaa\x5b\x41\xe1\x0e\x47\x64\x4e\x0b\xf1\x8f\x18\xbc\x91\x1c\x59\xb6\x45\x0a\xe8\x89\x15\x44\x13\x80\x7d\xdc\x6c\xb1\x63\x44\xde\xba\x45\x60\xca\xcd\xbc\xfd\x33\x63\x1c\xda\x0b\xa3\x6c\x49\x4c\x68\x56\x4a\x30\x7f\xae\xd5\xfc\xfe\xff\xd8\x7b\xdb\xe6\x36\x72\x6b\x5d\xf4\xfb\xf9\x15\x28\x27\x75\x24\xed\x90\xb4\x3d\xc9\xa4\xb2\xa7\xf6\xbd\x29\x6d\x59\x63\xab\x62\xcb\xbc\x92\x66\x72\x52\x93\xd9\x13\xb0\x1b\x24\x71\xd4\x0d\x74\x00\xb4\x64\xa6\xe6\xc7\xdf\xc2\x5a\x40\x37\x9a\xa4\x6c\xb3\x01\x89\xb4\xd3\x9d\xaa\x89\x45\x51\x8d\xf7\x85\xf5\xf2\xac\x67\x79\x1a\xa9\xe8\xae\xf9\xbe\xd8\xbe\x29\x29\x0d\x39\x3e\x7a\x7e\x74\xb2\xb1\x47\x8e\x34\xe0\xf9\xf5\x4a\x1b\x56\x62\x95\x8a\xac\x1d\x94\xe6\x65\x05\x35\xe8\x59\x76\x94\x8f\x08\x37\x29\x40\x27\xf6\x8e\xc4\xb2\x39\x30\x2b\x8e\x31\x7a\x44\xb4\x24\x46\xd1\x9c\x3b\x3f\x19\x7c\x6a\xbf\x64\x54\xed\xaa\xe0\x1c\x1f\xfd\x7a\x34\x22\xcc\x64\x27\xe4\x5e\x8a\x23\x03\xd3\x37\x21\x37\x92\xd4\xd1\x49\x34\xa4\xed\xc8\x4a\xd6\x44\x30\xe6\xce\x56\x53\x28\xcb\x5e\x37\x44\xd6\x98\xf2\xb5\xa4\x26\x86\xe9\x3a\x7c\xce\x3f\x70\xe3\xd8\x1c\xac\xfc\x7e\x01\xbb\x09\xaf\x2c\x42\x35\x29\xf8\x1d\x7b\xbe\x64\xb4\x30\x4b\x84\xc7\x0b\x29\xc6\xff\x62\x4a\x02\x2f\xb6\x70\xbf\x89\xed\x46\x5c\x8c\x32\x7c\x22\xe2\x95\x9b\x1d\x4a\x82\x8c\x49\x6c\x5d\xfa\xc7\x5e\x7b\xaf\x59\x6f\x95\x88\xac\xcb\xa3\x37\x37\x37\xd3\xd7\xcc\x84\x52\x5e\xc0\x87\xe4\xf5\xf9\x8d\x4f\x8a\x08\x6a\x45\x1d\x80\x78\x4f\x83\xd6\x1c\x93\x4a\xaa\x43\xb8\x65\x96\x52\x47\x2d\x27\x79\x84\x2b\xe6\x8d\xd4\x06\x83\x03\x46\x5a\xb1\x2d\x20\x53\x4e\x76\x11\xfe\x3e\x1f\xfc\x62\x3a\x21\x7f\x93\xb5\x9d\x90\x19\x9d\x15\x2b\x72\x4f\x85\xf3\x76\xc7\xc1\x72\xed\xf3\xcc\x76\xe5\x99\xbd\x41\xec\xce\x7f\xc3\x68\xce\x94\x06\x01\xcd\x68\x74\x76\x6d\xb2\xe3\x1e\xf4\x2d\xe9\x52\x9e\xd5\xda\xc8\x92\x2c\xdd\xb0\xbb\x9c\xd9\xee\x70\x4e\xf0\xb8\x3a\x7e\x52\xc5\x2a\x14\xe2\xee\x6f\xbe\x3a\x11\xbd\x21\xbd\x70\xde\xdd\xe7\x33\x54\x53\xc3\x69\x73\x1e\x73\x64\xbe\x74\xb2\xcd\x6e\xd5\x64\x40\xca\x04\x00\x74\x92\x10\x84\x4e\xe2\xd8\xb4\xd7\x5f\x04\xd1\x83\xe8\x37\xa5\xc3\xb5\x93\x64\xd8\x6d\xf2\x28\xf8\x6d\xe2\x60\x79\x6e\xf3\x61\xe4\x28\xae\x54\xf8\xfa\xcb\x83\x0a\xcd\x19\x15\x52\xf0\x8c\x16\xfc\x5f\x2c\x27\x75\x25\x85\x4b\xd6\x02\xcd\x36\xa3\x9a\x8d\x21\x94\x2b\x50\x9c\xeb\x80\x3e\xd9\x4a\x07\x23\x25\xa8\x7b\x80\xc6\xb2\xe2\x1e\x7b\x9d\xa6\xab\x49\x61\xc6\xd1\x5c\xe0\xe1\xb3\x11\xa1\xed\x2c\x56\x9a\x1d\x4f\xbe\x08\x75\x92\x24\xca\xe4\xdf\x24\xcb\x32\x92\xd0\x2c\x03\x82\x68\xbc\xae\x40\xf0\x6a\xa6\xee\xe2\xf7\x57\xb2\x79\xb5\x2a\xe0\xa1\xe9\x5e\x18\xc4\x56\x44\xd4\xe5\x8c\xa9\x96\x69\x50\x99\xcd\x39\x4d\xe2\x75\x71\xcd\x62\x73\x3e\xec\xe7\x75\x0c\x2a\x16\x8c\xbc\xb4\x2d\xff\xf1\xdb\x6f\x7f\xff\x6d\x82\x76\xec\xf0\x7c\x2b\x54\x90\x8b\xd3\xcb\xd3\x5f\xae\x7f\x3c\x03\xfe\xf2\xd8\xd7\x27\xca\xba\x4c\x9d\x73\x99\x34\xe3\xf2\x51\xf3\x2d\x81\x09\x30\x5a\xca\xa6\x3e\x12\xd7\xd0\x2b\xbb\x09\x6b\x8d\x9c\xe7\xce\x26\x71\xde\x6d\x74\x31\xeb\x04\x79\x52\x61\x9c\xcc\x0a\xac\x83\x90\x54\xba\x60\xac\x4a\x66\xf1\x5f\xdb\xb7\x75\xea\xcb\x90\xbc\x56\x58\x66\x1c\x3c\x4c\x5d\x5f\xbe\x2b\x35\x0e\x7d\xf8\x8a\x8c\x7f\xcd\x32\x29\xf2\x18\x13\x20\x95\x4a\xeb\x7a\x92\xf4\xcc\x5d\xe3\x3b\xbd\x8b\xb8\xbd\x4a\x5c\x63\x60\x49\xc6\xae\x28\x69\x56\x35\x8d\x9c\x44\x7a\x01\x78\xdb\x1f\xff\xd0\x3f\x40\x96\x55\xd7\x32\xbb\x4d\xe8\x22\x8b\x14\x60\xaf\xec\x49\xcb\x30\x16\x78\x73\x36\xc5\xce\xd9\x95\xb9\x7c\x7f\xd3\x72\x89\x58\x2d\x9c\xb6\x61\xdd\x37\x2e\x5a\x48\x45\x4e\x6e\x59\x15\x67\x5d\x5a\x81\xe9\x71\x69\x5d\x58\x1a\xf8\xde\x95\x0b\x22\x63\xbe\x2e\x0a\x02\x0f\x27\x43\x8d\x38\xae\xa4\x4c\x10\xf7\x86\x40\xa0\x33\x42\xe6\x94\x17\x84\x82\x57\xde\xf0\x92\x61\xfd\x6b\x70\xf6\xb7\x40\x84\xaf\x48\xe0\x7c\xad\xde\xc6\x23\x8f\x31\xfe\x6e\x67\xaf\x61\x2c\xcd\xc2\xd7\x6d\x06\x38\x99\xad\x3a\x34\x59\x83\x19\xf0\x39\xcf\x60\x06\xf4\x34\x03\x2a\xc5\xae\x8d\xec\xad\x6b\x26\x03\xdc\x60\x37\x1e\x80\xdb\xcc\xd8\x5c\x2a\xb6\x8e\xb7\x09\x70\x30\x0e\x8a\x1d\x01\x35\x3d\x9d\x5e\x34\xb1\x2f\xd9\xc1\xba\x20\x15\xae\xae\xb3\xa5\x0f\x93\x0a\xa6\xf5\x73\x40\xd6\xd4\x15\x3a\x96\xe1\x6a\xab\x15\xeb\x8f\xf2\xa9\x14\x63\x25\xcc\xe3\xa8\xa5\xa7\xb1\xc3\x65\x02\x3f\x64\x26\xc3\xb8\xb9\x87\x15\x39\x18\x98\x9f\xae\x79\x54\x38\xbf\x9d\xd8\x4c\x51\xbd\x64\x90\x8c\xc9\x3e\x70\xa3\xb1\x51\xa4\xf7\xf4\x33\x6e\xf5\x85\x85\xa2\x19\x23\x15\x53\x5c\x5a\x15\xa3\x16\x26\x97\xf7\x82\xcc\xd8\x82\x0b\xed\x57\x2c\xa6\x4b\x7e\x4b\x00\x92\x88\xeb\xa6\x04\xf4\x84\x5c\x75\x4a\x91\x39\xba\xaa\x4c\xb6\x32\xd3\x4d\xd1\x28\xd1\x94\x80\xf2\x02\xdb\xa0\xa6\x45\xb1\x6a\x37\x5e\xc8\x38\xf9\xc0\x0c\xf5\xdf\x10\x38\xb3\xc7\xb5\x80\x81\xe6\xac\xa0\x2b\x4c\x49\x9e\x73\x01\xde\x5f\xa5\x4f\x26\xf1\xd0\xac\xde\x1d\x94\x2a\x78\xe7\x83\x3b\x83\x6b\xa2\x18\xcd\xa2\x88\x71\x07\x0c\xd8\xa7\x9e\x01\x03\x36\x60\xc0\x06\x0c\xd8\xe6\x33\x60\xc0\xba\xcf\x80\x01\x7b\xb8\x43\x87\x1c\xb4\x1b\x30\x60\x83\x57\x66\xf3\x19\x30\x60\xbd\x9e\x01\x03\xf6\xc9\xe7\xe0\x44\xf4\x80\x01\xfb\x8c\x67\xc0\x80\x7d\xe6\x33\x60\xc0\x06\x0c\xd8\x80\x01\x1b\x30\x60\x11\xcf\x80\x01\xdb\x7d\x78\x43\xf0\xa7\xff\x33\x60\xc0\x06\x0c\xd8\x8e\xcf\x80\x01\x5b\x7b\x06\x0c\xd8\x80\x01\xfb\xd8\x33\x60\xc0\x06\x0c\x98\x7b\x06\x6f\xe3\xc6\x33\x60\xc0\xb6\x3c\x03\x06\x6c\xb7\x76\x06\x33\x20\xee\x65\x8f\x62\x06\x68\x23\xab\x6b\xbe\x88\x20\x1a\x4c\x75\x0c\xae\x9b\x9e\x38\x16\x42\xed\xaa\xb7\x6a\xfc\xd0\xfb\xb1\x80\xa1\xcc\x1e\x88\x10\xa5\xd3\xde\x24\x33\x66\x4d\x04\x3b\xac\x2a\xe6\x36\xb9\x98\x43\x00\x39\x20\x49\xb3\xa7\xc2\x89\x35\xdb\x4e\x50\x27\xa0\xab\x3e\xfb\xdb\x8d\x0b\x6b\xbb\xf4\xef\x41\x30\x1f\x19\x15\x58\x6a\xd3\xd5\x5d\xb6\xd7\xfb\x54\xe6\xda\x97\x26\x10\x52\x8c\x91\xfd\x73\x62\x3b\x3c\x91\x7a\x12\xe1\x0d\x8e\x24\x3d\x43\x8c\xdc\x54\xc9\x59\x3c\xf1\x19\xbc\x45\x43\x45\xce\xaf\x94\xf6\x2c\x06\xbd\xb3\x37\xe4\xce\x81\x20\x9f\x12\xa0\x75\x52\xde\xe1\x07\x8a\xd2\x39\x4c\x84\xce\x21\xa2\x73\xf6\x81\xcc\xd9\x3b\x2a\x27\x4d\xb8\x37\x41\xa8\x37\x91\xa6\xf4\x08\x61\x13\x07\xf0\xbe\x59\x2a\xa6\x97\xb2\xe8\x2d\x70\x52\x09\x9b\x77\x5c\xf0\xb2\x2e\x81\x6e\xdf\xca\x14\x7e\xd7\x80\xd0\xb5\x17\x19\x0e\x9b\x8e\x91\x70\xe0\xe5\xcf\x19\xd4\x3b\xa6\xbc\xb0\x5b\x0b\x48\x2c\x97\xf4\x0e\x94\xa5\x3a\xcb\x18\xcb\x63\xd4\xa5\xd0\x8b\xfa\xfb\x49\xd3\x43\x24\x23\xe7\x9a\xbc\x8c\xbb\x6a\xe2\xf4\xf1\xc0\xcd\xf4\xfb\x6f\x7a\xbd\x63\xa1\xaa\x34\xb7\xf4\xeb\xab\xe9\x59\xe7\x96\x86\x0f\xde\xc0\x31\x3e\x5b\xb2\xec\xf6\xca\x41\x3c\xf6\x77\x33\xc7\xbb\x3f\xa2\x5c\x1f\x29\x14\x83\x58\xeb\xbe\xab\x83\x5a\x03\xbc\x1b\x9a\x5b\xc0\x2a\x32\x75\xc7\x33\x36\x79\x02\x03\x3a\x95\x51\x1a\x7f\x10\x08\xb8\xaf\x61\xe0\x87\xa2\x76\x5d\x63\x77\x1a\xcf\x77\xe0\x3b\x71\x3d\x05\x30\x63\x41\xb3\x66\x6d\x16\xdb\x0f\x5d\x54\x37\x8e\x35\x63\x4d\x8a\xc2\x82\x9b\x65\x3d\x9b\x64\xb2\x7c\x6e\x45\x07\xfe\x67\x56\xc8\xd9\xf3\x92\x6a\xc3\xd4\xf3\x5c\x66\xee\x5a\x1f\x67\xb6\x07\x5c\x2c\x26\x65\x7e\x32\xf9\x5f\x51\x7d\xb8\x70\x3e\x5c\x97\x1e\xf4\x80\xf1\x3a\x63\x56\xee\x4b\xb5\x66\xc5\xda\x49\x89\xdf\xa4\xd1\xf7\x77\x6c\xf5\x84\x48\xb8\xec\x5e\xa0\xb2\x83\xd4\x26\x09\x1c\xd5\x29\x85\xca\x61\xc0\x61\x1f\x0d\x0a\x9b\xe4\xac\x26\x82\xc0\x1e\x10\xfc\xf5\x60\x6c\xa1\x43\x81\xbc\x1e\x60\xcd\xfd\x04\x30\xd7\x14\x10\xd7\x74\xf0\xd6\x43\x2d\x4d\xff\x68\x90\xd6\x2f\x02\xce\x9a\x30\x6e\x93\x08\xc6\xfa\x14\x10\xd6\xc3\xf5\xc1\x90\x04\xb0\xd5\xa7\x83\xac\x26\x99\xc7\xa4\x56\x6c\xa4\x48\xd8\x03\x44\xf5\x29\xe2\xd2\x8f\x16\x93\x4e\x10\x8f\x4e\x19\x8b\x4e\x16\x87\x7e\x34\x28\x6a\x3c\x0c\x35\xa9\x4f\xe1\x49\xe0\xa7\x29\xa1\xa7\xd1\xeb\xcb\x05\x37\x9c\x16\xaf\x58\x41\x57\xd7\x71\x00\xc5\x54\x2b\x71\xb9\x01\x62\x44\xb7\x75\x37\xde\xbe\xa4\x9a\xf8\x2a\x48\x8e\x7a\xc4\x07\xa1\x9d\x0a\x0c\xf1\x63\x1c\x5f\xef\x62\x64\x64\x77\x2e\x8a\x7b\xa9\x6e\x0b\x49\x73\xfd\xbc\x92\xf8\x9f\x96\x89\x22\xa0\xa0\x88\x52\xd3\x0f\xc3\x3d\x8e\x7c\x1f\x07\xb2\x6b\xde\xc8\x7b\x22\xe7\x86\x09\x72\xcc\x85\xdf\x39\x27\x81\x97\xa6\x0d\x8f\x44\xc7\x3b\xec\x5b\x5f\xbe\xf0\x8d\x7c\x7d\x71\x0f\x88\x0c\x69\x7d\xd0\x91\x2f\xd7\xc7\x4f\x87\xbe\xdc\x17\xe7\x75\xd1\x0d\x7f\x61\x48\x2c\x4d\xec\xeb\xe5\x84\xbc\x73\xea\xc4\x4b\xe8\x4f\x23\x8a\xa8\xc8\x89\xe3\x8d\xfa\xfa\xf6\x49\x34\x04\xbb\x6b\xdc\x34\x98\xe9\x2e\x9e\x05\x6f\x60\xab\x65\x4a\x42\xed\xb7\x40\x01\x1d\x9c\xae\x07\xe3\x74\xdd\x13\x32\xf8\xeb\xb3\xb6\x9e\x1e\x09\x3c\x58\x5b\xff\x2e\xd6\x56\x40\xd7\xf6\x5a\xd1\x8c\x4d\x0f\x49\x79\xf3\x02\xa4\x4d\x50\x6b\x75\xb8\x46\x5c\x08\xc6\x30\xa1\xa9\x25\xe3\x03\xde\xb9\x79\x5d\x14\x2b\xf4\x21\x76\x98\x19\xfb\x6f\xad\x9b\x25\xdb\xa0\xb4\x83\x50\xea\x96\xde\xb5\xb6\x49\xa5\xa4\xd3\x48\x54\x2d\x84\x55\x31\xdc\x71\xb2\x9d\xb7\xb6\x88\x66\xa2\xbf\x3b\x9d\x76\x08\xf7\x1c\x38\x1a\x80\x9e\x4b\x46\xda\xbc\x9a\x6e\x47\x6c\xab\x73\xa9\x32\x3e\x2b\x56\x64\x49\x0b\x6b\x2c\x39\xf0\xf0\x2d\x2f\x0a\xf7\x9a\x08\xb0\x32\x33\x18\x7a\x46\x8d\xa6\x90\x62\x01\x93\x41\xb1\x23\xec\x43\xc5\x32\xdb\x66\x56\x30\x2a\xea\x0a\xfb\x69\xf5\xa3\x95\xac\x95\xef\x67\x14\x5a\x3b\x68\x9d\x6b\x22\x78\x31\xf2\x53\xde\xa5\x66\xdc\xdc\xf3\xad\x4b\x59\xb3\xdc\xb1\x2a\xde\x73\xcd\x46\xf0\xce\xde\x7d\xc2\xbe\xc8\x3b\xa6\x14\xcf\x19\xee\x1b\xfc\xac\x52\xf2\x8e\xe7\x2d\x76\xdc\x6e\x0b\xc0\x6d\xf7\x6e\xeb\x47\x78\xaf\x17\xad\x42\x8a\xb1\x60\x0b\x0a\xea\xb1\x13\x68\x88\xe8\xc4\xf6\x11\x3f\x28\x72\x9e\x51\xc3\x34\x60\xe5\x3b\x94\xab\x77\x9c\xf6\xee\x89\x1d\x4f\xb0\xa3\xc8\xb1\x90\x44\x42\xc6\x5b\x2d\xb8\x59\x41\x44\x6f\x59\x1b\x92\xcb\x7b\x71\x12\x73\x30\x11\xe6\x40\xc9\x8c\x19\xda\x26\xad\x79\x95\x4c\x13\x26\xe8\xac\xb0\x67\x0f\x30\xe4\x37\x5b\x37\x00\x99\x33\x6a\x6a\xc5\xc8\x82\x9a\x08\x29\xb1\x45\x9b\xc7\xf5\xfc\xf8\xb6\xe3\xda\xc5\xeb\xe6\xa4\x16\x9a\x45\x2a\xb2\xc9\x4c\x80\x9e\x99\x98\xf6\x44\xcb\xda\x1c\xc8\x3d\xf2\x90\xeb\x08\x33\x4a\x02\x23\x91\x97\x4c\x13\x59\x47\x78\xf2\x3a\xe6\x9f\x6b\x2e\xa5\x85\x37\xf8\x9d\xb6\x3e\x7d\xc3\xa6\x29\x76\xd8\x65\xa0\x95\x6f\xc9\x43\x69\x81\x57\x98\xe3\xfb\xea\xf2\xfa\x97\xb7\xa7\xff\x7d\xfe\xb6\xdf\x16\x00\x59\x27\x42\xdd\xb9\x16\xfc\x9f\x35\x23\xb4\x94\x62\x41\x68\x11\xa6\xc0\x8c\xc0\xd1\x19\x7c\x00\x52\x31\x6d\xb2\x4c\x4f\xbd\xd6\x5e\x02\xbd\x04\xc3\x06\x1c\xf3\x29\x32\x82\xfa\xa2\x40\x22\xd0\x1f\x5d\x24\x8c\x1f\x03\xe0\x4f\x3b\xe4\x0d\x82\x19\x7b\xc6\xd1\x20\xe4\x82\x50\xa2\xb9\x58\x14\xd1\xb6\x60\xb4\x47\x24\xd6\x1f\x32\x6e\x47\x30\xed\xeb\x16\x89\x77\x8a\x74\xfa\xd0\xdf\xaa\x4c\xe7\x10\x68\x2f\x33\xef\x02\x60\x1f\x2a\xa9\x99\x77\x01\xa0\x8e\x7b\x31\x25\x34\xcf\x55\x94\x1e\xed\x84\x4d\x63\xa3\x23\x41\x00\x36\x8b\xa1\xdf\x11\x79\x41\xfe\x8b\x7c\x20\xff\x05\x0e\x81\x3f\xf6\x6f\x2a\x8d\xb9\x9d\x02\xd1\xbc\x94\xda\x5c\x4c\x13\x2d\xf4\x5f\x97\xd4\xc0\x1b\xed\x7a\x18\x49\x66\xdc\x59\x66\xec\x83\x61\xca\x6a\xc4\x6e\x0d\x63\x67\x2e\xca\xb9\x60\x3b\xf8\xa5\xec\xee\xd8\x38\xeb\xc5\xbc\x0b\x84\x7e\xa2\xfd\x0d\x0d\xbf\x91\xda\x5c\x3a\x69\x1d\xb2\x5c\x84\xfd\x28\xa9\xc9\x96\x5d\x71\x1f\xd3\xea\x3b\xbb\xf7\x82\xeb\x3f\x97\x70\x51\x62\x3a\xdb\x92\x47\x08\x87\xc3\x39\xb1\x71\x90\xb9\x74\x5b\xf7\x63\x5b\x6b\xcd\xbd\x09\x6a\x98\xd3\xdb\x82\xca\x11\x95\xcc\x27\xe4\x9c\x66\xcb\x88\x5e\xd8\xd9\xc8\x03\x65\xa0\x92\x39\x76\x63\x49\xef\xec\x1e\x77\xad\x02\x7c\x0f\x55\xd7\x26\x50\x06\x07\xce\x4a\xac\x8c\x0a\x32\x8b\xc1\x8f\x29\x36\x67\x4a\x61\xca\xe4\x6c\xe5\x33\x2f\xa2\x77\x5b\x94\x94\xab\x94\x34\x32\x93\xbd\x99\x0d\x52\x6e\x95\xa9\xeb\x0b\xcc\x3d\x84\xad\x9a\x40\xe1\x0f\xaf\xa6\x23\x72\x73\x36\x1d\x11\xa9\xc8\xf5\x59\x1c\x0e\x24\xb4\x46\x9f\xdd\x9c\x4d\x9f\xed\x75\x05\x82\x74\x8e\x9b\xb3\x69\x8f\x97\x6c\x22\x09\x4b\x5a\x8d\x6f\xd9\xaa\xa7\x76\x97\x42\xc3\x1c\x37\x1b\x2b\xc9\x80\x70\x9a\x4b\x5a\xed\xfc\x36\xc5\x68\xce\x07\xb2\x85\xcf\x7f\x06\xb2\x85\x81\x6c\x61\x20\x5b\x18\xc8\x16\x06\xb2\x85\xc3\x05\xfa\x0f\x64\x0b\x9f\x7c\x06\xb2\x85\x07\x9f\x81\x6c\x61\xa7\x67\x20\x5b\xd8\x7c\x06\xb2\x85\x8f\x3c\x03\xd9\x42\xf3\x0c\x64\x0b\x03\xd9\xc2\x97\x2b\xb5\x07\xb2\x85\xf5\x67\x20\x5b\x18\xc8\x16\x06\xb2\x85\xf0\x19\xc8\x16\x1e\x78\x06\xb2\x85\x81\x6c\x61\x20\x5b\xf8\xf8\x33\x90\x2d\xf4\x7e\x06\xb2\x85\xdd\x9e\x21\xfd\x67\xc7\x67\x20\x5b\x18\xc8\x16\xd6\x9f\x81\x6c\xe1\x93\xcf\x61\xb8\xc7\x07\xb2\x85\x81\x6c\xe1\xa3\xcf\x40\xb6\x30\x90\x2d\x7c\xf4\x19\xc8\x16\x7a\x3c\x07\xe7\x74\x1d\xc8\x16\x06\xb2\x85\x8f\xb5\x31\x58\x5b\xbb\x3d\x03\xd9\xc2\x40\xb6\xb0\xf1\x0c\x64\x0b\x9b\xcf\x40\xb6\x30\x90\x2d\x0c\x64\x0b\x03\xd9\x42\xf3\x0c\x64\x0b\x5f\xbb\xdf\x49\x31\xcd\xff\xc5\xa6\xb2\xe0\xd9\x2a\x3a\xcf\xe4\x8a\x69\x59\xab\xcc\xde\xd8\xf0\x5a\x52\xc1\x7b\x1b\x8f\x42\x94\x92\x7d\x60\xc9\xfb\x57\xc1\xc4\x85\x49\xfc\xca\xcd\xc1\x63\x4c\xc1\x41\x24\xf2\xfb\x01\x5e\xf6\x47\x10\xc0\x4b\x0c\x55\x06\xa7\xaf\x9f\xb3\x34\xda\x6a\x0f\x07\x72\x08\x89\x84\x21\xf7\x48\xb3\x8b\x8c\x6c\x84\x2d\x7f\x70\x73\xd1\xaa\x2a\x78\x4c\x4a\x26\x21\xd7\x35\x68\x17\xcc\x85\xc0\xf5\x77\x24\xab\xea\x11\x29\x59\x29\x55\x44\x62\x44\x02\x0b\xae\xb3\x55\x0e\x61\x9d\xae\xb0\x43\x7e\xf2\x8d\x84\xf9\x5f\xa1\xbd\xd0\x12\xc4\x34\x6b\xc5\xbd\x38\x8c\xc2\x9a\x6d\x96\xad\xe6\xa6\xe3\x05\xba\x94\xe6\xca\x1d\xee\xbd\xad\x57\x62\xc4\x82\x9f\xc2\x78\x6e\x99\x9e\x0b\xde\x5e\x68\x9f\x9d\x3b\x49\xce\xb7\x7c\x0a\xf1\x4f\x5d\xd9\x97\x34\x63\xea\xd5\x21\x5a\x28\x46\xf3\x15\x74\x23\x03\xbc\x5e\xeb\xff\xfb\x02\xd3\x36\xb3\x82\xf2\xfe\x20\xbf\x54\x47\xfa\x0c\x7a\x41\xec\x7e\x6d\xc1\xef\x90\x47\xd6\x2c\xd6\xa8\x81\x78\x73\x3c\xe3\x13\xff\x2b\xfc\xe3\x51\x84\xa5\x47\x0d\xec\x2e\x30\x62\xc0\x94\xe5\x3a\x54\x13\xe2\x8c\x3b\x34\xe9\x72\x56\x31\xab\xbd\xa3\xb3\xb3\xbf\x8e\xbe\x12\xb4\xe4\x99\x3f\x15\xa7\xb8\x09\xb9\x14\x6b\x16\x60\x8a\x2e\x5b\xc3\xb4\x2c\x6b\x43\x67\x05\x9b\x90\x0b\xb3\xb5\x54\x7e\x5c\xce\x32\x49\x82\x55\x8d\xc4\xa9\x6e\x55\xa0\x61\x53\x21\xf3\x02\x13\x56\xfc\x48\xc1\x08\x13\x46\xad\xec\xfe\x9b\xca\xfc\xda\x6e\xc1\xce\xb7\xa3\x09\x19\x22\xe1\xa9\x29\xa0\xa9\x91\xb0\xd4\x34\x60\xd2\x78\x20\x69\x5a\x10\x69\xeb\xee\x47\x3e\x99\x30\x3b\xa7\xb3\x2d\xec\x15\xb0\x45\x34\x11\x39\x8f\xec\x81\x6d\x71\x2a\x73\xab\xe0\x28\x86\xf2\xa9\x39\xa3\xe8\xec\xbb\xb0\x9d\xbb\x05\xef\x1c\x35\xad\xe6\x43\xef\x28\x2f\xec\x01\x8e\xec\x40\x93\xdd\x9c\x28\x4a\x93\x28\xae\xe0\x80\xf4\x87\xb4\x59\x5c\x0a\x56\x27\x8b\x2b\x5b\x4a\xcd\x04\xc8\x4b\xda\x64\xdb\x34\xb9\x00\x4e\xc4\xe4\x78\x17\xc7\x22\x7e\x2f\xe6\x84\x95\x95\x59\x8d\x08\xbb\x63\x6a\x65\x96\x80\x0c\x50\x12\xd1\x22\xd0\x84\xed\x5b\x49\xf3\x60\x77\x8c\x88\xf4\xce\xe2\xc8\xe6\xe1\x7e\x70\xf6\x53\x5d\x18\xb4\xa6\x40\xff\x8e\x4a\x07\xc5\x27\xc1\xae\x49\x4d\x7a\x42\x62\x85\x66\x4a\xd2\x12\xfb\x14\xbc\xe4\xfd\xa8\x20\x49\xc2\xb3\xf0\x16\x7a\x11\xa4\x79\xd8\x2d\x51\xd2\x0f\xe0\x4a\xa4\xa5\xac\x05\x6c\x8d\x4c\x96\x55\x6d\x02\x95\xdc\x6b\xf7\x4f\xe6\x63\xcc\xa4\x98\xf3\x85\x8b\x82\x3d\x2f\xa9\xa0\x0b\x36\x6e\xba\x33\x6e\xd5\x9b\xe7\xfb\x43\x67\xd0\xdc\xd3\x48\x4c\x53\xe4\x14\x53\x63\x98\x12\xdf\x91\xff\x39\xfe\xfb\xef\x7e\x1d\x9f\xfc\xf9\xf8\xf8\xa7\x17\xe3\xff\xfc\xf9\x77\xc7\x7f\x9f\xc0\x3f\xfe\xe3\xe4\xcf\x27\xbf\xfa\x1f\x7e\x77\x72\x72\x7c\xfc\xd3\x5f\xde\xbd\xbe\x99\x9e\xff\xcc\x4f\x7e\xfd\x49\xd4\xe5\x2d\xfe\xf4\xeb\xf1\x4f\xec\xfc\xe7\xcf\x7c\xc9\xc9\xc9\x9f\x7f\xdb\x3f\x52\x18\x1b\x16\x4f\x17\x14\x4f\x14\x12\x7f\x94\x80\xb8\x93\xb1\x7b\x3f\xfc\xee\x0a\xdc\x38\xfe\x2e\x92\xf0\xb1\xe3\xaf\xa2\xfd\x27\x17\xf3\xb6\x7d\xae\x89\x2c\xb9\x31\xce\x5b\x40\x43\x9e\x9a\x35\xdf\x8d\x13\x58\x7c\x8e\x0a\x14\xd7\x21\x5f\x4a\xeb\xf2\xe9\xdd\xad\xe6\x7e\x05\x6f\x95\x20\xbc\xac\x0a\x56\x32\x61\x40\xf0\x8c\xbd\x6d\x0b\xae\xbf\x49\x3b\x82\x8c\x0a\x21\x0d\x61\x1f\x32\xc6\x72\xd7\xc9\x41\x36\x06\xcf\x20\x1b\x07\xd9\xf8\xa9\x27\xda\x7f\x9d\xc8\x91\x19\xfa\xac\x37\xa2\x51\x56\x2e\xe0\x11\xf3\xea\x33\x7c\xbd\xe1\x38\x90\x73\xc2\xfa\x72\x59\xb6\x8d\x38\x7a\x4c\xda\xd7\x5b\x49\x20\x3f\xdc\x49\x25\xed\xb1\x32\x68\x8b\x4a\x71\x18\x5c\xe8\x9d\xe5\xbe\xaa\x8b\x7d\x3a\xaf\x03\x66\x71\xab\xdb\x83\x47\xd3\xf6\xc8\x83\xba\x97\x2c\xbb\x45\x17\x72\xce\x10\x64\xc1\xf0\x0e\xea\xa7\x01\x04\x34\xf9\x4b\x59\x17\xb9\x6d\xc3\x4d\x07\xc3\x05\xfa\xc0\xcd\xe4\xa3\x6b\xd8\xab\xdd\xaf\x94\x1e\xde\x9d\x59\xbb\x87\x02\x5d\x66\x29\xef\x43\x55\x02\xe6\xd4\x2a\x0c\x4b\x2a\xf2\xde\xf8\xfb\x03\x08\x2b\x53\xc0\xa4\xef\x29\x14\x8c\x8d\x1f\x42\x70\xf1\xba\x81\xea\x5b\x39\x4c\x1d\x50\x9f\xde\x32\x61\x0f\xd0\xe6\xc2\xcf\x1b\x4a\x07\xae\x40\xa3\x8b\x61\x2a\x00\x50\x25\x35\x5c\x5b\x6d\x13\xa1\x6e\xe0\x51\xa9\xa4\xd6\x7c\x56\xb0\x16\x86\xf3\xcc\x6d\xce\x67\x56\x78\xf8\xdb\x22\x8e\x62\x31\x81\x6f\x2f\x81\x02\x60\x67\xf5\x4c\xe6\x31\x6a\xdc\x9a\x47\xbf\x11\xc2\x88\xe0\x84\x12\x1e\x39\xca\x60\x10\xc0\x76\x5d\xbb\xab\xfa\x75\xb8\xf2\xed\x99\xa4\x46\xf6\x57\xe9\xd2\xb8\xf3\x7d\x37\x0e\xcb\x4b\xdb\xd9\x14\x8a\x15\x60\xe4\xe8\x25\xaf\xc8\x8c\x99\x7b\xc6\xd6\x92\x12\xda\x7d\x73\xac\x4f\x3c\x4a\x39\xb2\x13\x2d\x52\x01\x11\x1f\x13\x32\xed\x1c\x73\x88\x79\xc7\x13\x8d\x5c\x88\xef\xd6\x45\x14\x30\xa1\x7a\x31\xe3\x45\xd8\x96\xb1\x42\x0c\x30\x2e\x62\xd9\x0c\x96\x81\xf6\xb3\x31\xe6\xe8\xe1\x5d\x4a\x13\x37\xc2\xe8\xa1\x59\x3d\xca\x79\xf3\x1f\x65\x94\x89\x82\x25\x0e\x56\x74\x40\xa7\xb0\x7b\xd5\xba\xb9\x73\x5b\xbf\x11\xce\x9d\x28\x73\x20\xbe\x63\x77\xce\xa9\x21\xa5\xd4\x86\x7c\xf3\xed\xb7\x84\xa1\x2f\x06\x41\x26\xd1\x2e\x68\x92\x8c\x81\x29\x09\x07\x53\x3a\xda\x45\x92\x8c\x7a\x91\x7c\x24\xf2\xd1\x8f\x6c\x2c\x31\xf0\x49\xb3\xac\x56\xdc\xac\xac\x2d\xc0\x3e\xf4\x8a\x30\xa6\x38\x2b\x6d\x1e\xe2\x75\xb7\x43\x0e\x0d\xe3\x4f\x0e\xfe\x8e\xc8\x0a\xa9\xa5\x1f\x2c\x9e\xd6\x5a\x85\xb5\x00\x67\x40\xbf\x5d\x7e\x31\xb7\xab\x84\x89\x29\x60\x38\x02\x56\x67\xbd\x8b\x3e\x65\x04\xbb\xf3\xcf\x9a\xdf\xd1\xc2\x8a\xe6\xf6\x2f\xa6\x90\x44\x10\xfe\xd1\x17\x08\xa1\x02\x79\x31\x55\xfc\x8e\x17\x6c\xc1\xce\x75\x46\x51\x99\xd8\xb7\x1b\xfe\xf4\x81\x7e\xc1\x7e\x50\xb2\xd0\xe4\x7e\xc9\xcc\x92\x29\x42\x7d\xe2\x12\x40\x7c\x16\x94\x0b\x52\x4a\x15\x03\x03\x71\x8d\x6a\xcc\x9c\xe2\x46\x93\x8a\x2a\xbb\xf6\x3e\x43\x0a\x81\x46\x33\x29\x0b\xc7\x12\x5f\xac\xda\x7e\xf1\xfe\x78\x09\x88\xb9\xcb\x5f\x04\xbb\xff\xc5\xf6\x42\x93\x79\x41\x17\x4d\x62\x14\x5c\x31\xeb\x9a\x5d\x74\xd2\xd6\x83\x13\x0d\x14\xe8\xb5\xbd\x51\xee\xe9\x4a\xb7\xe9\x6c\x6d\xdb\x3c\x42\xb6\xbf\x3c\x81\x53\x4c\x35\x69\xda\xce\x7b\xbf\xec\x9b\x13\xe0\x1f\x39\x3b\x9d\xfe\x72\xfd\xb7\xeb\x5f\x4e\x5f\xbd\xbb\xb8\xec\xfd\xb2\x4b\x69\x18\xc6\x51\x02\xd7\x92\x73\x38\xb9\x55\x68\xa0\xba\x13\xa9\x27\x00\x92\x00\x2e\x35\x91\xcb\xfb\x48\x24\x99\xdd\x53\x8c\xf6\xf3\x63\xd0\xaa\x3a\x55\xa5\x54\x53\x25\xe7\xbc\xe8\xad\x7b\xa7\x3a\xc1\x6b\xdd\xf1\x98\x92\x53\xf7\x71\x2b\xee\x91\xde\x67\x13\xba\x18\x08\x6a\x0e\x24\x32\xf6\x35\xfd\x63\x58\x9d\x14\x40\x4c\x48\x5c\xeb\x62\xff\x43\xb4\xd7\x3d\xb3\x77\xf2\x04\xdb\x8d\x9e\x7f\x9e\xc2\x48\x2f\x64\x46\x0b\x28\x5c\x17\xb7\xf1\x49\x62\x13\x61\xbd\x5f\x41\xb2\x27\xf5\xdb\x99\x14\x92\xe6\xe8\xdd\x46\xe1\x9f\x33\x5f\xd4\xc2\x2b\x3b\x00\x91\x8b\xea\xc8\x0d\x26\xda\x41\x7b\x3e\x3b\xb5\x52\xcc\x47\x48\xd7\x9b\x97\x58\xcb\x23\xaa\xc9\x77\x5d\xc0\xa1\x1b\x65\x87\x47\x21\xf6\xcc\x35\xcd\xb8\x03\xc6\xe7\xe0\xd9\x00\x8f\xa3\x35\x99\x57\x15\xba\x1a\xdf\xfa\x65\x88\xa8\x78\x95\xc8\x8c\x85\x97\x1c\xc8\xee\xc4\xf9\x69\x76\x24\x66\x09\xdd\x72\x3b\x83\xf3\x56\x48\xfb\x6d\xe3\x75\x10\x4c\x15\x8a\xdc\x8f\x3f\x42\x6d\x45\x2f\xff\x13\xb8\x89\x9a\x25\x26\xe3\xe0\x68\x55\x8a\x8d\x37\x8f\x57\xac\xe5\x7d\x55\x0b\xc3\x4b\xe6\xa9\xa7\xc6\x6b\x3a\x91\xc2\x5f\x1f\xe9\x86\xe8\x3d\xc9\x46\x27\xe4\x07\x01\xe7\x55\xb0\x9c\x8c\x89\x90\xed\x12\x31\x31\x97\x2a\x03\x17\xc0\x5e\x37\x78\x46\x2b\x3a\xe3\x05\x8f\x11\xe6\xa9\x36\x38\xd4\x4d\x0a\xfa\x03\xb8\x95\x3c\x7f\x9e\x2b\x59\xe1\x4d\xec\x39\x21\xe2\x53\x00\xba\xb9\xc7\x21\xc5\xbf\xf3\x09\x75\x3a\xb2\x50\x54\x98\x96\x74\x60\x63\xe3\xfc\x3b\xea\x20\x29\x94\x00\x9a\xa7\xab\x40\x76\x9a\x5b\x99\x11\x2e\x5b\xf4\xb9\x3a\x34\x36\xf3\x33\x3f\xb8\x20\xf9\x98\x4c\xdf\x5f\x5f\xfc\x9f\xb5\x73\xd3\x5f\xb5\xc3\xe7\xb0\xb9\x8c\xad\x3c\x48\xb6\x6d\xae\x58\x29\xef\x86\x8d\xf3\xd5\x6f\x9c\xc6\x41\xb4\x77\x22\xc6\xab\x3a\x8c\xfd\x72\x11\x74\x8d\x94\x51\xba\xce\xb4\xe1\x2c\xea\xbe\x35\xc8\x49\xa5\x8a\x11\xfb\x15\x61\x38\x2d\x8a\x55\xe8\x23\x35\x12\x6b\x1c\x26\x29\xd4\x1d\xde\xae\x73\x5a\xe8\x2f\xf5\x8a\x8c\x71\xed\x54\x4a\x66\xef\x64\x2d\xd2\x30\x3b\x46\xec\xb8\xa6\x23\x24\x67\x42\x1a\xe7\x4d\x01\x5b\x42\xce\xe1\xb7\x04\x01\xd2\x01\x69\x73\x47\xcf\x89\x50\xb3\x6e\x02\xd5\xaa\x41\x92\x78\x3d\x1c\xed\x97\x5a\x33\xbd\x5d\xaf\x6a\xf1\xd2\xf3\x08\x4c\x81\x62\x34\x47\x48\x0b\x35\x4b\x64\x13\x2d\xa9\xbe\x65\x39\x7e\xf0\x85\xee\xcc\x08\x21\x6b\x27\xe4\xbd\x28\x56\x57\x52\x9a\xef\x9b\xc2\xa5\xfb\xde\xa5\x7f\x75\xa1\x81\xae\x43\x11\x7c\xc4\x14\xba\x3c\x86\x45\x04\x19\x15\x94\x5b\x8d\x15\x51\x76\x41\xfe\x5d\x25\x94\xaa\xc5\xa9\x7e\xad\x64\xdd\x5b\x9f\x4a\x69\xfb\xbd\xbe\x78\x05\x97\x50\xed\x88\xef\x84\x51\xab\x4a\x72\x61\xbc\xf7\x29\x61\x00\xe5\x07\x47\x31\x18\x4a\x99\x68\x36\x31\x42\xde\xd1\x15\xa1\x85\x96\x8d\x7b\x4b\x6c\x0b\x38\xfa\x68\xa6\xfd\xf5\x4c\x9a\xe5\x46\x18\x93\x8a\xfe\x61\x95\xcd\xf6\x46\x01\x7f\x5e\x0b\x13\xe1\x62\xa3\x59\x03\xe9\xbc\x95\x62\x19\xcb\x99\xc8\xbe\xd4\x13\xb1\x6f\x3a\x37\x38\x55\x97\x52\x58\xf1\xba\xef\x73\x75\xd1\xf8\x0a\xdd\x6a\x84\xa7\x08\xdc\xca\x2e\xa0\x47\x81\xfa\x10\x84\x6b\xad\x63\xf0\x98\x17\x73\x88\x40\xe2\xa6\xfb\x4b\x3d\x63\x85\x5d\x6c\x5e\x14\x76\x07\xf2\x9c\x1a\x0c\xce\xf3\x92\x2e\x18\xa1\xa6\x39\x84\x46\x12\x26\x74\xad\xdc\xbe\xe1\xfd\xa1\x8c\xb9\x64\xba\x29\x92\x4d\x35\xf9\xe1\xe2\x15\x79\x41\x8e\xed\xd8\x10\x47\x37\xa7\xbc\x00\x36\x45\x8f\x60\x0d\xf5\xf1\x39\xe4\x69\xc9\x18\xb4\xcf\x85\x93\x23\x44\x2a\xbc\x5a\x46\x44\x48\xa2\xeb\x6c\xe9\xe7\x80\x4b\xd1\x78\x67\x1d\xb5\x7e\x54\x06\xea\x20\x76\xd2\xdd\x87\x3f\x68\xd6\x1b\x38\x9a\xf2\x3a\xfc\xe1\x09\xaf\xc3\xd0\x5c\xb3\xc7\xbf\xbb\x60\x78\x56\x4b\x66\x68\x4e\x0d\x75\xd7\xa4\xff\xc2\xb0\x6b\x87\xcb\x32\xe2\xb2\xd4\xec\x2d\x17\xf5\x07\x44\x9d\x1d\x44\x08\xe2\xfa\x1c\x7a\x04\xc7\x0b\x16\x5a\x06\x31\x34\x1f\x2d\x48\x90\xb8\x70\xd1\x39\x46\xa3\x07\x2c\x60\xb8\x25\x3c\xf3\x97\x35\x84\xa8\xc8\x65\xb9\xd1\x49\xa0\x26\xeb\x9b\xac\x47\x3a\x99\x18\xc3\xc1\xf4\xcf\xbf\x77\x70\xa6\x60\x77\xac\x48\xe6\x67\x7f\x6b\xdf\x66\x27\xc7\xef\x5c\x78\x3d\x29\xe8\x8c\x15\x8e\x0f\x0d\x09\x2d\x13\x9e\xb0\x44\xfe\x68\x25\x13\xc2\x53\xae\x24\xa2\xaa\x68\x33\x11\xf6\xf5\x5f\xc4\x3c\x24\x05\x42\xdc\x38\xa4\x47\x3b\x0f\xe0\x8f\xfc\x12\xe6\xa1\x8e\x50\x10\xc9\xfa\x3c\x58\x6d\xb3\x3b\x0f\xa0\x7f\x1d\xfa\x3c\x68\x96\x65\xb2\xac\x0e\x04\xb5\x78\x83\x88\x74\xdb\xa3\xcf\x45\x28\x76\xbf\x4c\xa3\xa0\xc7\xae\x24\x01\x35\x78\x0f\xfa\xba\x04\xff\x3b\xb8\xce\x41\xda\xad\xdf\xf1\xae\xf5\x68\x74\x64\xd3\xa2\x7b\xe1\xbf\xe3\x8d\x37\x40\x22\x3b\xcf\x93\x43\x22\x03\xaa\x54\x0a\xee\xf9\x0e\x3c\xf1\x6b\x00\x46\x5a\x23\x00\xe6\x95\x89\x9c\x8b\x05\x04\x8f\x46\x2e\x8f\xf3\x8e\x79\xf1\x7c\x8b\x1e\xaf\x23\x90\x38\xbe\x43\x5e\xdc\xb4\xf8\x51\xa4\x50\x4d\x8a\xa3\xdc\x86\x9d\xc4\xef\x5c\xbe\xbf\x09\x09\x54\xa9\x58\x21\x39\x10\xfc\xc9\xde\xaf\xd3\x2f\x06\x5f\xb9\xbe\x8a\x8f\x0d\xaf\x8c\x7a\xdf\x76\x74\xe5\xd3\x9d\xd2\xcf\x43\x5c\xae\xe3\x2d\x93\x76\x61\x1d\x7c\xb9\xd9\x46\x82\x95\x8b\x3e\x02\xee\xea\x3c\x20\x07\xc8\x5f\xb1\x47\xde\xca\xce\xac\xe0\x30\x5c\x2c\x74\xe8\x04\xa1\x45\x2c\xf3\x0a\x3e\xdb\xbc\x20\xfe\x14\x34\x1c\xa2\x9b\xde\x80\x6e\xe1\xa9\x98\xd6\x3f\xe1\xc1\xf8\xb2\x3d\x11\x85\xb5\x28\xbe\x70\x3f\xc4\xa2\xd4\xf4\x4c\xd9\x19\x34\x9c\x16\xd7\x15\xcb\x0e\xe5\xb6\x78\xfd\xee\xfa\xb4\xdb\x33\xd0\x85\x1d\x63\x32\x83\xdf\x13\x9a\x97\x5c\x6b\x08\xf8\xb0\xd9\x52\xca\xdb\xa8\x26\x8f\x3d\x8b\xde\x82\x9b\x65\x3d\x9b\x64\xb2\x0c\x08\xf5\xc6\x9a\x2f\xf4\x73\x27\x51\xc6\x76\xe2\x4e\x08\x17\x45\x93\xb5\x0b\xde\x42\x61\xb4\x8b\x20\x44\x0f\x9e\x64\xcd\xe8\x61\xeb\x41\xae\x48\x03\x93\xde\x9c\x1e\xa0\xb5\x86\xcd\xbb\x77\xad\x63\x73\x57\xc5\x95\x84\x59\xdb\x59\x0f\x8c\x3d\xa4\x68\x76\x51\x9c\xad\xf3\x88\xc6\xeb\xde\x27\xc9\x29\xfd\x19\xd3\x51\x68\xd4\x94\x67\xee\x4d\xdb\xa5\x96\xc0\x0c\x58\x34\xe9\x83\x59\xe7\x10\xde\x3e\x82\xb2\xba\xee\x4f\x8f\x52\xb1\x8a\x9f\x16\x85\x5d\x48\x6a\xaf\x89\x23\x1d\x22\x2d\xc1\x34\x59\xd2\x3b\x14\x05\xda\xae\x38\x9b\xcf\x59\x06\xc6\x42\x38\x0a\xb8\x48\xe2\x84\x02\xb2\x81\x85\xa5\x4a\x8c\xc4\xb6\x29\x29\xf9\x07\xdb\xc3\xb0\xc5\x10\x0f\x2a\x72\x08\xfc\x6f\xff\x75\x44\x95\x41\x02\xe0\x83\x86\x2c\x73\x64\x57\x28\x6c\xc4\x27\x2a\x1b\x7b\x6d\xd9\x5f\x5c\x32\x63\x0d\x35\x9c\xb7\x30\xfa\x60\x0d\x2b\x55\x27\x38\x0c\x31\x91\x61\x12\x46\x87\x93\x4a\x8a\xc8\xf3\x00\x91\x62\xd7\x27\xab\x83\x78\xe5\xed\xa9\x22\xc7\x64\x4b\x2a\xcd\x93\x45\x90\xc9\xe7\x47\x91\x1f\x31\x56\x45\x0e\x25\x5e\x15\x29\xf5\x5d\x89\x7d\x28\xfa\x19\xcd\x3e\x02\x6f\xd9\xa1\x84\x52\x8f\xf6\xf6\x4c\xc2\xc1\x3e\xf4\xd7\x44\x3b\x53\x75\xfe\x81\x65\x6b\xe5\xfa\xcb\x12\xf8\xbe\x24\x34\x52\x9b\xa6\xa8\x78\xf4\xad\x75\x20\x3a\xbd\x1b\xe1\xa1\x08\xd1\x33\x37\xe1\xdc\xab\xc9\xf8\xa3\x55\x9c\xbb\x8b\xa0\xbd\xb7\x3d\xa0\xf5\xb6\x3f\xda\x9b\x8b\x8b\x85\x23\x16\x91\xaa\x61\xdb\x8d\xea\x96\xef\x07\x54\x93\x93\xd2\x90\xe3\xa3\xe7\x47\x27\x1b\x7b\xe1\x48\x87\x78\x68\x4c\xa3\x6c\x07\xa4\x79\x59\x15\x2b\x18\xc3\x11\x16\x90\x8b\xe4\x1f\xf3\xc8\xba\xa6\x40\x8b\x5e\xb2\xa2\x18\x11\x6d\xef\x69\xea\xb9\xb1\xf1\x53\xfb\x25\xa3\xea\x0c\xed\xf9\xe3\xa3\x5f\x8f\x46\x84\x99\xec\x84\xdc\x4b\x71\x64\xd0\x33\x4b\x6e\x40\xd9\x8d\xea\x53\xd3\x89\x95\xac\xa1\xc6\x39\x2e\x5b\x43\xa7\x9e\x51\xab\xa7\xd5\xa8\x4c\x60\xa6\x3e\x2b\x22\x6a\x76\xdb\xe7\xfc\x03\x37\x56\x66\x9a\x1a\xec\xa9\x17\xa8\xd2\x30\x28\xd0\x46\xad\xe9\x7d\xc7\x9e\x2f\x19\x2d\xcc\x72\xd5\xa8\x59\x58\x3e\x5a\x93\x5a\xb8\xdf\xc4\x0b\xfb\x03\xc8\x35\x3b\xdc\xac\x2f\x57\xc5\xfe\x66\xa9\x98\x5e\xca\x62\xef\xb9\x5f\xbe\xb4\x71\x26\x85\xb6\x32\xc5\xda\x02\xae\x8f\xba\x49\xbb\x71\xe5\x95\x91\xae\x59\xc2\x29\x53\x0c\x51\xab\x76\x6b\x41\x31\xe6\x25\xbd\xb3\xf2\x46\xd7\x59\xc6\x58\x1e\xa3\x43\x85\xca\xdb\xef\x53\x16\x5f\xde\x7f\x9d\x63\xfb\x2c\x54\x95\xe6\x96\x7e\x7d\x35\x3d\xeb\xdc\xd2\xf0\xc1\x1b\x38\xc6\x67\x4b\x96\xdd\x5e\xc5\xd5\x1b\x3a\x90\x18\x68\x25\xd5\x3e\x15\x03\xdb\x7c\x32\xad\x60\x2a\x95\x21\xa2\x29\x67\x6e\xcf\xd6\x02\x56\x91\xa9\x3b\x9e\xb1\x89\x2f\x75\xee\xa3\x88\xbe\x3e\x16\x15\x0b\x46\x5e\xda\x03\xf1\xc7\x6f\xbf\xfd\xfd\xb7\xf1\x32\x3a\x9e\x07\x31\x0d\x07\xa2\x1b\xf8\xa1\xa8\x5d\xd7\xd8\x9d\x6d\x5e\x31\xd7\x53\xbb\x06\x55\x41\xb3\x66\x6d\x16\xdb\x0f\x5d\x9c\xfb\x44\x33\x46\xb6\xf8\x55\xad\xe8\xc0\xff\xcc\x0a\x39\x7b\x5e\x52\x6d\x98\x7a\x9e\xcb\xcc\x5d\xeb\x63\x60\x0b\xe5\x62\x31\x29\xf3\x93\x88\x02\x98\xc4\x65\x4d\x2c\xb9\xf6\x6e\x9c\xb5\x80\x88\x8f\x92\x35\xa5\x19\xb8\x6e\x42\x79\xb3\x15\x4c\xca\xde\x7d\x85\xc4\xf7\xf2\x3b\xf2\xec\x59\xaf\xb7\xd8\x25\x78\xcd\xd2\xa4\xcc\xbc\xb9\xb9\x99\xbe\x66\x26\x14\xd8\x02\x3e\x24\xaf\xcf\x6f\x9a\x82\x78\x76\x77\x61\xf6\xc5\x20\xb5\x63\xa4\xf6\x52\xc6\x55\x44\x4c\xed\x20\x46\x51\x62\xa4\x55\x9f\x04\xcb\xec\x42\x8f\x3a\xb5\x97\x3c\x60\xea\x62\x8a\xa5\x29\xac\xca\x45\x67\xc5\x8a\xdc\x53\x4c\x83\xee\xc7\x08\xdb\x3e\xcf\x6c\x37\x9e\x59\xa9\x65\x77\xf5\x1b\x46\x73\xa6\x34\x58\x43\x8c\xee\x3f\xf8\x11\xf4\x29\xd9\xb2\x9d\xd5\xda\xc8\x92\x2c\xdd\x50\x71\x0e\xdb\x92\x93\xa8\x1b\xe1\x11\x04\x67\x90\x26\x8a\x55\x68\x2d\xb9\xbf\xf9\x2a\x6c\xa1\x0d\x29\x84\xf3\x1c\x14\xf3\xa0\x24\x0b\xa7\xca\x29\xfa\x50\x09\x9a\x3b\x19\x05\x16\x40\x9c\x95\x9e\xa4\x28\x00\x49\x54\x18\x80\xc4\xd7\xf9\xf5\x2f\x89\x8f\x96\xa4\x29\x31\x40\x92\x54\x0d\x26\xc9\x09\xce\x89\x8b\x09\xb8\xcd\x85\x48\x01\xdb\xd1\x58\x2a\x33\xe2\x4b\x75\x7b\xe4\x45\x46\x85\x14\x3c\xa3\x05\xff\x17\xcb\x49\x5d\x49\x41\x64\x6d\xaa\xda\x80\x2b\x28\xa3\x9a\x8d\xef\xa8\xe2\x56\xa0\x62\x6d\xf5\x06\xb2\x21\xec\x69\x37\x52\x82\x9f\xa4\x89\x8e\x61\x8f\xe3\xbb\x99\x48\x9b\x21\x9e\xbf\x3e\xf1\x0a\x6f\x2c\x4e\xfc\x8e\x26\x07\xed\x83\x21\x58\xe5\x6e\x99\xce\xac\xa3\x66\x09\x10\xa4\x0c\x22\x89\x0e\xc1\x06\x82\xd3\x9a\x0d\x07\x90\x21\x90\xd4\x8a\x8d\x14\x09\x10\x18\x94\x6a\xcd\x0e\xb6\x3d\xdc\x9c\xc3\x44\x41\xf1\xc7\x37\xab\xc3\x0a\xe9\x33\x66\x75\xfb\x8b\xd3\xcb\xd3\x5f\xae\x7f\x3c\xfb\xe5\xf2\xf4\xdd\x79\xcc\xab\xa3\xab\x1b\xa6\xac\x6f\x98\xac\xc2\xe1\x23\xd5\x7f\xb5\x8f\xce\x96\xec\x70\xe2\xe1\xd7\xd0\x9b\x90\xc9\xc8\xd9\x00\x5c\x2c\xbc\xe6\x1f\x47\x6d\x45\xd6\x9c\xa6\x56\xf0\xec\x55\xe2\x70\xc1\x0d\xa7\xc5\x2b\x56\xd0\xd5\x35\xcb\xa4\xc8\xf7\x0e\x23\xbd\x6c\x84\x8d\xc6\x0e\x39\xb7\x75\x17\x7c\xb0\xa4\x9a\xf8\x4a\x81\x33\x36\x97\x8a\x41\xd4\x44\x58\x89\x54\xb5\xf1\x63\x1c\x9f\x79\xc2\x12\xdd\xf7\x52\xdd\x16\x92\xe6\xfa\x79\x25\xf1\x3f\xe3\x82\xcf\x59\xb6\xca\x0a\xf6\x9b\xa6\xff\xe3\x28\x35\xfd\x30\xdc\xe3\x15\x53\x1c\xa0\x0b\x87\xb0\x6b\xde\xc8\x7b\x22\xe7\x86\x09\x72\xcc\x85\xdf\x39\x27\x81\x97\xa6\x0d\x8f\xc4\xd3\x3e\x19\x49\x5e\xbe\xf0\x8d\x7c\x7d\x71\x0f\x88\x0c\x69\x7d\xd0\x91\x2f\xd7\xc7\x4f\x87\xbe\xdc\x17\xe7\x75\xd1\x0d\x7f\x61\x48\x2c\x4d\xec\xeb\xe5\xa4\x49\xa8\x79\x09\xfd\x69\x44\x11\x15\xb9\xc7\xc6\x7c\x7d\xfb\xc4\x64\xd5\xb5\xcc\x6e\x13\xb9\x5d\x6f\xce\xa6\xf8\xb6\x35\x3c\x0b\xde\xc0\x56\xcb\x94\x84\xda\x6f\x81\x02\x3a\x38\x5d\x0f\xc6\xe9\x7a\xd4\x96\x7d\xda\xd5\x81\x7a\x34\x58\x5b\xed\xe3\x15\x1f\xd5\x2d\x9b\x30\x58\x5b\x0f\x3c\x83\xb5\xb5\xc3\x83\x68\x77\xc8\x1c\x7d\xad\x68\xc6\xa6\x87\xa4\xbc\x79\x01\x42\xf2\x5a\xb9\x5a\x54\x8d\x0e\xd7\x88\x0b\xc1\x58\x8e\xf2\xc3\x0d\x85\x91\x85\x1d\xc9\xbc\x2e\x8a\x15\xfa\x10\x51\x05\x70\xa0\x98\x38\xde\x59\x78\xb5\x53\x71\x7d\x90\x79\x5b\xef\x5a\xdb\xa4\x6a\x18\x94\x7d\xa9\x01\x77\x9c\x6c\xe7\xa1\x52\x32\x13\xfd\xdd\xe9\x34\x5c\x41\xa2\xf9\xc2\x4e\x97\x2b\xec\x4a\x90\xed\xc7\xd7\xeb\x6a\x3b\x62\x5b\x9d\x4b\x95\xf1\x59\xb1\x22\x4b\x5a\x58\x63\xe9\x9e\x9b\x25\xa1\xe4\x96\x17\x85\x7b\x4d\xff\x89\xba\xf6\xe5\xd8\x51\xa3\x29\xa4\x58\xc0\x64\x50\x07\x1e\xff\x50\xb1\xcc\xb6\x99\x15\x8c\x8a\xba\xc2\x7e\x5a\xfd\x68\x25\xeb\x04\xf8\x71\x1f\xf8\x6e\xf4\x29\xc1\x1d\x4f\x02\x56\x7b\xfa\xe8\x9e\xef\x66\x01\x92\xf7\x66\xc9\xd4\x3d\xd7\x0c\xab\x4f\xf5\xee\x13\xf6\xa5\x5b\x7b\x0a\x3f\x6b\xb8\x1e\x5c\x8a\x93\xdd\x16\x90\x73\xd7\xbb\xad\x1f\xe1\xbd\x5e\xb4\x0a\x29\xc6\x82\x2d\x30\xa3\xdc\x09\x34\x44\x74\x62\xfb\x88\x1f\x6c\xf2\x93\xb5\x91\x15\xe1\x65\xc9\x72\x6b\x1f\x17\x2b\x72\xc7\x69\xef\x9e\x40\xf6\x7a\xbb\xa3\xc8\xb1\x90\x44\x56\xf6\xea\xaa\x05\x37\x2b\x88\xe8\x2d\x6b\x43\x72\x79\x2f\x22\x12\x43\x6e\x1c\xcc\x81\x92\x19\x33\xd4\xf9\xc0\xed\x21\x70\x2a\x99\x26\x4c\xd0\x59\x61\xcf\x1e\x60\xc8\x6f\xb6\x6e\x00\x32\x67\xd4\xd4\x8a\x91\x05\x35\x11\x52\x62\x8b\x36\x8f\xeb\xf9\xf1\x6d\xc7\xb5\x8b\xd7\x45\x12\xc6\x1e\x06\x05\x9b\x3d\xd1\xb2\x36\x07\x72\x8f\x3c\xe4\x3a\xc2\x5c\xfc\xc0\x48\xe4\x25\xd3\x44\xd6\x89\x48\xea\x5f\xba\xe6\x52\x5a\x78\x83\xdf\x69\xeb\xa3\x4d\xce\x7b\x95\x2a\x4d\xb1\xc5\x1e\x60\x19\x77\x09\x83\x01\xd1\xde\xac\x9e\xcf\x99\x82\x9b\x0e\x3a\xbc\x01\xbb\x6f\x8a\xff\xf8\x3b\xac\x9f\xf3\xd6\x01\xbe\x98\x19\x01\xc9\xb9\xcb\x7a\x7f\xa0\x49\xc7\x06\x08\xb5\x3d\x15\xd3\x40\x5a\x2d\xc8\xf9\xfb\xef\xfb\x6d\xd1\x14\x14\xe8\x71\xb9\x75\x30\xce\xf7\xa2\x1f\x26\x31\xed\x7e\xd8\x46\x4f\xe1\xb6\x45\x56\x48\xed\xf2\x38\x61\x5d\xb2\x25\x15\x82\x79\x67\x14\x37\xe0\xc9\x9e\x31\x26\x88\xac\x18\x82\xf2\x7a\x75\x86\x12\xcd\xc5\xa2\x60\x84\x1a\x43\xb3\xe5\xc4\xf6\x4e\xf8\xbd\xd0\x26\x4c\xba\x4f\xb4\x51\x8c\x96\xb8\x27\x14\x2b\x29\xc7\xe6\x09\xcd\x94\xd4\x9a\x94\x75\x61\x78\xd5\xbc\xac\x9f\x17\x91\x41\xea\xba\xc6\xfc\x39\xbf\x56\x90\x56\xd2\x66\x66\x8e\xda\x1e\xba\xe1\xcb\xb0\xc2\x09\xb8\xce\x46\xf6\xb7\xac\xac\xcc\x8a\xd8\xa9\x2d\x7a\xe7\xc6\xcc\xb9\xd2\x86\x64\x05\x67\xc2\xb8\x91\x21\x37\x1a\xf4\x61\xe4\xd5\x69\xe1\x66\x44\xbb\x29\x11\x39\x18\xdf\x95\xd1\x04\x32\x10\x9b\x4e\xf8\x57\xe5\x5c\x3b\x5f\x87\x1e\xf5\x5b\x3b\x5f\xce\x02\x37\x8e\x9f\x11\xd8\x3a\x5e\xc1\xc1\x1e\xb9\x8f\x82\x2e\x04\xc5\x79\xed\xb1\xc6\x90\x48\x9c\x5c\x81\x22\xc4\xfe\x5c\x8f\x3a\xc9\xd1\xad\x6d\x01\xa9\x30\x1b\x52\x07\x36\x94\x60\x77\xf6\x1c\xb0\x8c\x59\x55\x94\x26\x14\x32\x4f\x2e\x63\x0c\x55\x0b\x66\xce\xfc\xf8\xfb\x66\xef\xa6\x90\x36\x61\x15\xf3\xd0\x41\xd4\x2e\x0e\xac\xc3\x54\xe6\xc0\x26\xd1\x32\x7e\x6c\x2b\xad\x8e\xe3\xea\x69\x7b\xdd\x3c\x50\xaf\xdd\x5b\x54\x98\xe1\xd5\x74\x54\x57\x34\x63\x9a\x1c\x5f\x4c\xcf\x46\x64\x7a\xf1\xca\xa5\x71\xc9\xf9\x3a\xbb\x5e\xdf\x69\x71\x97\x20\x9e\xdd\x87\x8a\xc9\x37\x95\x62\x82\x2e\x05\x34\x5b\xae\xbf\xd3\xc6\x28\xeb\x3d\x33\x9b\x37\x01\x58\x68\xbc\xac\x0a\xa8\xd9\x48\x74\x0d\x96\x91\x0b\x5c\xd8\xad\x8d\xf6\x88\x3b\xb4\xac\x25\x38\x72\x64\xf4\x3d\x83\x38\xd8\x4a\x33\x5c\xb7\xe6\x10\xcb\xf6\x13\xe5\xf4\x00\x50\x98\x8d\xfb\x55\xc3\x11\x03\xb9\x66\x0e\x2a\xde\xff\x76\xef\xe9\x0e\x0b\x8c\xa8\x77\x4c\x6b\xba\x60\xd3\x9e\x38\xa0\x14\x67\xaf\xf5\x70\x03\x80\xa8\x95\xd7\x4b\x86\x54\x58\x46\x06\x9f\x84\xd9\x95\xa1\xd7\xa6\xc4\x81\xf4\xea\x81\x3f\x5b\xf7\x8a\x1b\xc3\xe0\x7a\x80\xba\x4b\xb0\x75\xd7\xe9\x3d\xbb\x59\x9d\xbd\xda\x73\x93\x1e\xb6\x67\xf5\x7e\x91\x63\x7e\xe4\x8c\x91\x99\xe2\x6c\x4e\xe6\x1c\x12\x36\x21\x95\x71\x84\x75\x0a\x28\x00\xe6\xa9\xd6\x4c\xc1\xb0\x9d\x3f\xce\x0f\xbf\x5f\x7f\xfe\xea\xc6\x6f\x54\x2d\x32\x1a\x14\xd4\x04\xf6\x31\x3e\x27\x0b\x48\x9f\x74\xde\xa7\x3f\xbc\xf8\xcf\x3f\x92\xd9\xca\x1a\x4a\x70\x26\x8d\x34\xb4\xf0\x1d\x20\x05\x13\x0b\xbb\x8a\xa0\xeb\xf4\xbb\xb0\x3b\x0c\x56\xcd\xe2\x14\xbc\xe4\x06\x27\xe8\xe5\x37\xb7\xb3\xa8\x3b\x0f\x14\x93\xe7\x39\xbb\x7b\x1e\x6c\xa1\x71\x21\x17\xfd\xde\x7a\xd6\x10\x3e\xd5\x55\xde\x17\x10\x91\xfa\x44\xcb\x82\x67\xab\xbd\xdd\xa7\xce\x15\x46\x96\xf2\x1e\xbd\xa8\x9b\x47\x35\x20\x83\xa9\x64\x55\x17\x30\x71\xe4\xfb\x86\xc1\xaf\xd6\x6c\x9d\x1c\x29\xd6\x3b\x1f\x48\x3b\x40\x2f\xb8\x66\xd7\xae\x7a\x97\x3b\xec\xbb\x29\x1d\x35\x85\x0b\x76\x37\x95\x4a\x7a\xbb\xc1\xbf\xa7\x45\x31\xa3\xd9\xed\x8d\x7c\x2b\x17\xfa\xbd\x38\x57\x4a\xaa\xee\x98\x0b\x6a\x95\xe9\x65\x2d\x6e\xa1\xe6\x6d\x4b\x57\x2b\x17\x0e\xcc\x0b\xcc\x92\xdd\x89\xed\xd5\x19\x3f\x4a\x24\x10\xf5\xb6\x80\x77\x7e\xb7\x2d\xb3\x0f\xbc\xf5\x70\x0b\xc2\x6c\x9f\xfb\x6b\x38\xe1\x38\x74\x78\xb4\xbf\x79\xf1\x87\x3f\xa1\x70\x21\x52\x91\x3f\xbd\x80\x5c\x7f\x3d\xc2\x0b\x00\x54\x5f\x6b\xe3\x94\xb4\x28\xfa\xea\x34\xa1\x08\xf8\xbe\x77\x29\xe9\x03\x38\xf2\x66\x6f\xa7\xfb\xb3\x7d\x35\x37\x37\x7f\x03\x4d\x8c\x1b\xcd\x8a\xf9\x08\xf9\x60\x1a\x7f\xf2\x11\x98\x35\x47\xee\xca\xeb\xcf\x25\xb4\x7f\x6f\xc9\x9d\x2c\xea\x92\xbd\x62\x77\x3c\xeb\x87\x1c\xe8\xac\x4a\xe7\x6d\x3e\x3e\x56\x70\x0d\xba\xe4\xac\x90\xd9\x2d\xc9\xdd\x2f\x83\x1c\x95\xf5\x1a\xd8\xfd\x67\xa1\x6f\xb6\x4e\x44\x96\xce\x83\xe3\xef\xe4\xe7\x94\xb4\xaa\xac\x1e\x0d\xc4\x5e\x8a\xde\x77\x26\x03\x44\x13\xf0\xa7\x46\x1a\x3d\xd1\x28\x96\x58\x0c\xcb\xd8\x8d\xc8\x5e\x53\xbd\x5f\xd1\x3b\xa9\x27\x1e\x02\xd3\xf6\xbe\x3f\x80\xa0\xb3\x21\xda\x17\xfa\xd3\x50\xc1\xbf\x91\xe8\x64\xc3\x54\x6f\x2a\xaa\x35\x1b\x03\x35\x48\xbb\x7d\xe0\x96\xe9\x1f\x37\x48\x80\x42\x88\x4b\x4e\xea\xcc\x8b\x68\xd0\x1f\x25\x35\xce\x3e\xf2\xde\x0b\x4a\x2a\xa6\x34\xd7\x56\x75\xfa\x11\x0e\xd4\x59\x41\x79\x19\xc4\xcd\xf7\x35\x09\x9b\xa9\x2c\x25\xad\xc6\xb7\x6c\xd5\x73\xc3\x45\x1e\x97\x87\x32\x6b\x4a\x5a\xf5\xbc\x07\xa0\xa4\x6f\xfc\x35\xd0\xf3\x72\x9e\xca\xdc\xf5\x03\xae\x07\x2c\x20\xfc\x29\x33\x96\x5c\xd7\x33\x38\x53\xf0\xf5\xc7\xa5\x07\x4b\xaa\x3c\xed\xfb\xae\xfa\xb1\x5d\xf1\xee\x55\x65\x3f\x69\xee\x2a\xfc\xd6\xd7\x74\x43\xc1\xf8\xbe\xd4\x0b\xaa\xe9\x7c\x22\x39\x1c\x85\x4d\x84\x6b\xcd\xed\x8c\xee\x3d\xd6\xf1\x84\xe1\x91\x0e\x6c\x66\xe7\xa1\x9a\x60\xbd\x81\x88\x0e\xd8\xa3\xe8\x1a\x25\x47\xdf\x1d\xed\xf5\x72\xc4\x95\x51\xb2\xa2\x0b\x30\x69\x0f\x61\x81\xd6\xfb\x14\xd2\xdb\x2e\xe5\x7d\x28\x32\x2b\xf7\x2d\x2b\x31\x3d\x47\xfa\x52\x46\xad\x0e\x62\x7d\xfd\x8e\x70\x66\x39\x56\x89\xb8\xa7\x2b\x42\x95\xac\x45\x14\x71\x01\x84\x32\x9b\x50\xf7\xbb\xb5\xc1\x5e\x4a\xc1\x3c\xac\x26\xa6\x95\x9b\x8e\xeb\x1b\x10\x46\x5c\x90\x97\x93\x97\x2f\xa2\xfb\x7e\xc5\xb2\x5a\x69\x7e\xc7\xae\x5c\xf9\xf4\x20\x0c\x7a\x31\x9f\x4a\xad\xf9\xac\x80\x54\x4b\x23\xc9\xb9\xa0\xb3\x82\xe5\x9b\x03\x6d\xa0\x5e\x30\x62\xa9\x42\x22\xd4\x88\x1e\x1e\xe3\x09\x0e\x21\xda\xb6\x81\x08\x9c\xd6\x61\xa9\xa0\xb0\xae\x6b\x2a\xe8\x65\xa3\x82\xe2\xbd\xb7\xd7\xb1\xfa\x9a\xfa\x87\x20\x49\xde\xb9\xa0\x42\x5b\x34\x9f\xfb\xa2\xcc\xf0\xd1\xbd\xe2\xc6\x1d\xee\x7b\xae\x19\x39\x06\x77\xc6\xda\x66\x8c\xe2\x7e\x0e\x9d\x5f\x91\xc5\xf5\x53\x70\x37\xab\xf5\xa3\x7b\x08\xab\xb4\x29\x4f\xda\x9c\x99\x7b\xe7\xf9\x6a\x57\xd0\x49\xff\xf6\x5e\x5e\x52\x91\x17\x51\x32\xa3\x99\x95\x62\x15\xc5\x5e\x75\x31\x27\xa1\x48\x74\x88\x83\x20\x08\xb9\xa4\x9a\x08\x49\x4a\x46\x01\x52\x6d\x6f\x17\x2f\x05\x3b\x34\xd0\xe9\xfa\x80\x9b\x1d\xaf\xb1\xf0\x42\x70\xe2\xfa\x15\xd7\x4e\x3c\x5b\x39\xe2\x4c\x17\x04\x62\x95\x34\x8f\x21\x63\x08\xe6\xb4\x5d\xbc\x49\x0b\x73\x5e\xef\x49\x7b\x71\xac\xf5\xe5\x31\xfa\x31\x72\xd5\xcd\x6d\xf3\x18\x59\xde\xe2\xcf\x6b\x61\x6d\x51\xf8\x13\x7c\xd6\x87\xdb\x5c\x8b\x1b\x63\xdd\xde\xe3\xa6\xc3\x11\x7d\xf8\xf4\x50\x47\x81\x2c\xf4\xa8\x6e\x04\xc1\xb8\xf2\x2a\x2e\x47\x39\x8e\x24\xdc\x47\x33\x1a\x3f\xd1\x82\x09\xa6\xa8\x0b\x48\x78\x50\xb7\x0b\xe9\x53\x2d\x45\xec\x81\xf8\xc4\x86\xb3\xf2\xfe\xd3\x6a\x0a\xfe\x59\x44\x47\x40\xcf\x39\x96\x6a\xed\xb4\xbb\x50\xcb\x36\x8d\x25\xe5\xa8\xd7\xc8\xf4\x70\xf3\x07\x2c\xbd\x76\x51\xfe\x59\xf3\x3b\x5a\x30\xa4\xc7\xf7\xa2\x61\xaf\xca\x84\xae\x67\x87\x6a\x36\x3a\xfb\x10\xcc\x8e\xed\x68\x89\x07\x2d\xc8\x44\xfa\xc4\xb3\x67\xe4\x18\xdb\x38\x42\x5a\xec\xfd\x2a\xb9\x6e\xad\xce\x3f\x54\x11\x45\x61\xd3\xad\xd7\xf9\x87\x8a\x02\xc0\xa3\x3a\x88\x85\xfb\x6f\xb6\xa4\x77\x0c\x58\xc8\x79\x41\x55\x01\x69\x24\xd7\x38\x65\x64\x56\x1b\xc2\xc4\x1d\x57\x52\x00\xa8\x0a\xe8\xa2\xac\x64\x52\x6c\xce\x14\x13\x19\xd3\xe4\xb7\xc7\x3f\x9e\x5e\x41\x9a\xe1\x09\x98\xbe\xcc\x8f\xaf\xd6\x0e\x05\xd5\x19\x43\xf0\xba\x43\xdc\x6f\xc4\x8f\xdd\x6e\x17\xd0\x4f\xfc\x5c\xd8\xb1\x95\xb5\xa9\x69\x01\x64\xed\x59\x51\xdb\xbb\x70\x6f\x3b\x3b\xbd\xf3\x3c\xc6\x93\x97\xd2\x77\xee\xa8\xfa\x5f\xf1\x5e\xc7\x35\xc5\x41\x3d\x0b\xf6\xeb\x46\xe1\x80\x38\x00\x65\x97\x36\x76\x43\xd1\x39\xd2\x0d\x95\x6c\x98\x39\xe7\xee\xe2\x7e\xb8\x0e\xbe\x58\x1a\x47\xd7\xb0\x86\xc3\x0c\x60\xcd\x65\x6f\xcc\xd8\x7e\x01\x10\xe9\x8e\x41\x0f\x47\x74\x9a\x5d\xbf\x94\xda\x9c\x16\x9c\xea\x5d\xfd\xd8\x71\x5b\xfd\x4d\xdb\x2c\x64\xfb\x09\x57\xd5\x91\x16\x0d\xc4\xc0\xf6\x0c\x61\x4e\x17\x53\x87\x45\xf7\xbb\x92\x8b\xff\x8b\x59\xa7\x4d\x40\x09\xb3\x41\xe1\x4f\x76\xec\x09\x22\x8e\xe6\xa4\x67\xbd\xa1\xbe\xf1\x9f\x5e\x91\x9f\x58\xf1\xd2\xcc\x3a\x59\xca\xc2\xe5\x5d\x7b\x34\xc3\x8c\x99\x7b\xc6\x04\xb9\x98\xc2\x9c\xdb\xa9\x44\x5e\xc6\xed\x33\xef\x94\x63\x61\xd4\xca\x1d\xe8\x9d\x7b\x13\xac\x19\xac\xc2\xae\x47\x37\x22\xfe\xd4\x3f\xf2\x34\x26\x7c\xd7\x4b\x25\x26\x52\xd4\x2c\x43\xf4\x6d\xf4\xa6\x59\x50\xcf\xa6\x43\x67\xf2\x8e\xc1\x7a\xe7\xb9\xea\x99\xa5\xbd\xb7\xf0\x67\x72\x05\x26\x8a\xc8\x92\x57\xd1\xeb\xd3\xae\x83\x87\x92\x40\x79\x66\x10\x4f\x70\xcc\x9e\x1c\xda\xd7\x9f\xb2\x3d\xe5\xbd\xb8\xe3\x71\x4b\x77\x2b\x5e\x4c\xcf\x9e\xf2\x46\xfc\xc1\x79\x97\x6c\xd3\x47\x9a\xf0\x2a\x6b\xf3\x3a\x76\x5d\xfa\x36\x97\x21\xa0\x33\xeb\xe1\x68\xef\xeb\x5c\x5f\xb6\x05\x1b\x9f\x5a\xa9\x20\x02\xdb\xb5\x57\x9a\xa3\x15\x77\xc0\x11\xf0\xfc\x54\x32\x9f\xac\x4f\xb5\xfb\x8b\xfe\xd3\x0d\xf1\x3f\x34\x38\xc3\x52\x95\x2b\x59\x7b\x6b\x19\x95\x8b\x15\x30\xfd\x68\x28\x85\xb5\x64\xc0\x8c\x99\xd7\x05\x82\x89\xe9\x3d\xdd\x1d\xc8\x0d\x0d\xff\x23\x98\xed\x7f\xb4\xde\xed\xb6\xa8\x20\x7c\x61\x2a\x95\xf9\x07\x3a\xbe\xb4\xbd\xb0\x21\x71\x08\x32\x7f\x38\x56\xdf\x0a\xa2\x67\xff\x68\x54\x73\xf8\xab\x5d\x13\x1e\xad\xfa\x10\xb8\xf2\x3e\xb3\x7d\x6b\xe1\x3a\x79\x83\x2e\xcf\xad\x7d\xd9\x75\x86\xf6\xb7\xff\xa7\x17\xaf\xf6\x28\x3e\x2a\x9e\x7f\xd9\xe2\xe3\x07\xbd\x73\xf5\x81\xa4\x13\x08\x45\x4a\xd3\xce\x60\x1f\x68\xb9\xab\x4b\xea\xfe\x1a\x88\xc3\xa4\x21\x95\x62\x9a\x09\x33\xea\x86\x23\xba\x69\x99\xa0\x3d\x74\x47\x31\xb2\x3f\xcf\xeb\x62\x57\x0b\x49\xaa\x80\x79\xa8\xa1\x69\xa2\x0d\xc9\x0a\x84\x62\xe8\x1d\xe5\x05\xb8\xe7\x02\x1a\xdd\x8d\x0e\xb8\xec\xb1\x1d\x7b\x50\x48\x9a\x43\x68\x90\xdc\xda\xab\xbd\x20\xa5\xb4\x82\x13\xd3\x40\xce\x4e\xa7\xbf\x5c\xff\xed\xfa\x97\x77\xef\x5f\xfd\xf0\x76\x67\xb6\x31\x4c\xa1\x67\xed\x16\x1f\x11\x4a\x04\xbb\x87\x9e\x0b\x30\x4e\x33\x17\x0f\x68\x58\x28\xed\x1d\x72\xed\x92\x29\x31\x36\x8e\xd0\x94\x79\x5d\xd8\x2f\xed\xd8\x83\x92\x1b\xbe\xa0\xf0\xb2\xd6\x25\x32\x53\x8c\xde\xca\xda\x90\xbb\xba\x10\x4c\xd1\x19\x2f\xb8\xb5\x20\x08\xbb\x63\x02\xf1\x90\xf6\x0f\x6c\x27\xc3\x62\xbe\x7c\xd7\xc6\xc3\x5a\xcf\xae\x8a\xa4\x9d\x54\xdb\x32\xcd\x9c\xbb\xd1\xb1\x69\xc2\x2f\x2b\xc5\xef\x78\xc1\x16\xac\xa1\xa9\xdb\x9d\x2d\x39\x46\x2c\xec\x8e\x19\x89\x93\x0a\xd7\x4d\xcc\xdd\x8f\x35\xcc\xcb\x9e\xee\x0c\x5f\xde\xee\x89\x6b\x2d\x61\x78\xbb\x3f\xcd\x6e\x5b\x52\x82\xf0\xd8\xb1\xaf\xe9\x04\xd4\x33\x7d\xe6\x7c\x67\x43\xc0\x77\xe9\xbd\x23\xbb\x7a\x6a\x6d\x2e\x6c\xbb\x5b\xac\xc9\x57\xef\x6c\x78\xb8\xc2\xe3\x19\x4e\x26\xd5\xa4\x62\x0a\x78\x0a\x42\x5e\xae\x5d\xe5\x44\x80\x1c\x93\x5d\x30\xc6\xb6\x36\x45\xde\x64\x76\x13\x0a\x65\xdd\x09\x37\x9a\xbc\xba\xbc\x26\x8a\x65\x52\xe5\x3b\x1b\xdb\x7f\x45\x01\xbc\x25\x64\x4b\x81\x16\x0c\x13\xe6\x1c\x87\xe0\xce\x46\xd6\xc5\x66\x9d\x69\x98\xd8\x96\xdb\x4c\xfb\x7a\x3d\xff\xf0\xa3\xfc\x07\x0c\xf3\x1f\xba\x9e\xe5\xb2\xa4\x5c\xec\xac\x9b\x8d\x21\x07\x6f\xfa\xd1\xbd\xdf\x92\xbf\xed\xfe\xf6\x7f\x68\x66\xfc\x26\x3a\xd5\xdf\xff\x7f\xaf\x2e\xff\xd1\x32\xa9\xf1\xc2\x5e\xa6\xa1\xe0\xef\xd1\x40\x47\xf3\xee\x86\xc4\xfd\x3b\xfb\x6f\xb3\x86\x4f\xd3\x8e\x9f\xe7\xb0\x79\x9a\xc9\xb6\xdb\xda\x8b\x03\x2e\xc8\xd5\xf7\x67\xe4\xe5\xcb\x6f\x7e\x0f\x4b\xe2\x51\xb4\xd4\x90\xd2\xde\xc1\x7f\xfc\x03\xc9\x96\x54\xd1\xcc\xf4\x80\xca\x5f\xf9\x34\x39\x28\xa2\xb1\x7e\x24\x43\x9a\x35\x97\x05\xc6\x44\x8f\x00\x79\x4f\xf1\x04\x81\x83\x69\x5d\x14\xd7\x2c\x53\x6c\xd7\x64\x87\x38\xf1\x74\xb1\xd6\xf6\x43\x6e\xec\x20\x58\x09\x45\xaf\xdc\x97\x45\x5b\xd9\x26\xa0\x6f\x68\xcb\x12\x54\x75\x51\x20\x1a\x6a\xe5\x6f\x1b\x18\xad\x0e\xd2\xec\xb8\xf6\x54\x20\x7d\xd4\xca\xce\x15\xa4\x59\xd3\x35\x7f\x02\x2b\xaa\x75\x0b\x3e\xb9\xe3\x79\x4d\x0b\xe8\x16\x44\x6c\x1c\xd3\x05\x45\xe3\xcd\xc9\xde\xd2\x8d\x60\xd7\xee\xec\xc8\x83\xd6\x2a\x2d\xcf\x71\x4e\x7e\xe3\xec\x6b\x2e\x16\x63\xf8\xc4\x76\xd3\x8d\x67\x2c\xc5\x98\x8e\x77\x4d\x34\xfa\xa2\xdc\xfa\x6f\x65\x46\x8b\xf7\xe0\x07\xbf\xf2\xbb\xcd\x4b\x01\x4d\x98\x90\xf5\x62\x09\xd3\xab\x4a\xea\x69\xb6\x0b\x66\xc0\x41\xe1\x92\x64\xfb\xf8\xef\x9b\x9d\x9d\x3b\x27\x7c\x58\x01\xbd\xbb\xb3\x9f\xd0\xb5\x1f\xe3\x6d\xef\x8b\x48\x4e\x11\xf6\xbd\x0c\xf4\x4a\x37\xb3\x3d\x31\x0a\x5d\x90\x3b\x03\xf5\xc3\x03\xe7\x30\xec\x31\x02\x6c\x45\x5e\xa3\xcc\xa6\xd9\xed\x3d\x55\xb9\x26\x99\x2c\x2b\x6a\x38\xd8\x1a\xab\xbe\xa8\x3a\x9f\xab\xe5\x6e\x03\xab\x96\x4c\xc8\x85\xd0\x86\x82\x0c\xf4\x94\x40\x76\x85\xdb\x34\x7e\x50\x5e\x90\x51\x71\xc9\x14\x23\x54\xf5\x43\x37\xd2\x02\x6e\xbc\x8c\x29\xbb\xf7\x8b\x15\xb9\x57\x52\xf4\xa4\xd3\xd8\x51\x28\x59\x75\xe9\x8e\xb3\xfb\xe7\xce\xfb\x38\xb6\x83\x1b\xe3\x16\xd6\xcf\xe1\x24\x3c\xff\x0d\xfc\xdf\x97\xe3\xc7\x5f\x73\xa7\x97\xb4\xea\x1f\x26\xf9\x0a\x62\xe5\x5c\xf0\x96\x27\xec\x49\x95\x8d\xb7\x4e\x99\x70\xb5\x7c\xf8\xbf\x50\x8e\x07\xd6\xfb\x8c\x15\x52\x2c\x82\x2a\x46\x3d\x6c\x9c\x0b\xc1\x4d\xc7\x23\x00\x80\x2a\x96\xd5\x18\x6a\x27\x52\xe5\xc0\x0f\xc7\x31\x89\xa5\xd3\x3a\x94\x9b\x0f\x98\xe9\xa8\xd8\x35\x20\xc8\x3b\xad\x03\xb7\x89\x6e\x3d\x5c\x48\xf1\xe0\x2b\x7e\x18\x49\x96\xd4\x15\xc7\x77\xf4\x79\x5c\x7b\xcc\x3b\xa1\x99\x35\xb1\x76\x3f\x2a\x56\xd5\x31\x0d\xc5\x1e\x52\xd7\x20\xb9\x10\x98\x26\x56\xc9\xa1\x62\xbd\x9f\xe0\x92\x53\x65\x87\x88\xcc\xa9\xee\x3b\x36\x5f\x0b\xfe\xcf\x9a\x11\x5a\x4a\xab\xf7\x15\x31\x09\xae\xeb\x2b\x59\xd2\x15\xd8\xa2\x30\x69\x6f\x3d\x67\x2c\xa1\x50\x75\x43\x8f\x00\x1c\xcf\x83\xc2\x4a\x23\xf2\xb6\x5b\x69\x69\x64\xc7\x79\x8d\x55\x4e\xdc\x47\xbb\x5b\xd0\x40\x46\x26\x6b\x95\x31\x67\x55\x94\x8e\x50\x67\xcb\xb4\xda\xbd\x67\x4d\x52\x81\x18\x0f\xbb\xa4\x90\xdc\x5a\x2b\xd8\x69\x18\x3a\xd9\x7d\x89\x67\x2b\x32\xb7\xea\xac\xc3\x06\x2e\xf9\x62\xc9\xb4\xf1\x91\xa2\xe7\x40\x01\x83\x69\xc6\x34\x5b\x36\xdd\x05\xf9\x1b\x90\x47\xb6\xe0\xc2\x92\x7e\xd8\x9d\x10\x08\x10\x15\x8e\x45\x1c\x4d\x6c\x5d\x97\xfe\xee\x5f\xdf\x4c\x7a\x42\xde\xda\x5e\xe1\x71\xa4\x55\x55\x70\xaf\x95\x77\xd6\x78\xe7\xd3\x06\x74\xa2\x00\xbb\x24\x73\xaa\x97\x5c\x8a\xd8\x5d\x96\x21\x18\x2b\xab\x95\x55\x5e\x8a\x15\x58\xaf\x79\x6e\xf5\x43\x45\x14\x2b\xe5\xdd\xee\xf8\xac\x68\x80\x57\x1c\xc7\xb2\x9d\xe4\x71\x60\x6f\x7c\x21\x46\xc4\x69\xc3\x14\x6b\xf7\x4b\xb6\x76\x5b\xe0\x06\xb4\xda\xbf\xaf\x67\xad\x6a\xd1\xa6\x85\xf7\xb8\x39\xf6\x04\xc5\xe9\x91\xbc\x1d\x63\x1e\x50\xb5\xd8\x1b\x9f\xc2\xa9\x5a\xd4\x28\x2e\xdd\xfd\x0e\x98\x90\x4a\xf2\xfe\x56\xc2\x06\x04\xf3\x48\x93\xb3\x77\xaf\x42\xfa\x7a\xe3\xd8\xf8\x31\xe8\x84\xc5\x0d\xfa\x35\xf7\x63\x5a\xf0\x36\xa8\x18\x0d\x22\xbc\x57\x8f\xb2\x46\xb2\x58\x31\x5f\xdc\x79\x67\x7c\xd3\x41\xef\xa4\xe1\xa2\xaa\x8d\x53\xbe\x83\x2a\xc5\xd9\x92\x8a\x85\xd5\x76\x5e\xc9\xda\x0e\xec\xb7\xbf\x85\x41\x28\x96\xd7\x59\xcf\xc4\x3b\x74\xf6\xe3\xc9\xfd\xad\x4f\x81\x71\xe5\xd0\xe1\x52\xd2\x19\xad\xfc\xd4\x84\xb3\xa7\x57\xc2\xd0\x0f\xdf\x11\x3e\x61\x13\xf2\xec\xb7\xc1\xaf\x9e\x41\x8f\x7b\xf5\xa6\x52\xd2\x0e\xc5\x51\x4a\xc3\xe8\x0b\x6e\x80\x7a\xe3\x59\xd8\xc2\x84\x9c\xdb\x7e\x41\x46\x69\xb3\xb6\x01\x4b\xf0\xac\x5d\xd9\x11\x51\x6c\x41\x55\x5e\xb0\x9e\xac\x8c\x72\xde\x24\x3f\xa2\x6b\xda\xed\x2a\xf6\x81\x6b\xa3\x5d\x7c\x74\x92\x06\x16\xfc\xb9\x77\x87\xa1\xfa\xd6\xde\x14\x56\xf8\x8d\x73\x6a\xe8\x38\x90\xba\xcf\xd1\x4b\x3b\xce\x64\x59\x52\x91\x8f\xa9\x3b\xc7\xed\xa5\xf2\xfc\x37\xae\x98\xcc\x98\x36\xdf\xe2\x62\x4c\xc7\x7a\xc9\x7a\xad\xdc\x80\xc9\x83\xc7\xcd\xe5\xbe\x04\xf6\x79\x23\x9f\x71\x29\x26\xe4\x52\x9a\xd6\x9c\x6a\x6e\x5b\x58\xe5\x94\x22\xfc\xfc\xf2\xe6\xea\x6f\xd3\xf7\x17\x97\x37\x83\x24\x1f\x24\x39\x3c\x83\x24\x1f\x24\x79\x8f\x86\x0f\x45\x92\x33\x71\xb7\x2f\x29\xee\x1d\x6f\xdb\xf2\x10\x5d\x40\xcf\x6c\x24\x34\xed\x3d\x95\x69\xdf\x74\x64\xe7\xe2\xee\x47\x6a\x4d\x7e\x07\x54\x73\xb9\x22\x5b\x52\x39\xdd\x17\xd0\x1d\x71\xf6\xc5\xf3\x91\xed\x91\x4d\x2c\x21\x9b\x4e\x54\x86\x71\x18\xc7\xda\xb6\xe4\x31\xd9\xb1\xef\xe8\x0a\xbd\xc0\x78\x28\xa9\x58\x91\x4a\x71\x61\x60\x2b\x9d\x5e\x9f\x5d\x5c\x04\x48\x07\xc2\x3e\x64\xac\x32\xe4\xe8\xff\xd9\x2f\x99\x18\x38\xfa\x0e\x61\x65\x76\x51\xdc\x22\x9a\x69\x55\xbe\x4a\xb1\x3b\x2e\x6b\x5d\xac\x1a\xac\xca\x76\x39\xba\xc9\x39\x17\x49\xa5\xb1\x22\x9a\x29\x60\x5d\xdd\xda\xe0\x9a\xd2\xb9\x4d\x81\x8c\x68\x7e\xcf\xaa\xa7\xeb\x44\x0a\x05\x34\xa2\xfd\x2d\xaa\xeb\xe7\xab\xa1\x11\xed\xf6\x52\x60\x1f\x52\x46\x23\xfa\xd1\x55\x63\x23\x5e\xd4\xe5\x1a\xd8\xbf\x24\xfb\x5e\xc9\x32\x91\x34\xbb\xc6\xe0\x8a\x07\x6e\x6e\x3b\xaa\x47\x1e\xfd\x17\xaa\x47\xce\xa4\x6d\x6b\xc2\x5a\xc3\x1a\x80\x06\x91\xb3\x13\x55\x33\x3e\x4d\xd9\x76\xe2\x32\xe5\xdf\xd1\xea\x2f\x6c\x75\xc5\x22\xab\x5f\x77\xe7\x9b\x15\x2c\xb3\xca\x18\xb9\x65\x2b\xa4\xc6\x3b\xf3\x8d\xc5\x15\x00\x4f\x32\x7d\x24\x49\xe1\x7d\x7c\xc6\x76\x88\x51\xef\x48\xb3\x98\xf6\xb9\x65\x11\x84\x72\xfe\x59\xa3\x3b\x64\xb0\x84\x60\x7f\xd8\x35\x8d\x5b\x3d\x92\xaa\xd4\x3e\x3e\x71\x9a\xa8\x7f\x52\x96\xdd\xc7\x27\x1d\xc2\xaa\xfb\xec\x17\x6f\xd5\x7d\xf6\x8a\xbe\x5a\xef\x4a\x3a\x2c\x56\xf7\x39\x24\x64\x56\xf7\x49\x78\x8a\x62\x50\x5b\xeb\x8f\x07\x25\x27\x3e\x95\xd7\x2e\xab\x35\x54\x9d\x9a\x0b\x85\x60\xc1\x15\x90\x53\x1e\xca\xee\xac\x80\x44\xd3\x1c\x47\xfa\x89\x4f\x3a\x7c\x5b\xf7\x01\x71\x90\xf6\xf6\x8e\x96\x81\xed\xf5\xef\xf2\x58\xe6\x1e\x5d\xf5\x9d\x67\x41\xd4\xa4\x64\x86\xe6\xd4\xd0\x89\x3d\x10\xa3\xee\x8f\x2e\x87\xef\x1f\xcd\x87\x05\x9d\xb1\x42\xff\x74\xf4\x5f\x7f\x39\xff\xdb\xff\x7b\xf4\xf3\x3f\xc2\xdf\x81\xba\x86\xf0\xf0\xe0\x0b\x91\x43\x80\xba\x8d\x42\xe6\xec\x12\x7a\x07\x3f\x3a\x4b\xef\x14\x11\x42\xee\x17\x50\x3b\x6b\x82\x69\xfc\xcd\x8f\x95\xcc\xd7\x7f\xea\x59\x3a\xc0\x3f\x07\xa8\xf7\xc0\xda\x46\x50\xe2\xe3\x93\x4e\xfb\xa1\x15\xff\x91\x29\x1d\xc5\xa2\xee\x9f\x6e\xcd\x03\x7c\xab\xdf\xc6\x3a\x5b\xb2\x92\xc2\x3f\xbf\xf7\x53\x60\xef\xe3\xa6\xba\xa1\x80\x22\x65\xf6\x0e\x1c\x75\x68\x25\x9f\xdd\xbd\x8c\xb2\x38\xf1\x49\x28\xf9\x9b\x15\x4c\x3c\x61\x30\x23\x6e\xb6\x50\x02\x34\xfa\x63\x93\x8f\xd2\x24\xed\x9f\x4e\x2f\xc8\x1d\xce\xf0\x01\x4d\xce\xe3\x89\xeb\x82\x25\x37\xb7\xa2\x05\xf6\xf7\x4d\xaf\xdc\x32\x05\xa6\x9b\x33\x98\x7b\x11\x27\xad\x3f\x9d\x1c\xaf\x73\x71\x67\xdb\xd5\xc9\x72\xbb\xd6\x9f\x03\x94\x99\xb1\xb6\xa2\x7d\x47\x15\x2b\x72\xed\x4b\x90\x48\xf2\xb2\x6f\x14\xc1\x3f\x87\x6c\xbb\x26\x31\xe5\xbc\x01\x1c\x10\x98\x36\x87\x81\x9c\x5a\x61\x8f\x39\x93\xf8\x1d\x70\x3d\xb2\x3b\x26\x4c\x03\x27\x77\xf5\xcc\xa9\x32\x3c\x8d\x4d\xe2\x7a\xd4\x66\x65\xb6\x00\x0f\xf4\x72\x95\x4f\x1e\xbb\x68\x9f\x57\x88\x9a\x3e\x2d\xaa\x25\xb5\xa3\x5e\x34\x76\xf0\xd6\xd3\x8e\xe8\x09\x3b\x77\x9a\xff\x8b\xad\x95\xc6\x7c\xf9\xcd\x9f\x22\xd2\x49\x37\x9f\x84\x17\xe7\x23\x99\x39\x49\x76\xec\x36\x5b\x09\xb8\xbd\x1e\x36\x93\x9a\x62\xe1\xfe\x7b\xf1\x62\x0a\xc6\xe6\x13\xd3\xc1\x45\x3d\x0a\x4a\xaa\x8b\x3b\x72\x47\x55\x83\x12\xaa\x67\x05\xd7\xcb\x58\x71\x8f\xcf\xc5\xbc\xcd\x8c\x6d\x53\xd7\x81\xd3\xc4\x57\x93\x69\x75\x0f\x3b\x17\x6b\xbd\x4c\xd0\x85\x87\x5c\xcc\x5d\x2e\xf7\x36\x9c\x8f\x89\xe9\x61\x0e\xc6\xa3\xcd\x03\x92\x88\x3c\xd5\x44\x6c\x30\xcd\x2b\x66\x6a\x65\x65\x96\xcb\xae\x98\xca\x1c\x49\x4f\x12\x2a\x7f\x29\x8c\x75\x12\x3a\x45\x60\xce\x22\x5f\x57\xa5\x57\xb2\x93\x5d\x6f\x9f\x41\xd0\xdd\x68\xef\x5e\x48\x24\x71\xae\x39\x21\xa4\x58\x41\x0d\xbf\xc3\x6d\xe9\xf3\x87\x3c\xb5\x80\x6d\xf0\x68\x32\x39\xc2\x5e\x4a\x85\x57\x29\x7a\x14\xed\xe7\x07\x75\x2d\xb4\x4a\xd5\x23\xb8\xe1\x43\x3a\x18\xb7\x44\x58\xb8\xc2\x4d\x95\x0f\xb1\xa6\xd2\xd5\xbf\x00\x63\xca\x67\x4d\x7d\x7f\xd0\x3e\xb0\x26\xb7\x6b\xbd\x70\xeb\x77\x48\xf0\xe2\x7f\xef\x94\x1f\x64\x22\x76\x79\x62\xb1\x8e\xe2\x63\x7c\xe5\x24\xab\xea\x91\x7b\xfd\xa4\x64\xa5\x54\xab\xe6\xc7\xa6\xcc\xe5\x58\x1b\xa9\xe8\x02\x8a\x33\x61\xe3\xf8\x67\xcd\x4f\xf8\x87\x9d\xee\x6d\xfe\x35\xa2\x3b\xda\xcc\xac\xa6\xea\xc9\x57\x67\xcb\xf9\x75\x3b\x10\x03\xaa\xd9\x56\x8f\x20\x7f\x8e\x1a\xc0\x1c\xc6\xdc\x9a\x59\x84\x90\xba\xab\xbe\x3a\x6a\x15\x0e\xc0\x7d\xa0\x92\xa7\x8f\x0e\x47\x0e\x11\x92\xf3\x3b\xae\x65\x44\x81\x8c\xe6\x45\x9b\xe1\x09\x4f\xd1\xe4\xea\xfc\x23\x09\x46\xe3\x41\xf9\x50\x49\x0d\x68\x11\x77\xd8\xd7\x5c\x83\x2f\x63\x23\x2f\xa0\x63\x18\xa6\xc4\x77\xe4\x7f\x8e\xff\xfe\xbb\x5f\xc7\x27\x7f\x3e\x3e\xfe\xe9\xc5\xf8\x3f\x7f\xfe\xdd\xf1\xdf\x27\xf0\x8f\xff\x38\xf9\xf3\xc9\xaf\xfe\x87\xdf\x9d\x9c\x1c\x1f\xff\xf4\x97\x77\xaf\x6f\xa6\xe7\x3f\xf3\x93\x5f\x7f\x12\x75\x79\x8b\x3f\xfd\x7a\xfc\x13\x3b\xff\xf9\x33\x5f\x72\x72\xf2\xe7\xdf\x46\x77\x9d\x8a\xd5\xfb\x48\xe9\x8d\xcf\xd8\x6d\x16\x2e\x0c\x5b\xb0\x5d\x39\xea\x3e\xf6\xc6\x44\xa1\xb6\xce\x55\xc8\x85\x19\x4b\x35\x76\x5c\x5a\x60\xa4\x44\x36\xe0\xb7\x57\xea\xf3\x7f\xe5\xa5\x66\x90\xa9\xec\x95\xc2\x03\x3a\xe0\x8f\xa5\x68\x20\xc3\xcf\x53\xc0\x64\xb0\xa5\xa0\x6a\xf9\x91\x6e\xc9\x6d\xbe\xb6\x1b\xf4\xdf\x01\x39\xe3\x83\x46\xb8\xae\xad\x25\x65\xcd\xab\x49\x6b\x04\x79\xee\x35\xf7\xbd\x5b\x16\x01\x31\xf3\xcf\x80\xb4\xe9\xfd\x0c\x48\x9b\x07\xba\x32\x20\x6d\xa2\x9e\x2f\x12\x69\x83\xbc\x83\xff\x9e\x30\x9b\xf4\xf5\xc7\x7a\x66\xee\xa4\x2c\x3d\xc6\xc4\x5d\x5f\x70\x75\xca\x54\x37\xef\xf6\x30\x92\x54\xb2\xaa\x0b\x6a\x1e\xc8\xa2\x48\x94\xf7\x76\x60\x91\x33\x20\xda\x45\xd5\xcf\x61\xf8\xb9\x20\x65\x5d\x18\x5e\xf5\x4c\x08\x68\x4c\xcb\x86\x4c\x97\x50\xad\x65\xc6\xa9\x4f\x04\x87\xdf\x14\x54\x1b\x3f\x64\xf0\xcc\x1b\x7a\xcb\x02\x42\xde\xbe\xd9\xda\x40\xde\xeb\xe7\x76\xb6\xb2\xf7\xd0\xb9\xb8\x73\x77\x12\xc9\x6b\x4c\x70\x65\x6d\xac\x34\x49\xbb\x5f\x57\x36\xa3\x3d\x97\x2e\x5b\x21\x48\x6a\x04\x0d\xb2\x71\x22\x52\x88\xe6\xc8\x79\x0b\x81\x84\xf4\x0f\x47\x0f\xdb\xab\x1b\xd1\xc6\x41\xbc\x2a\xde\x64\x23\x44\xd9\x58\x1b\x3a\x78\x0b\x13\xed\xea\xde\xbd\x5b\x38\xa0\x04\x8e\x78\xad\x3c\xad\x46\xfe\x18\xda\xf8\xa1\x68\xe2\x07\xa2\x85\x3f\x8e\x06\x7e\x98\xda\x77\x32\xcd\x3b\x8d\xd6\x9d\x46\xe3\xde\x01\xd7\x9e\x52\xcb\x4e\xa3\x61\x3f\x86\x7f\xad\x52\x6c\xce\x3f\x1c\x42\xda\xb2\xaf\xa5\x43\x0c\xfb\x00\xae\x9a\x4a\xb1\x8a\x89\xdc\x13\xa1\xf9\x08\x2c\x30\x36\x0e\x19\xe7\x8d\x5f\x34\xed\x85\x7d\xbd\xcd\x53\x36\xdc\xd6\x64\xb8\xad\x77\x78\x86\xdb\x7a\xb8\xad\x9f\xe4\xb6\x76\xd2\xea\xeb\xbf\xaa\x53\xd7\xb1\x2d\xe9\x62\x6f\x15\x10\xce\xba\x54\x76\x20\x99\x9f\x84\xba\x7f\xa3\x9e\x48\x4f\x3f\x56\x28\x64\x1b\xd0\x85\x91\x28\xf6\x90\x6b\x5a\x91\x82\xdd\xb1\xc2\x99\xd5\xa4\xa4\x82\x2e\x80\x06\xdb\x7e\xcf\x17\xdf\x97\xaa\xa9\x6a\xd5\xab\x27\x6b\x9c\x80\xe0\xc1\xf2\xbc\xc6\xf0\x4b\x25\x8b\xc2\xea\x2b\x05\xbf\x65\xe4\x15\xab\x0a\xb9\x2a\x1d\x4d\x53\x4e\xae\x0d\x35\x6c\x5e\x17\xd7\xcc\x44\x94\x84\xee\x29\x71\x9a\x8a\x3e\xc8\xbe\xbe\xaf\xad\x08\xc5\x7d\xa0\xd8\x0d\xa9\x90\x06\xbe\xd7\x6b\xde\x0b\xb8\xca\x4f\x8b\x7b\xba\xd2\x23\x72\xc9\xee\x98\x1a\x91\x8b\xf9\xa5\x34\x53\x74\x22\xf5\x7b\x6f\xc8\x09\x82\x2f\x27\x7c\x4e\xbe\x2b\xa8\x61\xda\x10\x43\x17\x80\x2d\x6e\x0b\xfc\x48\xd5\x69\x94\x48\x2b\x28\xef\xf9\xee\x85\x7a\xf0\x79\x52\x4e\xbe\x8f\x54\xfd\x81\xd6\x9b\x9a\x3f\x4f\x5e\x57\xa3\xf0\x3c\xfa\x7b\xe3\x84\x46\xfa\x7e\xa4\xf3\x46\x36\xfa\x46\x9c\x60\xc9\x40\x5f\x7f\x18\x5c\xba\x5c\x10\xc5\x74\x25\x85\x66\x9d\xf2\x0d\xed\x40\xa0\xba\x64\xbf\x53\x9f\xd4\xe3\xdb\xdb\x30\x88\x35\x09\x2a\xa9\x0d\x54\x39\xe8\xab\x9f\xa4\xb2\x05\xa6\xbe\x23\x50\xf8\x82\x16\x05\xcb\x09\x2f\x4b\x96\x73\x6a\xac\xde\x4e\xe7\x86\x29\x42\x43\x51\xdf\x14\x2a\x6d\xf2\x46\xb0\x1e\x86\x2f\xa5\xd1\xdf\x58\xeb\xd2\xcc\x6a\xc8\xa3\xe5\x02\xa2\x17\x88\x3a\x75\x85\x3f\xda\xc2\x1b\x6b\xa5\x34\xa2\x84\xa8\x7d\xde\x83\x66\x17\x6c\xef\x75\xd0\x2e\x99\x15\x32\xbb\xd5\xa4\x16\x86\x17\xae\x56\xa7\xbc\x05\xfb\xa5\x00\x71\xd2\xbb\xe9\xfe\x52\xaa\xf9\xe7\xb8\x39\x60\x63\xdb\x2b\xfd\xfc\x37\xed\xaf\xe0\x83\x9e\x9d\x4b\x60\x45\xa7\xb0\xa1\xd9\x07\x96\xc5\xe8\xf3\xdd\x60\xcb\x07\x96\x85\x95\x3e\x3d\x8d\xb3\xdd\x51\x8e\x3c\x39\x51\xdc\x11\x9f\x44\xf8\xab\x54\x98\xa7\x08\xd2\xea\xf0\x49\x0d\xe9\x39\x73\x8b\xc0\xb5\x9b\x79\xfc\xb1\xe0\x82\x75\x17\xa6\xa9\xff\xd6\x2c\x0e\x86\x3d\x7d\x49\xfe\x9c\x2b\x96\x19\xa9\x56\x9e\xf5\x2b\xba\x6b\xbe\x2f\xb6\x6f\x50\xa2\xf8\xf8\xe8\xf9\xd1\xc9\xc6\x1e\x39\xd2\x90\x7e\x81\xd7\xe2\xc4\x51\x67\x37\x83\xd2\xbc\xac\x8a\x15\x8c\xe3\x28\x1f\x11\x6e\x52\x60\x84\xec\x6d\x88\x05\xb9\x61\x56\x1c\xd5\xf7\x08\xca\xff\x2b\x9a\x73\x67\x20\xc0\xa7\xf6\x4b\x46\xd5\xee\x42\x3f\x3e\xfa\xf5\x68\x44\x98\xc9\x4e\xc8\xbd\x14\x47\x06\xa6\x6f\x42\x6e\xa0\xb8\x62\x3c\xac\xd7\x77\x64\x25\x6b\xa8\xe5\x8d\x4b\x88\xf5\x74\x8b\x15\x5c\x37\x44\xd6\xae\xfe\x2a\x35\x31\x14\xe5\xe1\x73\xfe\x81\x1b\x47\xbe\x61\xe5\xf7\x0b\xd8\x4d\xae\xb6\x36\xb5\xc6\xc8\x1d\x7b\xbe\x64\xb4\x30\x4b\xcc\x66\x10\x52\x8c\xff\xc5\x94\x04\x1a\x73\xe1\x7e\x13\xdb\x8d\xb8\x90\x72\xf8\x44\x84\x97\x37\x3b\x94\x04\xc8\x94\xd8\x19\xe0\x1f\x7b\xed\xbd\x66\xbd\x55\x22\xb2\x2e\x8f\xde\xdc\xdc\x4c\x5f\x33\xd3\xad\xe7\x6c\x3f\x24\xaf\xcf\x6f\x7c\x0e\x0b\x38\xfa\x99\x9a\x4b\x55\x1e\x80\x78\x4f\x03\xae\x1d\x93\x4a\xaa\x43\xb8\x65\x96\x52\x47\x2d\x27\x79\x84\x2b\xe6\x8d\xd4\x06\x63\x39\x68\x9b\x08\x48\x6c\x94\xdd\x84\x0c\x9f\xbe\x7f\x31\x9d\x90\xbf\xc9\x1a\x2a\x91\xd1\x59\xb1\x6a\x0a\x19\x69\x16\x87\xa2\xb6\xcf\x33\xdb\x95\x67\xf6\x06\xb1\x3b\xff\x0d\xa3\x39\x53\x1a\x04\x34\xa3\xd1\xc9\xd0\xc9\x8e\x7b\xd0\xb7\xa4\x4b\x79\x56\x6b\x23\x4b\xb2\x74\xc3\xee\x52\x9c\xbb\xc3\x39\xc1\xe3\xea\xe8\x64\x15\xab\x50\x88\xbb\xbf\xf9\xea\x44\xf4\x86\xf4\xc2\x79\x77\x9f\xcf\x50\x4d\x0d\xa7\xcd\x05\x38\x90\xa8\xd4\xc9\x36\x2c\x9a\x97\xe8\xba\x48\x90\x2f\x40\x12\xe6\x0c\x90\x38\xf2\xf3\xf5\x17\x41\xb0\x27\xfa\x4d\xe9\xd2\x10\x48\x32\xa8\x3d\x79\x14\xb8\x3d\x71\x28\x4a\xb7\xf9\xd0\x07\xdd\xdf\x7b\xbe\xed\xe5\xbc\xad\x0b\x9e\x51\x21\x05\xcf\x68\xc1\xff\xc5\x72\x52\x57\x52\xb8\xdc\x3a\xd0\x6c\x33\xaa\xd9\x18\x22\xef\x02\xc5\xb9\x0e\xd8\xae\xad\x74\x30\x52\x82\xba\xd7\x14\x89\xc6\x5e\xa7\xe9\x6a\x52\x54\x78\x34\x75\x7b\xf8\x6c\x04\xd4\x3b\x8b\x95\x66\xc7\x93\x2f\x42\x9d\x24\x89\x88\x17\x36\xb9\xcd\xb0\x4e\x28\xf0\x79\xe3\x75\x05\x82\x57\x33\x75\x17\xbf\xbf\x92\xcd\xab\x55\x01\x0f\x4d\xf7\x42\xcc\x81\x22\xa2\x2e\x67\x4c\xb5\xc4\x90\xca\x6c\xce\x69\x12\xaf\x8b\x6b\x16\x9b\xf3\x51\x5a\xaf\x63\x50\xb1\x60\xe4\xa5\x6d\xf9\x8f\xdf\x7e\xfb\xfb\x6f\x13\xb4\x63\x87\xe7\x5b\xa1\x82\x5c\x9c\x5e\x9e\xfe\x72\xfd\xe3\x19\xd0\xcd\xc7\xbe\x3e\x51\x92\x6c\xea\x14\xd9\xa4\x09\xb2\x8f\x9a\x1e\x0b\xc4\x8d\xd1\x52\x36\xf5\x91\xb8\x86\x5e\xd9\x4d\x58\x6b\xa4\xa8\x77\x36\x49\x50\x62\xdb\x9a\x51\xf1\xbb\x33\x0c\xe6\x59\x81\x75\x10\x92\x4a\x17\x8c\x55\xc9\x2c\xfe\x6b\xfb\xb6\x4e\x39\x20\x92\xd7\x0a\xab\xd2\x36\xc1\xab\xd6\x97\xef\x82\x56\xd0\x87\xaf\xc8\xf8\xd7\x2c\x93\x22\x8f\x31\x01\x52\xa9\xb4\xae\x27\x49\xcf\xdc\x35\xbe\xd3\xbb\x88\xdb\xab\xc4\x35\x06\x96\x64\xec\x8a\x92\x66\x55\xd3\xc8\x49\x64\x83\x80\xb7\xfd\xf1\x0f\xfd\x03\x64\x59\x75\x2d\xb3\xdb\x84\x2e\xb2\x48\x01\xf6\xca\x9e\xb4\x0c\x63\x81\x37\x67\x53\xec\x9c\x5d\x99\xcb\xf7\x37\x2d\xf5\x8b\xd5\xc2\x69\x5b\x0d\xfe\x8d\x8b\x16\x52\x91\x93\x5b\x56\xc5\x59\x97\x56\x60\x7a\x18\x61\x17\x45\x08\xbe\x77\xe5\xea\x76\x60\x7a\x35\x0a\x02\x8f\xfe\x43\x8d\x38\xae\x02\x50\x10\x9c\x87\x40\xa0\x33\x42\xe6\x94\x17\x84\x82\x57\xde\xf0\x92\x91\xfb\x25\x13\xe8\xec\x6f\xd1\x12\x5f\x91\xc0\xf9\x5a\xbd\x8d\x47\x1e\x12\xfe\xdd\xce\x5e\xc3\x58\x56\x8c\xaf\xdb\x0c\x70\x32\x5b\x75\x58\xcd\x06\x33\xe0\x73\x9e\xc1\x0c\xe8\x69\x06\x54\x8a\x5d\x1b\xd9\x5b\xd7\x4c\x06\xb8\xc1\x6e\x3c\x00\xb7\x99\xb1\xb9\x54\x6c\x1d\x6f\x13\xe0\x60\x1c\x72\x3e\x02\x19\x7c\x3a\xbd\x68\x62\x5f\xb2\x83\x75\x41\xe6\x62\x5d\x67\x4b\x1f\x26\x15\x4c\xeb\xe7\x80\xac\xa9\x2b\x74\x2c\xc3\xd5\x56\x2b\xd6\x1f\xe5\x53\x29\xc6\x4a\x98\xc7\x51\xcb\x26\x64\x87\xcb\x04\x7e\xc8\x4c\x86\x71\x73\x0f\x2b\x72\x3c\xb1\x7e\xba\xe6\x51\xe1\xfc\x76\x62\x33\x45\xf5\x92\x41\xee\x2c\xfb\xc0\x8d\xc6\x46\x91\x8d\xd5\xcf\xb8\xd5\x17\x16\x8a\x66\x8c\x54\x4c\x71\x69\x55\x8c\x5a\x98\x5c\xde\x0b\x32\x63\x0b\x2e\xb4\x5f\xb1\x98\x2e\xf9\x2d\x01\x48\x22\xae\x9b\xda\xdd\x13\x72\xd5\xa9\x1c\xe7\xd8\xc5\x32\xd9\xca\x4c\x37\x45\xa3\x44\x53\x02\xca\x0b\x6c\x83\x9a\x16\xc5\xaa\xdd\x78\x21\x41\xe8\x03\x33\xd4\x7f\x43\xe0\xcc\x1e\xd7\x02\x06\x9a\xb3\x82\xae\x30\x83\x7c\xce\x05\x78\x7f\x95\x3e\x99\xc4\x43\xb3\x7a\x77\x50\xaa\xe0\x9d\x0f\xee\x0c\xae\x89\x62\x34\x8b\xe2\x31\x1e\x30\x60\x9f\x7a\x06\x0c\xd8\x80\x01\x1b\x30\x60\x9b\xcf\x80\x01\xeb\x3e\x03\x06\xec\xe1\x0e\x1d\x72\xd0\x6e\xc0\x80\x0d\x5e\x99\xcd\x67\xc0\x80\xf5\x7a\x06\x0c\xd8\x27\x9f\x83\x13\xd1\x03\x06\xec\x33\x9e\x01\x03\xf6\x99\xcf\x80\x01\x1b\x30\x60\x03\x06\x6c\xc0\x80\x45\x3c\x03\x06\x6c\xf7\xe1\x0d\xc1\x9f\xfe\xcf\x80\x01\x1b\x30\x60\x3b\x3e\x03\x06\x6c\xed\x19\x30\x60\x03\x06\xec\x63\xcf\x80\x01\x1b\x30\x60\xee\x19\xbc\x8d\x1b\xcf\x80\x01\xdb\xf2\x0c\x18\xb0\xdd\xda\x19\xcc\x80\xb8\x97\x3d\x8a\x19\xa0\x8d\xac\xae\xf9\x22\x82\x17\x32\xd5\x31\xb8\x6e\x7a\xe2\x48\x23\xb5\x2b\xb6\xab\xf1\x43\xef\xc7\xd2\x8e\xb2\x2f\x44\x84\x05\x37\xc9\x8c\x59\x13\xc1\x0e\xab\x8a\xb9\x4d\x2e\xe6\x10\x40\x0e\x98\xdc\xec\xa9\xf0\x34\x81\xbc\x53\xd6\xa1\xab\x3e\xfb\xdb\x8d\x0b\x6b\xbb\xf4\xef\x41\x30\x1f\x19\x15\x58\x19\xd5\x95\xc9\xb6\xd7\xfb\x54\xe6\xda\x57\x92\x10\x52\x8c\x91\xac\x75\x62\x3b\x3c\x91\x7a\x12\xe1\x0d\x8e\x64\x66\x43\x8c\xdc\x54\xc9\xd9\xde\xd8\xd9\xa6\x80\x3f\xe2\x99\x03\xe8\xc9\x79\x87\x71\x0d\x3b\xd8\x93\x69\xad\x0b\x0c\x83\x62\xcd\x9e\x82\x8b\x3b\x81\xdd\x80\x02\xf7\xc9\xe6\xb6\x33\x72\xca\xb3\x54\xea\xe7\x95\xc4\xff\xb4\xb8\xa9\x00\x30\xd5\x3b\x8e\xb2\x67\x7a\xb9\x18\x94\xd4\xde\x10\x52\x07\x82\x30\x4b\x80\x8a\x4a\xa9\x2b\x1d\x28\x1a\xea\x30\x91\x50\x87\x88\x82\xda\x07\x02\x6a\xef\xe8\xa7\x34\x61\xf5\x04\x21\xf5\x44\x1a\xe9\x23\x84\xa7\x1c\x90\xfe\x66\xa9\x98\x5e\xca\xa2\xb7\xc0\x49\x25\x6c\xde\x71\xc1\xcb\xba\x84\x2a\x14\x56\xa6\xf0\xbb\x06\xec\xaf\xbd\xc8\x70\xd7\x3d\x22\x0e\xa0\x5c\x45\xce\xa0\x0c\x38\xe5\x85\xdd\x5a\x40\x16\xba\xa4\x77\xa0\x94\xd6\x59\xc6\x58\x1e\xa3\x96\x86\xde\xea\xdf\x4f\x9a\x1e\x22\x47\x3f\xd7\xe4\x65\xdc\x55\x13\x67\xf7\x04\xee\xbc\xdf\x7f\xd3\xeb\x1d\x0b\x55\xa5\xb9\xa5\x5f\x5f\x4d\xcf\x3a\xb7\x34\x7c\xf0\x06\x8e\xf1\xd9\x92\x65\xb7\x57\x0e\x4a\xb3\xbf\x9b\x39\xde\xcd\x14\xe5\x62\x4a\xa1\x18\xc4\x7a\x51\xba\x31\x64\xa9\xcc\x5a\x08\x74\x01\xab\xc8\xd4\x1d\xcf\xd8\xe4\x09\x1c\x15\xa9\x8c\xff\xf8\x83\x40\x20\x4c\x00\x03\x3f\x14\xb5\xeb\x1a\xbb\xd3\x44\x18\x02\x1f\x95\xeb\x29\x80\x46\x0b\x9a\x35\x6b\xb3\xd8\x7e\xe8\xa2\xba\x71\xac\x19\x6b\x0c\x9a\x05\x37\xcb\x7a\x36\xc9\x64\xf9\xdc\x8a\x0e\xfc\xcf\xac\x90\xb3\xe7\x25\xd5\x86\x29\x6b\xe3\xb8\x6b\x7d\x9c\xd9\x1e\x70\xb1\x98\x94\xf9\xc9\xe4\x7f\x45\xf5\xe1\xc2\xf9\xca\x5d\x1a\xd6\x03\x4e\x82\x19\xb3\x72\x5f\xaa\x35\x6f\x81\x9d\x94\xf8\x4d\x1a\x7d\x7f\xc7\x16\x15\x89\x84\x25\xef\x05\x92\x3c\x48\x6d\x92\x20\x20\x90\x52\xa8\x1c\x06\xec\xf8\xd1\x20\xc7\x49\xce\x6a\x22\xa8\xf1\x01\xc1\x8c\x0f\xc6\x16\x3a\x14\x68\x71\x32\x58\x71\x2a\x48\x71\x12\x38\x71\x0a\x28\x71\x3a\x18\x71\x1a\x08\x71\x7a\xf8\xf0\xa3\x41\x87\xbf\x08\xd8\x70\xc2\xf8\x58\x22\xb8\xf0\x53\x40\x85\x0f\xd7\x07\x43\x12\xc0\x83\x9f\x0e\x1a\x9c\x64\x1e\x93\x5a\xb1\x91\x22\x61\x0f\x50\xe0\xa7\x88\xff\x3f\x5a\xec\x3f\x41\xdc\x3f\x65\xcc\x3f\x59\xbc\xff\xd1\x20\xbf\xf1\x70\xdf\xa4\x3e\x85\x27\x81\xf9\xa6\x84\xf8\x46\xaf\x2f\x17\xdc\x70\x5a\xbc\x62\x05\x5d\x5d\xc7\x01\x41\x53\xad\xc4\xe5\x06\x58\x14\xdd\xd6\x5d\x5c\xc3\x92\x6a\xe2\x43\xdd\x8e\xe2\xc5\xc7\xd2\x9d\x0a\x4c\x28\x44\x9c\xed\xf8\x7a\x47\xad\xc9\xe1\x45\xae\xc9\xc1\xb8\xc7\x91\x57\xe5\x40\x76\xcd\x1b\x79\x4f\xe4\xdc\x30\x41\x8e\xb9\xf0\x3b\xe7\x24\xf0\xd2\xb4\xe1\x91\xe8\x78\x87\x7d\xeb\xcb\x17\xbe\x91\xaf\x2f\xee\x01\x91\x21\xad\x0f\x3a\xf2\xe5\xfa\xf8\xe9\xd0\x97\xfb\xe2\xbc\x2e\xba\xe1\x2f\x0c\x89\xa5\x89\x7d\xbd\x9c\x90\x77\x4e\x9d\x78\x09\xfd\x69\x44\x11\x15\x39\x71\xfc\x5c\x5f\xdf\x3e\x89\x86\xba\x77\x8d\x9b\x06\x9b\xde\xc5\xb3\xe0\x0d\x6c\xb5\x4c\x49\xa8\xfd\x16\x28\xa0\x83\xd3\xf5\x60\x9c\xae\x7b\x42\x60\x7f\x7d\xd6\xd6\xd3\x23\xae\x07\x6b\xeb\xdf\xc5\xda\x0a\x68\xf1\x5e\x2b\x9a\xb1\xe9\x21\x29\x6f\x5e\x80\xb4\x89\x80\xad\x0e\xd7\x88\x0b\xc1\x18\x26\x8e\xb5\xa4\x87\xc0\xef\x37\xaf\x8b\x62\x85\x3e\xc4\x0e\x03\x66\xff\xad\x75\xb3\x64\x1b\xd4\x81\x10\x4a\xdd\xd2\xbb\xd6\x36\xa9\x94\x74\x1a\x89\xaa\x85\xb0\x2a\x86\x3b\x4e\xb6\xf3\xd6\x16\xd1\x4c\xf4\x77\xa7\xd3\x0e\xb1\xa1\x03\xa1\x03\xd0\x73\xc9\x48\x9b\xbf\xd4\xed\x88\x6d\x75\x2e\x55\xc6\x67\xc5\x8a\x2c\x69\x61\x8d\x25\x07\xd2\xbe\xe5\x45\xe1\x5e\x13\x01\x0a\x67\x06\x43\xcf\xa8\xd1\x14\x52\x2c\x60\x32\x28\x76\x84\x7d\xa8\x58\x66\xdb\xcc\x0a\x46\x45\x5d\x61\x3f\xad\x7e\xb4\x92\xb5\xf2\xfd\x8c\x42\xc5\x07\xad\x73\x4d\x04\x2f\x46\x7e\xca\xbb\x14\x98\x9b\x7b\xbe\x75\x29\x6b\x96\x3b\xf6\xca\x7b\xae\xd9\x08\xde\xd9\xbb\x4f\xd8\x17\x5f\xb5\x1f\xf7\x0d\x7e\x56\x29\x79\xc7\xf3\x16\xa3\x6f\xb7\x05\xe0\xe3\x7b\xb7\xf5\x23\xbc\xd7\x8b\x56\x21\xc5\x58\xb0\x05\x05\xf5\xd8\x09\x34\x44\x74\x62\xfb\x88\x1f\x14\x39\xcf\xa8\x61\x1a\x72\x12\x3a\xd4\xb6\x77\x9c\xf6\xee\x89\x1d\x4f\xb0\xa3\xc8\xb1\x90\x44\x42\x66\x61\x2d\xb8\x59\x41\x44\x6f\x59\x1b\x92\xcb\x7b\x71\x12\x73\x30\x11\xe6\x40\xc9\x8c\x19\xda\x26\x07\x7a\x95\x4c\x13\x26\xe8\xac\xb0\x67\x0f\x10\xff\x37\x5b\x37\x00\x99\x33\x6a\x6a\xc5\xc8\x82\x9a\x08\x29\xb1\x45\x9b\xc7\xf5\xfc\xf8\xb6\xe3\xda\xc5\xeb\xe6\xa4\x16\x9a\x45\x2a\xb2\xc9\x4c\x80\x9e\x19\xaf\xf6\x44\xcb\xda\x1c\xc8\x3d\xf2\x90\xeb\x08\x33\x77\x02\x23\x91\x97\x4c\x13\x59\x47\x78\xf2\x3a\xe6\x9f\x6b\x2e\xa5\x85\x37\xf8\x9d\xb6\x3e\x7d\xc3\xa6\x29\x76\xd8\x65\xa0\x95\x07\xfc\x04\x1e\x6e\x85\x19\xd4\xaf\x2e\xaf\x7f\x79\x7b\xfa\xdf\xe7\x6f\xfb\x2d\xfc\x39\xcd\x96\x21\xb7\xb8\x20\x14\x2e\x0a\x10\xf2\x4b\x7a\xc7\x08\x25\xb5\xe0\xff\xac\x1d\xe4\xed\xb8\x69\xaf\xa7\x58\x4d\x92\xde\x13\xa5\xf8\xda\x5b\xa2\x97\xe4\x48\xb1\xa6\x6f\xb9\x06\xa2\x6a\xe8\x84\x03\xfe\x4b\xcd\xc8\x5c\xc9\x72\xcd\xd0\x22\x97\x0d\xb8\x6e\x65\x6f\x18\x8a\xa6\xd9\x92\xa9\x7e\x1a\xf9\xab\xf7\xe7\xd7\x90\x83\x5f\x29\x24\x76\x87\xe4\x02\x78\x27\xb4\x8e\xa9\x83\xd8\x9f\x7c\x42\x4e\xc5\x0a\x7f\x89\xc2\xac\xa7\x8a\x52\x70\x6d\x18\x28\xa7\xce\x90\xf4\xf0\xc0\x67\x2f\x26\xf0\xbf\x67\x84\xe6\xb9\xb2\x96\x66\x93\xa3\x91\xad\x67\x99\xf5\x6a\x19\xed\x57\x3e\x2b\x82\xc9\x15\xcc\x40\x1a\x47\xaf\x17\xbe\x93\xb9\x5b\x09\x50\x02\x01\xbf\x83\xda\xad\x36\x8a\x1a\xb6\xe0\x19\x29\x99\x5a\x30\x52\x51\x93\x2d\x49\x49\x57\x24\x93\x4a\xd5\x15\x52\x8c\xe4\xd4\xd0\x7e\x2d\x7f\x2f\x15\x29\xbd\x74\xb6\xd2\xcc\xaa\xe4\xd7\xdb\x81\xa0\xad\xc8\x0e\xff\xc9\xb5\xae\x99\x7e\xfe\xf2\xc5\x9f\xbe\xf9\xb6\xa7\x79\x9d\xf0\xe0\xf6\x85\x3e\x45\x40\x9e\xba\xf0\x2f\xbf\xc1\x00\x74\xdd\x61\x86\x71\x3b\x04\x77\x3e\x48\x43\xcd\xc5\xa2\x88\x76\x80\x44\xbb\x01\x63\x9d\x80\xe3\x76\x04\xd3\xbe\xbe\xc0\x78\x4f\x60\xa7\x0f\xfd\x5d\x29\xe9\xbc\x60\xad\x06\xe7\xfd\x5e\x4e\x20\x4b\x11\x18\x76\x17\x53\x2f\xa5\x62\xfc\x47\x60\x4d\x34\x8e\x29\x64\x1f\xc1\x66\x11\xef\x30\x22\x2f\xc8\x7f\x91\x0f\xe4\xbf\xc0\x0b\xf6\xc7\xfe\x4d\xa5\xf1\x31\xa5\x80\xf1\x2f\xa5\x36\x17\xd3\x44\x0b\xfd\x57\x7b\x5f\xd9\x37\xda\xf5\x30\x92\xcc\xb8\x73\x47\xb0\x0f\x86\x29\x6b\x06\xba\x35\x8c\x9d\xb9\x28\x8f\x9a\xed\xe0\x97\xb2\xbb\x63\xc1\x05\x17\xf3\x2e\xfa\xff\x89\xf6\x37\x34\xfc\x46\x6a\x73\xe9\xa4\x75\x48\xa1\x13\xf6\xa3\x84\x8b\xb8\x23\xee\x63\x5a\x7d\x67\xf7\x5e\x5b\x63\x83\xe4\x12\x12\x20\x30\x87\x73\xc9\x23\x84\xc3\xe1\x9c\xd8\x38\x9c\x68\xba\xad\xfb\xb1\xad\xb5\xe6\xd3\x07\x8f\x8c\x33\x52\x82\xb2\x34\x95\xcc\x27\x60\xdf\x44\xf4\xc2\xce\x46\x1e\x28\x03\x1f\x31\x8d\x26\x68\xaf\x35\xd1\x61\x38\x70\x56\x62\x65\x54\xf4\xd5\x61\xf1\x51\x6c\xce\x94\xc2\x3c\xe1\xd9\xca\xa7\x1b\x45\xef\xb6\x28\x29\x57\x29\x69\x64\x26\x7b\xd3\xa6\xa4\xdc\x2a\x53\xd7\x17\x98\x7b\x88\xd5\x36\xd1\xf1\x1f\x5e\x4d\x47\xe4\xe6\x6c\x3a\x22\x52\x91\xeb\xb3\x38\xf0\x53\xe8\x82\x79\x76\x73\x36\x7d\xb6\xd7\x15\x08\x72\x98\x6e\xce\xa6\x3d\x5e\xb2\x09\x9f\x2d\x69\x35\xbe\x65\xab\x9e\xda\x5d\x0a\x0d\x73\xdc\x6c\xac\x24\x03\xc2\x69\x2e\x69\xb5\xf3\xdb\x14\xa3\x39\x3f\x68\x26\x17\x9f\x75\xd8\xf4\x34\x1d\xa5\x4b\x29\xef\x58\x8e\x56\xb3\x6f\x85\x89\xbc\x92\xdc\xda\x48\x03\xcf\xcb\xc7\x9e\x81\xe7\x65\xf7\x67\xe0\x79\xd9\xf6\x0c\x3c\x2f\x3b\x3c\x03\xcf\x0b\x3e\x03\xcf\x4b\xb7\x23\x87\x98\x63\x34\xf0\xbc\x7c\xf2\x19\x78\x5e\x1e\x7c\x06\x9e\x97\x9d\x9e\x81\xe7\x65\xf3\x19\x78\x5e\x3e\xf2\x0c\x3c\x2f\xcd\x33\xf0\xbc\x0c\x3c\x2f\x5f\xae\xd4\x1e\x78\x5e\xd6\x9f\x81\xe7\x65\xe0\x79\x19\x78\x5e\xc2\x67\xe0\x79\x79\xe0\x19\x78\x5e\x06\x9e\x97\x81\xe7\xe5\xe3\xcf\xc0\xf3\xd2\xfb\x19\x78\x5e\x76\x7b\x86\xcc\xc3\x1d\x9f\x81\xe7\x65\xe0\x79\x59\x7f\x06\x9e\x97\x4f\x3e\x87\xe1\x1e\x1f\x78\x5e\x06\x9e\x97\x8f\x3e\x03\xcf\xcb\xc0\xf3\xf2\xd1\x67\xe0\x79\xe9\xf1\x1c\x9c\xd3\x75\xe0\x79\x19\x78\x5e\x3e\xd6\xc6\x60\x6d\xed\xf6\x0c\x3c\x2f\x03\xcf\xcb\xc6\x33\xf0\xbc\x6c\x3e\x03\xcf\xcb\xc0\xf3\x32\xf0\xbc\x0c\x3c\x2f\xcd\x33\xf0\xbc\x7c\xed\x7e\x27\xc5\x34\xff\x17\x9b\xca\x82\x67\xab\x7d\x65\xfb\x5c\x31\x2d\x6b\x95\xd9\x8b\x1e\x7a\x43\x2a\xe8\x4e\xe3\x88\x88\xd4\xcd\x41\xc8\xa1\x68\xcb\x9a\xdc\x1b\xcd\x8c\x55\xfd\x59\xb5\x64\x25\x53\xb4\x08\xd2\x5b\xbf\x02\x7e\x87\xab\x60\x55\x43\x9e\x07\xe5\x66\xfa\x71\x26\xfa\x00\xb8\x1e\xfc\x00\x2f\xfb\xc3\x1b\xc6\xbe\xb6\x37\x4e\x5f\x3f\x4f\x6e\xb4\x4b\x21\x1c\xc8\x21\xe4\x9a\x86\x9c\x4c\xcd\x2e\x32\xb2\xb9\x09\xf8\x83\x9b\x8b\x56\x55\xc1\x63\xb2\x76\x09\xb9\xae\x41\xf5\x61\x2e\x3e\xaf\xbf\x23\x59\x55\x8f\x48\xc9\x4a\xa9\x22\xb2\x36\x12\x98\x97\x9d\xad\x72\x08\xeb\x74\x85\x1d\xf2\x93\x6f\x24\xcc\xff\x0a\x8d\x99\x96\x42\xab\x59\x2b\xee\x85\x6e\x14\x10\xee\x62\xbe\x8e\x94\xe5\xa6\xe3\xa2\xba\x94\xe6\xca\x1d\xee\xbd\xad\x57\x62\x38\x85\x9f\xc2\xbd\x51\x6a\x9d\xc9\xb2\xaa\x0d\xeb\x5c\x9f\x38\xc5\x68\x11\x71\x1d\x2b\xd0\xf7\x93\xaa\x9a\x49\x31\xe7\x0b\xe7\x1a\x78\x5e\x52\x41\x17\x6c\xdc\xcc\xf6\xb8\xbd\xa8\x9f\xf7\xbe\xa8\xf7\x96\xa7\x9a\x15\x94\xf7\x47\x35\xa6\x12\x13\x67\xd0\x0b\xe0\x28\x6b\xd1\xfe\x90\x38\xd7\x4c\xf3\xa8\xc1\xb4\x73\x94\x1b\x13\xff\x2b\xfc\xe3\x51\x84\x69\x4b\x0d\x38\x52\xc0\x6a\xdb\xb2\x53\xe3\xac\x59\x54\xf4\x72\x56\x31\x6b\xae\xa0\x77\xb7\xbf\x51\xb2\x12\xb4\xe4\x99\x3f\x61\xa7\x45\x21\x33\x74\x18\x75\x4d\xde\x14\x5d\xb6\x96\x78\x59\xd6\x86\xce\x0a\x36\x21\x17\xc8\x9f\x21\x45\xb1\xf2\xea\xaa\xc3\x4f\x44\x68\xa9\x24\x09\x38\x37\x12\x98\xdb\xd9\xc4\x57\xe1\xa6\x42\xc2\x0f\x26\xac\x28\x93\x82\x11\x26\x8c\x5a\xd9\xfd\x37\x95\xf9\xb5\xdd\x82\x9d\x6f\x47\xf3\x80\x44\xe2\x71\x53\x60\x71\x23\x71\xb8\x69\xd0\xb3\xf1\xc8\xd9\xb4\xa8\xd9\x36\xbe\x81\x34\x46\x61\x3a\x52\x67\x5b\x54\x32\x9f\x6c\x11\x4d\x44\xce\x23\x7b\x60\x5b\x9c\xca\xdc\x2a\x4d\x8a\xa1\x7c\x6a\xce\x28\x7a\x37\x2f\x6c\xe7\x6e\xc1\x1d\x49\x4d\xab\x4d\xd1\x3b\xca\x0b\x7b\x80\x23\x3b\xb0\x49\x09\x19\x17\x32\x4a\x14\x48\x71\x99\x03\x87\xb4\x59\x5c\xce\x59\x27\x6d\x2d\x5b\x4a\xcd\x04\xc8\x4b\xda\xa4\x17\x35\xc9\x0f\x4e\xc4\xe4\x78\x17\xc7\x42\x9c\x2f\xe6\x84\x95\x95\x59\x8d\x08\xbb\x63\x6a\x65\x96\x00\x85\x68\x48\x4d\x41\xac\x71\x4d\x4a\x9a\x07\xbb\x63\x44\xa4\xf7\x8e\x47\x36\x0f\xf7\x83\xb3\xc9\xea\xc2\xa0\x85\xc6\x75\x93\xe3\xb1\xef\x5d\x93\x9a\x6b\x87\xc4\x0a\xcd\x94\x5c\x39\x04\x78\x5e\x4b\xde\x8f\x55\x97\x24\x3c\x0b\x6f\xa1\x17\x41\x5e\x8b\xdd\x12\x25\xfd\x00\xbe\x53\x5a\xca\x5a\x18\x24\xd1\x41\x8b\xa1\xd1\xf2\x30\xfb\xe7\x09\xc1\x7c\x8f\xaa\xdb\x93\x34\x57\x3b\xcd\x3d\x6f\xc6\x34\x45\x12\x35\x35\x86\x29\xf1\x1d\xf9\x9f\xe3\xbf\xff\xee\xd7\xf1\xc9\x9f\x8f\x8f\x7f\x7a\x31\xfe\xcf\x9f\x7f\x77\xfc\xf7\x09\xfc\xe3\x3f\x4e\xfe\x7c\xf2\xab\xff\xe1\x77\x27\x27\xc7\xc7\x3f\xfd\xe5\xdd\xeb\x9b\xe9\xf9\xcf\xfc\xe4\xd7\x9f\x44\x5d\xde\xe2\x4f\xbf\x1e\xff\xc4\xce\x7f\xfe\xcc\x97\x9c\x9c\xfc\xf9\xb7\xfd\x43\xa3\xb1\x38\x80\x74\x28\x80\x44\x18\x80\x47\x41\x00\x38\x19\xbb\xf7\xc3\xef\xae\xc0\x8d\xe3\xef\x42\x27\x1f\x3b\xfe\x2a\xda\x27\x73\x31\x6f\xdb\xe7\x9a\xc8\x92\x1b\xc3\x72\x77\xf7\x06\xc4\x3c\x6b\xfe\x20\x27\xb0\x80\x53\x8b\xc2\xed\x1d\x10\xc4\xb4\x6e\xa4\xde\xdd\x6a\xee\x57\xf0\x80\x09\xc2\xcb\xaa\x60\x25\x13\x06\x04\xcf\xd8\xdb\xb6\xe0\x4e\x9c\xb4\x23\x70\xf1\x01\xf6\x21\x63\x2c\x77\x9d\x1c\x64\x63\xf0\x0c\xb2\x71\x90\x8d\x9f\x7a\xa2\x7d\xe2\x89\x62\x8a\x6d\x27\x9c\x2f\x4b\x7b\x4d\x19\x3c\xe4\x0d\x7f\x83\x9c\x03\x8a\xe3\x8e\xe7\x75\x27\x0e\xd8\x30\x9f\x46\x84\x1d\xbb\xb8\x15\x88\x21\xb3\x3b\x56\x34\x9d\x40\x37\xfd\x84\xfc\x15\xb1\x46\xa1\xa1\xd9\x75\xa8\xf7\x0b\xc8\x6d\x1b\x6e\x97\xae\xc2\x99\xba\x47\x7a\xad\x4b\x0d\x14\xaa\xcd\x10\xb1\xbb\xad\xdf\x54\x9c\x36\x52\xa3\x58\x8d\x88\x66\x06\x13\x80\x96\x6c\x6d\x99\xa8\x26\xcf\x4e\x8b\x7b\xba\xd2\xcf\x9a\x98\x24\x17\xdc\xac\x55\x46\xe8\xd5\x07\x20\xae\xb5\x2f\x9c\x4b\xab\xf3\x42\xc9\x87\xf9\x9c\x65\x3d\xad\x59\x24\x08\xd9\xec\x9b\x03\xcb\x1b\x2e\x6a\x3b\x5a\x3f\xab\x2c\x27\x52\xf4\x6a\x88\x7d\xe0\x86\xd4\xc2\xf0\xc2\x2a\xeb\x44\xb1\x45\x5d\xd0\xd0\x11\xe8\x46\xe6\x31\x7c\xf9\x84\xbc\x17\x19\x0b\xbf\xdc\xcf\x53\xbd\xd6\x80\x55\x1e\x0a\x66\x58\x3e\x82\x57\x77\x87\xae\x11\x05\xd7\x39\xf9\xcd\x52\xf6\x6a\xde\xcf\x65\x83\x72\x9a\xe0\x81\x6a\x20\x18\x24\xe7\xf3\xb9\x6d\x19\x8c\x6d\x21\x55\x49\x37\x7b\x45\x45\xde\xab\x75\x7b\x72\x21\xf7\x25\xa4\x20\x86\xb2\x33\xcf\x34\xcf\x59\x46\xd5\xb3\xb0\x60\xc9\x69\x61\x96\xb2\x5e\x2c\xdb\x5d\x11\x37\xe5\x44\x1b\xc0\x7e\xd9\xc9\xd4\xde\x73\xb1\xb6\xd9\xb4\xd5\x59\x44\xc6\x50\xb5\x92\x0c\x05\xc6\x3d\xed\xd9\xf6\x06\x04\x00\x01\xe7\xb8\xe6\x3e\x21\x0c\x00\x86\x2c\x0f\xb2\xf7\x04\xfb\x60\x12\x0c\x78\x42\x2e\x90\x8d\x63\xd4\x7d\x6b\x67\x4a\x70\x32\x02\x80\x9d\x87\x8a\xf6\x44\x17\xae\x35\xc0\x9b\xfc\x37\x20\x4d\xc6\x97\x53\xb1\xf2\xe9\x26\x00\x80\xc3\x34\xb9\x26\x03\xa6\xe8\xe7\x43\x6f\xce\xd2\x93\xd7\x00\xea\x9c\xd0\xab\xba\xd8\x5f\xf4\xf2\x2a\xac\x3e\x52\xb8\xea\x40\xca\xf6\xc8\xa7\x1c\x2d\x59\x76\x8b\x27\x2f\x67\x28\xde\x98\x23\xe1\x8d\x3d\x5d\x4b\x59\x17\x39\x52\xfe\xb6\xd2\x19\x24\x2d\xe2\x3b\xb1\x1b\x54\x31\xc2\xac\x85\x00\xbc\x28\xbc\x9f\xf8\x96\x2a\xb7\xdb\x1b\x45\x32\xbc\x18\xbd\xda\x3e\x17\xc7\x75\x09\xa4\x7c\x26\x05\xde\x93\x23\x77\x73\x97\x94\x8b\xbe\xaa\x5d\x3b\x06\xbe\x10\x52\x81\xd3\x7a\x4e\x84\xec\xf6\xa1\x7b\xe4\xd7\x7a\xd1\x5b\xe7\x68\x70\x48\x5b\xb5\x9d\x76\x39\xb1\xfd\xfb\x25\xb3\xd6\x5a\xb7\x2f\x7d\xc5\x76\xb0\xa2\xca\x4a\xc4\x89\xed\x8c\x36\x8a\x02\x87\xb3\x4b\xf6\x50\x7d\x37\xbe\x55\xba\x4f\x0d\x29\xa5\x36\xe4\x9b\x17\xc1\x1c\x47\xf9\xd1\xc6\x04\x4e\x22\x04\xfc\x1a\x35\x05\x68\x38\x28\x24\x6a\xf5\x7d\xeb\x45\xce\x84\xe1\x19\x2d\x82\x8e\xda\x4b\x62\x2e\xd5\x8c\xe7\x39\x03\xdc\x3d\x54\xab\x00\x93\xb3\xa7\xa5\x0b\xaa\x6b\xdb\x40\x80\x01\x69\x37\xd6\xbb\x1f\xae\x6f\x20\x86\xd9\xd5\xf7\x5a\x9b\xbf\x9f\x6a\x74\x67\x87\x60\xac\x50\x08\xf7\x33\xaa\xb3\x9d\x96\xbe\x0e\x48\x9f\x1d\x8f\xdd\x29\x81\xa3\x67\x29\xef\x37\xe5\x08\xb7\x2a\x9b\xc8\x7b\x67\x63\x1e\x00\x8e\x0f\x37\xfe\x9e\xb0\x77\xd8\xf8\x21\xa0\xb9\xae\x9b\xc4\x4d\xbb\xb1\xa9\x4b\xdb\xa4\xb7\x4c\x58\x51\xb6\xb9\xf0\xf3\x86\xe0\x8b\x2b\x70\x77\xc5\xf0\x56\xc1\x69\xa6\x86\x6b\x7b\x9a\xf1\x62\x84\x70\x53\x25\x5d\x79\xb9\x06\x94\xfd\xcc\x6d\xce\x67\xf6\xb2\xf6\xc2\x3e\x8e\x70\x3b\x41\xe0\x33\x81\x77\xc4\xce\xea\x99\xcc\x63\x7c\x5c\x6b\x70\x87\x46\xe9\xc1\x7c\x1e\xb8\x6f\x73\xd4\x79\x40\xe1\xb1\xeb\xda\x5d\xd5\xaf\x03\xe7\x60\xcf\x24\x35\xb2\xbf\xbf\x2b\x0d\xd6\xc1\x77\xe3\xb0\x42\xd8\x9d\x4d\xa1\x58\x81\xd7\xf1\x92\x57\x64\xc6\xcc\x3d\x63\x62\xbb\x9e\x96\xb3\x63\x7d\xe2\x1d\x35\x91\x9d\x68\xa1\xa1\x08\xb1\x9d\x90\x69\xe7\x98\xc3\xe5\x1e\x4f\x3b\x77\x21\xbe\x5b\x17\x51\x60\x78\x79\x31\xe3\x45\xd8\x96\xb1\x02\x40\x2a\x0e\xce\xd5\x0c\x96\x81\xb5\xb1\x31\xe6\xe8\xe1\x5d\x4a\x13\x37\xc2\xe8\xa1\x59\xfd\xce\x39\x0c\x1e\x65\x94\x89\x90\x24\x0e\xc7\x7d\x40\xa7\xb0\x7b\xd5\xba\xb9\x73\x5b\xbf\x11\xce\x1d\x08\x5e\x20\xbe\x63\x77\x4e\x63\x53\x7c\xfb\x2d\x61\x18\xa8\x4a\x60\x57\xf8\x27\x0d\x1f\x67\x12\x46\xce\x74\x24\xdc\x24\x19\x11\x37\xf9\x08\x2c\xa4\x1f\xf5\x6c\x62\xa4\xb9\x66\x59\xad\xb8\x59\x59\x5b\x80\x7d\xe8\xe5\xb0\x4e\x71\x56\xae\xbb\xdd\xe8\x04\x55\x7c\x17\x89\xac\xb0\xbc\xc8\x5a\xed\xee\xd6\xe3\x52\x0b\xf0\x15\xf7\xdb\xd1\x17\x73\xbb\x22\xe8\x1e\x81\x40\x09\x80\x96\xd7\x3b\xe6\x83\x2e\xa8\x63\xfd\xb3\xe6\x77\xb4\xb0\x62\xb8\xfd\x8b\x29\xa4\x8f\x86\x7f\xf4\x98\xc8\x76\x43\xf5\x6d\x1b\xde\x65\xe3\x4a\xe6\x6d\x34\xf7\xb9\x9f\x3a\xf8\x88\x7d\x30\x5f\x20\xaa\x1d\xa4\xd4\x54\xf1\x3b\x5e\xb0\x05\x3b\xd7\x19\x45\x15\x66\xdf\xc8\x88\xd3\x07\xfa\x05\x3b\x53\xc9\x42\x37\xbe\x27\xea\x93\xe7\xc1\x09\xb3\xa0\x5c\x40\xe1\xe9\x08\x6d\xd5\x35\xaa\x31\x7b\x9f\x1b\x4d\x2a\xaa\xec\x2e\xf4\x59\xfa\x18\xcf\x98\x49\x59\xb8\x4a\x45\xc5\xaa\xed\x17\xef\x0f\x61\x05\x07\xba\xfc\x45\xb0\xfb\x5f\x6c\x2f\x34\x99\x17\x74\xd1\xc6\x53\x30\xef\xb1\x7b\x3c\xa3\x89\x03\x1e\x9c\x68\x28\xc3\x53\xdb\x7b\xec\x9e\xae\x74\x4b\xa9\x10\xba\xdd\xfb\xdf\x28\x2f\x4f\x40\x9e\x50\x4d\x9a\xb6\xfb\xc5\x7b\xec\xf3\xcd\x09\x38\xf7\xcf\x4e\xa7\xbf\x5c\xff\xed\xfa\x97\xd3\x57\xef\x2e\x2e\x7b\xbf\xec\x52\x1a\x86\xd0\x16\xf3\x50\xf6\x69\x93\x91\x35\x91\x7a\x02\xb8\x55\xe0\xf3\x15\xb9\xbc\x8f\x04\xf7\xdb\x3d\xc5\x68\x3f\xef\x09\xad\xaa\x53\x55\x4a\x35\x55\x72\xce\x8b\xde\x1a\x7f\xaa\x13\xbc\xd6\x1d\x0f\xf3\x3d\x75\x1f\xb7\xd7\x0d\x52\x4c\x6e\x66\x93\x04\x57\x06\x07\x22\x43\xfb\x9a\xfe\xb0\xa2\xf5\x70\xfe\x91\x5e\xef\x62\xff\x43\xb4\xd7\x3d\xb3\x77\x02\x2f\xdb\x8d\x9e\x7f\x9e\xc2\x35\x50\xc8\x8c\x16\x50\xc2\x3a\x6e\xe3\x93\xc4\x86\xc9\x7a\xbf\x02\xc2\x11\xea\xb7\x33\x29\x24\xcd\x31\x86\x85\xc2\x3f\x67\xbe\xb0\x9a\x57\xbb\x20\x6b\x21\xaa\x23\x37\x48\xf6\x00\xed\x79\x86\x94\x4a\xb1\x46\xab\x59\x6b\x5e\x62\x3d\xb9\xa8\x26\xdf\x75\x73\x40\xdc\x28\x3b\x5c\x5e\xb1\x67\xae\x69\xc6\x1d\x30\x3e\x07\x7f\x0a\xf8\x39\xad\xa1\xbe\xaa\xd0\xc1\xf9\xd6\x2f\x43\x44\xed\xdb\x44\xc6\x33\xbc\xe4\x40\x76\x27\xce\x4f\xb3\x23\x31\x19\xfc\x96\xdb\x19\x9c\xb7\x42\xda\x6f\x1b\xaf\x83\x60\x46\x78\xe4\x7e\xfc\x11\xaa\xac\x7b\xf9\x9f\xc0\x39\xd5\x2c\x31\x19\x07\x47\xab\x52\x6c\xbc\x79\xbc\x62\xed\xfd\xab\x5a\x18\x5e\x32\x4f\x7f\x3a\x5e\xd3\x89\x14\xfe\xfa\x48\x37\xc5\x86\x92\x6c\x74\x42\x7e\x10\x70\x5e\x05\xcb\xc9\x98\x08\xd9\x2e\x11\x13\x73\xa9\x32\x70\x3c\xec\x75\x83\x67\xb4\xa2\x33\x5e\xf0\x18\x61\x9e\x6a\x83\x43\xed\xce\xa0\x3f\x80\x01\xca\xf3\xe7\xb9\x92\x15\xde\xc4\x9e\x97\x2c\x3e\x2b\xb3\xcb\x7f\x13\x96\x99\x72\x9e\xa8\x4e\x47\x16\x8a\x0a\xd3\xe2\xf7\x36\x36\xce\xbf\xa3\x0e\x92\x42\x09\xa0\x79\xba\x2a\xb8\xa7\xb9\x95\x19\xe1\xb2\x45\x9f\xab\x43\xab\xa8\x73\xe6\x07\x17\x70\xcc\x90\xe9\xfb\xeb\x8b\xff\xb3\x76\x6e\xfa\xab\x76\xf8\x1c\x76\x3d\x0d\x2b\x0f\x92\x6d\x9b\x2b\x57\x84\x7c\xd8\x38\x5f\xf7\xc6\x69\x1c\x44\x7b\x27\x03\xbf\xaa\xc3\x88\x33\x17\x41\xd7\x48\x19\xa5\xeb\x4c\x1b\xde\xcc\xee\x5b\x43\x80\xae\x62\xc4\x7e\x45\x18\x0e\x70\xe9\xc0\x5b\x6b\x24\xd6\xd9\x76\x6a\x57\x5c\x9d\x88\xf0\x76\x9d\xd3\x42\x7f\xa9\x57\x64\x8c\x6b\xa7\x52\x32\x7b\x27\x6b\x91\x86\x5d\x3c\x62\xc7\x35\x1d\x21\x39\x13\xd2\x38\x6f\x0a\xd8\x12\x72\x0e\xbf\x25\x98\xb3\x16\x14\x0e\xe9\xe8\x39\x11\x6a\xd6\x4d\xa0\x5a\x35\xf8\x15\xaf\x87\xa3\xfd\x52\xeb\x0d\x60\xa4\xd3\xab\xda\x14\xb6\x79\x04\x92\x41\x31\x9a\x23\x90\x86\x9a\x25\x32\xda\x97\x54\xdf\xb2\x1c\x3f\xf8\x42\x77\x66\x84\x90\xb5\x13\xf2\x5e\x14\xab\x2b\x29\xcd\xf7\x4d\xf1\xfc\x7d\xef\xd2\xbf\x36\xb0\xd4\xd0\xa1\x08\x3e\x62\x0a\x5d\x1e\xc3\x22\x82\x8c\x0a\x4a\xfe\xc7\x8a\x28\xbb\x20\xff\xae\x12\x4a\xd5\xe2\x54\xbf\x56\xb2\xee\xad\x4f\xa5\xb4\xfd\x5e\x5f\xbc\x82\x4b\xa8\x76\xe4\xcb\xc2\xa8\x55\x25\xb9\x30\xde\xfb\x94\x30\x80\xf2\x83\xa3\xb9\x0e\xa5\x4c\x34\xa3\x2d\x21\xef\xe8\x8a\xd0\x42\xcb\xc6\xbd\x25\xb6\x85\x3e\x7d\x5c\xd5\xfe\x7a\x26\xcd\x72\x23\xa0\xda\x37\x8d\xc6\x3e\x9b\xed\x8d\x02\x0e\xe7\x16\x9c\xc2\xc5\x46\xb3\x06\x18\x56\x2a\xc5\x32\x96\x33\x91\x7d\xa9\x27\x62\xdf\x94\xc2\x70\xaa\x2e\xa5\xb0\xe2\x75\xdf\xe7\xea\xa2\xf1\x15\xba\xd5\x08\x4f\x11\xb8\x95\x5d\x40\x8f\x02\xfd\x36\x08\xd7\x5a\xc7\xa0\x40\x2f\xe6\x10\x81\xc4\x4d\xf7\x97\x7a\xc6\x0a\xbb\xd8\xbc\x28\x3c\xf2\x1d\x61\x02\xbc\xa4\x0b\x46\xa8\x69\x0e\xa1\x91\x84\x09\x5d\x2b\xb7\x6f\x7a\x66\x38\xd9\xa7\x49\xce\x72\x43\xfb\xe1\xe2\x15\x79\x41\x8e\xed\xd8\x10\xbd\x37\xa7\xbc\x00\x46\x6f\x8f\x9b\x0d\xf5\xf1\xb9\xcf\xef\x8a\x9a\x02\x90\x23\x44\x2a\xbc\x5a\x46\x44\x48\xa2\xeb\x6c\x19\xa0\xff\x1b\xef\xac\x2b\xef\x14\x45\x0a\x32\x88\x9d\x74\xf7\xe1\x0f\x9a\xf5\x86\xab\xa6\xbc\x0e\x7f\x78\xc2\xeb\x30\x34\xd7\xec\xf1\xef\x2e\x18\x9e\xd5\x92\x19\x9a\x53\x43\xdd\x35\xe9\xbf\x30\xec\xda\xe1\xb2\x8c\xb8\x2c\x35\x7b\xcb\x45\xfd\x01\x0b\xa8\x1c\x44\x08\xe2\xfa\x1c\x7a\x44\x32\xbf\xd0\x32\x88\xa1\xf9\x68\x41\x82\x74\x89\x8b\xce\x31\x1a\x3d\x60\x01\xc3\x2d\x41\x91\x07\x13\x32\x1a\xa9\xc8\x65\xb9\xd1\x49\x6b\xb2\x33\x9a\x2d\x7b\xf7\x26\x40\x70\x0c\x07\xd3\x3d\xff\xde\xc1\x19\x48\x25\x4d\xe6\x67\x7f\x0b\x89\xa9\x5c\x37\x3b\x17\x33\x55\x0b\x3a\x63\x85\xa3\xa8\x45\xde\xf2\x84\x27\x2c\x91\x3f\x5a\xc9\x84\xf0\x94\x2b\x89\xa8\x2a\xda\x4c\x84\x7d\xfd\x17\x31\x0f\x49\x81\x10\x37\x0e\xe9\xd1\xce\x03\xf8\x23\xbf\x84\x79\xa8\x23\x14\x44\xb2\x3e\x0f\x56\xdb\xec\xce\x03\xe8\x5f\x87\x3e\x0f\x9a\x65\x99\x2c\xab\x03\x41\x2d\xde\x20\x22\xde\xf6\xe8\x73\x11\x8a\xdd\x2f\xd3\x28\xe8\xb1\x2b\x8b\x45\x0d\xde\x83\xbe\x36\xd6\xff\x0e\xae\x73\x90\x76\xeb\x77\xbc\x6b\x3d\x1a\x1d\xd9\xb4\xe8\x5e\xf8\xef\x78\xe3\x0d\x90\xc8\xce\xf3\xe4\x90\xc8\x80\xbd\x9e\x82\x7b\xbe\x03\x4f\xfc\x1a\x80\x91\xd6\x08\x80\x79\x65\x02\x18\x79\x2a\x6a\x96\x23\x97\x3d\x7a\xc7\xbc\x78\xbe\x45\x8f\xd7\x11\x48\x1c\xdf\x21\x2f\x6e\x5a\xfc\x28\xb2\xda\x27\xc5\x51\x6e\xc3\x4e\xe2\x77\x2e\xdf\xdf\x84\x9c\xf6\x54\xac\x90\xaf\x31\x82\x61\x0c\x9f\xc3\x53\x2b\x1e\x13\x5f\xb9\xbe\x8a\x8f\x0d\xaf\x8c\x7a\xdf\x76\x74\xe5\xd3\x9d\xd2\xcf\x43\x5c\xae\xe3\x2d\x93\x76\x61\x1d\x7c\xb9\xd9\x46\x82\x95\x8b\x3e\x02\xee\xea\x3c\x20\x07\xc8\x5f\xb1\x47\xde\xca\xce\x3c\x81\xa0\x0e\x9d\x20\xb4\x88\x2d\xe1\x86\xcf\x36\x2f\x88\x3f\x05\x0d\xad\xfb\xa6\x37\xa0\x5b\xfc\x34\xa6\xf5\x4f\x78\x30\xbe\x6c\x4f\x44\x61\x2d\x8a\x2f\xdc\x0f\xb1\x28\x35\x3d\x53\x2c\x47\xcc\xd2\x75\xc5\xb2\x43\xb9\x2d\x5e\xbf\xbb\x3e\xed\xf6\x0c\x74\x61\x57\xc4\x82\xc1\xef\x09\xcd\x4b\xae\x35\x04\x7c\xd8\x6c\x29\xe5\x6d\x54\x93\xc7\x3e\xed\x75\xc1\xcd\xb2\x9e\x4d\x32\x59\x06\x19\xb0\x63\xcd\x17\xfa\xb9\x93\x28\x63\x3b\x71\x27\x84\x8b\xa2\xc9\x1a\x06\x6f\x21\xf0\x72\xf5\xa7\x75\x0b\x07\x4f\xb2\x66\xf4\xb0\xf5\x20\x57\xa4\x81\x49\x6f\x4e\x0f\x54\x1a\x81\xcd\xbb\x77\xad\x63\x73\x57\xc5\x55\xfe\x5b\xdb\x59\x0f\x8c\x3d\xac\x9a\xe1\xa2\x38\x5b\xe7\x11\x8d\xd7\xbd\x4f\x92\x53\xfa\x33\xa6\xa3\xd0\xa8\x29\xcf\xdc\x9b\xb6\x4b\x21\xaf\x1d\x9f\x77\xd8\x99\xba\xf9\xef\x10\xde\x3e\xb2\x7f\xe9\x21\x92\x47\xa9\x0a\xbd\x9c\x16\x85\x5d\x48\xea\x48\xd0\x02\xa4\x25\x98\x26\x5d\x76\x39\xe4\xbf\xb5\xc6\x42\x38\x0a\xb8\x48\xe2\x84\x02\x72\x90\xd9\xcb\xc0\xf1\x57\xd8\x0d\x04\x6d\x53\x52\xf2\x0f\xb6\x87\x61\x8b\x5d\xc2\x56\x08\xfc\x6f\xff\x75\x44\xa5\x6b\x02\xe0\x83\x86\xbf\x7c\x64\x57\x28\x6c\xc4\x27\x2a\x1b\x7b\x6d\xd9\x5f\x5c\x32\x63\x0d\x35\x9c\xb7\x30\xfa\x60\x0d\x2b\x55\x27\x38\x0c\x31\x91\x61\x12\x46\x87\x93\x4a\x8a\xc8\xf3\x00\x91\x62\xd7\x27\xab\x83\x78\xe5\xed\xa9\x22\xc7\x64\x4b\x2a\xcd\x93\x45\x90\xc9\xe7\x47\x91\x1f\x31\x56\x45\x0e\x25\x5e\x15\x29\xf5\x43\xde\xdd\xbd\x71\x9e\x84\xdc\xbf\x7c\x13\xbc\x34\x95\xf9\x06\x25\x30\x10\x0b\x73\x5a\xf4\x2f\xaa\x7a\x31\x0f\x69\x34\x85\x74\xee\x11\x2c\x35\x8e\x98\xf9\x0f\x2c\xab\x0d\xcb\x1d\x33\xb8\x73\x29\x23\xab\x70\xb7\x37\xbd\x7b\xe0\x13\xe6\x67\x0c\x00\x4a\x7a\xd4\x96\x45\x73\xb6\x4e\xc3\xb5\x3a\x22\xff\x17\xa4\xa4\xf6\xe4\x56\x05\xbf\x63\x82\x69\x3d\x6d\xfe\xbc\xef\x54\x00\x49\x46\x46\x85\xb7\xad\xec\x99\x76\x1e\x6e\xc7\x00\xee\x38\x35\x66\x8c\x54\x54\xd1\xd2\xde\xc1\x9a\xb8\xe5\x99\xb1\x05\xc7\x14\xbd\xe0\x52\x6c\x28\xc4\xfb\x11\xdc\x82\x61\xc3\x0d\x29\xf9\x62\x89\xa7\x85\x50\x52\x48\xb1\x20\x1e\x37\x56\x48\x9a\x13\x10\x2c\x52\x91\x7b\xaa\x4a\xab\x0b\xd0\x6c\x09\x20\x34\x2a\x48\x5e\xdb\xf3\x40\x80\xf0\x7a\x35\xd6\x86\x1a\xe6\x88\xe9\x7a\xfb\xe0\xfc\x34\xed\xa1\x5c\xeb\x63\xd7\xc9\xdf\x33\xb7\x8d\x3d\x69\x49\xbc\x20\xe7\x1f\x58\xd6\x1c\x6b\x64\x7f\x2e\x4b\x20\xef\x93\xfe\x38\x7b\xe6\xb6\x68\x65\xf0\x40\x4c\x65\x37\xc2\x43\xd1\x4d\xce\xdc\x84\x73\x6f\x7d\xe2\x8f\xd6\x1e\xed\x2e\x82\xf6\x41\xac\xa0\x80\x11\x30\x55\x4b\x75\x6b\x4f\x2e\xf2\xf5\x48\xd5\x54\xce\x8f\xea\x96\xef\x07\xd0\x57\x4b\x69\xc8\xf1\xd1\xf3\xa3\x93\x8d\xbd\x70\xa4\xc3\x34\x03\xcc\x4e\x6e\x07\xa4\x79\x59\x15\x2b\x18\xc3\x11\x96\xdf\x8e\x24\x13\xf4\x80\xd5\xa6\x14\xa5\x5e\xb2\xa2\x18\x11\x6d\xd5\x5f\xea\xeb\x79\xe0\xa7\xf6\x4b\x46\xd5\x19\xba\xc9\x8e\x8f\x7e\x3d\x1a\x11\x66\xb2\x13\x72\x2f\xc5\x91\xc1\x80\x07\xb9\x01\x1b\x32\xaa\x4f\x4d\x27\x56\xb2\x26\x82\x31\x77\x76\x9a\xc2\x51\x19\xb5\xe6\x4f\x8d\x3a\x3a\x12\x60\xb0\xa2\x88\xd3\xe7\xce\x3f\x70\x63\x55\x11\x53\x83\x9b\xe2\x05\x5a\x0a\x0c\x38\xe1\xa9\x86\x9b\xee\xf9\x92\xd1\xc2\x2c\x57\x8d\xf5\xf2\x2f\xa6\x24\xd4\x0a\x15\xee\x37\xf1\x3a\xd4\x01\xa4\x70\x1e\x6e\x32\xa5\x55\x30\x6a\xc5\x6e\x96\x8a\xe9\xa5\x2c\xf6\x9e\x52\xf9\xce\x95\x5e\xcb\xa4\xd0\x56\xa6\x58\x13\xdb\xf5\x51\x37\xd9\x6c\xa8\xb3\xb8\x5a\x07\x12\x4e\x99\x62\xb9\x53\x96\x5c\xf9\x89\x25\xbd\x03\x4d\xc1\xea\x73\x2c\x8f\x31\x4d\x42\x9b\xe8\xf7\x93\xa6\x87\x4d\x0a\xdc\xcb\x03\x81\x6d\xf6\xe4\x71\x5c\xa8\x2a\xcd\x2d\xfd\xfa\x6a\x7a\xd6\xb9\xa5\xe1\x83\x37\x70\x8c\xcf\x96\x2c\xbb\xbd\x8a\xab\xac\x7a\x20\xd0\x82\x4a\xaa\x7d\x2a\x06\xb6\xf9\x64\x5a\xc1\x54\x2a\x43\x44\x5d\xce\x98\xf2\x0e\x85\x05\xac\x22\x53\x77\x3c\x63\x13\x72\x89\xbf\xf3\xc1\x79\x5f\x09\x98\x8a\x05\x23\x2f\xed\x81\xf8\xe3\xb7\xdf\xfe\xfe\xdb\x78\x19\x1d\x4f\x6a\x9a\x86\xd0\xd4\x0d\xfc\x50\xd4\xae\x6b\xec\xce\x36\x67\xb3\xeb\x29\x18\x75\x05\xcd\x9a\xb5\x59\x6c\x3f\x74\x71\x5e\x49\xcd\x18\xd9\x12\xae\xb0\xa2\x03\xff\x33\x2b\xe4\xec\x79\x49\xb5\x61\xca\xda\x38\xee\x5a\x1f\x03\xf5\x2f\x17\x8b\x49\x99\x9f\x44\x94\xfa\x27\x81\x59\xbd\x51\xde\xad\x43\xf9\xf2\x40\xa9\x36\x3b\x29\x7b\x77\xc1\x13\xdf\xcb\xef\xc8\xb3\x7e\x95\xbd\xec\x12\xbc\x66\x69\x32\xd1\xde\xdc\xdc\x4c\x5f\x33\x13\x0a\x6c\x01\x1f\x92\xd7\xe7\x37\x4d\xe9\x6f\xbb\xbb\x30\xa9\x69\x90\xda\x31\x52\x7b\x29\xe3\x6a\xbf\xa7\x8e\xbb\xa0\x28\x81\x3a\x65\x42\xb0\xcc\x2e\xf4\xa8\x53\x65\xd6\xe3\x10\x2f\xa6\x13\xf2\x37\x59\x83\xca\x45\x67\xc5\x8a\xdc\x53\x64\x17\xe8\x47\xef\xdc\x3e\xcf\x6c\x37\x9e\x59\xa9\x65\x77\xf5\x1b\x46\x73\xac\x1b\x09\xae\x9d\xbd\x9f\xd5\xa0\x4f\xc9\x96\xed\xac\xd6\x46\x96\x64\xe9\x86\x8a\x73\xd8\x16\xd7\x47\xdd\x08\x8f\x20\xc4\x7e\x34\x51\xac\x42\x6b\xc9\xfd\xcd\x57\x61\x0b\x6d\x48\x21\x9c\xe7\xa0\x32\x0f\x25\x59\x38\x55\x4e\xd1\x07\x17\x26\x77\x32\xaa\xb7\x4b\xac\x7d\x92\x54\xf8\x20\x89\xaa\x7c\x90\xd8\xe2\xfc\xed\x4b\xe2\x83\x90\x69\xea\x85\xd8\x47\x44\x86\xd7\xf0\x49\x5b\xad\x80\xb8\x50\x9b\xdb\x5c\x08\xc0\xb1\x1d\x8d\x65\x08\x24\xde\x99\xdc\x14\x33\xa5\x42\x0a\x9e\x61\x38\x83\xd4\x95\x14\x44\xd6\xa6\xaa\x0d\xb8\x82\x32\xaa\xd9\xf8\x8e\x2a\x6e\x05\xaa\x6d\xbf\xfd\xc3\x5a\xd8\xd3\x6e\xa4\x04\x3f\x49\x13\x74\xc6\x1e\xc7\x77\x33\x91\x36\x43\x7c\x31\x8a\xc4\x2b\xbc\xb1\x38\xf1\x3b\x9a\x1c\xb4\x0f\x86\x60\x3d\xef\x65\x3a\xb3\x8e\x9a\x25\x20\xfb\x20\x96\xe5\x81\xa1\x20\x38\xad\xd9\x70\x00\x89\x37\x49\xad\xd8\x48\x91\x00\xf1\x76\xa9\xd6\xec\x60\xdb\xc3\xcd\x39\x4c\x84\x35\x79\x7c\xb3\xda\x0d\xcb\xb7\x40\x05\xb9\x38\xbd\x3c\xfd\xe5\xfa\xc7\xb3\x5f\x2e\x4f\xdf\x9d\xc7\xbc\x3a\xba\x8e\x7b\xca\x4a\xee\xc9\x6a\xb9\x3f\x42\x35\x77\xff\xe8\x6c\xc9\x0e\x07\x66\x72\x0d\xbd\x09\x09\xc2\x9c\x0d\x10\xd4\x26\x8e\x63\x8c\x23\x6b\x4e\x53\x2b\x78\xf6\x2a\x71\x1c\xaa\xe0\x15\x2b\xe8\xea\x9a\x65\x52\xe4\x7b\x47\x67\x5f\x36\xc2\x46\x63\x87\x9a\x92\xcc\x6c\x8d\x31\xcb\x17\x65\x75\x85\xa4\x3d\x3e\x20\x84\x34\xe0\xf8\x7a\x47\xad\xc9\xe1\x45\xae\xc9\xc1\xb8\xc7\x2b\xa6\x38\x20\x82\x0e\x61\xd7\xbc\x91\xf7\xae\xba\xfa\x31\x17\x7e\xe7\x9c\x04\x5e\x9a\x36\x3c\x12\xcf\xa6\x66\x24\x79\xf9\xc2\x37\xf2\xf5\xc5\x3d\x1c\xd2\xe7\xa0\x23\x5f\xae\x8f\x9f\x0e\x7d\xb5\xb0\xa5\x6e\xf8\x2b\x06\x3f\x44\xd6\xc4\xf8\xcb\x49\x93\xa7\xf6\x12\xfa\xd3\x88\x22\x2a\x72\x0f\x39\xfb\xfa\xf6\x89\xc9\xaa\x6b\x99\xdd\x26\x72\xbb\xde\x9c\x4d\xf1\x6d\x6b\x78\x16\xbc\x81\xad\x96\x29\x09\xb5\xdf\x02\x05\x74\x70\xba\x1e\x8c\xd3\xf5\x08\xd3\xba\x68\xf1\xdd\xce\x0e\xd4\xa3\xc1\xda\x6a\x1f\xaf\xf8\xa8\x6e\x35\x92\xc1\xda\x7a\xe0\x19\xac\xad\x1d\x1e\x4c\x22\x01\x30\xe8\x6b\x45\x33\x36\x3d\x24\xe5\xcd\x0b\x10\x92\xd7\xca\x95\x78\x6b\x74\xb8\x46\x5c\x08\xc6\x72\x94\x1f\x6e\x28\x8c\x2c\xec\x48\x10\x1e\x0d\x3e\xc4\x16\x58\x5c\xab\x08\x35\xef\x66\xe9\x5e\xed\x54\x5c\x1f\x64\xde\xd6\xbb\xd6\x36\xa9\x1a\x62\x72\x5f\xc1\xc3\x1d\x27\xdb\x79\x28\x7b\xce\x44\x7f\x77\x3a\x0d\x57\x90\x68\xbe\xb0\xd3\xe5\xaa\x34\x23\x46\xb8\x29\x83\xd7\x76\xc4\xb6\x3a\x97\x2a\xe3\xb3\x62\x45\x96\xb4\xb0\xc6\xd2\x3d\x37\x4b\x42\xc9\x2d\x2f\x0a\xf7\x9a\xfe\x13\x75\xcd\x5c\xae\x26\x6a\x34\x85\x14\x0b\x98\x0c\xea\x72\x32\x3e\x54\x2c\xb3\x6d\x66\x05\xa3\xa2\xae\xb0\x9f\x56\x3f\x5a\xc9\x3a\x41\x5a\x86\x0f\x7c\x37\xfa\x94\xe0\x8e\x7e\x04\x8b\xa8\x7d\x74\xcf\x77\x93\x6b\xc9\x7b\xb3\x64\xea\x9e\x6b\x86\x45\xdd\x7a\xf7\x09\xfb\xd2\x2d\xe9\x86\x9f\x35\x14\x2a\x2e\x73\xd0\x6e\x0b\x48\x65\xed\xdd\xd6\x8f\xf0\x5e\x2f\x5a\x85\x14\x63\xc1\x16\x48\xd4\xe0\x04\x1a\x22\x3a\xb1\x7d\xc4\x0f\x36\xd9\x06\xda\xc8\x8a\xf0\xb2\x64\xb9\xb5\x8f\x8b\x15\xb9\xe3\xb4\x77\x4f\x80\x14\xa2\xdd\x51\xe4\x58\x48\x22\x2b\x7b\x75\xd5\x82\x9b\x15\x44\xf4\x96\xb5\x21\xb9\xbc\x17\x11\xf9\x56\x37\x0e\xe6\x40\xc9\x8c\x19\xea\x7c\xe0\xf6\x10\x38\x95\x4c\x13\x26\xe8\xac\xb0\x67\x0f\x92\x04\x6e\xb6\x6e\x00\x32\x67\xd4\xd4\x8a\x91\x05\x35\x11\x52\x62\x8b\x36\x8f\xeb\xf9\xf1\x6d\xc7\xb5\x8b\xd7\x45\xf2\x30\x1f\x06\xb3\xa1\x3d\xd1\xb2\x36\x07\x72\x8f\x3c\xe4\x3a\x42\x8a\x8b\xc0\x48\xe4\x25\xd3\x44\xd6\x89\x6a\x3f\xbc\x74\xcd\xa5\xb4\xf0\x06\xbf\xd3\xd6\x47\x9b\x9c\xf7\xaa\x00\x9c\x62\x8b\x3d\x40\xde\xef\xf2\x70\x03\xfe\xca\x59\x3d\x9f\x33\x05\x37\x1d\x74\x78\x03\x76\xdf\xd4\xd4\xf2\x77\x58\x3f\xe7\xad\x03\x7c\x31\x33\x82\xda\x01\x8e\x4c\xe2\x81\x26\x1d\xc9\x26\x94\xcc\x55\x4c\x03\x17\xbc\x20\xe7\xef\xbf\xef\xb7\x45\x53\x54\x16\x88\x4b\x59\x85\x71\xbe\x17\xfd\x30\x89\x69\xf7\xc3\x36\xd6\x17\xb7\x2d\xb2\x42\x6a\x97\x1e\x0d\xeb\x92\x2d\xa9\x10\xcc\x3b\xa3\xb8\x01\x4f\xf6\x8c\x31\x41\x64\xc5\x10\x94\xd7\xab\x33\x94\x68\x2e\x16\x05\x23\xd4\x18\x9a\x2d\x27\xb6\x77\xc2\xef\x85\x36\x0f\xd9\x7d\xa2\x8d\x62\xb4\xc4\x3d\xa1\x58\x49\x39\x36\x4f\x68\xa6\xa4\xd6\xa4\xac\x0b\xc3\xab\xe6\x65\xfd\xbc\x88\x0c\x18\x21\x34\xa6\xa5\xfa\xb5\x82\xb4\x92\x36\xe1\x79\xd4\xf6\xd0\x0d\x5f\x86\x85\x83\xc0\x75\x36\xb2\xbf\x65\x65\x65\x56\x4d\x62\x62\x3f\x1b\x68\xce\x95\x36\x24\x2b\x38\x13\xc6\x8d\x0c\x29\x07\xa1\x0f\x23\xaf\x4e\x0b\x37\x23\xda\x4d\x89\xc8\xc1\xf8\xae\x8c\xc6\xfc\xbb\xa6\x13\xfe\x55\x39\xd7\xce\xd7\xa1\xfb\x65\xff\x51\x5f\x25\x06\x37\x8e\x9f\x11\xd8\x3a\x5e\xc1\xc1\x1e\xb9\x8f\x82\x2e\x04\x35\xaf\xdb\xdc\xc9\x38\xb9\x02\xb5\xbd\xfd\xb9\x1e\x75\x38\x07\x5a\xdb\x02\x52\x61\x36\xa4\x0e\x6c\x28\xc1\xee\xec\x39\x60\x19\xb3\xaa\x28\x4d\x28\x64\x9e\x5c\xc6\x04\xba\xdc\x3b\xa6\x35\x5d\xb0\x69\x4f\x38\x42\x0a\x81\xd3\x3a\xda\x00\xc7\xd0\x6e\x9b\x25\x43\xa2\x2b\x23\x83\x4f\xc2\x24\xaf\xd0\x78\x2c\x71\x20\xbd\x7a\xe0\x8d\xa6\x7b\xc5\x8d\x61\xb0\x4b\xa1\xaa\x12\x00\xd0\xd6\xc9\x3b\xbb\xc9\x65\xbd\xda\x73\x93\x1e\xb6\x67\xd5\x0f\x91\x63\x9a\xd6\x8c\x91\x99\xe2\x6c\x4e\xe6\x1c\xf2\xc6\x20\xa3\x6a\x84\x55\x08\x28\xe0\x76\xa9\xd6\x4c\xc1\xb0\x9d\x5b\xc0\x0f\xbf\x5f\x7f\xfe\xea\xc6\x6f\x54\x2d\x32\x1a\x94\xcb\x04\x6e\x31\x3e\x27\x0b\xc8\xe2\x72\x46\xf0\x1f\x5e\xfc\xe7\x1f\xc9\x6c\x65\xf5\x35\x30\xc4\x8c\x34\xb4\xf0\x1d\x20\x05\x13\x0b\xbb\x8a\x20\x72\xfb\xc9\x8d\x0e\x3f\x55\xb3\x38\x05\x2f\xb9\xc1\x09\x7a\xf9\xcd\xed\x2c\xea\xe8\x81\x7c\x7c\x9e\xb3\xbb\xe7\xc1\x16\x1a\x17\x72\xd1\xef\xad\x67\x29\xb2\x89\xa3\xfc\x6c\x5b\x4e\xb4\x2c\x78\xb6\xda\xd7\x99\xf6\xc5\x4b\xc8\x52\xde\xa3\x33\x67\xf3\xa8\x06\x54\x2f\x95\xac\xea\x02\x26\x8e\x7c\xdf\xf0\xf3\xd5\x9a\xad\x53\x1f\xc5\x3a\x09\x03\x69\x07\x41\x54\xd7\xec\xda\x9d\xe3\x52\x18\x7d\x37\xa5\x23\x9e\x70\x31\xb7\xa6\x0e\x49\x6f\x6f\xdc\xf7\xb4\x28\x66\x34\xbb\xbd\x91\x6f\xe5\x42\xbf\x17\xe7\x4a\x49\xd5\x1d\x73\x41\xed\x9d\xbe\xac\xc5\x2d\x54\xb4\x6d\xc9\x68\xe5\xc2\x61\x0a\x3d\x7f\x40\x30\xba\x5e\x9d\xf1\xa3\x44\x7a\x50\xaf\x92\x78\x1f\x5c\xdb\x32\xfb\xc0\x5b\x47\x9b\x20\xcc\xf6\xb9\x6f\x02\x3e\xeb\x8c\x43\x87\x47\xfb\x9b\x17\x7f\xf8\x13\x0a\x17\x22\x15\xf9\xd3\x0b\x48\x39\xd6\x23\xbc\x00\xe0\x06\xb6\xaa\x56\x49\x8b\xa2\x6f\x94\x20\x14\x01\xdf\xf7\x2e\x14\x7d\x00\x47\xde\xec\xed\x74\x7f\xb6\xc9\x78\x73\xf3\x37\xb0\x17\xb9\xd1\xac\x98\x8f\x90\xed\xa5\x71\x6b\x1d\x81\x76\x75\xe4\xae\xbc\xfe\x4c\x41\xfb\x37\xda\xee\x64\x51\x97\xec\x15\xbb\xe3\x59\xbf\x00\x66\x67\x55\x3a\x6f\xf3\x6e\xfa\x82\x6b\x20\x01\x9a\x15\x32\xbb\x25\xb9\xfb\x65\x00\x95\x5f\xaf\x70\xdd\x7f\x16\xfa\x26\x0d\x44\x24\x0b\x3c\x38\xfe\x4e\x9a\x40\x49\xab\xaa\x61\x28\x51\xf4\xbe\x33\x19\x20\x9a\x80\x1d\x35\x32\x8c\x18\x1d\x4c\x8f\x0d\xa5\x8f\xdd\x88\xec\x35\xd5\xfb\x15\xbd\x73\x0b\xe2\x23\xf1\x6d\xef\xfb\xc7\x31\x3b\x1b\xa2\x7d\xa1\x3f\x0d\x15\xfc\x1b\xf9\x16\x36\x98\xb1\x1a\xca\xa1\x66\x63\xa0\x06\x69\xb7\x0f\xdc\x32\xfd\xdd\x97\x09\x82\xa1\x71\x39\x12\x9d\x79\x11\x4d\x10\xba\xa4\xc6\xd9\x47\x3e\xca\x4e\x49\xc5\x94\xe6\xda\xaa\x4e\x3f\xc2\x81\x3a\x2b\x28\x2f\x83\xf0\xdd\xbe\x26\x61\x13\x51\x5f\xd2\x6a\x7c\xcb\x56\x3d\x37\x5c\xe4\x71\x79\x08\xe0\x5f\xd2\xaa\xe7\x3d\x00\x05\x7b\xe3\xaf\x81\x9e\x97\xf3\x54\xe6\xae\x1f\x70\x3d\x60\x79\xe0\x47\x31\x63\x13\xea\x40\xfb\xbe\x72\x7e\x6c\x17\xae\x7b\xe3\xd8\x4f\x9a\x2b\x07\xbf\xf5\x35\x5d\x34\x30\xbe\x2f\xf5\x9e\x69\x3a\x9f\x48\x9c\x46\x21\x9d\xe0\x76\x72\x3b\xa3\x7b\x1d\x75\x1c\x5a\x78\x32\x03\xd3\xd7\x39\x9a\x26\x58\x14\x20\xa2\x03\xf6\x28\xba\x46\xc9\xd1\x77\x47\x7b\xbd\xe3\x70\x65\x94\xac\xe8\x02\x2c\xd3\x43\x58\xa0\xf5\x3e\x85\x1c\xb4\x4b\x79\x8f\xbf\x47\x74\x49\xe5\xbe\xc5\xf2\x96\xc8\x7c\x29\xa3\x56\x07\x91\x83\x7e\x47\x38\xeb\x1a\xb9\x0a\xef\xe9\x8a\x50\x25\x6b\x11\x95\x06\x0d\x81\x91\x26\x70\xf6\x6e\x6d\xb0\x97\x52\x30\x1f\xa4\x8f\x69\xe5\xa6\xe5\x30\xe7\x1a\xf1\x0a\x5c\x90\x97\x93\x97\x2f\xa2\xfb\x7e\xc5\xb2\x5a\x69\x7e\xc7\xae\x5c\x8d\xf3\x20\xa8\x72\x31\x9f\x4a\xad\xf9\xac\x80\xc4\x2d\x23\xc9\xb9\xa0\xb3\x82\xe5\x9b\x03\x6d\x80\x23\x30\x62\xa9\x42\xb6\xd2\x88\x1e\x1e\xe3\x09\x0e\x01\x9f\xb6\x81\x08\xd4\xc7\x61\x69\x92\xb0\xae\x6b\x9a\xe4\x65\xa3\x49\xe2\xbd\xb7\xd7\xb1\xfa\xc2\xf7\x87\x20\x49\xde\xb9\xd8\x40\x5b\xd9\x9e\xfb\xca\xc9\xf0\xd1\xbd\xe2\xc6\x1d\xee\x7b\xae\x19\x39\x06\xaf\xc4\xda\x66\x8c\x22\x68\x0e\x7d\x58\x91\x15\xf0\x53\x10\x2c\xab\xf5\xa3\x7b\x08\xab\xb4\x29\x4f\x5a\x04\xfe\xbd\x73\x60\xb5\x2b\xe8\xa4\x7f\x7b\x2f\x2f\xa9\xc8\x8b\x28\x99\xd1\xcc\x4a\xb1\x8a\xe2\xc2\xb9\x98\x93\x50\x24\xba\xf8\x65\x50\x4d\x62\x49\x35\x11\x92\x94\x8c\x02\x40\xd3\xde\x2e\x5e\x0a\x76\xb8\x9a\xd3\xf5\x01\x37\x3b\x5e\x63\xe1\x85\xe0\xc4\xf5\x2b\xae\x9d\x78\xb6\x72\xc4\x59\x20\x08\xeb\x28\x69\x1e\x93\xda\x1d\xcc\x69\xbb\x78\x93\x16\x34\xb9\xde\x93\xf6\xe2\x58\xeb\xcb\x63\xf4\x63\xe4\x4a\x90\xdb\xe6\x6b\xc0\x09\x6e\x71\xcb\xb5\x20\x99\xa8\x68\x36\x3e\xeb\xc3\x6d\xae\xc5\x8d\xb1\x6e\xef\x71\xd3\xe1\x88\x3e\x7c\x7a\xa8\xa3\x40\x16\x7a\x8c\x28\x86\xd4\x5d\x0d\x14\x97\xf1\x18\xc7\xe4\xed\x83\x12\x8d\xbb\x67\xc1\x04\x53\xd4\xc5\x15\x3c\x44\xd4\x91\xaf\x50\x2d\x45\xec\x81\xf8\xc4\x86\xb3\xf2\xfe\xd3\x6a\x0a\xfe\x59\x44\x47\x40\xcf\x39\x96\x6a\xed\xb4\xbb\x88\xc9\x36\x8d\x25\xe5\xa8\xd7\xa8\xb9\x70\xf3\x07\x9c\x9f\x76\x51\xfe\x59\xf3\x3b\x5a\x30\xe4\xb0\xf7\xa2\x61\xaf\xca\x84\xae\x67\x87\x6a\x36\x3a\xfb\x10\xcc\x8e\xed\xa0\x87\x07\x2d\xc8\x44\xfa\xc4\xb3\x67\xe4\x18\xdb\x38\x42\x92\xdd\xfd\x2a\xb9\x6e\xad\xce\x3f\x54\x11\x95\x5b\xd3\xad\xd7\xf9\x87\x8a\x02\x4e\xa3\x3a\x88\x85\xfb\x6f\xb6\xa4\x77\x0c\x38\x8d\x79\x41\x55\x01\xa0\xf4\x6b\x9c\x32\x32\xab\x0d\x61\xe2\x8e\x2b\x29\x4a\x7b\xfc\x80\x7c\xc6\x4a\x26\xc5\x80\x0c\x3e\x63\x9a\xfc\xf6\xf8\xc7\xd3\x2b\x48\x5a\x3a\x71\x6c\xf9\x6e\x7c\xb5\x06\x7e\x80\xb5\x31\x04\xaf\x3b\xc4\xfd\x46\xfc\xd8\xed\x76\x01\xfd\xc4\xcf\x85\x1d\x5b\x59\x9b\x9a\x16\x40\xfd\x9c\x15\xb5\xbd\x0b\xf7\xb6\xb3\xd3\xfb\xc0\x63\x3c\x79\x29\x5d\xe0\x8e\xf8\xfb\x15\xef\x75\x5c\x53\x1c\xd4\xb3\x60\xbf\x6e\xd0\x90\xf7\xae\xf1\xb0\x85\x84\x72\x43\xd1\x39\xd2\x0d\x31\x65\x98\x87\xe3\xee\xe2\x7e\xf0\x0c\x28\x9d\x80\xc9\xdf\xbe\x26\xe9\x86\x87\x11\x6a\xb4\xec\xdd\x87\xdf\xe3\x30\xa4\x3b\x06\x3d\x1c\xd1\x69\x76\xbd\x90\x39\xdb\xbd\xaa\x50\xdc\x3e\xbf\x74\x6d\x06\x89\x4f\x5c\xb8\x5b\x07\x4b\xe7\x42\x41\x12\xcc\xf1\xd3\xd9\x92\xe5\x75\x0f\x95\xeb\x62\x8e\x60\xa0\x51\xe7\x75\x94\x64\x54\xe4\xdc\xee\x15\x4c\x05\xc0\xd7\xdb\x43\xe6\xf4\x7f\xdf\xa0\x0a\x6b\x96\x36\x1f\x5e\xf6\x60\x5e\x03\x88\xf5\x86\xba\x3d\x0a\xab\xf6\x3a\xc2\x04\x50\x49\x73\x46\x66\x2c\x93\x25\x03\xec\x70\x25\x05\xea\xe3\x9e\x52\xa1\x49\x20\xc1\xc8\x31\x0e\x6d\xd7\x2e\x05\x8e\x50\x77\xa1\xfb\x63\xa4\x1b\xae\x7d\x05\x68\x31\xbb\xd6\x5c\xb5\xcd\xdb\x79\x44\xd8\x46\xb3\x32\x44\x0a\x42\xdb\xa2\x9d\x76\x04\xbb\xf6\xe7\x73\x92\x69\xda\xa5\x1a\xb3\x3b\x0e\xf4\x03\xcf\xa9\xd6\x7c\x21\xc6\x95\xcc\xc7\xb6\xd9\xe7\xbf\xb1\xff\xdd\xf9\x28\xf5\x14\x00\xb6\xad\x6b\x56\x80\x64\x7e\xea\xf3\xe3\xdb\xc5\x3d\xad\xfd\x4f\x78\x88\xbc\x75\x06\xf9\x05\x6b\x0b\x37\xe7\x06\xd7\xab\xcf\x32\x5d\x6f\x69\x07\x3d\xae\xf8\xbe\x23\x4d\x0a\x3a\x63\x85\xfe\xd4\x76\x01\x8c\x43\x9f\x1e\xec\x98\x80\xe5\xaf\x1d\xba\x75\xb7\xf4\xd8\x24\x3d\xc2\x9d\xbe\x12\x1d\x2d\xa6\xbd\x63\x86\x69\xae\x28\x7b\x3b\xf5\xa4\xff\x93\x3b\x76\x39\x6e\x87\x5f\x37\xae\x4e\xbb\x87\xde\x5f\x6f\x80\x64\x74\x00\x04\xd9\x79\x13\xcb\xd2\xe5\x7f\x8b\x3c\xd0\x42\x40\x1a\x62\x00\x4d\x31\x3b\xd3\x90\x25\xcd\x5b\x1e\x6f\xc8\x0b\xdd\xfd\x12\x72\x23\x58\xf7\xb4\x40\x81\x5c\xbc\x03\xe6\xb2\x28\xe4\x3d\xf0\xdf\x60\x1f\x02\xf7\xe7\xee\x3c\x2e\x63\xbd\x56\x81\xae\x5b\xe7\x39\xdd\x08\xdc\x7b\x47\xa9\xfb\x8f\x09\xbb\x50\x01\xf4\xe2\x55\xff\x3f\xbe\x98\x9e\xf5\xff\xe3\x1f\x34\x53\xbb\x7a\x15\xdd\x9f\x2b\xa6\x65\xad\xb2\x9d\xf3\x39\xdd\x9f\xaf\xaf\x1e\xad\xaa\x53\x55\x4a\x35\xc5\x1a\xe2\x69\x5e\xaa\xd9\x5b\xbb\xfd\xfc\x96\x48\xf4\x4e\x28\x52\x9f\xb4\x9f\x73\xfd\x5a\xc9\x7a\x57\x2b\xee\xe3\x2f\x3b\x5b\x52\xe1\xf3\x0b\x12\x8d\x7c\xa5\x33\x53\xf4\x9d\xc6\x25\x55\xcc\xd5\x26\xb5\xca\xa5\xae\x68\x96\x68\xf6\x9a\xb2\xa1\x09\x5f\x97\x70\x3d\x74\x5d\x55\x05\x2b\x99\x30\xb4\x80\xd7\xa6\xda\x88\x1b\xef\x8d\x59\xec\xf6\xca\xf9\xe9\x3f\x7e\x7e\x9c\xd3\xf9\xf1\x26\x52\x9c\xd5\x4f\xb5\x10\x7f\x72\x3f\xde\x42\x46\x2b\x3a\xe3\x05\xb7\xaa\xcf\x63\xbc\xdf\x87\xd7\xaf\xa4\x34\xdf\x37\xb0\xc0\xc7\x68\xa9\x52\xfc\x8e\x17\x6c\xb1\x73\x68\xf5\xf3\xb6\x93\xbd\x48\xa7\xbe\x89\x73\x9d\xd1\xa2\x4f\x6a\xcc\x67\x8e\x44\x66\x10\xd7\x79\x94\x05\x89\x13\x3d\x9f\xf1\xf2\xdd\x05\x51\x6f\x05\xbe\x2f\x4e\xb1\x87\x53\xa7\x3f\xaa\xb0\x1f\x9a\x26\xde\x61\xf9\x50\x75\x79\x57\xe6\x54\x2c\x48\xa7\x8e\x61\xad\x14\x13\xa6\x58\x05\x71\x57\xe0\xe5\x40\xc5\x1b\x94\x62\xd0\xcb\x9d\x72\xd9\xc7\x9d\x77\xda\xd8\x5b\x8e\xf2\xa3\xa4\x2b\xab\x8d\x06\xee\x9c\x79\x0d\x5c\x33\x60\x00\x60\xc5\x59\x80\x5b\xf5\x22\x2e\xdb\x52\x68\x48\x56\x4c\xb4\x5b\xf8\xb9\x73\xaf\x8e\xed\xd6\xee\x94\x1e\x42\xeb\x74\x52\xe6\xbf\xa9\x0a\x6a\xe6\x52\x95\x63\xef\x45\x19\x77\x2c\xd7\x1e\xdd\x3a\x83\x34\xf8\x06\x12\x82\xb4\x4f\x58\x9d\x5d\xe4\x05\x0b\xac\xd2\x66\x01\x44\x8e\xb1\x4f\x52\x0b\xc5\x32\xb9\x10\x50\x08\xc0\xfd\x16\xec\xad\xc6\x69\x44\xb5\xb5\x08\x89\xa8\x8b\x62\xe7\xbe\xf5\xb4\x65\xe5\x1d\x53\x4b\x46\x77\x3c\x85\x71\x1b\xfc\xbd\x6b\x93\x28\x56\x29\xa6\x61\x42\x31\x02\x8f\x3a\x7e\xd3\x29\x42\xb5\x96\x19\x90\x1a\x63\x8e\xa1\xa7\x1b\xa3\x60\x69\xce\xa5\x22\x94\x2c\xf8\x1d\x13\xe4\x0a\x77\xc3\x59\x41\x77\xa7\xd9\x0a\xdc\x76\xde\x43\x4f\x6b\x23\x9b\xfc\x53\x42\x0d\xa1\x79\xc9\x81\xe4\x01\x89\x0b\x9c\x57\x33\x6c\x35\xf8\x8a\xdd\xa5\x4a\x42\x36\x22\xb9\xd8\x35\x3f\xf5\xb3\xde\x0b\x49\x99\x1e\x47\xd0\x4c\x17\x58\x88\x1e\x3f\xd1\xd4\x4e\x27\x19\x84\xde\x7d\x75\x99\x1e\xd3\xf3\x39\x1d\x72\xfc\x1a\xf6\x1a\xd8\xd6\xa8\xf3\x6d\x2d\xe9\x1d\xa2\x2d\xda\x25\x2e\xac\x9a\xb1\xab\x1a\xa9\x19\xd6\x80\xef\xf4\x0b\xf3\x0e\x7d\x40\x04\xf8\x68\xc1\xb3\xd6\x46\x47\xa6\x32\xbf\xae\x58\x36\x6a\xb7\xa0\x5f\x70\x4f\xd4\xe1\x39\xc4\x76\xec\x4f\x20\x05\xd1\xa3\xa2\xd0\xc9\x9c\xdb\xdd\x1a\x76\x32\x84\xbd\x70\xd3\x61\x25\x01\xbb\xbe\x95\x17\x88\x95\xf8\x17\x53\x3b\x67\x26\x6d\xf1\xe6\x2d\xb8\x99\xdc\xfe\x09\x5c\x79\x4c\x2c\xa9\xc8\x40\x93\xd7\xcf\x6f\x59\xa5\x9f\x6b\xbe\x40\xcf\xdd\x1f\xff\xf4\x27\x70\xe3\xf9\xc5\x79\x7e\x75\x7e\xfa\xea\xdd\xf9\xa4\xdc\x4d\x2d\xdb\xab\x4f\xaf\xa2\xc6\x30\x25\xbe\x23\xff\x73\xfc\xf7\xdf\xfd\x3a\x3e\xf9\xf3\xf1\xf1\x4f\x2f\xc6\xff\xf9\xf3\xef\x8e\xff\x3e\x81\x7f\xfc\xc7\xc9\x9f\x4f\x7e\xf5\x3f\xfc\xee\xe4\xe4\xf8\xf8\xa7\xbf\xbc\x7b\x7d\x33\x3d\xff\x99\x9f\xfc\xfa\x93\xa8\xcb\x5b\xfc\xe9\xd7\xe3\x9f\xd8\xf9\xcf\x9f\xf9\x92\x93\x93\x3f\xff\x76\xc7\x8e\xf6\xe4\xf4\x8c\xe5\xf1\x8c\xe2\xee\x4c\xc8\xd7\x59\x29\xc6\x4a\xb8\x41\xfa\x90\x12\xc4\x5d\x40\xd3\xb5\xb6\xbd\xa6\xe5\x7e\xb2\xf7\x8a\xef\x9e\x58\xd8\xab\x46\xe3\xf5\x53\xc8\x7b\x20\x86\xe1\xd2\x2a\xce\xbb\x07\xac\x40\x8d\xbb\x64\x77\x4c\x8d\x7c\x1f\xde\xda\x57\x4e\x7b\xbe\x31\x44\x4c\x6c\x7b\x5f\x4f\xe6\xbd\x9e\x1b\xc4\xcf\xcb\x53\xae\xe4\x0d\x10\xdd\xb9\xd1\x82\xe0\x9e\x90\x1f\xa9\xe2\xb2\xd6\x4e\x43\x26\xd6\x08\x97\x02\x94\x0c\x24\x52\x68\x2e\x7b\x88\xdb\x60\xd6\xc5\xae\x42\xc6\x37\xd9\x30\x17\xe7\x8e\x85\xaa\x99\xfa\xd3\xe6\x92\x3c\xdb\x7e\x6b\xf3\x5d\x4d\xc4\x4a\xb1\x3b\x3f\x0c\xe5\xa9\x88\x98\xc1\x92\x1d\xcd\xa8\xd0\x22\xd8\x7a\x45\x7b\x85\x66\x57\x67\x41\x30\x65\xd0\xa8\x1f\x23\x5c\x68\x7d\x42\xb7\x50\xdc\x89\x2f\x3c\xa1\x18\xac\x1b\x3a\xed\x83\x4f\xfb\x1d\xb3\xfe\xc2\xb1\x2f\x5b\x5f\xb5\x3e\x1b\x4f\xb9\xff\x2f\xe6\x1d\xa4\x65\x13\xf9\x6f\x99\x61\x9b\x69\x24\xcf\xf0\x40\xc0\x55\x3f\xce\x14\x37\x3c\xa3\xc5\xb3\x1e\x00\x5b\xff\xa2\xac\xa8\xad\xc1\x15\xbe\x4b\x31\x62\xee\x25\xf6\x89\x16\xe4\x96\xad\xee\xa5\xca\xbd\xf6\x17\xe2\x6d\x77\x0d\x65\xdb\x8d\xa1\x8d\x1f\x0e\xe0\xf5\xad\x48\xc6\x48\x8f\x2a\x99\x22\x33\xe6\xc1\x69\x6b\x5f\x5e\x4d\xc8\xa9\x58\xa1\xe2\xd5\xc3\xfe\x6f\x02\x2f\x41\x2d\x59\xd0\x6e\xd1\x12\xe9\x9c\x06\xa7\xf5\xf8\xbe\x51\xd3\xab\xa8\xdc\x76\x64\x91\x35\x79\x1a\xc1\xe3\xf5\x56\x0f\x2d\x92\xca\xb1\xde\x82\x40\x52\xc8\x11\xbc\x2b\x84\xd8\xbd\xec\x49\x6e\x0b\xab\xf5\x73\xc1\xb4\x7e\x6d\x37\xec\xfe\xce\x0c\x05\x05\xdc\xf5\x05\x78\x72\x5b\x76\x29\x66\x25\x13\x66\xfc\x59\x95\x40\xe6\xed\x37\x77\x5d\xd2\x53\x0f\x95\x01\x6b\x07\x19\xac\x6d\xd3\xdc\xe8\x30\xfe\x8a\x71\x52\xfb\x8d\xd3\xcb\x5d\xa3\x74\x8e\x22\x0b\x55\x68\xdd\x8e\xb1\xad\x2e\xda\x1d\x25\xd8\x62\x8e\xd6\x88\xfd\xb3\xa6\x05\x00\x2f\x6f\x54\xcd\x76\x2d\x4c\xdc\xcb\xe0\x60\xe6\x5e\xaa\xdb\xe7\xdf\xfe\xe9\x05\xd8\x1c\x4d\xef\xc6\x8b\x9d\xaf\xa8\xbe\xe9\xe2\xbd\x12\xc5\xd7\x6a\xa7\xe7\x57\xe1\x46\xf6\x6b\xe9\x1d\x1a\x0e\x52\x8b\x05\x3d\xec\x0e\x68\x16\xa8\x17\x54\xa1\x57\x5a\x78\xff\x84\xf0\x71\xdb\xdd\x9b\x55\xb5\xbb\x92\xd4\x3f\x97\xbb\xd3\x6e\x34\x66\xf4\x2c\x7c\x1b\xae\x8a\xc6\x25\x69\xda\x09\x90\x0f\x47\x3a\xf8\x18\x18\x76\x40\x9a\x03\x22\x07\x6e\x98\x55\x15\xc1\x26\x94\x04\x10\xd9\x13\x6e\xe2\x1d\x6c\x40\xfa\xf1\xa4\x32\xf7\xaa\xd3\xb2\xbb\x49\xbd\x5a\xb0\xf6\xcb\xa6\x80\x86\xa3\x8c\xda\x55\x3d\x41\x12\x51\xa8\x71\xd9\x14\x4c\x73\xce\x1f\xc0\x75\x15\xd6\x8c\xcb\x91\x0c\x95\x2a\x83\x0a\x73\x5f\x7c\x41\x4b\x23\x93\x33\x42\xef\x28\x2f\x00\x4c\x0f\xae\x24\xa9\x3b\xd8\x1a\x1c\x6c\x26\x85\xae\x4b\xe8\xd1\xae\xa1\xb4\xd9\xca\x69\x13\x7d\xfc\x9b\x88\x68\x33\xd0\x3b\xd4\xe5\x67\xb5\x69\x69\xb7\x3c\x3d\xce\xae\x16\xe8\x4a\xd0\x92\x67\x7e\x05\x4f\x71\xc9\x80\x83\x32\x60\x9e\x0f\xec\x9e\x7e\x9d\x6f\x40\x32\xbc\x2c\x6b\x18\x43\x1f\x1d\x65\x1f\x17\x44\x8f\xe8\x0f\xdc\x29\xc1\x89\x08\x33\x33\xd8\x07\x9a\x99\x62\x05\x81\x95\xce\x97\x46\x84\x71\xc8\x5e\x45\x50\x7b\xb1\x3b\x6f\x8a\x54\x6e\x83\xa1\x5a\xdb\x79\xfb\x0d\x2b\x2b\xe0\x44\x74\x7a\xbc\x46\xf2\x60\x53\x2b\xe1\xe9\x50\xd7\xfe\x62\xe7\xe6\x03\x68\x63\x8f\x6c\xb4\x0b\x43\x68\x9e\xdb\x2d\xee\x4b\x32\x71\x83\x7b\xba\x16\xfc\x9f\x35\x2b\x56\x84\xe7\x4c\x98\x16\xfe\xd6\x9d\x62\xc7\x1a\xe5\xc4\xc4\xee\xd2\xfd\xac\x3d\xe6\xa8\xf5\x33\x96\xfb\x3a\x46\xce\xad\xfc\xc0\x9a\xa2\x17\x18\xac\x05\xab\xb2\xf7\x39\xdf\x8e\x2b\xc1\x36\xf2\xea\xea\xf4\xaf\x8e\x1d\x7f\x4d\xaa\x3e\x70\x1e\xdb\x7c\xdd\x69\x0f\xf2\xa7\x19\x2b\xa4\x58\xb8\xbb\x74\x2a\x73\x08\x1f\x8f\xf0\xdf\x6b\x13\xac\xf1\x02\x45\xc1\xbb\x7b\xf9\x0d\xff\xf2\xb5\xb7\xce\x41\xeb\x45\x2f\x0c\xef\xa0\x0d\x51\xa3\x3d\xb6\x06\xf9\xee\x4c\xd5\x9d\x56\xe0\x15\x30\x4f\x5b\xcf\x84\xfd\xf5\xc9\x84\x9c\x36\xe3\xcb\xd6\x0e\xed\xce\xad\x37\xfc\xe6\xdd\xc1\x02\xa6\x29\xf7\xbc\xe5\x76\xdc\x53\x99\xeb\x20\xb4\xe1\x66\xbf\xb9\xfb\xe6\x72\x77\xf7\x70\xf8\x2a\xfb\xea\x4e\x17\xae\xc1\x58\x98\x5c\xb9\x06\xbe\x97\x8a\x28\xea\x48\x1f\xa9\x40\x52\x47\x91\xf3\x3b\x9e\xd7\x74\xf7\x08\xa6\x1d\xcd\xae\x27\x6f\x4f\x6a\x71\x0f\x7e\xa3\x18\x6d\xb8\x2f\xa7\x47\x8a\xc4\x29\x40\x22\x6c\x17\xa2\x48\xc3\x8e\x21\xdb\x6c\x5d\x8c\xf6\x80\x10\xe3\xd3\xb2\x8e\x58\x1d\x90\xbc\xba\xbc\xfe\xe5\xed\xe9\x7f\x9f\xbf\x7d\x72\x2e\x55\xb5\x2e\x04\xf6\xb5\x04\x1b\xd2\x68\x1d\x19\xb2\x76\xf7\x7a\x27\x94\x93\x0c\xba\x2f\x19\x97\xf0\xc0\x49\x42\x75\x90\x13\xd3\xeb\x5d\xe7\x81\xe2\x22\xe7\x5b\x86\xf4\x51\xf9\x0a\xfb\xa1\x57\xbb\x18\xda\xdd\xef\xde\x09\x47\x72\x10\x7b\xa8\x33\xb5\x1f\xdf\x4b\xfe\xab\xbd\x1a\xdd\xdc\x87\x49\xf7\x14\xf0\xcc\x37\x9a\x69\x90\x5b\x09\xc4\x5a\x88\x3f\xa0\x44\xb0\xfb\x75\x55\x19\xb5\x58\xfb\x17\x7d\xf7\xd4\x4c\xd6\x22\x47\xcd\xce\x0d\xc1\xeb\x60\x6d\x52\x5c\xce\x0a\x66\xbc\xf3\x36\x4e\x39\x26\xde\xd2\x04\xae\x64\x70\xfb\xc2\xbb\xd1\x76\x85\x92\x81\xfe\x0c\x35\x12\x59\xa0\xda\x62\x15\x34\x47\xd0\xdd\xab\xd9\x96\x30\xa3\x09\xa4\x8d\x36\x26\x1b\xaa\x4e\x53\x77\x4d\x60\x5f\x9c\x3e\x1f\xbf\x59\xc3\xe5\xb2\x6d\x2a\x96\x49\x95\xa3\x5b\xd3\x4e\x3c\x7a\x30\x27\x6a\x53\x51\x61\xba\xe7\xc6\x8a\x56\xa7\xfb\x53\xa9\x6e\xd5\xa8\xd1\xa6\xf0\x4e\x13\xfa\x80\x32\xdc\xc4\x43\x7a\x0b\xfc\x4f\x0b\xe2\x51\x63\x2b\xac\x9b\x33\x5a\x16\x77\xcc\x1b\x3b\xf1\xab\x1e\xec\x3b\x6f\x19\xfa\x51\x4f\xc8\x69\x51\x60\x54\xde\x49\x96\x45\x33\x49\xbd\x1a\xc6\x89\x5d\xa3\x25\xd9\x18\x62\xeb\xff\xeb\x39\xbe\xad\xab\x76\xa4\x3f\x63\xd6\x51\xf5\x8f\x5b\xdb\x76\x3e\x3b\xcd\x4c\xd6\xbd\x6f\xdd\x79\x0f\xf6\x20\x55\x3d\x2f\x81\x7b\xd1\xd2\x00\xb5\x6f\xc3\x73\xc2\x55\x9b\x79\x8b\x76\x9b\xe1\x2c\xf7\x26\xb3\xff\x76\xaf\x76\xb9\xd0\x86\xd1\x1c\xee\x34\xb1\x0a\x0c\x93\xa8\x1b\x67\xab\x33\x0a\x46\x23\x24\x14\xbc\x5a\x04\xf1\x23\x70\x0a\x46\x9c\x88\x35\x18\x59\x67\x3b\x06\xbc\x4a\x4a\x16\xa4\x2a\xa8\xdd\xc2\x50\x69\xab\x09\x4e\x26\x39\x89\x83\xc2\xf7\xa9\xe7\x2b\x20\x2c\x68\xdc\xdf\xfb\x08\x0a\x34\xe5\x0c\xb0\x68\x10\x45\x8e\x32\x39\x27\x67\xd3\x1f\x60\x9b\xbc\x63\xa5\x54\xab\xb6\x93\x8d\xed\x6e\x4f\x01\xdd\x59\x8b\xdb\x9e\xef\x4a\x2e\x8c\x87\xcf\xfb\xe0\xe9\x0a\x8f\x9d\x43\xb0\xda\x9e\xbc\xe5\x25\x37\xba\x87\x67\xe5\x59\x56\xd5\xcf\x46\xe4\x59\x09\x43\x01\xd4\x05\x79\xb6\xac\x17\xac\xa2\x0b\xa6\xc7\xcf\xba\x7a\x9b\x26\x48\x61\xb7\x26\x9b\xad\x7c\x04\x60\x80\x47\xf9\xc7\x78\xd3\x51\x63\xb1\x3f\x09\x36\x5e\x28\x0a\xd0\x06\x2f\x4e\x24\x96\x35\x73\x5d\xa2\x81\x5b\xbf\x97\x5a\xc7\x84\xe1\x0a\xa6\x79\x84\xf1\x17\x3b\xb1\xcd\xeb\xed\xed\x06\x4e\xe7\xd2\xea\xaa\xdd\xd5\xa1\xbd\xa4\x75\x13\xf1\x10\x84\x16\xd5\xf2\xe3\xf5\x73\xdd\x4d\xf3\x96\xdd\xb1\xa2\xdd\x92\x4e\xc1\xdb\xb1\xe1\xdd\xeb\xec\xf6\xf6\x60\xf5\x77\x28\x65\x3d\xc2\x7f\x24\x89\x1d\xea\xf6\xb1\x15\x53\xad\xd5\xa9\xed\x51\x6f\xce\xf6\xa8\x43\x10\x12\xa6\xfe\xe2\x1f\xf7\x29\x3b\x08\xea\xb3\x3d\x3c\x6d\x4d\x94\xb0\x46\xcd\xff\xcf\xde\xdf\x30\xb7\x71\x63\xf9\xe2\xf0\x57\x41\x29\xb7\xca\x52\x96\xa4\xed\x24\xf3\xb2\xbe\xf3\xcc\x96\x22\xc9\xb3\xba\x89\x1d\xad\x65\x27\xb5\xcf\x64\xee\x06\xec\x06\x49\xac\x9a\x40\x07\x40\x4b\xe6\xdc\xd9\xef\xfe\x2f\x9c\x03\xa0\xd1\x24\xed\x58\x00\x24\x52\x1e\xf5\x54\x4d\x2c\xb2\xd9\x38\x0d\x1c\x1c\x9c\xd7\xdf\x49\x3a\xe1\xa2\x9d\x54\xb3\x96\x89\x5a\x23\x02\x43\xca\x89\xfb\x69\x51\xb4\x5c\x32\x07\xe1\x33\x2b\xed\x2a\x2a\x40\xce\xf8\xfc\x77\xbb\xb7\xfb\xdd\x77\xfb\x23\x34\x07\xb5\x3f\x19\xb3\x7f\xc0\x94\x1f\x8c\x9b\x59\x2d\x84\x09\xa3\x56\xae\x26\xe2\xd2\x32\xd6\x50\xba\xa6\xab\x0c\xc9\x60\xfd\x79\x50\xfd\xc9\x30\xfb\xb9\x20\xfb\x39\x10\xd3\xc5\xfa\x5f\x7f\xa4\xcb\xc9\x60\xb1\xc1\x45\xb0\x29\x46\x52\xfb\xc6\x91\x3e\x46\x42\x6e\x20\xd1\x6e\x08\x41\x84\x2d\xf6\xcf\x2d\x59\x57\x7d\xeb\x50\x7f\x8e\xfa\xfc\x80\xe4\xa1\x9d\x83\x3d\xbb\xcb\x44\x01\x14\x46\x57\xd9\xb3\x6b\x46\x70\xea\xd9\xc0\x8d\x59\x2d\xa4\x66\xc2\x19\xb0\xca\xdf\x20\x86\x39\x59\x2e\x50\x97\x8e\xf6\xd7\x43\x61\xb1\x6b\xa6\x56\x06\x9c\x03\xa1\x35\x40\xd5\x87\x3d\xe3\xcc\x90\xa8\xfe\x27\x79\x60\x90\xd9\xae\x60\x0e\x72\x3f\x67\x3e\x18\x03\x6f\xba\x13\x8e\x28\x8b\x5d\x98\x28\xda\xca\x41\x16\x42\xf3\xc1\x9d\xa8\x48\xce\xc2\xe8\xfb\xcd\x00\x6a\x33\x7d\x0f\xcd\xf6\x7b\xd3\xa8\x92\xcb\xb6\x33\x51\xde\x92\xcf\x6b\x4a\x59\xfd\x2c\xf8\xa7\x25\x15\x74\xce\xc6\x81\x90\x71\x54\xa3\x9b\xa8\x42\x24\x1e\xa8\x25\xca\xc7\xc8\x43\x2a\x21\x23\xe9\x65\x64\xa4\x40\x29\x19\xc9\x2d\x27\x23\x65\x4b\xca\x48\x7f\x2a\xed\x64\xeb\x06\x4f\xc1\xda\xe6\xe5\xe2\x37\x37\xaf\xd7\x04\x53\x76\x2f\xc0\xf0\xbb\x91\xb9\x26\x72\xc9\x4d\xef\xbe\x0d\x9b\x11\x70\xb8\x63\xe0\x6f\x27\x68\xa0\x60\x80\xc2\xf9\xc9\xde\xb7\x0d\xaf\xb8\x89\xba\x22\xd4\x29\xe6\x56\x04\xec\x2e\xad\x09\xce\x97\x1e\x39\x06\x3a\x2a\x7b\xfb\xce\x95\x6b\x05\xda\x2b\x44\x1d\x65\xef\x2b\xc6\xbc\xa7\xe5\x51\x9a\x3d\x4a\xb3\x4f\xbc\x3e\x37\x69\xa6\x18\xa4\x27\xdf\x7f\x75\xec\x1b\x1c\x98\xb4\x7d\x35\xec\x46\xf7\xf5\x80\x70\x9e\x90\xe6\xe3\xea\x60\x8f\x9b\x1b\xba\xd2\x23\xf2\x83\x78\x89\x7d\xb3\x47\x58\x1a\x3b\x21\xe7\x82\x68\xb9\x74\x3d\xbe\xdf\x1b\x3d\x42\x8d\x97\x12\xdd\x4d\x35\x73\xfa\xae\xd4\xcc\x83\x68\x38\x24\x92\x96\x29\x14\x7d\x89\x65\xb4\x56\x5a\x21\x51\x77\x0c\x9f\x79\xe3\x42\xca\xfa\x69\x2b\xf1\xff\xc6\x21\x08\xf6\xf4\x0b\xb7\xee\xe3\xf6\xf6\xf0\x5a\xa9\xa5\x58\x11\x3e\xc1\x7d\x17\x30\xbe\x59\x1b\x7b\x50\x9d\x31\x40\x77\x18\x26\x93\x00\xca\x29\x16\x18\x61\xf8\xd7\xa7\x09\xf4\x48\xfa\xd6\x14\xbf\x6d\x3a\xa1\xb4\x93\x11\x25\x75\x60\x29\xde\x90\x90\x60\xce\x63\xc2\x67\x6f\x77\x82\x45\xa9\xf5\x68\x6b\x3f\x13\xd5\x89\x84\x32\x40\xc4\x84\x90\xaa\x07\x5d\x66\xe4\xa0\x61\x73\x5a\xad\x0e\x86\x54\x6d\xc1\x16\x77\x1e\x70\x7b\xfc\xda\x63\x1d\xa9\xf3\xcd\xda\x6f\xeb\xc1\x87\x0e\xf0\x70\x74\x63\x61\x0c\x26\x57\x6b\xf7\xfa\xbe\x0c\xd1\xb1\x92\x83\xc3\xb9\xb5\x73\x22\x19\xb9\xe2\x77\x7f\xfc\xdd\xd8\x03\x02\xc1\x6b\xde\xc7\xbe\x19\xc0\x57\xef\xae\x82\x71\xc0\x6d\x53\x46\x6a\xae\x5b\x97\x8a\x3c\x8d\x34\xb9\x9e\xdc\x72\xe5\xa8\xdb\x87\xf4\xcc\x90\x38\x60\xde\x6a\x70\x31\xbf\xf7\x8a\xd2\xcb\xe1\xd0\x6e\xdf\xc9\x96\xfe\xda\xf5\x3d\xda\xdd\x61\x85\xca\x76\xb4\x80\x6e\x12\xa1\x69\x79\x84\x9b\x9e\x78\xb8\x5a\xd6\xd8\xa4\x06\xf4\xea\x5e\x82\x84\xa5\xd3\x86\xae\xbc\x44\x1d\xbe\x44\x0d\x95\xa1\xcc\xe7\x69\xdc\x92\x8a\x1e\xed\x3d\x88\x40\xab\x85\x2e\x5b\x38\x64\xfd\xb7\xc9\xf5\x1e\xeb\xf3\xbd\x1e\xc8\xa0\x06\x6b\x2d\x21\x0f\xc2\x41\x36\x61\x06\x3f\xe4\x8f\x2d\xe5\x35\xe0\x65\x5b\x9d\x62\x66\x98\xba\xa1\xea\xb6\x99\xe7\x3b\xad\x38\x1d\xbe\x3e\x70\x5b\x8f\x93\xe5\x13\xc7\xec\x3f\xe6\x1d\x55\x35\x94\x18\xf7\x3c\xf1\x98\x61\xbf\xed\xda\x79\x86\xbd\x03\x12\x89\x04\xc0\xed\x43\xc9\xfe\x3a\xa3\x56\x0f\x1a\x3e\x09\x63\x25\x50\xf2\xbd\x96\xa7\x09\xa0\x21\x8f\xe9\x32\xb7\x72\x11\x47\x22\xd6\xea\x9e\x3b\x3a\x6b\x20\x91\xae\x55\xf2\x9a\xd7\x90\x16\x3a\x28\x37\xb7\xdc\xc4\x97\x4b\x56\x5b\xb1\x10\x73\x83\x53\x93\x6e\x9b\xd8\x60\x07\x83\x9e\xe7\xa8\x86\xbb\x7a\x51\xcc\x05\x8d\xb2\x56\x33\xb0\xf7\x5c\xf4\x6c\xb3\x63\x88\x91\xbe\xee\x64\x15\xa5\x7b\x5a\x71\x4e\xdb\x16\x43\x21\xb7\xce\x00\x52\xca\xbe\x05\x3e\x29\x9a\x1c\x30\xba\x38\xd3\x0e\x45\xc7\x89\x55\x7b\x86\xa0\xda\xec\xc7\x6e\xf4\x6d\xb1\x35\xf8\xb2\xa5\x95\xd1\xae\xbd\x73\xdf\x6e\x84\x5a\x45\xc0\x68\x4c\xbd\x07\xb9\xed\x93\x15\x14\x6b\xd8\x35\x85\x3e\xfd\x84\x92\x1b\x5e\x33\xe5\x4d\xe2\x5b\x8e\x2d\x63\xa5\x80\x34\xfc\x8a\x45\xf0\x5b\xa3\x28\x3e\x69\x0c\xad\x16\x4b\x48\xf1\x66\xa6\x9a\x6c\x6a\x7e\xb7\x3d\x3c\xfa\xb2\xeb\xb8\xff\x9f\xaf\x6f\xeb\x04\xc7\xb7\x0b\x35\x7c\x3a\x4c\x48\x0a\xa6\x10\x2e\x8e\xe3\xd0\x28\xd0\xe7\x33\x3e\x90\xcf\x96\x74\x85\x0a\xd1\x7b\xab\x99\x61\xd9\x33\xa2\x3a\xde\x9e\x91\xdc\xcb\x61\xb1\x41\x4e\xbf\x98\x38\x39\x63\x04\xa5\xd9\x74\xf8\x3a\x83\xec\x6e\x87\x4b\x03\x7e\x8f\x5b\x1f\xca\x8e\x58\x7c\x62\xcd\x67\x30\x4d\x26\x62\xfd\x53\x19\x20\xa5\xea\x4e\x39\x08\xb4\x88\x83\x6e\x39\xa2\x25\xd3\x45\x2a\xbd\xd3\xa8\xa1\x68\xc6\xf9\xfe\xf4\x33\xa9\xa0\xec\xd8\xc9\x2d\x84\x55\x65\x75\x4f\xd3\xbe\xa7\x54\xb5\x2e\x53\x39\xad\xc4\x27\x5f\x8b\xb8\x88\xc6\x8f\x5a\x1a\xaf\xc3\x07\x6b\x43\x45\x4d\x1b\x29\xa2\x4c\xec\xe4\xec\x15\x97\xdb\x30\x84\x70\x75\xf6\x3f\x17\x76\xa8\xaa\xef\xa6\x04\xbc\x9c\xe4\xcd\x8f\x2b\x01\x89\xee\xa6\xb5\x5c\x52\x7e\x6b\x5f\x4a\xba\x59\x39\x84\xc9\xbe\xd7\xa3\x7e\x38\x34\x59\xc8\xa6\x06\xbf\xd4\xb8\x61\xd7\xac\x09\xa4\x59\xb9\xad\xf8\xb4\x33\x0e\x6e\xb8\x92\xcb\xa5\x43\x7e\xc3\x26\x2c\x0e\x25\xee\xd6\x32\x15\xd1\xf1\x69\xf3\x62\x80\x34\x08\x86\xe4\xc4\x92\xc7\x60\x52\xe3\xb7\x04\x6f\xb1\xb7\xff\x9d\xc5\x2b\x67\x84\x59\x8d\x34\x41\xd3\xdc\xc1\x4e\x5e\xeb\x3d\xb0\x8b\xcd\xbc\x46\x82\x4f\x6d\x39\x76\x1f\x13\x89\x4d\x0b\xec\x5a\x74\x9a\x6d\x74\x58\xee\x51\xa5\x13\x6b\x70\x5f\x4b\x80\x68\xf3\x0a\x1e\x1e\x50\x55\xe8\x09\x68\x2d\x6c\xc0\xaf\x82\xb4\x2a\xa9\x27\xc2\x95\x11\x26\xa3\x8b\x67\xc5\xc9\x72\x92\xe8\x30\xde\x73\xeb\x1f\xe6\x25\xd0\x35\xb2\xa2\x0d\x34\xe2\x49\x65\x31\x52\x2c\x7f\x6a\x9d\x96\x08\x42\x90\xda\xd7\x84\xcf\x1a\x49\x6b\xdf\x60\x8c\xf9\x5e\x82\xd4\xac\xb9\xda\x53\xd3\x8e\x10\xc2\x13\x47\xf2\x65\xdf\xad\x62\x11\x92\xf3\x60\x60\x09\xed\x3b\x53\x07\x7b\x35\xcc\x18\x74\x6f\x16\x1f\x91\x8e\x94\xac\x01\x3c\xfc\xf6\x0c\xc4\xb1\xef\xa9\x0e\xb2\x92\x6b\x72\xf0\xbd\x9f\xf4\x83\xb4\x51\x32\x63\x94\x26\x11\x52\xab\x14\xcf\xe1\x3c\x04\x3e\xc3\x50\xc5\x15\x17\x50\xaa\x15\x84\x9c\x67\x89\x80\xc8\xde\xb6\x0d\x4f\xe7\xb2\x1f\x69\xc3\xeb\x20\x39\xa9\x4a\x4e\x60\x25\x24\x2c\x1f\x19\x47\x9b\xa4\x55\x6c\xbc\xb9\x51\xd2\xb3\x0b\x5d\x70\xc7\xc7\x26\xc7\xbf\xd9\x5c\x36\x93\x71\x09\x79\x27\x60\xcf\x09\x56\x93\x31\x11\xb2\x5f\x0a\x66\xf5\x73\x54\xd8\xef\x9d\x61\x5d\x7b\xa9\x5d\x1c\xc3\xc7\x01\xc6\x34\xee\x7d\x14\x15\x9b\x3a\x9e\xc4\x60\xe5\x30\x42\xde\x57\xae\xdc\x7e\x5c\xe8\xa4\xe7\xfa\x82\xdb\x99\x73\xa9\x7d\xc0\x00\xdf\xb9\xc6\xa6\xc6\x17\x1b\x22\x98\xfe\x8d\x1d\x74\xc1\x5b\x14\x62\xd4\xb8\x9f\xa7\x08\x07\x28\x2f\x1f\xd4\x6c\xb6\xb2\x7e\x91\x52\x7a\xf0\x1c\x9d\x28\xf2\x06\x5a\x36\xfc\xe5\xfc\x34\xec\x65\xfb\xd4\x97\x97\xa9\xa5\x9d\x5f\xe1\x73\x35\x33\x73\x5e\x93\x29\x37\xbe\x7b\xde\xa1\x60\x37\xc4\xee\x81\x60\x90\x93\x61\x1f\x76\x3f\x7e\x78\x3d\x47\xc4\x51\x02\x15\x5f\xbb\xda\x7b\xa6\x3c\xd2\xf2\x94\x1b\x2c\xd1\xfa\xe1\xcd\x13\xdf\xaf\xe2\x66\xac\x6e\xc6\xe3\xf1\x38\x65\xfe\x7c\xf8\x77\x34\x58\xf9\x10\x50\x59\xca\xda\x3b\xc4\xfa\xf5\xb7\xe7\x4d\x4f\x92\xf6\xc5\xaf\xf8\xfe\x0f\x48\x17\x4c\x4d\xe2\x89\x40\x9c\x7f\xff\x4d\x9a\xa8\x89\x3b\xd9\xed\x42\xec\x6c\x21\x23\x94\xfe\x4f\xd9\x82\x5e\x73\x6b\x02\xcc\x70\xff\x83\x47\xf6\x03\xab\xef\x35\x9a\x64\x59\xe0\xb0\x13\x11\x57\x99\xbd\x6f\xa5\x86\x1d\x05\x15\x08\x17\x12\xc0\x27\x86\x8d\x53\x30\xa4\x86\x3e\xd9\xdb\xfa\x47\xed\x35\x10\x7a\x2e\x9d\x03\x4b\x1d\xfd\xac\x90\x29\xb5\x44\x84\x57\x3e\x5c\x63\xf8\xa3\xa4\x04\x4a\xb7\xab\x20\x3a\x22\x24\x61\xb3\x19\xab\xa0\x9f\x2f\x6b\x17\x6c\xc9\x14\x6d\x86\xa4\xe9\xae\x5a\x10\xaa\x5f\x58\x0b\x5c\xd9\x0d\x8a\xca\xea\x92\xde\xba\xd9\x1e\x71\x78\x95\x60\x53\xd7\x3c\xa9\x9a\x03\x55\x9b\xa8\xdf\xd3\xc1\x0f\xe2\x8d\x94\xe6\x15\xd7\xa0\xe9\xba\x62\x53\x4c\x6d\x3a\xd8\xe2\xd4\x0d\xdf\x85\x02\x96\x87\x23\x28\x92\x94\x8a\xbe\xd5\xd9\x2e\x36\xb8\x3d\x36\xec\x69\x18\x92\x8d\x5c\xb5\x52\x2b\xb9\x30\x1b\x3d\x79\xad\x5e\x57\x25\x00\x4e\xdb\xeb\x9d\x66\x3a\xb8\xe4\xbc\x9e\x98\xd6\x13\x02\xaf\x57\x74\x15\x20\x68\x5c\x83\xa1\x35\x27\x15\xa6\x4c\xb9\xef\xa6\xd2\x2c\x36\xbc\x58\xb7\xc7\x9b\x27\xe8\xe0\x5c\x7b\xd0\xa8\xef\x1d\x30\xc4\xba\x5e\x1f\xd0\x40\x25\x96\x35\x29\x59\xcd\xc4\xad\xdb\x80\x92\x00\x4e\x49\x4d\x5e\xd9\xd5\x3f\xd1\x59\x0a\x3b\xec\xb5\x04\x39\xb4\x8b\x3d\x76\x1e\x75\x42\x70\x11\x9e\x7e\x47\x81\x97\xc1\x6e\x3d\x88\x45\x09\x29\xc6\x4a\x4a\x48\x66\x4b\x5a\xd6\xf3\x19\xa4\xf6\x6e\x51\xd3\xae\xad\x64\x76\xfd\x0e\x08\x5f\xd2\x39\x23\xb4\xcf\x91\x33\x92\x30\xa1\x3b\xe5\x78\xe2\xd6\xfd\x40\xec\x55\x4b\x86\xd9\x3d\xee\x75\xde\x9d\x9f\x92\x67\xe4\xd0\xbe\xcf\x11\x88\xfd\x19\xe5\x4d\x80\x3a\x5e\x9b\x07\x3e\x83\x9a\x00\x79\xdb\xf8\x4a\x78\xed\x90\x9d\x38\xa3\x8d\x66\x23\x7b\x76\xc2\xd1\xe8\xde\x1b\xc3\xa6\xa8\x72\xb7\x4c\x41\x9b\x86\xb4\xfa\xa4\xcf\x41\xec\xa4\x6e\xdf\xa9\x94\x0d\xbb\x75\xbe\x66\x68\x15\xba\xab\x13\xee\xdd\xbd\x9c\x70\x71\x5c\xc2\xee\xdf\xe1\x92\xe0\x96\x5b\x32\x43\x6b\x6a\xa8\x3b\xf9\xfc\x0d\xff\xb4\x8c\xf8\x78\xfe\x7d\xda\x95\x73\xfe\xb9\xf6\xd2\xbb\xb6\x25\xb7\x90\x11\x6c\xc9\x85\x73\x29\x85\x25\x7d\xa2\xc9\xe5\x19\xdc\x4f\x1a\x3a\x65\x0d\x24\x16\xa2\xd7\xd5\x7b\xb8\xd0\x0a\x1a\xe6\xe9\x24\xe1\x65\x83\xd1\xb5\xa0\x7a\x68\x6e\x09\x59\xfb\x13\xbb\x96\x31\xd2\x4d\x20\x4c\x42\x36\x90\x27\x23\x9c\x7e\x6b\xb7\x95\xb1\xa2\xa0\x8d\x33\x86\x40\x9d\x09\xf5\xc6\xee\x2c\xcd\xaf\xd9\x41\x12\x16\x47\xf4\x7b\xb2\x64\x54\x68\xa2\x18\xcc\x34\x58\xf1\x08\x65\x8d\xee\x2b\x29\x3c\xbe\x73\x78\xd7\xf5\x28\x9f\x57\x23\x52\xde\x15\x21\x76\xb1\x6a\x46\x37\xf2\x06\xf6\x77\x43\xd5\xdc\x3b\x0b\xb4\x4b\x41\x69\x1a\x79\xa3\xc9\x92\xbf\x87\x24\x90\xd0\xa4\x1b\x66\xa3\x13\xd1\x07\x80\x44\xed\x71\x7c\x42\x96\x8a\x33\x9a\x65\x8c\xff\x09\x4e\xf1\x94\xc9\x1b\x2c\x07\x94\x52\x22\x08\x36\x6b\xf8\x9c\x4f\x1b\x36\x98\x2d\xf0\xbe\xfd\x32\x96\x3e\x61\xea\x17\xe2\x8a\x2f\xe1\xf7\xc9\x73\x16\xc0\x83\x02\xfa\xb6\x0b\x84\xc5\xf0\x7c\xc1\x57\x20\x5d\xc3\x39\xf7\xf1\x60\x73\x25\x6e\x19\x97\xcb\xdd\x4a\xad\xb9\xeb\x33\xb1\x7d\x70\xc4\x52\xfa\xad\x25\x4b\xa1\xe2\xcc\xcf\xb7\x9f\x6b\x0a\x35\x1b\x63\xa3\x18\x23\x2f\xf9\x54\x31\x2b\x6e\x04\x6b\x60\x48\x7e\x79\x72\x79\xde\x73\x15\x24\xed\x35\x0d\x89\x3e\x4c\x20\xe1\x06\xaa\xbf\xec\x33\x6a\xc5\xaf\x99\x22\xf6\x0c\xe9\x00\xe8\xc5\x4f\xb2\x97\x08\xd3\x55\xe8\x91\x07\xc7\x8a\x93\x88\xc0\x4c\x58\x92\xe7\x7c\xc4\x3c\xa5\x62\xf0\xe4\xf2\xfc\x14\x29\xf0\x09\x2f\x13\xf2\x03\x24\xf8\xc5\x93\x43\xc1\xbb\x42\x14\x1b\xc3\xd2\x37\xac\x26\xca\x4b\x82\xe6\xd6\x4d\x1f\xc9\xc6\x66\x40\x1d\x20\x6a\x6d\x02\x7e\x38\x38\x4a\xdd\x74\xc0\xed\xc5\x5a\x72\x90\x2d\x35\x21\xb0\xb2\x9f\x32\xda\x68\x8d\xf8\x0c\x97\xd3\xed\x69\xa8\xb9\xfe\x18\x11\x20\x07\xdf\x30\x5a\xff\xa4\xb8\x61\x3f\x88\x8a\x45\x32\x25\xd1\xb3\x17\x0b\x7d\x5f\x4a\x29\x63\x16\xc9\x85\x75\xa2\x70\x7c\x22\x62\x5c\x24\x93\xc0\x99\x39\x3c\xcf\x21\x96\xe0\xda\x84\x38\x18\xa4\x35\x55\x11\x00\xfc\x37\x14\x48\x77\x34\xc5\xd0\x50\x29\xe1\xb4\x81\xc8\x1c\x48\x46\x27\xb3\x5c\x3e\xc1\xe0\xab\x2d\x1a\x4c\xdc\x42\x19\xea\x44\x01\x0a\xb6\xa2\x82\xcc\x99\x21\xda\x74\xd5\x95\x7d\x8b\xd0\x92\xe3\xc4\xc3\x61\x42\x45\xcb\x03\x52\x5c\x93\x7c\x9b\x6e\xc2\x90\xb3\x77\x02\x83\x60\xad\x3f\xcf\x78\x95\xb7\x41\x64\x14\xc3\xdf\x8c\x97\xa6\xfb\x1f\x86\x35\x69\x1b\xda\x91\x47\xcd\xc6\x4e\x52\x84\x12\x45\x45\x2d\x97\x1b\xf4\xd9\x9d\xc9\x68\xb5\x48\xa0\xa3\x37\x89\x6e\x6b\x1f\xa6\x84\x64\x3e\x60\x51\x66\xd8\x87\x29\x41\xe2\x35\x8b\xf2\x61\xdb\x87\x89\x79\x67\x99\x49\x60\xec\x9a\x35\x05\xb2\x70\x00\xb5\xd2\x4e\x42\x10\xf5\xf0\x01\x0a\xfc\xf5\x24\x85\xc1\x16\xd9\x49\xee\x91\x92\x45\xf2\xdd\xde\x48\x4c\x8b\xa4\xe1\xb5\xed\x83\xf7\xf6\xad\x0b\x65\x5c\xbd\x75\x09\x64\xfd\x5b\x43\x2a\xd5\xbe\xbe\x75\x97\xe4\x7d\x24\xeb\x6f\xfd\x4e\x63\xe3\xec\xfe\xad\xc1\xd1\xb7\x8f\x6f\xad\x59\x55\xc9\x65\xbb\xc3\xd4\x61\x4c\x8c\x01\x2a\x1e\xd3\x84\x07\xd7\x63\x9a\xf0\x5d\xa7\x09\x47\xb8\xbd\x14\xfc\x58\x83\xc4\xdd\x87\x9a\x2c\x0c\xa5\x27\x76\x16\x19\xa2\xf0\xb7\xd4\x2c\x46\xe0\xb8\x33\xfc\x3a\x54\x5a\x5e\x61\xd8\x0f\x5b\xc7\x7a\x52\xfc\x46\xec\xf3\xa8\x11\xd5\xb7\x50\x6e\xf1\xb6\x7c\x62\xbc\xe7\xf5\x0f\x6f\x63\x4c\x5f\xea\x9b\x9f\x27\xb7\xae\xdd\x97\x13\xf0\x6e\x72\x8e\xd7\xd7\xe9\xee\x52\x8e\x13\x9f\xb4\x3d\xe3\xf8\x3e\xf6\xdb\xa7\x65\x21\xaf\xe7\x20\x17\x1a\x7c\x3d\x21\x79\xf3\xe9\x59\x2b\x94\x73\xd0\x47\x09\xc1\x90\x47\xb4\x13\x43\xfb\x38\x60\x8b\x40\x4e\xf2\x20\x5a\x63\xd7\x69\xc6\x95\x36\x3e\xba\x0a\x91\x58\x2e\xb0\x14\x2b\x46\x05\x4c\x31\x43\x3d\x36\xdd\x86\xca\xf5\xc4\x9a\x85\x7c\x49\xd5\x0a\x52\x9c\x20\x03\xc1\x65\xee\x1d\xc6\xa0\x27\x47\x60\x07\xa7\x08\x92\x05\x23\x97\x1b\xb3\xef\x42\x5b\xde\xdd\x17\x7b\x1b\xd3\x10\xd9\x37\x17\xd8\x0f\xe1\x10\xdf\x0d\x53\x4b\xd7\xc2\x9a\xb9\x0e\x98\x50\xbc\x0c\xbe\xf0\x30\x3f\x69\x09\xd8\x52\xad\x37\xaf\xc1\x9c\xf3\x25\x5b\x4e\x31\xed\x51\xc7\x9b\x7f\x2d\xa9\x63\x49\xe7\x49\x32\x7e\xdd\x9f\x22\x64\x04\x41\x18\x38\x4c\x31\xfb\x29\x4e\xac\xec\xe6\x8b\x4d\xd2\x52\xb2\x58\x3e\xfa\x32\x10\xa9\xd2\x66\x80\x6f\x85\x90\xfb\x10\x37\x4b\x05\xdd\xff\xf8\x12\x3f\x20\x85\xf8\x9e\x01\xf7\x73\x51\x16\x73\xc2\xea\x05\x7b\xe1\x93\x8f\xb0\xc0\x2e\x84\xf9\x69\x14\x96\xdf\xac\x37\xd1\x3e\x6b\x06\x65\xfa\x46\xee\x8c\x8b\x34\x55\xb4\xa9\xba\x26\x05\x8a\x80\x6c\x0f\x81\x33\x35\x67\x2e\xf8\x7d\x69\x14\xaf\xcc\xf6\xfc\x61\x77\x5f\x46\x2c\xe7\xf0\xb8\x69\x17\xf4\x88\xbc\xd3\x3e\x82\x8c\xdb\x27\x6a\x50\xff\x09\x82\x1f\xe2\x3c\xe8\x6b\x76\x07\x40\x62\xd4\x66\xbb\x9a\x03\x16\x47\x40\xb3\xed\x73\xd3\xc1\xfb\xc9\x43\xcf\x98\x07\x24\x3b\xd2\xb4\x9f\x95\xae\x4c\xb3\x13\x95\xe7\x12\x87\x86\x52\x78\x42\x83\xfe\x13\xba\x8a\xd6\x9e\xb8\x3e\x9e\x17\xfa\x3b\x41\xf0\x09\x12\x03\x3a\x11\x3a\x28\xa5\x1c\x1c\x6e\x84\xc3\x0f\xa5\x64\x1c\x91\x25\x9f\x2f\x4c\xc8\xbd\x6c\x68\x27\xaa\xc5\x03\xe2\x8a\x5d\xb6\x70\xc1\x15\x8e\x9a\x5d\x5e\x59\x69\xdf\x90\x96\x2a\xba\xb4\x6a\x97\xdb\xdf\x9a\x25\x45\x2e\x1e\x64\xc3\x16\xfb\x53\x10\xcb\x09\xbf\xdd\x9b\x66\x2f\xaf\x43\x83\x61\x47\xd2\x0a\xb2\x57\x92\x96\x91\x94\x68\x60\x02\x33\x5a\xe4\xd5\x7e\x84\x20\xdb\xbe\xbc\x5b\x51\x15\xc9\x49\x92\x1d\x87\x93\x7f\x42\x2a\xbc\xce\x51\x05\x44\x93\xbb\x0f\x29\x7b\xff\x8d\xc3\xbc\xa6\xc3\x7c\xc9\xb5\x48\x6c\x0c\xc2\x9b\x48\xc0\x6f\xa4\x0e\xef\x36\x23\x3d\xfd\x44\x6a\xd2\xf2\x32\x77\x18\xa1\x9d\x2f\x35\x3d\x51\x0c\x80\xe7\x68\x73\xd9\xb2\x6a\x97\x0e\xcc\xbf\xbc\xba\x3c\x1e\x52\x03\xe7\xbc\xeb\x40\xc5\xe0\x7b\x42\x6b\x5f\xfa\x79\xc3\xa6\x0b\x29\xaf\x12\x07\x3b\x8c\xc0\x97\x17\xdd\x74\x52\xc9\x65\x04\x68\x3e\xd6\x7c\xae\x9f\x3a\xc1\x30\xb6\xd3\x74\x44\xb8\x68\xe0\xb8\xf6\xfa\x10\x00\x42\xa1\xc9\x92\xf1\xc2\xa4\x0a\x6f\x0c\x0c\xe5\x50\xb6\x9d\xde\xb5\x39\x25\xaf\xb3\x00\x2d\xb3\x8f\x94\x4d\x8e\x49\xed\xf8\xbf\xc6\x35\x1f\x78\x53\xbe\x09\xf0\xb5\x75\xd6\x30\x00\xb8\x93\x29\x71\x31\x23\x6b\xa2\xee\x72\xf7\xfc\x7b\x4f\x46\xec\xbb\xe3\xb3\x58\x9e\x47\x7e\xe5\x50\x1c\xf6\xc4\xfe\x92\xb8\x9f\x3e\xc9\xef\xba\x76\x8c\x48\x87\x80\xf4\xf8\x44\xc7\xc1\xd8\x1e\x9f\x35\xe4\xbe\x61\x62\x3c\xbf\x66\x03\xfa\x53\x15\x41\x7b\x1d\xf2\x90\x42\xec\x73\x45\x8d\xf4\xa8\xb0\x4b\xfe\xde\xd2\x16\x8f\x15\xd1\x87\x2d\xae\xc5\x78\xfb\xd7\x49\x75\xd7\x04\x0a\xf5\x82\x97\x71\x64\xd7\x23\x7e\x3c\xa0\x46\x76\x30\x21\x02\xbe\x78\xcd\xcc\x8d\x54\x57\x38\x57\x71\x9e\x95\x91\x70\x67\x0e\x8b\xa7\x95\x59\x91\xb8\xd4\xaa\xd0\x6e\x4f\xe6\x72\x28\xbb\x72\x74\xd8\xf3\xdf\x6b\x4d\x77\x5f\x86\x45\xd6\x4a\xb1\xec\x83\xef\xa1\x1c\x8b\x6c\x2f\xc9\xda\x54\x91\x26\x77\x53\x94\x45\x76\x5d\x21\x48\x72\x70\x0d\xd5\x35\xaf\xd8\x71\x55\x41\x2a\xfc\xad\x86\xce\x63\xd7\x53\x66\x5f\x99\x1a\x56\x5f\x0e\x68\xc0\x24\x9f\x3a\x7c\x4b\x68\xc3\x29\xf4\xda\x26\xc3\x1b\x2d\x7f\xdf\xbe\xc7\x8b\x7f\x2c\x64\x14\xad\xbd\xbe\xdb\x31\x10\x73\xb9\x9f\x66\x05\x1b\xc3\xdf\x2f\xb0\xe4\xe6\xcb\x6f\xea\x12\x6b\xab\xe3\xcb\x59\xd6\x5a\xa4\xdc\x72\xe8\x4f\x6b\x95\x63\xa8\xbe\xea\x3b\x73\xb1\x71\x2b\xeb\xbe\x11\x57\xf4\xb9\x9b\xc6\x31\x45\x1a\x6f\xd7\xa1\x2b\x79\xe9\x8c\x3d\x8b\xec\x4c\x1d\xeb\x97\xff\x71\xfa\xfa\x9e\x3b\x7f\xf8\x23\xd1\xce\xfe\x13\x0d\x1a\x16\xac\x9a\xb7\x3d\xa3\x04\x14\xaa\xa3\x1b\x2d\xa9\x23\xa2\xa8\x8b\x56\x52\x3c\x10\x1a\x46\xd1\x7d\x4a\x0e\xa3\x3e\x2e\xb7\x3e\xce\xcf\x05\xe9\x13\xaa\x51\x25\x18\x21\x8f\x60\xa1\x9b\xaf\xc1\x01\xe4\xa7\xff\x38\x7d\xed\x43\x7d\x81\x7a\x34\x24\x1d\xe7\x39\x97\xdf\xa1\x4f\x66\x18\xde\xa1\x8d\xea\x2a\x43\x3a\xa3\xed\xe7\x29\xa4\xfa\x83\xf1\x13\x88\x55\x6c\xce\xb5\x51\x2b\x27\xcf\xe5\x2c\x22\xd9\x39\x97\xc3\x2d\x57\x6c\x45\xfe\xfd\xbb\xb3\xff\xfc\xaf\xef\x7f\x38\x39\xfe\xfe\xbf\x5e\x1d\x9f\xfc\xfb\xf9\xeb\xb3\x9f\x7f\xbe\xfc\xcf\xcb\xb7\x67\xaf\x7e\xfe\xf9\xa4\x53\x8a\x09\x73\x82\x3d\xf6\x2f\x99\xf9\xf9\x67\xb7\xc7\xf4\xcf\x3f\xbf\xad\x5a\xde\xfe\xfc\xf3\x85\x77\x73\xc2\x39\x6a\xa7\x2a\xa1\x03\x08\x40\x8f\xf5\xd5\x91\xa0\xdf\xe1\xf2\xc3\x5b\x0e\xea\x2e\x33\x9a\x65\x41\xd5\x7f\x8a\xb8\xbc\xbd\xae\x05\x45\x6e\x4e\x2f\x7c\xed\x9d\xfd\xf7\x2a\x32\xa1\xca\x2e\x20\x97\xfb\xa4\x8a\x10\x78\x20\x53\x66\x6e\x18\x8b\xb1\xcc\x4b\xe0\xc1\xfd\x64\x55\x5f\x58\x34\x87\x71\x36\xe8\xc2\xe6\xd2\x94\x5c\x21\xe0\x35\x67\x37\xa0\xa6\x6b\x3e\x17\xb4\x89\x42\x83\xd0\x94\x18\x33\xc0\xfa\xdf\xdf\x92\x12\x1e\x15\x71\xb6\xb2\x1e\x85\x30\xd9\x30\xcb\x64\x23\xc3\x64\xd0\x04\x8b\x6a\x4b\x1b\xab\xc9\xc5\xf9\x29\x79\x7e\xdb\xc9\x00\xdb\xc0\x65\x95\x5c\x6e\x63\x88\xe0\x88\xb2\x2a\x1e\xea\x83\xd9\x90\xc7\xf7\xcd\xe8\x1e\xe0\x7a\xb7\xfd\xa4\x66\x5d\xd3\xac\xc8\xaf\x1d\x6d\x50\x7b\xbd\x90\xf5\xe6\x49\x73\xf0\x27\xff\xd1\x9f\x27\x7f\x0a\x84\xff\x79\xf2\x27\x2b\x7d\xc2\xce\xf8\xf3\x44\x5f\x57\x93\x3f\x55\x4d\xa7\x0d\x53\xc4\xdd\x74\x6b\xe8\xd3\xdf\x68\x42\x15\xe4\x1c\x75\x23\x00\xa5\x14\xec\xdc\x7b\xd1\xe8\xd0\xa9\x00\xf9\x9d\x7f\x51\xb4\x62\x17\x4c\x71\x30\x0d\xa4\xa8\xef\xb5\x19\x95\xe7\x60\x52\xbb\x9e\xa6\x76\x4f\x6a\xa4\x23\xcc\x99\x60\xac\x46\x4b\xcd\x91\xcd\xc8\xdc\x52\x0d\xeb\x3e\x01\xa3\x6a\x6a\xb5\x81\x4a\x31\x8a\xa8\x6f\xa4\x66\x0d\x83\x9e\xb5\x49\x4d\xc6\x31\x44\xe2\x53\x76\x85\x14\x63\xc1\xe6\x98\x42\xeb\x52\x49\x10\x4f\x11\x8f\xd9\xbf\x33\x25\xa3\x74\x4d\x6d\x64\xdb\x37\x33\x69\x56\xe4\x9a\xd3\x5b\x8e\x0f\x6a\x05\xb4\xbc\x42\xe1\x78\x28\x24\x91\x10\x03\xee\x04\x77\xe1\x9a\x45\x67\x48\x2d\x6f\xc4\xed\x55\x0a\x07\x72\x1f\x0a\x71\x05\x6f\x46\x83\xbe\x78\x30\xb9\xa4\x05\x9e\x18\x44\x09\xd2\xac\x0e\xdf\xee\x22\x7a\xa8\x53\xe0\xb7\x2d\x3a\x34\xb9\xf2\xe0\xc6\xee\x48\x50\x9d\x00\x58\xce\xbe\x8d\x27\x64\x7c\x68\x26\x6e\xeb\x67\xa7\x31\xeb\xfb\xe9\xf5\x87\x03\xd6\xe0\xe1\x21\xc6\xd6\x92\x55\x66\x52\x55\x7c\xda\xac\xc8\x82\x36\xa1\x1f\x05\x8d\x57\xe9\xb6\x93\x72\xc9\x4c\xbc\x10\x8d\x14\xf3\x58\xd7\x0d\x6d\x25\x2a\x2b\x94\xbb\x16\xa9\xb3\x6a\xdc\x4a\x76\xc9\xfe\x8f\xd8\xef\xf1\xf5\x33\x3f\xe9\x29\x32\x27\x25\xa7\x2a\x35\x9b\xca\xc8\x86\x21\xa7\xe4\x08\xa7\xad\x8d\x08\x9f\xe8\xf8\xe9\x0f\xa5\xaf\x5a\x82\xd7\xed\xad\xdb\x38\xc0\x72\x6f\xc3\x2b\x83\x1f\x03\x3a\xe9\xb8\x54\x5c\xfc\x06\x9a\x33\xac\x88\xd5\x8a\x5c\xfb\x24\xd7\x3f\xf4\xf6\x41\x31\xbb\xb1\x14\x6f\x1b\x46\xfe\x74\xc5\x56\x23\xe0\xf6\x11\xaa\xf3\x7f\x26\x5d\xc8\xa0\x82\xe7\x43\x8e\x64\x6b\x09\x90\x8a\xfc\xc9\xff\xeb\xcf\xf7\xd8\x06\x2e\x27\x0c\x87\x2f\xb5\xab\xce\x6c\x67\x88\x4c\xc3\x23\x30\x39\xe6\x16\xd0\x81\xd6\x18\x89\xb3\x3c\x21\x67\xd0\x20\x15\x0d\x48\x04\x98\xb7\x96\x40\x7c\x73\xa2\x67\xf5\x27\x1f\x4e\x75\xbb\xcc\x3b\xee\xa3\x3c\xbd\xd7\xd2\x75\x05\x63\x23\x72\x01\x7d\x8f\xfa\x4f\x40\x14\xbf\x96\x67\xef\x59\xd5\xa5\x55\xbf\x67\x85\x80\xae\x58\x42\x36\x65\x99\xd5\xfb\x8e\xad\xfc\xa9\x88\xcb\x60\xed\xf3\x00\x07\xd8\x8b\xa8\xa8\x7e\xf0\xe3\xcb\x78\xc5\x6e\xdf\x1a\x1a\xaf\x73\xef\xd7\x00\x8a\x5c\x27\xce\xb0\x2b\xbd\x56\x74\xf6\x9e\x6b\xa3\xff\x37\xca\x93\x4a\x2e\xa7\xfe\x50\x45\x72\x3c\xaf\x21\x12\x93\x5b\x7d\x87\xa7\x92\x4a\x5a\xd6\xda\xfa\x17\xd8\xd5\x02\xff\xe0\x27\x30\x6a\x42\x44\xed\x54\x3c\xd1\xae\x40\x4b\x0a\xc0\x45\x76\x11\x09\x98\xb3\xb4\x05\xf4\xb5\x3c\x38\x20\xee\x3a\x5c\xae\x11\x39\xb3\x66\xd2\x88\x7c\x6f\xd0\x26\xfe\x8b\x99\x0c\x74\x02\xf8\x3a\xb1\x91\x23\x8c\x00\x2c\xf3\x6b\xc7\xaf\x69\xc3\xd0\x0f\x7b\xc3\x9b\xba\xa2\x0a\xf3\x1b\x51\xfa\x13\x2d\x5d\x31\x2c\xb6\x3e\x4d\x8a\x64\x05\xb5\x80\xf5\x5c\xef\x3a\xd3\xb5\x54\x19\x5e\x75\x0d\x55\xc4\x8a\xc2\xb9\x54\x49\xc0\x35\x84\x7c\x6f\xdc\x2c\x79\x48\x48\x22\xba\x25\x53\xbc\xb2\x1c\xdf\x52\xc5\xb5\x14\x9a\x1c\x86\xbc\xdf\x41\x6a\xef\x5b\x4b\x51\x7f\xd2\x9e\x84\x5f\x78\x56\x48\x0b\x44\x66\xed\x82\x5e\x90\x24\x19\x7b\x78\x95\xd8\x0e\x6f\xd7\x09\x59\x6f\xce\xe5\x2c\x05\x39\x0b\xdd\xee\x62\x29\x78\x88\x45\x71\x4e\x18\x25\x51\x20\x67\xfe\x5c\x0c\x07\x4e\x0c\xd6\x62\x86\xed\xee\xe6\x42\x2a\x56\x1f\x45\xfa\x51\x10\xd5\x13\xf2\x6d\x68\x23\x7d\xdb\x9e\x83\x78\xf5\x81\x6e\x40\xbd\x71\xef\xe6\xe4\xa8\xe3\xf1\xfe\x64\x98\x49\xc5\xae\x99\x22\x87\x0e\x76\x8e\x5d\xf3\xca\x1c\x4d\xc8\xff\xdf\xda\xa1\xa9\xb1\xc1\x60\xe0\x3a\x59\x1d\xba\x1f\xf4\x9d\x10\x9f\x91\x43\x18\x2a\x36\x6e\x8f\x42\x03\xcc\x95\x36\x6c\x99\xce\xcf\xbb\x2a\xd1\x48\xce\xab\x2c\xb1\x09\x7e\xf4\x26\x78\xbf\xb8\x68\x0c\xae\x71\x7b\xe8\xdd\x7f\xeb\x8e\xa5\x78\xb9\x13\x3d\x9c\xe1\x5c\x87\xf3\x20\x8a\xfe\x86\x84\x12\x7f\xe4\x87\xbd\xf0\xdf\x90\xc2\x40\x14\x9b\x83\x4c\x45\xd9\xb3\xe3\x36\xbc\x89\x69\xa2\x46\xb6\xb2\x91\xf3\xd5\x65\xab\x18\xad\x4f\xa4\xd0\x46\xc1\xc9\x71\x9f\x5e\xaf\xb7\x1f\x22\xc2\x3d\x77\xea\x4a\x6b\x42\x57\xcd\x19\xc2\x46\xc9\x6e\xbe\xc0\xa6\xe4\xf0\x43\x42\x2b\x25\xb5\x0e\xef\x74\x5b\x8b\x12\x5c\x8f\x7a\xe2\xbb\xf4\x7a\xf7\x77\xe8\x78\x0e\x63\x62\x3f\x57\xba\x72\x52\x89\x4e\xa1\x7f\x6f\x5f\x4d\xe0\x49\xbf\x2d\x3b\x1c\xdb\x33\xfb\x83\xf3\x60\x55\x96\xe3\xd7\xa7\xb7\xcd\xb4\xd8\x9d\x45\xfe\xa1\x25\x8d\xfa\x5b\x02\x86\x69\x58\xbb\x60\xef\xc2\x2c\x23\x02\x22\xf4\x0b\xe6\xd7\x4c\x84\x99\x79\x20\x0d\xd0\x97\xf4\xfd\xe5\x15\xbb\x49\xf8\xa5\x7f\xd1\xef\xd8\xed\x6b\x38\xc6\xe0\xac\x7b\x27\x34\x35\x5c\xcf\x38\x9d\x36\xf7\xd9\x85\x1d\x30\x5d\x2e\x59\xc3\xaa\x1d\x5a\x15\xdf\xc7\x44\x04\x64\x40\x23\xc9\x8c\x8b\x35\x1e\x4b\x3b\x3a\x7a\x10\x3c\xdf\x88\x8e\xeb\x80\xd0\xe7\x86\x85\x62\x3e\xd9\x09\xd7\xd1\x3f\xe4\x2c\x62\x92\x46\xb7\x9c\x32\xe5\x45\x58\x9a\x7a\xe4\x30\x2f\xb1\x13\xb6\x6e\x25\x16\xd3\x7a\xd6\x21\xa9\x4d\x56\xb3\x2b\x6c\x72\xcb\x55\x60\x4a\xcf\xde\x5b\xbd\x57\xa7\x55\x2c\xe0\x35\xe0\xa4\xf5\x87\x62\xa6\x92\x2f\x3e\x5b\x5b\x3a\xb7\xe9\x97\x56\xed\xc6\x98\x46\xfc\x49\xaa\x18\xee\xaf\x9c\x12\x2d\xbc\x92\x0b\xb5\xf0\x2a\x93\xac\x48\x10\xc0\xe0\x83\x73\x87\x73\x1c\xbe\x89\xd1\xe5\x9c\x7f\x5f\x8f\xd0\xda\x77\xa8\xb2\xa2\x57\xc6\xec\xcd\x19\x64\x81\xef\xc0\x99\x23\x57\x6c\x05\x8f\xc7\x11\xd3\x9b\xeb\x65\x6e\x0b\x4f\x58\x4e\xf9\x19\x5e\x63\xfb\x4a\x59\xbf\xf7\xd3\x9c\xfc\x90\xdc\x3d\x8e\x57\xa2\x67\xb1\xbf\x06\x7c\x7c\xd5\x3b\x0b\x91\x27\x07\xce\xc2\x5e\x2e\xf7\xae\xc2\xac\xb1\xb3\x8b\xd7\xf0\xca\xf1\xc0\xf5\x57\xb9\x0d\x1d\xd3\xf4\x29\x5e\x39\x0a\x39\x2d\x72\x96\xbd\xbd\xf0\xda\xe6\xa5\x3b\x17\x23\xf2\x5a\x1a\xfb\x1f\xe7\x4e\xb3\xdb\xf9\x54\x32\xfd\x5a\x1a\xf8\x64\x2f\x56\x12\x27\x60\x9f\xd6\xd1\x79\x2d\xac\x18\x16\x78\xdc\xb8\xe4\x3b\xab\x28\xb8\xf5\xda\x66\x06\x9f\x0b\x22\x95\x9b\xf2\x4c\x12\x82\x25\xad\x1d\x01\x71\xfe\x80\x6b\x43\xfe\x41\x43\xdc\x52\x11\x2f\xf3\x9d\x11\xe3\x08\x01\x48\x66\xfc\x06\x90\xe2\xdb\x06\xea\xd1\xeb\x0e\x26\x8c\xda\x99\xa3\x86\xcd\x6f\x5d\x81\xb9\x7e\x2d\x99\x9a\x33\xd2\x42\xd4\xa9\x00\xe7\xe6\x28\x12\x78\x65\xaa\x13\x31\x31\xd9\xdb\xa8\x70\xf5\xeb\x1d\x3e\x14\x74\x4a\xb0\x35\xca\xe8\xa8\x19\xfb\x3d\x22\x05\xb5\xae\x25\x05\x07\xc9\xff\x0b\xc1\xe5\xff\x21\x2d\xe5\x4a\x4f\xc8\xb1\x4f\x80\x8c\xbf\x73\x39\x24\xd1\x63\x32\x48\x69\x37\xc3\x1d\x54\x10\xe6\x20\x37\xe4\x6c\x43\x19\x1f\xb9\x76\x00\xf6\xc0\x0e\xce\xe5\x83\x2b\xb6\x3a\x48\x05\x7f\xc2\x2b\x96\x28\x07\xe7\xe2\xa0\xcf\x78\x1c\x48\x81\xa0\x93\x02\xfe\xfa\x01\x7c\x77\x70\x77\x7a\x7f\x96\x06\xd9\xe3\x39\x5d\x14\x50\xc1\x32\xb7\xec\x60\x4f\x2d\x69\x9b\xb7\xa5\x7a\xe6\xfb\x8e\xad\x76\x16\x82\x79\x35\xa0\xc2\x9b\x30\xc6\x99\xea\xbd\x66\xa9\x11\x1e\xa0\x81\x14\x82\x85\x73\x0b\xca\x6b\xa6\xd0\x25\x98\x34\x36\x3a\xc1\xec\x59\x13\x2a\x01\x7a\x34\x20\xe0\x47\x18\xd8\xf2\xa1\xf7\x68\x34\x52\x5e\x75\xad\xe7\x67\xc8\x12\x4e\xdd\x31\x5c\x54\x72\xe9\xfc\x22\xf8\x9e\xe0\x09\x77\x1b\x73\xec\x12\xb2\x50\xc6\x84\xad\x80\x29\x5f\x03\xaf\x4f\x62\xd4\x32\x9e\xcc\xe0\xe0\x65\xf6\xd8\x0f\xfe\xc0\x7e\x7a\x3f\x3a\x55\x49\x04\xf8\x52\x80\x78\x16\x5c\x97\x6a\xba\x0c\x71\xff\x99\x54\x53\x5e\xd7\xe0\x8b\x44\xe2\x42\x3d\xda\x1a\xe3\x58\x49\x33\xf0\x43\xa5\x09\x8d\xb5\xa7\x6e\x29\xd3\x5f\x77\x76\x89\x27\x26\x25\x6b\x1a\x2f\x18\xc4\x75\x6f\xb2\x0f\x0a\xaf\xb8\x3e\x35\x9e\x11\xec\xec\x27\x8d\x34\x65\x3e\x7c\x68\x8f\x24\xd1\x35\x8d\xd5\xf6\x40\x11\x43\xb7\x0c\x46\xfa\x40\x24\xbb\x9c\x89\xb9\x15\xd2\x66\xc8\x6c\x49\x7d\x2c\x5c\xf3\x0d\xd8\xdb\x53\x66\xa8\x6f\xc3\x21\xd6\xc0\xaa\x86\x93\x7f\x2e\x2e\x64\x3d\xf4\x68\x7f\x04\xb5\x8a\x1c\xfa\x7f\x4c\x57\xc9\x35\x39\x24\x5b\xc7\xcb\xd0\xec\x4a\x1e\x0e\xf9\x0a\x97\x73\xa6\xef\xee\x58\x80\xe1\xa3\x50\x14\xe6\x06\xcf\x15\x43\x90\x62\x90\x4a\x20\xa5\x5c\x57\xae\x4e\xb0\x6b\x66\xb9\xb7\xe6\x76\x0e\xa7\x5d\x22\xa4\x9b\x4b\x1f\xfb\x65\xc3\xab\xff\xff\x3b\x95\xaf\xa5\xf1\x61\xaa\x5f\x46\x2e\x60\x8e\x7a\xdc\x7b\xbe\xec\x96\xd8\x56\xdb\x18\x6b\xc3\xf0\xd9\x8c\xa9\xc4\xde\x81\x24\x94\xc6\x0c\x7d\xd7\xc3\x68\x8d\x93\x12\x86\xaa\x39\xd4\x73\x3b\x3f\xb4\x57\xb9\xe6\x8d\x9c\xd2\x86\x2c\xb9\xb0\xa4\xa5\xcd\xc4\xdb\x8d\xe7\x84\x37\x76\x7f\x7e\x84\x38\xd0\x41\x5d\xe3\x2b\x74\x8e\xa7\x65\x48\x28\x97\xdb\x3e\x5b\x9b\x8d\xb5\x87\x83\x7c\x69\x98\xd6\x98\xbd\xfc\x8a\x8b\x53\x17\x5a\x4c\x1a\xf6\xa5\x95\x8e\xef\xe9\xb2\x6d\xd8\x08\xc3\x8f\x5f\x8f\xff\x2e\x05\x23\xae\x2a\x63\x14\x58\xd4\x95\x19\x19\x49\x9e\xa3\xc2\xdb\x06\xd4\x34\x5f\xfe\x93\x44\xc1\x40\xee\x86\x60\xab\x26\x5f\x3d\xfd\xea\xe9\xf3\x34\x11\x73\xee\x2a\xa3\x2a\xaa\x5d\xf3\xdd\xcd\xd5\xbd\x75\x8d\x11\x5e\xff\x20\x76\x76\x9e\xbb\xff\x7e\xe5\xfe\xfb\x35\xf9\x47\xe2\xd3\xc8\x05\xb9\x18\xfc\xd7\xfe\x27\xf1\x69\x63\xcb\x3c\xd1\x72\x3d\x1f\x0d\xcf\xd6\x8a\x0a\x3c\xf8\xec\x39\xef\xf6\x37\x68\x7b\xf8\x0a\x70\xce\x54\x72\xc9\x60\xea\xbf\xfa\xdf\x69\xba\x26\x3e\x17\x0a\x08\x0c\x91\xc2\x3d\xfd\xf9\x21\x4c\xd7\x11\xb9\x81\xbc\x87\x25\xbd\xc2\x80\xd5\x71\x65\x3a\xda\x58\x82\x0f\xbf\x1e\x3f\x3f\x22\x52\x0c\x6e\x4f\x22\xe1\x9a\x4b\xab\xaf\xf9\x99\x38\x7c\x9e\x08\x41\xb1\x3e\x9d\x5f\x6d\x99\xce\xc1\x4c\xc2\xdb\x52\xb1\x82\x57\x28\x2b\x93\xbd\x38\x3e\x16\xab\x1b\xba\x0a\x42\xd9\xab\xeb\x73\x7e\xcd\xc8\x82\xcf\x17\x00\xd6\x90\xd1\xce\x95\x60\x5a\x3a\xc8\x58\xee\x3b\x6e\x22\x21\x2b\xc2\x13\xb5\xbf\x73\xf3\x44\x43\x46\x0b\xc6\x28\x1c\x0e\x4f\x28\xa3\x0b\xb5\x31\xcf\x41\xac\x3c\x5b\xc3\x21\xd9\x71\x9a\xd3\xd7\x5f\xdd\x5e\xa7\x08\x32\x79\x67\x6a\x45\xa0\x60\xd0\x8f\x61\xf3\x34\x5b\x3f\x5c\x32\xb8\xf6\x37\x4e\x2d\x38\x28\xc2\xe1\x19\x8e\xf1\x2b\x67\x0d\xf7\x27\x5a\x3f\x7b\x69\x7e\xd9\x0b\x59\x87\x04\x11\xe2\xf4\x69\x48\xac\xd3\xe4\x60\x78\x0c\x1c\x40\xa2\x5d\xf0\xde\x38\x88\x69\x67\xef\x71\x29\xec\x7b\xf8\xcd\x9f\xd5\xa5\x9c\x90\x63\x51\xf7\xc5\x4e\x89\xb3\xc4\x7e\xed\x68\x03\xce\xeb\x39\xe4\x09\xaa\x32\xf3\x15\x95\x45\x6d\xb4\xdd\xed\xa5\x79\xe2\x6b\xe3\xbe\xd7\x5d\x03\x99\x96\xbf\xfd\xfe\x45\x39\x41\xf7\xa9\x56\x60\x75\x86\x5c\xab\xa5\xc4\xd6\xfa\xc2\xab\xff\x2e\xf3\x42\x3a\xbf\x44\xd6\x66\x38\x9f\x6d\xa9\xf6\xeb\x73\xb7\xc8\x94\x2d\xe8\xb5\xdd\x8e\x80\x32\x15\xef\x54\xb7\xc4\xa0\x62\xe5\x24\xa3\x47\xf5\x1f\x4e\x04\xea\x21\xcb\x3c\xcb\xd8\xe6\xfd\xbb\x49\x83\xef\xf7\xd3\xfa\x69\x15\xe2\x1f\x03\x4b\x22\xd1\xa4\x4e\x51\x50\xbf\x1a\xad\xcd\xab\xfb\xfc\x77\xf7\xa5\xb7\x7e\x95\xa6\xb7\xde\xb9\x72\x89\xff\x4d\xb6\x91\xfa\x8d\xbb\x75\xbf\xfe\xee\xb0\x9f\xf5\x23\xa8\x3b\xd8\x10\xb8\x00\xdc\xd5\x27\x39\x27\xee\x30\xa7\xde\x6b\x6e\x3a\x8a\xf8\x60\x82\xdd\xb8\x8a\xef\x68\x59\xd7\x96\x28\x72\x72\x79\x95\x2d\x4d\xae\x4c\x59\x45\x3b\xcd\xa0\x2c\xc1\x9a\xdf\x44\x5b\xf6\xf3\x0e\xc3\xaf\x0f\xbf\x26\x63\xf2\xec\xc8\xee\x6e\x81\xa2\x05\x58\x30\x56\xb8\xa1\xef\x0e\x1a\x7a\x66\x61\x4d\x7d\xbb\xce\x89\x52\x8e\x3b\x70\xd1\x35\xb5\xf7\xe1\xa9\x4d\x42\xd6\xec\x78\x36\xe3\x82\x9b\x55\x2a\xda\x7e\x19\xf5\xe9\xf5\x06\x25\x91\x1a\xb5\x90\x37\xe4\xc6\x41\x1d\x00\x2f\x3b\xc4\xbe\x98\xfc\xa7\xf6\x8f\x2c\xc7\x35\x1c\x96\x41\x17\x71\x16\x47\xd0\x07\x9c\xb4\xb1\x7c\x37\x71\x65\xfd\xae\x8f\x50\xca\x58\x63\xf2\xef\x52\x48\xf5\x02\x8d\x43\x6c\xb5\x1f\x74\x90\x0f\xbe\x96\x3b\x5f\xaa\xa6\xab\xa3\x06\x1d\xbd\xf6\x94\x78\x7c\x8e\xc9\x39\xf8\x6f\x5f\xfc\xd6\xc8\xc1\xcb\x0b\x18\x0f\x75\x38\xf0\x3e\x46\x50\x7a\x42\xff\xd6\x1a\x7e\x38\xca\x39\x06\x02\x87\x81\x49\xfb\x2d\x4c\x2a\x69\x81\x7f\xee\xbd\xf6\xc8\xce\x08\xd4\x44\x25\x37\xae\x28\xb7\x95\x62\x3a\x3e\xba\x91\xb0\x35\x1b\x26\xa5\xaf\x6f\x80\xa4\xd1\xef\x63\xd3\x20\xef\xd9\x83\x47\x76\xc6\x51\x3f\x22\xb4\x91\x10\x44\xb2\xc7\x91\xfd\x88\xd5\xee\xc6\x99\xf4\xb1\xa6\xf5\xd8\x47\x12\x19\x0b\x00\x23\xed\xcb\x57\x46\x83\x5d\x50\x62\x0b\xfa\x05\xf9\x84\x4d\x77\xcf\x1b\x0c\xa9\xdc\xd5\x0e\x8b\x92\xe9\x77\x57\xd7\x17\x48\xf0\x0e\xeb\x2b\x06\x9a\x05\x2c\x1c\xc6\xd2\x26\xb0\x07\xe3\xde\xef\xd4\x85\x9b\x9d\xb2\xc4\x75\x72\xe2\xa7\x55\xa7\x39\x20\x0a\x57\xb4\x89\xed\x0e\x6b\xef\xf0\x9a\x29\x54\x77\xa6\x6c\x00\x12\x95\x5a\x6f\x81\xd7\x4f\xfd\xd3\x11\x50\x0a\x90\x0e\x70\xf0\x3f\x23\x36\xef\xc1\xb4\xab\xae\x98\xf1\x89\x19\x0a\x40\x5c\xda\xce\x90\x29\x6d\xa8\xa8\xec\x5e\x04\x4d\x36\xcd\x51\x3f\xf3\xae\x7f\x23\x91\x00\x1c\x2d\xf9\x6d\xb0\xa1\x45\x80\x27\xc2\x57\x88\xaa\x6a\xb9\xd0\xc6\x52\x8d\xe5\xb6\x79\x93\x77\xdc\x68\x39\xb2\x52\xd7\x0f\xba\x11\xbc\xc0\xe1\xdd\xbf\x31\x7f\xc6\x69\x04\x8c\x19\x87\x6a\x17\x25\xaf\xc8\x94\x56\x6d\xdb\x74\x3d\x07\x23\x3c\x3c\x2d\xd2\x5e\x92\x4d\xe6\x90\xfd\xb7\xb6\x3d\x0e\x86\x70\x92\x1e\xa1\xea\x60\x84\xab\x68\x77\x89\x03\x1a\xc5\x97\x07\x05\x9d\x9a\xdc\x19\x17\x35\xc0\x17\xaf\x13\x13\x9e\x3a\xa4\xca\x1a\x02\x9e\x22\x30\x73\xcb\x53\xb4\xdd\x1d\x7b\xdf\xe2\x73\xc3\xc7\xbd\x2b\x21\xba\xe9\xbe\x18\xaa\x28\x50\x64\x43\x1b\x0f\x42\x64\x55\x0a\x3e\xb3\x56\x57\x2d\x19\x66\x45\xa0\x7b\x3c\xd1\xf9\xc6\xbc\x5e\xd2\xbb\x88\x52\x4f\xed\x81\xbb\x85\x1c\xfa\xec\x00\x62\x58\xd3\xe0\xe9\xd0\x7b\xc4\xac\x25\x6c\x64\xef\x12\x4b\xf5\xed\x8f\xc9\x30\x34\xb1\x75\xb0\x78\x20\x8f\x29\x05\x91\xd3\x55\xe8\x7c\x9b\x9a\x83\x3b\xed\x0c\x99\xf3\x6b\xab\x42\x6d\xc4\x3f\xb6\xc5\x32\x30\xfe\xb4\x60\x4d\x4b\x14\xab\xbb\x8a\x65\x64\x02\xea\x44\x33\x9b\x90\xe3\xd8\x21\x08\x90\x1e\xe1\xb8\x3c\x18\xf0\xe2\x81\x6b\xd3\x9b\xaf\x28\xf2\x19\x48\x58\x30\xf1\xf8\x8c\xb0\x6b\xa6\x56\xa4\x95\x5a\x83\xec\x07\x7d\x01\x31\x18\x21\x9b\x72\xe6\x0b\x6b\xc0\xa9\x02\x73\xe6\xfc\x0b\x49\x83\x1f\x38\xa7\xc4\x01\x38\x95\x65\xb6\x0e\xb0\xbf\x51\xeb\xaf\x9f\x3e\x4f\x8d\x5a\x97\xf6\xfe\x5d\xc0\xff\x42\x48\x39\x2b\xb4\x7c\x3e\xdb\x26\x27\xc3\xdc\x0e\x24\xcf\xa7\x44\x9d\x53\x43\x93\x30\x33\x10\x1c\xfe\xfa\x28\x0a\x58\x7f\xfd\xf4\xab\xa7\xcf\x0f\xed\xdc\x7f\x75\x64\x57\x21\x0a\x2b\x7f\x15\x85\x95\xc3\x2f\xdd\x5b\x24\x20\x6c\x91\x3e\x69\xe7\xf0\xf9\xd1\x04\x6a\x1a\x00\x3e\xf5\x46\xaa\xda\x95\xf8\x7b\x40\x4b\xfb\xe6\xa1\x3b\x29\x5f\x7a\xe5\x73\x04\x42\x2b\x48\xc7\x34\xf7\x10\x04\x34\x20\x8c\xce\x0d\xf9\x72\x29\x15\xfb\x32\x1a\xe2\xa1\x2a\x06\x9b\xc9\x5d\x4b\xda\x8e\xaf\x12\xf2\x76\x73\x8a\x9d\x73\x4b\x9d\x3f\x94\xa2\xb6\xa4\xed\x2d\x9e\x73\x2d\x9b\x6e\x79\xdb\x2c\xec\x3c\x85\xe8\x7b\x57\xb7\xea\x86\x76\xa5\x95\x98\xe6\xb0\x74\x35\xc7\xd3\x55\x8c\x34\x3c\x65\x8d\x14\x73\x8c\x55\x86\x7e\x8a\xb7\x1c\xf5\xd3\x80\xdf\x2b\x29\x2a\xd6\x1a\xfd\x54\x1b\xa9\xe8\x9c\x3d\x75\x44\xde\x6a\xb0\xdd\x41\x16\xfc\x08\xd4\x0e\x2b\xdf\xb0\x67\x11\xbe\x47\xc0\x81\xf6\xf5\xdf\x20\x2f\x69\x05\xa8\x98\x30\xeb\x56\x5b\x8a\xfa\x1f\x8b\xd4\xe9\xde\x11\x6a\x41\x42\x83\xc3\x9c\x6a\x50\x7a\xa3\xcf\x1a\xaa\x0d\xaf\xbe\x6d\x64\x75\x75\x69\x64\x9a\xa3\xaf\x84\x85\xb1\x8d\x96\x01\x27\x08\x72\xfc\xd3\x25\x39\xe5\xfa\x8a\x28\xa6\x65\xa7\x2a\xd7\x49\x6d\x0d\x2f\xf2\xb6\xd0\xb6\x78\xd9\xcd\xd4\x30\xe3\x3a\x02\x90\x25\xad\x16\x68\xfa\xbb\xac\x07\xf6\xbe\x95\xba\xef\x0d\x9f\xc0\x52\x78\xc5\x8d\x34\x8e\x7f\xba\xdc\x7c\x65\xae\xa3\x1e\x1e\xe8\x43\xc4\x52\x1a\xf0\xc4\xf6\x99\xf2\x63\xa3\x58\x9a\x56\xb6\x75\xa6\x2d\xc3\x83\x53\x4a\xb1\x9a\x2b\xc4\x79\x75\xef\xca\xa6\x7a\x52\x69\x3e\xa1\x37\x7a\x52\xc9\x25\x39\xb9\x3c\x27\xb5\xe2\xd7\xa9\x6d\x9c\xf2\x44\xd9\x17\xf4\x46\x33\x24\x7f\x6a\xc9\xb7\x5f\xa7\xcc\xc3\x8e\x5b\x99\xe2\xdb\x9c\x9f\x26\xfc\x3c\xb7\xfe\x7b\xa6\xdf\xda\x77\x4f\xb4\xe7\x4a\x55\xcd\x21\x15\xde\x23\x3b\xe3\x0d\x43\xc0\x2e\xe4\x44\x17\xf7\x75\x62\x1f\xb6\xf9\x4a\x76\xe4\x86\xa2\x63\x1b\xce\xd9\xf4\xf2\xcd\xb7\xbc\x7d\x41\xce\x84\xee\x14\xeb\x8b\xd4\xd7\x49\xb0\x8a\xbb\x6f\x73\xec\xd1\x85\x40\x36\xb8\xed\x28\xe6\x19\x10\x63\x78\x9d\xa1\x75\xa6\x5f\x90\x03\xf6\xde\x7c\x73\x30\x22\x07\xef\x67\xda\xfe\x47\x98\x99\x3e\x98\x90\xf3\x65\xdb\xf0\x8a\x1b\x6b\x8e\x8a\x19\x53\xbd\xab\x18\x7f\x50\xa8\x09\xd4\xbe\xec\x49\x52\xa2\x92\x15\x9c\xc2\xc0\x9e\x3b\xe6\xf0\x40\x88\x67\xf2\xe8\x03\x71\x97\xec\x7d\x3e\x23\x12\x4b\x0f\x86\x28\xea\x5c\x87\x87\x5b\x86\x76\xa3\x8b\x84\x76\x50\xfd\xd5\xb3\xf0\x4b\xa9\xfc\x23\x9f\xd6\xec\xfa\xa9\xae\xe9\xf3\x11\xbc\x16\xf2\xe7\x6a\x6d\x0e\xa8\x26\x07\xcf\x6f\xdd\xc7\xa0\xbf\x2e\xf9\x92\x37\x54\x35\xab\x51\x3c\x97\xfd\xf3\xed\x51\xe9\x09\x01\x67\xf2\xb3\x03\x72\x88\x60\xe5\xa0\xae\x37\xcc\x77\x0b\x0c\x4d\x87\xa1\x02\x2a\xb9\x17\x5f\x6e\x62\x08\xc9\x4e\x0e\x21\x70\x30\xd1\xfa\x07\xd1\x24\x83\x7b\x94\xe2\x7e\x4f\x87\xc7\x0f\x54\x9d\x8b\x62\xcf\x24\x6a\x6e\xac\xbf\xc5\x77\x0c\xe2\xc2\x99\x00\xaf\x2c\x8f\x66\xe0\x59\xec\x9b\x38\x4b\xef\x8e\x48\x82\xa6\xb0\xeb\x05\xf5\x74\x40\x4a\xbd\xe0\xbf\x76\x8c\x9c\x9f\xfa\x83\xba\x65\x4a\x73\x6d\x98\x30\xa4\x1e\x68\xe8\x1c\xd5\xf6\xc3\xe3\x25\xfd\xbb\x14\xe4\xec\xdb\x4b\xf7\xa0\xe4\x6d\xb6\x7f\xab\x9b\x78\x58\xd1\xbf\x77\x8a\x59\x7b\x66\x67\x26\x97\x27\x60\xdd\xce\xb2\x9f\x93\x53\x6a\x28\x9a\x5b\x78\x62\xc8\xbe\xe5\x18\x98\x45\x53\xc0\x73\xf3\xbd\xed\xca\x19\x45\x81\xa8\x5b\x59\x42\xd1\xcb\xd8\x45\x49\x9b\x8f\xad\xe6\x8f\xe5\x67\xb4\x7f\xec\x08\x05\x2c\xa0\x1d\x5b\x1e\xf6\x7d\x5e\xa7\x7a\xf4\xf1\xe7\xef\xde\x9c\xef\xc0\x6e\xa9\xc0\x26\x9f\xbf\x92\x75\x19\xe3\xe5\x49\xf4\x40\xaf\xa2\x41\xbf\xe2\x13\xfc\x9c\x2c\xed\x48\xe4\xb5\x14\x6c\x44\xde\x30\x5a\x13\x7b\x58\xb9\x7f\xfe\xa4\xb8\x61\x93\x27\xbb\x52\x72\xfd\x22\x16\x99\x08\xff\x30\x3f\x09\xaf\xa3\x2e\x96\xd0\x6a\x16\x44\xba\xd3\x59\xa7\x8d\x9c\x12\x27\x52\x77\xf9\xf6\xef\xde\x9c\x17\x7b\xf9\x77\x6f\xce\xfd\xbb\xdb\x7f\xca\xd9\x7e\xbe\xf6\xbe\x19\xee\x2f\xd7\x2c\xe6\x7c\xcb\xe5\x95\xab\x89\xa0\x1b\xd6\xf8\xdd\x9b\xe2\x93\x1d\x1b\xe1\x05\x20\x9c\x9c\xa1\xf7\x82\x58\xba\xd2\xdc\xa0\x5c\x24\xc3\x23\x0e\x85\xab\x7d\x52\xdf\x32\x2a\xca\x7a\x83\xd6\x83\xf5\x0b\xb2\xec\x1a\x03\x4d\x78\x60\x6b\xd9\xbd\x06\x05\x64\x7e\x93\x11\xd7\x94\xd6\x6a\x07\x98\x69\x52\xbf\xf0\xe8\x49\xe1\x17\xdb\x7f\xf0\x8a\x0a\x3a\xb7\xb7\xc3\x89\x4d\x96\xf8\x67\xb4\xa7\x0f\x31\xc0\x2f\xc2\x57\xf4\x9a\xf2\x86\x4e\x79\xc3\x0d\x58\x23\x47\x13\x3f\x97\x08\x35\x03\x24\xef\x4c\xd8\xef\x9d\x49\x17\xf7\xe7\x80\xe6\x8e\xe4\xd0\x7e\xf7\xf4\xc6\x1e\x8a\x47\x13\x38\x21\xe1\xc6\x05\x53\xb1\xd5\x97\x3c\xb2\xdd\xf0\x6f\xee\xc8\x5a\xcc\xb7\xd0\xa2\x8d\x07\xb3\x91\x66\x09\x58\x69\xba\x53\x4b\xc0\x12\xb0\xd5\x12\x80\x2f\x5c\xab\xdd\x1d\x18\x03\x30\x7c\x82\x31\x00\xbf\x2b\x6c\x0c\xd8\x63\xe9\x73\x32\x06\x34\xab\x14\x33\x19\xe6\x00\x88\xc6\xc4\xdf\xe7\x1a\x04\x7b\x27\x17\xeb\x47\xb9\x18\x5f\x3d\x73\x15\x59\xa1\xfe\x71\x5e\x59\x0f\xfd\xf6\xf1\xab\x35\x94\x6b\x14\x5e\x97\x4e\x3b\xf0\x7d\xf8\xe1\xf7\x56\x64\xa5\xe0\xfb\xe3\x95\x7d\xa0\x87\x4d\x53\x66\x5e\xfc\xd3\xfc\xb4\xa0\xda\x03\x1f\x93\xe4\xad\x9d\xf9\x9a\x15\x6b\x17\xb3\x9d\x41\x3b\xd8\xd1\x5f\x5e\x0e\x13\x49\x4e\x58\xbb\x20\x2f\x2f\xb7\x1c\x60\x88\xdf\x61\xa7\x4b\x63\x7a\xc9\x13\x4d\x1a\x3e\x63\x86\xa7\x46\x46\xe2\x33\xec\x04\x69\x19\x1c\x60\x01\x98\xc9\x1f\x58\x38\x5d\x21\xf0\x28\xa4\xef\xbe\x1a\xec\x9e\x07\x78\xb8\x2c\xa5\xe0\x46\xde\xba\x55\x3a\x29\xd1\xc7\xc0\x0d\xbd\xeb\xa3\xc1\xd3\x61\x17\xf5\x8d\x9f\x4e\xf2\x2a\xfa\x94\x92\x4a\x36\x0d\xab\x3c\x96\x06\xb0\x69\xc6\xcc\xe1\xb5\xc5\x45\xee\x52\x81\xf5\xe4\xea\x8f\xe0\x24\x77\xee\xf0\xa7\xc8\x7a\x4f\xdf\x9c\x1d\x9f\xbe\x3a\x9b\x2c\xeb\x2f\x16\xf2\x66\x6c\xe4\xb8\xd3\x6c\xcc\x53\xa1\x52\x77\xde\x65\xa1\x80\x35\x7d\x07\xa8\xc5\x2d\x35\x8b\x32\xe6\xb5\x7d\x92\x65\x9f\xbe\xe1\xfe\x3b\x8d\x78\x01\x80\xc8\xe6\xf2\x10\x95\x94\x66\x44\x14\x85\xe4\xdb\xd0\xc8\x79\xd6\x35\x0d\xf2\x99\x95\x3d\xa3\x38\x3e\xfc\xf4\xd1\xc8\xf5\xea\xd4\x60\x72\x3f\x2b\x8b\x77\x5f\xc4\x43\xbe\x6e\x99\x6a\x33\x93\x82\x0c\xd3\x53\x32\x64\x99\xcb\xc1\xe7\x98\xfb\x60\x16\x96\x81\xae\xd8\x8a\x00\xaa\xbd\x35\x5b\xdf\x69\xa6\x86\x5b\x90\x99\x0a\x66\xfd\x69\xa7\x99\x9a\xe0\xe3\x1f\xf8\x4a\xe7\xe8\xca\xf0\xfe\x6f\xd8\x6c\x3f\xd6\xf9\x0d\x9b\x6d\x5b\x66\xf7\x31\x34\x8f\x0e\x55\x55\x56\x15\xef\xcc\x02\x2b\x7f\xb1\xbd\x3f\xda\x29\x5b\xd7\x1d\xfb\x20\x3c\xf0\x85\xce\xc2\x57\x2f\xd1\xd8\x46\x64\x58\x55\xa4\x70\x13\x90\x38\x8e\xe6\x38\x23\xb3\x5b\xca\xdb\x41\x0b\x58\x84\x20\xe3\xd7\xac\x59\x05\x5d\x1d\xeb\x66\xea\x0e\x11\x91\x69\x75\x75\x43\x55\xad\xb1\x39\xb0\xe1\xce\xc3\xcd\xd3\x15\x4b\x7b\xf9\x16\xea\x0e\x73\xd9\x35\x12\x71\x05\xd8\x1a\xdf\x98\x3b\x63\x06\x0b\x42\x85\x03\x97\x76\x08\x6a\xf6\x8c\xa4\xc9\x49\x17\x9e\x88\xa5\xb5\xdd\x2a\xa6\xac\xb5\xdf\xac\xc8\x8d\x92\xa9\x08\x6c\xfe\xba\x65\x62\x89\xbc\x66\xea\x9a\xb3\x9b\xa7\x37\x52\x5d\x71\x31\x1f\xdb\x97\x1d\xe3\x16\xd0\x4f\x2d\x27\xea\xa7\x5f\xc0\x7f\x32\xa8\x2a\xd4\xd9\x23\x78\xa8\x0f\x0e\x4a\xa8\xc3\xd9\x0d\x07\xec\x65\xcf\xb7\x5d\x4b\x75\x4b\x83\xdd\x4b\x32\xd6\xa3\x95\x3f\xb1\x15\xad\xa5\xc6\x7b\xec\x3a\x0e\xe4\x35\xad\x97\x89\x28\xc6\x64\x6f\xc4\x75\xaa\x73\x87\x8b\x3a\x6d\xe9\x8a\x38\x77\x60\xf4\xa1\x73\xc7\x7d\xe6\x92\x40\x43\x39\x08\xf5\x51\x09\x00\x9e\xf5\x45\x1e\xc3\x1a\x8f\x02\x1e\x1e\x1c\xfc\x76\x21\x0a\x47\x71\xe1\xf8\x04\x3e\x15\x22\x14\xb2\x65\x56\x24\x57\x57\x13\xa9\xe6\x77\x51\xb4\xb1\xce\xaf\xcb\x95\xfe\xb5\x19\x23\x05\xe3\xb6\xee\x19\xf6\xe1\x79\xae\x1e\xab\x33\x3e\x5a\x9d\xf1\xb0\x13\x3d\xf6\xb8\xe6\xe2\x2e\xb7\x14\xf9\x2c\xbd\x34\x9f\x55\xc8\x6d\x87\x3c\x91\xef\x8b\xd9\x37\x13\xbd\xd7\xe8\x5a\x09\xd8\x6c\xae\x61\x26\x58\xe0\x78\xb2\xf8\x58\x21\xa0\x30\x50\x45\x97\xcc\x30\xd5\x03\xc6\x57\x52\x88\x9c\x7e\xb3\x46\x92\x1f\x5a\x26\x2e\xe1\x10\x7e\x34\xab\x1f\xcd\xea\x8f\x5f\x8f\x66\xf5\xa3\x59\x5d\xc2\xac\xde\xbb\x82\x21\x2f\x4f\x11\x04\xd1\x15\x02\xf6\x88\x0e\xce\x66\x79\x78\x67\x66\xaa\xf5\x2c\xc5\x8c\xcf\x5f\xd1\x36\xdb\x80\x0e\x4f\x5a\x33\x86\xc3\xc7\x2e\xb3\x01\xa0\xa9\x5a\xd9\x42\x8b\x3e\x07\x23\x0a\xd3\x7f\xff\x96\x59\xee\x61\xe4\x36\x5c\xb1\x22\x90\x0c\xfe\x8e\x48\x19\xea\x1b\x4b\xfb\xc9\x94\x9b\x5e\x93\xd0\xcc\x60\x3f\x30\xec\xb9\x4a\xa4\x20\x95\x43\x78\x07\xfb\x27\xea\x53\x57\xc0\xa6\x12\x44\x56\xc6\x43\x8d\x86\xf6\x61\xcf\x9e\x3d\x7b\x86\xbd\x63\xfe\xf0\x87\x3f\x10\xa9\x08\x25\x35\xab\xf8\x72\xf3\x46\xb8\xeb\x77\xcf\x13\xdb\x2b\xd8\xeb\x3f\x8f\x5f\x7d\x0f\xb8\x2c\xad\xd1\xd8\xa1\x11\x29\xb2\x0f\x1e\x0c\xaa\x47\xe4\xff\x5c\xfe\xf0\xba\x6f\xfd\x37\xfc\x16\xbc\x26\x61\x3a\xd3\xe9\x89\xc3\xb7\xcf\x7e\xff\xcd\x37\x19\x4f\x02\x87\x8b\x54\xdc\xc1\x19\x7b\x88\x19\x6a\xcf\x63\xc5\xb0\x27\x0f\x28\x10\xde\x82\x45\x00\x30\x93\xdc\x1e\x84\x78\x05\x65\xc9\xe7\x0b\xe3\x60\x62\xed\x16\x6f\x78\x65\x50\x11\x40\x70\x2d\xe9\xd0\x9a\x61\xd3\x23\x0d\xc1\x7a\xcf\x48\x60\xa9\xd9\x88\x34\xfc\x8a\x91\x99\xfe\x8b\x92\x5d\xdb\x37\xf2\xc5\x9e\x25\x1e\xfb\x08\x89\xe8\x79\x3f\xb9\x0f\xe6\xbe\x54\x52\x67\x65\xa0\x94\x12\x32\x40\xc4\x9a\xcb\xc1\x21\x9f\xf6\x8d\x61\x5b\xca\x03\xd8\x11\x94\x6d\xa2\x2e\x3b\xd4\x91\xab\x44\x40\x39\x7b\x9d\x84\x13\xc5\x37\x70\x68\x95\xfc\x6f\x64\x72\x80\xf8\x8d\x4e\x74\x80\xc6\xb5\x3c\xe7\x81\x71\xfb\xcc\xc4\xe4\xf1\xaf\x18\x42\xdf\x5a\x7b\x8d\x89\xd0\x6a\x11\xde\x1e\x50\x6c\xa3\xb9\xb1\x5f\x34\x5c\x5b\xd2\xa0\x23\x90\xa3\x38\x79\xec\x2d\x6f\x1a\x46\x83\x7d\xaf\x71\x47\x74\x62\x63\x54\xec\xa4\x91\x31\x32\x1c\xe9\xf0\x82\xd4\x77\xc1\xed\xc7\x46\x80\x74\xd7\x64\xc6\xdd\xeb\xb9\x20\x2c\x58\x7a\xdb\xfe\x68\x49\x35\x33\x9d\x5b\x7a\xa6\x94\x54\xf6\x5d\x99\xd6\xae\xbf\xda\x92\xaa\x2b\x56\x87\xf3\x6f\x42\x2e\xec\xa4\xf8\xfe\x36\x19\x2e\x9e\x86\x5a\x2b\x0c\x9d\xf8\x74\x05\xaf\xe9\x0c\x76\x20\xee\xc9\x64\xf2\x04\x05\xaf\x54\x44\x1b\xaa\x9c\x34\xb4\x9f\xe7\x49\x9e\x1d\xe6\xad\x0d\xe4\xc6\x2b\xda\x42\x0b\x6c\xd0\x33\x81\x01\xc0\x87\x01\xef\xec\x0e\x1f\xea\xd6\x28\xfd\x6c\x29\xe0\x61\xc8\x75\xb8\xe3\x35\x4e\x46\x58\xf7\xbf\xb7\x13\x93\xb3\xcf\xb3\xdd\x24\x20\xa9\x72\x7e\xbe\xc6\x00\x57\x43\xcc\x7a\x23\xbd\x34\xca\x33\xc8\x0b\x19\xbf\xcb\x0c\x25\x1c\xaf\x92\x6e\x21\xa4\x67\x98\x9c\xf3\x49\x9a\xb8\x41\xef\x4f\x93\xb1\x87\xf0\xda\x23\x05\x1c\xaf\x7d\x53\xc3\xf1\x3a\x9f\x81\x28\x5f\x3b\xb2\xdd\x51\x13\x1b\x55\x5e\xd7\xb0\x6b\x97\x3b\xe8\xee\x34\x68\xbc\x76\xa2\x47\xe3\x55\x42\x9b\xc6\x2b\x5f\xa7\xc6\x2b\x27\x0d\x1a\xaf\xb2\x82\xc3\x27\x53\xe3\x62\x38\xb5\x03\x35\x8b\x59\x60\x00\x88\x7a\x82\x4f\xc5\x0b\xe3\x6c\x79\xe1\x94\x1a\x14\x19\x74\xaa\x65\xd3\x19\x1c\xb8\xd4\xa3\x63\x7d\x09\x5e\x88\x35\xd0\x93\x22\x4b\x49\x5a\x1f\x24\xd2\xbd\x40\x3b\x46\x75\x25\x7f\x84\xfd\xcc\xe1\xcf\x09\x85\x94\x62\xdb\xb2\x21\x90\xdd\x87\x3f\x76\x1e\xfa\x28\x1d\xf6\xd8\xb7\x90\x47\x49\x70\x89\xc4\x50\x47\xf0\x8f\x96\xd8\x3b\xfe\x61\x01\x5b\xf0\x66\xc1\x5c\x91\x4b\x64\xfc\x5a\x25\xcb\x1e\xa1\x60\x91\xfb\x7e\xab\xd8\xd4\x67\x57\xd1\xf2\xb2\xe1\x9e\x4a\xf3\xfc\x20\x82\xe6\xe4\xf0\x24\x60\x66\xfb\x7a\xd9\x73\x61\x98\x9a\xd1\x8a\x1d\xc5\xc1\x05\xd6\x2e\xd8\x92\x29\x3b\xf1\xee\x3e\x0f\xc1\xbc\xa0\xa2\x6e\x1c\xf4\x39\xee\x22\xc2\xde\x1b\xa6\xec\x22\xf5\xc9\x67\x49\xca\xe3\xae\x01\xb3\x80\xf2\x5d\xc4\x3a\x60\xe0\x5d\x9f\x35\x48\x85\x57\x8f\x44\x74\xf2\xf4\xcb\xea\xfb\xa6\x59\x16\xd0\x71\x80\x29\x5d\x82\x9e\x48\x01\x5a\x31\x88\xfb\x95\xec\x14\x26\xdc\x86\x3c\xca\x4a\x2a\x65\xf5\x73\x20\x88\x6a\xa2\xd8\x9c\x6b\x03\xdd\x61\x7c\x57\x4b\xec\x30\xb1\x33\x3c\x9e\xbd\xca\xe4\x0b\x29\x7b\x1f\x41\x3a\x4a\x1e\xc3\x59\x74\xad\x92\xd7\xbc\xf6\x06\x5d\x7c\x3e\x73\x4d\x5a\xaa\x23\xfc\x74\xaa\xb5\xac\x38\x04\xc0\x7a\x2e\x4a\x1e\x1f\x3d\xa1\x60\x2e\xd6\xcc\x58\xeb\x5e\xb0\x01\xf2\x6d\x9c\x64\x28\x09\x6d\xdb\x26\xb9\xd2\x26\x9b\x2d\x84\xac\xd9\x45\x37\x6d\xb8\x5e\x5c\xee\x4b\xe2\xd4\x36\x9a\xb0\x38\x79\xa3\xa2\xe9\x43\x09\x54\x19\x49\x5b\x42\x73\xb0\xb8\xac\xbe\x64\x0d\x4c\x2e\x05\xb8\xba\xa8\xd6\x7e\xd4\x58\xd4\x48\xd0\x3b\x1b\x66\x98\xff\x2a\x5d\x8f\xee\xdf\xdb\xf5\x9e\xb0\x36\xb9\xfd\xf4\x9d\x68\x07\x9f\x57\xb4\x69\x32\x3c\x1f\x43\x15\xdb\x6b\x2f\xe8\x02\xf0\x7d\x2c\x70\xc3\x70\xbb\x97\xfc\x2c\x43\x49\x19\x9e\x5e\x13\xec\x00\x9a\xae\xe2\x6e\x5d\x38\x1d\xb5\xf9\x97\xc2\xaf\xee\xc8\x2a\xe4\xfe\x07\x81\x03\x10\xbe\x0b\xf7\xf1\x63\x3a\xdb\x63\x3a\xdb\x6f\x5c\x3b\xb7\xe9\xc8\x63\x3a\xdb\x6d\xaf\x7d\x4c\x67\xdb\xbb\x94\x73\xef\xb8\xc6\xe3\x91\xd6\x63\x40\x13\xc4\xa4\xab\x0e\xcb\x7d\x82\x96\x9a\xab\x05\xff\x06\xee\xc0\xce\x52\xbe\xf1\xbd\x8e\x8d\x51\x7c\xda\x99\x74\x51\x5c\x36\xd7\xb0\xa7\x07\xcc\x53\xa6\x9d\xce\x30\x76\x4b\x56\x45\x87\x87\x73\xf2\x87\x13\x2d\xd2\x34\x32\x4d\xa5\x49\xb0\x5d\xc0\x6c\xc1\x0f\x9f\x68\x52\xcb\xaa\x5b\x32\x61\x7a\x0e\xe9\x6b\x5d\x30\xce\xb2\xc3\x53\x95\xd6\x35\x47\xa5\xe4\xa2\xc0\xf9\x9a\x25\x8e\x6a\x79\x23\xec\x79\x74\x7c\x91\x84\xf0\x3b\x44\xf7\xed\x9f\x15\xbb\x31\xfc\xc7\xc4\x7e\x4e\xa7\xd0\x93\xde\xb5\x5c\x7d\x4c\x99\xdc\xfa\x88\x32\xdb\x74\x5b\x64\xd6\x48\xd2\x69\xf6\xd1\x94\xc8\x3e\xb2\x5a\x74\xe4\xc7\xec\xcc\xfd\x08\x0b\x3f\x66\x67\xa6\x8e\xfc\x98\x9d\x99\x36\xfc\x40\x9e\x9d\x63\x8a\xa5\x55\xe7\x1a\xd7\xdb\x73\x70\x3e\xb8\xcc\x84\x8c\x85\xda\xaf\xac\xb2\xd3\xfe\x4c\x44\xe7\xc6\x3a\xf0\xef\x9a\x1f\x06\x65\x61\x1f\x07\x8f\x8a\xe6\xfc\xa1\x09\xc6\xe6\xe7\x90\x81\xb6\x07\x19\x64\x30\x97\x19\x3e\x41\xbc\x86\x68\x71\x3d\xf4\x20\x76\xe3\xc6\x14\xdd\x28\x47\xb8\x95\xf5\x0b\x6c\x40\x4d\x85\x90\xa8\xa2\xea\x11\x36\xf0\xd6\x23\x07\x7e\x01\x46\x6a\x4b\x2b\xf4\x92\x75\xbc\x06\x99\xda\x23\x54\xa6\x62\xc7\xe1\x55\x84\x0b\x48\x21\x4e\x20\xc0\x0d\x30\x45\x17\x39\x2c\x41\x8a\xb1\x85\xbd\x68\xcb\x7f\x64\x4a\x67\xf4\xb6\xeb\xaf\x61\xe3\x5d\x7c\xaa\xe7\x06\x5d\x2d\xd8\x92\xc2\x3f\x5f\xfa\x29\xb0\x02\xd2\x5a\x9d\x86\x61\xfb\x3a\xa6\x96\x9a\xc8\xd9\x68\x50\x81\x7d\x70\x9d\xd3\xd1\xcd\x5f\x85\x9c\x19\xc4\x6f\xa6\x8b\xec\x74\x23\xb2\x3e\x61\x17\x83\xe4\x20\xbb\x91\x40\x8f\xb4\x7b\xcb\x87\x9f\xfa\x44\x6d\x38\x44\x70\x86\xf7\x68\x72\xca\x7b\x6a\xf0\xda\xb7\xac\xd0\xd4\x6c\xd0\x51\xc8\x18\x18\xaa\xec\x99\xe4\x3c\x66\x83\x0e\xaf\xc7\x6c\xd0\xc7\x6c\xd0\xa2\xd9\xa0\x91\xb2\xe3\xcf\xad\x2d\x89\x9d\x71\x1e\x83\xcf\xee\x9c\x32\x6f\xf7\x3b\x8f\x83\x4f\xce\xf4\x99\x99\x52\x0d\x0b\x50\x9e\x4c\x26\x4f\xb0\x04\xa5\x77\x51\x74\x66\x36\xfe\x23\x61\xa2\x92\xb5\x7d\xce\x5b\x78\xbe\xd2\x06\x54\xf8\x3e\xce\x13\xd3\xb2\xf4\x63\xc5\x45\x2c\xf0\xec\x12\x1a\x55\xf6\x51\xe1\x7b\x39\xbe\x2c\xaf\x98\x66\x0b\xf7\x5e\x9d\x0d\x1d\x27\xdd\x14\x57\x3e\xa3\xc9\xe9\xb5\xfe\x7b\x4d\x1a\xbe\xe4\xd0\xde\xa4\x06\x09\xc7\xb4\xc9\x0b\x74\x11\x72\x88\x8f\x9c\x54\x6d\x37\x72\x8f\x9f\x2c\xd9\x52\xaa\xd5\x28\x0c\x61\xbf\x1c\x8c\xe9\xee\x38\x02\x25\xba\xea\x94\x62\xc2\x34\xab\x3c\xc0\xf7\xfe\xda\x43\x6d\xda\xaf\xc0\x9e\x28\xd3\x81\x41\x72\x1a\x31\xf4\xd7\x50\x06\xf5\xf9\x74\x10\x6a\x0e\xb3\x08\x67\xa7\x03\xf6\x1b\xf5\x59\x8c\xf6\x53\x26\xae\xc9\x35\x55\x3a\x6f\xcf\x93\xb2\xfa\x73\xcd\xaf\xb9\x96\xc9\x39\x68\xd1\x83\xe2\xe9\xb9\x0c\x11\x34\xbb\x53\x65\x67\xda\xce\xb8\xe3\xc4\x6f\x5f\xf6\xbe\x95\x56\x49\x0b\xdb\x76\xcd\xd0\x78\x9e\x1a\xa0\xec\xaf\x96\x1a\xc3\x94\x78\x41\xfe\xef\xe1\xcf\xff\xf2\x8f\xf1\xd1\xbf\x1d\x1e\xfe\xf5\xd9\xf8\x5f\xff\xf6\x2f\x87\x3f\x4f\xe0\x1f\x5f\x1e\xfd\xdb\xd1\x3f\xfc\x1f\xff\x72\x74\x74\x78\xf8\xd7\xef\x5e\xfd\xe5\xed\xc5\xd9\xdf\xf8\xd1\x3f\xfe\x2a\xba\xe5\x15\xfe\xf5\x8f\xc3\xbf\xb2\xb3\xbf\x7d\xe2\x43\x8e\x8e\xfe\xed\x7f\x65\x93\x4e\xc5\xea\x87\x4c\x39\x8c\xd7\xb8\xa0\x3e\x30\x7c\x62\x11\xf6\x5b\xb3\x52\xb8\x30\x63\xa9\xc6\xf8\xe8\x17\xd0\x53\x3a\x73\x00\xcf\x5e\xa5\xf7\x7f\xaf\x83\x84\x73\x29\x18\x88\x7b\xb4\xc1\xef\xc2\x06\x2c\x5c\x72\x01\x29\x21\xa7\x7c\x67\x68\xa3\x7e\xfc\x21\xc4\x8a\x61\xcb\x56\x2a\xaa\x56\xa4\x76\x21\x87\xd5\x1d\xb4\x91\xc9\x6c\x74\x0d\xa4\xd7\x3c\x65\x57\xef\x38\x64\xb9\x64\x35\xef\x96\xbb\x8e\x56\x22\x15\xf1\xc2\xdf\xd8\x25\x86\x8c\x25\x39\x0b\x19\xf0\xee\x36\x17\x33\x9e\xd2\xea\x0a\x9d\x08\x81\x33\x72\x22\x4b\x2c\x86\x1c\x3e\x38\x70\xa9\xae\x4b\x46\x45\x88\x9c\x42\x5a\xb6\xac\xd9\x13\x1d\xee\x45\x92\x8a\x04\x2b\x31\x25\xcb\xd5\x74\x1d\xba\x01\x8e\xac\x29\xf4\x0a\xf4\xd7\x9d\xb5\x71\xcf\xe0\x6e\x52\xa4\x31\x01\xff\x3b\xfb\xde\xea\xfa\xbb\x66\xd3\x40\x88\xcf\xd1\x37\x12\xdc\x3a\xae\xd1\xd5\x8c\x34\xb2\x8a\x0a\x36\x06\xaa\x28\x30\xea\x99\x17\x71\xb9\xd9\x4a\x96\x5d\x2d\x35\x68\x03\x41\x48\xad\xd1\x98\x6f\xcd\x2b\x3a\x6d\x18\xba\x8e\x80\x6f\xb2\x79\xd4\x0e\xb6\xa4\xef\xf9\xb2\x5b\x92\x4e\xdb\x37\x93\x62\xf8\xec\xfe\xc5\x6e\x70\x6b\xe2\x5e\x59\x72\x01\x3f\x1a\xb8\xd9\xd2\x83\x57\x0b\x46\x2e\xc3\x0a\xf4\x4e\x5f\x4c\x5f\x74\x3e\x1d\xdd\x81\xe9\xef\xa8\x73\x06\xa8\x9c\x41\x9a\x6d\xb0\x43\x34\x01\x3c\x87\xe4\xc6\x99\x64\x53\x60\x08\xde\x0c\x25\x06\xc8\xaf\x45\xb4\x40\x9d\x70\xf5\x50\x0f\x75\x1f\x3f\x38\x2d\x3e\x53\x77\x2f\xa5\xb1\x17\xd1\xd3\x8b\x6b\xe7\xa1\xbe\x6c\x67\xea\x5e\x28\x70\x1b\xe8\x7b\xce\x1f\xbd\xa5\xd8\x8d\xfa\x3a\xa3\x20\x60\x73\x60\xd6\xdf\x06\xdf\xb7\x53\x1e\xab\x55\xe5\x1a\x08\xf1\x3e\x47\x31\xe4\xa9\xe1\xde\x05\x20\x9e\xb1\xfd\x3f\xef\x23\xf7\xe9\x4b\x53\x36\xc3\xf4\x7e\xfc\x0d\xf8\x17\x75\x1a\x24\x10\x46\x09\x1a\x66\x00\x79\x88\x89\xf0\x50\xa8\x51\x58\xca\x6b\x2b\x42\x92\x9e\xfc\x4e\xbb\x04\x3b\x9e\xb8\x2d\xe8\xd1\x00\x51\x52\xa3\xc3\x4f\x30\x56\x23\x4a\x52\xd3\xcf\x80\xea\x44\xe2\xfb\x4f\x8f\xc8\x8c\x51\xd3\x29\xcc\x5d\x17\x52\x41\x44\x04\x85\x18\xba\xf2\x15\xb3\x2c\x00\x8d\x9d\x94\x5c\x12\x2d\x68\xab\x17\xd2\x80\xdb\x98\xb6\xb4\xe2\x26\x19\xde\xc6\x28\x5a\x5d\xd9\x27\x43\x16\x13\xbc\x59\xda\x6b\x54\x47\xae\x46\x3f\xe6\xd5\x21\xae\x94\x59\x28\xd9\xcd\x17\x00\x3c\x84\x77\x55\x0d\xd5\x88\x72\x95\x96\x80\xb8\x75\x4c\xe7\xe8\xd4\xa4\x5e\x09\xba\xe4\x95\x5f\x3f\xa8\x22\xd3\x5c\xba\x04\x13\xa0\x25\x75\xda\x28\xb9\x60\x4a\x73\x6d\x98\x30\x98\xeb\x72\xd2\x50\xbe\x24\x87\x9a\x31\x72\xe6\xb7\x3a\x7e\x73\x89\x66\x3a\x06\xb7\xd2\xcb\x0e\xe2\xe4\x19\xd7\x64\xd4\xe1\x48\xdb\x4f\x7c\x50\x2f\x4a\x28\x4d\x6f\x01\xe1\x76\xe5\xd6\x57\x3c\xca\xd8\x8c\xdb\xe7\x4c\x2a\xa8\x10\x72\xfe\xb9\x6b\x26\x6a\xd9\x27\x56\x27\x8d\x75\x7c\x71\xae\x63\x87\x28\xca\xb4\x16\x47\x87\x2f\x5c\x13\xd4\xd0\xb9\x30\x48\xc4\xa4\xf1\xac\xc2\x25\x08\x17\x35\xbf\xe6\x75\x47\x1b\x54\xb5\x92\xa7\xe9\xe4\xf2\x1c\x89\xe4\xf3\x85\x19\xdf\x30\x08\x27\xa2\xae\xdd\x9f\x22\xfe\xd5\xf8\x46\xc9\x2c\xd7\xa0\x94\x19\x62\x64\x9a\x40\x62\x2e\x8c\x6d\x27\xed\x86\xae\xa0\x9b\xb7\x2b\x7b\x1c\x64\x9a\xbb\x15\x73\xc3\xce\x64\x9a\xce\xb0\xf4\x5a\x9e\x63\xee\xc4\x89\x3b\x06\x31\x5c\x51\x01\xa6\x2b\x44\xa1\x2d\xff\x83\x4c\xdd\x9c\xb5\x54\x89\xd3\x06\x0e\xee\x1f\x85\x8a\xaf\xa6\x76\xc7\x25\x7a\x64\x76\xec\x15\xb9\xee\x77\xe3\x5b\xb6\x6c\x1b\x6a\x76\x9e\xd0\xfd\x53\x14\x94\x8f\x72\x05\xed\xd1\x41\x45\x3d\xa6\x8d\x15\x19\x17\x3f\x9e\x38\xe8\x32\x14\xec\x45\x2a\x63\xde\x7a\xf5\x43\x38\x0b\x07\x4d\xd9\xad\x32\x1d\xba\xeb\x4d\x59\x0d\xfa\x80\xa3\x38\xa7\x94\x52\xde\x08\xa6\xfc\xbe\xba\xf8\xf1\x64\x44\xf8\x84\x4d\xfc\x5f\x61\x08\xaf\x2e\x19\x39\x47\x70\x0a\x0f\x91\x93\x9e\x61\x28\xeb\x09\xbe\x7a\x1c\xbf\x8e\xc7\xfc\xe5\x4f\x76\x52\xec\xb7\x7f\x1e\xff\xc9\x1d\x30\xf0\xd7\x2f\x56\x6b\xcb\xa8\xa6\xfb\x65\xed\x69\x31\x1e\x00\xa8\x3b\xf6\xaf\x5f\x2e\x64\x7d\xd9\xb2\x6a\x82\xd3\xaf\x7f\xc9\x4a\x7a\x25\x84\x09\xa3\x56\x13\x72\x21\xa1\x42\x86\xd7\x28\xd0\xe0\x5d\x15\xfb\x6f\x9f\x90\x01\x6c\x10\xa2\xbe\x15\x35\x4c\x80\xf6\x2b\xd2\x7b\x9f\x13\x8f\xab\x09\xc3\x82\x98\xa7\x30\xcf\x87\x10\xaa\x43\x78\xf1\x11\x31\x12\x1b\x75\xa7\x9e\xb6\xf6\x3a\x16\x84\xbd\xe7\x1a\xfa\x88\xe0\x4a\x02\x93\x50\x07\x6d\xe0\x4d\x0e\x4b\x8c\xe5\xbb\xd0\x17\xa7\x95\xe9\x19\xb7\x30\x83\x5f\x0a\x69\xbe\x0c\x9b\xd7\x57\xac\x81\x6d\x21\x09\xbd\x96\xbc\x26\x9d\x06\x9d\x53\x90\x4e\x40\xca\x42\x06\x84\xac\xe3\x9e\xe9\x8a\x2c\xb9\x36\xf4\x8a\x4d\xc8\xa5\x35\x47\xe2\x34\x62\xe4\x29\x41\xa6\x8d\xac\xae\x58\x4d\x3a\x61\x78\x93\xe5\x99\x09\x74\xc3\xd4\x46\xa6\x0a\x80\xc6\x76\x95\xd5\x72\x5b\xc5\xc6\xde\x60\xc2\xbb\x32\x3c\xc6\x78\xa0\x87\x59\xed\xd7\x6a\x14\xb6\xea\x82\xa2\xeb\xb6\xad\x61\x48\x57\xfb\x9a\x29\x8c\x36\xea\xf4\xed\x7c\x4a\xf8\xdb\xfd\x01\x4c\xa6\x27\xe4\x35\x58\x2e\x4d\xfa\xa6\xc4\xa2\x09\xf4\x76\xbb\x0c\x19\xc1\x2a\xa6\x35\x55\x2b\x2c\x2c\xe6\xc6\xd7\xb4\x77\x9a\xcd\xba\x06\x0c\xc6\xf4\x49\xa5\xa2\xb3\x04\x13\xc5\x2a\x29\xb4\x51\x5d\x05\x5c\x43\xc9\x54\xc9\x2b\x26\x7a\xa0\x8f\x8c\xc3\x24\xae\x98\xee\x8b\x3a\xad\x7a\x2d\x24\xa9\x16\x54\xcc\x59\x80\x12\x26\x4b\x5a\x03\x27\x7f\x17\x9c\x1f\xe9\x93\x29\x03\x5f\xd0\x99\xb1\x6a\xa1\x01\x06\x99\x5a\x2b\xc1\x67\x23\xa5\xbf\xd8\x9b\x50\xf0\xbd\x8c\x12\x9a\x04\x6f\x76\x58\x6a\x98\x9f\x51\x32\x06\x6b\x35\xd5\x61\x58\x20\x83\x64\xc9\x0c\xad\xa9\xa1\xfb\x82\x21\xf0\x8a\xae\x42\x66\x1a\xe6\xec\x03\xeb\x46\xb9\xfc\xce\x4c\xf0\xfe\x21\xd9\xf2\x18\xd0\xfa\xe2\xc7\x93\xac\xf1\xc1\x21\x04\xdc\x0a\xdd\xb0\x8c\x95\x32\x2e\x75\x11\x76\x15\x42\x47\x78\x44\x00\x4b\x9a\xa7\x04\x8f\x71\x56\x93\xba\xcb\x8e\x66\xf7\x2a\x42\x4e\xee\x54\x91\xcc\x29\xcb\x9f\xfb\xc2\x1c\x6f\xfb\x64\xf4\x6a\x58\x9d\xbe\xd5\xd0\xc7\x9c\x45\x26\x0c\x57\x2c\x02\x5c\xcf\x22\xc1\xf1\x5b\x27\x50\x92\x0e\x39\x0f\x59\x73\xce\x8c\xee\xcb\x2e\x51\xa1\xcc\x1c\xd5\x38\x23\x09\xdf\x08\x2c\x3f\xcf\x8d\x2e\xd6\xb2\x75\x02\xb2\xc6\x44\x3e\xd7\xd2\x29\x8e\x56\xe5\xde\x39\x33\x96\xcb\x9a\xa3\x95\x3d\xe7\x5f\xc9\x3a\x3f\xfd\xae\x6c\x1e\xe8\x80\xb4\x1e\xdc\x06\x31\xa0\x34\x84\x3b\xf1\x06\x48\xa5\xd6\x03\x70\x7b\xd4\x64\x16\xf4\x3a\x1b\x00\x3a\x39\x16\xd6\xfb\x2b\xc6\x3e\x2c\x86\xe4\x8e\x81\xdc\xf1\xf3\x4c\xc2\xf2\x0b\x10\xfd\x95\x59\x88\x38\x24\xa8\x48\x8e\xd8\x1d\x40\xbc\xfa\xcb\x1e\xf1\x97\x45\xf2\xc3\x4a\x73\x7b\x4f\x99\x53\x5b\x5d\xb9\x40\x28\x6c\x71\xb0\x98\x8c\xdb\x43\x38\x7f\xbd\xbe\x1c\x98\xa9\xce\xb9\x12\xe2\x1b\x08\x29\x75\xe8\x03\x1e\x13\xc7\xd6\xbe\xfb\xd6\xf0\xf6\xa3\xc2\xc4\x80\x55\xbe\xdd\x07\x9e\x3d\xd2\xb9\xab\x8e\xf4\x9e\x2b\xa6\xa0\x52\x27\x82\xb6\xb4\xa2\x46\xc9\xa6\x61\x0a\x96\xc0\x05\x35\xd6\x0a\xc0\xec\x6a\x11\x4c\x03\x4c\xef\xc7\xe1\x2f\x1f\xe6\x0b\xae\x36\xc1\x6e\x82\x75\x4d\x35\x76\xba\xf6\x19\xf0\x10\xbe\xf4\x55\x7d\xdb\xe8\xc9\x17\x79\x3f\xf9\x60\xe0\xb1\x58\xe1\xe4\x9f\x46\xcc\x89\x21\x33\x32\xb7\xa4\x72\x4d\x98\xa0\xd3\xc6\x9a\x23\x11\x03\x07\x3a\xd7\xb4\x53\x23\xa3\xbb\xde\xb0\x59\xfe\xd4\x41\x0c\x33\x7e\xe4\xa7\x8d\x8d\xea\xed\xe0\x87\x93\xbe\x16\xd6\xf9\x66\x0a\x34\x04\xf6\x97\xe3\xba\xc1\x10\xc3\xfa\xa8\x35\x6a\xe2\x6e\x33\x5b\xdf\x20\x97\xa6\x62\xd5\x04\xe5\xea\x09\xa0\x5f\x08\x4f\x8c\x0f\x0c\x1f\x93\xe5\x27\xc4\xab\x5c\x59\x02\x54\xf9\x42\x49\x58\x89\xfc\xee\xd2\xe7\x0e\xc1\xb0\x1d\xd0\xe7\x5d\xc0\x73\xf8\xc3\xdb\x14\x21\xdf\x79\xca\xac\x74\xee\x9b\x4f\xe5\xef\x0b\x82\x7b\x23\x1e\x7f\x4b\xe9\x60\x2f\xe6\xbe\xe3\xa2\x0e\x45\x9c\x1e\x14\xd6\x2a\x68\xc7\x17\xe7\x48\x75\x19\x9a\x5e\xc2\x99\xb0\x72\x06\xaf\x59\x70\x55\x8f\x5b\xaa\xcc\x0a\x43\x5b\xa3\x01\xc5\x01\xcf\xb1\xc0\xd0\x45\x33\xed\xed\x66\x2a\xce\x72\xb0\x04\x3e\x2d\xd1\xe5\xcd\x7e\x90\x43\xf6\x6d\x46\x72\x51\x22\xfd\x35\x98\x91\xd7\x7d\x3b\xb4\x10\xc4\x79\x20\x33\x72\x57\x15\xe3\x64\x78\x9a\xed\xaf\xae\x6d\x8f\x5a\x3d\xac\x5d\x42\xd5\x17\xfc\x15\x2e\x0c\x29\x63\xd8\xb0\x60\x65\x82\x97\xdf\x3e\x69\x44\xf8\xcc\x2a\x6d\x52\x8c\x21\xf3\x31\x9b\xbc\x3e\xed\xc9\x59\xba\x13\x57\xde\x8c\x1e\x78\x10\x4c\x11\x95\xd1\xd0\xbd\x1c\x24\x87\x42\xa6\x3b\xe8\xfd\x05\xb2\x15\xc7\x3a\xc2\x8a\xf6\x0f\x64\x92\x4c\xf3\x5b\x58\x91\x5e\xf3\x8c\x5d\xf7\xd1\x59\xe0\x55\x62\x2e\x6a\xbb\xa9\x40\x45\x02\xa7\xbe\xee\xaa\x8a\xb1\x10\x32\x74\x62\x29\xdf\xa4\x1d\x9c\x3d\x6e\xca\x97\xd4\x54\x0b\xa6\x89\x96\xd0\xeb\x58\x1b\xda\x34\xac\x0e\xa9\x4e\xc8\x28\x12\xac\x0a\x97\x06\x95\x4d\x47\x64\xac\xe4\x4f\x71\x14\x18\x71\x51\xd7\xb6\xa1\x2e\xa8\x34\xeb\x44\x85\xf5\x8b\xdc\xac\x42\x96\xc9\xba\x61\x0a\x7e\x68\x0d\xb1\xb6\x7c\xd3\x67\x86\x19\x23\x91\x4f\x39\x30\x33\x1c\xfe\x2b\x3c\xee\x17\xf4\x9a\xf5\xd9\x1e\xae\x4b\xa4\x3d\xa5\x03\xd4\x6d\x01\x5e\x8f\xa0\x72\x47\x68\x21\xc4\x0a\xbb\x78\x12\x27\x83\x73\x51\xda\x94\x89\xe7\xe1\x30\x9a\xf4\x0d\x13\xe7\x28\x98\x36\x9a\x99\x00\xe2\x9d\xaf\xf1\x12\x97\x3f\x4f\x3b\x23\x97\xd4\xf0\x0a\x42\x74\x7c\x16\x25\x89\x2d\x31\xf1\xc2\x4a\x1a\x9f\x08\x8f\x2a\x12\x28\x6e\x6e\xdd\x0a\x89\x81\xed\xc6\xd2\x1d\x4c\x7c\x34\xd7\x6e\x95\x87\xd3\xea\xa7\x25\x52\x3d\x0b\xbd\xe7\x5b\x8f\x88\x4c\xcc\x42\x31\x46\xf8\xb2\x95\xca\x50\x61\x48\xcd\x67\x01\xa3\xdb\x67\x18\x7e\x8c\x27\x4a\xf8\x83\x7e\x82\xbc\xda\x68\x14\x0c\x98\x36\x8d\xbc\xd1\xc4\xdc\xc8\x10\x72\xe8\xf3\xbb\x1c\xe6\xf1\x68\x48\x4c\x01\x1d\xc7\x8d\x6a\x8f\x3a\xcb\x57\xd1\x39\x34\xb2\xb2\xe7\x86\x35\x8d\xfd\xef\xc7\x4e\xa3\x6c\x1c\x93\xad\x73\xc2\xe7\x02\x61\x68\xb9\xf6\xc1\x2f\x87\xa1\x72\x58\x2b\xd9\xb6\x2e\xf9\x61\x79\x54\x7e\x4e\x20\x79\x5d\x5d\x33\x0d\x45\x26\x1e\xd7\xc5\xb2\xc2\x9c\x09\xa6\xa8\x81\xf4\x3a\xd7\xcf\x15\x54\x92\x75\x22\x73\x83\x3e\x78\x15\xf4\x8b\xfc\x06\xd3\x61\xea\xe5\x76\x26\xf3\xf7\xb8\x6f\x0b\xbc\x17\x17\xc8\x6f\x5e\xee\x14\x60\xa0\xc3\x6f\x99\xa1\x47\xe4\x9d\x46\xb6\x08\x27\x6f\xc0\xe1\xf9\x24\x2f\x9b\xc3\x5b\x47\x47\x5b\x01\xa2\x8e\x9b\x76\x11\x51\x15\xfb\xa5\x02\x84\xdc\x70\xae\x07\xf4\x9e\x28\xa9\xf5\x6b\xff\x93\x7b\x24\xfd\xd1\x67\xf5\x1b\xd7\xa3\xcf\xea\xd1\x67\xf5\xe8\xb3\x82\xeb\xd1\x67\xb5\x7e\x7d\x2e\x3e\x2b\xd2\x1f\x57\xfb\x2a\x9b\x5e\xc7\xa6\xcb\xf0\x80\xbd\xe3\x79\x26\xe4\xb5\x34\x2e\xc5\x18\x2c\x58\xfa\xc1\xa0\x13\x85\x13\xfa\x86\xae\x26\x82\x19\xd7\xc9\xc4\xc7\x77\xdf\x78\x9a\xfe\xa2\xac\x35\xe2\x5c\x1f\x91\xdc\xf0\x82\xcc\xb7\xb7\x89\x46\x31\x12\x55\xb3\x3e\xe3\x19\x3e\x7f\xa2\x5d\x5e\xab\xfd\x1e\x20\x0b\xe3\x07\x54\x6c\x42\x2e\x5d\xad\xcb\xda\xe0\x9b\x4d\x16\x6a\x66\x28\xcf\xe9\xdd\x14\x5f\x5e\x1b\x7a\xfb\x01\xed\x6c\x67\xda\x0e\x29\xb9\x6d\x02\xe8\xd2\xbe\xb9\x62\x7b\x10\xb7\xa8\x3a\x37\xae\xe9\xef\x6f\xb8\xab\x0c\x9f\x77\x9a\xa9\x61\x3a\x63\x94\x6e\x11\x36\xab\x63\x0a\xcb\x89\xf9\xc6\x46\xe8\x54\x62\xc7\x73\xd5\x70\xad\x62\xd7\x5c\x76\xda\xa3\x18\x74\x06\xb5\x06\x6d\x9c\xb7\x67\xc1\xe7\x0b\x7f\xb3\xaf\x3e\x85\x0c\x6a\x55\x87\x0d\x99\x4d\x99\x36\xd4\x74\x7a\x08\x25\x5d\x41\x12\xe1\x1e\x65\x52\x05\x9e\xd8\x1f\x83\xa2\xa4\xea\x8d\x68\x12\xfb\x7a\xb8\x7d\x8f\x58\x17\xf8\xe8\xa9\xdb\x97\x1e\xb6\xa3\x87\x28\xa9\xe4\xb2\xed\x0c\x8b\xf6\xaf\xdb\x5d\x65\xc4\xf6\x2d\x99\x69\xd0\xcb\xe9\xe9\x92\x0a\x3a\x67\xe3\x40\xda\xb8\x47\xec\x78\x5a\x4c\x6a\x17\x61\x2b\x52\xbc\x91\x4f\x7c\x3d\x38\xa4\x8d\xe1\x55\x0c\x33\x8f\xdc\x09\x6e\x1e\x29\x8f\x9d\x47\xee\x1e\x3f\x8f\x04\x38\xd3\x7d\x15\x40\x6f\x1c\x7d\xeb\x22\xc8\x29\x0c\x1f\x13\x41\x25\xcd\x5e\xf0\x02\x04\x5a\xb8\x26\x72\xc9\x8d\x61\xbe\xb4\x30\x88\x94\x11\xe1\x66\x80\x74\xe9\x04\x28\x04\x2b\xb1\x12\x90\xbd\x6f\x1b\x5e\x71\x13\xb5\xa2\x4b\x04\x83\x58\xbf\xc0\x19\x70\xc3\x35\xaa\xe5\x82\xf0\x65\xdb\xb0\xa0\x4d\x8f\x1d\x52\x90\x0f\xa8\x85\xb7\xa9\xa0\xce\x84\xb0\xf7\x10\x56\x45\x82\x1f\xe5\xf6\x2d\xaf\x47\xb9\xfd\x81\xeb\x51\x6e\x17\x97\xdb\x88\x43\x9a\x0f\xeb\x3b\x90\xd7\xfe\xa1\xae\x93\x12\x9d\xb2\x86\xfc\xda\x31\xb5\x22\xf2\x9a\x45\x18\x1f\xd2\x0a\x3b\xcd\x6b\xc4\xa2\xf0\xf9\x19\x7b\xe4\xed\x2f\xa9\x9c\x43\xfe\xc7\xd9\x7b\x6b\xab\x42\x87\x89\xe2\xa7\xe4\xfa\x00\xc3\x3e\x56\xb8\x0a\x61\x65\x62\xab\x14\x8b\xa2\xe2\x4f\xc0\xc4\x3c\x7e\x7d\x5a\xd2\x19\x51\xa2\xe4\x84\x94\x2b\x3b\x21\x77\xa4\x64\x10\x72\xfc\x91\xb9\xc6\x35\x09\xdf\xc0\x39\x1e\x4a\x94\x42\x64\x96\x5c\xb1\xd5\xc8\x95\x6d\x12\xcb\x81\xd4\xdf\x5c\x88\x44\xac\x84\x47\xf5\xe7\x8a\x61\x4e\x46\x5e\xdf\xd1\xe1\x55\xf8\x40\x2c\x19\x76\xc3\x6b\x6c\x5f\xbb\xd8\xb3\xfc\x12\x95\x39\xa3\x0b\x9f\xf9\xc4\xbe\x6a\xa9\x47\xad\xed\x19\xcb\x3b\xce\x53\x8d\x3c\x6f\x3f\x08\xc8\x92\x81\xcd\x01\xf5\x13\x04\x7e\x19\xf6\x22\xa5\x03\x03\x78\xf9\x65\xbc\xa3\xc9\x2a\x26\x60\x48\x44\xeb\x10\x9b\xf0\x8a\xad\x9e\x68\xd7\x52\x44\x0a\xbd\xe0\x2d\xa8\xef\x90\x98\x24\x67\x45\xb7\x38\x5e\x3f\x42\x69\xab\x27\x06\xcf\x8d\x73\x31\x22\xaf\xa5\xb1\xff\x39\x03\xa0\x09\x10\x2f\xa7\x92\xe9\xd7\xd2\xc0\x27\x7b\xcd\x05\x38\x49\x0f\x81\x07\x5c\xfe\x10\x87\xec\x1d\x38\x5e\x11\x8b\x1a\x70\x07\xdd\x5a\xfb\x0a\xa2\xc0\x2f\x5c\x93\x73\x41\xa4\x72\x4b\x54\x90\x1c\x70\xb3\x23\x49\x48\x8c\x8f\x5d\xf7\x09\x7e\xdb\xa8\x71\x3c\x22\xd5\x80\x45\xee\x85\x30\x47\x14\x44\x70\xf0\x1b\x88\x54\x41\x5e\xab\x87\x21\x00\x00\x2b\x45\x0d\x9b\x17\x48\xc8\xed\xaf\x25\x53\x73\xe8\xf9\x53\x2d\x4a\xef\x86\x52\x8a\x16\x5e\x05\xd5\x2d\xbc\xee\x60\xcb\xde\x69\xe5\xef\xbd\x0c\x00\xba\xfb\xf7\x00\xd7\xb1\xaf\xde\xb3\x88\x44\xd4\x62\x97\xb4\xb5\xf2\xe6\xff\x59\x65\x15\xb6\xd7\xff\x90\x96\x72\xa5\x27\xe4\x98\x68\x2e\xe6\x0d\x1b\x7c\xe7\x02\xbf\xd1\x63\x0a\x91\x05\x79\x29\x56\x3f\xbc\xa6\x0d\x43\xcc\x25\x2a\x08\x43\x77\x15\x60\x6d\xaf\x19\x46\x23\x72\xb3\x90\x1a\x35\xdf\x50\x2e\x70\x70\xc5\x56\x07\xa3\x22\xa1\x30\x12\x9f\xcf\xf6\xd1\xe7\xe2\xa0\x6f\xea\x36\x90\x44\x41\xf7\x87\xec\xc5\x03\xf8\xee\xe0\x7e\xec\xb1\x07\xe0\xae\x7a\x10\x05\x4b\x2e\xdc\x78\xd2\x50\x0c\xf7\xef\x5b\xa0\x7c\x9d\xbe\xf5\xec\x1d\x40\xad\x8f\xee\xe9\x53\x35\x1c\x62\xd9\xde\x45\x71\x01\x83\xb8\x10\x10\x46\x01\xe6\x42\xb2\x8e\x8d\x51\x7c\xda\x19\xa6\xf7\x96\x13\x3e\x48\x68\x04\xd1\x16\x7a\xa1\xda\x95\xff\x71\xdb\x0f\x22\x34\x3b\xae\x4b\x31\xc7\xf9\x6c\x3d\x0f\x32\x82\xc7\x8d\x31\x0e\xa4\x72\x68\x79\x1b\x15\x75\xf6\x6f\x1a\x48\x75\x78\xe8\xf9\xa9\x51\x7d\xe2\xa5\x62\xba\x95\x58\x41\xb6\x75\x62\x9c\x22\xb9\xa0\x1a\x32\xe8\x67\x2e\xc1\xa9\xed\x54\x2b\x01\xd7\x9c\x8a\x8d\xcd\x58\x04\x03\xc2\x01\x7e\x78\x40\x25\x04\x8f\x0b\x3b\xd7\xee\xf7\xd0\xcb\xf2\x78\xad\x8b\x8b\x54\xd0\x18\xc2\x25\xf9\x8b\x9a\x57\xce\x2f\x44\x0d\x11\x69\x60\xc4\xf1\xb5\x9d\x81\x7c\x15\x12\xba\x05\x02\x94\x3d\xb2\x92\x37\x11\x90\x76\x26\x0c\xe4\xd8\x08\x72\x2e\x66\x8c\x6a\x3e\x6d\x98\x2b\x54\xd0\x86\x9a\x02\xf3\x17\x25\xd7\xbb\x79\xb4\xe6\x34\x68\x11\xdc\xe8\xf5\xe4\x9a\x43\x2e\xaa\xa6\x03\x1e\x10\xbc\x39\x02\x17\x36\x15\x15\x6b\x50\xb7\x91\x75\x40\xd6\x2a\x86\xfd\x10\x25\x12\xcd\x98\x52\x38\x5f\xd3\xd5\xf6\xdd\x4c\x6a\xc9\x30\xad\x18\x40\x51\x46\xf8\x7a\xdb\xab\x5d\xdc\x32\xe4\x1f\x30\x38\x5b\x94\x5c\x30\xdc\x1d\xb8\x32\x84\xda\xa3\x64\xd6\x20\xa6\x9b\x3b\x4b\x60\x86\x5c\xd5\xc2\x65\x94\x31\x34\x42\x80\x4f\x87\xc3\x19\x37\xf1\xcc\x26\xcf\x81\x5d\xee\xea\xfc\xc2\x65\x1a\xf7\x92\x69\x0c\xc7\x17\xcb\x0e\x3c\x16\x3e\xbf\x5e\x65\xf7\xea\xbe\xab\x03\x0b\x5a\x3e\xfb\xf6\x16\x83\xb6\x5b\x7d\xbd\xf3\x1d\xe9\x2c\x3f\xc2\xa6\x97\x33\xf2\x92\x37\x4c\xaf\xb4\xc1\x42\x46\xbe\x44\xc1\x85\xa5\x9e\xd2\x10\x94\x0a\x98\x4c\x87\x82\xcb\x9e\x66\x65\x02\x59\xc5\x56\xb8\xb8\x4a\xd2\x3f\xd6\xeb\x94\xbe\xc2\x7a\x03\x82\x76\x5d\x02\x41\xf9\x6d\xa8\x6d\x2a\xb2\x5a\x59\xb3\x35\x4b\x82\x68\x1c\xcc\xc6\xac\x1a\xfa\x62\x5f\xf2\xa9\x62\xe4\x64\x41\x85\x60\x4d\xd4\xfb\xd1\xa5\x6e\x50\x63\x68\xb5\x40\x69\x4e\x89\x95\x24\x0d\x33\x4f\x34\x59\x48\x6d\xc8\x92\x56\x0b\x2e\x42\xd3\x28\x11\x7a\xa0\xf6\x88\xbe\x0f\x10\xb4\x7e\xa6\xdf\x5a\x02\x12\xd7\xb9\x94\x70\x41\x2a\x3c\xc7\xce\xfa\x8d\x0d\x52\xc5\x48\x02\x69\x40\x05\x1a\xe6\x6d\x3c\x3b\xf4\x73\xf6\x52\x0a\xd6\x1a\x3d\x05\x70\x6e\xc2\xbd\xe9\x23\x9f\xbd\x9f\x90\x03\xf6\xde\x7c\x73\x30\x22\x07\xef\x67\xda\xfe\x47\x98\x99\x3e\x98\x90\xf3\x65\x48\x14\xe2\x22\x52\x23\x98\xfb\x01\xe1\x33\xd2\x89\xec\x02\xcd\x6c\x89\xd5\x74\xa2\x08\x7f\x3c\x69\x3a\x61\x97\xf8\x07\xd7\x56\xf9\x05\x79\x79\x42\x0c\x55\x73\x66\xec\x18\x44\x74\xcb\x29\x53\xa9\xed\x57\x4b\x24\x8e\xe4\xb7\xcc\x57\x8c\xd6\x3f\x88\x26\x39\xb6\x57\x6a\x43\x79\x3a\x86\xf3\x7d\x1a\x25\xae\xcd\x68\xa3\x19\x39\xb4\x37\x3e\xbd\x51\xdc\xb0\xa3\x09\x79\xe3\x7f\x05\xa5\xec\xa0\x8b\xce\x64\x8e\xbe\x87\x15\x20\xee\xa1\x9a\x19\xc4\x1f\x16\xce\x06\x79\x65\x37\x75\xb2\x16\x88\x0b\x3e\x95\xb2\x61\x89\xf0\xec\xc8\x7b\x3f\xfd\xf4\x3a\xd9\x35\x36\xe4\xef\xfe\x79\x1f\x62\xf3\x1b\xa9\x9a\xfa\x86\xd7\xae\x88\x88\x1c\xda\x9b\x8f\xf2\x58\x3e\x27\xb4\x90\x19\x48\x28\xdd\xa2\xae\x8c\x0f\xff\xe6\x86\xd7\x65\x56\x34\x63\x03\x02\x11\x43\x1e\xf0\x8e\x11\xcb\x03\x04\x98\x80\xd7\x4c\x18\x2b\xdc\x95\x26\x87\xf0\x8b\x74\x4c\xcc\x33\x8e\x3d\x4c\x60\x5c\xa9\x48\x25\x97\x53\x2e\xfa\x16\x43\x3d\x6f\x5a\x05\xc6\xca\x5b\x1f\x71\xd3\xcc\x60\x5f\x00\x40\x28\x94\x66\x41\x34\x5f\x76\x8d\xa1\x82\xc9\x4e\x37\xc9\xd0\x18\x8f\xec\xb9\x71\xcd\x1a\xf6\x1e\x65\xdf\xae\x1a\x28\xf6\x14\x0c\x35\x63\x40\x9d\xe8\xbb\xbc\xad\xab\xc6\x49\x63\xf5\x50\x47\xf5\xd3\xa0\x5a\x87\x9e\x25\xec\x3d\xab\x1c\x22\x6a\xdb\x74\x73\x9e\xe8\x9d\x39\xb5\x6f\x51\x51\xc3\xea\x17\xe4\x65\xff\x72\x80\xb7\xe5\xbf\x99\x90\x13\x9f\xd3\xe8\x86\x27\x27\x97\xe7\xa7\xae\xd1\x97\xd0\x86\xd1\x5d\xe8\xee\x79\x09\x54\x63\xe7\x8a\xdd\x81\xd1\x80\x03\x17\x11\xb1\x7d\xb7\xb5\xf5\xf8\x87\xfb\xc6\x75\xd1\x0e\xdd\x90\xf3\x1a\x53\x65\x8b\x84\x47\x7b\x69\x67\xf6\x52\xdc\x3c\x39\x22\xab\x66\x2d\x13\xf6\xcc\x13\xf1\xfe\xc7\x79\xde\x19\x9b\x48\x58\xe3\x42\x7a\xa5\x7b\xd8\x50\xa9\x8c\x7c\xe4\x0b\xd9\xd4\x9a\xb0\xf7\x46\x51\x7b\xec\x2f\xed\x01\x1f\x7e\x33\x23\x54\xac\x26\x79\x2a\x66\x56\x58\xba\x6c\x28\x3a\x7b\x65\xf6\xdb\x42\xab\x1f\x2d\xb4\xf8\xd2\xac\x52\xcc\x64\x40\xa2\x15\x6b\xe2\xef\x09\x19\x2e\xd7\xe0\xe3\x0d\x07\x2b\x7e\xeb\x01\x17\x5c\x5a\x49\x8e\xdf\x58\x33\xa1\xb9\xe1\xd7\x83\x4e\x9f\x00\x69\x4a\xb5\x0e\x7e\x48\x50\xa6\x9c\x00\xd4\x03\xb4\xd1\xe4\x81\x31\x3e\xc9\x67\x44\xc8\xb5\xb7\x8a\x61\x28\x42\x9c\x70\x70\x4b\xf2\xa0\x21\x0f\x67\x89\x4d\xb2\xa9\x00\xf0\x42\x7c\xf8\x08\x70\xd3\xf0\xdf\x98\x8a\x63\xe7\x20\xf2\xc6\xc2\x2c\xa4\xcf\xb4\x9b\xbd\xdd\x89\xcd\x12\x29\xe7\xb9\x68\x33\x25\x63\x47\xaf\x23\xd5\xce\x03\x8d\xe4\x85\x17\x86\x5d\xe1\xd8\x6c\xc6\x2a\xbb\x37\xa0\x13\x9d\x6f\xab\x66\xcd\xda\xba\x43\x30\x0f\x0f\x2e\x3a\x04\x07\xcd\x85\xd1\x8b\x60\x26\xfa\xec\xd5\x73\xa1\x0d\x05\xbc\x47\x78\x63\xab\xa7\x59\xe5\xc9\xf5\x12\x74\xdb\x09\xa3\xd7\x1e\x35\x32\x93\x88\xa5\x55\xc3\x2a\xa6\xec\x8e\x69\x56\xe4\x46\xc9\xdc\xa2\xad\x5b\xc6\x56\xe5\x35\x53\xd7\x9c\xdd\x3c\x75\xe8\x33\x63\xfb\xb2\x63\x07\xe8\xf7\x14\xdc\x5d\x4f\xbf\x80\xff\x64\x50\x55\x28\xfa\xe6\x4e\xd9\x17\xe4\xe0\xa0\x84\x5f\x20\x3b\x75\x6d\x06\x0d\x35\x93\x0c\xaa\x32\x3e\x01\x18\x7e\x2d\x54\xe6\x3e\x74\x0e\x81\x4f\x09\x8d\xb9\xb3\x26\x52\xc8\xed\x66\xf7\x0f\x72\xad\x58\x88\xb6\x7c\xd2\x03\x26\x75\x42\x24\xd7\x17\x0e\x6d\x7f\x1c\x66\x60\xf8\x87\x04\x4f\x2e\xc6\x46\x31\x16\x5e\xd5\x38\xf3\x49\x48\xdf\xc4\x3c\x18\x36\x0f\x30\x88\x57\x53\x43\x35\x33\x39\xc1\xe4\x52\xa2\x3e\x22\xc5\xce\x6f\x2c\xf5\xdd\x57\x90\x6f\xc5\x00\x75\xda\xf7\x69\x24\xe3\x3f\x3b\xd3\x5f\x0c\xee\xb4\x46\xbf\x5b\xd7\xf4\x93\x1c\xd1\x85\xa0\xf3\x0a\xfa\x80\x70\xec\x9e\x49\x76\x65\x23\xba\xb7\x7c\xf7\xee\xfc\xb4\x8c\x2b\xa5\x7f\x9e\xf7\x0c\xc0\xbf\x87\xd3\xef\x36\x29\xd7\xa4\x13\xfc\xd7\x2e\x76\x42\x43\x07\xfe\xb0\x91\xdc\xfd\xbb\x98\x9d\x79\xc5\xfa\xe4\x84\x53\xae\xaf\x76\x25\x19\x37\x08\x19\xca\xc8\xbf\x9c\x9c\x11\xf7\xe9\xc7\x32\x09\x92\x86\xbe\x9f\xec\x83\xa1\x0c\xfd\xcb\xc9\xd9\xda\xeb\xae\xb9\x51\x8f\x9b\xc6\xfb\x7a\xa4\xd0\x01\xa0\xd3\x49\xd7\x42\x53\x0c\xb2\xd9\x6a\xf4\x8a\xd5\x5c\x61\xaa\x9a\x7f\xcb\x7a\x52\x69\x1e\x1a\x98\xcd\xaf\xd8\x84\xcb\x28\x2d\x35\x6d\x0a\xb2\xb2\xc8\xf4\x17\xf3\x8a\xf5\x09\xd1\x35\xd7\x57\x0f\xcf\x93\xdc\xd6\xaf\xd3\x00\x6b\x3f\xb7\xf4\x93\x75\x77\xa7\x93\x9d\x4e\x09\x82\xdd\xbd\x92\x1d\xb9\x71\x7d\xc4\x33\xdd\xac\x6f\x79\xfb\x82\x9c\x09\xdd\x29\xd6\x57\xe8\xae\x93\x60\x2d\xec\x3b\x77\xba\x42\xc3\x7c\xfd\x62\xc7\xa9\x2a\x7b\xb1\x15\x49\x89\xb3\xbd\xa5\xca\x80\xd7\x73\xd7\xac\x1d\x08\xf1\x2a\x41\xf4\x81\xb8\x4b\xde\x3e\x9f\x79\x0c\xa5\x91\xeb\xf3\x8a\x9e\x7b\xae\xc3\xc3\xfb\x8c\x69\xd0\xfe\x4a\xf0\xef\x4b\x19\x2c\x96\xa7\x35\xbb\x7e\xaa\x6b\xfa\x7c\x04\xaf\xe5\x31\x20\x87\x73\x40\x35\x39\x78\x7e\x90\x3e\xf2\x25\x5f\xf2\x86\xaa\x06\xfb\x9b\x84\xc6\x31\xe1\xf9\xf6\x84\xf4\x84\x40\xd9\xd9\xb3\x03\x72\x28\x15\x50\x54\x51\x41\x1a\xe6\x7b\xa1\x38\x49\xba\x42\xe7\xc0\xd1\x67\xb2\x85\x76\x9d\x8f\x85\x07\xdb\xce\x37\x61\xed\xed\x21\xa7\x73\xc7\x71\xce\x8b\xd3\x5e\x7d\xe4\xc2\xea\x60\x13\xf2\xce\x69\x76\x4e\x37\x47\xae\xad\x41\x21\xc3\x3b\x3e\x0f\xee\xf8\x9c\xc2\x38\x6b\x01\x99\x3b\x0d\xac\x90\xcd\x4c\xbe\xcf\x84\x23\x52\x83\x45\x73\x6e\xde\xb0\x56\xee\xcc\x4e\xc4\xe1\xd7\x52\x6a\xb8\xb1\x1f\x48\xcd\x8d\x54\x2b\x42\x0d\xa1\x78\x32\x54\x5d\x43\x15\x51\x0c\x93\x63\x0a\x98\x6d\x6e\xf4\x35\x63\xed\xad\xec\x33\x70\x62\x0c\x43\xe7\x86\x0e\xf4\x8d\xdc\x69\x9c\x18\xa3\x3b\xb3\xe7\xd5\x29\x57\x56\x4a\x4b\xac\x0a\xe3\xe6\x24\x0c\x86\x70\x4a\x8d\x14\x0e\xda\xc8\x8e\xe8\xb2\x70\xe6\xdc\xb8\x76\xb9\x48\x80\xfd\xda\x3f\x2d\x89\x14\xa0\x00\x64\xaa\xac\x9f\xe8\xfe\x8d\x1f\x60\x6e\x4f\xcf\x38\xbb\xf0\x27\x82\xd9\x2d\xd5\xce\xa5\x6b\x20\x24\x34\x7c\xc0\x3c\xda\xfe\xf3\x3c\xc5\x11\xf2\x5c\x84\x0c\xc1\x59\x82\x35\x8c\xca\xe0\x1e\x79\x32\x99\x3c\x99\x80\x2a\xfb\x64\xf2\xc4\x1b\x62\x4d\x28\x87\x75\xda\x5e\x4f\x8c\x2f\xa2\xcc\x01\x2c\x18\x4a\x8d\x09\x21\x3f\x78\xd4\x4f\x68\x4d\xb9\x56\x91\x1b\x8a\x6d\x9b\x26\xbc\x03\x34\x50\x19\xca\x9e\x8c\x48\x28\xc4\x73\xbb\x69\xfc\x92\xae\xb0\x77\xce\xaf\x5d\x67\xb7\x9d\xa5\xd9\xf4\xaf\x58\x84\x53\xe3\x19\x73\x0e\xd4\x37\xdf\xef\xee\xdd\x50\x74\x17\x7a\x33\x77\x0e\xb8\xf7\xaa\xe4\x72\xc9\x0d\x59\x50\xbd\x08\x5e\xbc\xbe\xcb\x4d\xde\xd1\x94\xeb\xfc\x6d\x3a\x6d\x98\x9a\x25\xc9\xae\x22\x87\xb9\x27\x60\xcd\xd9\x1b\x3e\x76\x98\xc4\xa2\x77\xc5\xc0\x21\xa7\x17\x54\x31\x7b\x67\x0b\xa7\x4f\xc3\x67\xcc\xf0\xd4\xcd\x31\x38\xdf\xc3\xc8\x1f\x0f\x6e\xf5\x84\xef\x57\x78\x2b\xf7\x2c\x64\xa2\x6e\x25\x4f\x6d\xd5\x30\x26\x2d\x35\x29\xcd\x4d\x73\x4f\xd1\x40\x76\x91\x1d\x1c\x9e\xe6\xb7\xb0\xff\x00\x8d\x49\xe0\x40\xd7\x4b\x25\x62\x18\x23\x5b\xd9\xc8\x79\x66\x0e\x7f\x96\x23\xcc\x2c\x76\xad\x45\x58\x1a\xfc\xac\xf5\x53\x13\x7c\x35\x26\x03\xed\x6b\x8b\xf1\xc4\x9c\x33\xca\xb7\xdf\x71\x86\xd2\xd3\xb0\x3b\x9f\xbe\x39\x3b\x3e\x7d\x75\x36\x59\xd6\x5f\x20\x06\xc4\x98\x8e\x5b\xb9\xb3\x30\xe4\x83\xb0\xa4\x37\x96\x0d\xbd\xcf\x20\x89\x59\x8d\x3a\x89\x7d\xc0\x18\x30\x9b\x5a\xa6\x96\x1c\x71\xa5\xf6\xd5\xc4\xde\x09\x97\xa4\x5a\xd7\xf6\x8c\xbb\x48\xdc\xc8\x25\xd8\xc3\x8f\x3f\x3c\x90\x5b\xc5\xc6\x00\x24\x61\x6d\xc9\x19\x6f\x00\x88\xa6\xd7\x53\xa3\xf3\x39\x69\x50\x1f\x71\xf5\x21\x5d\x7c\x72\xb3\x5a\x8f\xbc\xf6\x56\x66\x88\xac\x63\x0b\xd7\xa6\x49\xab\x7b\x02\x2c\x1f\xab\x94\xb9\x28\x10\x9d\xc3\x0b\x4b\xe5\xba\x01\xb6\x8a\x5f\xf3\x86\xcd\x2d\x09\x0b\x2e\xe6\xba\xef\x40\xe4\x92\xd1\x92\x86\x05\x8c\x21\xd6\xeb\x34\x21\xa9\xe7\x15\xa4\x96\x05\x70\x7e\xdc\x9a\xaf\x7f\x78\x4b\x04\x43\x12\x12\x37\x59\xa6\xe3\xc9\x12\x99\x78\xb2\xef\x3a\xda\xba\x1b\x7d\x64\x6f\x8e\x62\x9f\x90\xb2\x6d\xab\x66\x05\x9c\x30\xb6\x83\x87\x3d\x25\x7a\xb5\x6c\xb8\xb8\x82\x96\x1d\xee\x38\x71\xad\xec\x18\xb1\x5f\xf8\x0d\xac\x18\x6d\xca\xab\x01\xf7\xc4\xca\xa4\x84\x0a\x60\xf6\x20\x06\x0f\x26\x8b\x95\x7a\xff\xee\x85\x3d\x7a\xca\x8b\x9c\xdf\xc9\x79\x9e\x0f\x7a\x69\xf9\x92\xce\x77\x56\x68\x0a\x83\x0f\x0e\x6c\x41\x7e\x38\x39\xf7\x75\x03\x87\xb1\x43\x1a\xef\x95\x8a\x50\x65\xf8\x8c\x56\xe6\x88\xb4\x5d\xd3\x38\x13\xd7\x2b\x79\x4e\x4a\x7c\x20\xf7\x34\x89\xc8\xb7\xbd\x0b\x0d\x0a\x38\xb4\x6c\xae\xed\xa8\xc6\xda\xf0\xe8\x09\xec\x5a\x97\xd0\x0a\xd0\x6c\x82\xdc\x2c\x78\xb5\x20\x17\x5d\xd3\x5c\xc8\x86\x57\xab\xd0\x8c\x1d\x9d\xed\xb5\x3d\x16\x12\xcf\x85\xe3\xe6\x86\xae\xf4\x8b\xf8\x2d\x09\x85\xcf\x08\x35\x86\x2d\x5b\x64\x66\x3b\x35\xeb\xed\x36\x7b\x7f\x3b\x28\x8b\xdc\x12\x0a\x22\x8f\xf2\x26\x48\xc6\xce\x7d\x90\x78\x5e\x8f\xc9\x6b\x76\xcd\xd4\x90\x3e\x61\x3f\x82\x47\xeb\x21\x4d\xb0\x74\xa0\x8d\x77\x1a\xbc\x22\xd8\xff\x7d\x63\xa9\x7f\x83\x76\x3e\x5b\x7b\x2c\xd7\xe2\x89\x21\x8e\xab\x52\x5f\xe4\x7c\xf6\x5a\x9a\x0b\x7c\xc6\xf0\x7d\xf0\x4d\x3e\x30\x2a\x6d\xac\x8d\xb1\xf2\xa3\x5b\x76\xa8\xb9\xbe\xca\x7a\x85\xe0\xc5\x89\x97\x27\x97\x99\xe7\xcc\x58\x76\x1e\x07\x8e\x76\x34\x58\xae\x86\xef\x6a\xfb\xb2\x6e\x7f\x29\xe6\xa0\x08\x47\x8e\xb9\x97\x8c\x0a\x8f\x37\xc8\x6e\x88\x62\x4b\x69\x50\xcf\xb5\xf4\x3a\x27\x77\x25\x97\x8c\xd0\x6b\xca\x1b\x3a\x6d\x20\x73\xd7\x3e\xdc\x3d\x2b\xd9\x77\x78\x0c\x33\x00\xf9\x50\xd2\xef\x47\xcb\x2d\x81\xe7\x91\x7f\x1c\x0c\x78\xbc\x49\x91\xac\x46\x56\x57\xb1\xae\x3a\x53\x72\x89\xb7\x60\xd5\x79\x0d\x95\x50\xb4\xae\x89\xe6\x73\x01\xc0\x80\xc2\x90\x86\x1a\x26\xaa\xd5\x84\xbc\xc4\xc1\x7b\x38\x44\xc5\x8c\xe2\xa1\x6a\x5d\x48\xb5\xa4\x8d\x9f\xe4\x29\xad\xae\xe4\x6c\x06\x4f\xed\xef\x77\x89\x5a\x4e\x58\xe1\x9c\x50\x2d\x05\x0e\xce\xb4\xa6\xf3\x0c\x61\x05\xdd\xbf\xad\x02\xe5\x0a\x2b\x70\x95\x1c\x54\xa8\x17\x94\x1e\x07\xd4\xa7\xee\x2b\x0f\xd5\xd6\x43\xb1\x05\x7e\x55\x9d\x30\xdc\x8a\xbf\x41\x2f\x31\x02\x11\xc3\x8d\xc4\x53\x3b\x94\x6b\xcc\x06\xe0\x11\x0e\x62\x0d\x4a\xb1\xae\xa1\xeb\x00\xd2\xb7\x91\xaf\xb6\x2e\xea\xa1\x6a\x27\x7d\x16\xa2\x73\x04\xb8\xd9\xbf\x38\xb7\x54\x3b\x98\xeb\x5e\xbb\x3c\x04\xdc\xb7\x9e\x29\xfe\xfa\xe5\xdf\x26\xd7\x71\x14\x1e\x7e\x6e\x55\x8e\x23\x4b\xef\x92\xa9\x39\xa2\xa0\x31\xb2\xa4\x82\xcf\x98\xb6\x1c\xb2\xb2\xec\xe4\xa2\x2b\x9a\x2e\x19\xb9\xb1\x8c\x84\x39\xb0\x6b\xaf\x97\x28\x5f\xdf\xae\xc5\x73\xa2\x15\xed\x5d\x1b\x87\x4a\x26\xe6\x06\x5d\x76\x53\x54\x8e\xe1\xa1\x6b\x84\x63\x09\x1d\xb4\xbe\x0f\x6b\xf7\x9b\xf3\xa6\xbb\x69\x8b\xb3\xc6\x66\x56\x4b\x7a\x3e\xf9\xfa\xeb\xf4\x57\xc7\x4a\x2e\x18\x53\xb3\xaa\x53\xdc\xac\xac\x58\x65\xef\xcd\x64\xa6\xa1\xd7\xfd\x09\x80\xa9\xba\x63\x77\x41\xc1\xbd\x8d\x65\x5f\xb8\xdd\x7a\x96\xb7\x6c\xf8\x00\xeb\x38\xda\xa0\x55\xec\x5a\x1b\x77\x93\x3c\x73\xa2\xd7\xee\x87\x7e\xd3\xe9\x09\xb9\x90\x1a\x71\x5f\x03\x72\x7a\x46\xa1\xe1\x9e\xeb\x3d\xf6\xfa\x4c\x34\x1f\x02\x76\xf2\x7e\xeb\x3e\xa9\xef\x15\xdb\x7b\xc8\x51\x76\xf4\x17\xd0\x54\xcb\x10\x43\xe7\x6b\x2d\xf3\xa5\x1a\x4c\x45\xdf\x5d\x73\x87\xd1\x6c\x37\x4b\xbb\xde\xfd\x6f\xbc\x83\x8b\x9c\xaf\x33\xed\xb0\xca\xdd\xe1\x93\xa7\x2f\xda\xb7\x6c\x41\xaf\xd9\xd6\x83\xb5\x95\xf5\x64\xcb\x09\x04\xdb\x28\x7d\x40\x6b\xb8\x85\xb2\xf1\x00\x7a\xad\x35\x5b\x4e\x9b\xd0\x78\x7d\xe3\x80\xdf\xa6\xc3\x4c\x57\xa4\x91\x12\x00\x53\xbb\x96\x08\x59\x33\xbb\x01\x20\x61\x93\x36\x7a\x44\x2e\x8f\xdd\x8d\x6d\x34\x24\xb6\x9c\x00\xbd\xb5\x65\xd5\x96\x1b\xee\xcd\x07\x15\x75\x5b\x45\xa5\x25\xbd\x8a\x61\x50\x87\x2d\x1d\x38\x02\x54\x3e\x81\xbf\xcd\xb5\xba\x6f\xd8\x35\x83\x24\x95\x19\x9f\x13\x6c\xfe\xba\x74\xad\x41\x7c\x6e\xb8\x54\xd0\x8c\x52\xf1\x3a\xdd\xed\xb3\xae\x8b\xd9\x25\xbd\x91\xea\xaa\x91\xb4\xf6\x35\xa8\x8d\x55\x78\x1a\x7e\xc5\xc8\x29\x6b\x1b\xb9\x72\xfd\x3c\x44\x4d\x2e\x0d\x35\x6c\xd6\x35\x97\x19\x4b\x91\xe7\xb3\xd1\x95\xe6\x3b\xf3\xd9\xd8\xc1\xd7\x7c\x36\xe7\x97\x27\x97\xe7\x0f\xbe\xca\x2d\xcf\x8b\xf7\xf4\x0b\x98\x99\x87\x17\x69\xe0\xbf\xa6\x25\x7e\x8d\x49\xd3\xa5\xfe\x12\x53\xf4\x2e\xa4\x32\xb4\xd9\x81\x0e\x5d\x2d\x68\x7b\xdc\x99\xc5\x29\xd7\x95\x15\x26\x65\x54\xe9\x8d\xa7\x46\xe0\xe7\x0c\xa2\x72\xce\x6e\x22\xdc\xef\x17\x77\xdf\xc9\xbf\x1f\x5f\x10\xda\x59\x6e\x36\xae\x0d\xc1\x4e\x62\xb8\x24\x9a\x9b\x4b\x6c\xba\x54\x74\x66\xdc\x33\x7f\x63\x5e\xfc\x5d\xfb\x34\x2b\xfb\x56\x83\xb8\xad\x08\xf0\xb1\x0e\xf1\x41\xd5\x21\xa6\x1e\x17\xa4\x84\x19\xc1\x05\x37\x9c\x1a\xa9\xf6\xa1\xf4\x69\x40\x4c\xc8\x3e\xed\xb4\x91\x4b\x27\x12\xce\xfd\x1d\x00\x16\x91\x15\xff\xdd\x18\xac\x4f\x69\x85\x0c\x21\x58\x96\x73\x61\x98\x9a\xd1\x8a\xad\xc1\xdc\x8e\xc0\xd9\x8d\x34\x71\x7f\x4f\x32\x35\x7f\x72\x99\xea\x2d\x9c\x83\x7f\x7e\xf1\xa7\xa8\xd0\xf1\xcf\xc1\xf0\x70\x8e\xf7\xd8\xc6\x10\xac\xca\x69\x55\x93\xcf\x3d\xbf\x96\x39\x17\xf8\xaf\x62\x2d\x69\x1f\xa7\xf6\x3f\x3a\xda\xe0\x92\xe4\x2c\x77\xfe\x6b\x0e\x58\x61\xe7\xbb\x64\xc8\x98\x6e\xde\x02\x17\x22\x8c\x0a\x48\x66\x74\x29\x09\x37\x99\x46\x51\xa1\x2d\x8b\x95\x71\x9b\x3c\x71\x86\xd8\x13\x72\x68\xaa\x36\xb9\x06\xb5\x00\x4a\x53\x40\x68\x72\xff\x48\x7a\x4c\xa9\xc6\x05\x4d\x27\x62\xa3\x08\xa7\xfe\x2d\x32\xf5\xf7\xa1\x71\x41\xde\x6c\xed\xbc\x50\x16\xe4\xd4\xce\x61\xd3\x1d\x19\x61\x07\xc4\x53\x8d\x26\x05\xf9\x9e\x6b\x83\x60\xb0\x78\x33\x80\xbf\x21\xf8\xb9\x35\x57\x2f\x88\x54\x84\xb7\xff\x45\xeb\x5a\xbd\x40\xcd\xd3\xc7\x3e\x55\x3a\x16\x21\xd7\x2e\xf9\x0e\x60\x08\xbd\xbf\xe2\xd0\xac\x5a\x5e\xd1\xa6\x59\x91\xb7\x27\x17\x30\x82\x26\x7f\xfc\xfd\x33\xb0\x5f\xbf\xfe\xea\xf7\xcf\x32\xb7\xd0\x23\x76\xfa\xda\xf5\x20\x72\x95\x1f\x40\xd5\xef\xbe\x21\xb3\x0e\x70\x54\xa1\xd3\xa4\xb5\x0f\x2f\x11\x46\xd4\x2a\x47\xee\xb8\x43\x41\x60\x77\x57\x50\xf5\x4a\x5a\x91\x8f\x80\x9d\xd1\xf5\x08\xd8\xf9\x08\xd8\xf9\x08\xd8\xf9\xe1\x2b\xf6\x73\xee\xfa\x3c\x8a\x69\x81\x66\x88\x9b\x7a\x13\xaa\x4c\x17\x9f\xbb\xca\x94\xc8\x6a\xa9\x82\xb7\xc4\x02\xc6\x60\x30\x39\xdd\x2d\xfa\xa6\x0d\xa7\xaf\x2f\xff\xeb\xfb\xe3\x6f\xcf\xbe\x87\x59\x75\x98\x33\x76\x7b\x73\x71\xaf\x61\x94\x3b\x15\x31\x79\xeb\xbd\xbb\xf2\x62\xb1\x56\x58\x2c\xc8\xeb\x97\x97\xb7\xac\x29\xde\x41\x0c\xec\x0b\x31\x4b\x5f\xa5\x87\x56\x6a\x63\x7f\xaa\x99\xda\x4d\x77\x9d\xbd\xa9\xd3\xf1\x61\x5e\xf6\x7e\xe8\xf5\xb7\xfc\x8a\xb3\xb3\x33\x07\x7b\x1a\x33\x92\x7f\x9a\x7a\x59\xbb\x44\xb8\x6c\x0f\xbe\x52\xf6\x3e\xd9\x22\xcf\x22\x56\xa5\x9a\x62\x65\x35\x2a\x51\x51\x3f\x2d\x7b\x90\xa0\x7a\xa1\xac\x9a\x67\x15\x3c\xa6\xb5\x57\x36\xfe\x79\xf7\x71\xbb\xad\xf9\xfe\xae\x14\x82\xad\xc4\xb8\x76\xfc\x98\x6f\x33\x28\x7b\x1e\x24\xe0\xa5\x65\xdd\xac\x77\xfe\x86\x11\x07\xb9\x6f\xa0\x94\xb5\xb4\x4a\x55\x45\xd3\xb8\xa2\x9f\x89\xb1\x67\x90\xfe\x23\xfc\x04\xda\x92\x3f\x40\x45\x04\xe8\xde\x11\xc8\x72\x18\x7b\xd7\xc2\x29\x10\xb2\xde\xef\x8f\xde\x86\x25\x09\xd5\xa1\xb6\x06\xeb\x72\x0a\x34\x06\xdc\x4b\x9e\x25\x9f\xa5\xbe\xf2\xd3\x3d\xbb\xcb\x77\xe9\x2a\x6f\x17\xd2\x48\xb1\x1f\xcd\x0c\xb6\xd1\x32\x3c\x5a\x2e\xe0\x8e\x93\x90\x24\x1b\x1d\x4d\x88\x3e\x1b\x12\x3e\xd7\xea\x72\x5d\x1a\x67\x89\x92\xdc\x18\xf8\xea\x62\x1b\xc5\x1f\xc7\xc0\xda\xfa\x92\x9f\x17\x1c\x56\x5b\x9f\x9f\xee\xe0\x14\x79\x08\x69\x72\x9f\x69\xe7\xd3\x7b\x4a\x7b\xcb\x07\xfb\xaa\x0b\xb5\xb2\xb1\x0f\xf2\x6b\x7c\x7e\xea\x1c\x11\xbe\x4f\x8d\x76\x72\x81\x7c\x58\x50\xed\xc4\xa6\x90\xca\xdc\x48\xb5\xe3\xfe\xde\x43\x2a\xd6\x00\x93\xdc\x77\x1b\x3d\xbd\xee\x49\x9a\x0f\x49\xbb\x55\x6b\x99\xf5\xf7\xb2\x2b\x95\x44\xd0\x07\xfa\xca\xbc\xaf\x27\x7e\x84\x49\x25\x97\x99\x2d\x65\x76\x7c\x40\xe0\xf2\xfe\x33\x1f\x12\x97\x70\x48\x44\xcc\xff\xb1\xc3\xe2\x73\x38\x2b\x1e\xce\x19\xb1\x77\xe6\xc8\x63\xcb\xe5\xc1\xe5\x85\x47\x91\xf5\xf1\x0f\x73\x31\x48\xcb\x9b\xfd\x29\x4e\xc3\x89\xe0\xee\xdb\xc9\xa9\xad\xe4\x7f\xc3\x51\x90\x7d\x60\x87\x27\x61\xea\x1d\x9c\x60\xb4\x69\xec\xca\x4a\xc1\x42\xf1\x9c\xee\x4b\x41\xb1\x16\x72\x49\x5b\x57\x16\x5a\xcb\x1b\x71\x43\x55\x4d\x8e\x2f\xce\xef\xff\xd4\xc9\x06\x8d\xc7\x7d\xf4\x4a\xd6\x3b\x97\xff\x11\x29\x70\xe0\x03\x94\x87\xfd\x63\xca\x8d\x46\x7c\x45\x40\x3b\x34\x71\xfc\xc3\x6a\x3e\x21\x1f\xdf\xca\x73\x2b\xbb\xdd\x93\x0a\xd8\x13\x82\xc8\xca\xd0\xc6\x25\x11\x4d\x99\xb9\x61\x4c\x90\x67\xcf\x9e\x61\xea\xc3\xb3\x3f\xfc\xe1\x0f\x50\x67\x4d\x6a\x56\xf1\xe5\xe6\x8d\x70\xd7\xef\x9e\x3f\x4f\x27\xe5\x3f\x8f\x5f\x7d\x4f\x68\x05\xee\x2b\x32\x95\x66\xe1\x28\x02\xd6\x8b\x07\xd5\x23\xf2\x7f\x2e\x7f\x78\xed\xf5\x10\xbd\xf6\x2d\x70\x76\x98\xce\x0c\xf7\x8c\x43\x68\xe1\x80\xb7\xd3\x27\x27\x50\xb3\x08\x68\x24\x14\x92\xc4\x22\x4c\x1b\x27\x2f\x33\x6a\x9d\xa0\x1d\x3a\x9f\x2f\x60\x59\xb8\x80\x5d\xd8\xf0\xca\x41\xfe\x63\xca\x0a\x16\x31\x7b\x60\x4d\x84\x18\xf1\x2a\x44\xf2\xc8\x76\xca\x46\x58\x76\xec\x00\x4d\x46\xc1\x7d\xa1\x98\xee\x1a\x03\x2d\xa1\xa6\xcc\x11\xd1\x73\xac\x66\xc9\x1c\xb8\x1f\xd9\xe5\x4e\xf4\xed\x5a\x2e\x78\x09\xec\x2c\xcb\x86\x5b\xa5\x6c\x16\x90\xa0\x51\x80\x43\x2c\x94\x9c\xd1\x6a\x41\x98\x30\xd0\x3c\x01\x59\xcf\xde\x9e\x3c\xf4\x82\x8a\xda\xca\x14\xe8\x60\x0f\x64\x3c\xd8\xd4\xf0\x72\x49\xa6\x17\x61\xc6\x07\x38\x56\xfd\x49\x4a\x1b\x29\xe6\xf1\xc6\xec\x15\xeb\x08\xe9\x27\x43\x06\x41\xcd\x21\xa0\xfa\xda\x85\xc1\xb8\xa8\x76\x58\x44\x1a\x41\xae\xa6\x2c\x67\xff\x15\x49\x2d\x2e\x93\x5c\x4c\x48\x85\xe0\xd2\x6f\x55\xa7\xcd\xb7\x9d\x65\xc8\x9c\xa7\x95\x4d\x37\x26\xe4\x64\x83\x3a\xcc\xd5\x75\xe9\x4f\x10\xee\xac\x2a\xa6\x71\xf3\xfe\x82\xe0\x20\xa6\xbf\xfb\x17\x5c\xb6\x4c\x2a\xe4\x6c\x1b\x21\x1e\x6e\x8d\x0b\x7b\x92\xd3\xce\xc8\x71\xd7\xd6\x34\x40\x4f\x27\x42\xf6\xf5\xd7\x71\xd3\x2e\xe8\x88\xcc\x69\x64\x34\x6e\xd2\x11\x6d\x98\x19\xa3\xa6\x53\x0c\x7e\x91\x3d\xfa\x47\xde\xd8\x1e\x49\x2e\x57\x14\x76\x42\x13\xce\x63\x41\x97\x0c\x60\x74\x90\xdc\x4c\x12\x2a\xb9\x9c\x72\xe1\xd0\xe7\x66\x00\xcf\xc7\x14\x06\x08\x01\x7a\x8e\x34\x74\xca\x1a\x47\x80\x54\xd9\xaf\xfc\x9d\x07\x3d\x62\xca\x9e\x6f\x9a\xd0\xf9\x5c\x31\xad\xf9\x35\x73\x38\x7f\xfc\xef\x81\x1a\xe8\x29\x75\xf6\xca\x63\x20\x6a\x62\x8d\x43\xc3\xd2\xbb\xea\xe0\x15\xfa\x55\x59\xf6\xee\x7d\x08\x13\x42\xce\xb4\x34\x4c\xf1\x0a\x46\x75\x4b\xad\x89\xee\xaa\x05\xa1\x1a\x0b\x03\xc7\x00\x76\x98\x3f\xeb\x3d\xf8\x09\xa2\x27\x2e\x18\xad\x3d\x20\x9c\x35\xaa\xda\x96\xd5\x13\x42\x4e\xac\xf8\x99\xf1\x8a\x1a\x84\xfb\x22\x35\xab\xbb\xb6\xe1\xe8\xbe\xcb\x24\xe3\xed\x82\x11\xa9\x6a\x06\xa8\x8e\x72\x06\x79\xf1\x61\xb0\x48\x37\x04\x94\x77\x6e\xc7\x9f\x72\xa3\xa8\x5a\xa1\x06\xe5\xd6\x32\x93\x08\x7b\xfa\x54\x00\x31\x07\x63\x01\x3d\x80\x47\x43\xd2\xdb\xb8\xf8\xab\xc8\x21\x40\xb2\x7d\x83\xfd\x95\x91\x1a\xe9\xaf\x32\x67\x92\xbd\x60\x6b\x5f\xba\x9d\x9d\xfb\xb0\xd2\xc7\x92\xbd\x90\x36\x30\xe7\x37\x45\x65\x00\xe1\x34\xd5\xc2\x69\x8a\x43\x51\x45\x08\xfa\x8f\x68\x5e\xe1\x0a\x5e\x0e\xf0\x90\x7b\x11\x19\x4a\xdd\x99\x99\x58\x73\xd3\x74\xb4\x69\x56\x63\xf6\xde\x1e\xf6\x56\x98\x81\xf6\x04\x5d\xba\xa0\x46\xbe\x13\x9a\x99\x51\x01\x42\x40\x08\xb5\x0a\x61\x64\x35\x39\xc0\xf7\x17\x12\x7a\x12\x1c\xe0\x60\xd6\xc4\x9e\x76\x06\xeb\x67\x46\xdb\x7f\x52\x62\x4e\xae\x99\x5a\xb9\x71\xb3\x1f\x57\x6c\xab\x92\xa2\x7b\x84\x80\x84\x32\xd5\xe2\xec\x7d\xab\x10\x45\xa5\xc8\x33\xd7\xb6\xcb\xfa\x10\x08\xa5\xef\x2d\xa5\x21\x63\x7b\x61\x04\x27\x08\xd6\x97\xc4\x9f\xc0\x29\x71\xfc\xfa\x34\xff\x78\xc0\x2b\xdf\xf0\x19\x5e\x99\x66\xd0\xf0\x2a\x2f\x73\xf0\x3a\xfe\xc8\x9c\xbb\x36\x07\xfe\x1b\xec\xb4\x89\xf0\x67\x3a\x78\x72\x28\xb9\x62\xee\x98\xa4\xc2\x85\x20\xdc\xcd\xc5\x88\x54\x0c\x50\x16\x11\x4c\x92\xad\x60\x30\x1c\xbf\xcc\xca\x17\xde\x94\x78\x95\x3a\x49\xfb\x6b\x6c\x5f\xbe\xe0\xd3\xfc\x62\x15\x7a\x64\x59\x59\x84\xd7\x15\x4b\x0e\xe4\x6c\xbb\x06\xbb\xc8\x72\x92\xf7\xd4\xc0\x1e\xb0\x1f\x04\x78\xa2\xc0\xf6\x14\x5a\x72\x6a\x62\x64\x29\x66\x23\xe5\x0a\x17\x87\x97\x5f\xd0\x3b\x9b\xb2\x82\x82\x87\x44\xf4\x0e\xd3\x08\xae\xd8\xea\x89\xc6\x3d\x6f\x4f\x88\x05\x6f\xc1\x34\x87\xc3\x5e\xce\x0a\x6f\x7c\xbc\x7e\x04\x70\x71\x4f\x0e\x9e\x2c\xe7\x62\x44\x5e\x4b\x63\xff\x73\xf6\x9e\x6b\x67\xc3\x9c\x4a\xa6\x5f\x4b\x03\x9f\xec\x3d\x3f\xe0\x54\x3d\x14\x6e\x70\xde\x7f\x0e\x35\x6b\x70\x0c\x83\xa1\x0e\x53\xe2\x57\xdd\x63\x2e\x07\xce\xe1\x9a\x9c\x43\x5b\x5d\x5c\xaa\xa2\x04\x41\xc1\xa4\xc7\x9f\xb6\xe4\x78\x7f\x9d\x90\x62\xec\x0b\xbb\x37\xe9\x71\xdc\x22\xd5\x80\x59\xee\x89\x34\x47\x16\x44\x21\xf0\x1b\x68\x3c\xd2\x36\xb4\x62\xb5\xef\x6b\x40\xed\xac\x52\xc3\xe6\x89\xa5\xc9\x1f\xba\x96\x4c\xcd\x21\xc0\x52\x65\xf4\x3a\xda\xbc\x4a\x2b\x66\x78\x15\x55\xcf\xf0\xba\x93\x4d\x7c\x27\x40\x27\xf7\x3e\x04\xe8\xfd\xdf\xdb\x63\xf6\x2e\xac\x8a\x62\x92\x28\x22\x13\xb5\xdf\x25\x6d\xad\x14\xfa\x7f\x56\xc9\x85\x0d\xf7\x3f\xa4\xa5\x5c\xe9\x09\x39\xf6\x9d\x20\xe2\xef\x9c\x1f\x29\x7a\x4c\x31\xc2\x5a\x28\x95\xfc\xb5\xe3\xd7\xb4\x71\xb8\xc6\x54\x10\x86\x5d\x35\x2c\x8d\xeb\xa6\xd5\x88\xdc\x2c\xa4\x46\x8d\x39\xa0\x62\x1c\x5c\xb1\xd5\xc1\xa8\x80\x3f\xd5\x5f\xb1\xe4\x3b\x38\x17\x07\x7d\xcc\x71\x20\x9f\x82\xdd\x00\x65\x81\x07\xf0\xdd\xc1\x7d\xd9\x74\x05\xf5\x7a\x5a\xd7\x1c\x01\xa8\x2f\x8a\xab\xbb\x45\xc5\x47\x79\x40\x8a\xfe\xca\x85\x91\xc1\xeb\xee\xdc\x68\x7e\x67\x6e\x09\x3b\x4c\x57\xbe\xb3\x8b\x73\x59\x6d\x7a\xb4\x0a\x10\x02\x3e\xb1\xc8\x7f\x66\xb7\xc4\xc0\x09\x59\xca\x8d\x54\x84\x59\x3c\xa4\xfa\x3e\x2e\xa9\xd5\xaf\x54\xc7\x46\xa4\x96\xe2\x89\x71\x21\x84\xb8\x2f\xd3\x7a\x07\x88\x7a\xcb\xaa\x1f\xea\xa3\x02\xa4\x50\xc5\xa0\x51\x85\xef\x49\xe5\xfc\x9d\xd8\xb9\x09\x62\x55\x00\x29\xee\xeb\xce\xb6\x11\x92\x8b\x2d\xe4\x08\x71\x08\x43\x42\xc2\x29\x00\x3d\x6a\x63\x62\x7a\xc6\x8b\x48\x1a\xc6\xbf\x0a\x50\xf1\x31\xf6\x86\xb3\xb3\xc7\x41\x42\xd7\xed\xdf\x99\x92\x05\xc6\xdd\xe2\x20\x2f\xb5\x9b\x72\xf2\x1a\xfb\x2b\x07\x5f\xa1\xbf\x06\x5b\xe9\x0d\x18\xc3\xd7\x2e\x79\x09\x9a\x8e\x45\x70\xcd\x4a\x22\x23\x40\x46\x29\x7c\x31\x85\x79\xd9\x2b\x21\xd3\xb3\xcb\x3e\x8a\x99\x5b\x06\x60\xa2\xe8\x71\x09\x3d\xe5\x37\xa2\x2a\x6f\x17\xac\x8f\x0c\xcb\x19\x50\xe9\x03\xe5\x77\xb3\xa1\x02\x80\x70\x27\x10\x4b\x17\x73\xf8\xca\x05\x64\x8b\xb1\x16\xe6\xb8\xbe\xa2\x6d\xc1\x4c\x93\xf0\x4c\x28\xd7\x55\x4b\x14\x9a\x74\x2a\x3b\xe3\x51\x94\xdd\xf7\x35\x35\x14\x5a\x47\x61\xde\xc4\x7e\x84\x70\xcb\xf9\x61\x0b\x99\xc8\xe5\xb7\x2b\x66\x40\x0f\x2b\x0e\x46\x84\xd1\x6a\x61\xad\x9d\x31\xa6\xb6\x5a\x3b\xcd\x1b\x64\xa7\x76\xa1\xd0\x08\x92\xeb\x0a\x43\x89\x2d\x14\x38\xc2\x6f\x9c\x28\x5b\xdb\x27\x61\xf8\xaa\x28\xed\x0a\x3a\x9c\x79\x26\xfa\x7a\xf5\x02\x94\xf8\xf0\x88\xef\xa6\xe9\x1c\xdc\x30\x23\xe0\xad\x8a\xe6\xcb\xe7\x28\xb2\xda\xfe\x2c\x6c\xfa\x02\x54\x6c\x79\xfb\x1e\x2a\xdd\x9e\x61\x2e\x23\xbd\x13\x1b\xe3\x5b\xa5\xa6\x10\x0d\xd8\xc8\xcc\xbe\x34\xf5\xce\xfe\x08\xb0\x1d\x5a\x91\x42\xd1\x6e\xdf\x2f\xcc\x71\x4b\x58\xce\x12\x4e\xbb\x68\xe9\x35\x0b\x9d\x44\x99\x52\x52\xd9\xf7\x67\x5a\x13\x0e\xeb\xb4\xa4\xea\x8a\xd5\x41\x1b\x9f\x90\x0b\x3b\x51\xde\xb3\x57\x80\x12\xe5\xb5\x08\xdf\xa7\xd4\xbe\xba\x33\xcc\x81\xcc\x27\x93\xc9\x13\xd7\x42\x5d\xa1\x82\x8d\xe7\x90\xfd\xbc\x94\xc4\x2f\xe3\xc6\x2b\xe6\xbc\x1b\xc8\xa6\x57\xb4\xd5\xe8\x1c\xb5\x6a\x34\x84\x83\x24\xa1\x38\x23\x2e\x4b\x88\x66\xe3\x40\xf4\x57\x61\xe7\x44\xd9\x80\x63\xb9\x60\x63\x81\x54\x20\xbc\x4a\x07\x18\x0b\x06\x17\x3f\x14\x58\x74\x3c\xe4\xe4\x61\xd9\x68\x75\x41\x3f\xf3\x32\xa3\xa8\x66\xfd\xba\xab\x10\x11\x94\x2b\x70\x4d\x7e\xf0\xde\x8a\x4f\x2b\xb9\x31\x08\x0a\x5c\xc2\x1a\xf2\xd7\x1e\xd5\xdc\xac\x5f\xfb\x56\x83\xb3\x7e\x9d\xcf\xb0\x09\xf0\x50\x09\x71\xc7\x63\x5c\x56\x15\x0c\x90\xac\xf6\x8f\xeb\xd7\xee\x8a\x73\xd6\xaf\x9d\x14\xeb\xac\x5f\x25\x8a\x77\xd6\xaf\xfc\x62\x9e\xf5\xab\x8c\x3f\x05\xaf\xbb\x12\x4e\xa0\x22\x70\xdf\xa8\x37\x76\xd6\x38\x73\x03\x14\x7e\x70\x85\xb5\xd1\xc1\x50\x50\x26\x39\x75\x0e\xc5\x12\x9d\x6a\xd9\x74\x06\x49\x28\x3f\x48\xac\x33\xc2\x4b\xfa\x28\x54\x19\x45\x71\x7d\xb8\x48\x13\x05\x4b\x02\xd5\xb3\x92\x63\xdd\x5d\xe4\xa5\x74\x2c\x75\x5f\x43\x2f\xe5\xd1\xfc\xf1\xda\x0f\x4c\x7f\xbc\xf6\x02\xd9\xdf\x93\x52\x1e\xdf\x1f\xaf\x7d\x82\xe0\x1e\x5e\x45\x37\x69\x3e\xe2\xbf\xbf\xee\x28\x7a\x16\xfa\x1c\xa3\xae\xb4\x0a\x0d\x2f\x07\x0e\x0a\x40\xd6\x37\x1a\xfd\x27\x3e\x07\x08\x5b\x64\xe6\xfb\xb5\xca\x05\x45\xee\x2a\x18\xed\x11\x0d\x8e\x2f\xce\x0b\xfa\x7f\xa3\xa7\x7e\xc0\x03\x1c\xdf\xf1\xe8\x03\xfe\x94\x6b\x30\xc1\xe7\xe8\xbe\x8d\x33\xff\x4f\xfb\x19\x75\x10\x4c\x45\xd4\xed\xfd\xf7\x39\x6d\xbc\xf8\x4b\xab\x29\xc6\xed\xe0\x22\x0e\x34\xd2\x41\x48\xf4\x3a\xa5\xd3\xc5\x10\xa6\xd4\x57\xfa\xe5\x97\xa9\x92\xfd\xf7\x4f\xed\xa9\x57\x09\x66\x3f\xa3\x71\xd5\xfa\x35\xe0\x96\x27\x6f\xfc\x24\xba\x90\x25\x06\x13\xa2\xb8\x46\x2b\xeb\x17\x98\x64\x45\x85\x90\x06\x73\xa8\x47\x18\x9e\xd7\x23\x97\xa8\x10\x61\xdd\x8a\x9a\x74\xbc\xc6\x6a\xcc\x00\x5a\xf9\xe4\x9f\xab\xac\x02\x26\xf0\xa2\x0c\x3b\x91\x3b\xaa\x84\xa0\x2d\xff\x91\xa9\x9c\xb6\xda\xdb\xae\x01\x73\xb9\xe7\x7b\x4e\xd2\xd5\x82\x2d\x29\xfc\xf3\xa5\x9f\x20\x2b\xb4\x5d\x6d\x32\x04\x4b\x98\x5a\x5a\xc5\x77\x34\x40\xb9\x3a\xb8\x7e\x5e\xa0\x4e\xae\xbf\xee\x24\xad\x36\xac\xf9\x9d\x4d\xe7\xc5\xc0\xfc\xb7\x5b\x14\x3c\x94\x90\x68\xe0\x81\xa7\x43\x38\xca\x6a\x12\xd7\x38\xff\x7b\x3e\x75\x77\x99\x58\x88\xd7\x43\xf0\x46\xa7\x7a\xa1\x47\x41\x4b\x1f\x7a\x8f\x8b\x11\xf6\xe8\x85\xfe\xed\xeb\xd1\x0b\xed\xae\x47\x2f\xf4\x27\x5f\x77\xe6\x85\x8e\x54\x3a\x7f\xc2\x6e\x71\x23\xc7\x4d\xdc\xbc\x2f\xb9\x6f\xf0\x3e\xc1\x98\x94\x77\x00\x7b\xef\xaf\x54\xc3\xf0\xfe\x93\xc9\xe4\x09\x06\xf8\x27\x21\x88\xd5\x99\xd9\xf8\x8f\x84\x89\x4a\xd6\xf6\x39\x6f\xe1\xf9\x4a\x1b\x30\x77\x7a\x8f\x5e\x4c\xcb\xd2\x8f\x15\xa7\x08\xc0\xb3\xcb\xea\x8d\x05\x8f\x2d\x8f\x8e\xf8\xf2\x2e\x95\xf3\x82\xc7\x4b\xaf\xdc\x7b\xca\xfd\x52\xb8\x05\x65\xca\x69\xf9\x3d\xee\x63\xc3\x97\xdc\x55\x29\x5a\x79\xca\xb4\x29\x55\x7c\x42\xc8\x21\x3e\x7c\x52\xb5\xdd\xc8\x0d\x34\x59\xb2\xa5\x54\xab\x51\x18\xcc\x7e\x39\x18\xdd\xdd\x71\x04\xc6\x45\xd5\x29\xc5\x84\x69\x56\x79\xd8\xf8\xdb\xae\x07\x62\x65\xf8\x95\xda\x63\x23\x23\x30\x57\x99\x3c\xdd\xfe\x1a\x4a\xbc\x13\x3f\x0c\x86\x33\xc2\x6c\xc3\x79\xef\xba\x9c\x8c\x7a\x0f\xa8\xfd\x94\x89\x6b\x72\x4d\x95\x2e\x25\x61\xc8\x5d\xd9\x15\x35\xbf\xe6\xfa\x0e\x4b\xb0\x2f\x9d\xd2\x82\xb1\x46\xd9\x99\xb6\x33\xee\xb8\xf3\x22\x82\xbd\x6f\xa5\x55\x45\x83\x68\x58\x33\xcf\x9e\xe7\xba\xbc\xe3\xab\xa5\xc6\x30\x25\x5e\x90\xff\x7b\xf8\xf3\xbf\xfc\x63\x7c\xf4\x6f\x87\x87\x7f\x7d\x36\xfe\xd7\xbf\xfd\xcb\xe1\xcf\x13\xf8\xc7\x97\x47\xff\x76\xf4\x0f\xff\xc7\xbf\x1c\x1d\x1d\x1e\xfe\xf5\xbb\x57\x7f\x79\x7b\x71\xf6\x37\x7e\xf4\x8f\xbf\x8a\x6e\x79\x85\x7f\xfd\xe3\xf0\xaf\xec\xec\x6f\x9f\xf8\x90\xa3\xa3\x7f\xfb\x5f\x05\x5f\x82\x8a\xd5\x0f\xc5\xce\x04\xbc\xc6\x77\xa2\xd7\x0c\x9f\x7d\xb7\x95\xa6\x5c\x98\xb1\x54\x63\x1c\xe4\x05\x94\xe1\x14\x1b\xca\xb3\xe6\xdd\xc9\x98\x5e\xab\x0a\x27\x68\x30\xbf\xf7\x5c\x88\xdc\xad\x85\x7d\x67\xe1\xe9\x56\xd6\x11\x88\xdb\x3e\x21\x3f\x3a\x58\x43\x1d\xb0\x15\x15\x38\x46\xc5\xdc\xea\xcf\x00\x18\x4e\x1b\x57\x33\x43\x0e\x5b\xc5\xaf\xa9\xe9\x81\x66\x22\xac\xb8\x4c\x32\xaa\x05\xe5\xe2\xa8\x87\x18\x69\x65\x0d\xe6\x55\xa7\x59\x68\x97\x6d\x55\xbe\xb7\xdf\x5f\x92\xaa\xe1\x50\xd6\xab\x42\x07\xc5\xcc\xc1\x3d\x1e\xe1\x9c\x09\xa6\x10\x64\x8f\xac\xbf\x6a\xa7\x19\x24\x23\xc3\x46\x11\x75\x62\xf7\xbf\xfe\xba\x18\x70\xc4\x1b\x54\x0b\x7d\x4f\x0c\xac\x91\xc3\x4a\x1a\x80\x30\x73\xfd\xba\x5c\x6d\x0d\x6d\x5b\x25\xaf\x59\x89\xbc\x78\xa7\x8f\xc2\x2b\x72\xad\xa1\x28\x39\x5e\x56\x5c\x98\x51\x98\x22\xa8\xa3\x1a\xa0\x0d\xe5\x2e\xfc\xfa\x58\xe4\x43\xb8\x8c\x6f\xdd\x87\xb5\x64\x3a\x32\xb1\x3a\x61\x78\x53\x8e\x08\x4d\x16\xf4\x9a\x91\x29\x63\x02\x27\x04\x35\x2f\xa8\x9f\x18\xee\xe2\x28\x93\x3f\x0b\x43\xdf\x5f\x4e\x12\x73\x01\x51\x6b\x40\x58\x2d\xc5\xd8\xce\x57\x33\xb7\xb3\xab\x56\x10\x0f\x93\x04\x36\x3a\xf2\x55\xbc\x08\x6e\x03\x1a\xbe\xb4\xb4\xd4\x58\xd3\x94\x49\x87\x03\x55\x75\xec\xeb\x1b\x07\xb2\xed\x9b\x60\x72\x69\xa8\xe9\xf4\xe4\x5b\x4b\xef\x1b\x36\x53\x4c\x2f\x8e\x73\x8d\x17\xfb\x3a\xda\xd0\x65\x5b\x6c\x4e\xad\x74\xc2\xaa\xc2\x50\x53\x8d\x4e\xcc\x30\x69\xfe\xb5\x7b\x41\xea\x90\x64\xf3\xa3\x29\xe0\x33\x1f\xa1\x08\x6c\xa9\x95\x59\xb8\x57\xb6\x8c\x7e\xc5\x56\xe0\x3b\x29\xba\x55\x4f\xec\x4e\x85\xc7\x22\x5c\x73\xf6\xac\xbe\x1d\xcc\x93\x3f\x70\x10\x64\xad\x9f\x5c\xbb\x39\x00\x95\x15\x74\x7a\x27\x13\xd0\x25\x73\x71\xf6\x2a\x93\x04\x87\x38\xee\x1a\x5c\x46\xe2\xff\xd0\x8e\xfa\xdd\xc9\xe5\x17\x7f\x74\x03\x1f\xc5\x9e\xc0\xa5\x8b\x30\x97\x21\x80\x3b\x84\xd7\xf5\x5d\x89\xa2\xd1\x09\xa4\xe1\x76\x3a\x34\xab\x96\x57\xb4\x69\x56\xb9\x25\x39\xf8\x40\x57\x6c\xa4\x98\xe9\x14\x38\xc7\xb8\xda\x46\x8a\x20\x0d\xa3\xb3\x31\x68\x0c\xd2\x20\x64\xeb\x51\x36\x1f\x5c\x40\x82\x5c\x24\x22\x36\x99\x02\xd7\x60\x64\xf9\xa2\x62\x64\x25\x3b\x87\x43\x56\x61\x1e\x40\x25\xeb\x6c\x65\x84\x0a\xe8\x51\x63\xcf\x7b\x54\xfd\xec\xec\x62\x19\xf9\x4a\x76\xa0\x94\x44\xdb\x6a\xeb\xc6\xc8\x5d\x8b\x8d\xf7\x02\xcf\xe2\x92\x5e\x31\x62\x6e\xe4\x70\xdb\x03\xb1\x01\x00\x4a\x33\x52\x49\x2e\x2a\x9e\x3d\x0f\x98\xa8\x37\x58\x7c\xe5\xc2\xe6\x23\x57\x98\xd5\x4a\xad\xf9\xb4\x61\x91\xe6\xb6\xa6\x38\x59\x2e\x29\xa8\x23\xd8\xf9\x87\xb5\xe9\x8b\xb4\x94\x62\xba\x95\x02\xe2\x4b\x70\x4e\x83\x43\x7e\x42\xc8\x7f\xae\xcd\x61\xf6\x74\x34\x0d\x11\x0c\x03\x59\xd5\x82\x55\x57\xae\x55\x1a\xd7\xa4\x92\x02\xc1\x4f\x46\xce\xcd\x37\x06\x22\x41\x39\xb1\xd3\xb2\x2a\x90\xdc\x58\x49\xe1\x1a\xed\x15\x11\xb7\xb1\x92\x09\xde\x2d\x25\x1b\x4d\xaa\x85\x94\xda\x69\x78\x43\xd7\x49\xbc\x0a\x3c\xf7\x3c\x46\x5d\xf3\x7f\xc3\x3b\x75\x8d\x89\xe5\x19\x5f\xb6\x98\x32\x0d\x6b\xf6\x44\x93\x5a\x56\x5d\xf8\xdb\xce\x7d\xc3\xa8\x12\x64\x21\x6f\x88\xc9\x45\x4d\xb0\x5b\x79\xed\xe5\x5c\xcd\xa1\xce\x46\xd2\xdb\x43\xe0\xe9\x2b\xb6\x7a\x9b\xda\xbe\x2f\x7e\x4e\x8f\x58\xb0\x27\xa9\x78\xdb\x44\xf0\x3e\xe6\x82\xff\x14\x70\x28\x36\x8f\x54\x10\xa0\x56\xa6\x42\xa8\xcb\x95\x10\xac\xd9\x18\xd9\x3b\x9f\x40\x1e\xb3\xb5\xf8\x7a\xb9\xa8\x89\x5e\xc8\xae\x01\x23\x77\xab\xb6\x3a\x21\xe4\xa7\x05\x13\xee\x58\x76\x47\x5f\x89\x54\xed\x0f\x1d\x9e\x9b\xc7\x9f\x95\xbb\xba\x17\xbc\xe1\xb8\x29\x53\x89\xe9\x0f\xaa\xa1\x25\xa4\x58\x24\x73\x47\x64\xca\x2a\x6a\x67\x68\xfd\xe4\x93\x78\x20\x95\x29\x52\xc7\xf6\x57\x4b\x5e\x8f\xfd\x51\xbb\x37\x78\x12\xf6\xda\xc6\x1d\x7b\xbe\xcf\x36\x14\xc8\x7b\xdb\x67\x9f\x68\xd4\x0c\xc1\xa3\x97\x5d\x63\x78\xdb\x60\xd3\x0b\xc0\x74\x2a\x92\xdd\x31\xb0\x94\x1c\x56\x14\x50\x72\xf1\xe6\xfc\xc7\xe3\xb7\x67\xe4\xbb\xb3\xff\xc4\x8f\x47\x71\xde\x2c\xf5\x96\x8f\x53\xeb\x0a\x50\x72\xc5\x56\xc5\x66\xb7\x37\xbf\x70\xa6\x60\xcf\x9e\x9c\xbd\x79\x7b\xfe\xf2\xfc\xc4\xbe\x15\x7e\x3c\x5a\x4f\x05\x46\x43\xaa\x00\x11\x9b\x52\x3c\x20\x10\x79\xf3\x0c\xe4\x0a\x62\x80\xaf\x10\x86\x7f\xc9\x6a\x6e\x15\x8d\x7c\x73\xc9\x5e\xef\xf4\xd0\x5b\xdb\x6f\x4c\x02\x9d\x84\x41\x94\x5e\xc8\xfa\x89\xde\xb0\x93\xd0\x9e\xf0\xdc\x58\x42\x8e\x82\xb5\xe4\xe5\x21\x35\xd6\x8a\x54\x9c\x5d\xa3\x5b\x31\xc8\xd2\x6d\x0e\x64\x9c\xbe\x60\x64\x95\xc9\x5e\xfe\x6f\x97\x1a\xb4\x44\xbf\xed\xd0\x55\xb2\xd5\x74\x1c\x68\xf9\x25\x66\x24\x80\x22\x36\xab\xf5\xb3\x6b\xe3\xc4\xb9\xa1\xda\xdb\xf8\xce\x0b\x0a\x9b\x25\x97\x86\x82\xf2\xdf\x9d\xfd\xfb\x2d\xf2\x81\xbb\x1e\x95\xa9\x47\x65\x6a\xcf\x95\x29\x67\x8d\xed\xe3\x66\xb2\x87\x2b\x14\x6b\xca\x99\x25\x13\xf0\xa2\x06\xd1\x04\x1f\x2b\x0b\xdd\xe2\x5b\x59\x17\xd9\x4f\x88\x37\x1f\x00\x72\x19\x39\x78\x73\x79\xfc\xf5\xb3\x3f\x7c\x75\x30\x82\x7f\x7e\xf3\xec\x5f\x7f\x6f\xff\x79\x76\x72\x7a\x79\x7c\xf1\xd5\xef\xa2\x3f\xbe\xfe\xe3\x37\x07\x25\x60\x89\xdc\xe3\x7e\xf7\xd5\x73\x07\xd9\x7b\x70\x76\xfa\xd5\xef\x7e\xf7\xfc\x5f\x8b\xb5\xb8\x29\xc2\x3e\x4b\xfa\xfe\xec\x7d\xcb\xb1\x6d\xff\x25\xab\xa4\xa8\xf7\x12\x91\x6c\x1b\x9d\xde\xcf\xbe\xa4\xef\xf9\xb2\x5b\x92\x86\xcf\x18\x84\x9c\x20\x39\xdc\x18\x17\x76\x2b\x23\x06\x22\x39\x54\x84\x45\x43\x08\x48\xb6\x98\x6c\xc4\x5d\xcf\x17\x72\xcd\xd4\x94\x1a\xbe\xec\xb1\xbd\xb6\x86\xb8\x74\xbe\x03\xcd\x5e\x7d\xbc\x3a\xf8\x21\xfb\x46\xaa\x45\xde\xf4\x7c\x46\x24\x2e\xc7\x88\x5c\x75\x53\x36\xa6\x2d\xc7\xa0\x3b\x4a\x01\xcd\x8c\x0b\x8a\xff\xf1\xf7\xdf\x3c\x7b\x76\xf8\xd5\x37\x64\x21\x3b\xa5\x8f\x26\x6b\xb7\x17\xa0\xc5\x45\x25\x40\xa5\x73\xe2\x41\x2f\xa4\x32\x50\xf7\x4b\x05\xf9\xfa\xf7\xcf\x9e\x91\xc3\xe7\x40\xc0\x91\x8b\x0d\x79\xf6\x82\xf2\x74\x3a\x2d\xa2\xe3\xe2\x4a\x73\x4d\xfe\xf0\xc7\xdf\x7f\xf5\x8d\x1d\xf3\x5f\x9f\x93\x9a\xae\x0a\xa9\xf3\x6f\x3f\xe4\x09\x75\x5b\xc6\x5a\x18\x0c\x0e\x4a\xd0\x14\xd7\xfc\xf3\xae\xb6\xbe\xc4\x31\x1e\xb6\xe4\x97\x6e\x9a\xbf\xc4\x79\x7e\xb5\x65\x3b\x23\xd0\x80\x90\x9b\x2b\x52\x80\x10\xed\x44\xc6\x60\x6d\xd1\xe7\xae\x8d\xa2\x1c\xa1\xfc\x98\x98\x49\x55\x61\x74\x6c\xc8\x7b\x25\xcc\xe7\x5f\x06\x85\xfe\xbf\x0c\x43\x65\x82\xd9\x0d\x81\xcb\xb1\xd1\x3e\x11\x0a\x79\x71\x26\x4b\x2c\x8a\x14\x73\x3f\xbd\x7e\xb3\x95\x3a\x94\x4a\xa5\xe3\x95\x2c\x30\xb8\x33\x68\x5c\x27\xc3\x9f\xe8\x20\x45\x6b\x72\x72\xf9\xa6\x87\x77\xa5\x75\xad\x98\xd6\xde\x14\x0b\xc8\xb6\x7b\xa5\x02\x74\x9a\xa9\xe3\xbe\x96\x75\x1f\x4f\xff\x35\x12\x51\x14\x43\x22\x0f\xed\xcc\x42\x2a\xb0\x43\x5a\xaa\x75\x64\x2a\xaf\x15\x76\x17\xa0\xe2\x83\xf1\xa5\x09\x1e\xe7\xb8\xb5\xfb\xdc\x22\xc5\xec\xfa\x54\x90\x65\x76\x6d\x35\x52\x4c\x95\x29\x82\x95\xb2\x64\x86\x02\x32\x02\x74\x34\x5e\x91\x1b\x5a\xcc\x21\xa6\x59\xac\x39\x83\x7e\x52\x6f\x51\x4a\x7e\x81\xec\xa2\x4e\x5c\x33\x05\x45\x5e\xef\x86\x6b\xf4\x4b\x28\x9b\x2e\x34\xf3\xdb\x93\xdd\x7c\x9b\x63\x30\x3f\x83\x4e\x05\x55\x3b\xf9\x09\x25\xf6\x3a\x8b\x12\x2a\x74\x87\xad\x0d\x3c\xe4\x2a\x5d\x32\xbf\xb0\x80\x5f\xa1\x7d\xef\x83\xb0\x3a\x71\x8d\x78\x11\xf5\xc5\x61\x34\x79\x36\x77\xe5\x6b\x4d\xb3\x86\x50\x22\x97\x94\x8b\x71\xab\xd8\x8c\xbf\x67\xf5\x84\xbc\x96\x81\x1b\x2d\x2d\x25\x0c\x74\xc5\x88\xeb\x7a\x24\x45\xa8\x36\x64\xef\x2b\xd6\x1a\xa8\xbd\xbc\x66\x0a\x80\xb4\xf9\xdf\x19\x56\xb4\x38\x6c\x7c\x74\xa3\x30\x61\xb8\x72\x75\xbb\x45\xd6\xe9\xd2\x1d\xa6\xce\x71\xe2\xe3\xbd\xde\x25\xa1\xa3\xa6\x86\x18\x4b\x77\x65\x32\x93\xb5\x5f\x16\x20\xa5\x66\x62\x15\x8a\x74\x06\x9e\x79\xa4\x04\x86\xaf\xa5\x93\x11\x95\x9c\x0b\xfe\xf7\x62\x60\xf2\x85\xca\x74\xee\xaa\x0f\x4b\xa1\x73\x4b\xb3\x4a\x31\x53\x30\x07\x1a\x1f\xf8\x01\x38\x1a\xf7\xe5\x23\x12\xcd\xa7\x5c\x9f\x3f\x1a\xf9\x25\xb2\xc3\x23\x14\x39\x79\xf8\x50\xe4\xb8\x96\x8f\x38\xe4\x8f\x38\xe4\x8f\x38\xe4\xd9\x4f\xda\x53\xc4\xa8\x47\x1c\x72\x7f\x3d\x04\xe4\x97\x47\x1c\xf2\x4f\xb8\x1e\x11\x60\x3e\x7a\x3d\x22\xc0\x0c\xae\x7f\x72\x04\x98\x47\x1c\xf2\xc4\x41\x1e\x71\xc8\x3f\x76\x3d\xe2\x90\x3f\xe2\x90\x3f\xe2\x90\x3f\xe2\x90\x27\xd0\xb4\x0d\x87\x1c\x99\x7f\x1b\x1a\xb9\xf3\x37\xf5\x50\xe4\xff\x84\x48\xe4\xda\xb2\x5f\xc5\x8e\xab\x4a\x76\xc2\xbc\x95\x57\x2c\x13\xa7\x75\xcd\xfb\xbb\xf1\x74\x2b\x86\x3e\xe4\x0d\xde\xbc\x79\x2f\x5d\xc3\xe5\x4a\xbe\xb2\x0d\xfb\x72\x26\x3d\xed\x6a\xce\x44\x09\x64\x9b\xf2\x87\xa3\xa7\xcd\x6b\x88\x56\xe3\x16\x35\xab\xfb\x2f\xdc\xc9\x69\x2c\xd3\x4c\xc8\x31\x51\xac\xe2\x2d\x22\x91\xcc\x08\xc5\xcf\x4b\x44\x87\xad\x7c\xe0\x90\x35\x3c\x5b\x59\xa9\xc1\x9a\x59\x38\xaa\xdc\xe7\x9c\xa9\xc8\x47\xea\xb4\xbc\x35\x42\x4b\x38\xbf\xec\x2b\xa1\xcd\x03\x16\xce\x0d\xd7\xcc\x07\xe9\x5c\x22\x56\x34\x23\x6f\x63\x1a\x62\x50\xad\x32\xc4\x44\xaf\xee\x56\xa2\x60\x82\x4f\xc1\x73\x8b\x3d\x84\x94\xcc\x0d\x22\x7b\xc3\x08\x42\x9f\xac\x26\x75\xa7\x7c\x47\x74\x0c\x94\x5b\x1d\xcd\xc3\x5f\xa3\x18\x2d\xb1\xed\x50\x12\x87\x5d\xa5\x7b\x8e\x42\x98\x1b\x5a\x2d\x98\x8e\xe8\x45\x6f\xc4\x95\xcb\x16\x28\x02\xbc\x62\xaf\xb6\xe9\xe6\x5c\xa0\x4b\x03\x46\xf5\x1a\x6c\x0f\x92\xe2\x5e\x7a\x9d\xe4\xb7\x11\x39\xf6\xe7\x25\x12\xde\xc0\x98\xda\x8a\xd4\x82\x33\xc3\x67\xf1\x1f\x9a\xc8\xa6\xf6\x49\x61\x7f\x7c\x46\x5a\xa6\x2a\x14\x4b\x45\x02\x78\x1a\xb1\x60\x8c\x24\x8d\xb5\x98\xad\x2a\xf3\xe1\xe1\x43\x4e\xda\x69\x24\x00\x30\x6f\xaf\x50\x65\x41\xc0\x88\x36\xa4\x61\x54\x1b\xf2\xfc\x19\x59\x72\xd1\x99\x72\xbd\xee\xef\x20\x11\xee\xf7\xdf\x64\x3e\xed\x0e\x3a\xe7\x17\x91\x24\xb1\x57\x05\xfe\x1d\x5c\x2b\x2e\xa2\xb8\x84\xcd\xd2\x4a\x2e\xcc\xba\xa3\x25\x2a\xd0\x2a\x75\x5a\x41\x24\x73\x2f\xce\x83\xc2\x2e\x86\x5f\x3b\x39\x5d\xa5\x41\xc7\x95\x58\x74\x37\x7c\xdc\x7c\x85\x92\xff\x70\x1f\xe2\x12\xbb\xec\xa0\x85\x35\x7a\xc1\x2f\xab\x17\x54\x21\x96\x1a\x14\x1f\xfa\x2c\xd8\xb4\xd5\x39\xb5\x03\x03\xb0\xd1\x8b\x30\x2e\xd7\xa4\x0e\x1f\x07\xd7\x2c\x17\x63\xa3\x18\x0b\x24\x83\xad\x0f\x11\x64\x9f\x3d\x9b\x85\xb2\x9b\xa9\xe2\xe7\x29\xf6\x63\xa2\xd8\x9c\x6b\xa3\xd2\xc2\x7e\xe3\xf4\x03\x33\xd7\x0a\x98\x2b\xd9\xb5\xa9\x02\xac\x94\xd8\x02\x22\xbc\x8b\xd7\x27\x7a\x54\x15\xd3\x3a\x27\xcb\xd4\x1d\x75\x8e\xc7\x60\x8c\xc4\x67\x65\x8b\x1d\xc5\x68\xfd\x83\x68\x92\x63\xa6\xa5\x26\xda\xd3\x81\xfe\x34\xd0\xaa\x20\x3b\x1f\x36\xa8\xdf\xbe\x6e\x01\xd0\x55\x07\x32\x84\xd5\x68\xe9\xd8\x9f\x8f\x01\xc2\x3b\x8a\x14\xa6\x4b\xf5\x58\x17\x99\xd1\x46\x27\xc7\x19\xf3\x7d\x2d\x7e\xfb\xee\x7e\x81\x90\x8e\xa1\x40\x77\xa8\x04\x52\xf5\x28\x04\x7e\xb1\xde\xf8\x1f\x38\x35\x38\xdd\x57\xd8\x1b\xae\x34\xca\xe4\xa0\x1a\x4e\x8e\x17\x56\x30\x63\x42\xd8\x61\xa0\x21\x06\x46\xf3\x45\xdc\x8e\x53\x2a\xb9\x5c\x52\x7d\x94\x4c\x0c\xe6\x17\x51\x00\x40\xd5\x0e\x97\x45\x18\x45\x9b\x7e\x86\x22\xe0\xed\x5d\x6d\x6b\xc3\x04\x15\xc9\x29\x93\xa5\x78\x06\xa9\x20\xf2\x26\xc0\x28\xcc\xf9\x35\x13\xeb\xfb\xd9\xb9\x23\xbe\xa5\xd5\x15\xcb\xc0\x1c\x7c\xa7\xfd\x1a\xd7\x2b\x41\x1d\x06\x9b\x3d\x86\xae\xb9\x15\x07\xac\x5e\x1b\x57\x8f\xfa\xca\x2c\xcd\x8c\x07\xc9\x43\xc3\x6e\x57\x0b\xd7\x69\x96\x0c\x77\x5e\x6a\xd9\x2c\x0d\x77\x75\xe6\x69\xcc\xe8\x50\xfc\xba\x62\xde\x2e\xb6\xe3\xed\x6a\xbe\xf1\xfd\x8a\xcc\xb8\xe7\xe6\x48\x46\x39\x44\x0b\x97\x8e\x8a\x90\xc9\x8d\x3d\xab\x56\xbe\xd9\xc8\xfa\x5e\x98\xae\x20\x1a\x98\x77\xde\x24\xce\x87\x9a\x26\x29\x99\x25\xd8\x4e\x4d\xeb\xe1\xc1\xf2\x86\xd6\x52\x93\x6f\x01\x75\xe6\x94\x81\x1b\xe5\xbe\x8d\x86\x37\xdf\x9e\xfe\x86\xc1\x60\xa9\xfe\xbc\x8c\x05\xbe\xa4\xf3\x34\xd3\x7a\x4c\x96\x52\x70\x23\x55\xca\x99\x97\x6b\x2b\xcc\x74\x0e\x2c\x42\x29\xb9\x89\x54\x78\xdf\x46\x0f\x45\x1d\x70\x11\xa2\xb4\x28\x60\xdd\x95\xec\xc8\x0d\x05\xcf\x20\x72\x77\xba\xc6\xfa\x96\xb7\x2f\xc8\x99\xd0\x9d\x8a\x90\x35\xd7\x49\xb0\x07\x9d\x67\x4e\x7f\xdc\xc1\x46\xb2\xb3\x8f\x18\xee\x0e\x3c\x3b\x99\x8e\xb3\xf7\x74\xd9\x36\x4c\xbf\x20\x07\xec\xbd\xf9\xe6\x60\x44\x0e\xde\xcf\xb4\xfd\x8f\x30\x33\x7d\x30\x21\xe7\xcb\xb6\xe1\x15\x37\xcd\x8a\x70\x31\x63\x4a\x85\xd8\x3b\xfe\x60\x2d\xf5\x3f\x9d\x92\x5b\xc6\xbc\xb5\x91\x8a\xce\xd9\x53\xa7\x1b\x7c\xa1\xa6\xa9\x9a\x48\xf6\x99\x04\x9b\x70\xd7\xcc\x0c\x44\x04\x27\x3f\x48\x63\xfc\x28\xe7\x78\xda\xba\x2a\xcc\xb1\xcc\xe4\xea\x8f\xb0\x2e\x6e\x05\x9e\xaa\x69\xfd\xf4\xcd\xd9\xf1\xe9\xab\xb3\xc9\xb2\xfe\x62\x21\x6f\xc6\x46\x8e\x3b\xcd\xc6\xc9\x50\x08\xd9\x2b\x73\xc5\x56\xd0\xbf\x63\xc7\x6b\xe3\xc8\x18\x78\x51\x8d\x84\x64\x01\xf8\xdc\x1a\x20\x6f\xbe\x3d\x7d\xa7\x73\x22\x5d\x91\x93\xe2\x29\x33\xd5\xd3\x8a\xb5\x8b\xa7\x6e\xe4\x7f\xd6\xf5\x8f\x52\x4c\x36\xe6\x24\xe9\x81\xfe\xcc\xdc\x35\x47\x79\x3a\x50\x7b\xad\x64\xd3\x20\x26\x88\x3d\xb5\x4e\x58\xbb\x08\x37\x3c\xe8\x95\xcf\x29\x53\xc9\x2c\x4e\xd9\xbf\xf8\x00\x81\x2e\x33\x32\x39\xc5\xa9\x14\xeb\x59\x1a\x86\xe7\x0c\x7c\x92\x77\xcc\x44\xc2\x4b\x4d\xcb\x2a\x11\x0f\x53\x5c\xa5\xaa\x33\x0f\xc2\x3f\xfc\xc6\x7f\xa9\x99\x01\x2d\x96\x0b\x82\xfd\xff\x5f\x59\xad\x7a\x1f\x1c\xc1\x7b\xc1\x4a\x39\x7e\x68\x2c\x8b\xce\xe8\xf6\x59\x8a\x13\x02\x21\x60\x75\x47\x19\xca\xb4\x33\x0b\x26\x8c\x87\x2c\x74\x75\xdc\xb1\x2e\x44\xce\x67\xe8\x0f\xac\x33\xd2\x28\xe5\x35\x53\x8a\xd7\x4c\x93\x6c\x65\x28\x8e\x03\xf1\xe6\x41\xb3\x56\x56\x06\x63\x89\x84\xc1\xdc\x1c\xfa\x92\x89\x0e\xe5\xf3\xe6\xf7\x23\x63\x7e\x2f\x72\xe5\xef\x22\x4b\x7e\x1f\xf3\xe3\x0b\x65\x18\xe6\xe7\xc4\x97\xcf\xf2\xde\x9b\x20\xc7\x40\xed\x84\x4f\x8a\xa9\x9d\xb4\x5e\xf2\x0c\xf0\xd8\x3d\x10\xe9\x65\x14\x4f\x98\x87\x5b\x3f\x44\x57\xb4\x61\xe7\x3f\xec\x2a\x1c\xe1\x86\x1f\x86\x24\x2e\xdd\x87\x2d\x53\x1e\x95\xdc\x47\xc7\x8c\xa1\xd5\xc2\x05\x08\x7c\x5e\x82\x14\x31\x4e\x98\x90\x75\x6a\xba\x61\x1c\x93\xf0\x34\x7c\x3c\x2e\xe1\xc9\xff\xbc\x62\x13\x73\x6a\xd8\x4d\xa2\xfd\x3e\xee\xd5\xc6\xd4\xdf\x83\x63\xfc\x31\xb6\xb1\x35\xb0\x90\x1f\xbf\x08\xe5\xf7\x1b\xcf\xbe\xfb\x88\xc5\xe4\x03\xb1\x8a\x12\xc7\x00\x3c\x71\x27\xd1\x5c\xbc\x82\x1c\x7e\x3f\x4b\x53\x46\xdc\xae\x2b\xc2\x7f\xee\x59\x9e\x8b\x60\x21\x1d\x6a\xa6\x57\x97\xbd\x80\x3b\xbe\x38\x27\x7f\xc1\xdb\x77\x36\x7b\xad\x92\x06\xdd\xa0\xa7\x00\xb1\x57\x64\x0e\xd6\x1f\xea\x27\x23\xb6\x64\xfd\x24\x5c\x84\x7b\x89\xbb\xd9\x63\xa7\x57\x52\xcc\xf8\xbc\x53\xac\x26\x2e\x70\xb5\xb3\x59\xda\x3b\x0f\xd1\x86\xcf\x86\x1c\xda\xef\x9e\x42\xef\xd5\xa3\x49\xef\x2d\x5a\x73\x25\xa5\xfb\x76\xef\xd0\x05\xf5\x59\x3a\x6e\xa2\x8c\x18\x8f\x22\xd6\x3b\x6b\x3c\xf3\x83\x3a\x1e\x2a\xc9\x32\x46\x15\x9a\x43\x79\x41\x54\xe0\xe9\x3a\x5f\x72\xdd\x03\x85\xa1\x57\x68\x44\xbe\x97\x73\x2e\xfc\xf1\x22\x5d\x81\xcf\x8c\xa6\xbb\x67\x1e\xfd\x23\x1b\xd7\xa3\x7f\xe4\xd1\x3f\xf2\xe8\x1f\xf9\xf0\xa5\x75\x73\x26\xe8\xb4\x49\xaf\xe6\x1e\x16\xbc\x87\xc7\x91\x97\x0d\x9d\x13\x06\x7f\x3c\xad\xb9\xb6\xff\x25\x97\x97\xdf\x43\x56\x74\x27\xbc\xeb\x1c\x78\xd3\x69\x5f\x23\x3f\x43\x78\x96\xee\xee\x18\x43\x35\xe7\x55\x06\xa8\x59\xb1\x83\xac\x27\x25\x74\x4f\xd7\x03\x10\x07\x77\x07\x9c\x67\x34\x00\x45\x62\x1d\xf4\x94\x59\x69\x55\x5d\x5d\x44\x89\xc9\x52\xd9\xcf\x44\xf4\x51\x11\xe3\xa3\xd0\x33\x4b\x9a\x21\x6b\x24\xe5\xb0\xc2\x45\xa9\xe0\x75\xf4\x3c\xaf\x8d\x7b\x25\xe4\xd2\x2d\x24\x7c\x47\xb5\x96\x15\xef\x4b\x09\x5c\x87\x30\xaf\xa2\x23\x0e\xf7\xce\x26\x19\xed\xe0\x32\x13\x82\xe6\xf7\x16\xcb\xc4\x33\xb6\xbb\x83\xea\xd8\x12\xe1\xc2\xcf\xdb\xce\x26\x01\xb7\x5a\x4e\xf7\x87\x52\x42\xa2\xa7\x64\x7d\x1e\x83\x40\x58\x4f\x05\xf7\x28\xb5\x8e\xf7\x92\x3d\x4e\x78\x41\x16\x28\xd7\x5b\xb8\x96\xeb\x20\x92\x64\xa7\xaa\xdd\x98\x8e\xe9\xa0\xde\x45\x1c\xbc\x68\x6f\x0c\x6b\x99\xf0\x33\x97\x54\x0e\xb2\xba\x95\x6d\xd7\xf8\x46\x0e\x59\x20\xb1\x99\xd9\xa8\x48\xdb\xfd\xfb\x6c\x73\x2d\x8f\x08\xfd\x71\xd7\x1b\x32\x06\xa2\xbc\x3d\xe2\xa8\xdf\xa3\xd8\x20\x70\xba\xf2\x8f\x2b\xe0\xf1\xdc\x3d\xe0\x68\x29\x80\xd1\x74\xef\xf2\x00\x98\x74\xe0\xc1\x79\xf6\xfb\x6f\xbe\xc9\x50\x86\xb8\x62\x95\x91\x50\x0c\xe8\xc0\x9e\x43\xc6\x2c\x55\x0c\x6c\x7f\x44\x03\xf5\xfe\x65\x2c\x06\x33\x59\x79\x1d\xbb\x43\x24\xdd\x09\x02\x69\x09\x0c\x8c\x7c\x84\xd1\xac\x04\xcd\x62\x59\xf3\xd0\xbd\xe0\x7c\xc7\xdd\x0b\x76\xda\xb3\x60\x97\x9d\x0a\x76\xd7\x9f\x60\x87\x5d\x09\x76\xdd\x8b\x60\x27\x1d\x08\x76\x9e\xd0\x7d\xff\x3d\x06\x8a\x40\x05\x96\x80\x09\xcc\xed\x22\x90\x09\x31\x58\x06\x5e\x30\xbb\x4f\xc0\x7d\x74\x07\x28\xe4\xe3\xcc\xef\x04\x50\x16\x06\x6a\xd7\xa8\xff\x7b\xa4\x7a\xe3\xb5\x9f\x08\xff\x3b\xc1\xf5\xdf\x35\x9a\xff\x0e\x31\xfc\xcb\x61\xc9\x95\xc2\xeb\xcf\xc7\x90\x2b\x2b\x38\x76\x84\xc8\x7f\x87\x38\xfc\xf7\x82\xbe\x7f\xd7\x98\xfb\xfb\x59\xdc\x96\x8b\xe1\x9d\x8d\xdc\xad\x0b\x41\x77\x97\xca\x01\xd9\x07\xb7\x78\x4f\xc9\xd6\xf0\x82\x6f\xcc\x88\xfb\x00\x00\x3d\x20\x4e\xdc\xd2\x0a\xf6\x75\x57\xb8\x02\xeb\x5e\x7c\xb0\x24\xdb\x57\x8e\x94\xc8\x24\x85\xb7\x88\xbb\x1c\x09\xf8\xe1\x72\x2d\x23\x3a\x7c\x7c\xff\x89\xd0\x61\xe8\xdf\x48\x85\xf6\x53\xb7\x67\xc9\xd0\x8f\x59\xc1\x9f\x72\xed\x63\x56\xf0\x7d\x21\x98\x7c\x7e\x89\x99\xf5\x63\x62\x66\x7c\xed\x61\x62\xa6\x67\x5a\x1d\x9f\xc6\x78\xec\x82\x69\x29\xa7\x56\x49\xf5\x60\x7e\xbd\x0c\x3e\xbe\x38\x4f\x1e\xbd\x52\x0c\x80\xfa\x69\xa3\x27\xdb\x6c\x4e\x9f\x7e\xe4\x2c\x5c\x6f\x6b\x52\x63\xd8\xb2\x4d\x14\xde\xe4\x31\x2f\x73\xdb\xf5\x98\x97\xf9\x98\x97\xf9\x98\x97\xf9\xe1\x6b\x9f\xb3\x8b\x16\xdd\x92\x8a\xb1\x3d\x4f\x21\xa9\x73\x50\x4e\xb2\xa6\xa6\x4f\x88\x3b\x01\xb3\x84\x16\xa2\xeb\x02\xe6\x72\x27\xf8\xaf\x1d\xeb\x23\x1d\xc1\x64\xdb\x83\x3c\x30\xa0\x63\x7f\x96\x0b\x2d\xd9\xb5\x73\xb6\x92\x1b\xf8\x80\x6e\x2e\xc3\xd2\xf9\xa3\x31\x6f\xc9\x60\xf0\x41\x60\xd2\x2c\x18\x1a\xdb\x17\x6b\xc6\xf6\xc0\xa7\xeb\x04\x39\xc8\xd1\xbc\xe8\x70\x6c\x09\x5a\x16\xb5\xef\xee\x9a\x96\x4c\x19\x59\x72\xa5\xa4\x72\x99\x6a\xf1\xeb\x63\xe1\x13\x9f\x2f\x0c\x53\xe8\x21\xc5\xf2\x8c\x74\xf1\x79\xc9\x8c\xdb\x05\xb0\x8b\x8c\x24\x54\x20\xf6\xaa\xfd\xb7\x07\xf9\x80\xa9\xf1\x1a\xc8\x94\x2d\xe8\x35\x97\x5d\x06\xa8\xda\x25\xea\x53\x07\xee\x91\x60\x2b\xac\x64\x17\x72\x51\x3a\x6d\x27\x23\xac\x82\xde\xe4\x83\xe4\xa1\x5f\xf7\x0f\x05\xb7\x79\x2d\x7d\x30\x7a\xcc\xde\x73\x6d\x36\xe7\xdc\xb3\x80\xcb\x7d\xda\xc9\x66\xbe\xd6\xad\x3d\x7d\x7f\x4c\x86\xe9\x2d\xb1\x85\x07\x44\x0c\x5d\x20\xd7\x97\xf0\xd5\x6f\x39\x40\x5c\xbf\x1f\x84\x2c\x27\x4b\x5a\x2d\xb8\x28\x00\x51\xfb\xe3\x80\xb0\x81\x27\x64\x42\x8e\x9b\xa6\xaf\x63\xd2\xa1\x74\xd0\x7b\x46\x86\x2f\x65\x17\x29\x89\x1c\xcb\xb9\x8a\xd5\x90\x67\x85\x2a\x16\xd4\x27\x6a\x3e\x71\x03\x4c\xae\x97\x37\x54\xb1\x49\x25\x97\xe4\xe4\xf2\x9c\xd4\x8a\x27\x76\xe0\xda\x71\xfd\x39\x2e\xf1\x45\x5a\xe8\xfa\x73\xf3\xf7\x3c\xfa\x7a\xf6\xca\xd7\x13\x4a\x18\x1a\x5e\xad\xce\x4f\xcb\x96\x45\xe0\x33\xbd\xa2\xa9\x43\x49\x84\xfd\x9c\x7c\x4b\x35\xab\xc9\x2b\x2a\xe8\x1c\x03\x56\x87\x97\x17\xdf\xbe\x3a\xb2\x0c\x0f\xc1\xb8\xf3\xd3\xad\x75\x13\x97\xf1\xc3\x5f\xef\x0a\xf1\x9c\xac\x4f\x5d\x31\xdd\x7e\xe3\xa9\x89\xd3\xb7\x33\x30\x78\x12\xd4\xd6\x8b\x8c\x20\xf0\x16\x80\xfc\x8b\xf5\xfe\x5f\x58\xa8\xe0\x9b\x35\xea\xf5\x23\xf5\x7a\x59\x5f\xdd\xf7\x04\x6c\x46\x23\xad\xfd\x78\xc5\x56\xb7\x96\xde\x63\x58\xc1\xcc\xc1\xf1\x3d\x96\xf4\xc3\x5d\x82\xa2\x4c\x99\x8f\x51\xf8\x69\x59\x73\x9f\x90\x19\x37\x58\xd7\x4b\xa3\xa8\x61\xf3\xd5\x29\x6b\x1b\xb9\xb2\x5c\x7c\x11\x25\xee\xe0\xad\x53\x54\xa5\xd5\x94\x56\x44\x75\x0d\xf4\x42\xa8\x37\x3a\x24\x0a\xc6\xea\x5e\xcc\x73\xa1\x0d\x6d\x1a\xbb\x80\xf0\xfc\x8f\x52\xf4\xc9\xca\xc1\xa7\xaa\x01\x63\xa4\xf3\x37\xef\x1a\x76\x08\x7e\xfd\x5b\xab\xfd\xe9\x8a\x00\x0c\xff\xdb\xfc\x76\x9b\x4c\xc8\x4f\xce\x79\x4c\x51\x18\x50\xa2\xbd\xe9\x1a\x7b\x40\x37\xf5\xb0\xa3\x32\x9a\x1c\x8e\x15\xb0\x5b\x03\xc8\x3f\xfb\x92\xce\x05\x28\x99\x1e\xa4\x42\x44\x3f\xff\xa4\xf1\xb1\x69\xf3\xcd\x02\x35\x50\xfb\x60\x42\xdb\xb6\xe1\x88\x32\x20\x95\x4b\xc2\x8d\xe2\xc9\x9b\xb7\x7d\x8a\xa8\xbd\xa5\x1a\x7a\x3b\xb5\x73\x4c\xae\x99\x9a\x7e\x8a\xff\xed\xb6\x1a\x25\x6d\x39\xa4\x33\x7d\xb2\x08\x4b\x55\x1a\x8f\x2f\xce\x71\xa0\x6d\x11\x7e\xff\x25\x32\x84\x5b\x6a\x9f\xd0\x83\xe5\x68\x2e\x0c\x10\x9a\x39\x1d\x5f\x9c\x63\x8f\x34\xd7\xcf\xa9\x0f\x0d\x58\x8b\x9d\x62\xf1\x65\xdf\x86\x96\xce\xed\x13\x0d\x91\x82\xdd\xa6\xa1\xa9\xa5\x80\x89\x6e\xc9\xb0\x57\x54\x20\x86\x70\x01\xe3\x04\x2a\xfa\x08\x04\x7a\x95\x27\xe4\xe0\x20\xb6\x09\x11\x9e\x45\x45\x74\x83\xa8\x3b\xf8\x72\x70\x97\x95\x6b\xfd\x8b\x7d\xea\x09\x7f\xfb\xac\xe7\x5b\x66\x39\x27\x9c\x98\x05\x32\x77\x84\x14\x6f\xdc\x7c\xbf\x7b\xf3\xfd\x9d\x33\xe8\xeb\xe1\x70\xae\x63\x0f\x83\x6e\xa3\x2d\x55\x86\xd3\x86\x74\xaa\xf1\xe9\x85\x88\x44\xe2\x2a\x02\x17\xf4\x3a\xea\x86\x34\x21\xe4\x4b\xe4\x4a\xc7\x0c\x28\xca\xc0\x29\xea\xba\x83\xcd\xba\xa6\x19\x91\x19\x17\xd4\x1e\x64\xac\x25\x51\x92\xd7\x27\x53\x7c\xc9\x45\xc5\xec\x34\x8d\x3d\x5f\x12\xa0\xdc\xbb\x8d\x82\x4c\x83\x1c\xcd\x38\xe4\x82\xa4\x58\xf9\x56\x81\x5f\x78\x26\x15\x39\x69\x3a\x6d\x98\x7a\x23\xed\x31\xdc\x97\x9b\x90\x99\x92\x4b\x42\xe3\xaf\xbf\xe5\xa2\xbe\x55\x25\xd4\x1b\x38\xda\x2b\x2a\x08\xe3\x90\x18\x65\x87\x86\x7c\x68\xcb\xec\xfd\xa6\x3a\xd4\x5d\xb5\xb0\x53\x74\xd0\xca\x5a\x1f\x58\xe9\x7c\x80\xe1\x46\x7d\x70\x64\xff\x5a\x7f\x57\xac\xde\x88\x7e\xf7\x94\xb6\xfc\xe0\x68\x44\x60\xc2\x21\x39\x4f\x7e\x7a\x36\xde\x67\xba\x8f\xfc\x84\x81\xab\x2f\x69\x17\xbd\x89\x9f\x00\x1b\x43\xf4\xa9\x6f\x37\x0b\x6e\xb0\x5e\xc7\xee\x14\x8c\x01\x84\x5e\x33\xeb\x07\x29\x21\xc7\x3e\x88\x66\xb7\xd6\x92\x51\x9f\xaf\xcb\xae\x99\x5a\x99\x85\x6b\x60\xe1\xa5\xe8\xe3\xca\xc1\xce\xc8\x5a\x35\x27\xca\xfc\x0a\xf5\xdb\x0d\x64\xc2\xc6\x0a\x3d\xf9\xf2\xc9\xfa\x91\xd4\x9f\xc1\xff\xdc\xeb\xf1\xff\xb1\x77\x65\xbd\x91\xdb\x4e\xfe\xfd\xff\x29\xb8\x46\x80\xb6\x27\x6e\xcf\x6c\x8e\x05\x36\x6f\x86\xed\x60\x8d\x78\x0e\xd8\xce\x04\xd8\x4d\x82\xd0\x12\xbb\x9b\xb0\x44\x2a\x94\x64\xbb\x27\xc8\x77\x5f\xb0\x8a\xa4\x24\x5b\x3c\xd4\xdd\xf6\x0c\xb2\xab\x17\xcf\xb4\xc4\xbb\x58\x17\xab\x7e\x04\x25\x6c\xa3\xb5\xf8\xa8\x4b\x0e\xd7\x01\x7f\x42\x61\xe2\xd8\xe1\xc5\x85\x09\x4f\xc1\x09\xff\x89\x0b\x38\xf5\x06\x7d\xc8\x62\x01\x98\x45\x1b\x5d\x29\xe8\xe1\xff\xd9\x55\x7a\x6a\x74\xa5\x1a\x4a\x81\x3e\x5a\x3b\xd3\x57\x55\xb0\x02\x63\xac\xbe\x95\xf9\xf8\x26\x1e\x10\xc9\x79\xef\x63\x17\x4b\xdc\xb9\x39\x4d\x5d\xc6\x72\x5a\x57\xa3\x56\x68\x78\x4d\x03\xeb\xe7\xeb\x49\xe7\xa7\x03\xb6\xdf\x7b\x73\xdd\x05\x46\x90\x45\x41\x97\x1d\x2d\x02\x13\x47\xcd\xfe\xe4\xea\xa3\x1d\x42\x4d\x3c\xd0\xc3\x51\xd3\x29\x66\x2c\xcd\xbb\x59\xf2\x7e\xe1\x3d\xca\x88\x5b\x4c\xae\x72\x3f\x35\xa5\xc4\x7d\x35\x41\x57\xbd\x6f\xfe\xad\x6b\x9d\xf6\x28\xc1\xde\x1c\x67\x5d\x21\x90\x6d\x02\x3a\xdc\xd5\xc7\x01\x99\x44\xfa\xeb\x21\xda\x5b\xb6\xbe\x97\x2a\x8f\x13\xec\xb1\x63\x66\xb6\x88\x35\xe6\x6d\x30\x18\xba\xe3\xe5\xe8\xc1\xce\xc6\xa4\x1a\xec\x7c\x41\x6f\x58\x11\xef\xba\xc7\x30\x78\x4b\x2b\x3d\x9c\x2e\x65\x13\x3d\x52\x26\xca\x0c\xad\x53\xcc\xf3\xb1\x19\x69\x52\x2d\xa9\xe0\x9f\x30\xcf\x35\xd3\x9c\x42\x2a\xfe\x69\x9c\xd4\xf6\xf1\x4c\x1f\x7d\x5c\x05\xcb\x9a\x03\x43\xf5\xa3\x2c\x3b\xb2\x2d\x68\x9e\x73\x54\xc1\x3e\x44\x28\x38\x3c\x5f\x5c\xdc\x4e\x59\x69\xf8\x1e\xd3\x6c\xba\x83\xbd\x67\x5c\xe6\x00\x5b\x88\xef\xdc\x70\x18\x5d\x82\x78\x6a\x55\x20\x51\x24\x58\xbe\xa4\x1c\xa5\xf6\xf8\x35\x5e\x9e\xd9\x35\xd4\x44\x8d\x6e\xad\x79\xa9\x1e\x9f\xab\xed\x05\xf6\xd5\x56\x13\xce\x4a\xca\x37\x9d\x31\x7c\xb6\x58\xb2\x92\x36\xad\xe2\xcd\xa8\xa4\x0e\x17\xe4\xe2\xa7\xf6\x86\x7d\x64\xaa\xd6\xeb\x31\xb5\xb8\x80\x8c\xb3\xe3\x0f\xe7\xa3\xd3\xb2\x1b\x89\xec\x75\x64\x80\xdf\xcc\xf4\x5c\xab\x8b\xa4\x15\xb4\xbc\xe1\xcb\x56\xb6\x75\xb1\xee\x9f\xa0\x50\x72\xcb\x45\x7e\x44\xc8\x39\xba\x55\xc5\xac\x21\x54\x48\xb1\x2e\xcd\xa7\x22\x2b\xda\x9c\x0d\x6a\xf4\x89\x32\x49\xe8\x9d\xe4\x39\xa1\x6d\x23\x4b\xda\xf0\x8c\x64\x92\xa9\x0c\x40\x54\xfb\xf5\xb7\x35\x23\x74\x50\x63\x57\x36\x6b\xeb\x46\x96\xa4\xa4\xaa\x5e\xd1\xa2\xf0\x91\xc4\x0e\xb4\x03\x70\xa7\x79\xdf\xea\x59\xf1\xbe\xbc\x0b\xcc\x43\x7c\x3b\x40\xc3\x5b\x6d\x07\xdd\xb9\xad\x2a\xb8\xf3\x13\x75\x42\x1d\x06\x01\x77\xf4\x5e\x8e\x01\x7d\x5e\xaf\x18\xa9\xda\x9b\x82\xd7\x60\xc2\x03\xe3\x5a\x93\x1b\xb6\xe2\x26\xf5\x26\xce\xb1\xbc\x4b\x1c\x9b\xe7\x10\xcb\x88\xce\x50\x80\xc3\x07\xcb\x1a\x09\x78\x5e\xd2\x65\x82\x6a\xef\xd9\xbe\x17\x9a\xed\x53\xb1\x76\xf2\x14\x2e\x53\xad\x0f\x89\x54\x26\x91\xd8\xda\x7e\xca\xbc\x72\x57\x04\x2b\xf2\xde\xcc\xa8\xc9\x8b\x36\xdb\x00\x50\x06\x98\x5a\x48\x55\xea\x79\xe7\x8a\x2c\x5a\x01\xde\x70\x8f\x5d\x08\x31\x7c\x20\x7f\x8c\x33\x93\x16\xb5\x74\xcc\x00\x96\x4d\xd8\x8e\x11\x5a\x93\x7b\x56\x14\x18\x46\x84\x37\xbf\xf6\x60\x9b\x3b\x2c\xcb\x2e\x94\xf0\x66\xdc\xb6\xcc\xf9\x92\xd5\x0d\xd9\xbf\xfa\xaf\xe3\x03\x50\x88\xc0\x59\xb7\x26\x0d\x5d\x1e\x3d\x8a\x0f\xc7\x60\x52\xad\x6e\xe5\x2d\xa8\x65\x19\x6d\x68\x21\x97\x18\x81\xa6\x59\x8a\x2e\x5f\x15\x74\x0d\x69\x5c\x15\x55\x90\x2b\x98\xa1\xc3\x92\xa8\x56\xf8\x6e\xfe\x7e\x3e\x49\x19\xe7\x49\xa1\x3b\xb5\x03\xc7\xc3\x71\x9e\x13\xb9\x27\xf8\x79\x45\xb0\x62\x05\xa3\xf5\x68\xe9\x94\xfd\x60\x8a\x3f\x8a\x84\xad\x68\x76\x4b\x97\x7a\xe5\x0d\x33\xb3\xc7\x46\x96\xa7\xb8\x74\x10\x13\x33\x0a\x0e\xc6\x60\x03\x9a\xac\x8c\x03\xf3\x5f\xa3\x1f\x1e\x5b\x87\xf7\x15\xfa\x14\x8c\xf4\x9a\xd5\xae\x0a\x47\x9f\xd6\x12\xc8\x79\xad\x3b\xd0\xf2\x7a\xe5\xb0\x20\x72\xbe\xc0\x84\x09\x72\xd3\xf2\x22\x77\x17\x1a\xd4\x70\xf8\x65\x37\x70\x48\xc8\x5c\x1b\x3c\xf2\xb6\x66\x8b\xb6\xc0\x7c\x1b\x53\xce\x30\x03\xc1\xb0\xfd\x92\xde\x32\x92\xad\xa8\x58\x76\x08\xea\xda\x20\xc4\x03\xce\x5c\x82\xbc\x77\xa8\x08\x3d\xc6\x40\x0b\xde\xac\xc7\x91\x86\x74\x73\xe6\x86\xa1\x71\x8a\x98\x43\xda\x16\x7f\x20\x54\x13\x86\x34\xe7\x18\x5c\xf5\x97\xdb\x5f\x90\xe6\xf9\x6b\x5a\x32\x91\x13\x2a\x84\x6c\x4c\x4c\xa2\x54\xc6\x8a\x0b\x14\x84\x42\xf6\xee\x23\x5d\x22\x97\x59\x5b\x32\xd1\xf8\xed\xde\xb9\x01\x60\xc9\xdb\x8c\x3d\x5d\x18\x3d\xd2\xee\x47\x26\xee\xb8\x92\x42\x57\x58\x8f\x13\xc8\x39\x80\x27\xb5\x15\xd8\x80\x76\x21\x69\xdb\xac\x60\x5d\x24\xc9\x59\xc3\x54\xc9\x05\x33\x49\x53\x25\x15\x0d\xcf\x6a\xf4\xc0\x22\x05\x99\x65\x07\x22\x07\x0e\xe7\x5d\x02\x9c\x52\x27\x42\x09\xb0\xdf\x27\xd5\x40\x5e\x79\x26\x05\xf2\x7e\x0b\xa1\x5f\xde\x31\x45\x2a\xc5\x1c\xdd\xc2\xf1\xf9\xb8\x7d\x9a\xcb\x66\x5e\xb3\x8a\xe2\x69\xa7\xd3\x1d\x95\xf3\x41\xea\x0d\x86\x87\x47\x45\xb5\xa2\x70\x30\xaa\x07\xa5\x19\xf0\x6a\x5d\xad\x98\xa8\x91\x9b\x53\xc5\x48\xc1\x4b\xee\xf3\xc8\x00\x10\x52\x49\x1f\x78\xd9\x96\xa4\x60\x62\x89\x60\x0d\xdf\xbc\xd1\x04\xac\x68\xd6\xb0\xf1\x4b\x85\x23\xdc\xab\xa4\x0f\x17\x50\xd9\x0f\xe4\x9b\x37\x23\xef\x07\xde\xc5\x3b\x5a\xf0\x1c\x49\xce\x47\xdb\xaa\x2d\x74\x73\xac\x58\x1c\x95\xb4\xc9\x56\xac\xde\x9f\xfd\xfe\x3f\x6f\xe6\xff\x79\x3c\xff\x6f\x3a\xff\x34\xff\xed\xeb\xfd\x5f\x7f\x3d\x1a\xfc\x70\xf0\xea\xab\xd9\x81\x87\x79\x96\xac\xae\x35\x73\x7e\xbc\x74\x0e\x11\x20\x93\x65\x25\x35\x3b\x91\x0b\xb2\x83\xb5\x08\x8e\x6a\xf6\x6f\x30\xae\xba\x2a\x78\xb3\x3f\x9b\x1d\xcd\x66\x07\x47\x10\xf2\x5d\xef\x3f\x1c\x92\x87\x6e\xc0\xb3\xdf\xdf\xe8\x11\xfe\xf6\xf5\x57\xb3\xd9\xc1\xc1\x2c\x36\x36\xd3\x91\x41\x8f\xb9\x18\x1f\xb2\x16\xfa\x70\x76\x5a\x30\x9a\xeb\xf1\x7c\x62\x4a\x3e\xed\xb6\x62\x55\x41\x3d\xc7\x20\x4f\xb4\xd0\x0e\x50\x57\x33\x3f\x70\x97\x4b\xc1\x5c\x1d\x47\xe4\x0a\xb5\x14\x18\x1f\xec\x91\x3f\x4a\xd6\xd0\x9c\x36\xf4\xe8\x1d\x2d\xd9\x1f\x43\xe0\x3d\x59\xe4\xba\xa2\xc9\xc4\x88\x0e\x1e\x19\xd7\x9c\x2f\x34\xab\x73\x9f\xc3\x76\xb7\xda\x60\xf0\xdc\x65\x4b\xa5\x19\x86\x7f\xf6\x50\x29\x16\x0e\x10\x1b\xf4\xf5\x71\xa1\xe1\x89\x46\x31\x1c\x89\xd1\x81\x80\x87\x1e\xc1\xd2\xf4\x7f\x01\x16\x71\xfc\xee\xd4\x7f\xc8\x17\x3f\x9e\x88\x1c\x47\xa4\x47\x02\x1c\x07\xfa\x6e\x03\x01\xcc\x9b\x61\x84\x8a\x85\x5f\x02\x70\x3f\x84\x04\xa2\xa2\x93\x07\xfa\xe3\x40\xb3\xb8\xce\x1d\x40\x58\xe7\x6a\xf4\x1f\xe1\x24\xc5\x19\xa5\x44\x17\xc5\xf0\xda\xe6\x6e\x18\xde\x8f\xd2\x82\x8d\xa2\x98\x6a\x3e\xcc\x34\x5c\x13\x00\xeb\xb1\xe7\xc9\x6e\x19\x52\x83\xb3\x12\x8f\xa0\xec\x50\x27\x74\x34\x1a\x5a\xe2\xa8\x60\x90\x1a\x72\xcb\xd6\x33\xe3\x3f\xd5\x3b\x68\xc5\x2b\x14\x86\x26\xd2\x24\xb6\xfc\xf8\x7c\xd4\xa2\xab\xa7\x07\xea\xbd\x74\x2e\x0e\xc9\x3b\xd9\xe8\x3f\x67\xc0\xc6\x81\x9c\x4e\x25\xab\xdf\xc9\x06\x7e\xd9\xc9\x4c\x61\x07\x77\x39\x4f\xc6\xb9\x8e\x61\x05\xb0\xdd\x7b\x2e\x78\x33\x1f\x78\x33\x4f\x4f\x65\xe6\x35\x39\x17\x5a\xef\xc3\x21\x47\x9a\x70\x50\xa3\xb5\x69\xc0\x0a\x5c\x21\xc5\xdc\x66\xfe\x3e\x6d\xc1\xcc\xa3\x54\x83\x69\xdc\xb8\x31\xd3\x10\x26\xcd\xc1\x1b\x5e\x5b\xb9\xe4\x8c\x5b\x6a\x0f\x1c\xa3\xa7\x9d\x25\x53\x4b\x88\x18\xca\x22\x11\x2e\xa9\xe7\xbc\x49\xa7\xbb\xc9\x67\xba\x1b\x9d\xe4\x6e\x50\x08\x64\xd2\x85\xf7\xd4\x87\x4c\xa0\xc7\x5e\x55\xc8\xf5\x4b\x3c\x0e\xfa\x4b\x33\x77\x58\xd2\xbf\x01\xa6\xb7\x3e\x22\xc7\xa4\xe6\x62\x59\xb0\xc1\x3b\x13\xc4\xd5\xab\x26\xd0\x54\x05\xb9\xef\x7f\xb6\xfc\x8e\x16\x5a\xcc\x40\xae\xa1\x03\xf8\x92\x8b\x27\xc2\xf6\xd0\xc0\xf1\x6a\x86\xe8\x8c\xcf\xbd\x5b\xb6\xde\x3b\x0c\x26\x5f\xf6\x29\x7a\xef\x5c\xec\x75\xc8\x75\x03\x2a\x75\x32\x0d\x74\xca\x3d\x78\xb7\xb7\xb9\xdc\x0e\x4a\xa8\xf4\xb3\x2b\x12\x27\xb9\x69\x19\xdd\xf5\x2d\x1f\x0f\x76\x4d\x21\x12\xab\x5f\xee\xd7\x07\x70\x5a\x23\x18\x01\x68\x45\x05\x96\xb6\xfe\xb5\x7f\x4f\xc0\x0d\x83\xd6\xaa\xee\x12\x87\xb6\x5a\x2a\x9a\x33\xb2\x54\xb4\xf2\x6c\xda\x69\xda\x29\xaa\xb8\x63\x4d\x06\x9c\x7d\x5f\xbe\x67\xcd\xb3\xd6\x01\x5f\x76\xb0\xdc\x3d\xbb\x59\x49\x79\x0b\x78\x6b\xdc\x6b\xf0\xed\xe6\xa0\xe6\x17\x6c\xeb\xb4\xfb\xcd\x3a\xd1\x6b\x92\xb3\x86\xf2\x02\xdc\x03\xef\x2f\xde\x9a\xd0\x74\xab\xab\xd9\x5e\x8e\xf3\x8c\x1d\x78\x1c\x69\x6e\xb2\x2f\x2e\xd9\x1d\x67\xf7\xc6\xa3\xe5\x63\x51\x73\xb2\x64\x02\xc2\x9e\x03\xc9\x0b\x73\x52\xf3\x9c\x9d\x81\x53\xc9\x5f\xd1\x16\xa1\x17\x9e\x3e\xc7\x78\x45\x58\xd6\x45\xe5\x5c\x82\x8c\x73\x7e\xf9\x0f\x52\x05\xee\x2b\x49\x03\xef\x4c\x03\xe6\x74\xd8\x17\xdf\x7d\xf7\x6d\x40\xae\x80\x4f\xe5\x07\xf2\x1f\xdf\x7f\xff\xed\xf7\xfe\xcf\xb8\xc0\xcf\xfe\xdd\x3f\x3e\xb3\xdb\x4e\x2e\x4f\xbf\x80\xf9\xce\x5d\x16\x51\x38\xac\x2b\xa1\xaa\x05\xe5\x45\xab\x4c\x12\x5e\xa2\xf5\xf8\x63\xbf\x0c\x84\xe4\x74\x2e\x6a\x6a\x6b\xb4\xd9\x2b\x26\xab\x65\xc1\x05\xab\xc9\x4a\xde\x93\x56\x28\x96\xc9\xa5\xe0\x9f\x58\x8e\x10\xec\x35\x86\x55\x6b\x16\xee\x48\x9c\x30\x91\x57\x92\x8b\x06\x44\xec\x8a\x8a\xbc\x08\x45\xc0\x26\x8c\xb4\xbf\x83\xb7\x9a\x32\x90\x46\x93\x26\xec\x6d\x57\xe2\xd1\x74\xe9\x31\xdb\x00\x26\x94\x72\x38\x6d\x5b\x8d\x14\x19\xe3\x55\xc0\xe7\x32\xd2\xc7\x69\x2e\x01\x74\x75\xc0\x6f\x7f\xb6\x4c\xad\x01\x0d\xa2\x33\xdc\x7a\x79\x2a\xd7\x1d\x28\xb0\x1d\xa3\x51\x2a\xa9\xf7\xa4\x99\x8c\xb8\x64\x7a\xaa\x56\x17\x36\xfd\xa8\x57\xc6\x4b\x07\xc1\x9f\x36\x96\x88\x1c\x13\xd1\x16\x45\xa0\x25\x4f\x25\x42\x86\xe2\x91\xf0\x49\xf2\x3f\xa4\x39\x06\x52\x5d\x50\xf8\x7c\x3e\x47\x54\x7f\xe0\x3b\xb2\xa2\xa6\x26\xa9\x7c\x26\x07\x15\x3e\x9b\xb8\xa9\xf0\x99\x90\x14\x97\x9e\x10\x97\x76\xd1\x40\x82\xfb\x0a\x9f\x29\x19\x73\x89\xd7\x03\x3c\xa7\x43\x0b\x9f\x49\x91\xd5\x69\xce\xad\x91\xae\x27\x66\x4f\x3d\xa3\xa3\x0b\x9f\xe7\x70\x77\xe1\x33\x69\x1e\x53\x5c\x5f\xf8\x6c\x32\x8b\x2f\xe0\x06\x33\x63\x7e\x49\x67\x58\xa4\xc9\x1d\xbb\xc4\xf0\x49\x76\x8c\x99\xce\x4d\x4a\x83\x98\x90\x02\x31\x31\xfd\x61\x8b\xd4\x87\x8d\x8b\x26\x38\xcf\xf0\x99\x46\xd1\x2f\xe8\x48\xb3\x0d\xbe\x98\x3b\x0d\x9f\x97\x76\xaa\xe1\x93\x2c\x4f\xa7\x39\xd8\xfa\x95\x47\xc8\x75\x13\xf8\x44\xc5\xb8\xb8\x93\x78\x8b\xf4\x24\x23\x22\x48\x67\x97\x4f\x6a\x7d\x64\x68\xdc\x83\x8c\x35\x96\x86\x31\xcd\x6c\xb8\xce\xfd\x8a\x09\x13\x61\xd7\xd9\x5f\x55\xd1\x2e\xf5\x5a\x41\x00\x9c\x89\xa1\x0b\xed\x1d\x99\xf3\x85\xb9\x1c\x3b\xaa\x30\x07\xa7\x35\x82\xe9\xb0\x13\x1b\x7b\xca\x06\xbe\x6c\x0b\xf6\x0b\x6f\x56\xef\x3b\x9c\x30\xd8\xc5\x4d\x5b\x15\x30\x9b\xbd\x17\x9a\xec\x2f\x3b\xdb\x07\xc3\x62\xb4\xb9\x5b\x96\x4c\xe4\x5d\x64\x52\xb0\xc1\x5a\x5b\xcf\x98\x0a\x57\x14\x68\x21\x42\x53\xec\xa1\xa2\xa2\xb3\x85\x20\x62\x23\xb4\x43\x12\xf7\x47\xaa\xca\x97\x0c\x8e\x30\x55\xde\xbb\x8a\xad\x66\xd8\x43\x33\x18\x80\x1e\x90\x1b\x56\x48\x08\x6a\xc3\x74\x3f\x4c\x8d\x4d\xc6\x07\x38\x5f\xd8\x52\x46\x31\x33\x97\xeb\xb9\x80\x1b\x50\x41\x0b\x9e\x31\x27\x91\x65\x0a\x02\xdd\xa5\x51\xd6\xd3\xf4\xff\x14\xd1\x9a\x28\x56\x27\x88\xd4\x2d\xc4\x29\xad\x78\xdc\xd3\x88\xcf\x06\x2b\x6f\xab\xee\xaf\x7d\x3f\x14\x2c\xba\xfa\xf6\xe3\xff\x5f\xff\xd0\xb3\xc5\xfa\x77\xf8\x88\xbb\x5e\x7e\x39\xe0\xa8\x9d\x8a\xed\xd6\xbe\x93\x46\x2b\x29\x6f\x49\x46\x95\xd6\x25\xe0\xa0\x60\x4e\x4e\x2e\xcf\x8e\xaf\xcf\x0e\xc9\xcf\x1f\x4e\xe1\xef\xe9\xd9\xc5\x99\xfe\x7b\xf2\xfe\xdd\xbb\xb3\x93\x6b\xad\x9b\xbf\x8a\x76\x61\xa1\x8d\xcd\xa2\xc0\xd5\xd7\x0a\x90\x1c\x32\x73\x2a\xd6\x64\xd1\x36\x9a\x23\x77\x9d\x19\xf4\x92\xa2\x87\x92\xe6\x79\x4a\x86\xfe\x3f\x8e\x06\x07\x6b\xee\x24\xe1\x63\xa7\x70\x6f\xce\x70\xca\x2d\x18\x4d\x7c\x64\x2f\x43\xe4\xc9\xe0\x02\x53\x69\x5c\x6d\x84\x3b\x30\x1e\x65\xdb\x7f\x7e\x8c\xc5\x22\xf7\x9f\x59\x25\xf3\x7a\x66\x00\x26\xf4\xbf\xe3\xd3\x0e\x45\x5e\x17\x72\x39\x73\xb8\x14\x8c\x14\x72\x49\xea\xf6\xc6\x81\x8e\x80\x2a\x99\x54\xdb\x2b\x5b\xcd\x00\x41\xe1\xd0\x21\x93\xf4\x6a\x4d\xee\xdc\xa0\xce\x7e\x05\x53\xfa\xf5\xba\xce\x68\xc1\x06\x35\xe9\x1f\xa6\x76\xe8\xd5\xeb\xf1\x11\x5a\x43\x88\xab\x47\x35\xa6\x70\x8a\x7b\x5e\xe4\x19\x55\xf9\x13\x76\xd1\x05\xeb\x22\xe5\xe0\x6d\xb6\x02\x14\xc7\xae\x69\x44\x2f\x8e\x73\xe1\x3b\xa6\x0a\x5a\x61\xf2\x3a\x5c\xc3\x0c\xa6\x40\x42\x17\x4f\x59\xc5\x00\xfc\x06\x6f\x9e\x64\x84\x89\xac\x90\x00\xcf\x8c\x5a\xe7\xe1\x70\x59\x30\x35\xc7\xde\x12\x97\x0a\x6a\xf2\x0f\x17\xaf\x90\x05\xbd\x6b\xae\x83\xa9\xd5\x5e\x08\x75\x0b\x9a\x11\xad\x07\x7d\x8d\xce\x88\x67\x64\xcf\x24\x82\xec\x1d\x92\x3d\x87\x96\x9d\x1b\x83\x7f\xef\x55\xfc\x1e\x02\x57\x41\x1f\xee\x06\xfc\x01\x26\x90\x62\x0e\xfd\xec\xa3\x8b\x01\x75\xdb\x10\x90\xe4\xae\x77\x48\xf2\x5a\xa5\x34\x27\x39\x30\x86\x61\x43\xf1\x9a\xfa\x03\x7d\xd2\xeb\x0e\x56\x6a\xeb\x1e\xef\xbd\x1a\x54\xdf\xd8\x2b\x35\x88\x90\x66\xf1\x14\xd3\xd4\x18\xca\x5f\xeb\x3f\x57\x83\xbd\xe7\x42\x68\xfa\x50\xfa\x5c\x91\x8a\x42\x8e\x87\xfd\x32\x5e\xed\xa9\x81\x7a\xe7\xb5\xee\x71\xda\xae\x0c\x6e\xa2\x5e\xd4\x44\xa2\x2b\xe4\xca\x95\x38\x29\x68\x5d\x8f\x9c\xa7\x82\x0c\xd0\x15\x9b\x0b\x55\xb4\xec\x35\x21\x25\x70\xff\xf6\x8a\xde\x05\x86\x9a\xd0\xe9\x86\xaa\x25\x6b\xc2\xf1\x0e\x54\xac\xdf\x07\x6f\x2e\x9a\x27\xdf\x67\x3a\xdf\xc0\x21\xc5\x45\x33\x97\x6a\x8e\x45\x7e\x20\x8d\x6a\x7d\x7e\x87\x86\x97\x4c\xb6\xcd\x15\xcb\xa4\x18\x47\xba\x30\xdf\xed\x2c\x80\x63\x02\xfc\x87\x89\x21\x3a\xb6\xea\x77\xff\x3a\x35\xeb\xd0\xea\x74\x73\x1b\x37\x34\x44\xc4\x7e\x7f\xf1\x76\x9b\xc5\x26\x00\x7b\x18\x5e\xc9\x8f\x46\x26\x8b\xa5\xeb\xa9\xe9\x79\xb0\xd8\xdb\xb6\x99\x5e\xe8\xc4\xc5\xa3\x84\xbf\x36\x93\x11\x46\x27\xf6\x8e\xbf\x6e\x68\xd3\x3e\xa1\x86\x98\x28\x1a\xcd\x14\xbc\x82\xaa\xfa\x47\x62\x7d\xe0\x53\xb4\xe8\x10\xf9\x19\xbe\xb3\x09\x2b\x47\xc4\x14\xd4\x5b\xb6\x51\x94\xa3\x3b\x8c\x66\x4d\x4b\x9f\x9e\xe8\xeb\xc2\x26\xd9\x65\x1c\xee\x3c\xe0\x10\x0b\x39\xc1\x32\xa6\x9a\xfa\x82\xd6\xcd\xcf\x55\x4e\x3d\xc0\x37\x8f\x92\x58\xea\x06\xf6\x14\xda\xb4\xf7\x82\xe5\x5a\x08\x99\x29\xc1\xfa\xc8\xbd\xe6\xee\x2d\xd6\x38\x52\x61\x84\x2a\xed\x1e\xd3\xc5\xe7\xba\xa9\xf1\x5e\x5f\x4a\x3d\x27\xc7\xa3\x3c\x6a\x98\x2b\x14\xeb\xad\x96\x68\x0a\x6a\x23\x82\x3d\x8c\x69\x95\xdb\xf7\xb8\x60\x54\x8c\x23\x04\x0c\xfa\x7a\x82\xdf\x4d\xa7\x29\xd3\x00\xb9\x5f\x71\x6d\x6e\x21\x40\x50\x4d\xac\x12\x9b\xb3\x82\x79\xf2\x25\xb7\x4c\x2f\x32\x2d\x9c\x9a\x06\xb6\x8d\xcc\xfe\x30\xac\xce\x1d\xa8\x1b\xdb\xd2\x40\x49\x74\x56\x9a\xd1\x7d\x9c\xaf\xe2\xf1\x80\x41\x79\xbb\x29\x64\x76\x8b\x37\x71\x00\x12\x27\xff\xe4\xc9\x3a\xc4\x07\x33\x71\x45\xce\x33\x17\x0d\x51\x29\xb9\x54\xac\x1e\x4c\x35\x02\x97\xd7\x58\xbb\x6e\x53\xcf\xb9\x6b\xb7\x97\xbe\x4b\x5a\x61\xb0\x9a\x5e\x26\x03\xca\x7a\xe9\x01\x74\x60\x70\x54\xff\xd4\x44\xc7\x9c\x61\xb8\xca\xa9\x97\xb0\x0c\x3e\xeb\xd7\x3f\xf9\xf1\x32\x76\x9a\x9e\x14\x42\xed\xc0\x2f\xb8\xbd\xac\x2d\xf8\x55\x00\xdf\x23\xf5\x28\x20\x82\xe3\x41\xd2\x4d\x27\xd7\xe5\x94\xda\x76\x9a\xb2\xb1\xf3\x28\x9c\x04\x08\xfb\x29\xb1\x35\xa9\x57\x1e\x4e\x3a\x55\x17\x53\xee\xfa\x1a\xec\x96\xce\x98\x32\x80\x5f\x18\x7e\xb7\x90\xca\x6b\xb6\xed\xae\xf3\x61\xd4\x97\x68\x45\x5a\xa7\xf5\xc7\xb9\x0f\x05\xb7\xe5\xa0\xae\xc8\x21\xa1\x64\xc5\xeb\x46\x2a\x13\x80\xa2\x05\x60\xa3\xa8\xa8\xf1\xbd\x57\x56\x6c\x1b\x39\x7f\xe2\xba\x40\x68\x55\x31\xaa\x6c\x18\x80\x11\x67\xb4\x06\x27\x6a\x26\x55\x3e\xda\x31\xeb\x92\x19\x55\xc7\x46\x9b\xdf\x01\xe0\x55\x41\xeb\xe6\xda\xf5\x41\xeb\x14\x89\xdc\x78\xa8\x31\x99\x21\x76\xa3\xb1\xc0\xcb\x52\x74\x2f\x25\xa1\xc2\x38\xaa\x7c\x4d\x24\xd1\x57\x5c\x2f\xe9\xc6\x86\x0a\xe0\x46\xe3\xba\x77\xca\x5e\x6f\x88\x2f\xd3\x73\x9b\x8c\x9e\xd6\xe5\x63\xbc\x26\x91\xb8\x6b\x12\x4d\x71\x2b\xec\x51\x71\xc0\xd4\x0d\x7b\x9d\xc0\xda\x4f\x6a\x04\xd4\x04\x74\x83\xb8\x6d\xb5\xd5\x92\x55\x2b\x0f\xa6\xca\xc8\x60\xdc\x2e\x72\x29\x42\xc9\xdb\x21\xb1\x37\x8a\xd1\x3a\x04\x28\x35\x25\xc6\xfa\x46\x71\xb6\x20\x27\xb4\x64\xc5\x09\xad\x77\x39\xf3\xc0\x1e\x42\xae\x1a\x76\xb4\x3c\x22\xb3\xcb\x5e\x14\xce\x3b\xd9\xbc\x65\x8d\x0f\xe0\x20\x8a\x3b\x99\xc2\x08\x9e\x95\x05\x6c\x6d\x8e\xc4\x37\xfc\x96\x5b\x7d\xeb\x1e\x06\x36\xf6\x17\xb1\xa5\xc3\x60\x6a\xbe\x6d\x3c\xdc\xc0\xad\x02\xf7\x64\xb6\xe9\x46\x8e\x00\x34\xf9\x36\x6f\xca\xb6\xfd\x4c\x1b\x76\xca\x56\x8d\x8c\xde\x55\x71\x35\xea\xea\x79\x32\x11\xd7\x03\x73\x1a\xce\x8a\xfa\xa1\xf7\x08\xce\xc3\x6b\x6d\xe4\xed\x52\x31\xfa\xbc\xa0\x87\x66\x51\xbd\xef\x03\x9a\xff\x3c\x2c\xe7\xb7\x05\x54\xcc\xe1\xfc\x4d\x53\xc0\x4b\x86\xcb\x9d\xda\x56\x8d\x03\xc6\x5d\xda\x06\xff\xc3\xd3\x7d\xd7\xb3\x01\x7d\xec\x03\xe4\x14\xbb\x83\x34\x0d\x01\xe9\xa7\x8c\x08\x06\x40\x61\x3e\x94\x20\x92\x6e\xb2\xa5\x99\x6b\x71\x53\x3a\x6a\x26\x93\xf8\xd2\xda\x8f\x42\x0b\x8c\x4f\xaa\x55\x98\x60\x75\x4f\x30\x07\xe3\x36\xd5\x84\xca\xa2\x0a\xe6\xc4\xfa\xc6\x1d\xcf\x8f\x9f\x47\xf7\xab\xe9\x22\x97\xc0\xcf\x31\xd2\x22\xd3\x5c\x39\x83\xab\x03\x91\xcd\xbb\xdb\x5d\xfb\x4e\xe6\xcb\xc7\x3c\x10\x42\xfa\x87\x14\xbe\xab\x61\xb5\x2d\xdf\xdd\x9c\x47\x91\x4c\x93\xeb\xfb\x02\x60\x59\xa3\x04\xf4\xbc\x38\x8d\xf8\xc4\xa8\xee\xf3\xd3\x5b\x0a\x44\x77\x90\xc6\x9e\x09\x21\xb7\x66\xea\x8e\xe5\x83\x13\x46\x73\x85\xe7\xf0\xb7\xde\x79\x74\x57\xbf\x99\x76\xf2\xd7\xdf\xff\xfa\xdf\x00\x00\x00\xff\xff\x8e\x0d\xcb\x7a\x17\x6d\x0c\x00") +var _operatorsCoreosCom_clusterserviceversionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\x23\xb9\x91\x2f\x0c\xff\xef\x4f\x81\x90\x67\x5f\x49\x6b\x91\xea\xb6\xd7\x7e\xbd\x7d\xf6\xac\x43\xdb\xdd\x33\xa3\x67\xfa\xa2\x90\xe4\xf6\xe3\x98\x9d\xb5\xc1\xaa\x24\x89\x55\x15\x50\x0b\xa0\xa8\xa6\xcf\x9c\xef\xfe\x04\x12\x40\x5d\x78\x91\xc8\x02\x24\x56\xf7\x14\x1c\xe1\x69\x91\x45\x20\x0b\x97\x44\x5e\x7f\x49\x0b\xf6\x09\xa4\x62\x82\xbf\x22\xb4\x60\xf0\x59\x03\x37\x7f\xa9\xf1\xdd\x1f\xd5\x98\x89\xf3\xc5\xcb\x5f\xdd\x31\x9e\xbe\x22\xaf\x4b\xa5\x45\x7e\x0d\x4a\x94\x32\x81\x37\x30\x65\x9c\x69\x26\xf8\xaf\x72\xd0\x34\xa5\x9a\xbe\xfa\x15\x21\x94\x73\xa1\xa9\xf9\x58\x99\x3f\x09\x49\x04\xd7\x52\x64\x19\xc8\xd1\x0c\xf8\xf8\xae\x9c\xc0\xa4\x64\x59\x0a\x12\x3b\xf7\x43\x2f\x5e\x8c\x7f\xfb\x62\xfc\xe2\x57\x84\x70\x9a\xc3\x2b\x92\x64\xa5\xd2\x20\x15\xc8\x05\x4b\xc0\x3d\xa6\xc6\xa2\x00\x49\xb5\x90\x6a\x9c\x08\x09\xc2\xfc\x27\xff\x95\x2a\x20\x31\x83\xcd\xa4\x28\x8b\x57\x64\xe3\x33\xb6\x5f\x4f\x13\xd5\x30\x13\x92\xf9\xbf\x09\x19\x11\x91\xe5\xf8\x6f\xf7\xae\x76\xf8\x1b\x3b\xbc\x9b\x20\xfc\x3e\x63\x4a\xff\xb0\xfd\x99\x77\x4c\x69\x7c\xae\xc8\x4a\x49\xb3\x6d\x2f\x82\x8f\xa8\xb9\x90\xfa\x43\x4d\x96\x21\x23\x51\x8b\xe6\xbf\xdd\x83\x8c\xcf\xca\x8c\xca\x2d\xbd\xfd\x8a\x10\x95\x88\x02\x5e\x11\xec\xac\xa0\x09\xa4\xbf\x22\xc4\x8f\x65\x3b\x1f\x11\x9a\xa6\xb8\x5e\x34\xbb\x92\x8c\x6b\x90\xaf\x45\x56\xe6\xbc\x1a\xdc\x3c\x93\x82\x4a\x24\x2b\x34\xae\xc9\xed\x1c\x70\xd6\x88\x98\x12\x3d\x07\xf2\xfa\xe6\x53\xf5\x28\x21\xff\xad\x04\xbf\xa2\x7a\xfe\x8a\x8c\xcd\x02\x8c\x53\xa6\x8a\x8c\x2e\x0d\x09\x8d\xa7\xec\x6a\xbe\xb1\xdf\x35\x3e\xd7\x4b\x43\xaf\xd2\x92\xf1\xd9\x43\xe3\xbb\x97\xd8\x8d\x84\x45\x63\x9d\x9a\xc3\x7f\x5a\xfb\x7c\xd7\xe1\x25\x64\x40\x95\x9b\x01\xa6\xf6\x23\xc7\xfd\x78\x8d\x9c\xeb\xb5\xcf\x77\x25\xc7\xaf\x06\x35\x23\x13\x3d\xa7\xda\x92\x25\xb8\x21\xb5\xc8\x68\x02\xea\x41\x82\xd6\x1e\xf1\x14\xad\x7d\xb1\x85\xa4\x66\x97\x9a\xea\x52\x8d\x8b\xf9\xa6\x77\xbc\x9a\x3f\xfa\x86\xf6\xc1\xc5\x4b\x9a\x15\x73\xfa\xd2\x7d\xa8\x92\x39\xe4\xb4\xde\x92\xa2\x00\x7e\x71\x75\xf9\xe9\x77\x37\x2b\x5f\x90\xf6\xec\x6c\x3c\x8c\x84\x29\x33\x55\xc8\xb7\x88\x67\x5c\xb8\x76\xcb\x02\xc8\xdf\x37\xfe\xe6\xa6\x80\xe4\xef\xe3\x35\xca\xc5\xe4\xbf\x21\xd1\x8d\x8f\x25\xfc\x4f\xc9\x24\xa4\x4d\x8a\xcc\x04\x79\x66\xb8\xf2\xb1\x99\xff\xc6\x47\x85\x34\x5c\x4a\x37\x38\x90\x6d\x0d\x6e\xdc\xfa\x7c\xe5\x6d\x7f\x1e\xad\x7c\x4b\x88\x99\x24\xf7\xd6\xa9\x61\xcd\xa0\x70\x87\xba\x0d\x0b\xa9\x9b\xd9\x6a\x27\x4b\x28\x24\x28\xe0\x96\x59\xe3\xa6\xe2\xee\x2d\xc7\x6b\x9d\x9b\x29\x02\xa9\x0c\xc7\x2a\xb3\xd4\xf0\xf4\x05\x48\x4d\x24\x24\x62\xc6\xd9\x3f\xaa\xde\x15\xd1\x02\x87\xcd\xa8\x06\xa5\x09\xb2\x19\x4e\x33\xb2\xa0\x59\x09\x67\x84\xf2\x74\xad\xef\x9c\x2e\x89\x04\x33\x2e\x29\x79\xa3\x47\xfc\x89\x5a\xa7\xe5\xbd\x90\x40\x18\x9f\x8a\x57\x64\xae\x75\xa1\x5e\x9d\x9f\xcf\x98\xf6\xb7\x55\x22\xf2\xbc\xe4\x4c\x2f\xcf\xf1\xe2\x61\x93\xd2\xdc\x04\xe7\x29\x2c\x20\x3b\x57\x6c\x36\xa2\x32\x99\x33\x0d\x89\x2e\x25\x9c\xd3\x82\x8d\xf0\x65\x38\xde\x58\xe3\x3c\xfd\xb5\x74\xdb\x44\xad\x0c\xbc\xf1\x3c\x10\x7f\x61\xec\xb9\x58\xe6\x02\xb1\x9b\xd3\x76\x68\x5f\xb6\x5e\x13\xf3\x91\x99\xc6\xeb\xb7\x37\xb7\xc4\x53\xe4\x8e\x3a\x2e\x51\xfd\xe8\x86\x19\xf2\xab\x65\x66\x96\xf1\x29\x48\xfb\xcb\xa9\x14\x39\xf6\x0a\x3c\x2d\x04\xe3\x1a\xff\x48\x32\x06\x5c\x13\x55\x4e\x72\xa6\x15\x6e\x6b\x50\xda\x2c\xe4\x7a\xc7\xaf\xf1\x76\x27\x13\x20\x65\x91\x52\x0d\xe9\xfa\x23\x97\x9c\xbc\xa6\x39\x64\xaf\xa9\x82\x67\x5f\x3b\xb3\x46\x6a\x64\x16\x64\xe7\xd5\x6b\xca\x2e\xeb\x3f\x58\x3b\xf5\x84\x78\x61\x63\x9f\xe5\xde\xca\x68\x48\x0a\x49\x46\xa5\x95\x97\x88\x86\x2c\x23\x1f\xdf\xbd\x27\x73\x71\x6f\x0e\x12\xe3\x4a\xd3\x2c\xc3\x83\xe9\x64\x9a\xb5\xae\xf1\x0e\x48\x28\x27\x39\xe5\x74\x06\x84\x16\x85\x22\x53\x21\x09\x25\x33\xb6\x00\xee\x19\xc0\xea\x5a\x6c\x7d\xbf\x6d\x9c\x8d\xd8\x1b\x69\xe3\x25\xef\xbf\x75\x04\xaf\x7c\xb3\x8d\xd7\x99\xb6\x26\x2e\xee\x37\xb1\xa6\x5d\xd4\x5d\xe0\x91\xe2\xa4\xe4\x4a\xcb\x12\x77\x49\x4a\xee\x60\xe9\x4e\x57\x4e\x0b\xa2\xb4\x30\x1f\xde\x33\x3d\x27\xb4\x79\xb2\xa8\xc6\xe3\x32\x59\x7f\x2d\xd3\x14\x68\x32\x59\x12\x23\x1c\x23\x3b\xd3\x42\x64\xc8\xeb\xb0\x3f\xc3\xd6\x88\x04\x2d\x19\x2c\x80\x50\x39\x61\x5a\x52\xb9\xac\xf6\xd6\xfa\x39\x78\x70\xfe\x71\x5e\x1a\xb2\xda\xf6\xd9\x23\x0f\xed\x6c\x62\xaf\x13\x27\x2a\xa6\x95\xb8\xde\x7d\xa2\xaf\x2e\xdd\x0e\xae\x65\x7f\xe5\x76\x30\x28\x62\x76\xaa\x13\x8b\x2a\x25\x02\x09\x70\x5b\x33\x25\x42\x56\x7b\x8b\x4c\x96\x1b\xc7\x68\x6c\x75\x32\x01\xc3\x06\x25\xe5\x66\xea\x37\x1e\xa1\x0e\x13\xfb\xd0\x66\x34\x4d\xdc\xf3\x4d\x3b\xbf\xd9\x37\x95\x92\x6e\xa6\x9e\x10\xa6\x21\xdf\xd2\x33\x59\x9d\xe6\xe6\x7c\x56\x1f\x1b\x02\x17\x2c\x05\x33\xb1\x9a\x32\xbb\xcb\x0c\x4f\xa0\x13\x51\x6a\x3b\x9f\xee\x91\x94\x2c\x18\x25\x74\x36\x93\x30\xc3\xfd\xbf\x75\xd8\x47\xe6\xc4\xb6\xed\xc7\xbe\x6e\x23\xab\x63\x3d\xf8\x84\x61\xbf\x0f\x3e\xc0\x37\x31\x8f\xe6\x03\xeb\x62\x7c\xbb\x3d\xb6\x86\xb6\xd1\xc4\xcc\x89\x9f\x5a\x21\x1f\x7c\x78\x97\xb5\xb5\xed\x91\x15\xb6\xad\xbd\xce\x2b\x84\xb8\x6f\x27\xe6\xcc\xd4\x17\x80\xe1\x1c\xf8\x60\xcd\xd2\x27\x40\x0a\x90\x53\x21\x73\x73\x78\x38\xa1\x24\xb1\xa2\x6c\xc5\xb7\x90\xe1\xf2\xe4\xa1\xe9\x24\xbb\xae\xbf\x6d\xbb\xec\x02\xdb\x46\xa4\xa0\x7a\xfe\xc8\x63\xbb\x2d\x95\x6d\xcd\x49\x7b\xf4\xe1\x47\x18\xdf\x5a\xdf\xf5\xbd\x15\xbd\x6f\x33\x0d\xd1\x3b\xc5\x2b\x6b\x97\x5e\x77\xe1\xdc\xab\xed\x9a\xde\xbf\x07\xa5\x8c\xbc\x80\x42\xa8\xa4\xf7\x04\x78\x22\x0c\x4f\xf9\x7f\x6e\x3e\x7e\xb0\xa3\x6f\xe2\xae\xeb\xed\x52\x13\x96\x17\x19\xe4\x46\x16\x25\x3f\xbe\xa7\x52\xcd\x69\x06\xf2\x27\xbc\x15\x7f\xfc\x33\xcf\xdb\x9f\x24\x74\xfb\xc1\x6e\x36\x23\x64\x2a\x48\x0d\xfb\x4b\x21\xa3\x4b\x4b\x58\x0a\x89\x48\xcd\xb5\x20\x24\x29\x8c\xb2\x90\x17\xa5\x06\x42\xed\xb7\xf8\x0e\x8c\xcf\x76\xa1\x7c\xaf\xd5\x20\x46\xa4\xca\xa9\x7e\x45\x26\x4b\xfd\xd8\x69\x23\xe4\xf3\x28\xdd\x95\xed\x34\x89\x79\x9c\xf9\xd8\xb6\x13\x0b\x6a\x76\xfc\xe8\x5b\x1a\x79\x9b\x32\x0e\xf2\x4a\x48\xbd\x0b\x9f\x34\x8a\xdd\x0c\xd6\xc5\xd1\x66\xf3\x53\xc6\xb8\xfe\xdd\x6f\x1f\x78\x32\x85\x22\x13\x4b\xb3\x7f\x1e\x3f\x9e\x3b\xbe\xcf\xce\xac\x64\xd7\xfe\x76\x65\x1f\x3b\xf6\x67\x2d\x95\x31\x7a\xda\xa4\x7d\x76\xea\x88\xc7\x7a\xb7\x4a\x81\x3e\xd8\x7d\x7b\x75\xe9\x6d\x3d\xd7\x30\x05\x09\x3c\xf1\x7c\xae\xfa\x53\x0b\x42\xc9\x0f\xe5\x04\x24\x07\x0d\xaa\xa1\x09\x2c\x0b\xf0\x86\x35\xb0\x3f\x90\x20\x49\xa9\x59\xc6\xfe\xb1\xc9\x1c\xb1\xe9\xad\xa2\xdf\xb4\x8f\xc8\x54\xfe\xb1\x47\x24\x2b\xff\xd8\x63\xf2\x95\x6d\xfb\x5c\xdd\x8f\xef\x42\xdb\x5a\xeb\x84\x46\x10\xa7\x31\x54\x2b\x93\xb6\x97\x22\x3a\x27\x7f\x7c\x9b\x6f\xa0\xf4\x0a\x6d\xf9\x2d\x5b\xf8\x36\x82\xc9\xc9\x36\x37\xc9\xd8\x28\xfc\x63\xb4\xd0\xff\xf8\xd3\xd8\x76\x79\x3a\x26\x6f\xf3\x42\x2f\xbd\x19\x88\x3d\xd2\x39\x53\x84\x0b\xbd\x2e\x08\x46\x9f\xa6\xc5\x66\x23\xe4\xa3\x33\x75\x71\x75\xe9\xad\xed\xcf\xb8\xb4\xaa\x80\xa4\x07\x82\xfe\x4d\x8b\x8c\x96\x98\x3f\x65\x90\xa5\x84\x19\x19\xde\x10\x4b\x26\x99\x48\xee\x9c\x25\xff\xfa\x0d\x51\xc2\xf2\x1c\xa3\xe8\x19\xc9\x3f\x11\x5c\x95\x39\x10\xf6\x18\x13\x19\x24\xfb\x41\xb2\x6f\xb6\x41\xb2\x1f\x24\xfb\x56\xb3\x4e\xba\x3e\x30\xc7\x15\x42\xb6\xb2\x47\x7c\x6e\x60\x90\x0f\xb5\x81\x41\x62\x1b\x18\xe4\xc0\x20\x1f\xeb\xf8\xd1\xb7\xdc\x49\xd2\x7d\xb4\xaf\xc7\x78\xc7\xe0\x39\x18\x3c\x07\x83\xe7\xc0\xb5\xe1\xfa\x74\x6d\xb8\x3e\x87\xeb\xb3\xdd\xbe\xb8\xeb\x73\xf0\x1c\x0c\x9e\x83\xc1\x73\x30\x78\x0e\x9a\x6d\xf0\x1c\x0c\x9e\x83\xc1\x73\x30\x78\x0e\xb6\xb4\x41\xb2\xef\xd8\xe9\x20\xd9\x0f\x92\xfd\xb6\x36\x78\x0e\x06\xcf\xc1\xc0\x20\x07\x06\x39\x30\xc8\x2d\xad\x8f\x9e\x83\x24\x03\xca\x37\xab\xf3\x2b\xc9\x8d\xf8\x1c\x0a\x80\x6c\xca\x5c\x6a\x9f\xfb\x35\x99\xc0\x9c\x2e\x98\x28\x25\xb9\x9f\x03\xf7\x79\xa9\x64\x06\x5a\x99\x5d\x00\x1a\x36\x69\x80\x8f\xb0\xb7\x87\x59\xda\x88\x00\xa7\x93\x6c\x63\xc7\x8f\x71\x2f\xf7\xcb\x87\x3d\x25\x13\x21\xcc\xdb\xad\xcf\x18\x6a\x2f\x5e\x1b\x88\x90\xd4\xb2\x4d\xe7\xda\x9c\xd8\xf2\xfa\xfa\xcd\x93\xa6\xb3\x6c\xec\xe4\xb2\x1a\x9b\xa0\x0b\x07\xd3\xfe\xcc\x95\x67\x3e\xfd\x78\xcf\x21\xc5\xa4\xf4\x33\xc2\xb4\x79\xc0\x30\x16\x96\x30\x9d\x2d\x2b\xf2\xbe\xec\x3c\x99\xd7\xd7\x6f\x76\x77\x73\xf9\x55\xda\xda\x75\x44\x8f\xd6\xe0\xaf\x1a\xfc\x55\x55\x1b\x84\xb6\x8e\x9d\x0e\x42\xdb\x20\xb4\x6d\x6b\xf1\x85\xb6\xbe\xfb\x77\x06\xaf\x0c\x19\xbc\x32\xfe\xb1\xc1\x2b\xf3\xe8\xe3\x83\x57\x66\xf0\xca\x0c\x5e\x99\x87\xdb\x20\xbf\xba\x36\xc8\xaf\x83\xfc\xda\x6e\x5f\x9c\xfc\x3a\x78\x65\x06\x06\x39\x30\xc8\xba\x0d\x0c\x72\x60\x90\xad\xf6\x25\xe6\x73\x0c\x16\xee\xc1\xc2\x3d\x58\xb8\x87\x0b\x70\xb8\x00\x87\x0b\xf0\xb1\x8e\x07\x0b\xb7\x6f\x83\x85\x7b\xb0\x70\xb7\xda\x60\xe1\x1e\x2c\xdc\x83\x85\x7b\xb0\x70\x6f\x69\x83\xfc\xda\xb1\xd3\x41\x7e\x1d\xe4\xd7\x6d\x6d\xb0\x70\x0f\x16\xee\x81\x41\x0e\x0c\x72\x60\x90\x5b\x5a\x1f\x2d\xdc\x8f\x1c\xde\x5d\x76\x69\xd3\x5e\xed\xc4\x66\x1f\xe9\x3e\x26\xaf\x29\x27\x8c\x27\x59\x99\x02\x7e\x33\x05\xaa\x4b\x09\xea\x8c\x64\x2c\x67\xbe\x58\x87\x90\x66\xd3\x8c\x12\xaa\x40\xb9\x3e\x36\x0e\x55\xf5\xbb\xe1\xdb\x87\x5f\xf3\x61\x3e\xf2\x60\xad\xb3\x2a\x6c\x9f\x71\xdf\x8f\xdb\x56\x7b\x93\xc1\x92\x1d\xa6\xd9\x8c\x6f\x1e\xc4\xda\x2d\xb6\xd0\xcf\xa3\xaf\xbd\x6d\x0b\x3e\xb0\xe5\x1e\xbd\x5c\x1e\xbb\x52\x46\x64\x42\x15\xfc\xe1\x5f\xd6\x4a\x5c\x35\x1f\xc9\x21\x65\xd4\x0c\xb5\xf1\x89\xc7\xaf\x99\x7a\x88\xed\x9b\x7c\x87\xc3\x52\x91\xd1\xb1\x17\x57\xce\xa6\xeb\x11\x31\xfb\x2e\xbd\xb4\x7d\xdc\x68\x49\x35\xcc\x96\x8d\xba\x4d\xb8\xcd\x6a\xa1\x81\x6f\x29\x61\xe6\x35\xd0\x8d\x43\xdc\xcf\x41\xda\x23\xe6\x6b\x05\x29\x3f\x10\x53\x55\xba\x50\x97\xfc\x8f\xc7\xf2\x7f\xfc\x38\x1b\xbe\x7e\x6c\x7d\x37\x55\x50\xf2\x6d\xd7\x0b\xd2\xcf\xe7\x1b\xeb\x21\x7b\x53\x01\xc1\xac\x4e\x70\x41\xa5\xb9\x98\xbc\x27\x0d\xc5\xb3\xfa\xe9\xad\xfd\xaf\x2c\xdb\xb6\x3b\x6a\x07\x59\xed\x71\x19\x6d\xd4\xc0\xb1\xd9\xe6\xd5\xdb\x45\x34\x73\xb5\x21\xaf\x40\xe6\x4c\xa9\x6d\x49\x51\x6d\xd2\x1f\xbb\xc5\x76\xb8\xbd\x56\x64\x66\xbf\x2e\xfe\x8d\x1a\xe4\x54\x02\xb4\xb5\xb2\x4c\x68\x42\x64\x99\x19\x71\x9a\xa7\xc4\xd5\x29\x22\x34\x49\x44\xc9\x35\xe1\x00\x29\x26\x56\x6d\xdc\xde\x3b\xdc\x7d\x3b\x48\xd0\xbb\xca\xcf\x23\x4b\xe7\xa3\x4f\xb9\x77\xb8\xb0\xaf\xb0\xb1\x48\x56\xb3\xed\x2e\x6f\xe3\xf0\x8f\x0b\x11\xfb\x48\x26\x3b\xcb\x25\x5d\x64\xd6\x2b\x91\xb1\x64\x79\x5d\x66\x40\xe6\x22\x4b\x15\xd6\x7c\x33\x97\x67\xe5\x13\x6d\xea\x52\x05\x3e\x8d\x2f\x79\x46\x26\xa5\x26\xa9\x00\x6b\x36\x74\xe8\x52\xcd\x9f\xef\x34\xbe\xf5\x94\xdf\xcf\x6d\x31\x42\xd3\x31\xa1\x45\x91\x61\xe6\xa4\x30\x82\xc7\xfd\x9c\x25\x73\x5b\x12\xb6\xa0\x09\x6c\x7a\x6c\x77\xb9\x74\x27\x5d\x8d\xec\xa5\xaf\x11\x6f\xf6\x9e\x3c\xb6\xeb\xc8\x9e\x8a\x1b\xb1\x65\xc1\xbe\x93\xa2\x2c\x76\x7c\xbc\xdb\x1e\x68\x0d\x64\xae\x23\xbd\x22\x62\x5d\x5c\x5d\xe2\x97\xce\x49\x6e\x97\x5a\x39\x0b\xac\xf3\xc8\x8c\x31\xfd\x31\x2f\x33\xcd\x8a\x0c\x7f\x62\x11\xb0\x14\xa1\x12\xea\x0b\xee\x8c\x50\xbe\xf4\x3e\x77\x57\xc2\x10\x52\x42\x67\xa6\x47\x8d\xe5\x51\xc5\x74\x67\xaa\x6d\x8d\xc4\x32\x37\xf2\x57\xc3\x06\xac\x50\xdd\xe7\xcb\x9a\x0a\x72\xcf\xb2\xcc\x28\x3f\x34\xcb\xc4\x3d\xa4\x63\x72\x74\xb4\x7a\x01\x25\x42\x36\xe8\x46\x56\x77\xf4\xcf\xad\xa7\x0c\x5f\xab\x5f\x6c\x37\x45\x6e\x5f\x2d\x84\xec\xa7\x89\x90\xfd\x75\x2e\x82\xaa\xd4\x5d\xe5\xa0\x1a\x65\x4c\xe9\x91\xa3\x52\x8b\x9c\x25\x3b\x75\xc2\x05\xf7\x8e\x88\x3f\x5f\xbf\x7b\xf2\x0d\xba\x32\x9c\xab\xc9\x09\xda\xec\xd1\x82\x4a\xcd\x68\x46\x4a\x99\x29\xbb\x47\xa9\x51\x58\xa4\xaf\x82\x3a\xa7\x18\xe7\x91\x80\x42\x76\x41\xc8\x3f\xdb\x5d\xe9\x36\x83\x65\x65\x82\x67\x4b\x42\xed\x56\x98\x96\x59\x76\x46\xa6\x8c\x53\x73\x91\x41\xe1\x73\x78\x77\x30\xcd\xd4\xed\x86\xf1\x04\x0c\xdd\xa3\xca\x37\x81\x94\x9b\x91\x0d\xcb\xac\x78\x5a\x7a\xe6\xca\x7e\x5a\x4b\x95\x72\xa4\x18\xfe\x96\xd0\x49\x06\xa8\x69\x38\x99\xf3\x5a\x64\xe8\x52\xac\xfc\x1e\x58\x2b\x94\x36\xbf\xfe\x0f\xc6\x77\xd5\xd6\x6d\xbb\xc6\xab\x3d\xa1\x9c\x00\xd3\x73\x90\x38\xf4\xd2\xf0\x5f\xb3\xd9\xeb\x43\x75\xa2\xca\x64\x6e\xa6\xe8\xa8\x10\xa9\x3a\x32\xdc\xf9\x48\x41\x22\x41\xab\xa3\x53\xf3\xd7\xea\xbb\xe2\x7c\x35\x7f\x77\x4e\x0b\x76\x74\x7a\x46\x70\xc2\xb1\x40\xa9\xd0\xf3\x5f\xf8\x39\xf2\x13\xd6\x2a\x2f\xfe\x58\x6b\x9d\xa2\x56\x0f\xae\xb2\xa6\x28\x6c\x51\x4a\x73\x7f\x6a\xc0\xb4\x73\x73\x52\x70\xcf\x35\x7c\xd0\x2b\x17\x29\x21\x17\x9c\x80\xf5\x1a\x82\x26\x39\x50\xee\x9e\x86\x05\xc8\xa5\x9e\xa3\x23\x51\x55\x5c\x74\x58\xb9\x1d\xa2\x11\xea\xb6\x71\xd5\x1c\x2b\xf3\x2b\x54\x7f\x6c\x8b\x3f\xaf\xae\xd0\xf1\x3f\x1f\xaf\x5e\x49\xf5\x1d\xfc\xcb\x5e\x0f\x14\xc2\x3a\xad\x05\xfe\xb2\xbd\x0e\x9f\xf0\x23\x7b\x99\x54\xec\xf0\xdd\x3b\x5b\xec\xd9\x4d\xf8\x0f\x8c\xa7\xaa\x02\x56\x4d\xed\x2d\xe1\x16\x6d\xe3\x4a\xe1\x38\xbf\xd8\x55\x5a\x57\xba\x76\x55\x94\x1e\xa1\xb1\xa1\x95\xf7\x41\x91\xc6\x7a\xd1\x2d\x29\xd9\xb0\xdd\x33\xeb\x9d\x37\x62\x65\x46\x27\x90\x29\x67\x40\x84\x06\xf9\xe4\xe2\xdd\xfb\xaa\x74\xbb\x04\xfa\x88\x51\xfc\x09\xd4\xe7\x1d\xc2\x7c\xd6\x4a\xe4\xaf\xb7\xdd\xd5\x1c\x9c\x8a\xfd\x9c\x58\xe4\x06\xb4\x3d\xab\x39\x2d\xcc\x51\xb5\x7d\x58\xe7\xca\x8a\xe3\xe4\x1d\xce\xf4\xe3\x27\x6e\x2f\xf5\x70\xf7\x92\xcf\x9b\x06\xd9\xe9\xbc\xed\x16\x4a\xb4\x47\x87\x0f\x99\xf2\xea\xd6\x9a\xe6\x95\x0d\xed\xf4\x42\xa7\xc9\x25\xb4\xe9\x50\x48\x41\x59\x70\x1d\x0b\x70\x24\xfd\xe7\x75\x17\x91\x97\x60\x1f\xfd\x7c\x44\x14\x64\x90\x6c\xaa\xc9\xbe\xe9\x61\x0d\x79\x91\x3d\x76\xf2\xc8\xde\xba\x7c\xce\xf8\x35\xd0\x74\x79\x03\x89\xe0\xe9\x8e\x5c\xba\x9b\xb2\xf4\x9e\x71\x96\x97\x39\xe1\x65\x3e\x01\x5c\x0b\x65\x07\x45\x8e\x63\x0d\x2a\x94\x70\xb8\xcf\x96\x8e\xcb\xa4\xa4\x10\xa9\x67\x3c\x13\xa3\xd5\xd3\x74\xd7\x4b\xe7\x9e\xe9\x39\x96\xad\xe0\x4b\x33\x14\xd3\xf5\x8d\x28\x49\x22\xa9\x32\x42\xe3\x19\x0e\xcd\xb4\xb9\x45\x27\x80\x2e\x76\x96\x82\xd9\x32\x74\x41\x59\x66\xb4\x9c\x5d\xaf\xc5\x37\x30\xa5\x65\xa6\xd1\x3e\xf4\x82\x9c\x18\xc2\xbd\x72\xbf\xa9\x5b\xa3\x77\x28\x21\xb8\xf9\xaf\x85\x5d\xc2\x97\x3b\xdd\xc3\xcf\xb7\x0b\x10\xba\x6f\xbb\x02\xa2\xfb\x56\xd0\x52\xed\x6a\x66\x6a\xed\x86\x4b\x9e\x9a\x43\xd8\x94\xe6\x1b\xf7\x08\x53\xae\xe7\xdd\x66\xf5\x61\x28\xaf\x0d\x54\x4b\x31\x93\xa0\xd4\x1b\xa0\x69\xc6\x38\x3c\xc3\xa6\xbe\x9d\x03\xc9\xe9\x67\xdc\xd8\x9a\xe5\x60\x84\xad\xe6\xb6\xa6\xcd\xd7\xd7\x82\xe4\xf4\x0e\x2a\x3a\xc9\x04\xa6\x42\xee\x10\xd2\xe1\x1b\x53\xcd\xcd\x64\x37\xed\x94\xb2\x0c\xd2\x31\x52\xd2\x18\xcb\x6c\x76\x29\xb2\x0c\xa4\xdd\x87\xe6\x6f\xc6\x4b\x20\x5a\xec\x38\x58\x21\x05\x9a\x26\xec\x00\x4d\x69\x06\xa5\x05\x6a\xba\xb4\x37\x0e\x1e\x36\x42\xc9\xd5\xca\xfc\xbf\xfd\x9c\xa0\x11\x7e\xc7\x01\x25\x50\x85\x9d\xd9\x63\xa3\x4a\x39\xa5\x89\x97\x5f\x5b\x2f\x67\x23\x66\xc6\xe4\x83\xd0\x2e\x74\xb9\x9a\x52\xf3\xeb\x1d\xc7\x43\x4d\x1f\x08\x28\xcd\x72\xe4\x36\x69\x89\x21\xa9\x66\x30\x5c\x4b\xba\x79\xef\xb6\xce\xfa\x1f\x5e\xbc\xd8\x51\x74\x7e\xfa\x53\x2b\x01\x6d\x33\x4f\xba\xe1\x3f\x54\xdc\xdb\xdf\xae\x85\x48\x95\xd9\x7e\xcc\xa9\x2a\x85\x30\xef\x28\x31\x96\x83\x29\xcd\xf8\xac\x64\x6a\x4e\x26\xa0\xef\x01\x38\x81\xcf\x16\x5e\x6e\xc7\xf1\xfe\x01\x52\xe0\x7e\x33\xab\x55\x3b\x24\x5b\x6b\xf0\xb2\x3f\x0b\xb0\x60\x8a\x09\xfe\x3d\x53\x5a\xc8\xe5\x3b\x96\xb3\x47\x6a\x5a\xf8\xd6\x9d\xfb\xd4\xd7\xa9\xc8\x52\x72\x6d\xb7\xc0\x0d\xd8\x99\x91\x80\xee\x0f\x2d\xac\x6d\x84\x18\x8e\x30\xa1\xc9\xdd\xae\xb7\xda\xde\xab\xba\x6d\xbd\x3a\xdc\xa2\x2f\x5f\xf4\x65\x59\xbd\xa0\xf6\x94\x4b\x89\x2a\x41\x35\x12\xde\x1d\xf6\x60\xbd\xfd\x6c\xa7\xbb\xb5\xb4\xf7\x73\xa1\x00\x1f\x20\x54\x3e\x2e\x13\x36\x5f\xc3\xfb\x44\x99\xaa\x38\x2d\xc6\xab\x70\x50\x84\x4e\xa7\xed\x27\xd2\x3d\x24\x65\xdb\x2e\x35\xc9\x4b\xa5\x49\x4e\x75\x32\xb7\xd6\x69\x91\x56\xd2\xeb\xb1\x72\x5a\xe6\x3e\x4b\xbb\xb3\x7b\x6c\x7f\x47\x16\xb1\x74\xbe\xfd\x5c\x98\xcb\xe3\x31\x97\x77\xbb\xb5\xd6\x79\xb5\x9b\xb6\xd5\x26\x6b\x2f\xae\x53\x13\xf0\x2e\xb5\x17\x77\xf3\x13\xb4\xc4\x5f\x7c\x78\xb3\xfb\xa9\xe9\x62\x94\xd9\xdb\x2c\xd3\xdd\x47\x62\xda\xc5\x03\x73\xe0\x9d\x26\xee\x9b\xb6\x37\x0f\xf5\x67\x75\x46\x28\xb9\x83\xe5\x99\x95\x3c\x1a\xa0\xa8\xe6\xe1\xbd\x08\x91\x90\x39\xf1\x14\x4c\x8f\xd8\xa1\x1d\x63\xf7\xd9\xee\xb0\x31\xfd\xe0\xfb\xf8\x6f\x7d\x1b\x19\x42\xf7\xfc\x85\x9f\xa0\x3d\x7e\xb6\xff\xd9\xb1\xed\x0e\x96\xfb\xfd\x60\x65\x27\x99\x55\x70\x5a\xbc\xdd\x23\xe6\x83\x4a\x7b\xa8\xb6\xc5\x7e\x8e\xf5\x66\xeb\x60\x50\xb4\xcd\x4f\x62\xd0\xeb\xed\x79\x50\x9a\xe3\xb6\xec\xb4\x66\x5a\x8e\x95\xdd\xbf\x86\xc3\xcc\x59\x61\x73\xfa\x9c\xb7\x71\xff\x4d\x6c\xdb\x27\x9a\xb1\xb4\x1a\xd2\x72\x9f\x4b\x7e\x66\x64\x6b\xf3\x1f\xbc\x7e\xac\xc4\xff\x46\x80\xfa\x20\x34\x7e\xf2\x6c\x6b\x60\x5f\xeb\xb9\x57\xc0\x8e\xea\x9c\x56\xc8\x56\xd1\x5e\x61\x53\xd6\xdc\x4c\x7b\x5c\xe5\x3a\xd2\x53\x91\x4b\x4e\x84\x74\x53\xb7\xf7\xa0\xa6\x33\x37\xb0\x1d\x12\x2f\xd2\x89\x75\xd6\xa2\xfb\x6b\xe3\x98\x6e\x85\x84\x6c\x2d\x50\xc4\xe1\xdd\xd0\x28\x0b\xda\x6f\xd0\x5c\x51\x64\xa8\x9d\x39\xa5\x89\xfa\xd0\xaa\x1d\xbd\x22\xcd\x96\x83\x9c\xa1\x17\x3b\xd9\xd9\xeb\x5a\x11\xdd\xe1\xe2\xb3\x6d\xef\xeb\xaf\x39\x60\x87\x8d\x1c\xc5\x97\x14\xad\x1b\x94\x57\xac\x19\xba\xa3\xc4\xb3\xd7\xa9\x6a\x0c\xd7\xb2\x91\xff\x1f\x73\xa9\xe3\xa6\xfb\xbf\xa4\xa0\x4c\xaa\x31\xb9\x20\x8a\xf1\x59\x06\xad\xef\x9c\x09\xa0\xd1\xcd\x5e\x83\x17\x66\x50\x73\xf7\x2e\x68\xe6\x0c\x31\x94\x13\xb0\xe6\x78\x43\xc7\xaa\xf8\x76\xe6\x24\x6c\x73\x15\x55\xf1\x0f\x47\x77\xb0\x3c\x3a\xdb\x1a\x66\xbe\xb9\x35\x4f\xea\xd1\x25\x3f\xb2\x22\xcc\xda\x59\xab\xe4\x1d\x0c\xb2\x38\xc2\xef\x8e\x62\xca\x86\x7b\xca\x2a\x5d\x9d\x09\xed\x41\xf7\x38\x26\xad\x5d\x9d\xd3\x62\xdf\x4d\xed\x03\x3b\x3b\xe8\x68\xb7\xab\xc6\x25\x17\x01\xad\x05\x29\x15\x58\x35\x1a\x99\x1d\x01\xaf\x8b\xa1\xe6\x85\x56\x2f\x0e\xf7\xa8\x3b\xf5\x46\xa1\x31\x2a\x3e\xe3\xb3\x3f\x17\x29\xd5\x3b\xe5\x14\xd9\xd6\xfd\x6c\x5f\xdb\x01\x49\x89\x23\x9a\x9d\x3c\x65\x33\x52\x50\x49\x73\x35\x26\x57\xae\xdc\x00\xee\x6b\x36\x6d\xba\x6f\xdc\x3c\xdf\x2e\x0b\x20\xff\x7b\xff\x01\xed\x1b\x3e\xf1\x39\xe8\x26\x14\xe7\xf4\xf3\x4d\x29\x67\x7b\x4c\x3f\x09\x16\x5a\x9a\x96\xe8\xda\x26\x84\x1b\xb5\x09\x22\xa4\x92\x39\xa4\x65\x06\x29\xa1\x13\xb1\x80\x96\x9f\xac\xfa\xd9\x9e\x43\xa3\xa1\x62\xcf\xdf\x7c\x32\x1c\xce\x13\x65\x84\xac\x89\x12\x59\xa9\x2b\x7b\xd6\x09\x7c\x7e\x45\x7e\x8f\xf1\x5b\x94\x14\x20\x13\xe0\x9a\xce\x60\xd5\xf0\x68\x9f\x7b\xf9\xe2\x9f\x4e\xf7\x25\x00\xc5\x19\x33\xbe\x33\x03\xbf\x30\xbb\xf3\x3d\xfd\xfc\x67\x5e\x3b\x69\x98\x22\x3b\x1a\xa1\xea\x76\xb1\xf2\x22\x38\x4a\x96\x94\x19\x9a\x98\x31\x2e\xae\xf1\x3a\x93\x25\x91\xa2\xc4\xc8\x38\x52\x16\xfb\x8e\xd5\x34\x97\xfd\xf6\xf7\xff\xb4\xef\xcf\xdf\x7e\xa6\x79\x91\xc1\x2b\x5f\xf7\xc5\xda\xfa\x8c\x3e\xa1\x05\xf9\xdd\x8b\x7f\x3a\xb3\x51\x02\x70\xdf\xb0\x3d\xd5\xfb\x88\x9a\x4d\x54\x16\x84\xe5\x36\x4f\x06\xb2\x25\x76\xb4\xaf\x04\x67\xae\xb8\x36\x0b\x51\x9a\x4a\xad\xce\x08\x06\xe8\x55\x9a\xa0\x16\x9a\x66\x2b\xe6\x4e\x34\x34\xc2\xbd\xdd\x0a\xa9\xc0\xb5\x04\xf4\x3a\xec\x49\xc5\xcb\xdf\xbd\xf8\xa7\x75\xa3\xf6\x47\x9e\x00\x8e\x83\xfd\x63\xbc\xe6\x04\x80\x93\x3b\x96\x65\x90\xee\x2b\x62\x3f\x36\x91\xd3\x52\xea\x39\xc8\x33\x02\x5c\x79\x4f\x84\x79\xf7\x95\xf7\x46\x5a\x64\xc9\xf9\xfe\x12\x28\xb5\xfe\x50\x74\x6e\x34\x9c\x1d\x6e\xda\x8d\x60\xa6\x49\x2e\x94\xde\x3c\x1d\x7b\x0d\x46\xf9\xf2\xe3\x74\x5f\xf1\x7a\xd4\xc1\x98\xbb\xfe\xeb\x0e\xc2\x79\x4b\xfa\x60\x5c\x8f\x84\x1c\xd9\x6e\x5e\x11\x2d\xcb\x7d\x04\xbe\xbc\xc5\x42\x7a\x78\x03\x94\x0d\x06\xb7\xb6\x09\xbe\x38\x36\xde\x9d\xdd\xa6\xe2\x9e\xc7\xba\x34\xf0\xb6\xef\x74\x5d\x3c\x0b\x0b\x6f\x7b\x86\x56\x38\x8f\x99\x07\xf3\xf4\xff\x7f\xfd\xc8\xef\xab\x52\xaf\xdc\x04\xdb\x79\xbb\x63\xad\x15\xeb\x36\x6a\x0d\x06\x40\x9c\xad\xd0\xba\x27\x05\x1b\xde\xac\xe2\xaa\x53\x61\xc3\x83\xcd\x26\x30\x0f\x58\xa2\x36\x5c\x71\x35\x03\xde\xfb\x2a\xdb\x72\x55\xd9\x77\xac\x63\x3f\x34\x86\x5d\x1a\x36\xac\xb6\xf1\xe1\x3d\x87\xce\x80\x2a\xbd\x69\x09\x07\xae\xfd\x68\x7b\x38\xc3\x77\xb5\xb5\x55\x47\xa3\xbb\xe0\x8c\x57\x7e\x32\x4c\x5e\x9f\x00\x39\xba\x06\x1b\xc5\x64\x33\x12\x5a\x4a\xcb\x51\xe5\xbf\x36\x8b\x1d\xa4\xcf\xec\x3c\x6d\xde\x05\xf7\xa4\xfe\x68\x37\x46\x23\x3b\xcf\x79\x00\xdd\x15\x54\x85\x44\xd9\xf8\xae\xdd\xdd\xd0\xe0\xb2\x4f\xdc\x11\xf6\x2f\x33\x56\x05\x24\x63\x09\xc8\x55\x6c\xd2\xa0\xb5\xab\xa0\xb9\xe5\x22\xbb\xa7\x4b\x75\xd4\x1b\xd5\x3c\x07\x4d\x1f\x4e\x4a\x5f\x6d\xdd\x05\x82\x1b\x4d\x79\x4a\x65\xea\xde\xe8\x58\x55\xa3\xef\xc3\x11\xde\x63\x78\x12\x9f\x8a\x57\x64\xae\x75\xa1\x5e\x9d\x9f\xcf\x98\x1e\xdf\xfd\x51\x8d\x99\x38\x4f\x44\x9e\x97\x9c\xe9\xe5\x39\x46\x1b\xb1\x49\xa9\x85\x54\xe7\x29\x2c\x20\x3b\x57\x6c\x36\xa2\x32\x99\x33\x0d\x89\x2e\x25\x9c\xd3\x82\x8d\x12\xc1\x17\xc0\xd1\x7f\x31\xce\xd3\x5f\x7b\x92\x9e\x56\x87\x6f\xb1\x09\x74\xa8\xc8\x05\x8c\x4a\x7e\xc7\xc5\x3d\x1f\xa1\x79\x4f\xed\xc5\x30\x76\x8b\x5a\xf5\x2d\x60\x0d\xf7\x09\x6a\x2d\xc4\x1e\x36\xc1\x27\x5f\x59\x33\x45\x23\xca\xd3\x91\x0d\xd5\x7a\xda\x05\xee\xe2\x56\x1d\xd5\xe1\xa0\xbb\x53\xd7\xcd\x1a\x44\x13\xcd\x16\xd0\x29\x28\xd1\xb7\x30\xc5\xe0\xa3\xcf\xba\x4a\x4b\x69\xf7\x52\x23\x4a\xd1\x87\x68\xe4\x74\x89\x32\x3c\x12\x4b\x84\x15\xde\xb8\x48\xc1\xb9\x1c\x17\x7b\x84\x0e\xfa\x76\x63\xd8\xf2\xad\xd1\x36\x5d\xa4\x23\x7a\x74\x97\x4a\x43\x6e\xaf\x02\x3b\x5a\xb6\x24\x5a\x2e\x6d\x78\xa4\xbc\x23\x4c\xfb\x98\x43\xa3\xde\xdf\xe1\x73\x4a\x89\x84\xa1\x48\x5f\x2f\x5b\x37\x5d\xc5\x7b\xb5\x28\x29\x84\x62\xf8\x5e\x4e\x70\xd9\xaf\xbf\xee\x32\x4f\x23\xfc\xe8\x0f\xff\xb2\xcf\x3e\x9a\x22\xb0\xe6\x9e\xde\xf6\x76\x78\xee\xb4\x99\xf3\xec\x96\xfe\x58\x79\xab\xa0\x11\x44\x13\xc1\x95\x96\x94\x6d\xc7\x92\xd8\xdc\x3a\x86\x44\x74\x8f\x3b\x20\xb8\x3b\x2f\x3a\x4d\x0a\x59\xcf\x2a\xf0\x02\x0b\x6e\x79\x3f\xd5\xcd\x89\xb1\x50\x13\x3e\x3b\x66\x4f\x76\x6b\x5b\xe7\x39\x22\x41\xf3\x64\x7f\x6d\x81\x7d\xd3\x37\xa8\x6f\xdc\x54\xef\x75\x39\xe3\xa2\xfa\xf8\xed\x67\x48\xca\x5d\x31\xd9\xd6\x5b\xa8\xdb\xdd\x36\x23\xed\x79\x33\xb5\x8b\x5e\xb6\xd4\x1b\x0e\xe1\xbf\x70\x42\xa5\xc0\xf5\x72\xd2\xa5\xa2\x9a\xa9\xe9\xbe\x8e\x60\xdf\xcc\xaa\x56\xeb\x0e\x8d\x50\xae\xea\xc4\x54\x61\x71\x28\x33\xd8\xfc\x6c\xa6\x91\x73\x26\x73\x21\xd4\x3e\x66\xa2\x66\xa3\x76\xd3\xe1\x3b\x2c\x98\xb0\x01\x4a\x88\x39\x20\x49\x6e\xd8\xa6\xbb\xe2\x1b\x44\x59\xd7\x60\xfd\x33\xb6\xaf\xae\xee\x1b\x9a\xfb\xaa\xcd\xe1\x03\x71\xcc\xe0\xe8\xde\x32\x7f\xcc\x50\x58\x57\x9a\xa8\x32\x37\xa4\xdc\x03\x9b\xcd\xb5\x3a\x23\x6c\xbc\xb7\xbd\xc8\x37\x73\x8c\x80\x26\xf3\xc6\x2b\xe4\x00\xba\x55\x2c\xbb\x79\xf6\x9a\x3e\xd0\x93\x07\x21\x8d\x1e\x6f\x0e\xdf\xe1\xac\x92\x1b\x56\x8f\xc4\xc6\x6d\x70\x46\x40\x27\xe3\xd3\xfd\xe3\x2a\x6c\xab\xc1\xeb\xcc\x2c\x4e\x96\x84\x69\x30\x97\x31\xaa\xfe\x52\x94\x33\x3b\xd7\xe0\x53\xc4\x70\x0e\xaa\xec\x7b\x0c\x7b\x4b\xd3\xfd\x4d\x12\xbe\x1d\xd9\x45\x3b\x32\x27\x06\xe7\xb6\xcc\x3d\xf4\x32\xae\x00\x3a\xc0\xa1\x42\x9c\x90\xa0\x0a\x61\xcd\x64\xab\xae\xf1\xff\xb5\xa7\x03\xbc\xd9\xcc\x50\x27\xea\xb4\xde\x5a\x73\x36\x9b\xfb\x9d\x45\x9d\x7c\xd0\xde\x91\xdd\x36\x58\xf7\xb0\x10\xdb\x3a\x06\x87\xd8\x16\x87\x0b\x36\x92\xde\xeb\xe3\xd9\x38\x12\x1a\x64\x5e\x2d\x1b\x9e\x1a\xbc\x56\x9c\x5b\xda\x17\x71\x77\x87\x95\xbc\xe8\x4c\xc5\x89\x39\xe5\x84\x19\x0d\xd2\xf0\xa9\x91\x28\x4e\xc7\xe4\x82\xf0\xb2\x62\xcb\x0f\x11\xc6\x45\x45\x97\xeb\xc8\x10\xab\x44\xdd\x57\x57\x6e\x1d\x72\x95\xda\xd6\x2d\x1a\xb3\xd9\x46\x6e\x06\xe0\xf1\xb2\x2b\x0f\x75\x62\xd7\xa8\x63\x07\x61\x62\x81\xef\xc3\xbf\x45\xf7\x3e\x56\x61\xd1\x2d\x5f\xa9\xa3\x7a\x41\xe6\x67\x4d\x39\xbe\xe2\x01\x6d\x76\x63\xe7\xa2\xeb\xae\x20\x71\x76\x06\x89\x34\xaf\x24\x28\xc0\x7c\x73\x5b\x99\xe5\x0a\x42\xa3\x35\xdb\xad\xfb\x72\xb2\xc4\x6f\xf7\x8c\xbd\xdf\xde\x42\x99\x6b\xdd\x82\xd8\x6c\xdd\x62\x31\xdc\xba\xad\xee\xde\x38\xd1\xea\x11\x08\xc3\xe1\xe2\xc4\xb0\x6f\x19\x20\xce\xe9\xb1\x2d\x9c\xc3\xd6\x6d\xff\x28\xf8\x6d\xfd\x44\x5b\x8e\x58\x2c\xc2\xb6\x0e\x71\xf4\x9b\xdb\x5a\x70\xdb\xd3\x84\xd5\x6f\x6e\x01\xf1\xb1\x9b\x5a\xd7\x10\xfc\xcd\x2d\x3e\xa3\x30\xed\xfa\x19\xa2\xf4\x37\xb7\x9d\x62\xf7\xcf\xda\x81\xfb\xe4\x3b\x6d\x19\xd3\xbb\xa0\x5b\xb6\x6e\x91\x57\xbc\x5b\xc0\xff\xe6\xf6\x34\xeb\x7d\xf1\x7c\x29\x01\x9b\xdb\x81\x13\x05\xf6\x24\x6a\x3b\x41\xdf\x69\x43\xcc\x3b\x7d\xd6\xf8\x71\x24\x6a\x1a\x24\x58\x98\x3d\x1f\x55\xee\x14\xec\x33\x07\x38\xe1\x1d\x92\x98\xdc\x5a\x48\x40\xd4\x47\xcc\xfa\xe8\x64\x14\xde\xde\x76\xce\x9e\x08\xc9\x86\xd8\xdc\xe2\xc9\x6b\xb6\x45\x92\xda\x6c\x8b\xcc\x3d\xa2\x65\x59\x3c\x7b\xe7\xa8\x27\x7c\x6b\x9d\x91\x07\x54\x11\xac\x3b\x74\x50\x11\x1e\x6d\x83\x8a\x30\xa8\x08\x8f\xb7\x41\x45\x58\x6f\x83\x8a\x30\xa8\x08\x41\x6d\x50\x11\x1e\x6d\x83\x8a\xf0\x68\x1b\x54\x84\xba\x0d\x2a\x42\xff\x55\x84\xd0\x0c\xd9\xcd\xcd\xfa\x5b\xa2\xb9\x7d\xfe\x62\xdd\x8d\xab\x7e\x1e\x54\x6e\x7c\x98\x7b\xdb\xe1\x63\xa4\xe8\x1b\x27\x6a\xdc\xa2\x93\xc8\x25\x7b\x4b\xca\x67\x40\x5e\x8e\x5e\xbe\xd8\x3b\xa9\xa2\xd9\x42\x62\xd3\x9b\x6d\x5f\xd0\xa8\xf5\x16\x7d\x67\x6c\x8b\x5f\xe8\x5f\x48\x8f\xe3\xec\x55\x5c\x45\x4b\xf9\xdc\x12\x5f\x53\x55\x24\xc8\x41\xef\x9f\x10\xe1\x5b\xd3\x31\xcd\x72\xa8\x82\xde\x2c\x5b\x77\x69\x3c\x75\x52\xac\xe0\x2e\x40\xc2\x6c\xcb\xae\xdb\xae\xd3\xdb\x26\x40\x6d\xb2\xf9\x04\xcc\x1b\x77\x0d\x25\xd2\x44\x89\x1c\x2c\x5c\x9b\xbf\x3a\xcc\xeb\x82\xdf\x06\xe4\x04\xc6\xb3\x31\x49\x4b\x70\x30\x08\x36\xeb\xe4\xf4\xac\x11\x9c\xd9\x35\x96\xc8\x08\x3c\x12\xff\x63\x26\xd6\xc5\x74\xc2\x02\xb8\x2e\x69\x96\x2d\x09\x2c\x58\xa2\xab\x15\xc0\xe4\x2c\xa6\x55\xc0\x5c\x07\xab\xa2\xa1\xea\xe7\x68\x8d\x7f\x75\x13\x4f\xc2\xf5\xc4\x35\x3a\xba\xf3\xf4\xd6\x99\xbf\x76\x33\x34\xde\x6a\x49\xd2\x66\x34\x1b\x90\x86\xff\xc4\x83\xfb\xf1\xba\x6b\xec\x0e\x89\x24\x8f\x04\xcb\x20\x31\x55\x03\x17\x30\x23\xa4\x0b\xe9\x59\x9f\xc1\x0d\x21\x33\x1b\xf0\x3f\xf6\xce\xcd\x6f\x37\x3d\x87\xbc\x0b\x86\xc8\xa6\x66\x68\xbb\x15\x85\xc8\xc4\x6c\xd9\xdc\x78\xae\x6e\x7f\x8d\x76\x4e\x89\x2a\x27\x4e\xb9\x35\x67\xff\xc3\xca\x4e\x1d\x82\x3d\xb6\xb6\x21\xd8\x63\xad\x0d\x96\xdc\xc1\x92\xbb\x47\x3f\x83\x25\x77\xb0\xe4\x0e\x96\xdc\xc1\x92\xdb\xb5\x0d\x96\xdc\xbd\x88\x1a\x2c\xb9\x64\xb0\xe4\x6e\x6d\x83\x25\xd7\xb5\x21\xd8\x63\x63\x1b\x54\x84\x7d\xdb\xa0\x22\x84\xf7\x33\xa8\x08\x83\x8a\x30\xa8\x08\x83\x8a\xd0\xb5\x0d\x2a\xc2\x5e\x44\x0d\x2a\x02\x19\x54\x84\xad\x6d\x50\x11\xd6\x3b\x8e\x16\xec\xf1\x04\xe4\xc6\x24\xb4\x10\x69\x74\x38\x97\x42\xa4\x0f\xa0\xb9\x58\x5f\x78\x22\x46\x99\x48\x28\xd6\x12\x64\xf6\x27\x2e\x06\x45\xd1\xdc\x86\x02\x9c\x91\x7f\x08\x0e\x16\x03\xc2\xd6\xee\xcc\x81\x08\x3d\x07\x2c\xd3\x75\xa2\x4e\x3b\x24\xb2\x0f\x68\x30\xbb\xb4\x01\x0d\x66\x40\x83\x19\xd0\x60\x9e\x17\x0d\x66\x4e\x95\x2b\x71\x81\x42\xd1\x76\x70\x98\x06\xc7\xbe\x05\x99\x0f\xd8\x30\x8f\xb5\x35\x5d\xdc\x1d\x1f\xb3\xc2\x8d\xcd\x6e\x67\x3c\x75\xe1\x94\x90\x5e\xb5\xe7\xd9\x19\xee\x70\x5a\x68\x9a\x42\x4a\x0a\x90\x23\x7b\x78\x04\x99\x32\x57\x61\x66\xe5\x34\xbb\x19\xee\xca\x10\x7b\x02\xb8\xd2\x9e\x89\x80\x9e\x0e\x8f\xba\xd2\x7e\x95\x68\xa1\x4a\xcd\x88\xad\x96\xf8\xf3\xc5\x61\xb0\xc4\xb1\x17\x8e\x88\x76\x61\x4a\x3f\x04\x59\x0c\x63\x99\xf7\xd0\xfc\x76\xb3\x57\x4d\xd9\xed\x2d\xb6\x49\xc3\x17\xea\xfc\x9f\x12\xe4\x92\x88\x05\xc8\xda\x58\xe5\x6f\x5a\xe5\x62\xb4\x11\x0b\xdf\xd5\xa1\x0d\x57\x4d\x2f\xa7\x16\x65\x8a\x97\x59\x76\x66\x7b\x5f\x65\x7b\xfe\x22\xb2\x95\x97\x84\xf9\x3e\x92\xf7\x22\x8a\x81\x3b\xa6\xfd\x37\x76\x24\x19\xe9\x59\xc5\xda\xed\x2d\xae\x79\x22\xa2\x71\xe2\x89\xac\x87\x7d\xa9\x8c\xbb\xbd\x3d\xa5\x7f\x89\xc4\xf6\x31\x91\xc8\x7e\x26\x12\xd1\xd7\x44\xe2\xfa\x9b\x48\x74\x9f\x13\x89\xe9\x77\x22\xcf\x5e\xe9\x77\x7b\x8b\x6e\x56\x8c\xed\x8a\x22\x4f\xc6\x60\xc8\x73\x57\x14\xde\xde\x9e\xa7\xd6\xf0\xf6\xf6\x04\xbb\x20\xa6\x7b\x8a\x3c\xe9\x1e\x38\x48\x4d\xe3\xed\xad\x97\x4e\xab\x07\x09\x7b\xf2\x3a\xc8\xdb\x5b\x74\x1f\x10\x79\x02\x3f\x10\x89\xed\x0b\x22\x4f\x73\x64\x9f\xd8\x27\xf4\x0c\x03\x74\xaa\xde\xbc\xbd\x3d\x05\xcf\x39\x68\xc5\xe7\x87\xc8\x3a\x60\x2d\xe8\xed\xed\xf0\x55\xa2\xb7\xb7\xc8\xd2\x79\x68\x65\xe9\xc7\x08\x8d\xc2\x2a\x9e\xc6\xfd\x4a\x5a\xe7\xe2\x07\x58\xc6\x0d\xfe\x8c\x70\x72\xdf\xb7\xa8\xf3\xea\xa7\x76\x35\xec\x6a\xa9\x1d\x7d\x6d\x56\x60\x77\x3e\x02\x57\x11\x3b\xcb\x82\x69\x98\x00\xd1\xf4\x0e\x30\xe2\x42\x60\x39\x12\x96\x82\xad\x5b\x63\xb7\x3a\x8e\x6f\xb6\x78\xa9\x20\x35\x84\x64\x42\xdc\x95\x85\x3f\x2a\x98\x56\x1c\xe3\x60\x32\x9e\x88\xdc\xe7\x4f\xdb\x6c\x3a\x73\xe2\x1d\x2f\x18\xd9\x3a\x63\xf6\x73\x24\x07\x2f\x69\x67\x54\xfd\x7b\xcb\xc8\xf7\x77\x42\x15\xf9\x3b\xaa\x3f\x9c\x9c\xe0\x0f\x4f\xff\x1e\x1e\x9a\x59\x2d\x81\xf5\xcb\x89\x12\x39\xec\x4a\x91\xf2\xf6\xea\x3c\x34\xbb\xc1\x04\xf9\xda\x28\xcd\x89\x3b\xb6\xfe\xf4\x13\xca\x35\x3b\xad\x4c\xd1\x63\x82\xfb\x0b\x75\xbf\x54\xf0\x63\x6d\xa9\xf6\x5c\xdf\x77\x10\x1e\x91\x59\xad\x5c\x1d\xd9\x63\x3d\xdc\x63\x57\xf6\xdd\x56\xe1\xab\x6a\xc6\x59\x19\x2f\x78\xdc\x5b\x1f\x3b\xe0\x54\xde\xa9\x90\x13\x96\xa6\x80\x85\x36\xab\x57\x9d\x08\x0f\x8d\x51\x1f\x39\xc3\xf7\x5b\x7b\x27\x9c\x98\x8b\x4c\x89\xb3\xd5\x71\x12\xca\x3d\xf8\x01\x68\x5b\xad\xb3\x35\x2c\x61\xca\x2c\x8b\x82\x60\xf5\xab\x77\xe1\xe1\x4f\x75\x4f\x44\x4e\x11\x60\xaa\xe7\x77\xc5\x2a\x81\xc3\x75\x11\xfd\xba\xe0\x42\x0f\x37\xc6\x70\x63\xac\xdc\x18\x6b\x07\xef\xe9\x2e\x8d\xb5\xa1\x86\x7b\xa3\xe7\xf7\x06\xa7\x39\xa8\x82\x26\xf0\x05\x79\x98\xad\xf9\xdf\xe6\xad\x79\xf2\x55\xa3\x9c\x36\xc8\x3c\xaa\x57\xc0\x43\xd5\xe0\x8d\x85\xfd\xa6\x3e\x14\xaa\xe4\x8d\x5a\xab\x0d\x62\x2c\xdf\x5c\x8d\xfa\x0b\xa6\xc4\xab\xf9\x82\x83\x42\xe7\x2b\x54\xb1\xa7\x8d\xc1\x71\xac\xf0\xd7\x46\x08\x9a\xda\xcd\xc2\xd3\x55\x50\x9a\x7a\x44\xf4\x03\xe7\x40\xb9\x22\x47\x3e\x28\xf6\x58\xd5\x4f\xec\x58\x54\xf9\xa1\x56\x95\xb7\xaa\x28\x3a\xf9\x3f\xff\xf7\xb4\x55\xd2\xaa\x26\x68\xf0\xf2\xef\xdc\x06\x2f\x7f\x50\x1b\xbc\xfc\x83\x97\x3f\x46\x5f\x83\x97\x7f\xf0\xf2\x6f\x6c\x83\x97\x7f\xf0\xf2\x0f\x5e\xfe\xc1\xcb\xbf\xde\x06\x2f\xff\xe0\xe5\x6f\xb4\xc1\xcb\xdf\x9d\xac\xc1\xcb\xbf\x67\x1b\xbc\xfc\x31\xbd\xfc\xb5\xe1\xa2\x6f\xd6\xb7\xa6\x49\xcb\x65\xb2\xa2\xf6\xa9\xa9\x66\x49\x8d\x1e\xe5\x9f\xb2\xff\xea\x97\x29\xae\x69\x26\x7b\x1a\x43\x5c\xd3\xd8\xb7\x66\x4f\x8d\x64\x87\xdb\x6a\x75\xab\xec\x72\x6b\x23\x3f\xa9\x41\x6e\x30\xb7\x77\xa3\xb2\x4e\x2d\xeb\xdb\x51\xbf\xf5\x60\x06\x6a\x2e\xca\x2c\x35\xc2\x6d\x85\x74\x90\x92\x13\xef\x59\x3b\x35\x5b\x91\x0b\xdd\xfe\x92\x6b\x36\xaa\x9f\xa8\x12\x05\xd1\x2d\xe8\xab\x79\x84\x2f\xb1\xb7\x11\xd4\xde\x23\x87\xbb\x50\x25\xd9\xd7\xa7\xc3\xdc\xd0\x20\x5b\xef\xc0\x14\x49\x61\xca\xb8\x05\x69\x91\x25\xe7\x46\x38\x17\xdc\xe5\xd0\x07\xd3\x67\x45\x02\xeb\xea\x73\x7c\xc8\x9a\x34\x70\x3e\xd0\xae\x51\x2f\x7f\x23\x4d\x9a\x22\x13\xa5\xdc\xe1\xbc\x0b\xee\x9c\xaa\xe6\x13\xdb\x4f\x30\x69\x15\x8b\xc2\x15\x61\xd5\xdb\x87\x73\xa7\xb7\xc8\x95\x9a\x2f\xc6\x14\xee\x0f\x9a\x65\xe2\x3e\x5c\xda\x88\x72\xae\x23\x97\xad\x09\x3c\x6d\xf7\x7b\x57\xbd\x59\xc9\xfd\x0d\xd3\x6c\x87\x82\x39\x3b\xb6\xa1\x60\xce\xe3\x6d\x28\x98\xf3\x70\xc1\x9c\x46\x64\x53\xb3\x72\x4e\xd7\xd9\xc6\x7a\x3b\x07\xa8\x9c\x43\xc8\x5f\xe6\x80\x7c\x43\x82\x0d\x47\x2a\x33\xcd\x8a\x1a\x11\x4d\xd9\x95\xcf\xac\x21\x6e\xea\x90\x75\xda\x5c\xcc\xd0\x48\x93\x79\x47\x02\x56\x78\x20\x52\x81\xb8\x6b\x0a\x6f\x36\x8b\x28\x83\x7e\x60\x5b\x56\xc6\x5b\xe8\x2c\xb0\x0f\xfb\xf2\xf1\x3f\x02\x6e\x9d\x37\x28\xf6\xb4\xe3\xed\x14\x39\x31\xd2\x52\xb6\x74\x51\x67\xad\xeb\xa7\x25\x66\x75\x1e\xd6\x7a\x11\x16\xe0\x55\xb4\x19\x5b\x00\xaf\x65\xb4\x13\x75\x7a\xea\x75\xc5\x55\xd9\xb3\xf3\x98\x21\x32\x6b\xf7\x7b\x75\x5f\x59\x73\x45\x56\xec\x3c\xee\x06\x19\xf3\xdf\x1a\xb2\xd8\xbf\x3f\x2e\x65\x76\x1e\xda\xb2\x36\x0f\xb7\xd4\xd8\x56\xb5\x74\xd9\xb1\xef\x9e\x60\xc7\x84\xc3\x80\xc4\xf0\xc3\x46\x83\xff\x88\x5b\x9f\xea\x10\xb0\x1f\x07\x80\xfc\xf8\x25\x15\x8c\xea\x65\xf0\x4f\xef\xec\x4c\x4f\x81\x16\xdf\xeb\x60\x9f\x01\x2e\x3e\xa8\x9f\x5f\x14\x5c\xfc\x81\x82\x79\x7e\x81\xa8\xf1\x3d\x08\xde\x39\x64\xe0\xce\x2f\x0e\x35\xbe\x47\x81\x3a\xbd\x0c\xd2\xe9\x5b\x80\xce\x00\xc3\x1e\xd4\xbe\x4c\x18\xf6\xa8\x41\x38\xb1\xf9\x48\x0f\x83\x6f\x7a\x18\x78\xd3\xd7\xa0\x9b\x88\x92\xf2\xd3\x04\xdb\x44\x62\x01\x4f\x13\x64\x13\x2f\x35\x3a\xe6\xa9\x3c\x34\x7c\x46\x2f\x72\xa1\xfb\x0c\x9b\xd1\xab\x04\xe8\x7e\x25\x3f\x1f\x22\xf1\xb9\x37\x30\x19\x07\x84\xc8\x88\x23\x06\x46\x10\xfe\x9e\x82\xdf\xc7\x93\xc5\xa2\xc2\x61\x44\xe5\xf9\x87\x87\xc1\xf8\x6a\xd9\x7e\x44\xf8\x8b\x81\xf3\x6f\x6d\x7d\xe7\xfc\x4f\x0d\x77\x71\x58\xa8\x8b\x81\xff\xef\xd4\xa2\xc2\x5a\x3c\xb1\xe7\xf4\x39\xe1\x2c\xfa\x01\x65\xf1\x6c\x30\x16\xfd\x81\xb0\x78\x36\xf8\x8a\xc1\x63\x3d\x78\xac\xdb\x6d\xf0\x58\x0f\x1e\xeb\x7d\xfa\x19\x3c\xd6\x83\xc7\x7a\xf0\x58\x0f\x1e\xeb\xc0\x36\x78\xac\x3b\x12\x35\x78\xac\x37\xb7\xc1\x63\x3d\x78\xac\x07\x8f\xf5\x5a\x1b\x3c\xd6\x41\x04\xf6\xd4\x63\x1d\x07\x12\x22\xe6\x89\xec\x13\x14\x44\x1f\x60\x20\x9e\x0b\x02\xa2\x77\xf0\x0f\x83\x09\x7a\x37\xea\xe2\x40\x3d\xc4\x3c\xc2\xfd\x86\x78\xe8\x33\xbc\x43\x4f\xa1\x1d\x9e\x06\xd6\xe1\x29\x21\x1d\x82\xcf\x6c\xd4\xd3\x5a\x88\xf4\x82\x6b\xe6\x53\xc8\xf6\x3f\xa7\xad\xd3\xf9\x06\xff\x98\x80\x3d\x63\xad\x03\xd3\xcc\x93\x97\x65\x06\xca\xa5\x89\xd3\x85\x60\x29\x29\x4a\xad\x6d\xe6\xad\x3b\x9f\x7e\xe3\xd3\xdc\x66\xca\x9f\x91\x7f\x08\x0e\x67\x04\x74\x32\x36\x9b\x1b\x73\xd0\x85\x9e\x83\x34\x8f\x9f\xa8\xd3\xd3\xfd\xd7\x24\x48\x3e\x0b\x33\xed\x15\x12\xa6\x20\xbf\x08\x64\x05\xf4\x3c\x3b\xf8\x02\x69\x1d\xde\x96\x7a\x0c\x11\x70\x5f\xd8\xe3\xa7\x85\xcb\x7a\xc7\x63\x6f\xd3\xce\xbb\xde\x90\x88\x6f\xd0\xda\x40\xd0\x70\x73\x6c\xc1\x38\x38\x23\x93\x52\x13\xa6\x11\x18\x20\x99\x0b\xa1\xba\x72\x17\x97\xa4\x8c\x2f\xb2\x60\xc2\x9a\xd3\x05\x07\x44\x1d\x10\xb2\xe2\x81\x0d\xa2\xac\x2a\x51\xff\x8c\x75\x55\xb6\x72\xa1\x74\xbd\x43\xbc\x71\xd6\x0c\x5e\xdd\x39\x33\x09\x86\x22\x4d\x54\x99\x1b\x52\x2c\xa0\x8a\xb2\x10\x00\x1d\x87\x9d\x1a\x11\x8b\x26\xf3\xc6\x2b\xe4\x00\xda\xba\xe6\x7c\x96\x73\xe3\x10\x37\x75\xa6\x13\x9f\xf3\xda\x71\x6c\xd3\x19\x28\x7d\xb6\x15\x71\x64\xfb\x5e\xb0\x3c\xe1\xb4\xab\x51\x2a\x11\x79\x51\x6a\x30\x72\x7c\x99\x9b\xdd\xc4\x34\x46\xac\x20\x33\x92\xa2\x9c\xd9\x09\xf7\x20\x0f\x76\x22\x6a\x04\x11\x9e\x12\x55\x4e\xb4\xa4\x89\xee\x7e\xfb\x1f\xd9\xe5\x3b\xaa\x02\x8b\x90\x16\x36\xad\x70\x42\xc8\x9c\xaa\x66\xc4\x4d\x7d\xbd\x3e\x82\x93\xf3\xbf\x02\x2e\x58\x33\xf0\x89\x6a\x08\x3a\x73\x36\x9b\xfb\x3d\x67\x94\x64\x34\x2d\xb4\xf6\xea\x97\x0e\x30\x61\x0e\xb0\x3b\x4a\x28\xb5\xd4\x1b\xdf\xce\x78\x4a\xfe\x82\xdf\x42\xba\x9a\x76\x8d\xdb\xc1\xda\x0e\x68\x9a\x1a\x79\x04\xe4\xc8\x1e\x24\x41\xa6\xcc\x69\x4a\x2b\x27\xdb\xcd\x70\x57\x0e\xd9\x0f\x90\x80\x95\x1d\x17\xd0\x93\x9d\xf9\x8e\x1d\xc4\x70\xb5\xad\xbc\x4a\x34\xa5\xe5\xda\x4d\xf3\x98\x5c\x58\xc1\xc8\xb3\x31\xa3\xc1\x9f\xad\xc1\x60\xad\x9f\x6a\x3b\x33\x3d\x08\x8a\x88\xe3\xaf\x8d\x81\x2c\x41\x22\xba\x57\xa3\x21\x4c\x90\xe7\x29\xff\xf3\x0c\x48\x13\xe4\x30\x68\x13\x64\x28\x3d\xd3\xaf\x58\x1e\x32\x94\x9e\xe9\x59\x6c\x0f\x19\x4a\xcf\x0c\xa5\x67\xba\xb7\x3e\xc4\xfe\x90\xa1\xf4\x4c\x0f\x62\x81\xc8\x50\x7a\x66\x97\x36\x94\x9e\x19\x4a\xcf\xac\xb7\xa1\xf4\xcc\x50\x7a\xa6\xd1\x86\xd2\x33\xdd\xc9\xea\x5d\x3c\x11\xe9\x71\x4c\x11\x19\x4a\xcf\x44\x2e\x3d\x13\x2f\x4b\x9a\x3c\xc1\xc9\x3d\x34\x42\x06\xe9\x4b\xba\x34\xe9\x39\x52\x06\xe9\x5b\xce\x34\xe9\x5d\xde\x34\x39\x50\xee\x34\xe9\x13\x72\x06\x39\x2c\x7a\x06\xe9\x63\x7e\xde\x97\x51\xb9\x28\x2a\xa2\x06\x79\x8a\xbb\xe2\xf0\xc8\x1a\xe4\x6b\xbf\x2e\x22\x22\x6c\x90\xe1\xc6\xd8\xa5\x7d\x09\x37\xc6\x53\x23\x6e\x90\x83\xa3\x6e\x90\xe1\xde\xe8\xda\xa2\x22\x71\x90\xe7\xf1\x30\x3f\x27\x22\x07\xe9\x0d\x2a\x07\x79\x4e\x64\x0e\xd2\x2b\x74\x0e\xf2\x9c\x08\x1d\x64\xf0\xf2\x0f\x5e\xfe\x9d\xdb\xe0\xe5\x1f\xbc\xfc\x31\xfa\x1a\xbc\xfc\x83\x97\x7f\x63\x1b\xbc\xfc\x83\x97\x7f\xf0\xf2\x0f\x5e\xfe\xf5\x36\x78\xf9\x07\x2f\x7f\xa3\x0d\x5e\xfe\xee\x64\x0d\x5e\xfe\x3d\xdb\xe0\xe5\x8f\xe9\xe5\x8f\x83\x26\x42\x9e\xe0\xd4\xf6\x09\x55\x84\xf4\x04\x59\x84\x3c\x23\xba\x08\xe9\x23\xc2\x08\x19\xcc\xed\x9d\xa9\x8c\x83\x3a\x42\x9e\xe0\xa8\xf7\x1b\x7d\x84\xf4\x1c\x81\x84\xf4\x17\x85\x84\x3c\x19\x12\x09\x79\x62\x34\x12\x12\xeb\x5c\xdb\x14\xd5\xbe\xe0\xfc\x58\x6a\xd6\x32\x6b\x5b\x15\xfe\x1f\x4c\x9c\x0f\xd3\x6c\xdd\xa1\x91\x94\xcf\x80\xbc\x1c\xbd\x7c\xf1\x22\x3c\x77\x97\x71\x0d\x33\x08\xb1\x5e\x4e\x85\xcc\xa9\xc6\x9e\x7e\xf7\xdb\x4e\xfd\x44\x67\xdb\xdb\xe0\x1e\xfa\x07\x83\xe2\x6c\x22\x6d\x18\x8a\x96\xf4\xbf\x05\x93\x04\xb5\x02\x73\x5a\x73\xd0\xa4\xb3\x6f\xa0\x01\xbc\xa1\x59\x0e\x67\x9e\xf7\xdb\x98\x08\x1f\x00\xe0\xd0\x58\x52\x22\xb8\x13\xd9\x0c\xbb\xeb\xba\xf7\xba\xbf\x72\x02\x54\x21\xf2\xc1\x04\xcc\x6b\x77\x1c\x9f\x6a\x0b\xf3\x53\x08\xc6\xb5\x37\xf4\x98\x77\x06\xbf\x21\x1c\x86\x50\x5a\x82\xb5\xa0\xd6\x31\x4e\x65\x91\x52\x0d\xa7\x21\xaa\xa2\x5a\x2a\x0d\x39\x42\xc9\x18\x49\x8f\x62\xf0\x0f\xd1\x72\x89\x01\x20\x0b\xe0\xba\xa4\x59\xb6\x24\xb0\x60\x2e\x7e\xc7\x0c\x8f\xd1\x4b\x4c\xab\xa0\x99\xff\xcb\x1c\x90\x83\x48\xb0\x81\x49\x65\xa6\x59\x91\xd5\x28\x24\x76\xf9\x33\x6b\x92\x9b\x3a\xd0\x9d\x36\x3f\x33\x34\xd2\x64\xde\x91\x80\x15\x6e\x88\x54\x18\x06\x24\x15\xde\x71\x16\x67\x06\x3d\xc2\x46\x55\x50\x95\xad\xce\x62\xfe\xb0\x2f\x1f\x09\x24\xe0\xfe\x79\x83\x02\x50\x3b\xf2\x4e\x91\x13\x23\x37\x65\x4b\x17\x7f\xd6\xba\x88\x5a\x02\x57\xe7\x61\xad\x3f\x61\x01\x5e\x59\x9b\xb1\x05\xf0\x5a\x5a\x3b\x51\xa7\xa7\x5e\x6b\x5c\x95\x42\x3b\x8f\x19\x22\xbd\x76\xbf\x61\xf7\x95\x3a\x57\xa4\xc6\xce\xe3\x6e\x90\x36\xff\xad\x21\x95\xfd\xfb\xe3\xf2\x66\xe7\xa1\x2d\x6b\xf3\x20\x4c\x8d\x6d\x55\xcb\x99\x1d\xfb\xee\x09\x8a\x4c\x38\x20\x48\x0c\x8f\x6c\x34\x20\x90\x27\x2e\x98\xf4\x0c\x00\x20\x07\x00\xff\x18\x0a\xf7\x0c\x85\x7b\xda\x6d\x28\xdc\x33\x14\xee\xd9\xa7\x9f\xa1\x70\xcf\x50\xb8\x67\x28\xdc\x33\x14\xee\x09\x6c\x3d\x0a\xd9\xe9\x65\xb8\x4e\xdf\x42\x75\x86\xc2\x3d\x41\x6d\x28\xdc\x33\x14\xee\x19\x0a\xf7\x34\xda\x50\xb8\x27\xe4\x68\xc6\x4b\x92\x8e\x79\x2a\x0f\x0d\xa4\xd1\x8b\xac\xe8\x3e\x03\x68\xf4\x2a\x15\xba\x5f\x69\xd0\x87\x48\x81\xee\x0d\x60\xc6\x01\xc1\x32\x86\x3a\x4f\x3b\xb5\xa8\xc0\x18\x51\x79\xfe\xe1\x01\x31\xbe\x5a\xb6\x1f\x11\x08\x63\xe0\xfc\x5b\x5b\xdf\x39\xff\x53\x03\x5f\x1c\x16\xf4\x62\xe0\xff\x3b\xb5\xa8\x00\x17\x4f\xec\x39\x7d\x4e\x60\x8b\x7e\x80\x5a\x3c\x1b\xa0\x45\x7f\xc0\x2c\x9e\x0d\xc8\x62\xf0\x58\x0f\x1e\xeb\x76\x1b\x3c\xd6\x83\xc7\x7a\x9f\x7e\x06\x8f\xf5\xe0\xb1\x1e\x3c\xd6\x83\xc7\x3a\xb0\x0d\x1e\xeb\x8e\x44\x0d\x1e\xeb\xcd\x6d\xf0\x58\x0f\x1e\xeb\xc1\x63\xbd\xd6\x06\x8f\x75\x10\x81\x3d\xf5\x58\xc7\x01\x87\x88\x79\x22\xfb\x04\x0a\xd1\x07\x40\x88\xe7\x02\x83\xe8\x1d\x10\xc4\x60\x82\xde\x8d\xba\x38\xa0\x0f\x31\x8f\x70\xbf\xc1\x1e\xfa\x0c\xf4\xd0\x53\x90\x87\xa7\x01\x78\x78\x4a\x70\x87\xe0\x33\x1b\xed\xb4\xd2\x52\x8b\x5c\x94\x5c\xdf\x80\x5c\xb0\x04\x2e\x92\xc4\xfc\x75\x2b\xee\x60\xcf\xac\xfe\xd6\x11\xbd\x78\xa0\x5b\xc2\x78\xca\x12\xb4\x4d\xde\xcf\x41\xcf\x5d\xda\x1c\x3e\x47\xa8\x7d\x90\x68\x7c\xb2\x3e\xa1\x48\xa7\xb9\x63\x31\xb3\x1b\xbb\xde\x77\x09\xec\x0c\x4d\x84\xc8\x80\xee\xe3\x8a\x76\x32\x23\xc8\x3d\x19\x75\x18\xcf\x7a\xe7\x44\x89\x7a\x74\x32\x81\x4c\xf0\x99\xcb\x21\x77\x5c\x67\xdf\x5d\xf8\xba\xee\xce\xb9\x6a\x93\x52\x4a\xe0\x3a\x5b\xe2\x34\xa7\x29\xa4\x04\xcd\x53\xb9\x58\xec\xbf\xc9\x6f\x91\x1d\x79\x1d\x9e\x6a\x92\x01\x35\xef\xc1\xa1\x7e\x11\xc3\xd0\x28\xb9\xea\x40\x7b\xe5\x5b\xb6\x20\x02\x9d\xd6\x7f\xff\x1b\xbb\xd3\x1d\xdd\x3e\x0d\x5e\x2f\x43\x29\x2d\x41\x23\x5f\x63\x3e\x90\x41\x2e\x45\x49\xee\xa9\x55\xa5\x64\xc9\x91\xa5\xe2\x44\x75\x58\xe4\x00\xa5\xa3\xbb\x31\x7e\x84\xf7\xd2\x9e\x3f\x0b\x31\x8e\x53\x39\xeb\x24\x3a\xc5\x90\x25\x2e\xe4\xac\xb4\x9a\xa2\x3b\x8a\xc0\xb5\x5c\x22\x1e\x46\xb7\x7b\xe1\x76\xde\x3a\x21\x39\x9d\xc1\xb1\x22\xaf\xdf\xbf\x31\xb7\x0e\x46\x20\xb1\xa9\x95\xd9\xdd\x2d\x54\x48\xb1\x60\x69\xd7\x6b\xe8\x13\x95\x8c\x4e\x32\xa3\xf5\x4e\x41\x02\x37\x92\xf4\x37\x27\x9f\x2e\xae\xff\xf6\xe1\xe2\xfd\xdb\x53\xd4\x7f\xe1\x73\x41\xb9\x61\x07\xa5\xaa\x91\x79\x1c\x85\xc7\x8a\x00\x5f\x30\x29\xb8\x99\x05\xb4\x1b\x52\xb2\x70\x9d\x76\xa2\xa8\x0e\x1c\x91\xa0\x44\xb6\x80\xd4\x62\x69\x54\x04\xd6\xe1\x3b\x45\xa9\xbd\x05\xd5\xc7\xde\x94\x3c\x99\x53\x3e\x83\x74\x4c\xde\x88\xd2\xbc\xd8\x37\xdf\xe0\x4b\x48\x48\xcb\x04\xba\xe9\x38\xd6\x04\x6f\x4f\xee\x37\x67\x5e\x66\x31\xb7\x3f\xc6\xde\x10\x50\x09\x2d\xfc\xd4\x34\x67\x4f\x2d\xb9\xa6\x9f\x5f\x59\x2c\x8e\xa3\x6f\x1a\x5f\x1d\x75\x0f\x5c\x2b\xa4\x30\xaf\x62\x65\x41\xfb\xf6\x19\xd3\x20\x69\x46\x8e\x9a\x23\x8c\xc9\x5b\x43\x17\xa4\xcd\xb5\xb5\x60\x34\xb0\x00\x89\xb6\x55\xb7\xb2\x67\x44\xc2\x8c\xca\x34\x03\xd5\xcd\x28\x24\xa6\xd5\x15\x6e\x4d\x2d\x6e\x57\x41\x65\x33\xe6\x42\x8f\x43\x19\xb7\x6f\xef\x05\x82\x9d\x4c\xc5\x2b\x32\xd7\xba\x50\xaf\xce\xcf\x6b\x29\x68\xcc\xc4\x79\x2a\x12\x75\xae\xa9\xba\x53\xe7\x8c\x1b\xe6\x37\x4a\xa9\xa6\xa3\x06\xd7\x3d\xb7\xb2\xf1\x28\x11\x79\x4e\x79\x3a\xa2\xee\x1c\x8f\xaa\x9d\x7d\xfe\x6b\x27\x3d\x8e\x68\xf5\x14\xe3\x23\x3a\x52\x73\xe8\xb4\x72\x61\x8a\x62\x80\x82\x18\x28\x64\x46\x56\x08\xdd\x5c\x1e\x8a\x61\xbf\xad\xf8\xb3\x5d\x8a\x31\xf9\x20\xb4\xc3\x2b\x72\x11\x95\x78\xdb\xe2\x2a\xc7\x64\xe1\x6f\x3f\xdc\x5e\xff\xf5\xea\xe3\xe5\x87\xdb\x81\x93\x0f\x9c\x1c\xdb\xc0\xc9\x07\x4e\xde\x61\xe0\xbe\x70\x72\xe0\x8b\x43\x71\x71\xaf\x14\x37\x38\x56\xb5\x55\x5d\xa2\x40\x15\xe6\x5d\xed\x83\x6e\x5b\x34\xca\x4e\x3f\xd8\x8e\x69\x4d\xf6\x5b\xbe\xf8\x44\xdb\x11\x27\x7c\xe3\x14\x12\xf7\x80\xd5\xd0\x5f\x87\x4d\x60\xb0\xe7\x2b\x34\x2e\xac\x93\x42\x6a\x5b\x78\xcc\x96\x19\xba\xbb\xc1\x3b\x9e\xb9\xfb\x03\xcd\x2b\x5b\xed\xa6\x25\x0f\xb1\x62\xbe\xb7\x0e\x55\xe5\x0e\x25\xe5\x4b\x52\x48\xc6\x35\x6e\xa5\x8b\x9b\xd7\x97\x97\x24\x99\x53\x49\x13\x0d\x52\x11\xf8\x9c\x40\xa1\xc9\xf1\xff\x3e\xee\x3e\x66\x04\x5f\x07\x5a\xaf\xfb\xb0\x32\xfb\x08\x6e\x01\xc3\xd4\x22\x5f\x21\x61\xc1\x44\xa9\xb2\x65\xe5\x21\xd8\xcc\x47\x57\x19\x28\xa1\x3c\x84\x02\xb3\x2f\xbc\x79\x77\xe3\x80\x2b\x42\xe7\x26\x01\x32\xc4\xd6\x7e\x58\xd1\xd3\x11\x11\x43\x00\x0d\x18\x7f\x83\xe8\xba\xbb\x18\x1a\x30\x6e\x27\x01\x76\x9b\x30\x1a\x40\x47\x5b\x8c\x0d\xe8\xe8\x8d\xcd\xeb\x42\x61\xe3\x28\x60\x6a\x62\x71\xb2\x6f\xa5\xc8\x23\x71\xb3\x1b\x04\x2c\xac\xf2\xec\x36\x1d\xd5\x63\x17\xbc\xde\x52\x04\x9c\x4a\x5b\x65\xba\x99\xcf\x03\xb3\xdd\xa2\x44\xcd\xc4\x09\xbc\x4e\x04\x9f\xb2\xd9\x7b\x5a\xfc\x00\xcb\x6b\x98\x86\xf9\xea\xdb\xf3\x8d\x6e\x4b\x17\xfe\x8b\x17\xa8\x11\xb9\xec\x60\x61\xae\xcb\x68\x41\x47\xb1\x42\xf3\xc3\xc3\xf2\xe3\x45\xd1\x47\x89\xa0\x8f\x1f\x2c\xec\x52\x8e\x1b\x39\xb7\x3e\xc3\xb8\xde\x15\xc7\x8a\xbc\xa1\x9a\xc6\x2a\x72\x4c\x6c\x9e\xac\xbb\x12\xff\x83\x71\x2a\x97\x75\xff\x15\x3c\x7a\xed\x20\x34\x8b\x40\x67\x18\x66\x60\x53\x7b\x9d\x7c\x00\x7c\x61\x58\x44\xb4\xc4\x92\x28\x01\xa9\x61\x12\xb8\x6f\xf1\x17\xba\x29\x91\xbb\x6b\x31\x4a\x70\xfd\x6d\x8d\xf2\xce\x14\x81\xe9\x14\x12\xcd\x16\x90\x55\xc8\xf0\xe9\x19\x99\x94\xda\x63\xb2\x4f\x68\x72\x77\x4f\x65\xaa\x48\x22\xf2\x82\x6a\x36\x61\x19\xd3\x4b\xc2\x62\xd4\x15\x73\x21\x12\x0e\x68\xde\xc7\x96\x73\xa5\x29\x8a\x00\xc2\x19\x40\xcd\x6a\xdb\xd8\x11\xea\x13\x03\xed\x2d\xe2\x01\xd6\xa3\x90\x92\x0b\xa5\x49\x02\xd2\x6c\xd6\x6c\x49\xee\xa5\x88\x51\xfb\x63\x57\x23\x56\x22\xb8\xd1\x7b\xd4\xb9\x58\x18\x19\x18\xee\xcf\xef\x85\xbc\x63\x7c\x36\x32\x2f\x3e\xb2\x4c\x5a\x9d\x63\x4c\xcf\xf9\xaf\xf1\x3f\x7d\x3a\x45\xc4\x67\xb2\xbf\x22\x47\x47\x81\x7d\x89\xc2\x86\xaf\x46\x3e\x95\x37\x18\x18\xb5\x6c\x89\x8c\x15\xcb\x34\x22\x1f\xd3\x0a\x59\xab\x0f\x4b\x70\xda\x4f\xa4\x69\xde\x3f\xa0\x64\xbd\x3d\x55\x79\x35\x64\x07\x71\xa5\x96\x60\x1e\x58\x8b\x3d\x96\x59\x39\x56\x58\x88\xf4\x15\x51\x65\x51\x08\xa9\x15\xc9\x41\xd3\x94\x6a\x3a\x36\x07\xe2\xac\xfd\x27\x86\xbe\x9d\x91\xbf\x57\x1f\x5a\x1c\x86\x1f\x8f\xff\xed\x87\xb7\x7f\xfd\xf7\xe3\x9f\xfe\xde\xfc\x0e\xc5\x54\x9b\x55\xd5\x78\x20\xf0\x15\x54\x01\xc9\x98\x8b\x14\x3e\x20\x75\xf8\xa7\x6a\x05\x3a\xb9\x2f\x34\xd5\xa5\x1a\xcf\x85\xd2\x97\x57\xd5\x9f\x85\x48\x57\xff\x0a\xbc\x39\x7b\x28\xef\xe1\xda\x5e\x51\xdd\x1d\x59\x9f\x44\x95\xfa\x68\xc1\x3e\x81\x54\x9d\x6b\xd5\x34\x5b\xeb\x3c\xb8\x5e\xab\x12\x00\xc9\x1c\x72\x8a\xff\xfc\xd6\x4f\x81\xb9\x8f\xef\x25\xd3\x1a\x63\xdf\x5c\x61\x0e\x31\x3d\xf3\xac\xd5\x2a\x93\x8b\x97\xc1\x85\xe9\xa2\x72\xfe\x6a\x05\x23\x4f\x18\xce\x88\x9b\x2d\xcb\x01\x6a\x91\x77\x2d\xd4\xf5\xe2\xea\x92\x2c\xec\x0c\xf7\x68\x72\x9e\x8e\x5d\x67\x10\x5d\xcd\x0c\x66\xd8\xdf\x56\x54\xb9\x65\x6a\xa8\xac\xce\x50\x80\x94\x87\x2e\xd0\xb5\x65\x3e\x36\x0d\xf9\x2d\x5f\x98\x71\x15\x99\x02\xd5\xa5\x04\x62\xd4\x0e\x2f\x4f\x72\x3a\xc9\x42\x53\x73\x7a\xc8\x33\xc3\x53\xd7\x47\xa4\x08\x65\xb9\xa6\x93\x85\xc8\xca\x1c\x2f\xb7\x9e\x70\xef\x9e\xeb\xec\x2e\x7a\xa4\x75\x18\xc8\x85\x61\xf6\x0b\xcc\xb5\xb6\xcf\xa0\xc9\x15\xcb\x53\xb5\x6b\x52\x29\x4d\xa5\x8e\x52\x8f\x90\xd4\xc0\x65\xde\xc2\x5f\x07\xb6\x58\xeb\x5e\xfe\xec\x3e\x9b\xba\xd9\xa2\x71\xe4\x22\x2b\xe6\x98\x31\x35\xab\xf4\xe0\x8d\xa7\xfd\xac\x82\xae\x50\xec\x1f\x68\x59\xcc\x58\xce\x9c\xf1\xe1\xe5\x6f\xff\xd8\x20\xb4\x47\x77\xc3\x93\xa9\x39\x51\x76\xec\x26\x5d\xc9\x6c\xd7\x07\xd4\xa4\x2a\x29\xdc\x3f\x17\x07\x61\x23\x15\xe0\x4c\xc5\x98\x4e\x6e\x46\xa8\x4f\xd0\x82\xca\x2a\x3a\xaa\x9c\x64\x4c\xcd\xe3\x94\xee\xbe\x9c\x56\xab\x63\xfa\x57\x80\xe1\xd6\x5a\x96\x50\x25\xb2\xd5\xb2\x87\x99\x8b\x15\x2a\x23\x90\xb0\xcd\xb4\xde\xae\x17\x58\x87\x31\x5c\x61\xce\x5a\x9d\x05\x30\xfe\xd5\x93\xcd\xc3\x94\x66\xea\xf9\x26\x82\x72\x02\x52\x0a\x59\xb9\xdf\x24\xe8\x52\xf2\x3a\xb9\xff\x4a\xa4\x24\x91\x60\x21\x19\x7b\xa4\xac\x93\xa6\x51\x04\xe7\x2c\xb0\xbb\x22\xbe\x90\x1d\xed\x7a\x33\xb4\x35\xef\x37\x2b\x1a\xd8\x8b\xcb\x7a\x31\xdb\x20\x91\x31\x04\x41\xd3\xde\x3b\x26\x54\x15\xcf\x33\xdb\xd2\x97\x7a\x74\xa7\x01\x07\x3c\x1e\x8f\x8f\x2d\x95\x42\xda\xab\xd4\x5a\x14\xcd\xe7\xbd\xba\x16\x6a\xa1\x2a\xf2\x5a\xdf\xba\x14\x5f\x7f\x99\xba\x25\xc2\x1c\x29\x3f\x55\xde\xb5\x1c\x4b\x56\xff\x02\x94\x29\x5f\x81\xed\xdb\x5e\xdb\xc0\x3c\x95\x7e\xf1\x2a\x46\xff\xca\x42\x14\x54\x75\xe4\xac\xf0\x63\x71\x79\x8c\xca\x01\x4a\x87\x1a\x8a\x4f\x6c\x97\xe3\xa4\x28\xcf\x5c\xf7\xe3\x1c\x72\x21\x97\xd5\x9f\x50\xcc\x21\x07\x49\xb3\x91\xd2\x42\xd2\x19\x9c\x55\x83\xdb\x9f\x55\x7f\xd9\x1f\xb6\xc8\x5b\xff\xb5\x8d\x6a\xa9\x1d\x4a\xce\xde\xf7\x15\xea\x72\x7e\xdd\x7a\xa2\x40\x55\xdb\xea\x09\xf8\xcf\x71\x15\x28\x68\x7d\x6e\xd5\x2c\x62\x28\x81\xe5\x46\xea\xac\x16\x38\x30\xde\xc5\x79\x0c\x8f\xfb\xc3\x87\x08\x49\xd9\x82\xa9\x18\xf0\x61\x1b\xdc\x13\xcc\xd9\x35\x44\xa9\x8b\x52\xbb\x8a\xdf\x95\x05\xe5\x73\x21\x14\x46\xc9\x54\x45\x23\x5b\xa6\xc1\x97\xa1\x9e\x17\x94\x31\x34\x48\xfe\x8a\xfc\xd7\xc9\x7f\xfe\xe6\xe7\xd1\xe9\x9f\x4e\x4e\x7e\x7c\x31\xfa\xd7\x9f\x7e\x73\xf2\x9f\x63\xfc\xc7\x3f\x9f\xfe\xe9\xf4\x67\xff\xc7\x6f\x4e\x4f\x4f\x4e\x7e\xfc\xe1\xfd\x77\xb7\x57\x6f\x7f\x62\xa7\x3f\xff\xc8\xcb\xfc\xce\xfe\xf5\xf3\xc9\x8f\xf0\xf6\xa7\x1d\x3b\x39\x3d\xfd\xd3\x37\xc1\xa4\x53\xbe\xfc\x18\xc8\xbd\x6d\x1b\x45\x2b\xd8\xbe\xda\x63\x24\x57\x5b\xeb\x2a\x64\x5c\x8f\x84\x1c\xd9\xae\x5f\xa1\x92\x12\x38\x80\xdf\x5e\xb1\xcf\xff\xb5\xe7\x9a\xf5\x6d\x56\x09\x85\x3d\x3a\xe0\x4f\x25\x68\x28\x48\x24\xe8\xe7\x08\x0f\xb2\x23\x79\xcd\x70\x05\xcd\xe4\x6b\xbb\x41\xbf\xe6\x88\x21\x6f\x38\xac\xea\x46\xe3\xba\xb6\x43\x7f\xc6\xb5\x12\x44\x89\xb5\x23\xba\xe7\xee\x20\x10\x48\x9e\x0c\x91\x36\x21\x6d\x88\xb4\xd9\x42\xca\x10\x69\x13\xd4\xbe\xc8\x48\x9b\x1b\xcb\x93\x7e\x91\x61\x36\xeb\x89\x75\xa6\xd3\xbb\xce\x85\x76\x3a\x67\x2c\x6d\xcb\xf0\xcb\x69\xb1\x77\x6f\xc0\x17\x5d\x83\xca\x63\xa6\xf8\x79\xb3\x87\x16\xa4\x10\x45\x99\x51\xbd\x25\x7b\x24\x52\xbe\x5f\xcf\x3c\x67\x7f\x99\x03\x77\xa2\x9f\xcb\x5d\x60\x9c\xe4\x65\xa6\x59\xd1\x31\x11\xa2\x52\x2d\x2b\x50\x4c\x42\x95\x12\x09\xa3\x3e\x01\xde\x01\x7a\x29\xed\x5f\x19\x2d\xf3\x9a\xde\x61\xee\x50\x02\x29\xf0\xa4\xa3\xe5\xf0\x93\x05\xe1\xf4\x73\x3b\x59\x9a\x7b\xe8\x2d\x5f\xb8\x3b\x89\xa4\xa5\x4d\xec\x85\xda\x57\x1a\x65\xdc\xaf\x2b\x8b\xd3\x9c\x4b\x97\xa5\xd1\x48\xe6\x44\x09\xb2\x32\x22\x56\xa0\xe1\x55\x08\x24\xa6\xbd\x58\x36\xdd\xed\xc2\x0b\x56\x0e\xc2\x45\xf1\x2a\x0b\x23\x48\xc7\x5a\x93\xc1\xeb\x30\xd1\xb6\xec\xdd\x79\x84\x1e\x25\xae\x84\x4b\xe5\x71\x25\xf2\xa7\x90\xc6\xfb\x22\x89\xf7\x44\x0a\x7f\x1a\x09\xbc\x9f\xd2\x77\x34\xc9\x3b\x8e\xd4\x1d\x47\xe2\xde\x23\xae\x3d\xa6\x94\x1d\x47\xc2\x7e\x0a\xfb\x5a\x21\x61\xca\x3e\xf7\x21\x5d\xfb\xa3\x77\x5f\x68\xf8\x8c\xa6\x9a\x42\x42\x01\xbc\x42\x5c\xf6\x1e\x58\xa0\xc9\x7c\xc8\xb4\x27\x95\x5d\x34\xee\x85\x7d\xb3\xc9\x52\x36\xdc\xd6\x64\xb8\xad\xf7\x68\xc3\x6d\x3d\xdc\xd6\xcf\x72\x5b\x3b\x6e\xf5\xf5\x5f\xd5\x91\x11\xa6\x10\x3b\xef\x50\x06\xa8\xd7\x6d\x08\x3f\xe4\xcc\x4f\x89\x72\x56\x1d\xc5\x3a\xc6\xf3\x1c\x47\xee\x76\xe2\xda\x4c\xb6\x0a\xba\xd0\xc2\xb2\x3d\x32\x67\x33\xb3\x3d\x33\x58\x40\xe6\xd4\x6a\x92\x53\x4e\x67\xb6\x74\x8b\x16\x55\xe9\x62\x21\xb1\x32\xab\x64\x1d\x51\xe3\x57\xb0\x10\xd1\x82\x65\xb8\x4c\x26\x68\x8a\x5f\x4a\x91\x65\x46\x5e\xc9\xd8\x1d\x90\x37\x50\x64\x62\xe9\xaa\xaf\xf0\x94\xdc\x68\xaa\x61\x5a\x66\x37\xa0\x3b\x85\x77\x07\x71\x1c\x24\xf8\xaa\xcc\xb2\x2b\x91\xb1\xa4\x93\xf7\x2f\xc6\x56\xbc\xc4\x0d\x58\x94\x59\x46\x0a\x24\xa4\xdb\x3e\xfc\xc8\xf1\x2a\xbf\xc8\xee\xe9\x52\x9d\x91\x0f\xb0\x00\x79\x46\x2e\xa7\x1f\x84\xbe\xb2\x46\xa4\x6e\xfd\x36\xb1\x50\x6c\xe7\x84\x4d\xc9\x2b\x2c\x3b\xa9\x89\xa6\x33\x8c\x2d\xf6\x61\xc4\x67\x66\x43\x35\x07\x25\xc2\x30\xca\x7b\xa6\x0e\x69\xdb\x0b\x3f\xa5\xbf\xc6\xd1\xcd\xd5\xd9\xf9\xd4\x06\xed\xd5\x8c\x4d\x21\x59\x26\xd9\xc1\x18\xe6\x45\x82\xe9\xb5\x75\x91\x9b\x06\x3b\x51\x4b\xa5\x21\xf7\x38\xfe\x68\xd2\x65\x9c\x48\x50\x85\xe0\x0a\xda\x28\x12\xd5\x8b\x10\x4c\x92\xe9\x98\xd4\x11\xd1\xe2\xdb\x59\x31\x08\x55\x09\x0a\xa1\xf4\x8d\xa6\x52\x77\x95\x4f\x62\xe9\x02\x57\x9e\x10\x73\x92\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\xdc\x4e\xa7\x1a\xab\x37\x34\x58\xbd\xb2\x31\xfb\x8d\xbc\x91\x39\xe5\x69\x06\x92\x4c\x29\xcb\x54\xf7\xcc\x81\x36\x24\x99\x91\xcf\x41\xe6\x8c\xa3\xf7\xc2\x46\x9d\x62\xf4\xb7\xf9\x2b\x49\x84\x4c\x5d\x9d\x04\xa6\x95\xff\x2a\x88\x89\x9a\xf6\x11\x25\xbb\xc6\xf6\x5e\x0d\xda\x25\x93\x4c\x24\x77\x8a\x94\x5c\xb3\xcc\xbe\xbc\x10\x77\xa8\xbf\x64\xc8\x4e\x3a\x0f\xdd\x9d\x4b\x55\xff\x1c\x55\x07\x6c\x64\xa8\x52\xe7\xbf\xae\xbf\xc2\x0f\x3a\x12\x17\x41\x8b\x8e\xa1\x43\xc3\x67\x48\xa2\x95\x18\x7a\xfb\x19\x92\x56\x81\x2f\x07\x20\x6b\x76\x94\x03\x8d\x8e\xe4\x77\xb4\xad\x67\xf5\xca\x03\xc0\xba\x9b\x2d\x76\x48\xcf\x6b\xb7\x08\xae\x54\xb1\x5f\x93\x8c\x71\x68\x2f\x8c\x62\x29\xb4\x17\xc7\xba\x3d\x9d\x92\x4b\x52\x26\xb1\xb6\xd2\xd2\xa3\x9d\x05\x93\xe6\x69\xc1\xf2\x43\x42\x68\x72\x72\x7c\x7e\x7c\xba\xb6\x47\x8e\x15\xa6\x5f\xd8\x6b\x71\xec\x20\xc3\xab\x97\x52\x2c\x2f\xb2\x25\xbe\xc7\x71\x7a\x46\x98\x8e\x11\x23\x64\x6e\x43\x59\x72\x3f\x2b\x0e\xe2\xfc\x8c\x28\x41\xb4\xa4\xbe\xa4\xa0\xfd\xd4\x3c\xa4\x65\xe9\x2e\xf4\x93\xe3\x9f\x8f\xcf\x08\xe8\xe4\x94\xdc\x0b\x7e\xac\x71\xfa\xc6\xe4\x56\x90\x32\x38\xe7\x89\xd4\x84\x2c\x45\x49\x38\x80\x3b\x5b\x45\xc6\x12\xa6\xb3\x25\x5e\x37\x44\x94\x36\x43\xcf\x88\x16\x01\xd0\xec\xcd\xf6\xf6\x33\xd3\x0e\x7c\xc3\xf0\xef\x17\xb8\x9b\xec\x95\x45\xa8\x51\x46\x16\x70\x3e\x07\x9a\xe9\xb9\xcd\x66\xe0\x82\x8f\xfe\x01\x52\x20\x7c\x3b\x77\xdf\x7c\x75\xe5\xf1\x23\x06\x32\x3d\x51\x25\x39\x73\xed\x7d\x07\x9d\x45\x22\xb2\xca\x8f\xbe\xbf\xbd\xbd\xfa\x0e\x74\x93\xcb\x73\xfc\x90\x7c\xf7\xf6\xd6\xe7\xb0\xa0\xa1\x1f\xe4\x54\xc8\xbc\x07\xec\x3d\x4e\x70\xed\x88\x14\x42\xf6\xe1\x96\x99\x0b\x15\xb4\x9c\xe4\x09\xae\x98\xef\x85\xd2\xd6\x97\x63\x75\x13\x8e\x89\x8d\xa2\x9d\x90\xe1\xd3\xf7\x2f\xaf\xc6\xe4\xaf\xa2\x34\x13\x32\xa1\x93\x6c\x59\x15\x70\x52\x10\x5a\xec\x95\x90\x23\x43\xca\x91\xb9\x41\xcc\xce\xff\x1e\x68\x0a\x52\x21\x83\x06\x1a\xa9\x2c\x6d\x84\xe3\xde\xa0\x2d\xea\x52\xbe\x2e\x95\x16\x39\x99\xbb\xd7\x6e\x43\xbb\xbb\xc3\x39\xb6\xc7\xd5\xc1\xe8\x4a\x28\x2c\x13\x77\xbf\xf9\xea\x58\xf4\x1a\xf7\xb2\xf3\xee\x3e\x9f\x58\x31\xb5\x39\x6d\xce\xc1\x61\x01\x5a\x1d\x6f\x33\x5b\x35\x5a\xdc\x6b\x94\xb2\xc6\xf1\x72\x06\x48\x18\xe8\xfb\x6a\x47\xe8\xec\x09\xee\x29\x5e\x1a\x02\x89\x16\x6a\x4f\x9e\x24\xdc\x9e\xb8\x28\x4a\xb7\xf9\xac\x0d\xba\xbb\xf5\x7c\x53\xe7\x4c\x55\x68\x01\x09\xe5\x82\xb3\x84\x66\xec\x1f\x90\x92\xb2\x10\xdc\xe5\xd6\xa1\x64\x9b\x50\x05\x23\xf4\xbc\x73\xed\x6a\x30\xd7\x28\xdf\x86\x3b\x68\x21\x50\xdc\xc3\xe0\x39\xc3\xee\x2d\xd5\x31\x6b\xfe\x47\x2b\xab\x1f\x08\x59\xdf\x6c\x6b\x0e\xf5\xd6\x62\xc5\xd9\xf1\xe4\x8b\x10\x27\x49\x24\xe0\x85\x75\x6c\x33\x2d\x08\x4d\x12\xc4\x31\xb7\xd7\x15\x32\x5e\x05\x72\x11\xbe\xbf\xa2\xcd\xab\x11\x01\xfb\x26\x7b\xd9\x98\x03\x49\x78\x99\x4f\x40\xd6\xc0\x90\x52\xaf\xcf\x69\x14\xab\x8b\x1b\xd6\x0e\xe7\xbd\xb4\x5e\xc6\xa0\x7c\x06\xe4\xa5\x19\xf9\x0f\xbf\xff\xfd\xef\x7e\x1f\x61\x1c\xf3\x7a\x55\x69\x54\x4e\x2e\x2f\x3e\x5c\xfc\xed\xe6\xd3\x6b\x84\xd9\x0f\xed\x3e\x52\x92\x6c\xec\x14\xd9\xa8\x09\xb2\x4f\x9a\x1e\x5b\x48\xa1\x45\x22\x82\x53\x66\x62\x1f\x8a\x2b\x47\x57\x85\xbd\x87\x76\x2c\x26\xa1\xa2\xb8\x42\xec\x47\xd9\xce\x2b\x2d\x51\x40\x73\x3e\xb0\xac\xa5\xf8\x18\x4e\x76\xfe\x72\xfc\xb2\x37\x6c\x0c\xe1\x36\x83\xef\xc6\xd8\x6b\x76\x83\x54\x99\x09\x2b\x95\x2d\xa8\xe0\x17\xa5\xae\xdd\x6c\x94\xdf\xf0\x05\x7a\xb3\xb2\x38\xbd\x58\x18\x95\x01\x14\xd1\xec\x34\x37\xa6\xb7\x56\xf1\x2a\x92\x96\xd2\xd6\x50\xae\x5c\x8e\xb5\x07\xc6\xb9\x1a\x91\x86\xaf\xc8\x64\xa3\x20\x11\x3c\x0d\x51\xdc\x62\x29\x22\x8e\x92\xa8\x67\xee\xc6\xf6\xe9\x0d\xfb\xb5\x00\xe0\x06\x43\xfd\x3f\x74\x45\x49\xb5\xaa\x71\x6e\x37\x8b\xe1\x81\xbd\xfd\xe1\x5f\xba\xbb\x35\x93\xe2\x46\x24\x77\x11\x0d\x9b\x81\x0c\xec\x8d\x39\x69\x89\xf5\xe0\xde\xbe\xbe\xb2\xc4\x99\x95\xf9\xf0\xf1\xb6\x06\xec\x31\xba\x13\x25\xef\xbc\x47\xf1\x7b\xe7\xe3\xa5\x3c\x25\x77\x50\x84\xd9\x04\x0c\xc3\xf4\xc1\x9f\xed\xd8\xcf\xb1\x2b\x30\x8f\xd8\x80\x36\x29\xde\x32\x02\x1f\xb3\xe9\x2a\x57\x04\xd5\xab\x6a\x84\x54\xa0\xfb\xd6\xa9\x8e\x53\xca\x32\x42\xd1\x97\xa2\x59\x0e\xe4\x7e\x0e\xdc\xba\x68\xea\x18\x97\xaf\x88\xe1\x7c\xad\x36\xe2\x63\x1f\xc8\xff\x6a\x6f\x5b\x6f\x28\x96\xc9\xd7\xad\xbc\x39\x9e\x2d\x5b\x58\x74\x83\xf2\xb6\x4b\x1b\x94\xb7\x8e\xca\x5b\x21\xe1\x46\x8b\xce\xb2\x66\xb4\x30\x29\x4b\xc6\x96\x20\xa9\x09\x4c\x85\x84\xd5\x28\xa9\x46\xf4\x92\xcb\x77\x08\x88\xe7\xbe\xb8\xba\xac\x3c\x96\xa2\x15\xa1\x64\xf1\xa6\x55\x99\xcc\xbd\x73\x9b\x83\x52\xe7\x18\x0f\x55\x16\x4e\x65\x34\x57\x5b\x29\xa1\x7b\x6c\x56\x21\x01\x72\x9c\xc7\xb3\x1a\x03\xca\xbc\x2e\x70\xfb\x21\xe8\xc4\x46\x3b\xf8\x60\x30\x87\xee\xeb\xa7\x6b\x1a\x14\x84\x51\x4f\x6c\x22\xa9\x9a\x03\x66\x3c\xc3\x67\xa6\x95\x1d\xd4\x62\xe8\xfa\x19\x37\xf2\xc2\x4c\xd2\x04\x48\x01\x92\x09\x23\x62\x94\x5c\xa7\xe2\x9e\x93\x09\xcc\x18\x57\x7e\xc5\x42\x48\xf2\x5b\x02\xe3\xbf\x98\xaa\x2a\xcd\x8f\xc9\x75\xab\xce\xa1\xc3\x84\x4b\x44\xcd\x33\xdd\x14\x9d\x45\x9a\x12\x14\x5e\x70\x1b\x94\x34\xcb\x96\xf5\xc6\x6b\xc2\xba\x6e\x99\xa1\xee\x1b\xc2\xce\xec\x49\xc9\xf1\x45\x53\xc8\xe8\xd2\xe6\xfd\x4f\x19\x47\x9b\xbd\x54\xa7\xe3\xf0\x80\xba\xce\x04\x0a\xd9\xe8\x73\xeb\xce\x60\x8a\x48\xa0\x49\x10\xfa\xf4\x10\xb9\xf7\x58\x1b\x22\xf7\x86\xc8\xbd\x21\x72\x6f\xbd\x0d\x91\x7b\xed\x36\x44\xee\x6d\x27\xa8\xcf\xae\xd6\x21\x72\x6f\xb0\xca\xac\xb7\x21\x72\xaf\x53\x1b\x22\xf7\x1e\x6d\xbd\x63\xd1\x43\xe4\xde\x0e\x6d\x88\xdc\xdb\xb1\x0d\x91\x7b\x43\xe4\xde\x10\xb9\x37\x44\xee\x05\xb4\x21\x72\x6f\xff\xd7\x1b\x9c\x3f\xdd\xdb\x10\xb9\x37\x44\xee\xad\xb4\x21\x72\x6f\x88\xdc\x1b\x22\xf7\x76\x6a\x43\xe4\xde\x10\xb9\xb7\x4b\x1b\x22\xf7\x86\xc8\xbd\xaf\xd8\x46\x3c\x44\xee\xd9\x36\x44\xee\xed\x37\xce\xa0\xbc\x85\x75\xf6\x24\xca\x9b\xd2\xa2\xb8\x61\xb3\x00\x0c\xd6\x58\xc7\xe0\xa6\xa2\xc4\x01\xb4\x2a\x57\xd8\x5a\xd9\x0f\xbd\xf5\x51\x39\x78\xcc\x66\x1c\x5f\xe3\x26\x99\x80\x51\x11\xcc\x6b\x15\x21\xb7\xc9\xe5\x14\xdd\xfe\x0d\xd4\x44\x73\x2a\x3c\x24\x27\x6b\x95\x50\x69\x8b\xcf\xfe\x76\x63\xdc\xe8\x2e\xdd\x29\x68\xcc\x47\x42\xb9\xad\x42\xec\x4a\xd2\x9b\xeb\xfd\x4a\xa4\xca\x57\x6d\xe1\x82\x8f\x2c\x30\xf2\xd8\x10\x3c\x16\x6a\x1c\x60\xc3\x0f\x44\x41\xb4\x91\x8d\x57\x46\x93\x3e\x14\x12\xe2\x15\x46\x8d\xb1\xc4\xe9\xf3\x62\xda\x42\x37\xb4\x04\x76\x44\x35\x6c\x87\xf3\x61\x61\x74\x0f\x77\xc7\xa6\x0d\x1b\x02\x82\xec\x7d\x49\x78\x9a\x1e\x11\x56\x9d\x17\xc2\xfe\x5f\x1d\xed\xd6\x08\x73\xeb\xec\xfd\x3a\x30\x94\x63\x48\x6c\xdb\xc1\xe2\xda\x7a\x12\x17\x18\x21\x96\x2d\xa6\xac\xd4\xd3\x18\xb6\x7e\xc6\xaf\xf5\x31\x76\xed\x10\x71\x6b\x07\x8f\x59\x8b\x13\x0c\x11\x21\x10\x22\x92\x44\xfa\x04\x4e\x45\x97\xfe\x70\x3b\x97\xa0\xe6\x22\xeb\xcc\x70\x62\x31\x9b\xf7\x8c\xb3\xbc\xcc\xb1\xe2\x8b\xe1\x29\x6c\x51\xa5\x68\xa8\x15\x97\x81\x8d\x13\xc1\xd2\x30\x29\x60\xc9\x7d\xca\x32\xb3\xb5\x10\x98\x77\x4e\x17\x28\x94\x96\x49\x02\x90\x86\x88\xa5\x4d\x6b\xf5\xef\xc6\x15\x85\xb6\x1e\x06\x53\xa4\xb3\x5f\x21\x86\xde\xd3\x30\xe7\xfd\xee\xb7\x9d\xfa\x98\xc9\x22\xce\x2d\xfd\xdd\xf5\xd5\xeb\xd6\x2d\x8d\x1f\x7c\x8f\xc7\xf8\xf5\x1c\x92\xbb\x6b\x17\x00\x75\xb8\x9b\x39\xdc\xcc\x14\x64\x62\x8a\x21\x18\xe4\x22\x0d\xf2\x1c\xc5\x94\x0a\x0c\x2d\x8d\x15\x77\x77\xae\xf3\xe3\xd9\x6f\xfd\x91\x9d\x99\xbd\x60\x59\xba\x3d\xbe\x61\x57\xcb\x8d\x2d\x84\x74\x74\xfb\xee\xe6\xc8\x7b\xac\x6e\xdf\xdd\xa0\x72\x66\x6e\xb1\xc4\x4c\xf3\xd4\x56\xd5\x5c\x80\xb4\xff\x0c\x76\x2e\xfa\x51\xaf\x32\x6a\x4e\xed\x67\x5d\x8d\x4d\x49\xe1\x3f\x23\x27\x0c\x59\x97\x84\xd3\xe6\x6c\xd4\x77\x6d\x18\x0d\x9b\x95\x64\xcb\x11\x4b\x85\xe7\xee\x11\x52\xc2\x6f\xd4\xc0\x8b\x2c\xd4\x10\xd8\x0e\x5e\x11\x52\xaf\xc4\x5e\xe0\x5e\x53\x20\x17\x2c\x81\xf1\x33\xd8\xda\x62\xd9\xaf\xc2\x79\x39\x41\x4f\x17\xbe\x78\x5f\x78\xc4\x8d\x25\xa7\x72\x92\x35\xcc\xac\x8e\x52\x8c\x56\xcf\x68\x52\xad\xcd\x6c\xf3\xbd\x11\x44\xc6\x89\x02\xa8\x74\xf2\x19\xd3\xf3\x72\x32\x4e\x44\x7e\x6e\x6e\x3f\xfb\x7f\x93\x4c\x4c\xce\x73\xaa\x34\x48\xa3\xa6\x3b\xc9\x74\x94\x18\x0a\x18\x9f\x8d\xf3\xf4\x74\xfc\xab\xd0\xa3\x8b\xee\x1e\x97\xff\xb9\xc5\xce\x35\x01\x23\xba\x08\xb9\x62\xf0\x32\x93\x72\xf0\x93\x1b\x5e\x83\x2a\x30\x1f\xe2\x20\xb9\x10\x83\xe0\x41\x22\xf8\xb4\x62\x32\x95\x7e\xe4\x3b\x3c\x59\xae\x43\x94\xb3\x1a\x29\xc7\xa1\x47\xf9\x0d\xbd\x51\xe7\xfb\x92\xd3\x10\x2d\x9f\x21\x56\x2e\x43\x94\x3c\x86\x18\x39\x0c\xf1\xf2\x17\xe2\xe4\x2e\xc4\xcf\x5b\x78\xb2\x9c\x85\x2f\x22\x5f\x21\xa2\x8b\x37\x52\x9e\xc2\x73\xe4\x28\xf4\xd7\x8c\x48\x22\xe4\x25\x3c\x5f\x4e\x42\xff\xb4\xd8\x40\x96\x70\x80\x1c\x84\xe7\x08\x61\x79\xb2\xf0\x95\x08\xa1\x2b\x31\xc3\x56\xa2\x85\xac\x3c\x59\xae\x41\x8c\x3c\x83\x98\x1b\xfe\x60\xf9\x05\x4f\x91\x5b\x10\x27\x7c\x3d\x38\xa7\x20\xaa\xd5\xe7\x59\x72\x09\x62\xe6\x11\x04\x2f\x02\xe3\x4c\x33\x9a\xbd\x81\x8c\x2e\x6f\xc2\xa2\xcd\x63\xad\xc4\x87\xb5\x88\x74\xeb\x1b\x6b\x07\x4f\xcd\xa9\x22\x3e\x9e\xc6\xa1\x7f\xf9\x80\x1d\xa7\xa4\x10\x8a\x61\x2d\xe6\xfd\x3a\x87\xc6\x90\xfe\x85\xc7\x90\xde\xf8\xe0\x2c\xe4\x56\x4f\x76\xcd\xf7\xe2\x9e\x88\xa9\x06\x4e\x4e\x18\xf7\x3b\xe7\xb4\x61\x47\xab\xd9\x6a\xb0\x53\xd5\xf4\xfa\xf2\x85\x1f\xe4\xeb\x73\xae\xa2\xfb\x59\xa9\x5e\xbb\xd7\x1d\x8d\x8f\xfb\xd7\xdd\x83\xd3\x32\x6b\xfb\xd8\xad\xdf\x3d\x8e\x83\xfd\xe5\x98\xbc\x77\x02\xdf\x4b\xa4\xa7\x62\x45\x94\xa7\xc4\x41\x37\x7e\x7d\xfb\x24\x38\x9f\xa6\xad\x7e\x56\x09\x30\xed\xa0\xb9\xca\x19\x89\xa1\xbc\xb7\xaf\xaf\x50\x45\x18\xcc\xe2\xbd\x31\x8b\x1f\x28\xcd\xe3\xeb\xd3\x87\x9f\x3f\xad\x63\xd0\x87\x7f\x29\xfa\x70\x03\x31\xf5\x3b\x49\x13\xb8\xea\x93\xf0\xe6\x19\x48\x9d\x6d\x5c\xcb\x70\x15\xbb\xe0\x00\x36\x3b\xb5\xc6\xc3\x45\xe8\xd7\x69\x99\x65\x4b\x6b\xe5\x6d\x81\x23\x77\xdf\x5a\xb7\x73\x58\x43\x95\x45\x67\xf7\x06\xea\x6a\xdd\xa4\x90\xc2\x49\x24\xb2\xe4\xdc\x88\x18\xee\x38\x19\xe2\x8d\x2e\xa2\x80\x77\x77\x78\xd0\x16\xe6\xad\xcb\x74\xc1\x68\xf2\x39\x90\x3a\x49\xb2\x4d\x88\x19\x75\x2a\x64\xc2\x26\xd9\x92\xcc\x69\x66\x94\x25\x97\x09\x72\xc7\xb2\xcc\x75\x13\x90\x79\x02\xda\x06\x07\x58\x89\x26\x13\x7c\x86\x93\x41\x2d\x21\xf0\xb9\x80\xc4\x8c\x99\x64\x40\x79\x59\x58\x3a\x8d\x7c\xb4\x14\xa5\xf4\x74\x06\xa5\xde\x34\x46\x67\x8a\x70\x96\x9d\xf9\x29\x6f\xa3\x23\xaf\xef\xf9\xda\xe8\xaf\x20\x75\xc0\xc6\xf7\x4c\xc1\x19\xf6\xd9\x99\x26\x4b\x8b\x58\x80\x94\x2c\x75\xe1\x65\xf6\xb3\x42\x8a\x05\x4b\xeb\x44\x20\xb3\x2d\x30\x09\xa7\xf3\x58\x9f\xb0\x5f\xcf\x5a\xb9\xe0\x23\x0e\x33\x8a\xe2\xb1\x63\x68\x36\x6c\xdc\x8e\x6f\x83\x94\x79\x8a\xf1\x65\x0a\x13\x9f\x5a\xa8\xe7\x0b\x46\x3b\x53\x62\xde\xa7\xb1\xa3\xc8\x09\x17\x44\x60\xfa\x72\xc9\x99\x5e\xa2\xcf\x75\x5e\x6a\x92\x8a\x7b\x7e\x1a\x72\x30\x6d\x20\x0a\x25\x13\xd0\xb4\xce\x40\xf6\x22\x99\x22\xc0\xe9\x24\x33\x67\x0f\xd3\x8a\x6e\x37\x6e\x00\x32\x05\xaa\x4b\x09\x64\x46\x75\x00\x97\xd8\x20\xcd\xdb\xf5\x7c\x78\xdb\x31\xe5\x3c\xaa\x53\x52\x72\x05\x81\x82\x6c\x34\x15\xa0\x63\x5a\xbd\x39\xd1\xa2\xd4\x3d\xb9\x47\xb6\x99\x8e\x6c\x7a\x60\x43\x49\x64\x39\x28\x22\xca\x00\x4b\x5e\x4b\xfd\x73\xc3\xc5\xd4\xf0\x06\xbb\xd3\xc6\xd6\xd5\xb1\x1d\x63\x87\x7d\x68\x48\xe5\x0d\x10\x14\x1f\x10\x67\x61\x1a\xde\x7c\xb8\xf9\xdb\xbb\x8b\xff\x78\xfb\xae\xdb\xc2\xbf\xa5\xc9\xbc\x59\x76\x82\x13\x8a\x17\x05\x32\xf9\x39\x5d\x00\xa1\xa4\xe4\xec\x7f\x4a\x17\x94\x78\x52\x8d\xd7\x91\xad\x46\xc9\x21\x0c\x12\x7c\xcd\x2d\xd1\x89\x73\xc4\x58\xd3\x77\x4c\x61\x0d\x03\x24\xc2\x65\x17\x09\x05\x64\x2a\x45\xbe\xa2\x68\x91\x0f\x55\xf8\xe3\xd2\xdc\x30\xd4\xaa\x66\x73\x90\xdd\x24\xf2\x37\x1f\xdf\xde\x20\xd0\x47\x21\x6d\xcd\x0f\xcc\x60\xc2\x3e\x71\x74\x9b\x9f\x6c\xe9\x49\xc7\xe4\x82\x2f\xed\x97\x96\x99\x75\x14\x51\x32\xa6\x34\xa0\x70\xea\x14\x49\x1f\xc0\x79\xf4\x62\x8c\xff\x3b\x22\x34\x4d\xa5\xd1\x34\xab\x44\xb0\x64\x35\x95\xb5\xd3\xc8\x56\x7f\x65\x93\xac\x31\xb9\x1c\x34\xe6\x8a\x75\xea\xf0\xbd\x48\xdd\x4a\xa0\x10\x88\x11\x56\x56\xba\x55\x5a\x52\x0d\x33\x96\x90\x1c\xe4\x0c\x48\x41\x75\x32\x27\x39\x5d\x92\x44\x48\x59\x16\x16\xc7\x28\xa5\x9a\x76\x1b\xf9\x5b\x21\x49\xee\xb9\xb3\xe1\x66\x46\x24\xbf\xd9\x1c\xaa\x5b\xb3\xec\xe6\x3f\x99\x52\x25\xa8\xf3\x97\x2f\xfe\xf8\xdb\xdf\x77\x54\xaf\x23\x1e\xdc\xae\xc1\x69\x01\x41\x69\xed\x00\x3d\xbf\xc1\x30\x2c\xbe\x05\x3f\xe5\x76\x88\xdd\xf9\xc8\x0d\x15\xe3\xb3\x2c\xd8\x00\x12\x6c\x06\x0c\x35\x02\x8e\xea\x37\xb8\xea\x6a\x0b\x0c\xb7\x04\xb6\x68\xe8\x6e\x4a\x89\x67\x05\xab\x25\x38\x6f\xf7\x72\x0c\x59\xf0\x86\x62\x77\x79\xe5\xb9\x54\x88\xfd\x08\xb5\x89\xca\x30\x65\x21\x8e\xec\xb0\x36\x22\xe5\x8c\xbc\x20\xff\x46\x3e\x93\x7f\x43\x2b\xd8\x1f\xba\x0f\x15\xc7\xc6\x14\x23\xd1\x62\x2e\x94\xbe\xbc\x8a\xb4\xd0\x7f\x31\xf7\x95\xe9\xd1\xac\x87\x16\x64\xc2\x9c\x39\x02\x3e\x6b\x90\x46\x0d\x74\x6b\x18\x3a\x73\x41\x16\x35\x43\xe0\x97\xb2\xbb\x43\x83\x0b\x2e\xa7\xed\xfc\x8c\x67\xda\xdf\x38\xf0\xf7\x42\xe9\x0f\x8e\x5b\x37\x71\xba\x9a\x74\xe4\x78\x11\xb7\xd8\x7d\xc8\xa8\xef\xcd\xde\xab\xcb\x2f\x91\x54\x60\x8a\x8a\x4d\x14\x9f\xb3\x00\xe6\xd0\x9f\x13\x1b\x16\xc9\x1b\x6f\xeb\x3e\xb4\xb5\x56\x6c\xfa\x68\x91\x71\x4a\x4a\xa3\x62\x59\x21\xd2\x31\xea\x37\x01\x54\x98\xd9\x48\x1b\xc2\xc0\x03\xaa\xd1\xd8\xea\x6b\x95\x77\x18\x0f\x9c\xe1\x58\x09\xe5\x5d\x65\x58\xdb\x24\x4c\x41\x4a\x0b\x46\x30\x59\xfa\x84\xb0\xe0\xdd\x16\xc4\xe5\xc2\x43\xdd\xe2\x6d\x95\xab\x66\x30\x1b\xfa\x6a\x2b\xef\xf8\x9f\xdf\x5c\x9d\x91\xdb\xd7\x57\x67\x44\x48\x72\xf3\x3a\x2c\xf8\xa9\x69\x82\x39\xba\x7d\x7d\x75\x74\xd0\x15\x68\x64\x99\xdd\xbe\xbe\xea\xd0\xc9\x7a\x80\x73\x4e\x8b\xd1\x1d\x2c\x3b\x4a\x77\x31\x24\xcc\x51\xb5\xb1\xa2\xbc\x90\x9d\xe6\x9c\x16\x7b\xf7\x26\x81\xa6\xac\xd7\x70\x51\x3e\x2f\xb4\xa2\x34\x1e\x6e\x54\x2e\x16\x90\x5a\xad\xd9\x8f\x02\x3c\x2d\x04\x33\x3a\xd2\x00\x26\xf5\x50\x1b\xc0\xa4\xf6\x6f\x03\x98\xd4\xa6\x36\x80\x49\xed\xd1\x06\x30\x29\xdb\x06\x30\xa9\x36\x21\x7d\xcc\x02\x1b\xc0\xa4\x1e\x6d\x03\x98\xd4\xd6\x36\x80\x49\xed\xd5\x06\x30\xa9\x01\x4c\x6a\x00\x93\x1a\xc0\xa4\xb6\xb4\x01\x4c\x6a\x00\x93\x1a\xc0\xa4\x1e\x19\x7e\x00\x93\xea\xd0\x7a\x97\x35\x33\x80\x49\x3d\xd4\x06\x30\xa9\x8d\xad\x37\xea\xfc\x00\x26\xb5\xa5\x0d\x60\x52\x5b\xda\x00\x26\x35\x80\x49\x0d\x60\x52\x0f\xb7\x01\x4c\xaa\x73\x1b\xc0\xa4\xf6\x6b\x43\xf2\xec\x9e\x6d\x00\x93\x72\x6d\x00\x93\xda\xa9\x0d\x60\x52\x7d\xce\x08\x1c\xc0\xa4\xaa\xd6\x0f\x1f\xdc\x00\x26\x35\x80\x49\x3d\xd8\x06\x30\xa9\x01\x4c\xea\xc1\x36\x80\x49\x75\x68\xbd\x33\x8b\x0f\x60\x52\x03\x98\xd4\x43\x63\x0c\xfa\xf0\x7e\x6d\x00\x93\x1a\xc0\xa4\xd6\xda\x00\x26\xb5\xde\x06\x30\xa9\x01\x4c\x6a\x00\x93\x1a\xc0\xa4\xaa\x36\x80\x49\x7d\xed\x76\x27\x09\x8a\xfd\x03\xae\x44\xc6\x92\xe5\xa1\x52\x0a\xaf\x41\x89\x52\x26\xe6\xa2\x47\x6a\x48\x81\xe4\x54\x86\x88\x40\xd9\x1c\x99\x9c\x65\x6d\x49\x95\xe0\xa7\x40\x1b\xd1\x1f\x8a\x39\xe4\x20\x69\xd6\xc8\xa1\xff\x0a\x40\x64\xae\x1b\xab\xda\x04\x93\x91\x6e\xa6\x9f\x66\xa2\x7b\x00\x28\xe3\x5f\xf0\x43\xf7\x00\x14\xec\x44\x53\xa9\xed\xf4\x75\xb3\xe4\x06\x9b\x14\x9a\x2f\xd2\x87\x84\xf6\x26\xf0\x5b\xb5\x8b\xb4\xa8\x6e\x02\xb6\x75\x73\xd1\xa2\xc8\x58\x08\x34\x00\x21\x37\x25\x8a\x3e\xe0\x22\x28\xd4\x2b\x92\x14\xe5\x19\xc9\x21\x17\x32\x20\x90\x3e\x82\x7a\xd9\xda\x2a\x7d\x58\xa7\x6b\x4b\x90\x9f\x7c\x2d\x70\xfe\x97\x56\x99\xa9\x71\xfa\xaa\xb5\x62\x9e\xe9\x06\x85\x2a\xae\xa7\x23\x30\xdd\x32\x51\x7d\x10\xfa\xda\x1d\xee\x83\xad\x57\xe4\x80\x17\x3f\x85\x07\xc3\xed\x7b\x2d\xf2\xa2\xd4\xd0\xba\x3e\xed\x14\x5b\x8d\x88\xa9\x50\x86\x7e\x98\x7c\xf8\x44\xf0\x29\x9b\x39\xd3\xc0\x79\x4e\x39\x9d\xc1\xa8\x9a\xed\x51\x7d\x51\x9f\x77\xbe\xa8\x0f\x96\x0c\x9f\x64\x94\x75\x8f\x3b\x8d\xc5\x26\x5e\x23\x15\x08\x84\x58\xe7\x63\x60\x76\x6e\x35\xcd\x67\x55\xd6\x01\xb3\x7c\x63\xec\xbf\xb2\x3f\x3e\x0b\x50\x6d\xa9\x46\x43\x0a\x6a\x6d\x1b\x76\x6a\x98\x36\x6b\x05\xbd\x14\x0a\x30\xea\x8a\xb5\xee\x76\x57\x4a\x96\x9c\xe6\x2c\xf1\x27\xec\x22\xcb\x84\xcd\x20\x5b\x51\x79\x63\x90\x6c\x34\xf1\x3c\x2f\x35\x9d\x64\x30\x26\x97\x16\xa4\x47\xf0\x6c\xe9\xc5\x55\x17\x3f\x11\x20\xa5\x92\x28\xe1\xd3\x81\xa1\xd3\xad\x4d\x7c\xdd\xdc\x54\x16\x55\x08\xb8\x61\x65\x82\x03\x01\xae\xe5\xd2\xec\xbf\x2b\x91\xde\x98\x2d\xd8\x7a\x3a\x18\x6c\x28\x30\x62\x3a\x46\xb4\x74\x60\xa4\x74\x9c\xf8\xe6\xf0\xd8\xe6\xb8\x71\xcd\xb5\x7f\xc3\x62\xa5\x35\x13\xc6\x5a\xdb\xa2\x10\xe9\x78\x03\x6b\x22\x62\x1a\x48\x81\x19\xf1\x4a\xa4\x46\x68\x92\x60\xf9\x53\x75\x46\xad\x75\xf3\xd2\x10\x77\x87\xe6\x48\xaa\x6b\x69\x8a\x2e\x28\xcb\xcc\x01\x0e\x24\x60\x1d\x77\x36\xcc\x65\x14\xc9\x91\xe2\x72\x3b\xfa\xb4\x59\x5c\x56\x60\x2b\xb1\x30\x99\x0b\x05\x1c\xf9\x25\xad\x12\xc0\xaa\xf4\x14\xc7\x62\x52\x7b\x17\x87\x06\xa1\x5f\x4e\x09\xe4\x85\x5e\x9e\x11\x58\x80\x5c\xea\x39\x86\x42\x54\xc8\xc9\xc8\xd6\x98\x22\x39\x4d\x1b\xbb\xe3\x8c\x08\x6f\x1d\x0f\x1c\x1e\xef\x07\xa7\x93\x95\x99\xb6\x1a\x1a\x53\x55\x16\xce\xa1\x77\x4d\x6c\x40\x2f\x12\xca\x34\x63\x02\x72\x11\x04\x93\xce\x59\x37\xe8\x6e\x12\xf1\x2c\xbc\x43\x2a\x1a\x99\x47\x66\x4b\xe4\xf4\x33\xda\x4e\x69\x2e\x4a\xae\x2d\x52\x97\xd5\x18\x2a\x29\xcf\xe6\x67\x3d\x63\x30\xdf\x93\xca\xf6\x24\xce\xd5\x4e\x53\x0f\xce\x73\x15\xe1\x7e\x2d\xa8\xd6\x20\xf9\x2b\xf2\x5f\x27\xff\xf9\x9b\x9f\x47\xa7\x7f\x3a\x39\xf9\xf1\xc5\xe8\x5f\x7f\xfa\xcd\xc9\x7f\x8e\xf1\x1f\xff\x7c\xfa\xa7\xd3\x9f\xfd\x1f\xbf\x39\x3d\x3d\x39\xf9\xf1\x87\xf7\xdf\xdd\x5e\xbd\xfd\x89\x9d\xfe\xfc\x23\x2f\xf3\x3b\xfb\xd7\xcf\x27\x3f\xc2\xdb\x9f\x76\xec\xe4\xf4\xf4\x4f\xdf\x74\x77\x8d\x86\xc6\x01\xc4\x8b\x02\x88\x14\x03\xf0\x24\x11\x00\x8e\xc7\x1e\xfc\xf0\xbb\x2b\x70\xed\xf8\x3b\xd7\xc9\x43\xc7\x5f\x06\xdb\x64\x2e\xa7\xf5\xf8\x4c\x11\x91\x33\xad\x21\x75\x77\x6f\x03\xfd\x6b\xc5\x1e\xe4\x18\x16\x02\xf7\x51\xbc\xbd\x1b\x28\x54\xb5\x19\xa9\x33\x59\xd5\xfd\x8a\x16\x30\x4e\x58\x5e\x64\x90\x03\xd7\xc8\x78\x46\x5e\xb7\x45\x73\xe2\xb8\x7e\x03\xe7\x1f\x80\xcf\x09\x40\xea\x88\x1c\x78\x63\xa3\x0d\xbc\x71\xe0\x8d\x8f\xb5\x60\x9b\x78\x24\x9f\x62\x4d\x84\xb3\x65\x29\x2f\x29\xa3\x85\xbc\x42\xd8\x10\x53\x8c\xe2\x58\xb0\xb4\x6c\xf9\x01\x2b\x78\xe5\x00\xb7\x63\x3b\x6e\x05\x7d\xc8\xb0\x80\xac\x22\xc2\x9a\xe9\xc7\xe4\x2f\x36\xd6\xa8\xa9\x68\xb6\x0d\xea\xdd\x1c\x72\x9b\x5e\xb7\x0d\x28\xe2\x54\xdd\x63\xb5\x42\x52\x15\x0a\x55\x67\x88\x98\xdd\xd6\x6d\x2a\x2e\x2a\xae\x91\x2d\xcf\x88\x02\x6d\x13\x80\xe6\xb0\xb2\x4c\x54\x91\xa3\x8b\xec\x9e\x2e\xd5\x51\xe5\x93\x64\x9c\xe9\x95\xf2\x2b\x9d\x68\x40\x74\x6c\xd3\xe1\x54\x18\x99\x17\xeb\xca\x4c\xa7\x90\x74\xd4\x66\x2d\x84\xcb\x3a\x6d\x2e\x58\x5e\x33\x5e\x9a\xb7\xf5\xb3\x0a\x29\x11\xbc\xd3\x40\xf0\x99\x69\x52\x72\xcd\x32\x23\xac\x13\x09\xb3\x32\xa3\x4d\x43\xa0\x7b\x33\x1f\xc3\x97\x8e\xc9\x47\x9e\x40\xf3\xe1\x6e\x96\xea\x95\x01\x8c\xf0\x90\x81\x86\xf4\x0c\xbb\x6e\xbf\xba\xb2\x51\x70\xad\x93\x5f\x2d\x65\xa7\xe1\xfd\x5c\x56\x51\x4e\x63\x7b\xa0\xaa\x10\x0c\x92\xb2\xe9\xd4\x8c\x8c\xca\x36\x17\x32\xa7\xeb\x54\x51\x9e\x76\x1a\xdd\x9c\x5c\xcc\x7d\x69\xe2\x9c\x63\x6d\xab\x23\xc5\x52\x48\xa8\x3c\x6a\x56\x45\xba\xc8\xf4\x5c\x94\xb3\x79\xbd\x2b\xc2\xa6\x9c\x28\x8d\xb1\x5f\x66\x32\x95\xb7\x5c\xac\x6c\x36\x65\x64\x16\x9e\x80\x15\xad\x04\x58\x86\x71\x4f\x3b\x8e\xbd\x16\x02\x60\x03\xce\xed\x9a\xfb\x84\x30\x0c\x30\x84\xb4\x91\xbd\xc7\xe1\xb3\x8e\xf0\xc2\x63\x72\x69\xf1\x52\xce\xda\xbd\xb6\xa6\xc4\x4e\x46\x23\xc0\xce\x87\x8a\x76\x8c\x2e\x5c\x19\x80\x55\xf9\x6f\x88\xcc\x6e\x3b\xa7\x7c\xe9\xd3\x4d\x30\x00\xce\xa6\xc9\x55\x19\x30\x59\x37\x1b\x7a\x75\x96\x9e\xbd\xd0\x58\xeb\x84\x5e\x97\xd9\xe1\xbc\x97\xd7\xcd\x12\x47\x99\x2b\x41\x26\x0d\x45\x3e\xe5\x68\x0e\xc9\x9d\x3d\x79\x29\x58\xf6\x06\x0e\xe9\x3b\xf4\x74\xcd\x45\x99\xa5\x16\x57\xbc\xe6\xce\xc8\x69\x6d\x7c\xa7\x25\x83\x4a\x20\x60\x34\x04\x44\xae\x61\xdd\xd8\xb7\x90\xa9\xd9\xde\x96\x25\x63\xc7\xd6\xaa\xed\x73\x71\x1c\x49\xc8\xe5\x13\xc1\xed\x3d\x79\xe6\x6e\xee\x9c\x32\xde\x55\xb4\xab\xdf\x81\xcd\xb8\x90\x68\xb4\x9e\x12\x2e\xda\x34\xb4\x8f\xfc\x0a\x15\x9d\x65\x8e\x2a\x0e\x69\xa3\xb4\x53\x2f\xa7\x4b\xd8\x9e\x83\xd1\xd6\xda\xb4\x74\x65\xdb\x8d\x15\x95\x86\x23\x8e\x0d\x31\x4a\x4b\x8a\x40\xf1\x2e\xd9\x43\x76\xdd\xf8\x46\xe8\xbe\xd0\x24\x17\x4a\x93\xdf\xbe\x68\xcc\x71\x90\x1d\x6d\x44\xf0\x24\xa2\xc3\xaf\x12\x53\x10\x28\x85\x06\xe4\xaa\x8f\xc8\x65\x0a\x5c\xb3\x84\x66\x0d\x42\xcd\x25\x31\x15\x72\xc2\xd2\x14\x30\xee\x1e\x4b\xe2\xa0\xca\xd9\x51\xd3\x45\xd1\xb5\x1e\xa0\x11\x03\x52\x6f\xac\xf7\x7f\xbe\xb9\x45\x1f\x66\x5b\xde\xab\x75\xfe\x6e\xa2\xd1\xc2\xbc\x82\x36\x4c\xa1\xb9\x9f\xad\x38\xdb\x1a\xe9\xeb\x08\xe9\x33\xef\x63\x76\x4a\xc3\xd0\x33\x17\xf7\xeb\x7c\x84\x19\x91\x8d\xa7\x9d\xb3\x31\x7b\x10\xc7\x67\x37\xfe\x81\x62\xef\xec\xe0\x7d\x88\xe6\xba\x69\xa1\xea\x52\x97\xb6\x49\xef\x80\x1b\x56\xb6\xbe\xf0\xd3\x0a\x82\x8d\x49\x34\x77\x85\x20\x8b\xe1\x69\xa6\x9a\x29\x73\x9a\xed\xc5\x88\xee\xa6\x42\xb8\x1a\x96\x55\x50\xf6\x91\xdb\x9c\x08\x84\xeb\x99\x7d\x18\xaa\x7f\x04\xc7\x67\x04\xeb\x88\x99\xd5\xd7\x22\x0d\xb1\x71\xad\x84\x3b\x54\x42\x8f\xcd\xe7\xc1\xfb\x36\xb5\x32\x0f\x0a\x3c\x66\x5d\xdb\xab\xfa\x75\xc4\x39\x98\x33\x49\xb5\xe8\x6e\xef\x8a\x13\xeb\xe0\xc9\xe8\x97\x0b\xbb\xb5\x29\x24\x64\xf6\x3a\x9e\xb3\x82\x4c\x40\xdf\x03\xf0\xcd\x72\x5a\x0a\x27\xea\xd4\x1b\x6a\x02\x89\xa8\x43\x43\x6d\x88\xed\x98\x5c\xb5\x8e\x39\x5e\xee\xe1\xc0\x80\x97\xfc\xd5\x2a\x8b\x42\xc5\xcb\xb3\x19\xcf\xc2\x36\xbc\x2b\x06\x48\x85\x85\x73\x55\x2f\x0b\xa8\x6d\xac\xbd\x73\xf0\xeb\x7d\x10\x3a\xec\x0d\x83\x5f\xcd\xc8\x77\xce\x60\xf0\x24\x6f\x19\x29\x92\xc4\xc5\x71\xf7\xe8\x14\xb6\xaf\x5a\x37\x77\x6e\xeb\x57\xcc\xb9\x15\x82\xd7\x60\xdf\xa1\x3b\xa7\xd2\x29\x7e\xff\x7b\x02\xd6\x51\x15\x41\xaf\xf0\x2d\x0e\x62\x6a\x14\xcc\xd4\x78\x30\xe9\x24\x1a\x54\x3a\x79\x20\x2c\xa4\x1b\x38\x70\xe4\x48\x73\x04\xef\x67\x7a\x69\x74\x01\xf8\xdc\xc9\x60\x1d\xe3\xac\xdc\xb4\xc9\x68\x39\x55\x3c\x89\x44\x14\xb6\x86\x51\x9b\xc5\x35\x2c\x2e\x25\x47\x5b\x71\xb7\x1d\x7d\x39\x35\x2b\x62\xcd\x23\xe8\x28\xc1\xa0\xe5\x55\xc2\xbc\xd3\xc5\xca\x58\xff\x53\xb2\x05\xcd\x0c\x1b\xae\x7f\x71\x85\xe9\xa3\xcd\x1f\x3d\x65\x64\xbb\xa6\xea\xae\x76\xef\xc2\xa8\x10\x69\xed\xcd\x3d\xf7\x53\x87\x1f\xc1\x67\xfd\x05\x46\xb5\x23\x97\xba\x92\x6c\xc1\x32\x98\xc1\x5b\x95\x50\x2b\xc2\x1c\x3a\x32\xe2\x62\x0b\x5d\xb8\x33\xa5\xc8\x54\x65\x7b\xa2\x3e\x79\x1e\x8d\x30\x33\xca\x38\x56\xb7\x0f\x90\x56\xdd\xa0\xca\x66\xef\x33\xad\x48\x41\xa5\xd9\x85\x3e\x4b\xdf\xfa\x33\x26\x42\x64\xae\x1c\x5a\xb6\xac\xe9\x62\xdd\x43\x58\xd1\x80\x2e\xfe\xc6\xe1\xfe\x6f\x86\x0a\x45\xa6\x19\x9d\xd5\xfe\x14\x9b\xf7\xd8\x3e\x9e\xc1\xc0\x01\x5b\x27\x1a\x6b\x7d\x95\xe6\x1e\xbb\xa7\x4b\x55\x43\x2a\x34\xcd\xee\xdd\x6f\x94\x97\xa7\xc8\x4f\xa8\x22\xd5\xd8\xdd\xfc\x3d\xa6\xfd\xf6\x14\x8d\xfb\xaf\x2f\xae\xfe\x76\xf3\xd7\x9b\xbf\x5d\xbc\x79\x7f\xf9\xa1\x73\x67\x1f\x84\x06\x1b\xda\xa2\xb7\x65\x9f\x56\x19\x59\x63\xa1\xc6\x18\xb7\x8a\x88\xcb\x3c\x15\xf7\x81\xc1\xfd\x66\x4f\x01\xed\x66\x3d\xa1\x45\x71\x21\x73\x21\xaf\xa4\x98\xb2\xac\xb3\xc4\x1f\xeb\x04\xaf\x90\xe3\xc3\x7c\x2f\xdc\xc7\xf5\x75\x63\x21\x26\xd7\xb3\x49\x1a\x57\x06\x43\x20\x43\xd3\x4d\xf7\xb0\xa2\x55\x77\xfe\xb1\x5a\x25\xb1\xfb\x21\x3a\xe8\x9e\x39\x38\x80\x97\x21\xa3\xe3\xcf\x63\x98\x06\x32\x91\xd0\x0c\xeb\xe4\x87\x6d\x7c\x12\x59\x31\x59\xa5\xab\x01\x38\x42\xfd\x76\x26\x99\xa0\xa9\xf5\x61\x59\xe6\x9f\x82\xaf\xde\xe8\xc5\x2e\xcc\x5a\x08\x22\xe4\xd6\x82\x3d\xe0\x78\x1e\x21\xa5\x90\x50\x49\x35\x2b\xc3\x0b\x5b\xb4\x32\x68\xc8\xf7\xed\x1c\x10\xf7\x96\x2d\x2c\xaf\xd0\x33\x57\x0d\xe3\x0e\x18\x9b\xa2\x3d\x05\xed\x9c\x46\x51\x5f\x16\xd6\xc0\xf9\xce\x2f\x43\x40\x81\xed\x48\xca\x33\x76\xd2\x93\xdd\x69\xe7\xa7\xda\x91\x36\x19\xfc\x8e\x99\x19\x9c\xd6\x4c\xda\x6f\x1b\x2f\x83\xd8\x8c\xf0\xc0\xfd\xf8\x89\x66\x2c\xad\xf8\x7f\x04\xe3\x54\xb5\xc4\x64\xd4\x38\x5a\x85\x84\xd1\xfa\xf1\x0a\xd5\xf7\xaf\x4b\xae\x59\x0e\x1e\xfe\x74\xb4\x22\x13\x49\xfb\xf5\xb1\xaa\xca\x41\x45\xd9\xe8\x84\xfc\x99\xe3\x79\xe5\x90\x92\x11\xe1\xa2\x5e\x22\xe0\x53\x21\x13\x34\x3c\x1c\x74\x83\x27\xb4\xa0\x13\x96\xb1\x10\x66\x1e\x6b\x83\x63\x81\xe0\x06\x3d\x18\x03\x94\xa6\xe7\xa9\x14\x85\xbd\x89\x3d\x2e\x59\x78\x56\x66\x1b\xff\xa6\x59\x08\xcc\x59\xa2\x5a\x84\xcc\x24\xe5\xba\x8e\xdf\x5b\xdb\x38\xbf\x44\x19\x24\x86\x10\x40\xd3\x78\xa5\xb6\x2f\x52\xc3\x33\x9a\xcb\x16\x7c\xae\xfa\x56\xf3\xe8\xb5\x7f\xb9\x06\xc6\x0c\xb9\xfa\x78\x73\xf9\xff\xae\x9c\x9b\xee\xa2\x9d\x6d\xfd\xae\x78\x62\xf8\x41\xb4\x6d\x73\x0d\xb9\x58\x0c\x1b\xe7\xab\xdf\x38\x95\x81\xe8\xe0\x60\xe0\xd7\x65\xd3\xe3\xcc\x78\x83\x34\x2c\xde\xdb\xfd\x32\xb9\xaa\x70\x33\xdb\xbd\x36\x03\x74\x25\x10\xf3\x08\xd7\x0c\xc3\xa5\x1b\xd6\x5a\x2d\x6c\x31\x7f\x27\x76\x85\xd5\x89\x68\xde\xae\x53\x9a\xa9\x2f\xf5\x8a\x0c\x31\xed\x14\x52\x24\xef\x45\xc9\xe3\xa0\x8b\x07\xec\xb8\x8a\x10\x92\x02\x17\xda\x59\x53\x50\x97\x10\x53\xfc\x96\xd8\x9c\xb5\x46\xe1\x90\x96\x9c\x13\x20\x66\xdd\x36\x44\xab\x2a\x7e\xc5\xcb\xe1\x56\x7f\xc1\xfa\xc9\x1b\xe5\xaa\x3a\x85\x6d\x1a\x10\xc9\x20\x81\xa6\x36\x90\x86\xea\xb9\x45\xb4\xcf\xa9\xba\x83\xd4\x7e\xf0\x85\xee\xcc\x00\x26\x6b\x26\xe4\x23\xcf\x96\xd7\x42\xe8\x6f\x59\x06\x6a\xa9\x34\xe4\x87\xde\xa5\x7f\xa9\xc2\x52\x9b\x06\x45\xb4\x11\x53\x24\x79\x84\x8b\x88\x3c\x6a\x5a\x51\x1d\x5e\x0b\xc3\xac\xdc\x2f\x94\x43\xc9\x92\x5f\xa8\xef\xa4\x28\x3b\xcb\x53\x31\x75\xbf\xef\x2e\xdf\xe0\x25\x54\x3a\xf0\x65\xae\xe5\xb2\x10\x8c\x6b\x6f\x7d\x8a\xe8\x40\xf9\xb3\x83\xb9\x6e\x72\x99\x60\x44\x5b\x42\xde\xd3\x25\xa1\x99\x12\x95\x79\x8b\x6f\x72\x7d\x7a\xbf\xaa\xf9\x7a\x22\xf4\x7c\xcd\xa1\xda\x35\x8d\xc6\xb4\xf5\xf1\xce\x1a\x18\xce\x75\x70\x0a\xe3\x6b\xc3\x6a\x44\x58\x29\x24\x24\x90\x02\x4f\xbe\xd4\x13\x71\x68\x48\x61\x3c\x55\x1f\x04\x37\xec\xf5\xd0\xe7\xea\xb2\xb2\x15\xba\xd5\x68\x9e\x22\x34\x2b\x3b\x87\x1e\x45\xf8\x6d\x64\xae\xa5\x0a\x89\x02\xbd\x9c\xa2\x07\xd2\x6e\xba\x1f\xca\x09\x64\x66\xb1\x59\x96\xf9\xc8\x77\x1b\x26\xc0\x72\x3a\x03\x42\x75\x75\x08\xb5\x20\xc0\x55\x29\xdd\xbe\xe9\x98\xe1\x64\x5a\x95\x9c\xe5\x5e\xed\xcf\x97\x6f\xc8\x0b\x72\x62\xde\xcd\x46\xef\x4d\x29\xcb\x10\xd1\xdb\xc7\xcd\x36\xe5\xf1\xa9\xcf\xef\x0a\x9a\x02\xe4\x23\x44\x48\x7b\xb5\x9c\x11\x2e\x88\x2a\x93\x79\x23\xfa\xbf\xb2\xce\xba\xf2\x4e\x41\xa0\x20\x03\xdb\x89\x77\x1f\xfe\x59\x41\xe7\x70\xd5\x98\xd7\xe1\x9f\x9f\xf1\x3a\x6c\xaa\x6b\xe6\xf8\xb7\x17\xcc\x9e\xd5\x1c\x34\x4d\xa9\xa6\xee\x9a\xf4\x0f\x0c\xbb\x76\xb8\x2c\x03\x2e\x4b\x05\xef\x18\x2f\x3f\xdb\x02\x2a\xbd\x70\x41\xdc\xbc\x45\x8a\x48\xe2\x17\x5a\x34\x7c\x68\xde\x5b\x10\x21\x5d\xe2\xb2\x75\x8c\xce\xb6\x68\xc0\x78\x4b\x50\x8b\x83\x89\x19\x8d\x94\xa7\x22\x5f\x23\xd2\xa8\xec\x40\x93\x79\x67\x6a\x1a\x11\x1c\xc3\xc1\x74\xed\x97\xed\x9c\xc1\x54\xd2\x68\x76\xf6\x77\x98\x98\xca\x54\xb5\x73\x6d\xa6\x6a\x46\x27\x90\x39\x88\x5a\x8b\x5b\x1e\xf1\x84\x45\xb2\x47\x4b\x11\x31\x3c\xe5\x5a\xd8\xa8\x2a\x5a\x4d\x84\xe9\xfe\x8b\x98\x87\xa8\x81\x10\xb7\x2e\xd2\xa3\x9e\x07\xb4\x47\x7e\x09\xf3\x50\x06\x08\x88\x64\x75\x1e\x8c\xb4\xd9\x9e\x07\x94\xbf\xfa\x3e\x0f\x0a\x92\x44\xe4\x45\x4f\xa2\x16\x6f\x6d\x44\xbc\xa1\x68\xd7\x08\xc5\xf6\xc3\x34\x28\xf4\xd8\x95\xc5\xa2\xda\xde\x83\xbe\x36\xd6\xff\xaf\x71\x9d\x23\xb7\x5b\xbd\xe3\xdd\xe8\xc1\xd1\x91\xd5\x88\xae\xc3\x5f\xe2\x8d\x37\x84\x44\xb6\xda\xb3\x87\x44\x36\xd0\xeb\x29\x9a\xe7\x5b\xe1\x89\x5f\x43\x60\xa4\x51\x02\x70\x5e\x81\x23\x22\x4f\x41\xf5\xfc\xcc\x65\x8f\x2e\xc0\xb3\xe7\x3b\x6b\xf1\x3a\x46\x8e\xe3\x09\xf2\xec\xa6\x8e\x1f\xb5\xa8\xf6\x51\xe3\x28\x37\xc5\x4e\xda\x67\x3e\x7c\xbc\x6d\x62\xda\x53\xbe\xb4\x78\x8d\x01\x08\x63\xb6\xf5\x4f\xac\x78\xca\xf8\xca\xd5\x55\x7c\xea\xf0\xca\xa0\xfe\x36\x47\x57\x3e\xdf\x29\xdd\x2d\xe2\x72\x35\xde\x32\x2a\x09\xab\xc1\x97\xeb\x63\x44\x58\xb9\xe0\x23\xe0\xae\xce\x1e\x19\x40\xfe\x62\x29\xf2\x5a\x76\xe2\x01\x04\x55\xd3\x08\x42\xb3\xd0\x12\x6e\xb6\x6d\xb2\x82\xf8\x53\x50\xc1\xba\xaf\x5b\x03\xda\xc5\x4f\x43\x46\x7f\xc4\x82\xf1\x65\x5b\x22\x32\xa3\x51\x7c\xe1\x76\x88\x59\xae\xe8\x6b\x09\xa9\x8d\x59\xba\x29\x20\xe9\xcb\x6d\xf1\xdd\xfb\x9b\x8b\x36\x65\x28\x0b\xbb\x22\x16\x80\xdf\x13\x9a\xe6\x4c\x29\x74\xf8\xc0\x64\x2e\xc4\x5d\xd0\x90\x27\x3e\xed\x75\xc6\xf4\xbc\x9c\x8c\x13\x91\x37\x32\x60\x47\x8a\xcd\xd4\xb9\xe3\x28\x23\x33\x71\xa7\x84\xf1\xac\xca\x1a\x46\x6b\x21\xe2\x72\x75\x87\x75\x6b\xbe\x3c\x49\xaa\xb7\xc7\xad\x87\xb9\x22\x55\x98\xf4\xfa\xf4\x60\xa5\x11\xdc\xbc\x07\x97\x3a\xd6\x77\x55\x58\xe5\xbf\x95\x9d\xb5\xe5\xdd\x9b\x55\x33\x9c\x17\x67\xe3\x3c\x5a\xe5\xf5\xe0\x93\xe4\x84\xfe\x04\x54\x50\x34\x6a\xcc\x33\xf7\x7d\x4d\x52\x13\xd7\x8e\x4d\x5b\xe8\x4c\xed\xfc\x77\x74\x6f\x1f\x9b\x5f\xfa\x10\xc9\xe3\x58\x85\x5e\x2e\xb2\xcc\x2c\x24\x75\x20\x68\x8d\x48\x4b\x54\x4d\xda\xe8\x72\x16\xff\xd6\x28\x0b\xcd\xb7\xc0\x8b\x24\x8c\x29\x58\x0c\x32\x73\x19\x38\xfc\x0a\xb3\x81\x70\x6c\x4a\x72\xf6\xd9\x50\xd8\x1c\xb1\x0d\xd8\x8a\x8e\xff\xcd\x5f\x07\x54\xba\x26\x18\x7c\x50\xe1\x97\x9f\x99\x15\x6a\x0e\xe2\x13\x95\xb5\xb9\xb6\xcc\x17\x1f\x40\x1b\x45\xcd\xce\x5b\xd3\xfb\x60\x14\x2b\x59\x46\x38\x0c\x21\x9e\x61\xd2\xf4\x0e\x47\xe5\x14\x81\xe7\x01\x3d\xc5\x8e\x26\x23\x83\x78\xe1\xed\xb9\x3c\xc7\x64\x43\x2a\xcd\xb3\x79\x90\xc9\xee\x5e\xe4\x27\xf4\x55\x91\xbe\xf8\xab\x02\xb9\x7e\x13\x77\xf7\x60\x98\x27\x4d\xec\x5f\xb6\x1e\xbc\x74\x25\xd2\x35\x48\x60\x04\x16\x66\x34\xeb\x5e\x54\xf5\x72\xda\x84\xd1\xe4\xc2\x99\x47\x6c\xa9\x71\x1b\x33\xff\x19\x92\x52\x43\xea\x90\xc1\x9d\x49\xd9\xa2\x0a\xb7\xa9\xe9\x4c\x81\x4f\x98\x9f\x00\x06\x28\xa9\xb3\xba\x2c\x9a\xd3\x75\x2a\xac\xd5\x33\xf2\xdf\xc8\x25\x95\x07\xb7\xca\xd8\x02\x38\x28\x75\x55\xfd\xbc\xeb\x54\x20\x48\x46\x42\xb9\xd7\xad\xcc\x99\x76\x16\x6e\x87\x00\xee\x30\x35\x26\x40\x0a\x2a\x69\x6e\xee\x60\x45\xdc\xf2\x4c\x60\xc6\x6c\x8a\x5e\xe3\x52\xac\x20\xc4\xbb\x01\xdc\xa2\x62\xc3\x34\xc9\xd9\x6c\x6e\x4f\x0b\xa1\x24\x13\x7c\x46\x7c\xdc\x58\x26\x68\x4a\x90\xb1\x08\x49\xee\xa9\xcc\x8d\x2c\x40\x93\x39\x06\xa1\x51\x4e\xd2\xd2\x9c\x07\x82\x80\xd7\xcb\x91\xd2\x54\x83\x03\xa6\xeb\x6c\x83\xf3\xd3\x74\x80\x72\xad\x4f\x5d\x27\xff\xc0\xd8\x36\xe6\xa4\x45\xb1\x82\xbc\xfd\x0c\x49\x75\xac\x2d\xfa\x73\x9e\x23\x78\x9f\xf0\xc7\xd9\x23\xb7\x05\x0b\x83\x3d\x51\x95\xdd\x1b\xf6\x45\x36\x79\xed\x26\x9c\x79\xed\xd3\xfe\x69\xf4\xd1\xf6\x22\x28\xef\xc4\x6a\x14\x30\x42\xa4\x6a\x21\xef\xcc\xc9\xb5\x78\x3d\x42\x56\x95\xf3\x83\xc8\xf2\x74\x20\x7c\xb5\x10\x9a\x9c\x1c\x9f\x1f\x9f\xae\xed\x85\x63\xd5\x4c\x33\xb0\xd9\xc9\xf5\x0b\x29\x96\x17\xd9\x12\xdf\xe1\xd8\x96\xdf\x0e\x04\x13\xf4\x01\xab\x55\x29\x4a\x35\x87\x2c\x3b\x23\xca\x88\xbf\xd4\xd7\xf3\xb0\x9f\x9a\x87\xb4\x2c\x13\x6b\x26\x3b\x39\xfe\xf9\xf8\x8c\x80\x4e\x4e\xc9\xbd\xe0\xc7\xda\x3a\x3c\xc8\x2d\xea\x90\x41\x34\x55\x44\x2c\x45\x49\x38\x80\x3b\x3b\x55\xe1\xa8\x84\x1a\xf5\xa7\xb4\x32\xba\x05\xc0\x80\x2c\x0b\x93\xe7\xde\x7e\x66\xda\x88\x22\xba\x44\x33\xc5\x0b\xab\x29\x00\x62\xc2\x53\x85\x37\xdd\xf9\x1c\x68\xa6\xe7\xcb\x4a\x7b\xf9\x07\x48\x81\xb5\x42\xb9\xfb\x26\x5c\x86\xea\x41\x0a\x67\x7f\x93\x29\x8d\x80\x51\x4a\xb8\x9d\x4b\x50\x73\x91\x1d\x3c\xa5\xf2\xbd\x2b\xbd\x96\x08\xae\x0c\x4f\x31\x2a\xb6\xa3\x51\x55\xd9\x6c\x56\x66\x71\xb5\x0e\x04\x9e\x32\x09\xa9\x13\x96\x5c\xf9\x89\x39\x5d\xa0\xa4\x60\xe4\x39\x48\x43\x54\x93\xa6\x4e\xf4\xbb\x71\x45\x61\x95\x02\xf7\xb2\x27\x61\x9b\x1d\x71\x1c\x67\xb2\x88\x73\x4b\x7f\x77\x7d\xf5\xba\x75\x4b\xe3\x07\xdf\xe3\x31\x7e\x3d\x87\xe4\xee\x3a\xac\xb2\x6a\x4f\x42\x0b\x0a\x21\x0f\x29\x18\xe4\x22\xed\x8d\xc5\x22\x47\x57\x63\x0b\xfd\x35\x11\x9c\x83\x05\x5b\xc7\x6f\xfd\x91\x9d\x99\xbd\x60\x59\xba\x3d\xbe\x61\x57\xcb\x8d\xb5\x26\x1d\xdd\xbe\xbb\x39\xf2\xf1\x41\xb7\xef\x6e\x10\x1f\xd3\xdc\x62\x89\x99\xe6\x29\xaa\x9c\x64\x01\xd2\xfe\x33\xd8\x4d\xef\x47\xbd\xca\x28\x43\x8d\xbf\x1a\x9b\x92\xc2\x7f\x46\x4e\x18\xb2\x2e\x09\xa7\xcd\xd9\xa8\xef\xda\x40\x4b\xdc\x74\xa5\xbc\x59\x83\x23\x62\xfa\xed\xa3\xa4\x1c\xdc\x16\x6d\x4e\x50\xb4\x2d\x7c\x25\xa4\x26\xbc\xcc\x27\x20\xbd\x4d\x0c\xf7\x9a\x02\xb9\x60\x09\x8c\xc9\x07\xfb\x9d\x8f\x2f\xf1\xc5\xac\x29\x9f\x01\x79\x69\xd6\xef\x0f\xbf\xff\xfd\xef\x7e\x1f\x3e\x29\xe1\xb8\xbc\x71\x30\x79\xdd\x8b\xf7\x85\x47\xdc\x58\x72\x36\xf9\x4b\x1c\xa5\x68\x97\xc8\x68\x52\xad\xcd\x6c\xf3\xbd\x11\x66\x58\x57\x00\x64\x83\xc7\xcd\xdc\x7e\xf6\xff\x26\x99\x98\x9c\xe7\x54\x69\x90\x46\x4d\x77\x92\xe9\x08\xd1\xab\x19\x9f\x8d\xf3\xf4\x74\x1c\x16\xc8\xe1\x2d\x43\x6b\x15\x0a\x5b\xa8\x45\x5b\xaa\x0d\x9a\x49\x39\xf8\xc9\x25\x9e\xca\x57\xe4\xa8\x5b\x71\x3a\xb3\x04\xdf\x41\x9c\x64\xca\xef\x6f\x6f\xaf\xbe\x03\xdd\x94\x39\x38\x7e\x48\xbe\x7b\x7b\x5b\x55\xaf\x37\xbb\xcb\xe6\xe5\x0d\x82\x47\x88\xe0\x31\x17\x2a\x1e\xd7\x8e\xe0\x3a\xb4\xac\x04\x4b\xed\xe1\xcd\x46\xb4\x38\x6b\x15\x4a\xf6\xa1\xb4\x97\x57\x63\xf2\x57\x51\xe2\x1d\x49\x27\xd9\x92\xdc\x53\x0b\x90\xd1\x0d\xa1\xbc\x6e\x47\x86\x8c\x23\xc3\xb5\xcc\xae\xfe\x1e\x68\x6a\x4b\x9f\xa2\x75\xf2\xe0\x67\xb5\x41\x53\xb4\x65\x7b\x5d\x2a\x2d\x72\x23\xc7\xe1\xab\xda\x39\xac\xae\x54\x27\xde\xdb\x23\x88\xee\x4b\x45\x24\x14\x56\xe1\x77\xbf\xf9\x2a\xd4\xf9\x35\x2e\x64\xe7\xb9\x51\x5c\x8a\x92\xa4\x39\x55\x4e\x57\x45\x2b\x3c\x73\x3c\xaa\xb3\x55\xb7\x6e\x51\x8a\xd4\x90\x48\x85\x6a\x08\x32\x29\x73\x28\x83\x3b\x09\xf7\xa3\xc7\x29\x79\x63\x1a\x0f\xf4\x10\xdb\x16\xb7\xe0\x06\x71\xde\x62\xb7\xb9\x6c\x0c\x99\x21\x34\x14\xe4\x92\x78\x7f\x48\x55\x8f\x97\x72\xc1\x59\x62\x3d\x72\xa4\x2c\x04\x27\xa2\xd4\x45\xa9\xd1\x9a\x99\x50\x05\xa3\x05\x95\xcc\x30\x54\x33\x7e\xfd\xc3\x92\x9b\xd3\xae\x85\x40\x53\x5f\x15\x37\x61\x29\x0e\x27\x33\x92\x34\x43\x7c\x3d\x95\xc8\x2b\xbc\xb6\x38\xe1\x3b\x9a\xf4\xda\x8c\x48\x6c\x49\xfa\x79\x3c\xb5\x8e\xea\x39\x06\xa7\xa2\x3b\xd6\xc7\x36\x23\xe3\x34\x6a\x43\x0f\x72\xc7\xa2\x6a\xb1\x81\x2c\x01\x43\x46\x84\x5c\xd1\x83\x0d\x85\xeb\x73\x18\x29\x5c\xea\xe9\xd5\x6a\xf7\x5a\x7e\x04\xca\xc9\xe5\xc5\x87\x8b\xbf\xdd\x7c\x7a\xfd\xb7\x0f\x17\xef\xdf\x86\x74\x4d\xf9\xf2\xe3\x34\xec\xcc\x8f\x22\x96\xe3\x19\x3d\xc9\xc9\x66\x5c\x8f\x84\x1c\xd9\x4e\x5f\x61\xe4\x55\xf7\xcd\x2e\x85\x16\x89\x88\x97\x44\x1c\xb8\xe1\xaf\x1c\x3d\x44\x41\x06\x89\x2b\xff\x76\xcf\x6c\xa1\x6d\xfb\x4d\xdb\x59\x10\xc7\xfc\x45\xc8\x07\x96\xb5\x94\x0c\xc3\x91\xce\x5f\x8e\x3b\xfb\x00\x48\x2c\x76\xa4\x92\x39\xf4\x27\x96\xed\x06\xa9\x69\xa2\x10\xfa\x05\xa8\x0b\xa0\x87\xc1\x52\x92\x15\xcf\x8c\x59\x88\x83\x2e\x82\x0b\x5d\x7a\x03\x19\x5d\xde\x40\x22\x78\x7a\xf0\x14\x90\x0f\xd5\x75\xa0\x2c\x41\x55\xdd\x77\x58\x81\xe5\xf3\x95\x9f\x5d\xb5\x7a\x1f\x84\xd4\x8c\x9b\xb2\xef\xd7\x39\x34\x86\xf4\x2f\x3c\x86\xf4\xc6\x07\x57\x80\x64\x18\x76\xd8\x87\x5d\xf3\xbd\xb8\x27\x62\xaa\x81\x93\x13\xc6\xfd\xce\x39\x6d\xd8\xd1\x6a\xb6\x1a\x0e\xd9\xa8\x05\x79\xf9\xc2\x0f\xf2\xf5\x39\x57\x5d\x38\x61\xaf\xdd\xeb\x8e\xc6\xc7\xfd\xeb\x75\x6c\x64\xdb\xc7\x1e\x12\xa4\x48\x56\xd8\xf8\xcb\x71\x95\x0c\xfb\x12\xe9\xa9\x58\x11\xe5\xa9\x8f\x6b\xfd\xfa\xf6\x89\x4e\x8a\x1b\x91\xdc\x45\x32\x8c\xdf\xbe\xbe\xb2\xbd\xad\x04\xcd\x55\xce\x48\xa3\x14\x98\xa7\x50\x45\x18\xcc\xe2\xbd\x31\x8b\x1f\xdb\xdc\x51\x9a\xbd\xda\xdb\xc4\x7d\x7c\x68\x01\xb4\x57\xfa\xb0\x13\x7c\x64\xbb\xe4\xd1\xa0\x0f\x6f\x69\x83\x3e\xbc\x47\xb3\x99\x6a\x18\x4e\xf2\x9d\xa4\x09\x5c\xf5\x49\x78\xf3\x0c\x84\xa4\xa5\x74\x75\x24\x2b\x19\xae\x62\x17\x1c\x20\xb5\xfc\xc3\xbd\x0a\x90\x99\x79\x13\x9b\x83\x81\x56\xde\x3a\x7b\xa1\x94\x01\x62\xde\xed\xdc\x75\xed\x44\x5c\x1f\x06\xb0\x89\xba\x5a\x37\x29\xaa\xea\x07\xbe\x4c\x90\x3b\x4e\x86\x78\xa3\x8b\x28\xe0\xdd\x1d\x1e\xb4\xb9\x82\x44\xb1\x99\x99\x2e\x57\x0a\xde\x26\x22\x54\xb5\x36\x6b\x42\xcc\xa8\x53\x21\x13\x36\xc9\x96\x64\x4e\x33\xa3\x2c\xdd\x33\x3d\x27\x94\xdc\xb1\x2c\x73\xdd\x74\x9f\x28\x0c\x2d\x9a\x33\x97\x43\x88\x49\x11\x38\x19\xd4\x25\x7e\x7d\x2e\x20\x31\x63\x26\x19\x50\x5e\x16\x96\x4e\x23\x1f\x2d\x45\x19\x21\xf7\xcb\x87\x26\x54\xf2\x14\x67\x0e\xe3\xc8\x56\x6a\x7c\x70\xcf\xb7\x33\xf8\xc9\x47\x3d\x07\x79\xcf\x14\xd8\xca\x91\x9d\x69\xb2\xb4\xb4\xeb\x46\xda\xcf\x2a\x9c\x26\x97\x9e\x6c\xb6\x05\xe6\xcb\x77\x1e\xeb\x13\xf6\xeb\x59\x2b\x17\x7c\xc4\x61\x66\xd1\x60\x1c\x43\xb3\x61\xe3\x76\x7c\x1b\xa4\x5c\xa5\x34\x29\x2d\x0a\xc2\xf2\x1c\x52\xa3\x1f\x67\x4b\xb2\x60\xb4\x33\x25\x88\x3c\x53\xef\x28\x72\xc2\x05\x11\x85\xb9\xba\x4a\xce\xf4\x12\x7d\xae\xf3\x52\x93\x54\xdc\xf3\x80\xa4\xce\x5b\x17\x88\x42\xc9\x04\x34\x75\x5e\x0a\x73\x08\x9c\x48\xa6\x08\x70\x3a\xc9\xcc\xd9\xc3\x4c\xa4\xdb\x8d\x1b\x80\x4c\x81\xea\x52\x02\x99\x51\x1d\xc0\x25\x36\x48\xf3\x76\x3d\x1f\xde\x76\x4c\x39\x8f\x6a\x20\xd8\x7b\x3f\xe0\x53\xcd\x89\x16\xa5\xee\xc9\x3d\xb2\xcd\x74\x64\x71\x74\x1a\x4a\x22\xcb\x41\x11\x51\x46\x2a\x30\xf3\xd2\x0d\x17\x53\xc3\x1b\xec\x4e\x1b\x9b\xd2\x29\xeb\x54\x66\x3c\xc6\x16\xdb\x52\x21\xc4\x25\xfb\x37\x40\x72\x27\xe5\x74\x0a\x12\x6f\x3a\x24\x78\x2d\xb7\xa7\x2a\xdc\xe7\xef\xb0\x6e\xc6\x5b\x17\x92\x07\xfa\x0c\x0b\x94\x38\xc4\x9a\x2d\x43\x3a\x24\x5f\xac\xcb\x2d\x41\x61\xc1\x09\x4e\xde\x7e\xfc\xb6\xdb\x16\x8d\x51\xbe\x24\x2c\x2f\x1e\xdf\xf3\x23\xef\x16\x35\x1a\x77\x3f\x6c\x82\x96\x72\xdb\x22\xc9\x84\x72\x18\x0c\xb8\x2e\xc9\x9c\x72\x0e\xde\x18\xc5\x34\x5a\xb2\x27\x00\x9c\x88\x02\x6c\xd8\x64\x27\x62\x28\x51\x8c\xcf\x32\x20\x54\x6b\x9a\xcc\xc7\x86\x3a\xee\xf7\x42\x0d\x76\xe0\x3e\x51\x5a\x02\xcd\xed\x9e\x90\x90\x53\x66\x87\x27\x34\x91\x42\x29\x92\x97\x99\x66\x45\xd5\x59\x37\x2b\x22\x20\xec\x8c\xb2\xb9\xef\x7e\xad\x30\x77\xad\x46\x55\x38\xab\x29\x74\xaf\x2f\x9a\xd5\xc9\xd0\x74\x76\x66\xbe\x85\xbc\xd0\xcb\x2a\xfb\xb9\x9b\x0e\x34\x65\x52\x69\x92\x64\x0c\xb8\x76\x6f\x66\x71\x4d\x91\x86\x33\x2f\x4e\x73\x37\x23\xca\x4d\x09\x4f\x51\xf9\x2e\xb4\xb2\x49\xbe\x15\x11\xbe\xab\x94\x29\x67\xeb\x50\xdd\x52\x8c\xa9\x2f\x45\x65\x37\x8e\x9f\x11\xdc\x3a\x5e\xc0\xb1\x14\xb9\x8f\x1a\x24\x34\x0a\xeb\xd7\x09\xda\x61\x7c\x65\x9a\xd1\x59\x75\xae\xcf\x5a\xc0\x26\xb5\x6e\x81\xf9\x76\x6b\x5c\x07\x37\x14\x87\x85\x39\x07\x90\x80\x11\x45\x69\x44\x26\xf3\xec\x3c\xa6\x21\xcb\xbd\x07\xa5\xe8\x0c\xae\x3a\x06\x8c\xc4\x60\x38\xb5\xa1\x0d\x23\x4d\xea\x6d\x33\x07\x8b\xa6\xa7\x45\xe3\x93\x66\x26\x69\x53\x79\xcc\xed\x8b\x74\xa2\xc0\x2b\x4d\xf7\x92\x69\x0d\xb8\x4b\xb1\x74\x1b\x86\x08\xae\x22\x04\xb7\x33\x58\x3b\x8d\xe7\x26\xbd\x39\x9e\x11\x3f\x78\x6a\x73\x41\x27\x40\x26\x92\xc1\x94\x4c\x19\x26\xa7\x62\xda\xe6\x99\x2d\x75\x42\x31\xb2\x9a\x2a\x05\x12\x5f\xdb\x99\x05\xfc\xeb\x77\xa3\xe7\x2f\xee\xfd\xb5\x2c\x79\x42\x1b\x35\x79\x11\xc0\x90\x4d\xc9\x0c\x53\x45\x9d\x12\xfc\x2f\x2f\xfe\xf5\x0f\x64\xb2\x34\xf2\x1a\x2a\x62\x5a\x68\x9a\x79\x02\x48\x06\x7c\x66\x56\x11\x59\x6e\x37\xbe\xd1\x02\xc1\xab\x16\x27\x63\x39\xd3\x76\x82\x5e\xfe\xf6\x6e\x12\x74\xf4\x90\x3f\x9e\xa7\xb0\x38\x6f\x6c\xa1\x51\x26\x66\xdd\x7a\x7d\x1d\x03\xb2\x20\xc8\xce\xb6\xe1\x44\x8b\x8c\x25\xcb\x43\x9d\x69\x5f\x21\x89\xcc\xc5\xbd\x35\xe6\xac\x1f\xd5\x06\x9e\x54\x21\x8a\x32\xc3\x89\x23\xdf\x56\x20\xa0\xa5\x82\x55\x7c\xb5\x50\x23\x61\x83\xdb\xa1\x13\xd5\x0d\xbb\x72\xe7\xb8\x3c\x69\x4f\xa6\x70\xe8\x36\xce\xe7\x56\x15\x3b\xea\x6c\x8d\xfb\x96\x66\xd9\x84\x26\x77\xb7\xe2\x9d\x98\xa9\x8f\xfc\xad\x94\x42\xb6\xdf\x39\xa3\xe6\x4e\x9f\x97\xfc\x0e\xcb\x66\xd7\x88\xd7\x62\xe6\xa2\x3e\x3d\x48\x49\xe3\xed\x3a\x11\xe3\xdf\xd2\x62\x10\x7b\x91\xc4\xdb\xe0\xea\x91\xe1\x33\xab\x0d\x6d\x9c\x80\xa1\xb9\x2b\xca\x07\xb4\xde\x43\x35\x8f\xf6\x6f\x5f\xfc\xcb\x1f\x2d\x73\x21\x42\x92\x3f\xbe\x40\x5c\x03\x75\x66\x2f\x00\xbc\x81\x8d\xa8\x95\xd3\x2c\xeb\xea\x25\x68\xb2\x80\x6f\x3b\x57\xa3\xef\xc1\x91\xd7\x07\x3b\xdd\x3b\xab\x8c\xb7\xb7\x7f\x45\x7d\x91\x69\x05\xd9\xf4\xcc\x42\x4a\x55\x66\xad\x63\x94\xae\x8e\xdd\x95\xd7\x1d\x8e\xec\xf0\x4a\xdb\x42\x64\x65\x0e\x6f\x60\xc1\x92\x6e\x0e\xcc\xd6\xaa\xb4\x7a\xf3\x66\xfa\x8c\x29\x44\x1a\x9b\x64\x22\xb9\x23\xa9\xfb\xb2\x91\xcc\xb0\x5a\x46\xbf\xfb\x2c\x74\x4d\xeb\x08\x48\xe7\xd8\xfa\xfe\xad\x44\x8e\x9c\x16\x45\x05\x83\x24\xe9\x7d\x6b\x32\x90\x35\x21\x04\x73\xa0\x1b\x31\xd8\x99\x1e\xea\x4a\x1f\xb9\x37\x32\xd7\x54\xe7\x2e\x3a\x67\x7f\x84\x7b\xe2\x6b\xea\xbb\xfb\x31\x5b\x1b\xa2\xee\xd0\x9f\x86\x02\xff\x6d\x41\x5d\xd6\xe0\xf7\x2a\x5c\xb3\x6a\x63\x58\x09\xd2\x6c\x1f\xbc\x65\xba\x9b\x2f\x23\x38\x43\xc3\xb2\x58\x5a\xf3\xc2\x2b\x27\x74\x4e\xb5\xd3\x8f\xbc\x97\x9d\x92\x02\xa4\x62\xca\x88\x4e\x9f\xf0\x40\xbd\xce\x28\xcb\x1b\xee\xbb\x43\x4d\xc2\x7a\xce\x43\x4e\x8b\xd1\x1d\x2c\x3b\x6e\xb8\xc0\xe3\xb2\x2d\x05\x23\xa7\x45\xc7\x7b\x00\xab\x82\x87\x5f\x03\x1d\x2f\xe7\x2b\x91\x3a\x3a\xf0\x7a\xb0\x35\xc8\x9f\x44\x8d\x8d\x28\x03\x1d\xfa\xca\xf9\x54\x2f\x5c\xfb\xc6\x31\x9f\x54\x57\x8e\x7d\xea\x6b\xba\x68\xf0\xfd\xbe\xd4\x7b\x66\xc2\x78\x8a\x4b\x16\x08\xf3\x1f\x33\xe0\x69\x95\xa6\x55\xf1\xcd\x43\xf7\xd2\x0c\x1f\x75\xc7\xb3\x51\x5e\x89\x16\x45\xb6\xc4\xb0\x87\x00\x2a\xaa\x6d\x6b\x23\x09\xec\xb6\x5d\xe7\x01\x63\x72\xe1\x90\x8d\xd1\xb5\x67\x43\x2b\xb8\x80\xcf\x90\x74\x33\xf9\xda\xc6\x45\x0a\x8b\x33\x87\x23\xa6\x4a\x96\xa2\x9d\x48\x01\x76\x6f\xcb\x71\xb5\x5f\xdb\x3c\x89\xc0\xca\x5c\x38\x38\x67\xd2\x51\x9b\xb5\xcd\xc3\xf5\x1a\x42\x82\xd2\x9c\x6f\xeb\xba\x00\xde\x2d\x55\x62\x00\x80\xd7\x84\x2d\x04\xaf\x63\xb7\xc1\x23\x31\x6b\xdc\xcb\x8a\xf9\xc3\x61\x00\x66\x11\x2d\x2f\xfa\x8f\xd5\xed\x16\x27\x0a\x20\x46\x7a\x77\x70\x72\x77\x94\xc0\xb3\x6d\xb7\x7b\x77\xc0\x81\x8a\x65\x46\x62\x37\x28\xd6\xba\x2b\xa5\x2d\xc7\xb6\x2c\xe1\xee\x10\xd7\x36\x33\x67\xa1\x3e\xa8\x2c\x6b\xe7\x42\x8a\x82\xce\xd0\x02\xd5\x07\x0e\xbc\x4a\x53\x13\xd0\x7e\x2e\xee\xed\xf7\x96\xd5\x15\xee\x29\x48\xeb\xaa\x28\x73\x11\x04\x6f\x63\x23\x84\xfd\x02\x3a\x2b\x9a\x05\x3e\xbe\xa7\x4b\x42\xa5\x28\x79\x10\x20\x05\x3a\x40\x2b\x07\xf9\xfb\x95\x97\xfd\x20\x38\xf8\x60\x9c\x78\x8c\x0f\xe3\x92\x18\x27\x2f\xc7\x2f\x5f\x04\xd3\x7e\x0d\x49\x29\x15\x5b\xc0\x35\xd0\xf4\x23\xcf\x96\x0d\xe7\xe9\xe5\xf4\x4a\x28\xc5\x26\x19\xa6\xd0\x6a\x41\xde\x1a\x96\x07\xe9\xfa\x8b\x56\x01\x62\xf8\xc6\x42\x36\xa1\xcf\x03\x28\x3c\xb1\x07\xae\x19\xd8\x6d\x06\x08\x88\xee\xea\x97\xc6\x88\xeb\xba\xa2\x31\x7e\xa8\x34\x46\x7b\xa7\x1c\xf4\x5d\xa5\xdb\x14\x7d\xe0\x24\xef\x9d\x0f\xd0\xd0\x34\x12\xb8\x53\xa7\xce\xbf\x8f\x1f\xdd\x4b\xa6\xdd\xe1\xbe\x67\x0a\xc8\x09\x5a\x1f\x57\x36\x63\x50\xb5\x87\xa6\xad\xba\xb3\x69\xd3\xb6\x18\xd5\x1a\xe4\xea\xd1\xed\xc3\x2a\xad\xf3\x93\x3a\xd3\xe6\xde\x19\xaa\xeb\x15\x74\xdc\xbf\xbe\x46\xe7\x94\xa7\x59\x10\xcf\xa8\x66\x25\x5b\x06\xa1\x92\x5d\x4e\x49\x93\x25\xba\x38\x85\x46\x69\xaa\x39\x35\x32\x28\xc9\x81\x62\x20\xb6\xb9\x5d\x3c\x17\x6c\x15\x7e\x88\x47\x83\xdd\xec\xf6\x1a\x6b\x5e\x08\x8e\x5d\xbf\x61\xca\xb1\x67\xc3\x47\x9c\xa5\xc1\xca\xc9\x39\x4d\x43\x40\x36\x1a\x73\x5a\x2f\xde\xb8\x0e\x8e\x5e\xa5\xa4\xbe\x38\x56\x68\x79\x0a\x3a\xb0\xec\x8a\xad\x0e\x53\xab\x03\xab\xe6\xf7\x3a\x18\x2e\x28\x6a\xc5\xb6\xd5\xd7\xad\xae\xc5\xb5\x77\xdd\x4c\x71\x45\x70\x00\x0d\x8f\xbf\xea\x59\x83\x17\xfa\x58\x70\x1b\x3a\xe3\x0a\xaa\xb9\xcc\xe6\xb0\xb2\x20\xde\xf9\x58\x99\x75\x67\xc0\x41\x52\xe7\x3f\xf4\xa1\xe0\x0e\x06\x8b\x2a\xc1\x43\x0f\xc4\x23\x1b\xce\xf0\xfb\xc7\xc5\x14\xfb\xb3\x00\x42\x50\xce\x39\x11\x72\xe5\xb4\x3b\xcf\xe8\x26\x89\x25\xe6\x5b\xaf\x80\x24\xda\xcd\xdf\x00\x10\x37\x8b\xf2\x3f\x25\x5b\xd0\x0c\x6c\x41\x1c\xcf\x1a\x0e\x2a\x4c\xa8\x72\x12\x51\x51\x0b\xba\xa5\x56\xb5\x3c\xa7\xce\xa1\xda\xb1\x39\xb8\x29\xbe\xc2\xd7\x96\x27\x8e\x8e\xc8\x89\x1d\xe3\xd8\x22\xf6\x1f\x56\xc8\x75\x6b\xf5\xf6\x73\x11\x50\x06\x3e\xde\x7a\xbd\xfd\x5c\x50\x8c\xc7\x2a\x7a\xb1\x70\xff\x01\x73\xba\x00\x2c\x90\xc0\x32\x2a\x33\x4c\x3e\xb9\xb1\x53\x46\x26\xa5\x26\xc0\x17\x4c\x0a\x9e\x9b\xe3\x87\x30\x60\x86\x33\x49\xc0\xca\x32\x09\x28\xf2\xcd\xc9\xa7\x8b\x6b\x4c\x4e\x3c\x75\xa5\x77\xdc\xfb\x95\xca\x5b\x94\x9a\xef\xd0\xe8\xae\x8f\xfb\x8d\xf8\x77\x37\xdb\x05\xe5\x13\x3f\x17\xe6\xdd\xf2\x52\x97\x34\xc3\x3a\x12\x49\x56\x9a\xbb\xf0\x60\x3b\x3b\xbe\xaf\x2b\xc4\x62\x1f\xd3\xd5\xe5\xaa\x88\xbc\x61\x9d\x8e\x6b\x8c\x83\xfa\xba\xb1\x5f\xd7\x6a\x9a\x74\x2e\x18\xb5\x01\x0e\x78\x4d\xd0\x39\x56\x15\x44\x70\x33\xdf\xce\xdd\xc5\xdd\xc2\xb0\xb0\x0e\x93\x05\x79\xf0\x05\xce\xd7\x0c\x82\x68\x6d\x3e\xb8\xaf\xae\xc3\x61\x88\x77\x0c\x3a\x38\x9c\xe2\xec\xfa\x94\xab\xd7\xb8\x34\xfb\x51\x1c\xb6\xd1\x6f\x5a\x80\xfe\x6f\x3e\xdc\x34\xab\x83\x59\x27\xbf\xd8\x7b\x25\xaf\xea\x2e\xea\x12\x7a\x58\x5e\xb7\x0a\x94\x00\x39\xb3\xe2\x34\x62\x80\x57\xf2\xf5\x9b\x0f\x37\x7b\x8e\xe5\x77\xb3\x15\x86\x27\x54\xd9\x5c\x88\x37\x1f\x6e\x6c\x7c\xea\x7e\xb4\x77\x76\x98\x76\xf7\x35\x22\x94\x26\xa2\x1c\x76\xe0\xd8\xe1\x5c\xee\xa2\x72\x1c\x9a\xc5\xc7\xd8\x0e\x4b\x0d\xb9\xbc\x22\x34\x4d\x25\xa6\x2d\x74\x39\xcb\x2d\x6c\x51\x5a\x14\x55\xf4\x39\x56\x9c\xa3\x0a\x9a\xaf\xde\xd8\x03\x28\xf8\x74\x5c\x3f\xdb\xde\x94\x45\xc6\x6c\x98\x79\x73\x88\xba\x1e\x5f\x2e\x16\x5d\xf8\x53\x88\xd3\xaa\xb3\xb3\x2a\x48\x3e\x88\x8a\xfe\x29\xba\x3a\xc1\x63\xef\x52\x09\x4a\x64\x66\x8b\x3a\x8a\x82\x77\xa7\x63\x47\xe8\x70\xad\x76\xa7\xf7\x1d\x3f\xd1\xce\x04\xae\x25\x83\xf5\x5d\x49\xae\xcd\xdb\x95\xc8\xce\x2a\x12\xd8\x02\x30\x35\xd1\x39\x61\x3b\x8c\x8c\xc3\xf8\xfc\x7a\xa2\xe7\x36\xbb\x8e\x6a\x3c\x99\x54\x7a\x51\x00\xdf\x3c\xe0\x15\x0f\x72\x44\x56\x6a\x84\xa4\x6f\x3e\xdc\xd8\x9b\xd4\x4e\x97\xab\xac\xa0\x36\xee\x9d\xce\x97\x1c\x39\x7c\xcd\xc5\x10\xb7\x4d\xb4\xdc\xf1\xaa\x3e\x3a\xdb\x38\xc1\xc7\x2a\x10\xac\xfa\xda\x85\x20\x85\x25\xfc\x07\x58\x0e\x82\x30\xa3\xdb\x31\x60\x3e\xbd\xfd\x81\xc9\xc2\xd1\x0e\xf2\xae\x51\xef\x0a\x05\x54\x26\xf3\x2e\x1b\x3b\xf6\x65\x61\x29\x21\xa9\xb0\x99\xa0\x53\x21\xd1\x03\x3f\x42\x51\x27\x13\xe2\xae\x2c\x9e\x46\xba\x71\x03\x17\x54\xcf\x9f\xec\x12\x69\x8d\x31\xc8\x37\xdd\xf7\x6c\xca\x55\x97\x7c\xb6\x40\xe5\x0b\xb4\x55\xb9\x70\xe4\x1a\x91\x71\xff\xcb\xa8\x65\x06\x7b\x9d\x95\x4a\x83\xfc\x96\x49\xa5\x8f\xf6\xed\xe9\x13\xcd\x58\x2b\x5a\xef\xb8\xd9\xdd\x5f\x98\x9e\xbb\xaa\xff\xc7\x67\xed\xaf\xcc\xdf\x8e\x8c\x63\x22\x24\x39\xfe\x20\x38\x1c\xef\xfd\x22\x6d\x0d\xb4\x12\x7c\xaa\x2b\x7d\xab\xcc\xe6\x26\xd1\x62\x44\xfb\x2f\x3a\x9f\xb3\x5b\x61\xe3\x05\x0d\x3d\x5e\x52\x50\xa0\x09\xc5\x0a\xd6\xd8\xf7\xdc\xce\xc3\xbd\x90\x77\xb6\xd2\x2a\xfe\x40\x0b\xa7\xf3\x2e\x1b\x4b\xbb\xe7\xe0\x8d\x52\xad\x5a\x6c\x5f\x80\x2e\xaa\xed\xde\xe7\x0c\x43\x02\xc1\x15\xf6\x7a\xc7\xf8\xdd\x9e\x87\x3c\xec\x84\xbc\x5d\x1b\xbd\x01\xc5\xe4\x7d\xef\x8c\x5b\x70\x14\x23\xea\xd1\x89\x28\xb5\x2f\x36\xd6\xf4\xc2\x33\xfe\xdf\x76\x5f\x60\x90\x2a\x02\x5d\xed\xbb\x2a\x1b\x0c\xe0\xea\xcc\x86\xb9\x78\x0b\xb7\x5a\x72\x4d\x3f\xe3\xd5\x23\x92\x3b\x90\x24\x33\x34\xef\xbb\xf9\xea\x7c\xf5\xe6\xb9\xde\x3f\x7d\xad\x6b\x44\x06\x14\x73\xc8\x41\xd2\xac\x32\x80\x3e\xeb\xa2\xbf\x73\xb7\x77\x45\x46\x33\x59\xdb\xd6\x5a\x76\x55\xf7\x45\x3a\x26\x6f\x37\x3d\x95\xd3\x25\xde\x84\xf6\x61\xca\x09\x7c\x66\x4a\xef\x7f\xc3\x14\x22\x6d\x62\x21\x97\x0a\xe4\xa8\xc2\xc6\x26\xd4\x55\x72\xf6\x79\xf3\x29\x4c\xca\xd9\x8c\xf1\xd9\xd8\x8a\x07\x28\x86\xd4\xd5\xe6\x6b\x5b\x58\x87\xe0\xeb\x44\x02\xc5\x80\x6b\x54\x56\x6c\xc8\x04\x6b\xf6\x9e\x8b\xd4\x76\x3e\x59\x5a\x0b\xac\xdf\x93\x15\x60\x1a\xb9\xe4\x44\x48\x57\xa1\x88\xa6\x29\xd9\x3b\x4c\x67\xc3\x8a\x60\x5f\xf5\xfc\x5a\xe2\xca\xda\x3f\x7f\xac\xea\x5f\x35\x16\x48\x95\x13\x23\xfb\x96\x32\xe9\xb4\xa7\xf7\x97\x51\x3a\xc9\x27\xa1\xb2\xe8\x05\xaf\xb7\xe7\xeb\x26\xe2\x08\x25\x1a\xf2\x42\x48\x2a\x97\xab\x69\x65\xe6\x26\x31\xdb\xd7\x2c\xd0\xca\xdc\x5e\x89\xd4\x08\x09\x7b\x93\xb1\x61\xdb\x2e\x98\x51\x3b\x37\xed\xdc\x8d\xe7\xc9\xc7\xce\xfb\x35\x23\x1d\xa8\x50\xc9\x1c\xd2\x12\xc3\xcb\x67\x25\x95\x94\x6b\x30\xfc\xd3\x85\xb0\x2e\x5b\x81\x1c\x15\x22\x4b\x05\xcf\xb8\xc4\xfc\x70\x23\x58\xe0\x27\x14\x27\xa3\x43\xb8\x89\x13\x8e\x4d\x47\x0d\xd8\x97\xdb\x39\x10\x23\x49\x66\xa0\x71\xf2\x61\xc1\x12\xed\x07\x99\xe2\x22\x6c\xd8\xfa\x09\x2d\x2d\xa4\xcb\xfe\x01\x40\x57\xc2\x15\x65\x4f\xc0\xdc\x49\x5a\xd5\x53\xeb\xb2\x9b\x59\xa7\xb8\x92\x5b\x7f\xb2\x37\x11\x5c\x1f\xcc\x47\x8e\x24\x1a\x45\x3a\x33\x4d\x7c\xbb\x07\x18\x73\xb5\xc6\x1b\x56\x62\xcf\xa1\x02\x0c\x30\xdd\x53\x9b\x3a\xa5\x24\x85\xd8\x7a\xa8\x9c\x1d\x2c\xd9\xef\x42\xce\xca\x1c\xc1\x31\x9c\x6e\x0b\x5c\xcb\x65\x21\x58\x57\xbf\xbd\x39\x6a\xe8\x66\x3c\x56\xe4\xf5\xfb\x37\x4d\x60\xc7\x66\xc1\x54\x0f\xfb\xd9\x6d\x90\x4f\x71\x03\x14\xc8\xe5\x94\xd0\x4a\xe8\xeb\x44\x51\x7d\x51\x3b\x9b\x8f\x73\xfd\x56\x04\x7a\x0b\x2c\xe3\x85\x91\x60\x51\x4e\x6f\x54\x58\x4b\xe6\x94\xcf\x0c\xab\x7a\x23\x4a\xf3\x62\xdf\x7c\x83\x2f\x21\x21\x2d\x93\x8e\xc1\xa5\x08\x0c\xef\xd0\xcf\xbe\xf1\x61\x5e\xae\x94\xa3\xd1\x45\x41\x25\xb4\xf0\x53\xd3\x9c\x3d\x2b\xe5\xbe\x22\x6c\x0c\x63\x72\xf4\x4d\xe3\xab\x23\xa4\xb8\x13\x35\x85\x14\xe6\x55\x1c\xd8\x1a\xbe\x7d\xc6\x34\xf2\x8f\xa3\xe6\x08\x63\xf2\xd6\xd0\x85\x51\xd3\xd5\xda\x36\xf0\xb3\x26\xf5\xca\x9e\x11\x09\x33\x2a\xd3\x0c\x3a\x02\x05\x89\x69\xa5\x64\x58\x40\x5a\xb7\xab\x90\x31\x22\x7e\x08\x17\x7a\x1c\xc7\xf5\xbd\x2b\x72\xa5\xa6\xea\x4e\x9d\x5b\x75\x66\x94\x52\x4d\x47\xb4\xb0\xf6\x20\x26\xf8\xb9\x35\x75\x8f\x12\x91\xe7\x94\xa7\x23\xea\x4e\xef\xa8\xda\xd9\xe7\xbf\x76\x30\xcb\x23\x5a\x3d\xc5\xf8\x88\x8e\xd4\x1c\x3a\xad\xdc\xc1\xd2\x6b\xa3\x07\xce\x04\x15\xc6\x73\x73\x79\x28\x36\xfd\xb6\xe2\xca\x76\x29\xc6\xe4\x83\xd0\x04\x3e\x43\x52\x7a\x63\x08\x26\x14\xe3\x2a\x87\x33\xee\xb7\x1f\x6e\xaf\xff\x7a\xf5\xf1\xf2\xc3\xed\xc0\xbf\x07\xfe\x8d\x6d\xe0\xdf\x03\xff\xee\x30\x70\x5f\xf8\x37\xf0\xc5\xa1\x78\x77\x65\xef\xda\x64\x60\x5c\xa9\xbb\x1d\x08\x08\xf1\x15\x01\x6a\xbc\xe5\x8b\x4f\xd4\xa8\x8e\x85\x04\x85\x0a\x8a\xd1\x58\x37\x05\x29\xbb\x07\xd0\x12\x58\xc7\x74\x7e\xb1\x88\x1a\x07\xc4\xc3\x88\x98\x27\x1a\x14\x3b\xff\xa1\x51\xe8\x67\xd3\x92\x87\xc4\x7d\xbf\xa7\x4b\x5b\x07\xcd\xc1\x69\xf0\x25\x29\x24\xe3\x1a\xb7\xd2\xc5\xcd\xeb\xcb\x4b\x92\xcc\xa9\xa4\x09\x3a\xa8\xe0\x73\x02\x85\x26\xc7\xff\x7b\x6f\x4f\x57\xdd\x22\xe4\x36\x04\xd6\xb5\x8e\xb7\x32\xfb\x08\x6e\x01\xc3\xd4\x22\x5f\x21\x61\xc1\x44\xa9\xb2\xa5\x0b\xf3\x49\xb7\xf0\xd1\x75\xf0\x83\xc0\x24\xb1\xa5\x77\x33\x6d\x1e\x70\x45\xe8\xdc\x24\x40\x06\x0c\x7f\x60\xd1\xd3\x11\x11\x43\x00\x0d\x18\x7f\x83\xe8\xba\xbb\x18\x1a\x30\x6e\x27\x01\x76\x9b\x30\x1a\x40\x47\x5b\x8c\x0d\xe8\xa8\x9d\x45\x73\x78\x4e\xf6\xad\x14\x79\x24\x6e\x76\x63\x0d\xda\x3e\xb6\x62\xd3\x51\xad\xa2\xae\x9a\xe2\x91\x53\x69\xeb\x1a\x49\x46\x9d\xce\x0b\xdd\x31\xef\x83\xc4\xa9\xa1\x18\xa7\x8c\xa1\x8f\x9a\x7f\x4f\x8b\x1f\x60\x79\x0d\x81\xd5\xe0\xda\xf3\xed\x6a\x74\x53\x72\x07\x4b\x1b\x5c\xf9\xda\x0f\x16\x56\x10\x2f\xca\xf4\x91\x28\x85\x28\x6d\x1b\x99\x57\x0c\xea\x23\xce\x62\x9a\x76\x07\x01\x50\x09\xbe\xc5\xac\xca\x68\x1b\xfa\xd5\xc0\x16\xb2\xc2\x8d\x51\xc3\xe0\x54\xbb\xe2\x58\x91\x37\xd4\x97\xa5\x0a\xdb\x22\xb6\xfd\x00\xcb\xea\xba\xff\x0f\xc6\xa9\x5c\xd6\xfd\x3b\x00\x32\x4d\x92\x52\x4a\xe0\x3a\x5b\x36\x31\x7a\x5a\xd8\x3a\xc0\x17\x86\x45\x04\x81\x6e\xd9\x16\xa9\xc0\x21\x09\x96\xc0\x7d\x8b\xbf\xd0\x4d\x89\xdc\x5d\x8b\x81\xf5\xde\x6d\x6b\xc3\x04\x59\xe8\x36\x0f\x3d\x60\x4f\xf1\x19\x66\xa7\xa6\xa5\xad\x61\x4c\x93\xbb\x7b\x2a\x53\x45\x12\x91\x17\x54\xb3\x09\xcb\x98\x5e\x86\xe1\x12\xf8\x46\x1d\x94\x9d\x85\x44\xb6\x97\x01\xb9\xe4\x4a\x53\x14\x01\x84\x33\x80\x9a\xd5\xae\x51\xcc\x11\xec\xdc\xde\x22\x98\x01\x45\x65\xc8\x8d\x5f\x93\x92\x0b\xa5\x49\x02\xd2\x6c\xd6\x6c\x49\xee\xa5\xe0\x1d\x6b\x0b\xb4\xdb\x9e\xe5\xb3\xc4\xc2\xc8\xc0\x70\x7f\xee\xf2\x23\x47\xe6\xc5\x47\x96\x49\xab\x73\xcc\xbe\x39\xff\x35\xfe\xa7\x4f\xa7\x88\xf8\xec\xca\x57\xe4\xe8\x28\xb0\x2f\xe1\x83\xb5\xe2\x9e\xca\x1b\x17\x44\xd8\x14\x19\x2b\x96\x49\x2c\xe2\x39\xb2\x56\x8f\xff\xe0\xb4\x9f\x48\xd3\x1c\x06\xe3\x63\x5b\xcb\x42\x97\xd3\x22\xcc\x40\x57\x37\x64\x07\x71\xa5\x96\x60\x1e\x58\x8b\x3d\x96\x59\x55\x55\x88\xd3\x57\x1e\xd7\x44\x91\x1c\x34\x4d\xa9\xa6\x63\x73\x20\xce\xda\x7f\xaa\x82\x26\x70\x46\xfe\x5e\x7d\x98\xd1\x09\x64\xea\xc7\xe3\x7f\xfb\xe1\xed\x5f\xff\xfd\xf8\xa7\xbf\x37\xbf\x43\x31\x15\x0d\xc6\xcd\x07\x02\x5f\x01\x63\xc4\xb8\x48\xe1\x03\x52\x87\x7f\x3a\x0d\xf7\x22\x49\x44\xc9\xb5\xfb\x02\x8b\x57\x8c\xe7\x42\xe9\xcb\xab\xea\xcf\x42\xa4\xab\x7f\x05\xde\x9c\x3d\x94\xf7\x70\x6d\x03\xc0\x6c\x6d\x8b\x27\xf5\xd1\x82\x7d\x02\xa9\x82\x70\x11\x7d\x6b\x67\xaa\xd8\x5e\xfd\x36\x56\xc9\x1c\x72\x8a\xff\xfc\xd6\x4f\x81\xb9\x8f\xab\xf2\x42\x1c\xab\x84\x98\x3b\xb0\x5d\xb3\xfc\x68\xf1\x32\x48\xd3\xb6\x2d\x22\xe7\xaf\x56\x30\xf2\x84\xe1\x8c\xb8\xd9\xb2\x1c\xa0\x16\x79\x9d\x28\x5a\x87\x7f\x5e\x5c\x5d\x92\x85\x9d\xe1\x1e\x4d\xce\xd3\xb1\xeb\x0c\xa2\xab\x99\xc1\x0c\xfb\xdb\x8a\x2a\xb7\x4c\x0d\x95\xd5\x19\x0a\x90\xf2\xd0\x05\xba\xf6\xd8\xba\xa6\xd3\xb7\x7c\x61\xc6\x6d\x83\xe8\x7a\x79\x92\x07\xc2\x19\x91\x7e\xf2\xcc\x50\x1d\xd9\xf4\x51\x84\xb2\x5c\xd3\x89\x85\x86\xf9\xd0\xd5\x7b\xe2\xdb\x2f\x46\x67\x6f\x40\x12\x55\x87\x81\x5c\x18\x66\xbf\xc0\x1c\xa1\x3b\x1f\xb3\x5b\x48\x58\x00\xd7\x55\xb0\xb9\xab\x6b\x48\xa5\x66\x71\x74\x12\x47\x91\xaa\x2c\xfc\x75\x38\x8b\xb5\xee\xe5\xcf\xee\xb3\xa9\xdb\x9b\x12\x8d\xcc\x17\x88\xa9\xad\x34\xd6\xf3\x9a\x6e\x3f\xed\x36\x6a\xc4\xcc\x9d\x62\xff\x80\x95\xda\x54\x2f\x7f\xfb\xc7\x06\xa1\x3d\xba\x1b\x9e\x4c\xcd\x89\xb2\x63\x37\xe9\x4a\x58\x6d\x6c\xbb\x9a\xe4\x2a\x7d\xd6\xcf\x85\xb3\x29\x7c\x37\x01\xce\x54\xfc\x99\x29\x7d\x66\xcb\xa2\xfa\x13\xb4\xa0\xb2\x8a\x8e\x2a\x27\x19\x53\xf3\x50\x76\x6f\xdb\xe5\xb4\x5a\x9d\x95\x32\xb1\x15\x3e\x74\x2d\x7b\x98\xb9\x58\xa1\x32\x02\x09\xdb\x4c\xeb\x6d\x74\xc6\x3a\x8c\xe1\x0a\x13\x43\xea\xb8\xf0\x20\x2c\xc1\x87\xe7\xc1\x42\xe6\x3e\xd7\x44\xac\x61\x47\x4a\xd0\xa5\x34\x3c\x2b\xb5\x7c\xe2\x4a\xa4\x2e\x97\x27\x9e\xf0\x17\x43\x59\x27\x4d\xa3\x48\xd7\xa2\xb1\xcd\x56\xc4\x17\xb2\xa3\x5d\x6f\x3b\x40\xee\x55\xd2\xbb\x67\x12\x51\x8c\x6b\x8e\x09\x49\xc8\xa8\xb6\x45\x7e\xd3\x2a\x25\xc2\x9d\x06\x1c\xf0\x78\x3c\x3e\xb6\x54\x0a\x57\xcd\xd9\x5a\x14\xcd\xe7\xbd\xba\x16\x6a\xa1\x2a\xf2\x5a\xdf\x36\x2a\x4d\x35\x96\xc8\x42\xd1\xba\xa9\xf2\xae\xe5\x58\xb2\xfa\x17\xa0\x4c\xf9\x0c\x9d\x6f\x7b\x6d\x03\x6b\xe6\x11\xb5\x82\x2e\x5e\x11\x04\x0b\xf6\xdf\x3b\xe1\x47\x55\x55\x48\x40\xe9\x50\x43\xf1\x89\xed\x72\x9c\x14\xe5\x99\xeb\x7e\x9c\x43\x2e\xe4\xb2\xfa\xb3\xca\x7e\x1a\x29\x2d\x24\x9d\x21\xdc\xba\x1d\xdc\xfe\xac\xfa\xcb\xfe\xb0\x45\xde\xfa\xaf\x6d\x54\x4b\xed\x50\xaa\x70\x8c\xbf\x3a\x5d\xce\xaf\x5b\x4f\x14\xa8\x6a\x5b\x3d\x01\xff\x39\xae\xf3\x35\xd1\xe7\x56\xcd\x22\x86\x12\xb8\x7a\x3c\x67\xb5\xc0\x81\xf1\x2e\xce\x63\x78\xdc\x1f\x3e\x44\x48\xca\x16\x4c\x89\x00\xc8\xdb\xaa\xa3\x75\xf7\x84\xc7\x0d\x74\x85\x76\x6d\x1a\x7e\x65\x41\xf9\x5c\x60\xd1\xfd\xea\xb0\xaf\x98\x06\x5f\x86\x7a\x5e\x50\xc6\xd0\x20\xf9\x2b\xf2\x5f\x27\xff\xf9\x9b\x9f\x47\xa7\x7f\x3a\x39\xf9\xf1\xc5\xe8\x5f\x7f\xfa\xcd\xc9\x7f\x8e\xf1\x1f\xff\x7c\xfa\xa7\xd3\x9f\xfd\x1f\xbf\x39\x3d\x3d\x39\xf9\xf1\x87\xf7\xdf\xdd\x5e\xbd\xfd\x89\x9d\xfe\xfc\x23\x2f\xf3\x3b\xfb\xd7\xcf\x27\x3f\xc2\xdb\x9f\x76\xec\xe4\xf4\xf4\x4f\xdf\x04\x93\x4e\xf9\xf2\x63\x20\xf7\xb6\x6d\xe4\x36\x0b\xe3\x1a\x66\xb0\x7f\x5a\xee\xf6\x1e\x23\xb9\xda\x5a\x57\x21\xe3\x7a\x24\xe4\xc8\x76\xfd\x0a\x95\x94\xc0\x01\xfc\xf6\x8a\x7d\xfe\x3d\xee\xd4\xab\xfa\x36\xab\x84\xc2\x1e\x1d\xf0\xa7\x12\x34\x14\x24\x12\xf4\x73\x84\x07\xd9\x91\x1a\x65\x43\x1d\x64\x18\x7a\xc4\xbe\xb6\x1b\xf4\x6b\x8e\x18\xf2\x86\x43\xef\x34\xb2\xeb\xda\x0e\xfd\x19\xd7\x4a\x10\x25\xd6\x8e\xe8\x9e\xbb\x83\x80\xd0\x3a\xdf\x86\x48\x9b\xce\x6d\x88\xb4\xd9\x42\xca\x10\x69\x13\xd4\xbe\xc8\x48\x9b\x1b\xcb\x93\x7e\x91\x61\x36\xf1\x2b\x0a\x74\xcc\x58\x8a\x59\x4c\x00\xf8\xa2\x6b\x50\x79\xcc\x14\x3f\x6f\xf6\x40\x08\xb2\xa2\xcc\xa8\xde\x92\x3d\x12\x29\xdf\xaf\x67\x9e\xb3\xbf\xfc\x7f\xec\xfd\x7d\x73\x1b\xb9\xd1\x2e\x0e\xff\x7f\x3e\x05\xca\x49\x1d\x49\x77\x48\xca\xde\x64\x53\xc9\xd6\xfd\x9c\x94\x22\x7b\x6d\x55\x6c\x99\x8f\xa4\xdd\x9c\xd4\x26\xf7\x06\x9c\x01\x49\x1c\xcd\x00\x13\x00\x43\x89\xa9\xfd\xf0\xbf\x42\x37\x30\x83\x21\x29\xdb\x1a\x40\x26\xed\x0c\x52\xb5\xb1\x28\x6a\x80\xc1\x4b\xa3\x5f\xae\xbe\x1a\xa9\x7b\x6e\x91\xcd\x47\x1b\x78\xcd\xb2\x2e\x0c\xaf\x7a\x26\x42\x34\xa6\x25\xa6\x54\x58\xe1\x4f\xb5\x96\x19\x32\x1d\x35\xe4\x80\x05\xd5\xc6\xbf\x32\x78\xe6\x0d\xbd\x85\xdc\xa1\x8c\xe5\x4c\x3c\x96\x83\xca\xb7\x1f\x91\x25\xd1\xcf\xed\x6c\x6d\xef\xa1\x57\x62\xe5\xee\x24\x92\x7b\xa2\xce\x36\x56\x9a\xa4\xdf\xaf\x2b\x8b\xd3\x9e\x4b\x97\xa5\x11\x24\x73\x82\x06\xd9\x92\x11\x41\x34\x47\xce\x5b\x08\x24\xa4\xbd\xa0\x98\xee\x77\xe1\x45\x1b\x07\xf1\xaa\x78\x93\x85\x11\x65\x63\x6d\xe9\xe0\x2d\x4c\xb4\xab\x7b\xf7\xee\xe1\x80\x12\x57\xe2\xb5\xf2\xb4\x1a\xf9\x53\x68\xe3\x87\xa2\x89\x1f\x88\x16\xfe\x34\x1a\xf8\x61\x6a\xdf\xc9\x34\xef\x34\x5a\x77\x1a\x8d\xfb\x11\xb8\xf6\x94\x5a\x76\x1a\x0d\xfb\x29\xfc\x6b\x95\x62\x73\x7e\x7f\x08\xe9\xda\x9e\x69\x96\x18\x76\x0f\xae\x9a\x4a\xb1\x8a\x89\x86\xc8\xdc\x47\x60\x19\xcd\x96\x43\xa6\x3d\x69\xfc\xa2\x69\x2f\xec\xeb\x5d\x9e\xb2\xe1\xb6\x26\xc3\x6d\xfd\x88\x36\xdc\xd6\xc3\x6d\xfd\x59\x6e\x6b\x27\xad\xbe\xfe\xab\x3a\x31\xc3\x14\x70\xe7\xed\xbd\x94\x25\x0e\x23\xa2\x26\xcf\x23\x8f\x62\x8b\xf1\x3c\x85\x9e\xfb\x9c\xb8\xa8\x73\x06\xbd\x4e\xeb\xa2\xe8\x53\xdf\x03\x5b\x8a\x05\xb8\x80\x69\xaf\xea\xa2\x70\x35\x21\xfa\xcd\xfe\x7b\x01\x17\xd8\x59\x71\x47\xd7\x7a\x44\x2e\xd9\x8a\xa9\x11\xb9\x98\x5f\x4a\x33\x45\xd7\x49\xbf\xe7\x86\x0c\x20\xf8\x70\xc2\xe7\xe4\xbb\x82\x1a\xa6\x0d\x31\x74\x01\x88\xda\xb6\x6a\xa9\x54\x9d\x4e\xdb\xba\xec\x7b\xf4\x68\xc5\xef\xcd\x5f\x79\xe2\xfc\xf1\x7e\xf6\x6a\xc1\xe7\x2c\x5b\x67\x45\xbc\x98\x78\xeb\x9f\xe4\x11\xe7\x5e\x3d\x00\x9c\xd2\x0e\x66\xee\x2f\xb0\xfc\x59\x25\xb5\xb9\x36\x54\x99\x7d\xd7\x40\x9b\xfa\x81\xd8\xc9\xce\x68\x51\xb0\x9c\xf0\xb2\x64\x39\xa7\xc6\x2a\x82\x74\x6e\x98\x22\x34\xac\xb3\xab\x11\x04\x1e\x24\x22\x2c\xa9\xc8\x0b\xa6\xc8\x9c\xf2\x42\xf7\x87\xa2\x6f\xd4\xf3\xd5\x90\x98\xc9\x05\x12\xff\x03\x8c\xd1\x33\xeb\xd3\x2c\x93\x2a\x07\x0c\xad\xf4\x0c\xf4\xf0\x12\x31\xf2\xc9\xb6\xf7\xa0\x2a\x94\x54\xd0\x05\x2b\x5d\xb5\xfe\xee\xb0\x66\x85\xcc\x6e\x35\xa9\x85\xe1\x05\xbe\xbc\x94\xb7\xa0\x10\x17\x70\x52\x7b\x77\xdd\x5f\x00\x34\xff\x1c\x37\x87\x70\x6c\x47\xa5\x4f\x7f\xd5\xfe\x0a\x3e\xe8\x39\xb8\x04\x66\x59\x0a\xa3\x8c\xdd\xb3\x2c\x46\x41\xec\x7a\xef\xef\x59\xd6\xdc\x0a\x1a\x76\x38\x30\x92\x62\x69\x03\xe0\x1e\x4e\x14\xc8\xc2\x96\x08\xd0\x93\x0a\x44\x13\xc1\xf9\x1c\xb6\xd4\x18\x91\x73\xb7\x08\x5c\xbb\x99\xc7\x1f\x0b\x2e\x58\x77\x61\x34\x96\x02\x65\x61\x85\x08\xfb\xe3\x56\xad\x73\x4f\x9f\x15\x3d\x34\x3f\x16\x3b\x36\x25\xa5\x21\xc7\x47\xa7\x47\x27\x5b\x7b\xe4\x48\x03\x9e\x5f\xaf\xb5\x61\x25\x56\xe7\xc8\xda\x97\xd2\xbc\xac\xa0\xf6\x3e\xcb\x8e\xf2\x11\xe1\x26\x05\xe8\xc4\xde\x91\x58\x2e\x08\x66\xc5\x31\x65\x8f\x88\x96\xc4\x28\x9a\x73\xe7\x27\x83\x4f\xed\x97\x8c\xaa\x5d\xf5\x9f\xe3\xa3\x5f\x8e\x46\x84\x99\xec\x84\xdc\x49\x71\x64\x60\xfa\x26\xe4\x46\x92\x3a\x3a\x89\x86\xb4\x03\x59\xcb\x9a\x08\xc6\xdc\xd9\x6a\x0a\x84\xd9\xeb\x86\xc8\x1a\x53\xbe\x96\xd4\xc4\x30\x7c\x87\xed\xd5\x3d\x37\x8e\xcd\xc1\xca\xef\xe7\xb0\x9b\xf0\xca\x22\x54\x93\x82\xaf\xd8\xe9\x92\xd1\xc2\x2c\x11\x1e\x2f\xa4\x18\xff\x9b\x29\x09\x7c\xe0\xc2\xfd\x26\x76\x18\x71\x31\xca\xb0\x45\xc4\x2b\xb7\x07\x94\x04\x19\x93\xd8\xba\xf4\xcd\x5e\x7b\xaf\x59\x6f\x95\x88\x6c\xca\xa3\x37\x37\x37\xd3\xd7\xcc\x84\x52\x5e\xc0\x87\xe4\xf5\xab\x1b\x9f\x14\x11\xd4\xc8\x3a\x00\xf1\x9e\x06\xad\x39\x26\x95\x54\x87\x70\xcb\x2c\xa5\x8e\x5a\x4e\xf2\x04\x57\xcc\x1b\xa9\x0d\x06\x07\x90\x32\x4d\x40\xa6\x9c\xec\x22\xfc\x7d\x3e\xf8\xc5\x74\x42\xfe\x26\x6b\x3b\x21\x33\x3a\x2b\xd6\xe4\x8e\x0a\xe7\xed\x8e\x83\xe5\xda\xf6\xcc\x0e\xe5\x99\xbd\x41\xec\xce\x7f\xc3\x68\xce\x94\x06\x01\xcd\x68\x74\x76\x6d\xb2\xe3\x1e\x8c\x2d\xe9\x52\x9e\xd7\xda\xc8\x92\x2c\xdd\x6b\x77\xb9\xc2\xdd\xe1\x9c\xe0\x71\x75\xbc\xac\x8a\x55\x28\xc4\xdd\xdf\x7c\x75\x22\x7a\x4b\x7a\xe1\xbc\xbb\xcf\x67\xa8\xa6\x86\xd3\xe6\x3c\xe6\xc8\xf8\xe9\x64\x9b\xdd\xaa\xc9\x80\x94\x09\x00\xe8\x24\x21\x08\x9d\xc4\xb1\x88\x6f\x3e\x08\xa2\x07\xd1\x4f\x4a\x87\x6b\x27\xc9\xb0\xdb\xe4\x49\xf0\xdb\xc4\xc1\xf2\xdc\xe6\xc3\xc8\x51\x5c\x89\xf4\xcd\x87\x07\x95\xa9\x33\x2a\xa4\xe0\x19\x2d\xf8\xbf\x59\x4e\xea\x4a\x0a\x97\xac\x05\x9a\x6d\x46\x35\x1b\x43\x28\x57\xa0\x38\xd7\x01\x6d\xb4\x95\x0e\x46\x4a\x50\xf7\x00\x8d\x65\xc5\x3d\x8e\x3a\xcd\x50\x93\xc2\x8c\xa3\x39\xd0\xc3\xb6\x15\xa1\xed\x2c\x56\x9a\x1d\x4f\xbe\x08\x75\x92\x24\xca\xe4\xdf\x26\xcb\x32\x92\xd0\x2c\x03\x62\x6c\xbc\xae\x40\xf0\x6a\xa6\x56\xf1\xfb\x2b\xd9\xbc\x5a\x15\xf0\xd0\x74\x2f\x0c\x62\x2b\x22\xea\x72\xc6\x54\xcb\x34\xa8\xcc\xf6\x9c\x26\xf1\xba\xb8\x6e\xb1\x3b\x1f\xf6\xf3\x3a\x06\x15\x0b\x46\x5e\xd8\x9e\x7f\xff\xed\xb7\xbf\xfd\x36\x41\x3f\xf6\xf5\x7c\x2f\x54\x90\x8b\xb3\xcb\xb3\x9f\xaf\x7f\x3c\x07\xde\xf6\xd8\xc7\x27\xca\xba\x4c\x9d\x73\x99\x34\xe3\xf2\x49\xf3\x2d\x2b\x25\x8d\xcc\x64\x74\x0e\x46\xea\x43\x31\x75\xe3\x6a\xc8\xdc\xc0\x8f\xc5\x15\x6b\x46\xdc\x96\xd7\xb7\xba\x9d\x37\x5a\x92\xb0\xb0\x5c\xf2\xa2\x63\xf8\x58\x49\x76\xfa\x62\xf2\xe2\x60\xc4\x18\xf0\x37\x46\xdf\x8d\xa9\xd7\xec\x1a\x46\x65\x27\xac\xd6\xc8\xd0\xef\x17\x05\x63\x12\x18\x18\xd0\x09\xb2\xdb\x5e\x6e\x2c\xce\x41\x2c\x8c\x2e\x18\xab\x92\xf9\x69\xae\xed\xd3\x3a\xd5\x90\x48\x5e\x2b\x2c\x8a\x0f\x7e\xc1\x6e\x04\xc6\x15\xc6\x87\x31\x7c\x45\x2e\x1b\xcd\x32\x29\xf2\x18\xc3\x2d\x95\x21\xe2\x46\x92\xf4\xcc\x5d\xe3\x33\xbd\x63\xbf\x55\x00\x5c\x67\x60\xff\xc7\xae\x28\x69\x56\x35\xcd\xed\x86\xa4\x10\xf0\xb4\xdf\xff\xae\x7f\x58\x33\xab\xae\x65\x76\x9b\xd0\xb1\x19\x29\xc0\x5e\xda\x93\x96\x61\x04\xf7\xe6\x7c\x8a\x83\xb3\x2b\x73\xf9\xfe\xa6\x65\x80\xb1\xb6\x13\x6d\x83\xf1\x6f\x5c\x8c\x97\x8a\x9c\xdc\xb2\x2a\xce\x27\x60\x05\xa6\x47\x13\x76\xc1\x84\x10\x31\x51\x2e\xf4\x8f\x59\xd6\x28\x08\x3c\x08\xd0\x95\x42\x88\x2a\x80\x14\xa0\x15\x20\x7c\xeb\x4c\xc7\x39\xe5\x05\xa1\x10\x4b\x31\xbc\x64\x58\xad\x1d\x42\x34\x2d\x7c\xe4\x2b\x12\x38\x5f\xab\x8f\xf8\xc8\x23\xc3\xbf\x7b\xb4\xaf\x37\x96\x1c\xe3\xeb\x36\xde\x9c\xcc\x56\x1d\x72\xb3\xc1\x78\xfb\x94\x36\x18\x6f\x3d\x8d\xb7\x4a\xb1\x6b\x23\x7b\xeb\x9a\xc9\x60\x52\x38\x8c\x07\x40\x52\x33\x36\x97\x8a\x6d\xa2\xa4\x02\xf4\x92\x03\xd0\x47\x00\x84\xcf\xa6\x17\x4d\xc4\x52\x76\x10\x4a\x48\x60\xac\xeb\x6c\xe9\x83\xdb\x82\x69\x7d\x0a\x78\xa8\xba\x72\x26\xa3\xbd\xda\x6a\xc5\xfa\x63\xb3\x2a\xc5\x58\x09\xf3\x38\x6a\x49\x85\xec\xeb\x32\x81\x1f\x32\x93\x21\xda\xc1\x83\xc1\x1c\x78\xcf\x4f\xd7\x3c\x0a\x84\xd1\x4e\x6c\xa6\xa8\x5e\x32\x48\xa1\x65\xf7\xdc\x68\xec\x14\x49\x59\xfd\x8c\x5b\x7d\x61\xa1\x68\xc6\x48\xc5\x14\x97\x56\xc5\xa8\x85\xc9\xe5\x9d\x20\x33\xb6\xe0\x42\xfb\x15\x8b\x19\x92\xdf\x12\x80\xff\xe2\xba\x29\x58\x3e\x21\x57\x9d\xc2\x79\x8e\x64\x2c\x93\xad\xcc\x74\x53\x34\x4a\x34\x25\xa0\xbc\xc0\x36\xa8\x69\x51\xac\xdb\x8d\x17\xf2\x84\x3e\x30\x43\xfd\x37\x04\xce\xec\x71\x2d\xe0\x45\x73\x56\xd0\x35\x26\x92\xcf\xb9\x00\x9f\xbd\xd2\x27\x93\x78\x40\x5d\xef\x01\x4a\x15\x3c\xf3\xc1\x9d\xc1\x35\x51\x8c\x66\x51\x74\xc6\x03\x72\xef\x63\x6d\x40\xee\x0d\xc8\xbd\x01\xb9\xb7\xdd\x06\xe4\x5e\xb7\x0d\xc8\xbd\x87\x07\x74\xc8\xa1\xd6\x01\xb9\x37\x78\x65\xb6\xdb\x80\xdc\xeb\xd5\x06\xe4\xde\x47\xdb\xc1\x89\xe8\x01\xb9\xf7\x09\x6d\x40\xee\x7d\x62\x1b\x90\x7b\x03\x72\x6f\x40\xee\x0d\xc8\xbd\x88\x36\x20\xf7\x1e\xff\x7a\x43\xf0\xa7\x7f\x1b\x90\x7b\x03\x72\x6f\xa3\x0d\xc8\xbd\x01\xb9\x37\x20\xf7\x3e\xa9\x0d\xc8\xbd\x01\xb9\xf7\x29\x6d\x40\xee\x0d\xc8\xbd\xaf\xd8\x47\x3c\x20\xf7\xb0\x0d\xc8\xbd\xc7\xf5\x33\x18\x6f\x71\x0f\x7b\x12\xe3\x4d\x1b\x59\x5d\xf3\x45\x04\xa9\x67\xaa\x63\x70\xdd\x8c\xc4\x31\x7e\x6a\x57\x29\x59\xe3\x87\xde\xfb\x08\x6c\x80\xf6\x40\x84\xd8\xaa\xf6\x26\x99\x31\x6b\x22\xd8\xd7\xaa\x62\x6e\x93\x8b\x39\x84\xfd\x03\x42\x42\x7b\x2a\x9c\x58\xb3\xfd\x04\x35\x39\xba\xea\xb3\xbf\xdd\xb8\xb0\xb6\x4b\xff\x11\x04\xf3\x91\x51\x81\x65\x6d\x5d\x8d\x73\x7b\xbd\x4f\x65\xae\x7d\x19\x10\x21\xc5\x18\x99\x76\x27\x76\xc0\x13\xa9\x27\x11\x3e\xfc\x48\x82\x41\x44\x36\x4e\xad\x25\x1d\x4d\x32\x08\x4f\xd1\x50\xfd\xf6\x2b\xa5\x18\x8c\xc1\x5c\xed\x0d\x6f\x75\x20\x78\xb5\x04\x18\xab\x94\x77\xf8\x81\x62\xab\x0e\x13\x57\x75\x88\x98\xaa\x7d\xe0\xa9\xf6\x8e\xa5\x4a\x13\xa4\x4f\x10\xa0\x4f\xa4\x29\x3d\x41\xb0\xcb\xc1\xf2\x6f\x96\x8a\xe9\xa5\x2c\x7a\x0b\x9c\x54\xc2\xe6\x1d\x17\xbc\xac\x4b\x28\x6d\x61\x65\x0a\x5f\x35\xa9\x03\x7a\xc3\x95\x8d\xf8\x05\xa8\x81\x91\x33\xa8\x2d\x4e\x79\x61\xb7\x16\x10\xc6\x2e\xe9\x0a\x94\xa5\x3a\xcb\x18\xcb\x63\xd4\xa5\xd0\x8b\xfa\xdb\x49\x33\x42\x24\xfe\xe7\x9a\xf4\xf6\x77\xa7\xd0\xc7\x03\x37\xd3\x6f\xbf\xe9\xf5\x8c\x85\xaa\xd2\xdc\xd2\xaf\xaf\xa6\xe7\x9d\x5b\x1a\x3e\x78\x03\xc7\xf8\x7c\xc9\xb2\xdb\x2b\x07\xcc\xd9\xdf\xcd\x1c\xef\xfe\x88\x72\x7d\xa4\x50\x0c\x4a\x99\x47\x45\x34\x52\x6a\x05\x76\x2c\xc1\x8a\xbb\x3b\xd7\xc5\x97\xf0\xb7\xfe\xc8\x2e\xec\x5e\x40\x91\x8e\xc7\x37\xee\x6a\xb9\xc6\x8a\x2f\xcf\x6e\xde\x5e\x3f\xf3\x91\x94\x9b\xb7\xd7\x60\x34\xd8\x5b\x2c\xb3\xd3\x3c\xc7\xf2\x81\x2b\xa6\xf0\x9f\xd1\x41\x2f\xdf\xeb\xb4\xa0\xf6\xd4\xde\x9b\xa6\x6f\x4a\x2a\xff\x19\x39\xe6\x20\xba\x14\x3b\x09\x67\xa3\xbd\x6b\xe3\xc6\xb0\xdb\x78\x43\x89\x58\x6b\x38\x77\x1f\x19\x4a\xfc\x8d\x1a\x79\x91\xc5\x3a\xa8\xba\x66\x94\x54\x66\x03\x13\x00\x7b\x4d\x33\xb5\xe2\x19\x9b\x7c\x06\x1f\x50\x2a\xbf\x4a\xbc\x2c\x27\x10\x81\x81\x17\x3f\x14\x19\x71\x8d\xc3\x69\x82\x37\x81\xfb\xcf\x8d\x14\x50\xd4\x05\xcd\x9a\xb5\x59\xec\xbe\x37\xa2\x86\x71\xac\x19\x6b\x72\xa3\x16\xdc\x2c\xeb\xd9\x24\x93\xe5\xa9\xbd\xfd\xf0\x3f\xb3\x42\xce\x4e\x4b\xaa\x0d\x53\xa7\xb9\xcc\x9c\x66\x3a\xce\xec\x08\xb8\x58\x4c\xca\xfc\x64\xf2\xbf\x62\x8f\x2e\x84\x21\x5c\x5e\xe2\x03\xfe\x97\x19\xb3\xaa\x8b\x54\x1b\x8e\x18\x3b\x29\x7b\x3f\xb9\xf1\xc5\x76\x22\x71\xfa\x7b\xc1\xe8\x0f\x8a\x07\x49\x10\x6b\x49\x29\x54\x0e\x03\x87\xff\x64\x18\xfc\x24\x67\x35\x11\xf6\xfe\x80\x70\xf7\x07\x63\xce\x1f\x0a\xd6\x3e\x19\xce\x3e\x15\xc6\x3e\x09\xbe\x3e\x05\xb6\x3e\x1d\xae\x3e\x0d\xa6\x3e\x3d\x9e\xfe\xc9\xb0\xf4\x5f\x04\x8e\x3e\x61\xe8\x31\x11\x7e\xfe\x73\x60\xe7\x0f\xd7\x8d\x48\x12\xe0\xe5\x3f\x1f\x56\xfe\xf0\xac\xd8\x48\x91\xb0\x07\x6c\xfc\xe7\x80\x56\x3c\x19\xac\x22\x01\xa4\x22\x25\x9c\x22\x19\x94\xe2\xc9\x30\xf0\x29\xf0\xef\x29\x37\xfc\xde\x70\xef\x4f\x81\x79\x4f\x03\xab\x8e\xc6\xba\x27\xf5\xfa\x7c\x16\x8c\x7b\x4a\x7c\x7b\xf4\x22\x70\xc1\x0d\xa7\xc5\x4b\x56\xd0\xf5\x75\x1c\x0a\x3a\xd5\x4a\x5c\x6e\x21\xa5\x31\x36\xd6\x05\xf5\x2c\xa9\x26\xbe\xac\xa1\x63\xa5\xf2\x48\x17\x67\xa4\x00\x48\x05\xdf\xaf\x77\x75\x51\xf2\x78\x9a\xa2\x3b\xa9\x6e\x0b\x49\x73\x7d\x5a\x49\xfc\x4f\x4b\x52\x14\xb0\x13\x45\x19\x52\x87\x11\x83\x43\x2a\xa8\x03\xd9\x35\x6f\xe4\x1d\x91\x73\xc3\x04\x39\xe6\xc2\xef\x9c\x93\xc0\x8f\xd6\x8a\xd5\xe8\xa0\xaa\x7d\xea\x8b\xe7\xbe\x93\xaf\x2f\xb8\x0a\xe1\x67\xad\x0f\x3a\xbc\xee\xc6\xf8\xf1\xf8\xba\xfb\xe2\xbc\x2e\xba\x31\x76\x8c\xbb\xa7\x09\xb0\xbf\x98\x90\x77\x4e\xe1\x7b\x01\xe3\x69\x44\x11\x15\x39\x71\x94\x82\x5f\xdf\x3e\x89\xce\xf3\xe8\x9a\x9f\x4d\x62\x46\x17\x34\xd7\x04\x23\x01\x62\x7a\x73\x3e\x05\x13\x61\x70\x8b\x1f\x8c\x5b\x7c\x4f\xe9\x07\x5f\x9f\x3d\xfc\xf9\xd3\x0d\x06\x7b\xf8\x3f\xc5\x1e\x0e\x98\x3c\x5f\x2b\x9a\xb1\xe9\x21\x29\x6f\x5e\x80\xb4\x59\xb0\xad\x0e\xd7\x88\x0b\xc1\x18\x66\x4d\xb6\x3c\xad\x40\x49\x3a\xaf\x8b\x62\x8d\x5e\xde\x0e\x69\x6f\xff\xad\x75\xb3\x64\x5b\x6c\xa7\x10\xec\xde\x31\xba\xd6\x36\xa9\x94\x74\x1a\x89\xaa\x85\xb0\x2a\x86\x3b\x4e\x76\xf0\xd6\x16\xd1\x4c\xf4\x0f\x78\xd0\x0e\x17\xab\xcb\xc0\x00\x34\xf9\x92\x91\x36\x79\xaf\x3b\x10\xdb\xeb\x5c\xaa\x8c\xcf\x8a\x35\x59\xd2\xc2\x1a\x4b\x2e\x43\xe1\x96\x17\x85\x7b\x4c\x44\x46\x04\x33\x08\x0e\x40\x8d\xa6\x90\x62\x01\x93\x41\x71\x20\xec\xbe\x62\x99\xed\x33\x2b\x18\x15\x75\x85\xe3\xb4\xfa\xd1\x5a\xd6\xca\x8f\x33\x2a\x25\x24\xe8\x9d\x6b\x22\x78\x31\xf2\x53\xde\x65\xed\xdd\xde\xf3\xad\xd3\x5f\xb3\xdc\x11\xee\xde\x71\xcd\x46\xf0\xcc\xde\x63\xc2\xb1\xc8\x15\x53\x8a\xe7\x0e\x5e\x86\x9f\x55\x4a\xae\x78\xde\x26\xa8\xd8\x6d\x01\xc9\x21\xbd\xfb\xfa\x11\x9e\xeb\x45\xab\x90\x62\x2c\xd8\x82\x82\x7a\xec\x04\x1a\xc2\xc6\xb1\x7f\x04\x29\x8b\x1c\xf0\x65\x1a\x12\x72\x3a\x6c\xdc\x2b\x4e\x7b\x8f\xc4\xbe\x4f\xb0\xa3\xc8\xb1\x90\x44\x42\x5a\x6d\x2d\xb8\x59\x43\xcc\x75\x59\x1b\x92\xcb\x3b\x71\x12\x73\x30\x11\x88\x42\xc9\x8c\x19\xda\x66\xc6\x7a\x95\x4c\x13\x26\xe8\xac\xb0\x67\x0f\x12\x55\x6e\x76\x6e\x00\x32\x67\xd4\xd4\x8a\x91\x05\x35\x11\x52\x62\x87\x36\x8f\xeb\xf9\xe1\x6d\xc7\xb5\x8b\xa8\xce\x49\x2d\x34\x8b\x54\x64\x93\x99\x00\x3d\xd3\xbd\xed\x89\x96\xb5\x39\x90\x7b\xe4\x21\xd7\x11\xa6\xad\x05\x46\x22\x2f\x99\x26\xb2\x8e\xf0\xe4\x75\xcc\x3f\xd7\x5d\x4a\x0b\x6f\xf0\x3b\xed\x6c\x7d\x03\xdb\x29\x76\xd8\x65\xa0\x95\xef\x48\x76\x6b\xa1\x71\x48\x24\xf0\xf2\xf2\xfa\xe7\xb7\x67\x7f\x7e\xf5\xb6\xdf\x16\x00\x59\x27\x42\xdd\xb9\x16\xfc\x5f\x35\x23\xb4\x94\x62\x41\x68\x11\xe6\xd9\x8d\xc0\xd1\x19\x7c\x00\x52\x31\x6d\x46\x5e\x4f\xbd\xd6\x5e\x02\xbd\x04\xc3\x16\x60\xf6\x73\xa4\x1d\xf6\xc5\xe9\x44\xe0\x73\xba\x58\x25\xff\x0e\x80\x10\xee\x30\xc4\x08\x66\xec\x19\x47\x83\x90\x0b\x42\x89\xe6\x62\x51\x44\xdb\x82\xd1\x1e\x91\x58\x7f\xc8\xb8\x7d\x83\x69\x5f\xb7\x48\xbc\x53\xa4\x33\x86\xfe\x56\x65\x3a\x87\x40\x7b\x99\x79\x17\x00\xbb\xaf\xa4\x66\xde\x05\x80\x3a\xee\xc5\x94\xd0\x3c\x57\x51\x7a\xb4\x13\x36\x8d\x8d\x8e\x2c\x24\xd8\x2d\x06\xe7\x47\xe4\x39\xf9\x6f\x72\x4f\xfe\x1b\x1c\x02\xbf\xef\xdf\x55\x1a\x73\x3b\x05\xe6\x7c\x29\xb5\xb9\x98\x26\x5a\xe8\xbf\x2e\xa9\x81\x27\xda\xf5\x30\x92\xcc\xb8\xb3\xcc\xd8\xbd\x61\xca\x6a\xc4\x6e\x0d\x63\x67\x2e\xca\xb9\x60\x07\xf8\xa5\xec\xee\xd8\x38\xeb\xc5\xbc\x0b\x55\xff\x4c\xfb\x1b\x3a\x7e\x23\xb5\xb9\x74\xd2\x3a\xa4\xd2\x09\xc7\x51\x52\x93\x2d\xbb\xe2\x3e\xa6\xd7\x77\x76\xef\x05\xd7\x7f\x2e\xe1\xa2\xc4\x9c\xd9\x25\x8f\x10\x0e\x87\x73\x62\xe3\x40\x8d\xe9\xb6\xee\x87\xb6\xd6\x86\x7b\x13\xd4\x30\xa7\xb7\x05\x45\x85\x2a\x99\x4f\xc8\x2b\x9a\x2d\x23\x46\x61\x67\x23\x0f\x94\x81\x4a\xe6\x38\x8c\x25\x5d\xd9\x3d\xee\x7a\x05\x80\x25\xaa\xae\x4d\xa0\x0c\x0e\x9c\x95\x58\x19\x15\x64\x16\x83\xf0\x53\x6c\xce\x94\xc2\xbc\xec\xd9\xda\xe7\xc6\x44\xef\xb6\x28\x29\x17\x8f\xfa\x49\xb7\x55\xa6\x21\xae\x07\xc2\x56\x4d\xa0\xf0\x87\x97\xd3\x11\xb9\x39\x9f\x8e\x88\x54\xe4\xfa\x3c\x0e\x07\x12\x5a\xa3\xcf\x6e\xce\xa7\xcf\xf6\xba\x02\x41\xc2\xcd\xcd\xf9\xb4\xc7\x43\xb6\xb1\x9e\x25\xad\xc6\xb7\x6c\xdd\x53\xbb\x4b\xa1\x61\x8e\x9b\x8d\x95\xe4\x85\x70\x9a\x4b\x5a\x3d\xfa\x69\x8a\xd1\x9c\x0f\x8c\x2e\x9f\xde\x06\x46\x97\x81\xd1\x65\x60\x74\x19\x18\x5d\x06\x46\x97\xc3\x4d\xc5\x18\x18\x5d\x3e\xda\x06\x46\x97\x07\xdb\xc0\xe8\xf2\xa8\x36\x30\xba\x0c\x8c\x2e\x03\xa3\xcb\xc0\xe8\xf2\x40\x1b\x18\x5d\x06\x46\x97\x81\xd1\xe5\x23\xdd\x0f\x8c\x2e\x3d\xda\xc1\x41\xd7\x07\x46\x97\x0f\xb5\x81\xd1\x65\x67\x3b\x18\x73\x7e\x60\x74\x79\xa0\x0d\x8c\x2e\x0f\xb4\x81\xd1\x65\x60\x74\x19\x18\x5d\x3e\xdc\x06\x46\x97\xde\x6d\x60\x74\x79\x5c\x1b\x32\xd8\x1e\xd9\x06\x46\x17\xd7\x06\x46\x97\x4f\x6a\x03\xa3\xcb\x21\xa7\xe5\x0c\x8c\x2e\x4d\x3b\x8c\x18\xdc\xc0\xe8\x32\x30\xba\x7c\xb0\x0d\x8c\x2e\x03\xa3\xcb\x07\xdb\xc0\xe8\xd2\xa3\x1d\x9c\x5b\x7c\x60\x74\x19\x18\x5d\x3e\xd4\xc7\x60\x0f\x3f\xae\x0d\x8c\x2e\x03\xa3\xcb\x56\x1b\x18\x5d\xb6\xdb\xc0\xe8\x32\x30\xba\x0c\x8c\x2e\x03\xa3\x4b\xd3\x06\x46\x97\xaf\xdd\xef\xa4\x98\xe6\xff\x66\x53\x59\xf0\x6c\x1d\x9d\xcc\x76\xc5\xb4\xac\x55\x66\x6f\x6c\x78\x2c\xa9\xe0\xb9\x8d\x47\x21\x4a\xc9\x3e\x30\x86\x90\xab\x60\xe2\x42\xa6\x10\xe5\xe6\xe0\x29\xa6\xe0\x20\xd8\x42\xfc\x0b\x5e\xf6\xc7\x78\xc0\x43\x0c\x55\x06\xa7\xaf\x9f\xb3\x34\xda\x6a\x0f\x5f\xe4\x10\xb2\x95\x43\x82\xa3\x66\x17\x19\xd9\x08\x5b\xfe\xe0\xe6\xa2\x55\x55\xf0\x98\xbc\x6f\x42\xae\x6b\xd0\x2e\x98\x03\x29\xe8\xef\x48\x56\xd5\x23\x52\xb2\x52\xaa\x08\xac\x7a\x02\x0b\xae\xb3\x55\x0e\x61\x9d\xae\x70\x40\x7e\xf2\x8d\x84\xf9\x5f\xa3\xbd\xd0\xb2\x50\x35\x6b\xc5\xbd\x38\x8c\x42\x03\x6e\x23\xfe\xb9\xe9\x78\x81\x2e\xa5\xb9\x72\x87\x7b\x6f\xeb\x95\x18\x53\xe2\xa7\x30\x9e\xc0\xaa\xe7\x82\xb7\x17\xda\x27\x27\x68\x93\x57\x3b\x3e\x85\xf8\xa7\xae\xec\x43\x9a\x77\xea\x35\x20\x5a\x28\x46\xf3\x35\x0c\x23\x03\x44\x65\xeb\xff\xfb\x02\x73\xc3\xb3\x82\xf2\xfe\x30\xcc\x54\x47\xfa\x1c\x46\x41\xec\x7e\x6d\xd3\x13\x20\x59\xb5\x59\xac\x51\x03\xc2\xe7\x78\xc6\x27\xfe\x57\xf8\xc7\xa3\x08\x4b\x8f\x1a\xd8\x5d\x60\xc4\x80\x29\xcb\x75\xa8\x26\xc4\x19\x77\x68\xd2\xe5\xac\x62\x56\x7b\x47\x67\x67\x7f\x1d\x7d\x2d\x68\xc9\x33\x7f\x2a\xce\x70\x13\x72\x29\x36\x2c\xc0\x14\x43\xb6\x86\x69\x59\xd6\x86\xce\x0a\x36\x21\x17\xc8\x96\x22\x45\xb1\xb6\xa6\xb9\x66\xc6\xc3\x09\x22\x88\x11\x48\x12\x34\x71\x24\x92\x78\xa7\x02\x0d\x9b\x0a\xe9\x5d\x98\xb0\xe2\x47\x0a\x46\x98\x30\x6a\x6d\xf7\xdf\x54\xe6\xd7\x76\x0b\x76\xbe\x1d\xcd\xfa\x12\x09\x20\x4e\x01\x1e\x8e\x04\x0e\xa7\x81\xfb\xc6\x43\x7d\xd3\xc2\x7c\x5b\x77\x3f\x92\x56\x85\xf9\x53\x9d\x6d\x61\xaf\x80\x1d\xa2\x89\xc8\x79\xe4\x08\x6c\x8f\x53\x99\x5b\x05\x47\x31\x94\x4f\xcd\x19\x45\x67\xdf\x85\x1d\xdc\x2d\x78\xe7\xa8\x69\x35\x1f\xba\xa2\xbc\xb0\x07\x38\x72\x00\x0d\x85\x42\xa2\x28\x4d\xa2\xb8\x82\x4b\x75\x38\xa4\xcd\xe2\x92\xe4\x3a\x79\x76\xd9\x52\x6a\x26\x40\x5e\xd2\x26\x1f\xaa\xc9\xd6\x70\x22\x26\xc7\xbb\x38\x16\x93\x7d\x31\x27\xac\xac\xcc\x7a\x44\xd8\x8a\xa9\xb5\x59\x02\x32\x40\x49\x44\x8b\x40\x17\x76\x6c\x25\xcd\x83\xdd\x31\x22\xd2\x3b\x8b\x23\xbb\x87\xfb\xc1\xd9\x4f\x75\x61\xd0\x9a\x02\xfd\x3b\x2a\xe7\x1c\x5b\x82\x5d\x93\x9a\x59\x89\xc4\x0a\xcd\x94\xcc\x48\xb6\x15\xbc\xe4\xfd\xf8\x66\x49\xc2\xb3\xf0\x16\x46\x11\x24\xe2\xd8\x2d\x51\xd2\x7b\x70\x25\xd2\x52\xd6\x02\xb6\x46\x26\xcb\xaa\x36\x81\x4a\xee\xb5\xfb\xcf\xe6\x63\xcc\xa4\x98\xf3\x85\x8b\x82\x9d\x96\x54\xd0\x05\x1b\x37\xc3\x19\xb7\xea\xcd\xe9\xfe\xd0\x19\x34\xf7\x5c\x35\xd3\x04\xf7\x6b\x45\x8d\x61\x4a\x7c\x47\xfe\xe7\xf8\xef\xbf\xf9\x65\x7c\xf2\xa7\xe3\xe3\x9f\x9e\x8f\xff\xf8\x8f\xdf\x1c\xff\x7d\x02\xff\xf8\xaf\x93\x3f\x9d\xfc\xe2\x7f\xf8\xcd\xc9\xc9\xf1\xf1\x4f\x7f\x79\xf7\xfa\x66\xfa\xea\x1f\xfc\xe4\x97\x9f\x44\x5d\xde\xe2\x4f\xbf\x1c\xff\xc4\x5e\xfd\xe3\x13\x1f\x72\x72\xf2\xa7\x5f\xf7\x8f\x14\xc6\x86\xc5\xd3\x05\xc5\x13\x85\xc4\x9f\x24\x20\xee\x64\xec\xde\x0f\xbf\xbb\x02\xb7\x8e\xbf\x8b\x24\x7c\xe8\xf8\xab\x68\xff\xc9\xc5\xbc\xed\x9f\x6b\x22\x4b\x6e\x8c\xf3\x16\xd0\x90\x0c\x6b\xc3\x77\xe3\x04\x16\x9f\xa3\x02\xc5\x75\x48\xca\xd4\xba\x7c\x7a\x0f\xab\xb9\x5f\xc1\x5b\x25\x08\x2f\xab\x82\x95\x4c\x18\x10\x3c\x63\x6f\xdb\x82\xeb\x6f\xd2\xbe\x41\x46\x85\x90\x86\xb0\xfb\x8c\xb1\xdc\x0d\x72\x90\x8d\x41\x1b\x64\xe3\x20\x1b\x3f\xd6\xa2\xfd\xd7\x89\x1c\x99\xa1\xcf\x7a\x2b\x1a\x65\xe5\x02\x1e\x31\xaf\x3e\xc3\xd7\x1b\x16\x0a\x39\x27\xac\x2f\x61\x6e\xdb\x89\xe3\xe0\xa5\x7d\xbd\x95\x04\x32\xf8\x9d\x54\xd2\x1e\x2b\x83\xb6\xa8\x14\x87\x51\x70\xa1\xb3\xdc\x57\x75\xb1\x4f\xe7\x75\x50\xbe\xc0\xea\xf6\xe0\xd1\xb4\x23\xf2\xa0\xee\x25\xcb\x6e\xd1\x85\x9c\x33\x04\x59\x30\xbc\x83\xfa\x69\x00\x41\x2d\x8e\xa5\xac\x8b\xdc\xf6\xe1\xa6\x83\xe1\x02\xdd\x73\x33\xf9\xe0\x1a\xf6\xea\xf7\x2b\xad\x41\xe1\xce\xac\xdd\x43\x81\x2e\xb3\x94\x77\xa1\x2a\x01\x73\x6a\x15\x86\x25\x15\x79\x6f\xfc\xfd\x01\x84\x95\x29\x60\xd2\xf7\x14\x0a\xc6\xce\x0f\x21\xb8\x78\xdd\xe1\x51\xa3\x0e\xa8\x4f\x6f\x99\xb0\x07\x68\x7b\xe1\xe7\x0d\xe9\x06\x57\xa0\xd1\xc5\x70\x49\x00\xa8\x92\x1a\xae\xad\xb6\x89\x50\x37\xf0\xa8\x54\x52\x6b\x3e\x2b\x58\x0b\xc3\x79\xe6\x36\x27\x50\x9f\xf9\xdb\x22\x8e\xc7\x35\x81\x6f\x2f\x81\x02\x60\x67\xf5\x5c\xe6\x31\x6a\xdc\x86\x47\xbf\x11\xc2\x88\xe0\x84\x3a\x41\x39\xca\x60\x10\xc0\x76\x5d\xbb\xab\xfa\x75\xb8\xf2\xed\x99\xa4\x46\xf6\x57\xe9\xd2\xb8\xf3\xfd\x30\x0e\xcb\x4b\xdb\xd9\x14\x8a\x15\x60\xe4\xe8\x25\xaf\xc8\x8c\x99\x3b\xc6\x36\x92\x12\xda\x7d\x73\xac\x4f\x3c\x4a\x39\x72\x10\x2d\x52\x01\x11\x1f\x13\x32\xed\x1c\x73\x88\x79\xc7\x53\xc1\x5c\x88\xef\x36\x45\x14\xd0\x2d\x7b\x31\xe3\x45\xd8\x8e\x77\x85\x18\x60\x5c\xc4\xb2\x79\x59\x06\xda\xcf\xd6\x3b\x47\xbf\xde\xa5\x34\x71\x6f\x18\xfd\x6a\x56\x8f\x72\xde\xfc\x27\x79\xcb\x44\xc1\x12\x07\x2b\x3a\xa0\x53\xd8\xbd\x6a\xdd\xdc\xb9\xad\xdf\x08\xe7\x4e\x94\x39\x10\xdf\xb1\x3b\xe7\xcc\x90\x52\x6a\x43\xbe\xf9\xf6\x5b\xc2\xd0\x17\x83\x20\x93\x68\x17\x34\x49\xc6\x91\x95\x84\x25\x2b\x1d\x31\x26\x49\x46\x8e\x49\x3e\x10\xf9\xe8\x47\x07\x97\x18\xf8\x04\x74\xad\xdc\xac\xad\x2d\xc0\xee\x7b\x45\x18\x53\x9c\x95\x36\x0f\xf1\xba\x3b\x20\x87\x86\xf1\x27\x07\x7f\x47\x64\x85\xfc\xf5\x0f\x56\x68\x6c\xad\xc2\x5a\x80\x33\xa0\xdf\x2e\xbf\x98\xdb\x55\xc2\xc4\x14\x30\x1c\x01\xab\xb3\x39\x44\x9f\x32\x82\xc3\xf9\x57\xcd\x57\xb4\xb0\xa2\xb9\xfd\x8b\x29\x24\x11\x84\x7f\xf4\x05\x42\xa8\x40\x5e\x4c\x15\x5f\xf1\x82\x2d\xd8\x2b\x9d\x51\x54\x26\xf6\xed\x86\x3f\x7b\x60\x5c\xb0\x1f\x94\x2c\x34\xb9\x5b\x32\xb3\x64\x8a\x50\x9f\xb8\x04\x10\x9f\x05\xe5\x82\x94\x52\xc5\xc0\x40\x5c\xa7\x1a\x33\xa7\xb8\xd1\xa4\xa2\xca\xae\xbd\xcf\x90\x42\xa0\xd1\x4c\xca\xc2\x95\xa2\x28\xd6\xed\xb8\x78\x7f\xbc\x04\xc4\xdc\xe5\xcf\x82\xdd\xfd\x6c\x47\xa1\xc9\xbc\xa0\x8b\x26\x31\x0a\xae\x98\x4d\xcd\x2e\x3a\x69\xeb\xc1\x89\x86\x3a\x0b\xb5\xbd\x51\xee\xe8\x5a\xb7\xe9\x6c\x6d\xdf\x3c\x42\xb6\xbf\x38\x81\x53\x4c\x35\x69\xfa\xce\x7b\x3f\xec\x9b\x13\xe0\x1f\x39\x3f\x9b\xfe\x7c\xfd\xb7\xeb\x9f\xcf\x5e\xbe\xbb\xb8\xec\xfd\xb0\x4b\x69\x18\xc6\x51\x02\xd7\x92\x73\x38\xb9\x55\x68\xa0\xba\x13\xa9\x27\x00\x92\x00\xb6\x3b\x91\xcb\xbb\x48\x24\x99\xdd\x53\x8c\xf6\xf3\x63\xd0\xaa\x3a\x53\xa5\x54\x53\x25\xe7\xbc\xe8\xad\x7b\xa7\x3a\xc1\x1b\xc3\xf1\x98\x92\x33\xf7\x71\x2b\xee\x91\xde\x67\x1b\xba\x18\x08\x6a\x0e\x24\x32\xf6\x31\xfd\x63\x58\x9d\x14\x40\x4c\x48\xdc\x18\x62\xff\x43\xb4\xd7\x3d\xb3\x77\xf2\x04\x3b\x8c\x9e\x7f\x9e\xc2\x48\x2f\x64\x46\x0b\xa8\x8e\x19\xb7\xf1\x49\x62\x13\x61\x73\x5c\x41\xb2\x27\xf5\xdb\x99\x14\x92\xe6\xe8\xdd\x46\xe1\x9f\x33\x5f\x39\xc7\x2b\x3b\x00\x91\x8b\x1a\xc8\x0d\x26\xda\x41\x7f\x3e\x3b\xb5\x52\xcc\x47\x48\x37\xbb\x97\x58\x30\x28\xaa\xcb\x77\x5d\xc0\xa1\x7b\xcb\x0e\x8f\x42\xec\x99\x6b\xba\x71\x07\x8c\xcf\xc1\xb3\x01\x1e\x47\x6b\x32\xaf\x2b\x74\x35\xbe\xf5\xcb\x10\x51\x56\x2f\x91\x19\x0b\x0f\x39\x90\xdd\x89\xf3\xd3\xec\x48\xcc\x12\xba\xe5\x76\x06\xe7\xad\x90\xf6\xdb\xc6\xeb\x20\x98\x2a\x14\xb9\x1f\x7f\x84\x02\xae\x5e\xfe\x27\x70\x13\x35\x4b\x4c\xc6\xc1\xd1\xaa\x14\x1b\x6f\x1f\xaf\x58\xcb\xfb\xaa\x16\x86\x97\xcc\x53\x4f\x8d\x37\x74\x22\x85\xbf\x3e\xd2\x0d\x15\x7f\x92\x8d\x4e\xc8\x0f\x02\xce\xab\x60\x39\x19\x13\x21\xdb\x25\x62\x62\x2e\x55\x06\x2e\x80\xbd\x6e\xf0\x8c\x56\x74\xc6\x0b\x1e\x23\xcc\x53\x6d\x70\x28\xce\x16\x8c\x07\x70\x2b\x79\x7e\x9a\x2b\x59\xe1\x4d\xec\x39\x21\xe2\x53\x00\xba\xb9\xc7\x61\x11\x06\xe7\x13\xea\x0c\x64\xa1\xa8\x30\x2d\xe9\xc0\xd6\xc6\xf9\x4f\xd4\x41\x52\x28\x01\x34\x4f\x57\xe6\xf0\x2c\xb7\x32\x23\x5c\xb6\xe8\x73\x75\x68\x7c\xf3\xe7\xfe\xe5\x82\xe4\x63\x32\x7d\x7f\x7d\xf1\x7f\x37\xce\x4d\x7f\xd5\x0e\xdb\x61\xb3\x4d\x5b\x79\x90\x6c\xdb\x5c\xb1\x52\xae\x86\x8d\xf3\xd5\x6f\x9c\xc6\x41\xb4\x77\x22\xc6\xab\x3a\x8c\xfd\x72\x11\x0c\x0d\x0a\xa7\xf5\xbf\x4c\xa6\x0d\x67\x51\xf7\xa9\x41\x4e\x2a\x55\x8c\xd8\xaf\x08\xc3\x69\x51\xac\x43\x1f\xa9\x91\x58\x48\xd5\xa9\x5d\x71\x1c\xbd\xe1\xed\x3a\xa7\x85\xfe\x52\xaf\xc8\x18\xd7\x4e\xa5\x64\xf6\x4e\xd6\x22\x0d\xb3\x63\xc4\x8e\x6b\x06\x42\x72\x26\xa4\x71\xde\x14\xb0\x25\xe4\x1c\x7e\x4b\x10\x20\x1d\x90\x36\x77\xf4\x9c\x08\x35\xeb\x26\x50\xad\x1a\x24\x89\xd7\xc3\xd1\x7e\x81\xda\x75\x3b\xf5\xaa\x16\x2f\x3d\x8f\xc0\x14\x28\x46\x73\x84\xb4\x50\xb3\x44\x36\xd1\x92\xea\x5b\x96\xe3\x07\x5f\xe8\xce\x8c\x10\xb2\x76\x42\xde\x8b\x62\x7d\x25\xa5\xf9\xbe\xa9\x8e\xbc\xef\x5d\xfa\x57\x17\x1a\xe8\x3a\x14\xc1\x47\x4c\x61\xc8\x63\x58\x44\x90\x51\x41\x4d\xe7\x58\x11\x65\x17\xe4\x3f\x55\x42\xa9\x5a\x9c\xe9\xd7\x4a\xd6\xbd\xf5\xa9\x94\xb6\xdf\xeb\x8b\x97\x70\x09\xd5\x8e\xf8\x4e\x18\xb5\xae\x24\x17\xc6\x7b\x9f\x12\x06\x50\x7e\x70\x14\x83\xa1\x94\x89\x66\x13\x23\xe4\x1d\x5d\x13\x5a\x68\xd9\xb8\xb7\xc4\xae\x80\xa3\x8f\x66\xda\x5f\xcf\xa4\x59\x6e\x85\x31\xa9\xe8\x1f\x56\xd9\xee\x6f\x14\xf0\xe7\xb5\x30\x11\x2e\xb6\xba\x35\x90\xce\x5b\x29\x96\xb1\x9c\x89\xec\x4b\x3d\x11\xfb\xa6\x73\x83\x53\x75\x29\x85\x15\xaf\xfb\x3e\x57\x17\x8d\xaf\xd0\xad\x46\x78\x8a\xc0\xad\xec\x02\x7a\x14\xa8\x0f\x41\xb8\xd6\x3a\x06\x8f\x79\x31\x87\x08\x24\x6e\xba\xbf\xd4\x33\x56\xd8\xc5\xe6\x45\x61\x77\x20\xcf\xa9\xc1\xe0\x3c\x2f\xe9\x82\x11\x6a\x9a\x43\x68\x24\x61\x42\xd7\xca\xed\x1b\xde\x1f\xca\x98\x4b\xa6\x9b\x4a\xfc\x54\x93\x1f\x2e\x5e\x92\xe7\xe4\xd8\xbe\x1b\xe2\xe8\xe6\x94\x17\xc0\xa6\xe8\x11\xac\xa1\x3e\x3e\x87\x3c\x2d\x19\x83\xf6\xb9\x70\x72\x84\x48\x85\x57\xcb\x88\x08\x49\x74\x9d\x2d\xfd\x1c\x70\x29\x1a\xef\xac\xa3\xd6\x8f\xca\x40\x1d\xc4\x4e\xba\xfb\xf0\x07\xcd\x7a\x03\x47\x53\x5e\x87\x3f\x7c\xc6\xeb\x30\x34\xd7\xec\xf1\xef\x2e\x18\x9e\xd5\x92\x19\x9a\x53\x43\xdd\x35\xe9\xbf\x30\xec\xda\xe1\xb2\x8c\xb8\x2c\x35\x7b\xcb\x45\x7d\x8f\xa8\xb3\x83\x08\x41\x5c\xbf\x82\x11\xc1\xf1\x82\x85\x96\x41\x0c\xcd\x47\x0b\x12\x24\x2e\x5c\x74\x8e\xd1\xe8\x01\x0b\x18\x6e\x09\xcf\xfc\x65\x0d\x21\x2a\x72\x59\x6e\x0d\x12\xa8\xc9\xfa\x26\xeb\x91\x4e\x26\xc6\x70\x30\x7d\xfb\xcf\x0e\xce\x14\x6c\xc5\xd2\x55\x7d\x7b\x6b\x9f\x66\x27\xc7\xef\x5c\x78\x3c\x29\xe8\x8c\x15\x8e\x0f\x0d\x09\x2d\x13\x9e\xb0\x44\xfe\x68\x25\x13\xc2\x53\xae\x24\xa2\xaa\x68\x33\x11\xf6\xf1\x5f\xc4\x3c\x24\x05\x42\xdc\x38\xa4\x47\x3b\x0f\xe0\x8f\xfc\x12\xe6\xa1\x8e\x50\x10\xc9\xe6\x3c\x58\x6d\xb3\x3b\x0f\xa0\x7f\x1d\xfa\x3c\x68\x96\x65\xb2\xac\x0e\x04\xb5\x78\x83\x88\x74\x3b\xa2\x4f\x45\x28\x76\xbf\x4c\xa3\xa0\xc7\xae\x24\x01\x35\x78\x0f\xfa\xba\x04\xff\x3b\xb8\xce\x41\xda\x6d\xde\xf1\xae\xf7\x68\x74\x64\xd3\xa3\x7b\xe0\x7f\xe2\x8d\x37\x40\x22\x3b\xed\xb3\x43\x22\x03\xaa\x54\x0a\xee\xf9\x0e\x3c\xf1\x6b\x00\x46\x5a\x23\x00\xe6\x95\x89\x9c\x8b\x05\x04\x8f\x46\x2e\x8f\x73\xc5\xbc\x78\xbe\x45\x8f\xd7\x11\x48\x1c\x3f\x20\x2f\x6e\x5a\xfc\x28\x52\xa8\x26\xc5\x51\xee\xc2\x4e\xe2\x77\x2e\xdf\xdf\x84\x04\xaa\x54\xac\x91\x1c\x08\xfe\x64\xef\xd7\xe9\x17\x83\xaf\xdc\x5c\xc5\xa7\x86\x57\x46\x3d\x6f\x37\xba\xf2\xf3\x9d\xd2\x4f\x43\x5c\x6e\xe2\x2d\x93\x0e\x61\x13\x7c\xb9\xdd\x47\x82\x95\x8b\x3e\x02\xee\xea\x3c\x20\x07\xc8\x5f\x71\x44\xde\xca\xce\xac\xe0\x30\x5c\x2c\x74\xe8\x04\xa1\x45\x2c\xf3\x0a\xb6\x5d\x5e\x10\x7f\x0a\x1a\x0e\xd1\x6d\x6f\x40\xb7\xf0\x54\x4c\xef\x1f\xf1\x60\x7c\xd9\x9e\x88\xc2\x5a\x14\x5f\xb8\x1f\x62\x51\x6a\x7a\xae\xec\x0c\x1a\x4e\x8b\xeb\x8a\x65\x87\x72\x5b\xbc\x7e\x77\x7d\xd6\x1d\x19\xe8\xc2\x8e\x31\x99\xc1\xef\x09\xcd\x4b\xae\x35\x04\x7c\xd8\x6c\x29\xe5\x6d\x54\x97\xc7\x9e\x45\x6f\xc1\xcd\xb2\x9e\x4d\x32\x59\x06\x84\x7a\x63\xcd\x17\xfa\xd4\x49\x94\xb1\x9d\xb8\x13\xc2\x45\xd1\x64\xed\x82\xb7\x50\x18\xed\x22\x08\xd1\x2f\x4f\xb2\xe6\xed\x61\xeb\x41\xae\x48\x03\x93\xde\x9e\x1e\xa0\xb5\x86\xcd\xbb\x77\xad\x63\x7b\x57\xc5\x95\x84\xd9\xd8\x59\x0f\xbc\x7b\x48\xd1\xec\xa2\x38\x3b\xe7\x11\x8d\xd7\xbd\x4f\x92\x53\xfa\x33\xa6\xa3\xd0\xa8\x29\xcf\xdc\x9b\x76\x48\x2d\x81\x19\xb0\x68\xd2\x07\xb3\xce\x21\xbc\x7d\x04\x65\x75\xdd\x9f\x1e\xa5\x62\x15\x3f\x2b\x0a\xbb\x90\xd4\x5e\x13\x47\x3a\x44\x5a\x82\x69\xb2\xa4\x2b\x14\x05\xda\xae\x38\x9b\xcf\x59\x06\xc6\x42\xf8\x16\x70\x91\xc4\x09\x05\x64\x03\x0b\x4b\x95\x18\x89\x7d\x53\x52\xf2\x7b\x3b\xc2\xb0\xc7\x10\x0f\x2a\x72\x08\xfc\xef\xfe\x75\x44\x95\x41\x02\xe0\x83\x86\x2c\x73\x64\x57\x28\xec\xc4\x27\x2a\x1b\x7b\x6d\xd9\x5f\x5c\x32\x63\x0d\x35\x9c\xb7\x30\xfa\x60\x0d\x2b\x55\x27\x38\x0c\x31\x91\x61\x12\x46\x87\x93\x4a\x8a\xc8\xf3\x00\x91\x62\x37\x26\xab\x83\x78\xe5\xed\x73\x45\x8e\xc9\x8e\x54\x9a\xcf\x16\x41\x26\x9f\x1e\x45\x7e\xc2\x58\x15\x39\x94\x78\x55\xa4\xd4\x77\x25\xf6\xa1\xe8\x67\x34\xfb\x08\x3c\xe5\x11\x25\x94\x7a\xf4\xb7\x67\x12\x0e\x76\xdf\x5f\x13\xed\x4c\xd5\xab\x7b\x96\x6d\x94\xeb\x2f\x4b\xe0\xfb\x92\xd0\x49\x6d\x9a\xa2\xe2\xd1\xb7\xd6\x81\xe8\xf4\xee\x0d\x0f\x45\x88\x9e\xbb\x09\xe7\x5e\x4d\xc6\x1f\xad\xe2\xdc\x5d\x04\xed\xbd\xed\x01\xad\xb7\xfd\xd1\xde\x5c\x5c\x2c\x1c\xb1\x88\x54\x0d\xdb\x6e\xd4\xb0\xfc\x38\xa0\x9a\x9c\x94\x86\x1c\x1f\x9d\x1e\x9d\x6c\xed\x85\x23\x1d\xe2\xa1\x31\x8d\xb2\x7d\x21\xcd\xcb\xaa\x58\xc3\x3b\x1c\x61\x01\xb9\x48\xfe\x31\x8f\xac\x6b\x0a\xb4\xe8\x25\x2b\x8a\x11\xd1\xf6\x9e\xa6\x9e\x1b\x1b\x3f\xb5\x5f\x32\xaa\xce\xd0\x9e\x3f\x3e\xfa\xe5\x68\x44\x98\xc9\x4e\xc8\x9d\x14\x47\x06\x3d\xb3\xe4\x06\x94\xdd\xa8\x31\x35\x83\x58\xcb\x1a\x6a\x9c\xe3\xb2\x35\x74\xea\x19\xb5\x7a\x5a\x8d\xca\x04\x66\xea\xb3\x22\xa2\x66\xb7\x6d\xaf\xee\xb9\xb1\x32\xd3\xd4\x60\x4f\x3d\x47\x95\x86\x41\x81\x36\x6a\x4d\xef\x15\x3b\x5d\x32\x5a\x98\xe5\xba\x51\xb3\xb0\x7c\xb4\x26\xb5\x70\xbf\x89\x17\xf6\x07\x90\x6b\x76\xb8\x59\x5f\xae\x8a\xfd\xcd\x52\x31\xbd\x94\xc5\xde\x73\xbf\x7c\x69\xe3\x4c\x0a\x6d\x65\x8a\xb5\x05\xdc\x18\x75\x93\x76\xe3\xca\x2b\x23\x5d\xb3\x84\x53\xa6\x18\xa2\x56\xed\xd6\x82\x62\xcc\x4b\xba\xb2\xf2\x46\xd7\x59\xc6\x58\x1e\xa3\x43\x85\xca\xdb\x6f\x53\x16\x5f\xde\x7f\x9d\x63\xdb\x16\xaa\x4a\x73\x4b\xbf\xbe\x9a\x9e\x77\x6e\x69\xf8\xe0\x0d\x1c\xe3\xf3\x25\xcb\x6e\xaf\xe2\xea\x0d\x1d\x48\x0c\xb4\x92\x6a\x9f\x8a\x41\x29\xf3\x83\x31\xad\x4a\x88\x89\x74\x08\x23\x33\x29\x04\x43\x7e\x66\xf8\xad\x3f\xb2\x0b\xbb\x17\x50\xa4\xe3\xf1\x8d\xbb\x5a\xae\xd1\xec\x7d\x76\xf3\xf6\xfa\x99\x07\x32\xdc\xbc\xbd\x06\xfa\x3c\x7b\x8b\x65\x76\x9a\xe7\x10\xa4\x22\x2b\xa6\xf0\x9f\xd1\xf1\x44\xdf\xeb\xb4\xa0\x1c\x4c\x93\xa6\x6f\x4a\x2a\xff\x19\x39\xe6\x20\xba\x14\x3b\x09\x67\xa3\xbd\x6b\x23\x5d\x06\x5b\x15\x6f\x5b\x89\x08\x79\x82\x1f\x1d\xca\xde\x9d\x66\xf6\x04\x25\xdb\xc2\x53\xa9\x0c\x11\x4d\x45\xfe\x66\xaf\x69\xa6\x56\x3c\x63\x13\x5f\xad\xdf\x07\xc2\x7d\x89\x37\x2a\x16\x8c\xbc\xb0\xeb\xf7\xfb\x6f\xbf\xfd\xed\xb7\xf1\x93\x12\x4f\xe5\x99\x86\xc6\xd3\xbd\xf8\xa1\xc8\x88\x6b\x1c\xce\x2e\xc7\xae\x1b\xa9\x5d\x83\xaa\xa0\x59\xb3\x36\x8b\xdd\xf7\x46\x9c\x07\x50\x33\x46\x76\x84\x06\xec\xed\x87\xff\x99\x15\x72\x76\x5a\x52\x6d\x98\x3a\xcd\x65\xe6\x34\xd3\x31\x10\xde\x72\xb1\x98\x94\xf9\x49\x44\x0d\x57\xe2\x12\x7f\x96\x5c\x7b\x4f\xe4\xc6\x11\xf6\x81\xde\xa6\xba\x08\xd7\x4d\x34\x7a\xb6\x86\x49\xd9\xfb\xc9\x25\x7e\x94\xdf\x91\x67\xcf\x7a\x3d\xc5\x2e\xc1\x6b\x96\x26\xeb\xeb\xcd\xcd\xcd\xf4\x35\x33\xa1\xce\x21\xe0\x43\xf2\xfa\xd5\x4d\x53\xd3\xd1\xee\x2e\x4c\x20\x1a\x14\x8f\x18\xc5\x63\x29\xe3\x8a\x7a\xa6\x8e\x71\xa0\x28\x31\xd2\xdf\x6c\xc4\xc8\x51\xa7\x7c\x98\xc7\xfc\x5d\x4c\xb1\xba\x8a\xbd\x23\xe9\xac\x58\x93\x3b\x8a\x99\xfc\xfd\x48\x8d\xdb\xf6\xcc\x0e\xe3\x99\x95\x5a\x76\x57\xbf\x61\x34\x67\x4a\x83\x41\xcf\xe8\xfe\xe3\x77\xc1\x98\x92\x2d\xdb\x79\xad\x8d\x2c\xad\x1e\x07\xaf\x8a\x73\xd8\x56\x4d\x45\xf5\x1e\x8f\x20\xf8\x33\x35\x51\xac\x42\x83\xdf\xfd\xcd\x57\x61\xce\x6f\x49\x21\x9c\xe7\xa0\x1e\x0d\x25\x59\x38\x55\xce\x56\x85\x62\xe6\xdc\xc9\x28\x50\xd9\xe2\x1c\x4d\x49\xea\x5a\x90\x44\xb5\x2d\x48\x7c\xa9\x6a\xff\x90\xf8\x80\x5f\x9a\x2a\x19\x24\x49\xe1\x6b\x92\x9c\xa3\x9f\xb8\xb0\x96\xdb\x5c\x08\x76\xb1\x03\x8d\x65\xe3\x23\xbe\xda\xbc\x07\x0f\x65\x54\x48\xc1\x33\x5a\xf0\x7f\xb3\x9c\xd4\x95\x14\x44\xd6\xa6\xaa\x0d\x78\x33\x33\xaa\xd9\x78\x45\x15\xb7\x02\xd5\xf6\xdf\xfe\x61\x2d\xec\x69\x37\x52\x82\xab\xaf\x09\xf0\xe2\x88\xe3\x87\x99\x48\x9b\x21\xbe\x04\x43\xe2\x15\xde\x5a\x9c\xf8\x1d\x4d\x0e\xda\x8d\x48\xb0\x50\xe3\x32\x9d\x59\x47\xcd\x12\x50\x74\x19\x04\xc3\x1d\x08\x13\x04\xa7\x35\x1b\x0e\x20\xc9\x25\xa9\x15\x1b\x29\x12\x20\xb6\x2d\xd5\x86\x1d\x6c\x47\xb8\x3d\x87\x89\x70\x1d\x4f\x6f\x56\x87\x45\xfe\x67\xcc\xea\xf6\x17\x67\x97\x67\x3f\x5f\xff\x78\xfe\xf3\xe5\xd9\xbb\x57\x31\x8f\x8e\x2e\xd0\x99\xb2\x44\x67\xb2\x22\x9d\x4f\x54\xc2\x98\xe0\x7d\x6a\x64\x26\xd3\x65\x3b\x46\x6e\xf8\xa9\x1b\x0f\xd1\xac\x60\x99\xab\x18\x75\xc7\x15\x6b\x46\xba\x11\x2c\x48\xe3\xfe\x22\xe4\x92\x17\x1d\x23\xc3\x4a\xa4\xd3\x17\x93\xde\x31\x00\x92\x4a\x1c\xe9\x6c\xc9\x0e\x07\x74\x73\x0d\xa3\x09\xe9\xd2\xfc\x02\x88\x85\xb7\xcd\xe2\xf8\xf3\xc8\x46\x64\xc6\x2e\xc4\x5e\x17\x81\x0b\x6e\x38\x2d\x5e\xb2\x82\xae\xaf\x59\x26\x45\xbe\x77\xac\xfa\x65\x73\x1d\x68\x1c\x90\x8b\x8d\x75\x11\x4e\x4b\xaa\x89\x2f\x47\x3a\x63\x73\xa9\x18\x84\x66\x85\xbd\x33\xaa\x16\xa4\x82\xef\x67\xa2\xf8\x2c\x1e\x57\xeb\xfa\x4e\xaa\xdb\x42\xd2\x5c\x9f\x56\x12\xff\x33\x2e\xf8\x9c\x65\xeb\xac\x60\xbf\x6a\xc6\x3f\x8e\x32\xa4\x0e\x23\x06\x57\x31\xc5\x01\x1f\x75\x08\xbb\xe6\x8d\xbc\x23\x72\x6e\x98\x20\xc7\x5c\xf8\x9d\x73\x12\xf8\xd1\x5a\xb1\x1a\xcf\x2d\x67\x24\x79\xf1\xdc\x77\xf2\xf5\x05\x57\x21\xfc\xac\xf5\x41\x87\xd7\xdd\x18\x3f\x1e\x5f\x77\x5f\x9c\xd7\x45\x37\xc6\x8e\x71\xf7\x34\x01\xf6\x17\x93\x26\x6b\xef\x05\x8c\xa7\x11\x45\x54\xe4\x1e\x80\xf7\xf5\xed\x13\x93\x55\xd7\x32\xbb\x4d\xe4\x18\xbf\x39\x9f\xe2\xd3\x36\x40\x73\x4d\x30\xd2\x1a\x05\xf6\x5b\x60\x22\x0c\x6e\xf1\x83\x71\x8b\x1f\xb5\xb5\xe5\x1e\xeb\xe2\x3e\xda\xb7\x02\x7a\x50\xf6\xb0\x53\x7c\x54\xb7\x36\xcb\x60\x0f\x3f\xd0\x06\x7b\xf8\x11\x0d\x53\x6a\x00\x4e\xf2\x5a\xd1\x8c\x4d\x0f\x49\x79\xf3\x02\x84\xe4\xb5\x72\x05\xef\x1a\x1d\xae\x11\x17\x82\xb1\x1c\xe5\x87\x7b\x15\x46\x16\xf6\x4d\xe6\x75\x51\xac\xd1\xcb\x8b\x2a\x80\x43\xde\xc5\x91\x5b\xc3\xa3\x9d\x8a\xeb\x61\x00\xbb\x46\xd7\xda\x26\x55\x43\xd3\xee\xeb\x99\xb8\xe3\x64\x07\x0f\xe5\xd8\x99\xe8\x1f\xf0\xa0\xe1\x0a\x12\xcd\x17\x76\xba\x5c\xf5\x68\x82\x94\x62\xbe\x28\x60\x3b\x10\xdb\xeb\x5c\xaa\x8c\xcf\x8a\x35\x59\xd2\xc2\x1a\x4b\x77\xdc\x2c\x09\x25\xb7\xbc\x28\xdc\x63\xfa\x4f\x14\x40\x8b\x96\xdc\x25\x3b\x91\x42\x8a\x05\x4c\x06\x75\x19\x2a\xf7\x15\xcb\x6c\x9f\x59\xc1\xa8\xa8\x2b\x1c\xa7\xd5\x8f\xd6\xb2\x4e\x90\xa4\xe2\xa1\x09\x8d\x3e\x25\xb8\x23\x63\xc1\x92\x72\x1f\xdc\xf3\xdd\x54\x63\xf2\xde\x2c\x99\xba\xe3\x9a\x61\x89\xbb\xde\x63\xc2\xb1\x74\x0b\xdc\xe1\x67\x0d\xa1\x8c\xcb\xa3\xb4\xdb\x02\x12\x7b\x7b\xf7\xf5\x23\x3c\xd7\x8b\x56\x21\xc5\x58\xb0\x05\xd2\x56\x38\x81\x86\xb0\x71\xec\x1f\x41\xca\x0d\x09\x82\x36\xb2\x22\xbc\x2c\x59\x6e\xed\xe3\x62\x4d\x56\x9c\xf6\x1e\x09\x50\x64\xb4\x3b\x8a\x1c\x0b\x49\x64\x65\xaf\xae\x5a\x70\xb3\x86\x98\xeb\xb2\x36\x24\x97\x77\x22\x22\xfb\xec\xc6\x01\x51\x28\x99\x31\x43\x5d\x94\xc2\x1e\x02\xa7\x92\x69\xc2\x04\x9d\x15\xf6\xec\x41\xa2\xca\xcd\xce\x0d\x40\xe6\x8c\x9a\x5a\x31\xb2\xa0\x26\x42\x4a\xec\xd0\xe6\x71\x3d\x3f\xbc\xed\xb8\x76\x11\xd5\x48\x56\xea\xc3\xe0\x79\xb4\x27\x5a\xd6\xe6\x40\xee\x91\x87\x5c\x47\x48\xf8\x11\x18\x89\xbc\x64\x9a\xc8\x3a\x51\x25\x8c\x17\xae\xbb\x94\x16\xde\xe0\x77\xda\xd9\xb4\xc9\x79\xaf\x7a\xc8\x29\xb6\xd8\x03\xa5\x0c\x5c\x56\x72\xc0\xe6\x39\xab\xe7\x73\xa6\xe0\xa6\x83\x01\x6f\xe5\xf6\x34\x15\xc6\xfc\x1d\xd6\xcf\x79\xeb\x20\x79\xcc\x8c\xa0\x92\x82\xa3\xd6\x78\xa0\x4b\x47\x39\x0a\x05\x84\x15\xd3\xc0\x8c\x2f\xc8\xab\xf7\xdf\xf7\xdb\xa2\x29\xea\x2c\xc4\x25\xf0\xc2\x7b\xbe\x17\xfd\x50\xa3\x69\xf7\xc3\x2e\x0e\x1c\xb7\x2d\xb2\x42\x6a\x97\x2c\x0e\xeb\x92\x2d\xa9\x10\xcc\x3b\xa3\xb8\x01\x4f\xf6\x8c\x31\x41\x64\xc5\x10\x36\xd9\x6b\x30\x94\x68\x2e\x16\x05\x23\xd4\x18\x9a\x2d\x27\x76\x74\xc2\xef\x85\x36\x2b\xdb\x7d\xa2\x8d\x62\xb4\xc4\x3d\xa1\x58\x49\x39\x76\x4f\x68\xa6\xa4\xd6\xa4\xac\x0b\xc3\xab\xe6\x61\xfd\xbc\x88\x0c\xf8\x31\x34\x26\xe9\xfa\xb5\x82\xdc\xb5\x36\xfd\x7b\xd4\x8e\xd0\xbd\xbe\x0c\xcb\x28\x81\xeb\x6c\x64\x7f\xcb\xca\xca\xac\x89\x9d\xda\xa2\x77\x02\xde\x9c\x2b\x6d\x48\x56\x70\x26\x8c\x7b\x33\x24\x60\x84\x31\x8c\xbc\x3a\x2d\xdc\x8c\x68\x37\x25\x22\x07\xe3\xbb\x32\x9a\x40\x9a\x73\x33\x08\xff\xa8\x9c\x6b\xe7\xeb\xd0\xa3\x7e\x6b\xe7\x6b\xe6\xe0\xc6\xf1\x33\x02\x5b\xc7\x2b\x38\x38\x22\xf7\x51\x30\x84\xa0\x02\xb8\x3d\xd6\x18\x12\x89\x93\x2b\x50\xe9\xdc\x9f\xeb\x51\x87\x81\xa1\xb5\x2d\x20\xdf\x6e\x4b\xea\xc0\x86\x12\x6c\x65\xcf\x01\xcb\x98\x55\x45\x69\x42\x21\xf3\xd9\x65\x8c\xa1\x6a\xc1\xcc\xb9\x7f\xff\xbe\x14\x01\x29\xa4\x4d\x5b\x81\xbb\x0b\x48\x6f\x17\x07\xd6\x61\x2a\x73\xa0\xac\x69\x69\x85\x76\x24\x66\xbb\xf7\xea\x69\x7b\x59\x9b\x62\xd7\x43\xbd\x45\x85\x69\xa4\xcd\x40\x75\x45\x33\xa6\xc9\xf1\xc5\xf4\x7c\x44\xa6\x17\x2f\x5d\xae\xa8\x9c\x6f\x52\x78\xf6\x9d\x16\x77\x09\xe2\xd9\x35\x0f\x0c\xae\x29\x47\x15\x0c\x29\xe0\xf2\x73\xe3\x9d\x36\x46\x59\xef\x99\xd9\xbe\x09\xc0\x42\xe3\x65\x55\x40\x61\x58\xa2\x6b\xb0\x8c\x5c\xe0\xc2\x6e\x6d\xb4\x47\xdc\xa1\x65\x2d\x8b\x9a\xab\x78\xd1\x33\x88\x83\xbd\x34\xaf\xeb\xd6\x1c\x62\xd9\x7e\xa2\x9c\x1e\x00\x0a\xb3\x71\xbf\x6a\x88\xa8\x20\xa1\xd5\x81\xf9\xfb\xdf\xee\x3d\xdd\x61\x81\x11\xf5\x8e\x69\x4d\x17\x6c\xda\x13\xa9\x95\xe2\xec\xb5\x1e\x6e\x80\x78\xb5\xf2\x7a\xc9\x90\x6f\xcf\xc8\xe0\x93\x30\x85\x3b\xf4\xda\x94\xf8\x22\xbd\x46\xe0\xcf\xd6\x9d\xe2\xc6\x30\xb8\x1e\xa0\xb8\x1b\x6c\xdd\x4d\x0e\xe1\x6e\xea\x78\xaf\xfe\xdc\xa4\x87\xfd\x59\xbd\x5f\xe4\x98\x84\x3d\x63\x64\xa6\x38\x9b\x93\x39\x87\xac\x70\xc8\x97\x1e\x61\x31\x14\x0a\x29\x0d\x54\x6b\xa6\xe0\xb5\x9d\x3f\xce\xbf\x7e\xbf\xf1\xfc\xd5\xbd\xbf\x51\xb5\xc8\x68\x50\xb5\x17\x28\x0e\xf9\x9c\x2c\x20\x47\xdb\x79\x9f\x7e\xf7\xfc\x8f\xbf\x27\xb3\xb5\x35\x94\xe0\x4c\x1a\x69\x68\xe1\x07\x40\x0a\x26\x16\x76\x15\x41\xd7\xe9\x77\x61\x77\x68\xf2\x9a\xc5\x29\x78\xc9\x0d\x4e\xd0\x8b\x6f\x6e\x67\x51\x77\x1e\x28\x26\xa7\x39\x5b\x9d\x06\x5b\x68\x5c\xc8\x45\xbf\xa7\x9e\x37\xac\x72\x75\x95\xf7\x05\x44\xa4\x3e\xd1\xb2\xe0\xd9\x7a\x6f\xf7\xa9\x73\x85\x91\xa5\xbc\x43\x2f\xea\xf6\x51\x0d\x18\xa7\x2a\x59\xd5\x05\x4c\x1c\xf9\xbe\xa1\x09\xad\x35\xdb\x64\x60\x8b\xf5\xce\x07\xd2\x0e\xd0\x0b\xae\xdb\x8d\xab\xde\x11\x14\xf8\x61\x4a\xc7\x7f\xe3\x82\xdd\x4d\x39\xa4\xde\x6e\xf0\xef\x69\x51\xcc\x68\x76\x7b\x23\xdf\xca\x85\x7e\x2f\x5e\x29\x25\x55\xf7\x9d\x0b\x6a\x95\xe9\x65\x2d\x6e\xa1\xb0\x76\xcb\x89\x2d\x17\x0e\x6e\x0d\xf4\xb5\xdd\x89\xed\x35\x18\xff\x96\xc8\x52\xec\x6d\x01\xef\xfc\x6e\x7b\x66\xf7\xbc\xf5\x70\x0b\xc2\xec\x98\xfb\x6b\x38\xe1\x7b\xe8\xf0\x68\x7f\xf3\xfc\x77\x7f\x40\xe1\x42\xa4\x22\x7f\x78\x0e\x84\x22\x7a\x84\x17\x00\xa8\xbe\xd6\xc6\x29\x69\x51\xf4\xd5\x69\x42\x11\xf0\x7d\xef\x7a\xf5\x07\x70\xe4\xcd\xde\x4e\xf7\x27\xfb\x6a\x6e\x6e\xfe\x06\x9a\x18\x37\x9a\x15\xf3\x11\x92\x4e\x35\xfe\xe4\x23\x30\x6b\x8e\xdc\x95\xd7\x9f\xb0\x6c\xff\xde\x92\x95\x2c\xea\x92\xbd\x64\x2b\x9e\xf5\x43\x0e\x74\x56\xa5\xf3\x34\x1f\x1f\x2b\xb8\x06\x5d\x72\x56\xc8\xec\x96\xe4\xee\x97\x41\x16\xd1\x66\xa1\xfd\xfe\xb3\xd0\x37\x9f\x2a\x22\x8f\xea\xc1\xf7\xef\x64\x50\x95\xb4\xaa\xac\x1e\x0d\xec\x81\x8a\xde\x75\x26\x03\x44\x13\x90\x34\x47\x1a\x3d\xd1\x28\x96\x58\x0c\xcb\xd8\xbd\x91\xbd\xa6\x7a\x3f\xa2\x77\xda\x55\x3c\x04\xa6\x1d\x7d\x7f\x00\x41\x67\x43\xb4\x0f\xf4\xa7\xa1\x82\x7f\x23\x9b\xd2\x96\xa9\xde\x94\x6d\x6c\x36\x06\x6a\x90\x76\xfb\xc0\x2d\xd3\x3f\x6e\x90\x00\x85\x10\x97\x3e\xd6\x99\x17\xd1\xa0\x3f\x4a\x6a\x9c\x7d\xe4\xbd\x17\x94\x54\x4c\x69\xae\xad\xea\xf4\x23\x1c\xa8\xf3\x82\xf2\x32\x88\x9b\xef\x6b\x12\xb6\x93\x8d\x4a\x5a\x8d\x6f\xd9\xba\xe7\x86\x8b\x3c\x2e\x0f\xe5\x3e\x95\xb4\xea\x79\x0f\x40\xdd\xf0\xf8\x6b\xa0\xe7\xe5\x3c\x95\xb9\x1b\x07\x5c\x0f\x58\xa5\xfc\x63\x66\x2c\xb9\xae\x67\x70\xa6\xe0\xeb\x4f\xcb\x41\x98\x54\x79\xda\xf7\x5d\xf5\x63\xbb\xe2\xdd\xab\xca\x7e\xd2\xdc\x55\xf8\xad\xaf\xe9\x86\x82\xf7\xfb\x52\x2f\xa8\x19\x17\x39\x2c\x59\x64\x05\x81\x94\x10\xc5\xcd\x31\x6d\xea\x7d\x9e\x15\x98\x16\xf0\x55\x77\xae\x83\xca\x4d\xb4\xaa\x8a\x35\x00\x95\x22\x46\xd1\x6c\x5b\xc4\xfe\xe0\xb6\xdd\x16\x1e\x13\x72\xe6\x04\x03\x04\xe3\xbd\xbc\x60\xf7\x2c\xeb\x17\xa4\xc1\x26\x64\xce\x56\x23\xc7\xfc\xa7\x6b\x9e\x83\x83\x49\x33\x78\x3c\x56\xfa\xea\xbe\xb6\xfd\x26\x70\x36\x0b\xe9\x98\xa2\x49\x4f\x33\x18\x9b\x67\x02\xb6\x03\x89\x22\x26\xb8\xe9\x78\x7a\xc1\x87\x8e\x2e\x63\x6f\x42\x23\xbb\xaf\x93\xd3\xd1\x3d\x71\xf4\x0a\x16\xd5\xf2\xc3\xc0\x1d\xbb\x88\x28\x8b\xfe\xbc\xb9\xdd\xd2\xe0\x76\x52\x10\x32\x44\xd3\x31\x24\x81\x8a\x3e\xa4\x16\xf4\xa7\x08\x69\x44\x66\x22\x71\x03\xfa\xb0\xbb\x52\xba\x0a\x70\xc7\x85\xee\x0e\x71\xeb\x6c\x73\xae\xed\xbd\x2a\xc1\x38\x17\x4a\x56\x74\x01\xae\xab\x43\x90\xc0\x9b\x63\x0a\xb9\xf2\x97\xf2\x2e\x54\x8d\x2a\xf7\x2d\xab\x19\xf9\x82\x2b\x4b\x19\x45\x48\x85\x98\x7e\xbf\x80\xce\xfd\x86\x25\xa7\xee\xe8\x9a\x50\x25\x6b\x11\x45\x21\x03\x90\x85\x06\xd2\xf2\x6e\xe3\x65\x2f\xa5\x60\x1e\x3e\x97\x4e\xf0\x01\x92\x90\x0b\xf2\x62\xf2\xe2\x79\xf4\xd8\xaf\x58\x56\x2b\xcd\x57\xec\x8a\xd1\xfc\xbd\x28\xd6\x01\xdc\xe1\x62\x3e\x95\x5a\xf3\x59\x01\x49\xef\x46\x92\x57\x56\xe4\xb1\x7c\xfb\x45\x1b\x48\x27\xbc\xb1\x54\x21\xab\x7a\xc4\x08\x8f\xf1\xc0\x85\xa9\x18\xb6\x83\x08\x3c\xe6\x61\x99\x9a\xb0\xae\x1b\xa6\xe6\x65\x63\x6a\xe2\x9d\xb2\xd7\x77\x55\x6e\x53\x1c\x82\x24\x79\xe7\x82\x87\x76\x4c\x63\x09\x3b\x75\xee\x10\x39\xf0\xd1\x9d\xe2\xc6\x1d\xee\x3b\xae\x19\x39\x06\xb7\xe5\xc6\x66\x8c\x2a\x24\x11\x3a\xb9\x7b\xfb\x44\xb1\xa5\x28\x04\xa1\x36\x8f\xee\x21\xac\xd2\xb6\x3c\x69\x73\xe3\xee\x9c\x87\xbb\x5d\x41\x27\xfd\xdb\x6b\x74\x49\x45\x5e\x44\xc9\x8c\x66\x56\x8a\x75\x14\x8f\xe0\xc5\x9c\x84\x22\xd1\x21\x8b\x02\xb0\xc1\x92\x5a\x1d\x94\x94\x8c\x42\xea\x84\xbd\x5d\xbc\x14\xec\xd4\x94\x48\x37\x06\xdc\xec\x78\x8d\x85\x17\x82\x13\xd7\x2f\xb9\x76\xe2\xd9\xca\x11\xe7\xa2\x40\x3d\xb9\xa4\x79\x0c\x2d\x4e\x30\xa7\xed\xe2\x4d\xda\x74\x86\xcd\x91\xb4\x17\xc7\xc6\x58\x9e\x62\x1c\x50\xd1\x05\x0b\xcf\xb4\xe6\xc0\xa6\xdf\xbe\x85\xaf\x46\xe1\xcc\xb0\x6d\xbe\x6e\x73\x2d\x6e\xbd\xeb\xee\x11\x37\x03\x8e\x18\xc3\xc7\x5f\x75\x14\xc8\x42\x9f\xbd\x81\x60\x37\x57\xab\xcd\x71\x11\xc4\x55\x1c\xf1\x51\xcb\xc6\x1f\xbc\x60\x82\x29\xea\x02\x8f\x3e\x79\xc3\x41\x77\xa8\x96\x22\xf6\x40\x7c\x64\xc3\x59\x79\xff\x71\x35\x05\xff\x2c\x62\x20\xa0\xe7\x1c\x4b\xb5\x71\xda\x5d\x48\x75\x97\xc6\x92\xf2\xad\x37\x68\x4d\x71\xf3\x07\x94\xff\x76\x51\xfe\x55\xf3\x15\x2d\x18\xd6\xda\xf1\xa2\x61\xaf\xca\x84\xae\x67\x09\x0d\xb5\xa8\x5b\x6a\xd3\xca\x73\xe6\x1c\x98\x1d\xbb\x51\x51\xe9\x0d\xbe\xae\x3e\xf1\xec\x19\x39\xc6\x3e\x8e\xb0\xc6\xc6\x7e\x95\x5c\xb7\x56\xaf\xee\xab\x88\x0a\xf3\xe9\xd6\xeb\xd5\x7d\x45\x01\xc8\x55\x1d\xc4\xc2\xfd\x99\x2d\xe9\x8a\x41\x49\x13\x5e\x50\x55\x40\xba\xd8\x35\x4e\x19\x99\xd5\x86\x30\xb1\xe2\x4a\x0a\x00\x4f\x02\x71\x9f\x95\x4c\x8a\xcd\x99\x62\x22\x63\x9a\xfc\xfa\xf8\xc7\xb3\x2b\x48\x27\x3e\x01\xd3\x97\xf9\xf7\xab\xb5\xf7\x28\x85\xef\x10\x3c\xee\x10\xf7\x1b\xf1\xef\x6e\xb7\x0b\xe8\x27\x7e\x2e\xec\xbb\x95\xb5\xa9\x69\x01\x95\x5f\xb2\xa2\xb6\x77\xe1\xde\x76\x76\xfa\x20\x59\x8c\xc7\x3e\x65\x8c\xcc\xd5\xfd\x79\xc9\x7b\x1d\xd7\x14\x07\xf5\x3c\xd8\xaf\x5b\x55\x88\xe2\x80\xd2\x5d\x02\xef\x2d\x45\xe7\x48\x37\xa4\xde\x61\x86\xac\xbb\x8b\xfb\xe1\xb7\xf8\x62\x69\x1c\x2d\xcb\x06\xde\x3a\x48\x5f\x28\x7b\x63\x43\xf7\x0b\x74\x4a\x77\x0c\x7a\x04\x9c\xd2\xec\x7a\xb6\xe2\x40\xb1\x72\xc5\x74\x25\xc5\xe3\xc9\x97\xe3\x76\xfc\x76\xef\xad\x70\x27\xaa\xfd\xd0\x67\x9c\x64\x68\x26\xb8\xbf\xd2\x64\x46\x35\xe6\x0d\xbd\x6a\x1e\x04\x9c\xce\x8f\x8e\x59\x04\x03\x70\x17\x9c\x9c\x01\x6f\x27\x48\xe1\x4c\x96\x65\x2d\xbc\x02\xae\x64\xbd\xc0\xeb\xd1\xf7\x6a\xff\x5c\xd6\x2a\x63\xe4\x6c\x7a\x01\x95\x3a\x59\x51\xc1\xed\xfa\xc8\x61\x98\x65\xcb\x6c\xd0\x01\xa5\x22\x64\x42\x62\xc8\x29\x9c\x19\x64\x17\x28\x30\xd9\x5e\xdb\xb7\x87\xa2\xb3\xd6\x9a\xa3\x59\x26\x55\x8e\x04\x76\x8f\x1f\x07\x0f\x0b\x3e\x56\x8a\x4b\xc5\xcd\xe3\x1d\x01\xdb\xf3\x8a\xbc\x0a\x3c\x83\x9b\x4c\x31\x48\x54\x90\x02\x34\x6d\x3f\x9b\x95\x92\x0b\xc5\xb4\xb6\x16\x19\x1c\x6b\x77\x95\x3f\xb2\xef\x09\x22\x65\x27\xed\x6c\xfd\xf4\x8f\xc9\x92\x51\x65\x66\x8c\x9a\x1b\xee\x2b\x17\x7b\x88\x4e\xb3\x9a\x18\xba\x9e\xec\x36\x17\x9c\x9c\x79\xe4\x58\x02\x4d\xab\x19\x01\xc9\x19\xcd\xa1\x22\x5d\x50\x36\xa1\x33\x10\xbb\x9b\x8e\xb3\x5a\x29\x26\x4c\xb1\x26\xdf\x3c\x27\x25\x17\xb5\x61\xfa\x04\x25\xb8\x9f\xb1\x47\x0e\x86\x6b\x52\x51\x0d\x27\x67\x85\x5c\xdf\x00\xcd\x61\xf7\xa6\xdd\x59\x9e\x2c\xa2\x90\x77\x90\xfb\xe5\xd6\xdf\xe5\xa9\x28\xe4\x5c\x90\x2e\x04\xd0\xfc\xd5\x63\xc3\xab\x0d\x98\xd8\xdf\x3b\xbc\xac\xac\xd1\xcb\x57\x6c\xec\x5f\x6e\x72\xfb\x07\xc8\x79\x86\x9f\xa5\xda\x1e\xa2\x1f\x9c\x5d\xc7\x17\xcf\x9f\xc3\xdd\xd5\x47\x0e\x35\xc6\x7d\xab\x3b\xb6\xc3\xd9\x58\x14\x48\xb4\xfe\x6f\x2b\xb3\xff\xcf\x69\xb3\x6f\x75\x3d\x53\x4e\x10\x3c\xde\x4e\xb5\xe7\xba\xa4\xf7\x90\x43\xee\xb2\x14\xdc\xbe\x0c\x4e\x3b\x84\xdb\xb9\x26\x8f\x8f\x57\x5c\x75\x45\xc6\x46\xcc\xb7\xe1\x0f\x41\xc6\x93\x8a\x2a\xd3\x14\x41\x7e\xad\x64\x5d\x91\xe3\x09\xe4\x46\xe9\x6c\xc9\xf2\xba\xe0\x62\x81\x1f\xa3\xe7\xe0\xd1\x2a\xef\x4d\xa7\xe6\x3d\x01\x5f\x8e\xf3\x26\x48\x41\x32\x6b\x80\x73\x89\xf9\x97\x5c\x13\x5e\x96\xb5\x01\xcd\x1f\x32\x67\xef\xa8\xca\x1f\x29\xe0\xfb\x06\x7e\x7b\x05\x7b\x63\x95\xc0\x57\x9b\x97\xa2\xaf\x4d\xb0\x96\x35\xa4\xac\x82\x58\x5e\x77\xf7\x06\xde\x8e\x8e\xad\x94\xb6\x17\xe2\xe3\xf5\xa1\x03\xb9\x0a\x37\x2e\xc3\xe6\x90\xc1\xb6\xc4\x7c\x36\x72\xcc\x26\x8b\xc9\xce\x7b\xf2\xd1\x3b\x32\x02\xb4\xd4\x1f\xae\xd4\x13\x66\x34\x6e\x44\xde\x23\xff\x34\x06\x9b\xd4\x37\x5a\x97\xc2\x24\x02\xd4\x68\xf7\x10\x70\xa8\xae\xbf\xe3\x14\xc0\xbf\x02\xd6\xde\xf6\x20\xf4\x33\x9d\x4c\x4b\x60\x46\x56\xb4\xe0\x39\xc9\x65\x49\xb9\x18\x57\x8a\xcd\xf9\x3d\xcb\xc9\x2d\x5b\x93\x63\x9f\xfe\xf6\x8c\x66\x25\xb3\xd7\xd5\x5c\xca\x67\x3d\x5d\x01\x2f\xa1\x03\x57\xa0\xe0\xbf\xdc\xfd\x07\xa7\xef\xbf\x26\x1d\x1e\x10\x10\xe5\x8a\xc1\xe9\xec\xe9\x87\x09\x24\x71\x1b\x74\xe1\xff\xaa\x91\xac\x89\xd1\x6c\xd9\xce\x6e\x74\x0f\x90\xa7\x8e\x87\xe5\xb3\x27\xa4\xf8\x23\xb3\xaf\x3d\xdc\x68\x29\x4d\xee\x6f\x3b\xaf\xe4\x0d\x5f\x2c\x5b\x35\x8b\xb3\x0d\xbd\x1e\xd9\x0b\x9c\x76\xe8\x25\xa1\x2b\x5f\x33\xb6\x76\xb4\x92\xfd\x33\x8e\x1a\x8d\xce\x6d\x26\x2f\xfc\x41\xbb\x6a\x0a\x61\xf8\xe1\x8f\x36\x0e\xdc\xdd\x52\x6a\xe6\x8e\x04\x9e\xd3\x4c\xda\x6d\x8b\x43\x46\x95\xb7\xd7\xb0\x00\x2e\x36\x63\xc6\x5a\x0a\x64\x89\xf3\xe3\xba\x91\xca\xaa\x9a\x8d\x8f\xa2\xe2\xd9\x2d\x03\xcb\x88\x6b\x88\x22\xea\x16\x63\x6f\x64\xe5\xff\xaa\xa0\x33\x56\xe0\xc4\x66\xb2\xac\xa8\xea\x19\x1d\x0d\x07\x56\xac\xf1\x45\x47\x64\x2e\x1d\xe4\xd0\xad\x12\xea\xcd\x9d\xae\xd1\x76\xb3\xd2\x02\xf2\x92\x70\x08\xa0\xfe\x46\xa4\x9c\xb7\x2b\x01\xef\xec\x60\x99\x25\x15\x74\x61\x85\x60\xbb\x39\x5a\x52\xc9\xdc\xdf\xeb\x2e\x71\xde\x13\x97\xf5\xcc\x5f\x6c\x8f\x37\x70\x23\x3f\x7f\xfe\x1c\x54\x10\x3b\x1d\x98\x99\x68\x37\x7c\xa5\x18\x2b\x2b\xbc\xa2\x15\x99\xbb\x14\x43\xa2\xd8\x82\x6b\xe3\xa8\xf5\x66\x6b\x34\x27\x7a\x62\x86\xfd\xc6\x8d\x98\xcc\x72\x93\xc3\xe9\x79\x83\x75\xf2\xaa\x79\x4b\xef\x64\xdf\xb4\x27\x6c\xc8\xf6\xc5\x85\x61\x6a\x45\x0b\xf2\x7c\xfc\xc7\x3f\xfe\xd1\x51\x78\x80\x20\x87\x09\xdb\x3c\x88\xcd\x35\xa0\xeb\xf9\x9c\xdf\x1f\x86\x28\xee\x4f\x07\x15\x43\x05\xd5\x71\x7c\x95\xb4\xea\x5f\x0d\xe6\x2b\xf0\xdf\x2d\xa5\x36\x67\x05\xa7\xfa\xb1\x3a\x5d\xdc\x9d\xf6\xa6\xed\xd6\xc1\x7b\xa5\x27\xf2\xf4\x90\x70\x3b\x32\xc4\x40\x5f\x4c\x9d\x44\xf6\x12\x9b\x8b\xff\x87\x17\x5b\x83\xdd\x46\xd6\x46\xf8\x93\x47\x8e\x04\x33\x83\xe7\x24\x00\x8a\x3c\xe6\xcf\xbf\x28\xcb\xb0\x99\x75\xb2\x94\x45\xee\x45\x3d\x66\x1d\xce\x98\xb9\x63\x4c\x90\x8b\x29\xe2\xce\xa5\x36\xa8\x40\xee\x9e\x79\x17\xdc\x16\x46\xad\xfb\xde\xd2\xc1\x9a\xc1\x2a\x7c\x21\x26\x17\x7f\x6c\x50\x28\xc6\x6a\x6a\x96\x21\x5a\xed\x7c\xd3\x2c\xa8\x67\xbd\xa7\x33\xb9\x62\xb0\xde\x79\xae\x7a\xb2\xa9\xee\x2d\x4d\x29\x79\x00\x32\xaa\x24\x18\xaf\xa2\xd7\xa7\x5d\x07\xaf\x69\xd9\xb5\x47\xf1\x04\xc7\xec\xb3\x5b\x3c\xfd\x8b\xdf\xa6\xbc\x17\x1f\x79\xdc\xd2\xdd\x8a\x17\xd3\xf3\xcf\x79\x23\xfe\xe0\xd0\x61\xb6\xeb\x23\x4d\x78\x95\xb5\xfc\x4b\x8f\x5d\xfa\x96\x73\x28\x28\x3b\xd2\x03\x28\xdb\x17\x1c\x6b\xdf\xe1\x92\x99\x3b\xa9\x6e\x3f\xb7\x52\x41\x04\xf6\x6b\xaf\x34\x67\xe1\x3a\x8d\x18\x0c\x0d\x08\x81\x6d\x4c\xb5\xfb\x8b\xfe\xd3\x0d\xf8\x7d\x74\xfa\xbf\x69\xdf\x1c\x3c\x4d\xde\x52\x72\x2e\xd7\x4a\x2a\xa3\x89\x46\x9d\xc5\xf9\xc2\x91\xf4\x83\xde\xd1\xc7\x13\xae\x40\xc7\xff\x0c\x66\xfb\x9f\x2d\x3a\xb5\x0d\xbe\xc1\x17\xa6\x52\x99\x7f\xa2\xee\xae\xed\x85\x0d\x71\x33\x88\x1b\x71\x0c\x85\x06\xe8\xf7\x7f\x36\xa1\x75\xf8\xab\xc7\x06\x65\xac\xfa\x10\x40\xf1\x3e\xb1\x7f\x6b\x57\x3b\x79\x83\x90\xc5\x9d\x63\x79\xec\x0c\xed\x6f\xff\x4f\x2f\x5e\xee\x51\x7c\x54\x3c\xff\xb2\xc5\xc7\x0f\xfa\x33\x43\x09\x36\x26\xb0\xd6\x4c\x25\x9e\xc1\x3e\x14\x30\xc8\xdc\xe8\xff\x1a\x0a\x7c\x48\x43\x2a\x6b\xea\x0b\x33\xea\xc2\x89\xbb\xf4\x89\xa0\x3d\x74\xdf\x62\x64\x7f\x9e\xd7\x8f\x0d\x6e\x5a\xe1\xd9\x89\xf0\x61\x39\x05\xda\x24\x55\x42\xf8\x8d\xae\x28\x2f\x20\xc8\x16\x94\xbb\xdb\x1a\x80\x73\x73\x3f\x72\x04\x85\xa4\xe0\x92\xa7\xe4\xd6\x5e\xed\x05\x29\xa5\x15\x9c\xe8\xd9\x38\x3f\x9b\xfe\x7c\xfd\xb7\xeb\x9f\xdf\xbd\x7f\xf9\xc3\xdb\x47\x57\x05\x41\xaa\x5b\xd6\x6e\xf1\x11\xa1\x44\xb0\x3b\x18\x39\xe6\x29\x67\x0e\xcf\xdb\x54\x8b\xb2\x77\xc8\xb5\x23\x3d\xc4\xdc\x16\x4c\x2d\x9b\xd7\x50\x85\xf1\x91\x23\x28\xb9\xe1\x0b\xc4\x28\xb4\x90\xa6\x99\x62\xf4\x56\xd6\x86\xac\xea\x42\x30\x45\x67\xbc\x40\xbf\x2e\x5b\x31\x81\xce\x31\xfb\x07\x76\x90\x80\x22\xb4\x0b\x0f\xa0\x8b\x47\x76\x1e\x30\xd1\x51\x84\x1f\xc2\xa4\xda\x9e\x69\xe6\xe0\x82\xae\xea\x15\xfc\xb2\x52\x7c\xc5\x0b\xb6\x60\x4d\x39\x99\xc7\x57\x35\x8c\x11\x0b\x8f\x8f\x22\xc5\x49\x85\xeb\x26\x67\xc6\xbf\x6b\xc8\x9f\x3a\x7d\x34\xcd\xc8\x6e\x24\x5d\x6b\x09\xc3\xd3\xfd\x69\x76\xdb\x92\x12\xa4\xb1\x18\x7b\x98\x07\xf8\x10\xfb\xcc\xf9\xa3\x0d\x01\x3f\xa4\xf7\xae\x28\xc5\xe7\xd6\xe6\xc2\xbe\xc3\xda\x5e\x82\xb0\xfb\xaa\xe0\x19\x37\x4d\xbd\x8c\xf0\x78\x86\x93\x49\x35\xa9\x98\x02\x3e\xe1\xb0\x7e\x46\x04\xe2\x40\x76\x93\xa9\x76\xf5\x29\xf2\x86\x81\x95\x50\xcc\xdc\xe7\x46\x93\x97\x97\xd7\x44\xb1\x4c\x3e\x1a\x7f\xe0\xe4\xd4\xce\x94\x0b\x0a\xe5\x3b\x90\xd8\xce\xd5\xfa\x79\xb4\x91\x75\x61\x88\xa1\xb7\x4c\xdb\x9b\x25\x63\x39\xc0\xe7\x10\xdb\xe3\xdd\xfb\xd8\x1d\x77\xea\xa6\x7d\xcb\x7f\xc2\x6b\xfe\x53\xd7\x33\x8c\x52\x3c\x5a\x37\x1b\x83\x1f\x7b\xfa\xc1\xbd\xdf\x16\x69\x79\xfc\xd3\xff\xa9\x99\xf1\x9b\xe8\x4c\x7f\xff\xff\x7f\x79\xf9\xcf\xb6\xe2\x09\x2f\xec\x65\x1a\x0a\xfe\x1e\x1d\x74\x34\xef\x6e\x4a\x8b\x7f\x66\xff\x6d\xb6\x19\x36\xb6\x9b\xa7\x99\x6c\xbb\xad\xbd\x38\xe0\x82\x5c\x7d\x7f\x4e\x5e\xbc\xf8\xe6\xb7\x0e\x62\x01\x32\x9d\x50\x43\x4a\x7b\x07\xff\xfe\x77\x24\x5b\x52\x45\x33\xf3\x68\x4a\x9b\x9e\x62\x03\x00\xb9\xd3\xba\x28\xae\x59\xa6\xd8\x63\xc9\x82\xe2\xc4\xc6\xc5\x46\xdf\x0f\xb9\x97\x83\x24\x00\x23\x89\xf6\x5f\x16\x6d\xc8\x32\xa0\x3f\x6e\xcb\xfa\x56\x75\x51\x60\x96\xe1\xda\xdf\x02\xf0\xb6\x3a\xa0\xa9\xe3\xda\x53\x69\xf7\x51\xf7\x3a\x57\x83\x66\xcd\xd0\x9a\x70\x25\x42\xef\x5c\x52\xd7\x8a\xe7\x35\x2d\x60\x58\x80\x84\x76\x4c\xd1\xd4\xd1\x5e\xa0\x4c\x2c\xdd\x1b\x3c\x76\x38\x8f\xac\x23\xd2\x2a\x13\xa7\x38\x27\xbf\x72\x76\x2f\x17\x8b\x31\x7c\x62\x87\xe9\xde\x67\x2c\xc5\x98\x8e\x1f\x4b\xd4\xf5\x45\xb9\xdb\xdf\xca\x8c\x16\xef\xc1\x3f\x7d\xd5\xa0\x92\xdd\x24\x69\xc2\x04\x80\x9f\xec\xf4\xaa\x92\xfa\x32\x95\x05\x33\xe0\x38\x70\x24\x93\x7d\xfc\xea\xcd\xce\xce\x9d\x73\xdc\x53\xc9\x6d\xef\xec\xcf\xe8\x72\xff\x52\xb1\x43\x97\x81\xbe\xe7\x66\xb6\x67\xee\x4f\x37\x7a\x8a\x84\x3e\x3e\x21\x15\xc3\x11\x23\xc8\x59\xca\x6b\xac\x45\x4b\xb3\x5b\x80\x2a\x62\xac\xdf\x70\xb0\x01\xd6\x7d\xb3\x55\x3d\xd7\x19\x72\x6a\x82\xba\x30\x21\x17\x42\x1b\x0a\x32\xd0\x53\xea\xdb\x15\x6e\x69\x70\x41\xa9\xc0\x90\xb5\x87\x78\xf4\xec\x1c\x6e\xa2\x8c\x29\xbb\xf7\x8b\x35\xb9\x53\x52\xf4\xa4\xa3\x7e\xa4\x50\xb2\x6a\xcc\x8a\xb3\xbb\x53\xe7\x15\x1c\xdb\x97\x1b\xe3\x16\xd6\xa7\x70\x12\x4e\x7f\x05\xff\xf7\xe5\xf8\xd7\x87\x18\x76\xa7\x71\xc1\xdb\x3a\x1b\x9f\x55\xd9\x78\xeb\x94\x09\x57\x0b\x9f\xff\x1b\xe5\x78\x60\x55\xcf\x58\x21\xc5\x22\xc0\x13\xf6\xb0\x3d\x2e\x04\x37\x1d\x4b\x1d\x12\x15\x59\x56\x63\x08\x1c\xf1\x4c\x88\xb0\xea\x10\xed\xd8\xde\x6d\xcf\x61\x65\x17\x2a\x1e\x1b\xa8\xe3\x9d\xde\x81\x1b\x5c\x8f\x42\xb4\x77\x50\x31\xdb\x48\x24\x2c\xc3\x0a\xd9\x1e\x7f\xed\xb8\x24\xda\x84\x92\xc7\xde\x3a\x12\xac\x27\x57\xa2\x06\xa9\xdf\x11\x0c\x05\x26\x83\x55\x72\xa8\xd8\x1c\x27\xb8\xca\x54\xd9\x29\xe4\xe1\x54\xea\x47\x76\xef\xf0\x8c\xb4\x94\x56\xef\x2b\x62\x08\x22\x37\x57\xb2\xa4\x6b\xb0\x11\x61\xd2\xde\xfa\x9a\x6b\x84\x62\x7a\xd2\x08\x48\x27\x38\x54\x03\xc7\xe2\x6b\x23\xf2\xd6\x97\x07\xf7\x1f\x48\x45\xae\xb1\x4a\xb8\xfb\xe8\xf1\x96\x2d\xa0\xc0\x00\x74\x7d\x85\x17\x51\xe9\x08\xe9\x77\x4c\xab\xdd\x7b\xd6\x54\x14\x88\xbd\xb0\x4b\x0a\xe4\x90\xb5\x82\x9d\xd6\xc0\xfb\x1f\x39\x88\xd9\x9a\xcc\xb9\xc3\xdd\x2e\x19\xe2\xf5\xb4\xf1\x11\x9c\x53\xa0\x50\xef\x20\x4a\x11\x23\x6e\xa5\x45\x50\x7c\xa9\x4d\xbc\x28\xe9\xfd\xe3\x01\x69\x80\x74\x70\x60\x36\x34\x7d\x75\x5d\xfa\xbb\x7f\x73\x33\xe9\x09\x79\x6b\x47\x85\xc7\x91\x56\x55\xc1\xbd\x56\xde\x59\xe3\x47\x9f\x36\x28\xc7\x05\xe9\xcc\x64\x4e\xf5\xb2\x07\x06\x7f\x73\x97\x65\x98\xe4\xd8\x26\x02\x59\xab\x32\xcf\xad\x7e\xa8\x88\x62\xa5\xec\x81\xfe\x8d\x4e\x9c\x8c\xab\x51\x68\x27\x79\x1c\xd8\x1b\x5f\x88\x11\x71\xd6\x54\x5a\xb3\xfb\x25\xdb\xb8\x2d\x70\x03\x5a\xed\xff\x8e\x0a\xe3\xdd\xba\x0d\xad\x6a\x8f\x9b\xe3\xcb\xc9\x4a\x88\x31\x0f\xa8\x5a\xec\x8d\x8f\xf8\x4c\x2d\x6a\x14\x97\xee\x7e\x07\xac\x46\x25\x79\x7f\x2b\x61\x2b\xb5\xf9\x48\x93\xf3\x77\x2f\xc3\xf2\xaf\xc6\xd1\x62\x62\x30\x08\x8b\x03\xf7\xeb\xee\xc7\xb4\xa4\x08\xa0\x62\x34\x4c\x0b\xbd\x46\x94\x35\x92\xc5\x8a\xf9\x62\xe5\x9d\xe4\x6d\x62\xaf\x73\xd2\x70\x51\xd5\xc6\x29\xdf\x6d\xc2\xb9\xc8\x96\x54\x2c\xac\xb6\xf3\x52\xd6\xf6\xc5\x7e\xfd\x6b\x87\x4c\xcf\xeb\xac\x27\x64\x1b\x9d\xf0\x78\x72\x7f\xed\xa9\x65\x5c\x3e\x09\x5c\x4a\x3a\xa3\x95\x9f\x9a\x70\xf6\xf4\x5a\x18\x7a\xff\x1d\xe1\x13\x36\x21\xcf\x7e\x1d\xfc\xea\x59\x9f\x34\x43\x6c\x95\x92\xf6\x55\xf0\x82\xc2\xb7\x2f\xb8\x01\xea\xea\x67\x61\x0f\x13\xf2\xca\x8e\x0b\x98\xda\x9a\xb5\x0d\xaa\xec\xcd\xda\x95\x1d\x11\xc5\x16\x54\xe5\x05\xeb\x59\xd5\x48\xce\x1b\x52\x31\x74\x19\xbb\x5d\xc5\xee\xb9\x36\xda\xc5\x2d\x27\x69\xd2\xed\x3f\xf5\xee\x30\x54\xdf\xda\x9b\xc2\x0a\xbf\x71\x4e\x0d\x1d\x07\x52\xf7\x14\xbd\xa7\xe3\x4c\x96\x25\x15\xf9\x98\xba\x73\xdc\x5e\x2a\xa7\xbf\x72\xc5\xd8\xc7\xb4\xf9\x16\x17\x63\x3a\xd6\x4b\xd6\x6b\xe5\x06\xac\x1c\x34\x37\x97\xfb\x12\xd8\xaf\x1a\xf9\x8c\x4b\x31\x21\x97\xd2\xb4\xe6\x54\x73\xdb\xc2\x2a\xa7\x14\xe1\xaf\x2e\x6f\xae\xfe\x36\x7d\x7f\x71\x79\x33\x48\xf2\x41\x92\x43\x1b\x24\xf9\x20\xc9\x7b\x74\x7c\x28\x92\x9c\x89\xd5\xbe\xa4\xb8\x77\xbc\xed\xe2\xf7\x72\x01\x3d\xb3\x45\x14\xb4\x77\x8a\xa0\x7d\x97\xf3\x78\x25\x56\x3f\x52\x6b\xf2\x3b\x00\x99\xcb\xe1\xd8\x41\x91\xe6\xbe\x80\xee\x88\xf3\x2f\xbe\x9e\xc7\x1e\xab\x71\x24\x64\xa9\x8e\x62\xee\x0b\xe3\x58\xbb\x96\x3c\x86\x75\xee\x1d\x5d\xa3\x17\xd8\x15\xf3\x10\x6b\x52\x29\x2e\x90\x73\xe3\xec\xfa\xfc\xe2\x22\x40\x20\x10\x76\x9f\xb1\xca\x90\xa3\xff\xdf\xd1\x5e\x99\x15\xc1\xd1\x77\x08\x2b\xf3\x18\xc5\x2d\xa2\x9b\x56\xe5\xab\x14\x5b\x71\x59\xeb\x62\xdd\x60\x48\x76\xcb\xd1\xed\xd2\x0b\x91\x14\xb5\x6b\xa2\x99\x82\xaa\x65\x3b\x3b\xdc\x50\x3a\x77\x29\x90\x11\xdd\xef\x59\xf5\x74\x83\x48\xa1\x80\x46\xf4\xbf\x43\x75\xfd\x74\x35\x34\xa2\xdf\x5e\x0a\xec\x43\xca\x68\xc4\x38\xba\x6a\x6c\xc4\x83\xba\x1c\x9e\xfb\x97\x64\xdf\x2b\x59\x26\x92\x66\xd7\x18\x5c\xf1\x80\xca\x5d\x47\xf5\xc8\xa3\xf2\x42\xf5\xc8\x99\xb4\x4d\x8a\xbb\xfd\x1c\x81\x06\x91\xb3\x13\xa1\x3b\x90\x24\x97\x38\x41\xa8\xf4\x9c\x2f\xde\xd1\xea\x2f\x6c\x7d\xc5\xe6\x31\x8f\xda\x9c\x6f\xe0\xe9\xd0\x00\x6f\x5f\x23\x05\xd1\xb9\xef\x2c\x66\x8b\x26\x9a\x3e\x92\x40\x05\xf3\x6d\x6c\x5f\x31\xea\x19\x69\x16\xd3\xb6\x5b\x16\x51\xa8\xc1\xb7\x74\x6a\x80\x6f\x9e\xe4\x03\x8c\x18\xbb\x31\xda\x22\x3c\xcd\xae\x38\xd2\xe4\x25\x35\xae\x1a\x56\xdc\x16\xc1\xf6\x17\xb6\x6e\xae\xfb\x3f\x73\x41\xd5\xba\x7d\x7e\x43\xf8\xd6\x06\x10\x83\x0a\x41\x9d\xca\x3e\x4c\xac\xac\x88\x88\x2a\xf9\x85\x2d\x49\x95\x2b\x6c\x71\x1a\xb8\x6f\xe9\x17\x3a\x1d\xb2\xac\xdb\xf6\x8b\x33\xeb\xb6\xbd\xa2\xce\x36\x87\x92\x0e\x83\xd6\x6d\x87\x84\x48\xeb\xb6\x84\xa7\x28\x06\xad\xb6\xd9\x3c\x18\x3b\xf1\xa9\xbc\x76\x59\xb6\xa1\xca\xd8\x88\x4c\x82\x85\xda\x41\xb4\x7a\x68\xbd\xb3\x7e\x12\x4d\x73\x5c\x11\x21\x6c\xe9\x70\x7d\xdd\x06\xe2\x20\xad\xd6\x12\x2d\x03\x5b\xb5\xa7\x43\xa3\x5b\xc9\xfc\x3b\xcf\x2d\xaa\x49\xc9\x0c\xcd\xa9\xa1\x13\x7b\x20\x46\xdd\x1f\x5d\x4e\xe1\x3f\x9b\x0f\x91\x27\xeb\xa7\xa3\xff\xfe\xcb\xab\xbf\xfd\x9f\xa3\x7f\xfc\x33\xfc\x1d\xa8\xa9\x08\x8b\x0f\xbe\x10\xf9\x0a\xc0\x69\x2a\x64\xce\x2e\x61\x74\x48\x71\x8a\x16\xee\x19\x22\xa3\xdc\x2f\x90\x49\x18\x69\x05\x9a\x1f\x2b\x99\x6f\xfe\x14\x79\x73\x1e\xa0\xbe\x07\x6b\x1b\x51\x4a\x17\x5b\x3a\xad\x8f\x56\xfc\x47\xa6\x74\x54\x55\x46\xdf\xba\xb5\x92\xf1\xa9\x7e\x1b\xeb\x6c\xc9\x4a\x0a\xff\xfc\xde\x4f\x81\xbd\x8f\xef\x14\x37\x86\x61\x9a\x2e\x53\xa5\xbd\x03\x47\x9d\x32\x35\xcf\x56\x2f\xa2\x2c\x6d\x6c\x09\x25\x7f\xb3\x82\x89\x27\x0c\x66\xc4\xcd\x56\x43\x00\xe7\x54\x5e\x9f\x87\xd3\x90\x08\x9c\x4d\x2f\xc8\x0a\x67\xf8\x80\x26\xe7\xe9\xc4\x75\xc1\x92\x9b\x99\xd1\x02\xfb\xfb\x66\x54\x6e\x99\x02\x93\xd5\x39\x0a\x7a\x11\x39\x6d\xb6\x2b\x5f\xd9\x17\xf8\x57\xc5\xca\xf6\xdb\x2d\xe1\xeb\xf5\x49\x11\x59\x4c\x89\x1c\xa6\xcc\x8c\xb5\x91\x81\xe2\x37\x56\xe4\xda\x87\x60\x61\x9a\xcb\xbe\xd1\x13\xdf\xfe\x63\x6c\xf6\x80\xa6\xbf\x39\x0c\xe4\xcc\x0a\x7b\xcc\xe1\xc4\xef\x80\xcb\x95\xad\x98\x68\x29\xe3\xc1\xc4\x07\x78\x3b\x4f\x63\x93\xb8\x11\xb5\x59\xa2\x2d\xb0\x05\xbd\x7b\xe5\x67\x8f\xd9\xb4\xed\x25\xa2\xc5\xcf\xa0\xa2\xb7\x36\x74\xd1\xd8\xc1\x3b\x4f\x3b\xa2\x46\xec\xdc\x69\xfe\x6f\xf0\x2c\x02\x1e\x1c\xcd\xca\x17\xdf\xfc\xa1\x77\x7a\xeb\xae\x96\xf0\xe2\x7c\x22\x33\x27\xc9\x8e\xdd\x65\x2b\x01\xd7\xd8\xc3\x66\x92\x2f\xde\xd0\x7c\x2f\x5e\x4c\xc1\xbb\xf9\x44\x79\x70\xcd\x8f\x10\xc9\xef\x4f\xd0\x8a\xaa\x06\x1d\x55\xcf\x0a\xae\x97\xb1\xe2\x1e\xdb\xc5\xbc\xcd\x08\x6e\x53\xe9\x81\x63\xc5\x33\xb6\xb6\xba\x87\x9d\x8b\x8d\x51\x26\x18\xc2\x43\xae\xf5\x6e\x6d\xc8\x16\xc6\x80\x89\xf2\x61\xee\xc9\x93\xcd\x03\x92\x9a\x7c\xae\x89\xd8\xaa\x5c\xa9\x98\xa9\x95\x95\x59\x2e\xab\x64\x2a\xf3\xa6\xa6\x43\xaa\x03\x9e\xc2\x58\x27\xa1\x53\x04\xe6\x2c\xf2\x71\x55\x7a\x25\x3b\xd9\xf5\xf6\x09\x05\xff\x1a\xed\xdd\x0b\x89\x24\xce\x35\x27\x84\x14\x2b\xb0\x90\x0a\xd4\xf7\x75\x79\x53\x9e\xea\xc0\x76\x78\x34\x99\x1c\xe1\x28\xa5\xc2\xab\x14\x3d\x8a\xf6\xf3\x83\xba\x16\x5a\xa5\x2a\xf1\x5a\x37\x19\x71\xee\x32\x75\x4b\x84\x85\x70\xdd\x54\xf9\xd0\x72\x2a\x5d\xfd\x0b\x30\xa6\x7c\xb6\xd8\xf7\x07\xed\x03\x6b\x72\xda\xdc\xe2\x35\x82\xfe\x3b\x24\x9c\xf1\xbf\x77\xca\x0f\x32\x23\xbb\xfc\xb8\x58\x47\xf1\x31\x3e\x72\x92\x55\xf5\xc8\x3d\x7e\x52\xb2\x52\xaa\x75\xf3\x23\xab\x96\xac\x64\x8a\x16\x63\x6d\xa4\xa2\x0b\x28\xf6\xee\x6a\xa5\xc1\x9f\x35\x3f\xe1\x1f\x76\x86\xb7\xfd\xd7\x88\x6a\x69\x03\x4a\x4d\x2d\xa1\xaf\xce\x96\xf3\xeb\x76\x20\x06\x54\xb3\xad\x9e\x40\xfe\x1c\x35\x40\x41\x8c\xb9\x35\xb3\x08\x50\x02\x94\x46\x7a\xd4\x2a\x1c\x80\x77\x71\x11\xc3\xa3\xc3\x91\x43\x84\xe4\x7c\xc5\xb5\x8c\x28\xb8\xdb\x3c\x68\x3b\x3c\xe1\x29\xa3\x64\x6d\xaa\xda\x38\x22\xfb\xc6\x83\x72\x5f\x49\x0d\x28\x19\x77\xd8\x37\x5c\x83\x2f\x62\x23\x2f\xa0\x63\x18\xa6\xc4\x77\xe4\x7f\x8e\xff\xfe\x9b\x5f\xc6\x27\x7f\x3a\x3e\xfe\xe9\xf9\xf8\x8f\xff\xf8\xcd\xf1\xdf\x27\xf0\x8f\xff\x3a\xf9\xd3\xc9\x2f\xfe\x87\xdf\x9c\x9c\x1c\x1f\xff\xf4\x97\x77\xaf\x6f\xa6\xaf\xfe\xc1\x4f\x7e\xf9\x49\xd4\xe5\x2d\xfe\xf4\xcb\xf1\x4f\xec\xd5\x3f\x3e\xf1\x21\x27\x27\x7f\xfa\x75\xf4\xd0\xa9\x58\xbf\x8f\x94\xde\xd8\xc6\xd1\xf5\x07\x1e\x7a\x62\xa2\x50\x5b\xe7\x2a\xe4\xc2\x8c\xa5\x1a\x3b\x6e\x2f\x30\x52\x22\x3b\xf0\xdb\x2b\xf5\xf9\xbf\xf2\x52\x33\xc8\xd0\xf6\x4a\xe1\x01\x1d\xf0\xa7\x52\x34\x90\xd9\xe8\x73\xc0\x83\xb0\x27\x6f\x19\x22\xfb\x5c\x13\x11\xfb\xda\x6e\xd0\xaf\x19\x31\xe4\x1d\x87\x3e\x68\x84\xeb\xda\x85\xfe\x4c\x5a\x23\xc8\x73\xc1\xb9\xef\xdd\xb2\x08\x68\x9d\x6f\x03\xd2\xa6\x77\x1b\x90\x36\x0f\x0c\x65\x40\xda\x44\xb5\x2f\x12\x69\x83\x7c\x8b\xff\x99\x30\x9b\x74\x24\x5a\xd8\x7a\x67\x2c\xa5\x21\xd4\xc2\xc6\xc4\xaa\x2f\xa8\x3c\x65\x8a\x9f\x77\x7b\x18\x49\x2a\x59\xd5\x05\x35\x0f\x64\x8f\x24\xca\xf7\x3b\xb0\xc8\x19\x10\xff\xa2\xea\xe7\x72\x17\xb8\x20\x65\x5d\x18\x5e\xf5\x4c\x84\x68\x4c\xcb\xb6\x76\x1f\xd5\x5a\x66\x9c\xfa\x04\xf8\xb6\xae\xb6\x7b\x65\xf0\xcc\x1b\x7a\xcb\x02\x82\xe0\xbe\x59\xea\x40\x26\x1c\x54\x2c\xa7\x82\xbc\x12\x2b\x5f\x8c\x3b\xaf\x31\xb1\x97\xb5\xb1\xd2\x24\xfd\x7e\x5d\x59\x9c\xf6\x5c\xba\x2c\x8d\x20\x99\x13\x34\xc8\xc6\x89\x48\xb1\x1c\xf6\xbc\x85\x40\x42\xda\x8b\xa3\xc5\xed\x35\x8c\x68\xe3\x20\x5e\x15\x6f\xb2\x30\xa2\x6c\xac\x2d\x1d\xbc\x85\x89\x76\x75\xef\xde\x3d\x1c\x50\xe2\x4a\xbc\x56\x9e\x56\x23\x7f\x0a\x6d\xfc\x50\x34\xf1\x03\xd1\xc2\x9f\x46\x03\x3f\x4c\xed\x3b\x99\xe6\x9d\x46\xeb\x4e\xa3\x71\x3f\x02\xd7\x9e\x52\xcb\x4e\xa3\x61\x3f\x85\x7f\x0d\xab\xa5\x1f\x42\xba\xb6\xaf\xed\x43\x0c\xbb\x07\x57\x4d\xa5\x58\xc5\x44\xee\x09\xe0\x7c\x04\x16\x98\x2a\x87\x4c\xfb\xc6\x2f\x9a\xf6\xc2\xbe\xde\xe5\x29\x1b\x6e\x6b\x32\xdc\xd6\x8f\x68\xc3\x6d\x3d\xdc\xd6\x9f\xe5\xb6\x76\xd2\xea\xeb\xbf\xaa\x53\xd7\xd5\x2d\xe9\x62\x6f\x95\x1f\xce\xbb\x14\x7e\x20\x99\x3f\x4b\xc9\x82\xad\x3a\x2a\x3d\xfd\x58\xa1\x90\x6d\x40\x17\x46\xa2\xd8\x43\x8e\x6d\x45\x0a\xb6\x62\x85\x33\xab\x49\x49\x05\x5d\x00\xfd\xb7\xfd\x9e\x3b\x62\x44\xaa\xa6\xca\x56\xaf\x91\x6c\x70\x21\x82\x07\xcb\xf3\x39\xc3\x2f\x95\x2c\x0a\xab\xaf\x14\xfc\x96\x91\x97\xac\x2a\xe4\xba\x74\xf4\x54\x39\xb9\x36\xd4\xb0\x79\x5d\x5c\x33\x13\x51\xa2\xba\xa7\xc4\x69\x2a\x19\x21\xeb\xfc\xbe\xb6\x22\x14\x35\x82\x22\x3f\xa4\x42\xfa\xfb\x5e\x8f\x79\x2f\xe0\x2a\x3f\x2b\xee\xe8\x5a\x8f\xc8\x25\x5b\x31\x35\x22\x17\xf3\x4b\x69\xa6\xe8\x44\xea\xf7\xdc\x90\x0b\x05\x1f\x4e\xf8\x9c\x7c\x57\x50\xc3\xb4\x21\x86\x2e\x00\x5b\xdc\x16\x36\x92\xaa\xd3\x29\x91\x56\x50\xde\xf1\xc7\x17\x28\xc2\xf6\x59\xb9\x08\x3f\x50\xed\x08\x7a\x6f\x6a\x1d\x7d\xf6\x7a\x22\x85\xaf\x1f\xb0\x37\x2e\x6c\x2c\x5b\x80\x34\xe6\xc8\xc2\xdf\x88\x13\x2c\x61\xe8\xeb\x21\x83\x4b\x97\x0b\xa2\x98\xae\xa4\xd0\xac\xcb\x22\xd1\xbc\x08\x54\xbb\xec\x77\xea\x93\x7a\x7c\x7b\x1b\x06\xb1\x26\x41\x25\xb5\x81\xea\x0e\x7d\xf5\x93\x54\xb6\xc0\xd4\x0f\x04\x0a\x7e\xd0\xa2\x60\x39\xe1\x65\xc9\x72\x4e\x8d\xd5\xdb\xe9\xdc\x30\x45\x68\x28\xea\x9b\xc2\xa9\x4d\xde\x08\xd6\x01\xf1\x25\x44\xfa\x1b\x6b\x5d\x7a\x5d\x0d\x79\xb4\x5c\x40\xf4\x02\x51\xa7\xae\xe0\x49\x5b\x70\x64\xa3\x84\x48\x94\x10\xb5\xed\x3d\x68\x76\xc1\xf6\xde\x04\xed\x92\x59\x21\xb3\x5b\x4d\x6a\x61\x78\xe1\x6a\x87\xca\x5b\xb0\x5f\x0a\x10\x27\xbd\xbb\xee\x2f\xa5\x9a\x7f\x8e\x9b\x03\x36\xb6\xa3\xd2\xa7\xbf\x6a\x7f\x05\x1f\xf4\x1c\x5c\x02\x2b\x3a\x85\x0d\xcd\xee\x59\x16\xa3\xcf\x77\x83\x2d\xf7\x2c\x0b\x2b\x8f\x7a\xfa\x6a\xbb\xa3\x1c\x69\x74\xa2\xb8\x23\xb6\x44\xf8\xab\x54\x98\xa7\x08\xb2\xee\xb0\xa5\x86\xf4\x9c\xbb\x45\xe0\xda\xcd\x3c\xfe\x58\x70\xc1\xba\x0b\xd3\xd4\xbd\x6b\x16\x07\xc3\x9e\xce\xc8\x25\x39\x57\x2c\x33\x52\xad\x3d\xdb\x59\xf4\xd0\xfc\x58\xec\xd8\xa0\x64\xf2\xf1\xd1\xe9\xd1\xc9\xd6\x1e\x39\xd2\x90\x7e\x81\xd7\xe2\xc4\x51\x86\x37\x2f\xa5\x79\x59\x15\x6b\x78\x8f\xa3\x7c\x44\xb8\x49\x81\x11\xb2\xb7\x21\x16\x08\x87\x59\x71\x14\xe7\x23\xa2\x25\x31\x8a\xe6\xdc\x19\x08\xf0\xa9\xfd\x92\x51\xb5\xbb\xd0\x8f\x8f\x7e\x39\x1a\x11\x66\xb2\x13\x72\x27\xc5\x91\x81\xe9\x9b\x90\x1b\x28\x2a\x19\x0f\xeb\xf5\x03\x59\xcb\x1a\x6a\x8b\xe3\x12\x62\x7d\xdf\x62\x0d\xd7\x0d\x91\xb5\xab\x07\x4b\x4d\x0c\x35\x7b\xd8\x5e\xdd\x73\xe3\xc8\x37\xac\xfc\x7e\x0e\xbb\xc9\xd5\xfa\xa6\xd6\x18\x59\xb1\xd3\x25\xa3\x85\x59\x62\x36\x83\x90\x62\xfc\x6f\xa6\x24\xd0\xb7\x0b\xf7\x9b\xd8\x61\xc4\x85\x94\xc3\x16\x11\x5e\xde\x1e\x50\x12\x20\x53\x62\x67\x80\x6f\xf6\xda\x7b\xcd\x7a\xab\x44\x64\x53\x1e\xbd\xb9\xb9\x99\xbe\x66\xa6\x5b\x5f\xda\x7e\x48\x5e\xbf\xba\xf1\x39\x2c\xe0\xe8\x67\x6a\x2e\x55\x79\x00\xe2\x3d\x0d\xb8\x76\x4c\x2a\xa9\x0e\xe1\x96\x59\x4a\x1d\xb5\x9c\xe4\x09\xae\x98\x37\x52\x1b\x8c\xe5\xa0\x6d\x22\x20\xb1\x51\x76\x13\x32\x7c\xfa\xfe\xc5\x74\x42\xfe\x26\x6b\xa8\xc0\x46\x67\xc5\xba\x29\xe0\xa4\x59\x1c\x8a\xda\xb6\x67\x76\x28\xcf\xec\x0d\x62\x77\xfe\x1b\x46\x73\xa6\x34\x08\x68\x46\xa3\x93\xa1\x93\x1d\xf7\x60\x6c\x49\x97\xf2\xbc\xd6\x46\x96\x64\xe9\x5e\xbb\x4b\xed\xee\x0e\xe7\x04\x8f\xab\xa3\xd1\x55\xac\x42\x21\xee\xfe\xe6\xab\x13\xd1\x5b\xd2\x0b\xe7\xdd\x7d\x3e\x43\x35\x35\x9c\x36\x17\xe0\x40\x82\x56\x27\xdb\xb0\x58\x60\xa2\xeb\x22\x41\xbe\x00\x49\x98\x33\x40\xe2\x48\xdf\x37\x1f\x04\xc1\x9e\xe8\x27\xa5\x4b\x43\x20\xc9\xa0\xf6\xe4\x49\xe0\xf6\xc4\xa1\x28\xdd\xe6\x43\x1f\x74\x7f\xef\xf9\xae\x87\xf3\xb6\x1e\x7a\x46\x85\x14\x3c\xa3\x05\xff\x37\xcb\x49\x5d\x49\xe1\x72\xeb\x40\xb3\xcd\xa8\x66\x63\x88\xbc\x0b\x14\xe7\x3a\x60\xf9\xb6\xd2\xc1\x48\x09\xea\x5e\x53\x1c\x1b\x47\x9d\x66\xa8\x49\x51\xe1\xd1\x94\xf5\x61\xdb\x0a\xa8\x77\x16\x2b\xcd\x8e\x27\x5f\x84\x3a\x49\x12\x11\x2f\x6c\x73\x9b\x61\x7d\x54\xe0\x31\xc7\xeb\x0a\x04\xaf\x66\x6a\x15\xbf\xbf\x92\xcd\xab\x55\x01\x0f\x4d\xf7\x42\xcc\x81\x22\xa2\x2e\x67\x4c\xb5\xc4\x90\xca\x6c\xcf\x69\x12\xaf\x8b\xeb\x16\xbb\xf3\x51\x5a\xaf\x63\x50\xb1\x60\xe4\x85\xed\xf9\xf7\xdf\x7e\xfb\xdb\x6f\x13\xf4\x63\x5f\xcf\xf7\x42\x05\xb9\x38\xbb\x3c\xfb\xf9\xfa\xc7\x73\xa0\xd9\x8f\x7d\x7c\xa2\x24\xd9\xd4\x29\xb2\x49\x13\x64\x9f\x34\x3d\xb6\x52\xd2\xc8\x4c\x46\xa7\xcc\xa4\x3e\x14\x53\x37\xae\x86\x7b\x0f\xfc\x58\x5c\xb1\x66\xc4\x0d\x63\x3f\xe8\x76\xde\x68\x49\x42\x9a\x73\xc9\x8b\x8e\xe1\x63\x25\xd9\xe9\x8b\xc9\x8b\x83\x11\x63\x40\xb7\x19\x7d\x37\xa6\x5e\xb3\x6b\x18\x95\x9d\xb0\x5a\x63\x41\x05\xbf\x28\x6d\x41\x78\x6b\xfc\xc6\x2f\xd0\xcb\x8d\xc5\x39\x88\x85\xd1\x05\x63\x55\x32\x3f\xcd\xb5\x7d\x5a\xa7\x78\x15\xc9\x6b\x85\x35\x94\x9b\x90\x63\x1b\x81\x71\xa1\x46\x18\xc3\x57\xe4\xb2\xd1\x2c\x93\x22\x8f\x31\xdc\x52\x19\x22\x6e\x24\x49\xcf\xdc\x35\x3e\xd3\x3b\xf6\x5b\x05\xc0\x75\x06\xf6\x7f\xec\x8a\x92\x66\x55\xd3\xdc\x6e\xc8\xe1\x01\x4f\xfb\xfd\xef\xfa\x87\x35\xb3\xea\x5a\x66\xb7\x09\x1d\x9b\x91\x02\xec\xa5\x3d\x69\x19\x46\x70\x6f\xce\xa7\x38\x38\xbb\x32\x97\xef\x6f\x5a\xc2\x1e\x6b\x3b\x51\xf2\xd6\x47\x14\xdf\xb8\x18\x2f\x15\x39\xb9\x65\x55\x9c\x4f\xc0\x0a\x4c\x0f\xfe\xec\x62\x3f\x21\x62\xa2\x5c\x95\x19\x4c\x8a\x47\x41\xe0\x31\x9b\xae\x72\x45\x54\xbd\xaa\x00\x52\x01\xe1\x5b\x67\x3a\xce\x29\x2f\x08\x85\x58\x8a\xe1\x25\x23\x77\x4b\x26\x30\x44\xd3\x62\x5c\xbe\x22\x81\xf3\xb5\xfa\x88\x8f\x3c\x90\xff\xbb\x47\xfb\x7a\x63\xb9\x4c\xbe\x6e\xe3\xcd\xc9\x6c\xd5\xe1\xa2\x1b\x8c\xb7\x4f\x69\x83\xf1\xd6\xd3\x78\xab\x14\xbb\x36\xb2\xb7\xae\x99\x0c\x26\x85\xc3\x78\x00\x24\x35\x63\x73\xa9\xd8\x26\x4a\x2a\x40\x2f\xb9\x7c\x87\x08\x3c\xf7\xd9\xf4\xa2\x89\x58\xca\x0e\x42\x09\xf9\xa6\x75\x9d\x2d\x7d\x70\x5b\x30\xad\x4f\x01\x0f\x55\x57\xce\x64\xb4\x57\x5b\xad\x58\x7f\x6c\x56\xa5\x18\x2b\x61\x1e\x47\x2d\x07\x94\x7d\x5d\x26\xf0\x43\x66\x32\x44\x3b\x78\x30\x98\x63\xf7\xf5\xd3\x35\x8f\x02\x61\xb4\x13\x9b\x29\xaa\x97\x0c\x32\x9e\xd9\x3d\x37\x1a\x3b\x45\x0e\x5d\x3f\xe3\x56\x5f\x58\x28\x9a\x31\x52\x31\xc5\xa5\x55\x31\x6a\x61\x72\x79\x27\xc8\x8c\x2d\xb8\xd0\x7e\xc5\x62\x86\xe4\xb7\x04\xe0\xbf\xb8\x6e\x2a\xcd\x4f\xc8\x55\xa7\xce\xa1\xe3\x84\xcb\x64\x2b\x33\xdd\x14\x8d\x12\x4d\x09\x28\x2f\xb0\x0d\x6a\x5a\x14\xeb\x76\xe3\x85\xb4\xae\x0f\xcc\x50\xff\x0d\x81\x33\x7b\x5c\x0b\x78\xd1\x9c\x15\x74\x8d\x79\xff\x73\x2e\xc0\x67\xaf\xf4\xc9\x24\x1e\x50\xd7\x7b\x80\x52\x05\xcf\x7c\x70\x67\x70\x4d\x14\xa3\x59\x14\xfb\xf4\x80\xdc\xfb\x58\x1b\x90\x7b\x03\x72\x6f\x40\xee\x6d\xb7\x01\xb9\xd7\x6d\x03\x72\xef\xe1\x01\x1d\x72\xa8\x75\x40\xee\x0d\x5e\x99\xed\x36\x20\xf7\x7a\xb5\x01\xb9\xf7\xd1\x76\x70\x22\x7a\x40\xee\x7d\x42\x1b\x90\x7b\x9f\xd8\x06\xe4\xde\x80\xdc\x1b\x90\x7b\x03\x72\x2f\xa2\x0d\xc8\xbd\xc7\xbf\xde\x10\xfc\xe9\xdf\x06\xe4\xde\x80\xdc\xdb\x68\x03\x72\x6f\x40\xee\x0d\xc8\xbd\x4f\x6a\x03\x72\x6f\x40\xee\x7d\x4a\x1b\x90\x7b\x03\x72\xef\x2b\xf6\x11\x0f\xc8\x3d\x6c\x03\x72\xef\x71\xfd\x0c\xc6\x5b\xdc\xc3\x9e\xc4\x78\xd3\x46\x56\xd7\x7c\x11\xc1\xc1\x9a\xea\x18\x5c\x37\x23\x71\x04\xad\xda\x15\xb6\xd6\xf8\xa1\xf7\x3e\x6a\x47\x8f\x19\xe2\xf8\x82\x9b\x64\xc6\xac\x89\x60\x5f\xab\x8a\xb9\x4d\x2e\xe6\x10\xf6\x0f\x58\x13\xed\xa9\xf0\x94\x9c\xbc\x53\x42\xa5\xab\x3e\xfb\xdb\x8d\x0b\x6b\xbb\xf4\x1f\x41\x30\x1f\x19\x15\x58\x85\xd8\x95\xa4\xb7\xd7\xfb\x54\xe6\xda\x57\x6d\x11\x52\x8c\x91\x18\x79\x62\x07\x3c\x91\x7a\x12\xe1\xc3\x8f\x64\x41\x44\x64\xe3\xd4\x5a\xd2\xfb\x62\x42\x9c\x02\x6a\x8c\x67\xce\x9e\x97\xf3\x0e\xbb\x21\x0e\xb0\x27\xab\x61\x17\xce\x07\x85\xd1\x3d\xdd\x1d\x9f\x07\x3e\x04\x20\xd9\xfb\x92\xf8\x34\x3d\x23\xac\x3e\xad\x24\xfe\xa7\x45\xbb\x05\x30\xb7\xde\xd1\xaf\x3d\x53\x39\xc6\x60\xdb\xf6\x86\x6b\x3b\x10\x5c\x60\x02\x2c\x5b\x4a\x5d\xe9\x40\x31\x6c\x87\x89\x5f\x3b\x44\xec\xda\x3e\x70\x6b\x7b\xc7\xac\xa5\x01\x43\x24\x00\x42\x24\xd2\x48\x9f\x20\xa8\xe8\xd2\x1f\x6e\x96\x8a\xe9\xa5\x2c\x7a\x0b\x9c\x54\xc2\xe6\x1d\x17\xbc\xac\x4b\xa8\xf8\x62\x65\x0a\x5f\x35\x29\x1a\x7a\x23\x64\x80\x38\x11\x28\x0d\x93\x33\x28\xb9\x4f\x79\x61\xb7\x16\x10\xf3\x2e\xe9\x0a\x94\xd2\x3a\xcb\x18\xcb\x63\xd4\xd2\xd0\x5b\xfd\xdb\x49\x33\x42\xac\x87\xc1\x35\xe9\x1d\x57\x48\x61\xf7\x04\xee\xbc\xdf\x7e\xd3\xeb\x19\x0b\x55\xa5\xb9\xa5\x5f\x5f\x4d\xcf\x3b\xb7\x34\x7c\xf0\x06\x8e\xf1\xf9\x92\x65\xb7\x57\x0e\x00\xb5\xbf\x9b\x39\xde\xcd\x14\xe5\x62\x4a\xa1\x18\x94\x32\x8f\x8a\x1c\xa5\xd4\x0a\xec\x58\x82\x15\x77\x77\xae\x8b\xe3\xe1\x6f\xfd\x91\x5d\xd8\xbd\x80\x22\x1d\x8f\x6f\xdc\xd5\x72\x8d\x85\x90\x9e\xdd\xbc\xbd\x7e\xe6\x23\x56\x37\x6f\xaf\xc1\x38\xb3\xb7\x58\x66\xa7\x79\x8e\x55\x35\x57\x4c\xe1\x3f\xa3\x83\x8b\xbe\xd7\x69\x41\xed\xa9\xbd\x37\x4d\xdf\x94\x54\xfe\x33\x72\xcc\x41\x74\x29\x76\x12\xce\x46\x7b\xd7\xc6\x8d\x61\xb7\x91\x8c\x12\xb1\xd6\x70\xee\x3e\x32\x94\xf8\x1b\x35\xf2\x22\x8b\x75\x04\x76\xc1\x2b\x52\x99\x0d\xec\x05\xec\x35\xcd\xd4\x8a\x67\x6c\xf2\x19\x7c\x6d\xa9\xfc\x57\xf1\xb2\x9c\x40\xa4\x0b\x5e\xfc\x50\x64\xc4\x35\x0e\xa7\x09\x92\x05\x6e\x56\x37\x52\x40\xab\x17\x34\x6b\xd6\x66\xb1\xfb\xde\x88\x1a\xc6\xb1\x66\xac\xb1\xc9\x17\xdc\x2c\xeb\xd9\x24\x93\xe5\xa9\xbd\xfd\xf0\x3f\xb3\x42\xce\x4e\x4b\xaa\x0d\x53\xd6\x4c\x77\x9a\xe9\x38\xb3\x23\xe0\x62\x31\x29\xf3\x93\xc9\xff\x8a\x3d\xba\x10\xee\x71\xf9\x9f\x0f\xf8\xb9\x66\xcc\xaa\x2e\x52\x6d\x38\xbc\xec\xa4\xec\xfd\xe4\xc6\xd7\xa0\x8a\xcc\x87\xd8\x4b\x2e\xc4\xa0\x78\x90\x04\x31\xad\x94\x42\xe5\x30\xf2\x1d\x9e\x2c\xd7\x21\xc9\x59\x4d\x94\xe3\x70\x40\xf9\x0d\x07\x63\xce\x1f\x4a\x4e\x43\xb2\x7c\x86\x54\xb9\x0c\x49\xf2\x18\x52\xe4\x30\xa4\xcb\x5f\x48\x93\xbb\x90\x3e\x6f\xe1\xc9\x72\x16\xbe\x88\x7c\x85\x84\x21\xde\x44\x79\x0a\x9f\x23\x47\xe1\x70\xdd\x88\x24\x41\x5e\xc2\xe7\xcb\x49\x38\x3c\x2b\x36\x52\x24\xec\x21\x07\xe1\x73\x40\x58\x9e\x0c\xbe\x92\x00\xba\x92\x12\xb6\x92\x0c\xb2\xf2\x64\xb9\x06\x29\xf2\x0c\x52\x6e\xf8\xbd\xe5\x17\x3c\x45\x6e\x41\x1a\xf8\x7a\x74\x4e\x41\x52\xaf\xcf\x67\xc9\x25\x48\x99\x47\x10\xbd\x08\x5c\x70\xc3\x69\xf1\x92\x15\x74\x7d\x1d\x87\x36\x4f\xb5\x12\x97\x5b\x88\x74\x8c\x8d\x75\xc1\x53\x4b\xaa\x89\xc7\xd3\x38\xf6\x2f\x0f\xd8\x71\x46\x0a\xa1\x00\x6b\xb1\xef\xd7\x1b\x1a\x43\x0e\x0f\x1e\x43\x0e\x26\x06\x87\x94\x5b\x07\xb2\x6b\xde\xc8\x3b\x22\xe7\x86\x09\x72\xcc\x85\xdf\x39\x27\x81\x1f\xad\x15\xab\xd1\x41\x55\xfb\xd4\x17\xcf\x7d\x27\x5f\x5f\x70\x15\xc2\xcf\x5a\x1f\x74\x78\xdd\x8d\xf1\xe3\xf1\x75\xf7\xc5\x79\x5d\x74\x63\xec\x18\x77\x4f\x13\x60\x7f\x31\x21\xef\x9c\xc2\xf7\x02\xc6\xd3\x88\x22\x2a\x72\xe2\xa8\x1b\xbf\xbe\x7d\x12\x9d\x4f\xd3\x35\x3f\x9b\x04\x98\x2e\x68\xae\x09\x46\x02\x94\xf7\xe6\x7c\x0a\x26\xc2\xe0\x16\x3f\x18\xb7\xf8\x9e\xd2\x3c\xbe\x3e\x7b\xf8\xf3\xa7\x75\x0c\xf6\xf0\x7f\x8a\x3d\x1c\x30\xa6\xbe\x56\x34\x63\xd3\x43\x52\xde\xbc\x00\x69\xb3\x8d\x5b\x1d\xae\x11\x17\x82\x31\xcc\x4e\x6d\xf9\x70\x81\xfa\x75\x5e\x17\xc5\x1a\xbd\xbc\x1d\x72\xe4\xfe\x5b\xeb\x66\xc9\xb6\x58\x65\x21\xd8\xbd\x63\x74\xad\x6d\x52\x29\xe9\x34\x12\x55\x0b\x61\x55\x0c\x77\x9c\xec\xe0\xad\x2d\xa2\x99\xe8\x1f\xf0\xa0\x1d\xce\x5b\x97\xe9\x02\x68\xf2\x25\x23\x6d\x92\x64\x77\x20\xb6\xd7\xb9\x54\x19\x9f\x15\x6b\xb2\xa4\x85\x35\x96\x5c\x26\xc8\x2d\x2f\x0a\xf7\x98\x88\xcc\x13\x66\x10\x1c\x80\x1a\x4d\x21\xc5\x02\x26\x83\xe2\x40\xd8\x7d\xc5\x32\xdb\x67\x56\x30\x2a\xea\x0a\xc7\x69\xf5\xa3\xb5\xac\x95\x1f\x67\x54\xea\x4d\xd0\x3b\xd7\x44\xf0\x62\xe4\xa7\xbc\xcb\x8e\xbc\xbd\xe7\x5b\xa7\xbf\x66\xb9\x23\x36\xbe\xe3\x9a\x8d\xe0\x99\xbd\xc7\x84\x63\x91\x2b\xa6\x14\xcf\x1d\xbc\x0c\x3f\xab\x94\x5c\xf1\xbc\x4d\x04\xb2\xdb\x02\x92\x70\x7a\xf7\xf5\x23\x3c\xd7\x8b\x56\x21\xc5\x58\xb0\x05\x05\xf5\xd8\x09\x34\x84\x8d\x63\xff\x08\x52\x16\x39\xe0\xcb\x34\x24\x3e\x75\x58\xcf\x57\x9c\xf6\x1e\x89\x7d\x9f\x60\x47\x91\x63\x21\x89\x84\xf4\xe5\x5a\x70\xb3\x86\x98\xeb\xb2\x36\x24\x97\x77\xe2\x24\xe6\x60\x22\x10\x85\x92\x19\x33\xb4\xcd\x40\xf6\x2a\x99\x26\x4c\xd0\x59\x61\xcf\x1e\xa4\x15\xdd\xec\xdc\x00\x64\xce\xa8\xa9\x15\x23\x0b\x6a\x22\xa4\xc4\x0e\x6d\x1e\xd7\xf3\xc3\xdb\x8e\x6b\x17\x51\x9d\x93\x5a\x68\x16\xa9\xc8\x26\x33\x01\x7a\xa6\xd5\xdb\x13\x2d\x6b\x73\x20\xf7\xc8\x43\xae\x23\x4c\x0f\x0c\x8c\x44\x5e\x32\x4d\x64\x1d\xe1\xc9\xeb\x98\x7f\xae\xbb\x94\x16\xde\xe0\x77\xda\xd9\xfa\x06\xb6\x53\xec\xb0\xcb\x40\x2b\x0f\x48\x50\x3c\x20\x0e\x69\x1a\x5e\x5e\x5e\xff\xfc\xf6\xec\xcf\xaf\xde\xf6\x5b\xf8\x57\x34\x5b\x86\x65\x27\x04\xa1\x70\x51\x80\x90\x5f\xd2\x15\x23\x94\xd4\x82\xff\xab\x76\xa0\xc4\xe3\xa6\xbf\x9e\x62\x35\x49\x0e\x61\x94\xe2\x6b\x6f\x89\x5e\x92\x23\xc5\x9a\xbe\xe5\x1a\x6a\x18\xc0\x20\x5c\x76\x91\xd4\x8c\xcc\x95\x2c\x37\x0c\x2d\x72\xd9\xc0\x1f\xd7\xf6\x86\xa1\x68\x9a\x2d\x99\xea\xa7\x91\xbf\x7c\xff\xea\x1a\x88\x3e\x2a\x85\x35\x3f\x20\x83\x09\x9e\x09\xbd\x63\x7e\x32\x8e\x27\x9f\x90\x33\xb1\xc6\x5f\xa2\x30\xeb\xa9\xa2\x14\x5c\x1b\x06\xca\xa9\x33\x24\x3d\x80\xf3\xd9\xf3\x09\xfc\xef\x19\xa1\x79\xae\xac\xa5\xd9\x24\x82\x65\x9b\xa9\xac\xbd\x7a\x46\xfb\x95\xcf\x8a\x60\x72\x05\x33\x90\x2b\xd6\xeb\x81\xef\x64\xee\x56\x02\x94\x40\x40\x58\xa1\x76\xab\x8d\xa2\x86\x2d\x78\x46\x4a\xa6\x16\x8c\x54\xd4\x64\x4b\x52\xd2\x35\xc9\xa4\x52\x75\x85\x3c\x46\x39\x35\xb4\x5f\xcf\xdf\x4b\x45\x4a\x2f\x9d\xad\x34\xb3\x2a\xf9\xf5\x6e\xa8\x6e\x2b\xb2\xc3\x7f\x72\xad\x6b\xa6\x4f\x5f\x3c\xff\xc3\x37\xdf\xf6\x34\xaf\x13\x1e\xdc\xbe\xe0\xb4\x08\x50\x5a\x17\xa0\xe7\x37\x18\xc0\xe2\x3b\xf4\x53\x6e\x87\xe0\xce\x07\x69\xa8\xb9\x58\x14\xd1\x0e\x90\x68\x37\x60\xac\x13\x70\xdc\xbe\xc1\xb4\xaf\x2f\x30\xde\x13\xd8\x19\x43\x7f\x57\x4a\x3a\x2f\x58\xab\xc1\x79\xbf\x97\x13\xc8\x52\x04\x86\xdd\xc5\xd4\x4b\xa9\x18\xff\x11\x58\x13\x8d\x63\x0a\x29\x8e\xb0\x5b\x44\xa4\x8c\xc8\x73\xf2\xdf\xe4\x9e\xfc\x37\x78\xc1\x7e\xdf\xbf\xab\x34\x3e\xa6\x14\x89\x16\x4b\xa9\xcd\xc5\x34\xd1\x42\xff\xd5\xde\x57\xf6\x89\x76\x3d\x8c\x24\x33\xee\xdc\x11\xec\xde\x30\x65\xcd\x40\xb7\x86\xb1\x33\x17\xe5\x51\xb3\x03\xfc\x52\x76\x77\x2c\xb8\xe0\x62\xde\xcd\xcf\xf8\x4c\xfb\x1b\x3a\x7e\x23\xb5\xb9\x74\xd2\x3a\xe4\xe9\x0a\xc7\x51\xc2\x45\xdc\x11\xf7\x31\xbd\xbe\xb3\x7b\xaf\x2d\xbf\x44\x72\x09\x29\x2a\x98\x28\xbe\xe4\x11\xc2\xe1\x70\x4e\x6c\x1c\x92\x37\xdd\xd6\xfd\xd0\xd6\xda\xf0\xe9\x83\x47\xc6\x19\x29\x41\xc5\xb2\x4a\xe6\x13\xb0\x6f\x22\x46\x61\x67\x23\x0f\x94\x81\x0f\x98\x46\x13\xb4\xd7\x9a\xe8\x30\x1c\x38\x2b\xb1\x32\x2a\xfa\xea\xb0\xd8\x14\x9b\x33\xa5\x90\x8c\x60\xb6\xf6\x09\x61\xd1\xbb\x2d\x4a\xca\xc5\x43\xdd\xd2\x6d\x95\x69\x08\x66\x83\x58\x6d\x13\x1d\xff\xe1\xe5\x74\x44\x6e\xce\xa7\x23\x22\x15\xb9\x3e\x8f\x03\x3f\x85\x2e\x98\x67\x37\xe7\xd3\x67\x7b\x5d\x81\x20\xcb\xec\xe6\x7c\xda\xe3\x21\xdb\x00\xe7\x92\x56\xe3\x5b\xb6\xee\xa9\xdd\xa5\xd0\x30\xc7\xcd\xc6\x4a\xf2\x42\x38\xcd\x25\xad\x1e\xfd\x34\xc5\x68\xce\x0f\x9a\x2e\xca\xe7\x85\x36\x23\x4d\xc7\x1b\x55\xca\x15\xcb\xd1\x6a\xf6\xbd\x30\x91\x57\x92\x5b\x1b\x69\x20\x93\xfa\x50\x1b\xc8\xa4\x1e\xdf\x06\x32\xa9\x5d\x6d\x20\x93\x7a\x44\x1b\xc8\xa4\xb0\x0d\x64\x52\xdd\x81\x1c\x62\x16\xd8\x40\x26\xf5\xd1\x36\x90\x49\x3d\xd8\x06\x32\xa9\x47\xb5\x81\x4c\x6a\x20\x93\x1a\xc8\xa4\x06\x32\xa9\x07\xda\x40\x26\x35\x90\x49\x0d\x64\x52\x1f\xe9\x7e\x20\x93\xea\xd1\x0e\x2e\x6b\x66\x20\x93\xfa\x50\x1b\xc8\xa4\x76\xb6\x83\x31\xe7\x07\x32\xa9\x07\xda\x40\x26\xf5\x40\x1b\xc8\xa4\x06\x32\xa9\x81\x4c\xea\xc3\x6d\x20\x93\xea\xdd\x06\x32\xa9\xc7\xb5\x21\x79\xf6\x91\x6d\x20\x93\x72\x6d\x20\x93\xfa\xa4\x36\x90\x49\x1d\x72\x46\xe0\x40\x26\xd5\xb4\xc3\x88\xc1\x0d\x64\x52\x03\x99\xd4\x07\xdb\x40\x26\x35\x90\x49\x7d\xb0\x0d\x64\x52\x3d\xda\xc1\xb9\xc5\x07\x32\xa9\x81\x4c\xea\x43\x7d\x0c\xf6\xf0\xe3\xda\x40\x26\x35\x90\x49\x6d\xb5\x81\x4c\x6a\xbb\x0d\x64\x52\x03\x99\xd4\x40\x26\x35\x90\x49\x35\x6d\x20\x93\xfa\xda\xfd\x4e\x8a\x69\xfe\x6f\x36\x95\x05\xcf\xd6\xfb\x4a\x29\xbc\x62\x5a\xd6\x2a\xb3\x17\x3d\x8c\x86\x54\x30\x9c\xc6\x11\x11\xa9\x9b\x83\x90\x43\xd1\x96\x35\x09\x7e\x9a\x19\xab\xfa\xb3\x6a\xc9\x4a\xa6\x68\x11\xe4\xd0\x7f\x05\x24\x32\x57\xc1\xaa\x86\x64\x32\xca\xcd\xf4\xd3\x4c\xf4\x01\x10\xca\xf8\x17\xbc\xec\x0f\x40\x81\x87\x18\xaa\x0c\x4e\x5f\x3f\x4f\x6e\xb4\x4b\x21\x7c\x91\x43\x48\x68\x0f\x89\xdf\x9a\x5d\x64\x64\x73\x13\xf0\x07\x37\x17\xad\xaa\x82\xc7\x50\x03\x10\x72\x5d\x83\xea\xc3\x1c\x82\x42\x7f\x47\xb2\xaa\x1e\x91\x92\x95\x52\x45\x00\xe9\x13\x98\x97\x9d\xad\x72\x08\xeb\x74\x85\x03\xf2\x93\x6f\x24\xcc\xff\x1a\x8d\x99\x96\xa7\xaf\x59\x2b\xee\x85\x6e\x14\x54\x71\x3b\x1d\x81\x9b\x8e\x8b\xea\x52\x9a\x2b\x77\xb8\xf7\xb6\x5e\x89\x01\x2f\x7e\x0a\xf7\xc6\xdb\x77\x2e\xcb\xaa\x36\xac\x73\x7d\xe2\x14\xa3\x45\xc4\x75\xac\x40\xdf\x4f\x3e\x7c\x26\xc5\x9c\x2f\x9c\x6b\xe0\xb4\xa4\x82\x2e\xd8\xb8\x99\xed\x71\x7b\x51\x9f\xf6\xbe\xa8\xf7\x96\x0c\x9f\x15\x94\xf7\xc7\x9d\xa6\x12\x13\xe7\x30\x0a\x20\x42\x6c\xf3\x31\x20\x3b\xb7\x99\xe6\x51\x93\x75\xc0\x51\x6e\x4c\xfc\xaf\xf0\x8f\x47\x11\xa6\x2d\x35\xe0\x48\x01\xab\x6d\xc7\x4e\x8d\xb3\x66\x51\xd1\xcb\x59\xc5\xac\xb9\x82\xde\xdd\xfe\x46\xc9\x5a\xd0\x92\x67\xfe\x84\x9d\x15\x85\xc4\x0c\xb2\x0d\x93\x37\xc5\x90\xad\x25\x5e\x96\xb5\xa1\xb3\x82\x4d\xc8\x05\x92\xf4\x48\x51\xac\xbd\xba\xea\xf0\x13\x11\x5a\x2a\x49\x02\x9f\x8e\x84\x4e\x77\x36\xf1\x55\xb8\xa9\x90\x55\x88\x09\x2b\xca\xa4\x60\x84\x09\xa3\xd6\x76\xff\x4d\x65\x7e\x6d\xb7\x60\xe7\xdb\xd1\x64\x43\x91\x88\xe9\x14\x68\xe9\x48\xa4\x74\x1a\x7c\x73\x3c\xb6\x39\x2d\xae\xb9\x8d\x6f\x20\x57\x5a\x98\x30\xd6\xd9\x16\x95\xcc\x27\x3b\x44\x13\x91\xf3\xc8\x11\xd8\x1e\xa7\x32\xb7\x4a\x93\x62\x28\x9f\x9a\x33\x8a\xde\xcd\x0b\x3b\xb8\x5b\x70\x47\x52\xd3\x6a\x53\x74\x45\x79\x61\x0f\x70\xe4\x00\xb6\x79\x67\xe3\x42\x46\x89\x02\x29\x2e\xb7\xe3\x90\x36\x8b\xcb\x0a\xec\x24\x16\x66\x4b\xa9\x99\x00\x79\x49\x9b\x04\xb0\x26\x3d\xc5\x89\x98\x1c\xef\xe2\x58\x10\xfa\xc5\x9c\xb0\xb2\x32\xeb\x11\x61\x2b\xa6\xd6\x66\x09\x50\x88\x86\x39\x19\xc4\x1a\xd7\xa4\xa4\x79\xb0\x3b\x46\x44\x7a\xef\x78\x64\xf7\x70\x3f\x38\x9b\xac\x2e\x0c\x5a\x68\x5c\x37\x59\x38\xfb\xde\x35\xa9\x09\xbd\x48\xac\xd0\x4c\x49\xc8\x45\x80\x4c\xba\xe4\xfd\xa8\xbb\x49\xc2\xb3\xf0\x16\x46\x11\x64\x1e\xd9\x2d\x51\xd2\x7b\xf0\x9d\xd2\x52\xd6\xc2\x20\x53\x17\x5a\x0c\x8d\x96\x87\xf9\x59\x9f\x11\xcc\xf7\xa4\xba\x3d\x49\x73\xb5\xd3\xdc\x93\xf3\x4c\x13\xdc\xaf\x15\x35\x86\x29\xf1\x1d\xf9\x9f\xe3\xbf\xff\xe6\x97\xf1\xc9\x9f\x8e\x8f\x7f\x7a\x3e\xfe\xe3\x3f\x7e\x73\xfc\xf7\x09\xfc\xe3\xbf\x4e\xfe\x74\xf2\x8b\xff\xe1\x37\x27\x27\xc7\xc7\x3f\xfd\xe5\xdd\xeb\x9b\xe9\xab\x7f\xf0\x93\x5f\x7e\x12\x75\x79\x8b\x3f\xfd\x72\xfc\x13\x7b\xf5\x8f\x4f\x7c\xc8\xc9\xc9\x9f\x7e\xdd\x3f\x34\x1a\x8b\x03\x48\x87\x02\x48\x84\x01\x78\x12\x04\x80\x93\xb1\x7b\x3f\xfc\xee\x0a\xdc\x3a\xfe\x2e\x74\xf2\xa1\xe3\xaf\xa2\x7d\x32\x17\xf3\xb6\x7f\xae\x89\x2c\xb9\x31\x2c\x77\x77\x6f\xc0\xfe\xb5\xe1\x0f\x72\x02\x0b\x88\xfb\x28\xdc\xde\x01\x0b\x55\xeb\x46\xea\x3d\xac\xe6\x7e\x05\x0f\x98\x20\xbc\xac\x0a\x56\x32\x61\x40\xf0\x8c\xbd\x6d\x0b\xee\xc4\x49\xfb\x06\x2e\x3e\xc0\xee\x33\xc6\x72\x37\xc8\x41\x36\x06\x6d\x90\x8d\x83\x6c\xfc\x58\x8b\xf6\x89\x27\x8a\x29\xb6\x83\x70\xbe\x2c\xed\x35\x65\xf0\x90\x37\x0c\x1b\x72\x0e\x28\x8e\x15\xcf\xeb\x4e\x1c\xb0\xa1\x57\x8e\x08\x3b\x76\x71\x2b\x10\x43\x66\x2b\x56\x34\x83\x40\x37\xfd\x84\xfc\x15\xb1\x46\xa1\xa1\xd9\x75\xa8\xf7\x0b\xc8\xed\x7a\xdd\x2e\xa1\x88\x33\x75\x8f\xf4\xc6\x90\x1a\x28\x54\x9b\x21\x62\x77\x5b\xbf\xa9\x38\x6b\xa4\x46\xb1\x1e\x11\xcd\x0c\x26\x00\x2d\xd9\xc6\x32\x51\x4d\x9e\x9d\x15\x77\x74\xad\x9f\x35\x31\x49\x2e\xb8\xd9\x28\xbf\xd2\x6b\x0c\xc0\x8e\x6d\x1f\x38\x97\x56\xe7\x85\xba\x32\xf3\x39\xcb\x7a\x5a\xb3\x48\xe1\xb2\x3d\x36\x07\x96\x37\x5c\xd4\xf6\x6d\xfd\xac\xb2\x9c\x48\xd1\xab\x23\x76\xcf\x0d\xa9\x85\xe1\x85\x55\xd6\x89\x62\x8b\xba\xa0\xa1\x23\xd0\xbd\x99\xc7\xf0\xe5\x13\xf2\x5e\x64\x2c\xfc\x72\x3f\x4f\xf5\x46\x07\x56\x79\x28\x98\x61\xf9\x08\x1e\xdd\x7d\x75\x8d\x28\xb8\xce\xc9\x6f\x96\xb2\x57\xf7\x7e\x2e\x1b\x94\xd3\x04\x0f\x54\x03\xc1\x20\x39\x9f\xcf\x6d\xcf\x60\x6c\x0b\xa9\x4a\xba\x3d\x2a\x2a\xf2\x5e\xbd\xdb\x93\x0b\xb9\x2f\x21\xcf\x39\xd4\xb6\x7a\xa6\x79\xce\x32\xaa\x9e\x85\x55\x91\xce\x0a\xb3\x94\xf5\x62\xd9\xee\x8a\xb8\x29\x27\xda\x00\xf6\xcb\x4e\xa6\xf6\x9e\x8b\x8d\xcd\xa6\xad\xce\x22\x32\x86\xaa\x95\x64\x28\x30\xee\x68\xcf\xbe\xb7\x20\x00\x08\x38\xc7\x35\xf7\x09\x61\x00\x30\x64\x79\x90\xbd\x27\xd8\xbd\x49\xf0\xc2\x13\x72\x81\x7c\x29\xa3\xee\x53\x3b\x53\x82\x93\x11\x00\xec\x3c\x54\xb4\x27\xba\x70\xa3\x03\xde\xe4\xbf\x01\x33\x3b\x3e\x9c\x8a\xb5\x4f\x37\x01\x00\x1c\xa6\xc9\x35\x19\x30\x45\x3f\x1f\x7a\x73\x96\x3e\x7b\xa1\xb1\xce\x09\xbd\xaa\x8b\xfd\x45\x2f\xaf\xc2\x12\x47\x85\x2b\x41\xa6\xec\x88\x7c\xca\xd1\x92\x65\xb7\x78\xf2\x72\x86\xe2\x8d\x39\xa6\xef\xd8\xd3\xb5\x94\x75\x91\x23\xaf\x78\x2b\x9d\x41\xd2\x22\xbe\x13\x87\x41\x15\x23\xcc\x5a\x08\xc0\x5c\xc3\xfb\x89\x6f\xa9\x72\xbb\xbd\x51\x24\xc3\x83\xd1\xab\xed\x73\x71\xdc\x90\x40\xca\x67\x52\xe0\x3d\x39\x72\x37\x77\x49\xb9\xe8\xab\xda\xb5\xef\xc0\x17\x42\x2a\x70\x5a\xcf\x89\x90\xdd\x31\x74\x8f\xfc\xc6\x28\x7a\xeb\x1c\x0d\x0e\x69\xa7\xb6\xd3\x2e\xa7\x4b\xd8\x5e\x32\x6b\xad\x75\xc7\xd2\x57\x6c\x07\x2b\xaa\xac\x44\x9c\xd8\xc1\x68\xa3\x28\x10\xc5\xbb\x64\x0f\xd5\x77\xe3\x5b\xa5\xfb\xcc\x90\x52\x6a\x43\xbe\x79\x1e\xcc\x71\x94\x1f\x6d\x4c\xe0\x24\x42\xc0\xaf\x51\x53\x80\x28\x85\x46\xe4\xaa\x8f\xc9\x45\xce\x84\xe1\x19\x2d\x82\x81\xda\x4b\x62\x2e\xd5\x8c\xe7\x39\x03\xdc\x3d\x94\xc4\x01\x93\xb3\xa7\xa5\x0b\xaa\x6b\xdb\x41\x80\x01\x69\x37\xd6\xbb\x1f\xae\x6f\x20\x86\xd9\xd5\xf7\x5a\x9b\xbf\x9f\x6a\xb4\xb2\xaf\x60\xac\x50\x08\xf7\x33\xaa\xb3\x9d\x9e\xbe\x0e\x48\x9f\x7d\x1f\xbb\x53\x02\x47\xcf\x52\xde\x6d\xcb\x11\x6e\x55\x36\x91\xf7\xce\xc6\x3c\x00\x1c\x1f\x6e\xfc\x3d\x61\xef\xb0\xf3\x43\x40\x73\x5d\x77\x58\x75\xa9\x4b\xdb\xa4\xb7\x4c\x58\x51\xb6\xbd\xf0\xf3\x86\x82\x8d\x2b\x70\x77\xc5\x30\x8b\xc1\x69\xa6\x86\x6b\x7b\x9a\xf1\x62\x84\x70\x53\x25\x5d\x0d\xcb\x06\x94\xfd\xcc\x6d\x4e\x20\xc2\xf5\xc2\x3e\x8e\xd5\x3f\x41\xe0\x33\x81\x77\xc4\xce\xea\xb9\xcc\x63\x7c\x5c\x1b\x70\x87\x46\xe9\xc1\x7c\x1e\xb8\x6f\x73\xd4\x79\x40\xe1\xb1\xeb\xda\x5d\xd5\xaf\x03\xe7\x60\xcf\x24\x35\xb2\xbf\xbf\x2b\x0d\xd6\xc1\x0f\xe3\xb0\x42\xd8\x9d\x4d\xa1\x58\x81\xd7\xf1\x92\x57\x64\xc6\xcc\x1d\x63\x62\xb7\x9e\x96\xb3\x63\x7d\xe2\x1d\x35\x91\x83\x68\xa1\xa1\x08\xb1\x9d\x90\x69\xe7\x98\xc3\xe5\x1e\x4f\x0c\x78\x21\xbe\xdb\x14\x51\x60\x78\x79\x31\xe3\x45\xd8\x8e\x77\x05\x80\x54\x1c\x9c\xab\x79\x59\x06\xd6\xc6\xd6\x3b\x47\xbf\xde\xa5\x34\x71\x6f\x18\xfd\x6a\x56\xbf\x73\x0e\x83\x27\x79\xcb\x44\x48\x12\x87\xe3\x3e\xa0\x53\xd8\xbd\x6a\xdd\xdc\xb9\xad\xdf\x08\xe7\x0e\x04\x2f\x10\xdf\xb1\x3b\xa7\xb1\x29\xbe\xfd\x96\x30\x0c\x54\x25\xb0\x2b\x7c\x4b\xc3\x98\x9a\x84\x33\x35\x1d\x4d\x3a\x49\x46\x95\x4e\x3e\x00\x0b\xe9\x47\x0e\x9c\x18\x69\x0e\xe4\xfd\xdc\xac\xad\x2d\xc0\xee\x7b\x39\xac\x53\x9c\x95\xeb\xee\x30\x3a\x41\x15\x3f\x44\x22\x2b\xac\x61\xd4\x15\x71\x81\xc7\xa5\x16\xe0\x2b\xee\xb7\xa3\x2f\xe6\x76\x45\xd0\x3d\x02\x81\x12\x00\x2d\x6f\x0e\xcc\x07\x5d\x50\xc7\xfa\x57\xcd\x57\xb4\xb0\x62\xb8\xfd\x8b\x29\xa4\x8f\x86\x7f\xf4\x94\xc8\x76\x43\xf5\x6d\x1b\xde\x65\xe3\x4a\xe6\x6d\x34\xf7\xd4\x4f\x1d\x7c\xc4\xee\xcd\x17\x88\x6a\x07\x29\x35\x55\x7c\xc5\x0b\xb6\x60\xaf\x74\x46\x51\x85\xd9\x37\x32\xe2\xec\x81\x71\xc1\xce\x54\xb2\xd0\x8d\xef\x89\xfa\xe4\x79\x70\xc2\x2c\x28\x17\x50\xdd\x3e\x42\x5b\x75\x9d\x6a\xcc\xde\xe7\x46\x93\x8a\x2a\xbb\x0b\x7d\x96\x3e\xc6\x33\x66\x52\x16\xae\x1c\x5a\xb1\x6e\xc7\xc5\xfb\x43\x58\xc1\x81\x2e\x7f\x16\xec\xee\x67\x3b\x0a\x4d\xe6\x05\x5d\xb4\xf1\x14\xcc\x7b\xec\x1e\xcf\x68\xe2\x80\x07\x27\x1a\x6a\x7d\xd5\xf6\x1e\xbb\xa3\x6b\xdd\x52\x2a\x84\x6e\xf7\xfe\x37\xca\x8b\x13\x90\x27\x54\x93\xa6\xef\x7e\xf1\x1e\xdb\xbe\x39\x01\xe7\xfe\xf9\xd9\xf4\xe7\xeb\xbf\x5d\xff\x7c\xf6\xf2\xdd\xc5\x65\xef\x87\x5d\x4a\xc3\x10\xda\x62\x1e\xca\x3e\x6d\x32\xb2\x26\x52\x4f\x00\xb7\x0a\x8c\xcb\x22\x97\x77\x91\xe0\x7e\xbb\xa7\x18\xed\xe7\x3d\xa1\x55\x75\xa6\x4a\xa9\xa6\x4a\xce\x79\xd1\x5b\xe3\x4f\x75\x82\x37\x86\xe3\x61\xbe\x67\xee\xe3\xf6\xba\x41\x8a\xc9\xed\x6c\x92\xe0\xca\xe0\x40\x64\x68\x1f\xd3\x1f\x56\xb4\x19\xce\x3f\xd2\x9b\x43\xec\x7f\x88\xf6\xba\x67\xf6\x4e\xe0\x65\x87\xd1\xf3\xcf\x53\xb8\x06\x0a\x99\xd1\x02\xea\xe4\xc7\x6d\x7c\x92\xd8\x30\xd9\x1c\x57\x40\x38\x42\xfd\x76\x26\x85\xa4\x39\xc6\xb0\x50\xf8\xe7\xcc\x57\x6f\xf4\x6a\x17\x64\x2d\x44\x0d\xe4\x06\xc9\x1e\xa0\x3f\xcf\x90\x52\x29\xd6\x68\x35\x1b\xdd\x4b\x2c\x5a\x19\xd5\xe5\xbb\x6e\x0e\x88\x7b\xcb\x0e\x97\x57\xec\x99\x6b\xba\x71\x07\x8c\xcf\xc1\x9f\x02\x7e\x4e\x6b\xa8\xaf\x2b\x74\x70\xbe\xf5\xcb\x10\x51\x60\x3b\x91\xf1\x0c\x0f\x39\x90\xdd\x89\xf3\xd3\xec\x48\x4c\x06\xbf\xe5\x76\x06\xe7\xad\x90\xf6\xdb\xc6\xeb\x20\x98\x11\x1e\xb9\x1f\x7f\xa4\x05\xcf\x1b\xf9\x9f\xc0\x39\xd5\x2c\x31\x19\x07\x47\xab\x52\x6c\xbc\x7d\xbc\x62\xed\xfd\xab\x5a\x18\x5e\x32\x4f\x7f\x3a\xde\xd0\x89\x14\xfe\xfa\x48\x37\xe5\xa0\x92\x6c\x74\x42\x7e\x10\x70\x5e\x05\xcb\xc9\x98\x08\xd9\x2e\x11\x13\x73\xa9\x32\x70\x3c\xec\x75\x83\x67\xb4\xa2\x33\x5e\xf0\x18\x61\x9e\x6a\x83\x43\x81\xe0\x60\x3c\x80\x01\xca\xf3\xd3\x5c\xc9\x0a\x6f\x62\xcf\x4b\x16\x9f\x95\xd9\xe5\xbf\x09\x0b\x81\x39\x4f\x54\x67\x20\x0b\x45\x85\x69\xf1\x7b\x5b\x1b\xe7\x3f\x51\x07\x49\xa1\x04\xd0\x3c\x5d\xa9\xed\xb3\xdc\xca\x8c\x70\xd9\xa2\xcf\xd5\xa1\xd5\x3c\x3a\xf7\x2f\x17\x70\xcc\x90\xe9\xfb\xeb\x8b\xff\xbb\x71\x6e\xfa\xab\x76\xd8\x0e\xbb\xe2\x89\x95\x07\xc9\xb6\xcd\x15\x2b\xe5\x6a\xd8\x38\x5f\xfd\xc6\x69\x1c\x44\x7b\x27\x03\xbf\xaa\xc3\x88\x33\x17\xc1\xd0\xa0\x78\x6f\xff\xcb\x64\xda\xf0\x66\x76\x9f\x1a\x02\x74\x15\x23\xf6\x2b\xc2\x70\x80\x4b\x07\xde\x5a\x23\xb1\x98\xbf\x53\xbb\xe2\xea\x44\x84\xb7\xeb\x9c\x16\xfa\x4b\xbd\x22\x63\x5c\x3b\x95\x92\xd9\x3b\x59\x8b\x34\xec\xe2\x11\x3b\xae\x19\x08\xc9\x99\x90\xc6\x79\x53\xc0\x96\x90\x73\xf8\x2d\xc1\x9c\xb5\xa0\x70\x48\x47\xcf\x89\x50\xb3\x6e\x02\xd5\xaa\xc1\xaf\x78\x3d\x1c\xed\x17\xa8\x9f\xbc\x53\xaf\x6a\x53\xd8\xe6\x11\x48\x06\xc5\x68\x8e\x40\x1a\x6a\x96\xc8\x68\x5f\x52\x7d\xcb\x72\xfc\xe0\x0b\xdd\x99\x11\x42\xd6\x4e\xc8\x7b\x51\xac\xaf\xa4\x34\xdf\xf3\x82\xe9\xb5\x36\xac\xdc\xf7\x2e\xfd\x6b\x03\x4b\x0d\x1d\x8a\xe0\x23\xa6\x30\xe4\x31\x2c\x22\xc8\xa8\x79\x33\xea\xf8\x5a\x18\x76\xe5\xfe\x43\x25\x94\xaa\xc5\x99\x7e\xad\x64\xdd\x5b\x9f\x4a\x69\xfb\xbd\xbe\x78\x09\x97\x50\xed\xc8\x97\x85\x51\xeb\x4a\x72\x61\xbc\xf7\x29\x61\x00\xe5\x07\x47\x73\x1d\x4a\x99\x68\x46\x5b\x42\xde\xd1\x35\xa1\x85\x96\x8d\x7b\x4b\xec\x0a\x7d\xfa\xb8\xaa\xfd\xf5\x4c\x9a\xe5\x56\x40\xb5\x6f\x1a\x8d\x6d\xdb\xfd\x8d\x02\x0e\xe7\x16\x9c\xc2\xc5\x56\xb7\x06\x18\x56\x2a\xc5\x32\x96\x33\x91\x7d\xa9\x27\x62\xdf\x94\xc2\x70\xaa\x2e\xa5\xb0\xe2\x75\xdf\xe7\xea\xa2\xf1\x15\xba\xd5\x08\x4f\x11\xb8\x95\x5d\x40\x8f\x02\xfd\x36\x08\xd7\x5a\xc7\xa0\x40\x2f\xe6\x10\x81\xc4\x4d\xf7\x97\x7a\xc6\x0a\xbb\xd8\xbc\x28\x3c\xf2\x1d\x61\x02\xbc\xa4\x0b\x46\xa8\x69\x0e\xa1\x91\x84\x09\x5d\x2b\xb7\x6f\x7a\x66\x38\xd9\xd6\x24\x67\xb9\x57\xfb\xe1\xe2\x25\x79\x4e\x8e\xed\xbb\x21\x7a\x6f\x4e\x79\x01\x8c\xde\x1e\x37\x1b\xea\xe3\x73\x9f\xdf\x15\x35\x05\x20\x47\x88\x54\x78\xb5\x8c\x88\x90\x44\xd7\xd9\x32\x40\xff\x37\xde\x59\x57\xde\x29\x8a\x14\x64\x10\x3b\xe9\xee\xc3\x1f\x34\xeb\x0d\x57\x4d\x79\x1d\xfe\xf0\x19\xaf\xc3\xd0\x5c\xb3\xc7\xbf\xbb\x60\x78\x56\x4b\x66\x68\x4e\x0d\x75\xd7\xa4\xff\xc2\xb0\x6b\x87\xcb\x32\xe2\xb2\xd4\xec\x2d\x17\xf5\x3d\x16\x50\x39\x88\x10\xc4\xf5\x2b\x18\x11\xc9\xfc\x42\xcb\x20\x86\xe6\xa3\x05\x09\xd2\x25\x2e\x3a\xc7\x68\xf4\x80\x05\x0c\xb7\x04\x45\x1e\x4c\xc8\x68\xa4\x22\x97\xe5\xd6\x20\xad\xc9\xce\x68\xb6\xec\x3d\x9a\x00\xc1\x31\x1c\x4c\xd7\xfe\xb3\x83\x33\x90\x4a\x9a\xcc\xcf\xfe\x16\x12\x53\xb9\x6e\x76\x2e\x66\xaa\x16\x74\xc6\x0a\x47\x51\x8b\xbc\xe5\x09\x4f\x58\x22\x7f\xb4\x92\x09\xe1\x29\x57\x12\x51\x55\xb4\x99\x08\xfb\xf8\x2f\x62\x1e\x92\x02\x21\x6e\x1c\xd2\xa3\x9d\x07\xf0\x47\x7e\x09\xf3\x50\x47\x28\x88\x64\x73\x1e\xac\xb6\xd9\x9d\x07\xd0\xbf\x0e\x7d\x1e\x34\xcb\x32\x59\x56\x07\x82\x5a\xbc\x41\x44\xbc\x1d\xd1\xa7\x22\x14\xbb\x5f\xa6\x51\xd0\x63\x57\x16\x8b\x1a\xbc\x07\x7d\x6d\xac\xff\x1d\x5c\xe7\x20\xed\x36\xef\x78\xd7\x7b\x34\x3a\xb2\xe9\xd1\x3d\xf0\x3f\xf1\xc6\x1b\x20\x91\x9d\xf6\xd9\x21\x91\x01\x7b\x3d\x05\xf7\x7c\x07\x9e\xf8\x35\x00\x23\xad\x11\x00\xf3\xca\x04\x30\xf2\x54\xd4\x2c\x47\x2e\x7b\x74\xc5\xbc\x78\xbe\x45\x8f\xd7\x11\x48\x1c\x3f\x20\x2f\x6e\x5a\xfc\x28\xb2\xda\x27\xc5\x51\xee\xc2\x4e\xe2\x77\x2e\xdf\xdf\x84\x9c\xf6\x54\xac\x91\xaf\x31\x82\x61\x0c\xdb\xe1\xa9\x15\x4f\x89\xaf\xdc\x5c\xc5\xa7\x86\x57\x46\x3d\x6f\x37\xba\xf2\xf3\x9d\xd2\x4f\x43\x5c\x6e\xe2\x2d\x93\x0e\x61\x13\x7c\xb9\xdd\x47\x82\x95\x8b\x3e\x02\xee\xea\x3c\x20\x07\xc8\x5f\x71\x44\xde\xca\xce\x3c\x81\xa0\x0e\x9d\x20\xb4\x88\x2d\xe1\x86\x6d\x97\x17\xc4\x9f\x82\x86\xd6\x7d\xdb\x1b\xd0\x2d\x7e\x1a\xd3\xfb\x47\x3c\x18\x5f\xb6\x27\xa2\xb0\x16\xc5\x17\xee\x87\x58\x94\x9a\x9e\x2b\x96\x23\x66\xe9\xba\x62\xd9\xa1\xdc\x16\xaf\xdf\x5d\x9f\x75\x47\x06\xba\xb0\x2b\x62\xc1\xe0\xf7\x84\xe6\x25\xd7\x1a\x02\x3e\x6c\xb6\x94\xf2\x36\xaa\xcb\x63\x9f\xf6\xba\xe0\x66\x59\xcf\x26\x99\x2c\x83\x0c\xd8\xb1\xe6\x0b\x7d\xea\x24\xca\xd8\x4e\xdc\x09\xe1\xa2\x68\xb2\x86\xc1\x5b\x08\xbc\x5c\xfd\x69\xdd\xc2\x97\x27\x59\xf3\xf6\xb0\xf5\x20\x57\xa4\x81\x49\x6f\x4f\x0f\x54\x1a\x81\xcd\xbb\x77\xad\x63\x7b\x57\xc5\x55\xfe\xdb\xd8\x59\x0f\xbc\x7b\x58\x35\xc3\x45\x71\x76\xce\x23\x1a\xaf\x7b\x9f\x24\xa7\xf4\x67\x4c\x47\xa1\x51\x53\x9e\xb9\x37\xed\x90\x42\x5e\x3b\x3e\xef\xb0\x33\x75\xf3\xdf\x21\xbc\x7d\x64\xff\xd2\x43\x24\x8f\x52\x15\x7a\x39\x2b\x0a\xbb\x90\xd4\x91\xa0\x05\x48\x4b\x30\x4d\xba\xec\x72\xc8\x7f\x6b\x8d\x85\xf0\x2d\xe0\x22\x89\x13\x0a\xc8\x41\x66\x2f\x03\xc7\x5f\x61\x37\x10\xf4\x4d\x49\xc9\xef\xed\x08\xc3\x1e\xbb\x84\xad\x10\xf8\xdf\xfd\xeb\x88\x4a\xd7\x04\xc0\x07\x0d\x7f\xf9\xc8\xae\x50\xd8\x89\x4f\x54\x36\xf6\xda\xb2\xbf\xb8\x64\xc6\x1a\x6a\x38\x6f\x61\xf4\xc1\x1a\x56\xaa\x4e\x70\x18\x62\x22\xc3\x24\x8c\x0e\x27\x95\x14\x91\xe7\x01\x22\xc5\x6e\x4c\x56\x07\xf1\xca\xdb\xe7\x8a\x1c\x93\x1d\xa9\x34\x9f\x2d\x82\x4c\x3e\x3d\x8a\xfc\x84\xb1\x2a\x72\x28\xf1\xaa\x48\xa9\x1f\xf2\xee\xee\x8d\xf3\x24\xe4\xfe\xe5\xdb\xe0\xa5\xa9\xcc\xb7\x28\x81\x81\x58\x98\xd3\xa2\x7f\x51\xd5\x8b\x79\x48\xa3\x29\xa4\x73\x8f\x60\xa9\x71\xc4\xcc\xdf\xb3\xac\x36\x2c\x77\xcc\xe0\xce\xa5\x8c\xac\xc2\xdd\xd1\xf4\x1e\x81\x4f\x98\x9f\x31\x00\x28\xe9\x51\x5b\x16\xcd\xd9\x3a\x0d\xd7\xea\x88\xfc\x3f\x90\x92\xda\x93\x5b\x15\x7c\xc5\x04\xd3\x7a\xda\xfc\x79\xdf\xa9\x00\x92\x8c\x8c\x0a\x6f\x5b\xd9\x33\xed\x3c\xdc\x8e\x01\xdc\x71\x6a\xcc\x18\xa9\xa8\xa2\xa5\xbd\x83\x35\x71\xcb\x33\x63\x0b\x8e\x29\x7a\xc1\xa5\xd8\x50\x88\xf7\x23\xb8\x05\xc3\x86\x1b\x52\xf2\xc5\x12\x4f\x0b\xa1\xa4\x90\x62\x41\x3c\x6e\xac\x90\x34\x27\x20\x58\xa4\x22\x77\x54\x95\x56\x17\xa0\xd9\x12\x40\x68\x54\x90\xbc\xb6\xe7\x81\x00\xe1\xf5\x7a\xac\x0d\x35\xcc\x11\xd3\xf5\xf6\xc1\xf9\x69\xda\x43\xb9\xd6\xa7\xae\x93\xbf\x67\x6e\x1b\x7b\xd2\x92\x78\x41\x5e\xdd\xb3\xac\x39\xd6\xc8\xfe\x5c\x96\x40\xde\x27\xfd\x71\xf6\xcc\x6d\xd1\xca\xe0\x81\x98\xca\xee\x0d\x0f\x45\x37\x39\x77\x13\xce\xbd\xf5\x89\x3f\x5a\x7b\xb4\xbb\x08\xda\x07\xb1\x82\x02\x46\xc0\x54\x2d\xd5\xad\x3d\xb9\xc8\xd7\x23\x55\x53\x39\x3f\x6a\x58\x7e\x1c\x40\x5f\x2d\xa5\x21\xc7\x47\xa7\x47\x27\x5b\x7b\xe1\x48\x87\x69\x06\x98\x9d\xdc\xbe\x90\xe6\x65\x55\xac\xe1\x1d\x8e\xb0\xfc\x76\x24\x99\xa0\x07\xac\x36\xa5\x28\xf5\x92\x15\xc5\x88\x68\xab\xfe\x52\x5f\xcf\x03\x3f\xb5\x5f\x32\xaa\xce\xd0\x4d\x76\x7c\xf4\xcb\xd1\x88\x30\x93\x9d\x90\x3b\x29\x8e\x0c\x06\x3c\xc8\x0d\xd8\x90\x51\x63\x6a\x06\xb1\x96\x35\x11\x8c\xb9\xb3\xd3\x14\x8e\xca\xa8\x35\x7f\x6a\xd4\xd1\x91\x00\x83\x15\x45\x9c\x3e\xf7\xea\x9e\x1b\xab\x8a\x98\x1a\xdc\x14\xcf\xd1\x52\x60\xc0\x09\x4f\x35\xdc\x74\xa7\x4b\x46\x0b\xb3\x5c\x37\xd6\xcb\xbf\x99\x92\x50\x2b\x54\xb8\xdf\xc4\xeb\x50\x07\x90\xc2\x79\xb8\xc9\x94\x56\xc1\xa8\x15\xbb\x59\x2a\xa6\x97\xb2\xd8\x7b\x4a\xe5\x3b\x57\x7a\x2d\x93\x42\x5b\x99\x62\x4d\x6c\x37\x46\xdd\x64\xb3\xa1\xce\xe2\x6a\x1d\x48\x38\x65\x8a\xe5\x4e\x59\x72\xe5\x27\x96\x74\x05\x9a\x82\xd5\xe7\x58\x1e\x63\x9a\x84\x36\xd1\x6f\x27\xcd\x08\x9b\x14\xb8\x17\x07\x02\xdb\xec\xc9\xe3\xb8\x50\x55\x9a\x5b\xfa\xf5\xd5\xf4\xbc\x73\x4b\xc3\x07\x6f\xe0\x18\x9f\x2f\x59\x76\x7b\x15\x57\x59\xf5\x40\xa0\x05\x95\x54\xfb\x54\x0c\x4a\x99\x1f\x8c\xc7\xa2\x84\x50\x63\x87\xfd\x35\x93\x42\x30\x24\x5b\x87\xdf\xfa\x23\xbb\xb0\x7b\x01\x45\x3a\x1e\xdf\xb8\xab\xe5\x1a\xbd\x49\xcf\x6e\xde\x5e\x3f\xf3\xf8\xa0\x9b\xb7\xd7\xc0\x8f\x69\x6f\xb1\xcc\x4e\xf3\x1c\x4c\x4e\xb2\x62\x0a\xff\x19\x1d\xa6\xf7\xbd\x4e\x0b\xca\xc1\xe2\x6f\xfa\xa6\xa4\xf2\x9f\x91\x63\x0e\xa2\x4b\xb1\x93\x70\x36\xda\xbb\x36\xd2\x13\x37\xdf\x28\x6f\x16\x48\x44\x48\xbf\xfd\xe8\x50\xf6\xee\x8b\xb6\x27\x28\xd9\x16\x9e\x4a\x65\x88\xa8\xcb\x19\x53\xde\x27\x06\x7b\x4d\x33\xb5\xe2\x19\x9b\x90\x4b\xfc\x9d\xc7\x97\xf8\x62\xd6\x54\x2c\x18\x79\x61\xd7\xef\xf7\xdf\x7e\xfb\xdb\x6f\xe3\x27\x25\x9e\x97\x37\x0d\x27\xaf\x7b\xf1\x43\x91\x11\xd7\x38\x9c\x5d\xf1\x12\x37\x52\xf0\x4b\x14\x34\x6b\xd6\x66\xb1\xfb\xde\x88\x73\xac\x6b\xc6\xc8\x8e\x88\x9b\xbd\xfd\xf0\x3f\xb3\x42\xce\x4e\x4b\xaa\x0d\x53\xd6\x4c\x77\x9a\xe9\x18\xd8\xab\xb9\x58\x4c\xca\xfc\x64\x12\x07\xe4\xf0\x9e\xa1\xad\x0a\x85\x1d\xd6\xa2\x07\xaa\x0d\xda\x49\xd9\xfb\xc9\x25\x7e\x94\xdf\x91\x67\xfd\x8a\xd3\xd9\x25\x78\xcd\xd2\x24\x53\xbe\xb9\xb9\x99\xbe\x66\x26\xd4\x39\x04\x7c\x48\x5e\xbf\xba\x69\xaa\xd7\xdb\xdd\x85\x79\x79\x83\xe2\x11\xa3\x78\x2c\xa5\x4e\x27\xb5\x13\x84\x0e\x51\x94\x40\xa9\x3d\xb8\xd9\x88\x91\xa3\x4e\xa1\x64\x0f\xa5\xbd\x98\x4e\xc8\xdf\x64\x0d\x77\x24\x9d\x15\x6b\x72\x47\x91\x20\xa3\x1f\x43\x79\xdb\x9e\xd9\x61\x3c\xb3\x52\xcb\xee\xea\x37\x8c\xe6\x58\xfa\x14\xbc\x93\x7b\x3f\xab\xc1\x98\x92\x2d\xdb\x79\xad\x8d\x2c\xad\x1e\x07\xaf\x8a\x73\xd8\x5c\xa9\x4e\xbd\xc7\x23\x08\xe1\x4b\x4d\x14\xab\xd0\xe0\x77\x7f\xf3\x55\x98\xf3\x5b\x52\x08\xe7\x39\x28\x2e\x45\x49\x16\x4e\x95\xb3\x55\xc1\x0b\xcf\x9d\x8c\xea\xed\xd5\x6d\x5b\x92\x22\x35\x24\x51\xa1\x1a\x02\x42\xca\x1e\xca\xe8\x87\xc4\xc7\xd1\xd3\x94\xbc\xb1\x4d\x44\x46\x88\xb1\xa5\x2d\xb8\x41\x5c\xb4\xd8\x6d\x2e\xc4\x90\xd9\x81\xc6\x92\x5c\x12\x1f\x0f\x69\xea\xf1\x52\x21\x05\xcf\x30\x22\x47\xea\x4a\x0a\x22\x6b\x53\xd5\x06\xbc\x99\x19\xd5\x6c\xbc\xa2\x8a\x5b\x81\x6a\xfb\x6f\xff\xb0\x16\xf6\xb4\x1b\x29\xc1\xd5\xd7\xe0\x26\x70\xc4\xf1\xc3\x4c\xa4\xcd\x10\x5f\x4f\x25\xf1\x0a\x6f\x2d\x4e\xfc\x8e\x26\x07\xed\x46\x24\x58\x92\x7e\x99\xce\xac\xa3\x66\x09\xe0\x54\x08\xc7\x7a\x6c\x33\x08\x4e\x6b\x36\x1c\x40\xee\x58\x52\x2b\x36\x52\x24\x00\x64\x44\xaa\x0d\x3b\xd8\x8e\x70\x7b\x0e\x13\xc1\xa5\x9e\xde\xac\x76\xaf\xe5\x7b\xa0\x82\x5c\x9c\x5d\x9e\xfd\x7c\xfd\xe3\xf9\xcf\x97\x67\xef\x5e\xc5\x3c\x9a\x8a\xf5\xfb\x79\xdc\x99\x1f\x27\x2c\xc7\x33\x7e\x92\x93\xcd\x85\x19\x4b\x35\xc6\x87\x7e\x07\xc8\xab\xfe\x9b\x5d\x49\x23\x33\x99\x2e\x89\x38\x72\xc3\x4f\xdd\x78\x88\x66\x05\xcb\x5c\xf9\xb7\x3b\x8e\x85\xb6\xf1\x37\xdd\x60\x41\x1a\xf7\x17\x21\x97\xbc\xe8\x18\x19\x56\x22\x9d\xbe\x98\xf4\x8e\x01\x90\x54\xe2\x48\x67\x4b\x76\x38\x58\xb6\x6b\x18\x4d\xc8\x42\xe8\x17\xa0\x2d\x80\x1e\x47\x4b\x49\x36\x22\x33\x76\x21\xf6\xba\x08\x0e\xba\xf4\x92\x15\x74\x7d\xcd\x32\x29\xf2\xbd\xa7\x80\x5c\x36\xd7\x81\xc6\x01\x35\x75\xdf\xd9\x06\x2d\x9f\xaf\xfc\xec\xaa\xd5\x7b\x10\x52\x88\x9b\xc2\xf7\xeb\x0d\x8d\x21\x87\x07\x8f\x21\x07\x13\x83\xab\x98\xe2\x00\x3b\x3c\x84\x5d\xf3\x46\xde\x11\x39\x37\x4c\x90\x63\x2e\xfc\xce\x39\x09\xfc\x68\xad\x58\x8d\xa7\x6c\x34\x92\xbc\x78\xee\x3b\xf9\xfa\x82\xab\x0e\x4e\x78\xd0\xe1\x75\x37\xc6\x8f\xc7\xd7\x5b\x6c\x64\x37\xc6\x1e\x03\x52\x24\x1b\x62\xfc\xc5\xa4\x49\x86\x7d\x01\xe3\x69\x44\x11\x15\xb9\xc7\xb5\x7e\x7d\xfb\xc4\x64\xd5\xb5\xcc\x6e\x13\x39\xc6\x6f\xce\xa7\xf8\xb4\x0d\xd0\x5c\x13\x8c\xb4\x46\x81\xfd\x16\x98\x08\x83\x5b\xfc\x60\xdc\xe2\x47\x98\x3b\x4a\x8b\xef\x1e\xed\xe2\x3e\xda\xb7\x02\x7a\x50\xf6\xb0\x53\x7c\x54\xb7\xe4\xd1\x60\x0f\x3f\xd0\x06\x7b\xf8\x11\x0d\x33\xd5\x00\x4e\xf2\x5a\xd1\x8c\x4d\x0f\x49\x79\xf3\x02\x84\xe4\xb5\x72\x75\x24\x1b\x1d\xae\x11\x17\x82\xb1\x1c\xe5\x87\x7b\x15\x46\x16\xf6\x4d\x30\x07\x03\xbc\xbc\x6d\xf6\x42\xad\x22\xd4\xbc\x9b\xa5\x7b\xb4\x53\x71\x3d\x0c\x60\xd7\xe8\x5a\xdb\xa4\x6a\xaa\x1f\xf8\x32\x41\xee\x38\xd9\xc1\x5b\x5b\x44\x33\xd1\x3f\xe0\x41\xc3\x15\x24\x9a\x2f\xec\x74\xb9\x52\xf0\x98\x88\xd0\xd4\xda\x6c\x07\x62\x7b\x9d\x4b\x95\xf1\x59\xb1\x26\x4b\x5a\x58\x63\xe9\x8e\x9b\x25\xa1\xe4\x96\x17\x85\x7b\x4c\xff\x89\x02\x68\xd1\x92\xbb\x1c\x42\x48\x8a\x80\xc9\xa0\x2e\xf1\xeb\xbe\x62\x99\xed\x33\x2b\x18\x15\x75\x85\xe3\xb4\xfa\xd1\x5a\xd6\x09\x72\xbf\x3c\x34\xa1\xd1\xa7\x04\x77\x1c\x47\x58\xa9\xf1\x83\x7b\xbe\x9b\xc1\x4f\xde\x9b\x25\x53\x77\x5c\x33\xac\x1c\xd9\x7b\x4c\x38\x96\x6e\xdd\x48\xfc\xac\xe1\x69\x72\xe9\xc9\x76\x5b\x40\xbe\x7c\xef\xbe\x7e\x84\xe7\x7a\xd1\x2a\xa4\x18\x0b\xb6\x40\x36\x18\x27\xd0\x10\x36\x8e\xfd\x23\x48\xb9\x49\x69\xd2\x46\x56\x84\x97\x25\xcb\xad\x7d\x5c\xac\xc9\x8a\xd3\xde\x23\x01\xe6\x99\x76\x47\x91\x63\x21\x89\xac\xec\xd5\x55\x0b\x6e\xd6\x10\x73\x5d\xd6\x86\xe4\xf2\x4e\x44\x24\x75\xde\x38\x20\x0a\x25\x33\x66\xa8\x8b\x52\xd8\x43\xe0\x54\x32\x4d\x98\xa0\xb3\xc2\x9e\x3d\xc8\x44\xba\xd9\xb9\x01\xc8\x9c\x51\x53\x2b\x46\x16\xd4\x44\x48\x89\x1d\xda\x3c\xae\xe7\x87\xb7\x1d\xd7\x2e\xa2\x1a\x49\xf6\x7e\x18\xf4\xa9\xf6\x44\xcb\xda\x1c\xc8\x3d\xf2\x90\xeb\x08\x79\x74\x02\x23\x91\x97\x4c\x13\x59\x27\x2a\x30\xf3\xc2\x75\x97\xd2\xc2\x1b\xfc\x4e\x3b\x9b\x36\x39\xef\x55\x66\x3c\xc5\x16\x7b\xa0\x42\x88\x4b\xf6\x0f\x48\x72\x67\xf5\x7c\xce\x14\xdc\x74\x30\xe0\xad\xdc\x9e\xa6\x70\x9f\xbf\xc3\xfa\x39\x6f\x1d\x24\x8f\x99\x11\x14\x28\x71\x8c\x35\x0f\x74\xe9\x98\x7c\xa1\x2e\xb7\x62\x1a\x0a\x4e\x08\xf2\xea\xfd\xf7\xfd\xb6\x68\x8a\xf2\x25\x71\x79\xf1\xf0\x9e\xef\x45\x3f\xd4\x68\xda\xfd\xb0\x8b\x5a\xca\x6d\x8b\xac\x90\xda\x71\x30\xc0\xba\x64\x4b\x2a\x04\xf3\xce\x28\x6e\xc0\x93\x3d\x63\x4c\x10\x59\x31\x84\x4d\xf6\x1a\x0c\x25\x9a\x8b\x45\xc1\x08\x35\x86\x66\xcb\x89\x1d\x9d\xf0\x7b\xa1\x25\x3b\x70\x9f\x68\xa3\x18\x2d\x71\x4f\x28\x56\x52\x8e\xdd\x13\x9a\x29\xa9\x35\x29\xeb\xc2\xf0\xaa\x79\x58\x3f\x2f\x22\x03\xda\x19\x8d\xb9\xef\x7e\xad\x20\x77\xad\x65\x55\x18\xb5\x23\x74\xaf\x2f\xc3\xea\x64\xe0\x3a\x1b\xd9\xdf\xb2\xb2\x32\xeb\x26\xfb\xb9\x9f\x0d\x34\xe7\x4a\x1b\x92\x15\x9c\x09\xe3\xde\x0c\x79\x4d\x61\x0c\x23\xaf\x4e\x0b\x37\x23\xda\x4d\x89\xc8\xc1\xf8\xae\x8c\xc6\x24\xdf\x66\x10\xfe\x51\x39\xd7\xce\xd7\xa1\xfb\xa5\x18\x53\x5f\x8a\x0a\x37\x8e\x9f\x11\xd8\x3a\x5e\xc1\xc1\x11\xb9\x8f\x82\x21\x04\x85\xf5\xdb\x04\xed\x38\xb9\x32\x2f\xe8\xa2\x39\xd7\xa3\x0e\xb1\x49\x6b\x5b\x40\xbe\xdd\x96\xd4\x81\x0d\x25\xd8\xca\x9e\x03\x96\x31\xab\x8a\xd2\x84\x42\xe6\xb3\xcb\x98\x40\x97\x7b\xc7\xb4\xa6\x0b\x36\xed\x09\x18\x49\x21\x70\x5a\x47\x1b\x20\x4d\xda\x6d\xb3\x64\xc8\xa6\x67\x64\xf0\x49\x98\x49\x1a\x1a\x8f\x25\xbe\x48\xaf\x11\x78\xa3\xe9\x4e\x71\x63\x18\xec\x52\x28\xdd\x06\x10\xc1\x4d\x86\xe0\x6e\x06\x6b\xaf\xfe\xdc\xa4\x87\xfd\x59\xf5\x43\xe4\x98\x0b\x3a\x63\x64\xa6\x38\x9b\x93\x39\x87\xe4\x54\x48\xdb\x1c\x61\xa9\x13\x0a\xc8\x6a\xaa\x35\x53\xf0\xda\xce\x2d\xe0\x5f\xbf\xdf\x78\xfe\xea\xde\xdf\xa8\x5a\x64\x34\xa8\xc9\x0b\x04\x86\x7c\x4e\x16\x90\x2a\xea\x8c\xe0\xdf\x3d\xff\xe3\xef\xc9\x6c\x6d\xf5\x35\x30\xc4\x8c\x34\xb4\xf0\x03\x20\x05\x13\x0b\xbb\x8a\x20\x72\xfb\xc9\x8d\x0e\x09\x5e\xb3\x38\x05\x2f\xb9\xc1\x09\x7a\xf1\xcd\xed\x2c\xea\xe8\x81\x7c\x3c\xcd\xd9\xea\x34\xd8\x42\xe3\x42\x2e\xfa\x3d\xf5\x3c\x05\x65\x41\x94\x9f\x6d\xc7\x89\x96\x05\xcf\xd6\xfb\x3a\xd3\xbe\x42\x12\x59\xca\x3b\x74\xe6\x6c\x1f\xd5\x80\x4f\xaa\x92\x55\x5d\xc0\xc4\x91\xef\x1b\x12\xd0\x5a\xb3\x4d\x7e\xb5\x58\x27\x61\x20\xed\x20\x88\xea\xba\xdd\xb8\x73\x5c\x9e\xb4\x1f\xa6\x74\xec\x36\x2e\xe6\xd6\x14\x3b\xea\xed\x8d\xfb\x9e\x16\xc5\x8c\x66\xb7\x37\xf2\xad\x5c\xe8\xf7\xe2\x95\x52\x52\x75\xdf\xb9\xa0\xf6\x4e\x5f\xd6\xe2\x16\xca\x66\xb7\x8c\xd7\x72\xe1\x50\x9f\x9e\xa4\x24\x78\xbb\x5e\x83\xf1\x6f\x89\x1c\xc4\x5e\x25\xf1\x3e\xb8\xb6\x67\x76\xcf\x5b\x47\x9b\x20\xcc\x8e\xb9\x2f\xcb\x07\xeb\xbc\x87\x0e\x8f\xf6\x37\xcf\x7f\xf7\x07\x14\x2e\x44\x2a\xf2\x87\xe7\xc0\x6b\xa0\x47\x78\x01\xc0\x0d\x6c\x55\xad\x92\x16\x45\xdf\x28\x41\x28\x02\xbe\xef\x5d\x8d\xfe\x00\x8e\xbc\xd9\xdb\xe9\xfe\x64\x93\xf1\xe6\xe6\x6f\x60\x2f\x72\xa3\x59\x31\x1f\x21\xa5\x54\xe3\xd6\x3a\x02\xed\xea\xc8\x5d\x79\xfd\xe9\xc8\xf6\x6f\xb4\xad\x64\x51\x97\xec\x25\x5b\xf1\xac\x5f\x00\xb3\xb3\x2a\x9d\xa7\x79\x37\x7d\xc1\x35\x30\x8d\xcd\x0a\x99\xdd\x92\xdc\xfd\x32\x48\x66\xd8\x2c\xa3\xdf\x7f\x16\xfa\xa6\x75\x44\xa4\x73\x3c\xf8\xfe\x9d\x44\x8e\x92\x56\x55\x43\x83\xa4\xe8\x5d\x67\x32\x40\x34\x01\x05\x73\x64\x18\x31\x3a\x98\x1e\x1b\x4a\x1f\xbb\x37\xb2\xd7\x54\xef\x47\xf4\xce\xfe\x88\x8f\xc4\xb7\xa3\xef\x1f\xc7\xec\x6c\x88\xf6\x81\xfe\x34\x54\xf0\x6f\x24\x75\xd9\xa2\xdf\x6b\x78\xcd\x9a\x8d\x81\x1a\xa4\xdd\x3e\x70\xcb\xf4\x77\x5f\x26\x08\x86\xc6\x65\xb1\x74\xe6\x45\x34\x41\xe8\x92\x1a\x67\x1f\xf9\x28\x3b\x25\x15\x53\x9a\x6b\xab\x3a\xfd\x08\x07\xea\xbc\xa0\xbc\x0c\xc2\x77\xfb\x9a\x84\xed\x9c\x87\x92\x56\xe3\x5b\xb6\xee\xb9\xe1\x22\x8f\xcb\x43\x29\x18\x25\xad\x7a\xde\x03\x50\x15\x3c\xfe\x1a\xe8\x79\x39\x4f\x65\xee\xc6\x01\xd7\x03\xd6\x20\x7f\x12\x33\x36\xa1\x0e\xb4\xef\x2b\xe7\xc7\x76\xe1\xba\x37\x8e\xfd\xa4\xb9\x72\xf0\x5b\x5f\xd3\x45\x03\xef\xf7\xa5\xde\x33\x33\x2e\x72\x58\xb2\x48\x9a\xff\x94\x80\xa7\xcd\x31\x6d\xaa\x6f\x9e\xba\x97\x16\xf0\x55\x77\x3c\x83\xf2\x4a\xb4\xaa\x8a\x35\xc0\x1e\x22\x46\xd1\x6c\x5b\x44\x12\xe0\xb6\xdd\x96\x01\x13\x72\xe6\x98\x8d\x21\xb4\x87\xd0\x0a\x21\xd9\x3d\xcb\xfa\xb9\x7c\xb1\x09\x99\xb3\xd5\xc8\xf1\x88\xe9\x9a\xe7\xe0\x27\xd2\x0c\x1e\x8f\xe5\xb8\xba\xaf\x6d\xbf\x09\xc4\xca\x42\x3a\x3a\x67\xd2\xd3\x9a\xc5\xe6\xe9\x7a\xed\x40\xa2\xd2\x9c\x6f\xda\xba\x00\x3e\x2c\x55\x03\x00\xc0\x5b\xc2\x48\xc1\xeb\xc4\x6d\x74\x4f\x1c\x9d\x7b\x45\xb5\xfc\x30\x0c\xc0\x2e\x22\xca\xa2\x3f\x6f\x6e\xb7\x34\x28\x80\x14\xe9\xdd\xd1\xc9\xdd\x49\x80\x67\x0f\xdd\xee\xfd\x09\x07\x1a\x91\x99\x48\xdc\x80\x5a\xeb\xae\x94\xae\x1e\xdb\xf1\x84\xbb\x43\xdc\xfa\xcc\x9c\x87\x7a\xaf\xba\x2c\xce\x85\x92\x15\x5d\x80\x07\xea\x10\x24\xf0\xe6\x98\x42\x42\xfb\xa5\xbc\xc3\xdf\xa3\xa8\xab\xdc\xb7\x58\xde\x56\x45\x59\xca\x28\x7a\x1b\x44\x08\xfb\x05\x74\x5e\x34\x24\x3e\xbe\xa3\x6b\x42\x95\xac\x45\x14\x21\x05\x04\x40\x9b\x00\xf9\xbb\x8d\x97\xbd\x94\x82\x79\x30\x4e\x3a\xc1\x07\xb8\x24\x2e\xc8\x8b\xc9\x8b\xe7\xd1\x63\xbf\x62\x59\xad\x34\x5f\xb1\x2b\x46\xf3\xf7\xa2\x58\x07\xc1\xd3\x8b\xf9\x54\x6a\xcd\x67\x05\xa4\xd0\x1a\x49\x5e\x59\x91\xc7\xf2\xed\x17\x6d\x00\x62\xf0\xc6\x52\x85\xd4\xe7\x11\x23\x3c\xc6\x03\x17\x02\xbb\x6d\x07\x11\xe8\xae\xc3\xb2\x18\x61\x5d\x37\x2c\xc6\xcb\xc6\x62\xc4\x3b\x65\xaf\xef\xaa\xdc\xa6\x38\x04\x49\xf2\xce\xc5\x00\xed\x98\xc6\x12\x76\xea\xdc\xc5\xf7\xe1\xa3\x3b\xc5\x8d\x3b\xdc\x77\x5c\x33\x72\x0c\xde\xc7\x8d\xcd\x18\x55\xed\x21\xf4\x55\xf7\x76\x6d\x62\x4b\x51\xad\x41\x6d\x1e\xdd\x43\x58\xa5\x6d\x79\xd2\x66\xda\xdc\x39\x47\x75\xbb\x82\x4e\xfa\xb7\xd7\xe8\x92\x8a\xbc\x88\x92\x19\xcd\xac\x14\xeb\x28\x56\xb2\x8b\x39\x09\x45\xa2\xc3\x29\x04\xa5\xa9\x96\xd4\xea\xa0\xa4\x64\x14\x80\xd8\xf6\x76\xf1\x52\xb0\x53\xf8\x21\xdd\x18\x70\xb3\xe3\x35\x16\x5e\x08\x4e\x5c\xbf\xe4\xda\x89\x67\x2b\x47\x9c\xa7\x01\xf5\xe4\x92\xe6\x31\x24\x1b\xc1\x9c\xb6\x8b\x37\x69\xc1\xd1\x9b\x23\x69\x2f\x8e\x8d\xb1\x3c\xc5\x38\xa0\xec\x0a\x56\x87\x69\xcd\x81\x4d\xf7\x7b\x0b\x86\x8b\x42\xad\x60\xdb\x7c\xdd\xe6\x5a\xdc\x7a\xd7\xdd\x23\x6e\x06\x1c\x31\x86\x8f\xbf\xea\x28\x90\x85\x1e\x0b\x8e\xd0\x19\x57\x50\xcd\x65\x36\xc7\x95\x05\xf1\xc1\xc7\xc6\xad\xbb\x60\x82\x29\xea\xe2\x87\x1e\x0a\xee\x68\xb0\xa8\x96\x22\xf6\x40\x7c\x64\xc3\x59\x79\xff\x71\x35\x05\xff\x2c\x62\x20\xa0\xe7\x1c\x4b\xb5\x71\xda\x5d\x64\x74\x97\xc6\x92\xf2\xad\x37\x48\x12\x71\xf3\x07\x04\xe2\x76\x51\xfe\x55\xf3\x15\x2d\x18\x16\xc4\xf1\xa2\x61\xaf\xca\x84\xae\x67\x09\x0d\xb5\xa8\x5b\x6a\xd3\xca\x73\xe6\x1c\x98\x1d\xbb\xc1\x4d\xe9\x0d\xbe\xae\x3e\xf1\xec\x19\x39\xc6\x3e\x8e\x90\xb1\x7f\xbf\x4a\xae\x5b\xab\x57\xf7\x55\x44\x19\xf8\x74\xeb\xf5\xea\xbe\xa2\x80\xc7\xaa\x0e\x62\xe1\xfe\xcc\x96\x74\xc5\xa0\x40\x02\x2f\xa8\x2a\x20\xf9\xe4\x1a\xa7\x8c\xcc\x6a\x43\x98\x58\x71\x25\x45\x69\x8f\x1f\xd0\x80\x59\xc9\xa4\x18\x54\x96\xc9\x98\x26\xbf\x3e\xfe\xf1\xec\x0a\x92\x13\x4f\x5c\xe9\x1d\xf7\x7e\xb5\xf6\x1e\xa5\xf0\x1d\x82\xc7\x1d\xe2\x7e\x23\xfe\xdd\xed\x76\x01\xfd\xc4\xcf\x85\x7d\xb7\xb2\x36\x35\x2d\xa0\x8e\x44\x56\xd4\xf6\x2e\xdc\xdb\xce\x4e\x1f\xeb\x8a\xf1\xd8\xa7\x0c\x75\xb9\x2a\x22\x2f\x79\xaf\xe3\x9a\xe2\xa0\x9e\x07\xfb\x75\xab\xa6\x49\xef\x82\x51\x3b\xe8\x80\xb7\x14\x9d\x23\xdd\x50\x04\x87\xf9\x76\xee\x2e\xee\x07\xc3\x82\x3a\x4c\x48\xf2\xe0\x0b\x9c\x6f\x39\x04\xc1\xdb\xbc\xf7\x58\x5d\x8f\xc3\x90\xee\x18\xf4\x08\x38\xa5\xd9\xf5\x42\xe6\xec\xf1\x25\x0a\xe3\xf6\xf9\xa5\xeb\x33\x48\x70\xe4\xc2\xdd\x3a\x58\x87\x1f\xaa\x9b\x61\x2e\xaf\xce\x96\x2c\xaf\x7b\xa8\x5c\x17\x73\x04\xfd\x8d\x3a\x8f\xa3\x24\xa3\x22\xe7\x76\xaf\x60\xca\x0f\x3e\xde\x1e\x32\xa7\xff\xfb\x0e\x55\x58\x00\xbd\xf9\xf0\xb2\x07\x07\x26\xa4\x52\x6c\xa9\xdb\x78\x08\xed\x1a\x16\xae\xd6\x3e\x7c\x05\x26\x60\xc6\x32\x59\x32\xc8\x11\xa8\xa4\x40\x7d\xdc\x53\xa7\x34\x89\x62\x88\x10\xc1\x57\x7b\xec\x90\x02\x47\xa8\xbb\xd0\xfd\x31\xd2\x4d\xe1\x1e\x05\xa8\x50\xbb\xd6\x5c\xb5\xdd\xdb\x79\x44\x78\x56\xb3\x32\x44\x0a\x42\xdb\x0a\xe0\xf6\x0d\x1e\x3b\x9e\x4f\x49\x9a\x6b\x97\x6a\xcc\x56\x1c\x68\x46\x4e\xa9\xd6\x7c\x21\xc6\x95\xcc\xc7\xb6\xdb\xd3\x5f\xd9\xff\x3e\xfa\x28\xf5\x14\x00\xb6\xaf\x6b\x60\x87\x93\x8f\xbc\x2d\xe2\xcf\x8f\xef\x17\xf7\xb4\xf6\x3f\xe1\x21\xfa\xff\xd8\xfb\x1b\xe6\x36\x6e\x6c\x4f\x1c\xfe\x2a\x28\x65\xab\x2c\x65\x48\xda\x4e\x26\x93\x8c\x77\x9e\x99\xd2\xc8\x72\x46\x1b\xdb\xd1\x5a\x72\x52\xf3\x24\xb3\x37\x60\x37\x48\xe2\xaa\x1b\xe8\x00\x68\xc9\x9c\xcd\x7e\xf7\x7f\xe1\x1c\x00\x8d\x26\xe9\x17\xa2\x21\x91\xca\x08\xb7\xea\x4e\x4c\x52\x8d\xd3\xc0\xc1\xc1\x79\xfd\x1d\x6f\x9d\x41\x1d\xd1\xca\xc6\xcd\xb8\xc1\xfd\x4a\xd9\xa6\x8b\x0d\xf3\xa0\xc7\x15\x9f\xf7\x48\x93\x8a\x4e\x59\xa5\x3f\xc6\x2e\x90\xcb\x94\x42\xc1\x96\x85\x96\xfe\xda\xa1\x1b\xb9\x25\x81\x49\x12\xd2\x1a\xba\xd8\xf8\x79\x72\x6e\x40\x9e\x2b\xca\xde\x4e\x89\x40\xac\x72\x4b\x92\x87\x71\xf8\x45\xaf\xe3\xcb\xf7\x17\x6b\xc9\x70\x3a\x4a\xf8\xda\x9a\x89\x65\xed\x70\x1e\x44\x19\x69\x21\x20\x0d\x31\x80\xa6\x98\x5d\x69\x40\x43\xe0\x5d\x47\x05\xa8\xff\xde\xfe\x12\x72\x6f\xb0\xea\x69\x81\x6e\xfb\x78\x07\xcc\x64\x55\xc9\x1b\xc0\xb9\x42\x1a\x22\xf7\xe7\xf6\x78\x4d\x63\xbd\xd2\xce\xd6\xb5\x78\x77\xa1\xf4\x7c\x6f\xe0\x9e\x3b\xca\x4d\x3f\x16\xe6\x43\x3b\xf1\xb3\xe7\xe9\x7f\x7c\x76\x7e\x92\xfe\xc7\x6f\x35\x53\xdb\x7a\x15\xdd\x9f\x2b\xa6\x65\xab\x8a\xad\xeb\xb6\xdd\x9f\xaf\xee\x1e\x6d\x9a\x63\x55\x4b\x75\xae\xe4\x8c\x57\xdb\x3a\x7d\xdf\xf3\x50\xcd\x20\x5f\xc5\xb3\x44\xa6\x67\x16\x85\xac\x9b\xac\x74\xce\xf4\xb7\x4a\xb6\xdb\x5a\x71\x1f\x7e\xd8\xc9\x82\x0a\x5f\x47\x94\xe9\xcd\x97\xba\x30\x55\xea\x32\x2e\xa8\x62\xae\xd1\xb9\x55\x2e\x75\x43\x8b\x4c\xab\x17\x7a\x90\x67\x7c\x5c\xc6\xfd\xd0\x6d\xd3\x54\xac\x66\xc2\xd0\x0a\x1e\x9b\x8b\x11\xd7\x9e\x3b\x64\xb3\xbb\x2b\xe7\xa7\xcf\xff\x75\x3b\xa7\xf3\xc3\x53\xe4\x38\xab\x1f\x9b\x61\xf8\xc9\xfd\xf0\x0c\x05\x6d\xe8\x94\x57\xdc\xaa\x3e\xb7\xf1\x7c\x1f\x5e\x7f\x23\xa5\x79\x11\xd2\x7f\x6f\x63\xa6\x46\xf1\x6b\x5e\xb1\xf9\xd6\xa1\xd5\x4f\x63\x27\x7b\x91\x9e\xfb\x29\x4e\x75\x41\xab\x94\x12\xb8\x4f\x7c\x13\x59\x40\x5c\xe7\x56\x36\x64\x98\xe8\xf9\x84\x87\x6f\x2f\x88\x92\x15\xf8\xd4\x7c\xe4\x04\xa7\x4e\x7a\xf6\x70\x5a\x36\xcd\x70\x87\x25\x3a\x72\xd6\x5b\xaf\xb9\x9e\xe9\x62\x4e\x7a\x4d\x91\x5b\xa5\x98\x30\xd5\x32\x8a\xbb\x46\x49\xba\xa0\x14\x83\x5e\xee\x94\xcb\x14\x77\xde\x71\x97\x8b\x8c\xd0\x3e\x35\x5d\x5a\x6d\x34\x72\xe7\xcc\x5a\xc8\x26\x05\x03\x00\xdb\xd7\x43\xba\x55\x12\x40\xe1\x86\x96\x6f\xb2\x61\xa2\x63\xe1\xc7\xce\xbd\x3a\xb6\xac\xdd\x6b\x02\x87\xd6\xe9\xa4\x2e\x3f\x6b\x2a\x6a\x66\x52\xd5\x63\xef\x45\x19\xf7\x2c\xd7\x04\xb2\x4e\x00\xee\x22\xa4\x84\x20\xbc\x9b\x55\xdb\x31\x33\x24\xce\xd8\xf6\x1b\x20\x4a\x8c\x7d\x92\x56\x28\x56\xc8\xb9\x80\x96\x2c\xee\x5b\xb0\xb7\x82\xd3\x88\x6a\x6b\x11\x12\xd1\x56\xd5\xd6\xb4\x25\xda\xb2\xf2\x9a\xa9\x05\xa3\x5b\x9e\xc2\x61\x0c\xfe\xbd\x9b\x93\x28\xd6\x28\xa6\x61\x41\x31\x02\x8f\x3a\x7e\x20\x8a\x50\xad\x65\x01\xe0\xe5\x98\x41\xed\x61\x05\x29\x58\x9a\x33\xa9\x08\x25\x73\x7e\xcd\x04\x79\x83\xdc\x70\x52\xd1\xed\xe1\xf4\x22\xb7\x9d\xf7\xd0\xd3\xd6\xc8\x50\x67\x4e\xa8\x21\xb4\xac\x39\x80\xb9\x20\x40\x89\xf3\x6a\xc6\xb3\x46\x3f\xb1\x5c\xaa\x24\x54\x1d\x93\xb3\x6d\xeb\xd0\x3f\xe9\xb9\x50\x7c\xed\xf3\x08\xc2\x72\x81\x85\xe8\xf3\x27\xb0\xc1\xd7\xb9\x2c\x49\x01\xa1\x77\xdf\xe7\x2b\x61\x79\x3e\x85\x20\x87\xa3\x63\xaf\x81\x4d\x93\x3a\xdf\x16\x24\xee\x83\x20\x0b\x5b\x5c\x59\x35\x63\x5b\x35\x52\x33\x03\x00\x2f\x3d\xba\xb0\xbe\xd8\x07\x44\x00\x77\x1a\x3c\x6b\x5d\x74\xe4\x5c\x96\x17\x0d\x2b\x46\x1d\x0b\xfa\x0d\xf7\x80\x3c\x1e\x2b\x70\x4b\x7a\x22\x29\x88\x1e\x15\x85\x4e\xe6\xd2\x72\x6b\x4c\x64\x9c\xf6\xc2\x4d\x0f\x7d\x08\xec\xfa\x4e\x5e\x60\xae\xc4\xbf\x99\xda\xba\x02\x71\x83\x37\x6f\xce\xcd\xe4\xea\x1b\x70\xe5\x31\xb1\xa0\xa2\x00\x4d\x5e\x3f\xbe\x62\x8d\x7e\xac\xf9\x1c\x3d\x77\x7f\xfa\xe6\x1b\x70\xe3\xf9\xcd\x79\xfc\xe6\xf4\xf8\xf9\xab\xd3\x49\xbd\x9d\x5a\xb6\x53\x9f\x5e\x43\x8d\x61\x4a\x3c\x23\xff\xe7\xf0\xe7\x3f\xfc\x36\x3e\xfa\xdb\xe1\xe1\x4f\x4f\xc6\x7f\xfe\xd7\x1f\x0e\x7f\x9e\xc0\x7f\x7c\x7e\xf4\xb7\xa3\xdf\xfc\x3f\xfe\x70\x74\x74\x78\xf8\xd3\x77\xaf\xbe\xbd\x3c\x3f\xfd\x17\x3f\xfa\xed\x27\xd1\xd6\x57\xf8\xaf\xdf\x0e\x7f\x62\xa7\xff\xfa\xc4\x87\x1c\x1d\xfd\xed\x7f\x6c\x49\x68\x22\x76\xef\x50\xbc\xde\x41\x18\xbd\x19\x71\x79\x1b\xc5\x58\x0d\x37\x48\x0a\xf8\xc8\xb0\x0b\xe8\x7c\x65\x6e\xaf\x69\xb9\x7f\xd9\x7b\xc5\x93\x27\xe6\xf6\xaa\xd1\x78\xfd\x54\xf2\x06\x00\xa0\xb8\xb4\x8a\xf3\xf6\x01\x2b\x50\xe3\x5e\xb3\x6b\xa6\x46\x9e\x86\x97\xf6\x91\xe7\x89\x4f\x84\x14\x79\xff\xc7\xe4\x38\x88\xe5\x93\xcd\xf7\x04\x37\xf6\xb5\xae\xe1\xbe\x6d\x35\x53\x1e\xb6\x8a\x19\xb3\x3d\x2b\x74\x6a\x0b\xea\xa0\x1b\x2f\x05\x7f\x85\xea\x58\xcb\x81\x49\x3d\xd5\x20\x14\x53\xc2\x7f\x71\xb6\xc8\xa6\xb5\x4c\x44\x17\x4d\x3c\x1c\x9e\x27\xee\x92\x8b\x2f\x01\xcc\xd3\xbd\x2d\x5c\x5a\x13\xf2\x03\x55\x5c\xb6\xda\x59\x07\xa4\x90\x75\x23\x85\xdf\xf0\x78\x13\x20\x66\x85\x15\x27\xdb\x0a\x58\x3f\x65\x40\x67\x2f\x27\xdb\x73\xe2\xd6\x93\xbe\x97\x6f\xb7\xe4\xc4\x64\x36\xcf\xc4\xb7\xd0\x62\x90\xcf\x3d\x68\x22\xec\x1b\x06\x2c\xa2\x4f\xd3\x44\x4c\xfa\xc5\x90\x8a\x48\xda\xac\xae\xc6\x5d\xf2\xff\xd9\xac\x97\x65\x1a\xb2\x1e\x3a\xf4\xeb\xb0\x8c\xe4\x00\x0f\x04\xa8\x39\xe3\x42\x71\xc3\x0b\x5a\x1d\x24\x24\x17\xfb\x07\x15\x55\x6b\x8d\xcd\xf8\x59\x8a\x11\x73\x23\x91\x26\x5a\x91\x2b\xb6\xbc\x91\xaa\xf4\x9a\x6f\x9c\x6b\xbc\x6d\x18\xdf\x32\x86\x36\xfe\x75\xa0\x56\xc1\x5e\x47\x18\xe5\x52\x35\x53\x64\xca\x7c\x62\xde\xca\x8f\x97\x13\x72\x2c\x96\xa8\x74\x26\xf8\x3e\x42\xd0\x29\xea\x68\x0e\x9a\x3d\x5a\x61\xbd\xd3\xe0\x34\x3e\x4f\x1b\x35\x49\xad\x4d\x37\x67\x55\x59\x73\x2f\x08\x1e\xaf\xb3\xfb\xb4\x2a\xa9\x1c\xb2\x37\x08\x24\x85\x38\xe8\xdb\xa6\x4f\xbb\x87\xdd\xc9\x6d\x61\x2d\x1e\x2e\x98\xd6\xdf\x5a\x86\xdd\xdd\x99\xa1\x60\x7c\x38\x5a\xa0\x0a\xb8\x43\xd0\x63\x56\x32\x61\xb5\xa3\x55\x87\x64\xd9\xfd\x72\xdb\x2d\x3d\xf6\x69\x42\x60\xe9\x21\x4a\xbf\x9d\x9a\x1b\x1d\xc7\x9e\x31\x46\x6c\x7f\x71\xfc\x7a\xdb\x08\xa5\x83\x01\x44\xf3\x41\x77\xef\xd8\xf5\xb8\xee\xbf\x25\xd8\xa1\x0e\xba\x8d\xfd\xda\xd2\x0a\x92\x4e\x2f\x55\xcb\xb6\x6d\x8f\x9f\x64\x6c\x31\x73\x23\xd5\xd5\xe3\xaf\xbe\x79\x02\xf6\x56\xa0\x6e\x3c\xdf\xfa\x8a\x4a\xad\xbe\x4e\xaa\xb8\xee\xd7\x22\xcb\xf2\x4d\xcc\xc8\x7e\x2f\xbd\x33\xc7\xa5\x13\x63\xd3\x22\xcb\x01\x61\x83\x92\xd2\x34\x92\xa0\x2f\xd2\x41\x2f\xc6\x1d\xb9\x97\xcb\x66\x7b\x25\x29\x1d\xaf\xa2\x37\xef\xe0\x7c\xd9\x93\xf8\x69\xb8\x2b\x08\x1d\xd1\xcd\x13\x65\x7d\x3c\xd2\xd1\xc7\x00\x43\x01\xd2\x1c\xb2\x91\xe0\x86\x59\x36\x03\x10\xd3\xb2\x24\x83\x26\xa6\xda\x78\xe7\x22\x00\x1b\xdd\xa9\xcc\x7d\xd3\x9b\xd9\xdd\xa4\x5e\x2d\x58\xf9\x32\x34\x09\x72\xb0\x78\xdb\xaa\x27\x08\x01\x01\x9d\x96\x43\x53\x48\xe7\xf8\x82\x9c\x36\x87\xe0\x01\x80\xcf\x54\x19\x54\x98\x53\x73\x2b\x3a\xa8\xac\x92\x11\x7a\x4d\x79\x05\x85\x04\xe0\x46\x93\xba\x97\x57\x84\x2f\x5b\x48\xa1\xdb\x1a\x28\xda\x36\x8c\x38\x5d\x3a\x6d\x22\xc5\xb7\x8b\xd9\x7c\x06\xa8\x43\x5d\x7e\xda\x9a\x0e\x2a\xc3\x43\x80\x6d\x6b\x81\x2e\x05\xad\x79\xe1\x77\xf0\x18\xb7\x0c\x70\x76\x23\x5c\x8d\xc8\xee\x49\x23\x3e\x24\x08\xf1\xba\x6e\xe1\x1d\x52\x74\x94\x5d\x5c\x10\x09\x91\x2f\xb8\x53\xa2\x13\x11\x57\xa5\xb0\x77\xb4\x30\xd5\x12\x82\x4a\xbd\x1f\x8d\x08\xe3\x50\xb9\x8b\x09\xfd\xd5\xf6\x30\x24\x52\x39\x06\x43\xb5\xb6\xf7\xf4\x4b\x56\x37\x80\xfb\xea\xf4\x78\x8d\x00\xe9\xa6\x55\xc2\x43\x3e\xaf\xfc\xc5\xd6\xd3\x47\x69\x9d\x09\x95\x78\x67\x86\xd0\xb2\xb4\x2c\xee\xdb\xce\x71\x83\x3c\xdd\x0a\xfe\x6b\xcb\xaa\x25\xe1\x25\x13\xa6\x4b\xfd\xeb\x2f\xb1\x43\xc6\x73\x62\x62\x7b\xe9\x7e\xd2\x1d\x73\xd4\xfa\x19\x2b\x7d\xaf\x36\xe7\x52\x7f\xcf\x9e\xa2\x07\x1c\xac\x05\xab\xb2\xa7\x9c\x6f\xe7\x04\xb3\x93\x3c\x7f\x73\xfc\xa3\xeb\x00\xb2\x22\x55\xdf\x73\x1e\xbb\x5a\xe5\xf3\x04\x80\xbb\x29\xab\xa4\x98\xbb\xbb\xf4\x5c\x96\x10\x3a\x1f\xe1\x7f\xaf\x2c\xb0\xc6\x0b\x14\x05\xef\xf6\x2d\x86\xfc\xc3\x57\x9e\x3a\x03\xad\x17\xbd\x30\xbc\x97\x69\x89\x1a\xed\xa1\x35\xc8\xb7\x87\x66\xea\xcd\x02\x8f\x80\x75\xda\x78\x26\xec\xd7\x47\x13\x72\x1c\xde\xaf\x58\x39\xb4\x5b\xcf\x1e\x7a\x38\xf4\x5f\x16\xf2\xb9\x4a\xdf\x9b\xc1\xbe\xf7\xb9\x2c\x75\x14\xd6\x71\xab\x1f\xee\xbe\x99\xdc\xde\x35\x1e\x3f\xca\x3e\xba\x47\xc2\x05\x18\x0b\x93\x37\x6e\x82\x17\x52\x11\x45\x1d\xb0\x2d\x15\x08\x5c\x2b\x4a\x7e\xcd\xcb\x96\x6e\x1f\xbd\xb5\x6f\xb3\xed\xc9\xdb\x91\x5a\x9c\x80\xe1\x36\x44\x1b\x4e\xc5\x33\xc9\x51\x34\x06\x59\x18\x9b\x85\x28\xb6\x9a\xc0\x70\x75\xb1\x2a\x46\x13\xd2\xa7\x71\x74\x88\x2b\x56\x07\x24\xcf\x5f\x5f\xfc\xd7\xcb\xe3\xbf\x9f\xbe\xbc\x73\xbc\x68\xb5\x2a\x04\x76\xb5\x05\x6b\xd2\x68\x35\x2b\x66\xe5\xee\xf5\x4e\x28\x27\x19\x74\x2a\xe0\xa0\xf0\x49\xa3\x84\xea\xa8\x1e\x28\xe9\x59\xa7\x91\xe2\x22\x67\x1b\x5e\xe9\x83\xf2\x15\xf8\x21\x69\x5e\x0c\x6b\xef\x96\x77\xe2\x37\xd9\x0b\x1e\xea\x2d\xed\x87\x79\xc9\xff\x34\x69\xd2\x75\x3e\xcc\xca\x53\xd0\x4b\x23\x68\xa6\x51\x5d\x29\x80\x8a\x61\xee\x05\x25\x82\xdd\xac\xaa\xca\xa8\xc5\xda\xbf\x48\xe5\xa9\xa9\x6c\x45\x89\x9a\x9d\x7b\x05\xaf\x83\x75\x05\x81\x25\xab\x98\xf1\xce\xdb\x61\xca\x31\xf1\x96\x26\xe0\xc1\x83\xdb\x17\x9e\x8d\xb6\x2b\xb4\x45\xf5\x67\x28\x48\x64\x81\x6a\x8b\x55\xd0\x5c\x13\x82\xa4\x69\x3b\xb0\x90\x10\x48\x1b\xad\x2d\x36\x74\xd6\xa7\xee\x9a\x40\x5a\x9c\x3e\x3f\x9c\x59\xe3\xed\xb2\x73\x2a\x56\x48\x55\xa2\x5b\xd3\x2e\x3c\x7a\x30\x27\x6a\x5d\x51\x61\x3a\x91\xb1\x06\xab\xd3\xe9\x70\xd1\x1b\x35\x6a\xb4\x29\xbc\xd3\x84\xbe\x47\x19\x0e\xf1\x90\x64\x81\xff\x71\x41\x3c\x0a\xb6\xc2\xaa\x39\xa3\x65\x75\xcd\xbc\xb1\x33\x7c\xd7\x23\xbe\xf3\x96\xa1\x7f\x6b\x00\x61\xc5\x8c\x04\x27\x59\xe6\x61\x91\x92\x26\xc6\x85\x5d\x81\x64\x59\x7b\xc5\xce\xff\x97\xf8\x7e\x1b\x77\xed\x91\xfe\x84\x55\x47\xd5\x7f\xd8\xde\x76\xeb\xd9\x9b\x66\xb2\xea\x7d\xeb\xaf\x7b\xc4\x83\x54\x25\x5e\x02\x37\xa2\x83\x40\xea\x9e\x86\xe7\x84\xab\xae\xea\x18\xed\x36\xc3\x59\xe9\x4d\x66\xff\xeb\xa4\x79\xb9\xd0\x86\xd1\x12\xee\x34\xb1\x8c\x0c\x93\x41\x37\xce\x46\x67\x94\x43\xee\x85\xa6\x7e\xf3\x28\x7e\x04\x4e\xc1\x01\x27\x62\x25\x85\xae\xc7\x8e\x11\xa6\x94\x92\x15\x69\x2a\x6a\x59\x18\xba\x09\x86\xe0\x64\x96\x93\xf8\xa0\xf0\x7d\x6c\xfc\x0e\xc0\x1a\x82\xfb\x7b\x17\x41\x81\x80\xf9\x8d\x8d\xd1\xa8\xc3\xba\x9e\x91\x93\xf3\xb7\xc0\x26\xaf\x58\x2d\xd5\xb2\x23\x32\xd8\xee\xf6\x14\xd0\xad\xb5\xb8\xcd\xb5\xbe\xe4\x2c\x80\x55\xfb\xe0\xe9\x12\x8f\x9d\xcb\xde\xb5\x94\xbc\xe4\x35\x37\x3a\xc1\xb3\x72\x50\x34\xed\xc1\x88\x1c\xd4\xf0\x2a\x90\x75\x41\x0e\x16\xed\x9c\x35\x74\xce\xf4\xf8\xa0\xaf\xb7\x69\x82\xf0\x7d\x2b\xb2\x19\xd1\xc6\x23\x4c\xed\x21\xde\x74\xd4\x58\xec\xbf\x04\x1b\xcf\x15\x85\xd4\x06\x2f\x4e\x24\xb6\x6e\x74\x24\xd1\xc8\xad\x9f\xa4\xd6\x31\x61\xb8\x82\x65\x1e\x61\xfc\xc5\x2e\x6c\x78\xbc\xbd\xdd\xc0\xe9\x5c\x5b\x5d\xb5\xbf\x3b\x34\x49\x5a\x6f\x0d\x0e\x7e\x2e\xcb\x97\xec\x9a\x55\x1d\x4b\x3a\x05\x6f\xcb\x89\xb7\x47\x11\x4f\xf6\x60\xa5\x3b\x94\x8a\x84\xf0\x1f\xc9\x62\x87\x3a\x3e\xb6\x62\xaa\xb3\x3a\xb5\x3d\xea\xe1\x6c\x8f\x7a\xe0\x28\x71\xd9\x33\xfe\x71\x0a\xce\x3e\xa8\xcf\xf6\xf0\x74\x7d\x9f\xe2\x3e\x5c\x49\x37\x5c\x74\x92\x4a\xd6\x30\x51\x6a\x44\x9f\x48\xb9\x71\x3f\x2d\x8a\x36\x94\xcc\x5e\xf8\xcc\x4a\xbb\x82\x0a\x90\x33\x3e\xf7\xdf\x9e\xed\xee\xf4\x6d\x7f\x85\x0e\x01\xc1\x4f\x06\xbf\xef\x31\xe5\x7b\xe3\x66\x56\x0b\x61\xc2\xa8\xa5\xab\x07\xb9\xb0\x8c\xd5\x97\xae\xe9\x2a\x43\x72\x43\x92\x61\xed\x48\x92\x5b\x89\x0c\x6d\x24\x32\x04\x5e\x3b\x5b\x8f\xff\x0f\x74\x72\xea\x6d\x36\xb8\x08\xd6\xc5\x48\x6a\x6f\x4c\xd2\xc5\x48\xc8\x0d\x24\xda\xf5\xe1\x97\x00\x47\xde\x1e\xae\x9a\x5e\x75\xed\x91\xfd\x3d\xea\xf3\x03\x92\xa7\x76\x0e\xf6\xc1\x9d\x74\x32\x20\x50\xba\xaa\xa6\x5d\x33\x82\x53\xcf\x7a\x6e\xcc\x62\x21\x35\x13\xce\x80\x55\xfe\x07\xa2\x9f\x93\xe5\x02\x75\xe9\x48\x87\x1d\x0c\x18\xbb\x66\x6a\x69\xc0\x39\x10\xda\x22\x14\x5d\xd8\x33\xce\x0c\x89\x6a\x9f\x92\x27\x06\x99\xed\x8a\x05\x21\xf7\x73\xe6\x83\x31\xf0\xa6\x3b\xe1\x88\xbc\xb8\x8d\x89\xa2\x2d\x1f\x5c\x23\x34\x58\xdd\x89\x8a\xe4\x2c\x8c\xae\xa7\x16\x20\x56\xd3\x77\xbc\x6e\xeb\xc8\x34\x2a\x64\xdd\xb4\x26\xca\x5b\xf2\x79\x4d\x29\xbb\x3f\x08\xfa\xaa\xa6\x82\xce\xd9\x38\x10\x32\x8e\xea\x93\x13\x55\x88\xc4\x0b\x35\x47\xe9\x1c\xb9\x4f\xe5\x73\x24\xbd\x84\x8e\x64\x28\xa3\x23\x43\x4b\xe9\x48\xde\x72\x3a\xd2\xdd\x4a\x3b\x39\xba\xc1\x53\xb0\x72\x78\xb9\xf8\xe8\xe1\xf5\x9a\x60\xca\xe9\x85\x16\x04\x6e\x66\xae\x89\xac\xb9\xe9\xdc\xb7\xe1\x30\x42\xe9\x5b\x0c\x7a\xee\x04\x0d\x14\x0c\x50\xb8\x3f\xd9\xbb\xa6\xe2\x05\x37\x51\x47\x88\x32\xc5\xdc\x8a\x40\xed\xa5\x35\xc1\x79\xed\x51\x73\xa0\x6b\xbc\xb7\xef\x5c\xb9\x56\xa0\xbd\x40\xc4\x55\xf6\xae\x60\xcc\x7b\x5a\x1e\xa4\xd9\x83\x34\xfb\xc4\xf1\x7b\x93\x66\x8a\x41\x7a\xf2\xdd\x57\x06\xbf\xc1\x89\x49\xd3\x55\x02\xbb\xd2\x92\x90\xc9\xdc\xa1\xbb\x27\xa4\xf9\xb8\x1a\xe0\xe3\xea\x86\x2e\xf5\x88\x7c\x2f\x5e\x50\x5e\xb5\x8a\x8d\xb0\x2c\x78\x42\xce\x04\xd1\xb2\xc6\xd8\x06\x7b\x67\xf4\x08\x35\x5e\x4a\x74\x3b\xd5\xcc\xe9\xbb\x52\x33\x0f\x20\xe2\x50\x58\x1a\xa6\x50\xf4\x25\x96\xd1\x5a\x69\x85\x44\xdd\x32\x74\xe8\x8d\x0b\x29\xeb\xc7\x8d\xc4\xff\x37\x0e\x41\xb0\xc7\x9f\xb9\x7d\x1f\x37\xdb\x43\x8b\xa5\x96\x62\x45\xd8\x0c\x77\x5d\xc0\xf8\x66\x65\xee\x5e\x75\x46\x0f\xd9\xa2\x9f\x4c\x02\x08\xaf\x58\x60\x84\xe1\x5f\x9f\x26\xd0\x75\x11\xb0\xa6\xf8\xb6\xe9\x84\xd2\x2e\x46\x94\xd4\x81\xa5\x78\x7d\x42\x82\x39\x8f\x09\x9f\x9d\xdd\x09\x16\xa5\xd6\xa3\x8d\xbd\x5c\x54\x2b\x12\xca\x00\x11\x0f\x43\xaa\x0e\x70\x9a\x91\x83\x8a\xcd\x69\xb1\x3c\xe8\x53\xb5\x01\x57\xdd\x79\xc0\xed\xf5\x6b\xaf\x75\xa4\xce\xe5\x82\x6c\x5b\x7f\x04\xf3\xa3\x6b\x16\x0b\x63\x30\xb9\x5a\xbb\xd7\xf7\x65\x88\x8e\x95\x1c\x14\xd0\xd6\xce\x89\x64\xd4\x8e\xaf\xbe\xf9\x6a\xec\xc1\x90\xe0\x35\xef\xe2\xdc\xf4\xa0\xbb\x77\x57\xc1\xd8\xe3\xb6\x29\x23\x25\xd7\x8d\x4b\x45\x9e\x46\x9a\x5c\x47\x6e\xbe\x72\xd4\xcd\x53\x7a\x66\x48\x9c\x70\xd8\x6e\x70\x31\xbf\xf3\x8a\xd2\x8b\xfe\xd4\xee\xdc\xc9\x86\xfe\xda\x76\x8d\x8c\xdd\x65\x85\xca\x76\xb4\x81\x6e\x11\x2b\x59\x5c\xc5\x98\xf1\x89\x97\xab\x65\x8d\x75\x6a\x40\xaf\xee\x24\x48\xd8\x3a\x6d\xe8\xd2\x4b\xd4\xfe\x4b\x94\x50\x19\xca\x7c\x9e\xc6\x96\x54\x74\x48\xf7\x41\x04\x5a\x2d\xb4\x6e\xe0\x92\xf5\xdf\x26\xd7\x7b\xac\xae\xf7\x6a\x20\x83\x1a\xac\xb5\x84\x3c\x08\x07\x57\x85\x19\xfc\x90\x3f\x56\xcb\x6b\xc0\x0a\xb7\x3a\xc5\xcc\x30\x75\x43\xd5\xb6\x99\xe7\x3b\xad\x38\xed\xbf\x3e\x70\x5b\x87\x11\xe6\x13\xc7\xec\x7f\xcc\x5b\xaa\x4a\x28\x31\xee\x78\xe2\x21\xc3\x7e\xd3\xd8\x79\x86\xbd\x03\x12\x89\x04\x40\x7a\x43\xea\x53\x6a\xf5\xa0\xfe\x93\x30\x56\x02\x25\xdf\x2b\x79\x9a\x00\x1a\xf2\x90\x2e\xb3\x95\x8b\x38\x12\xb1\x56\xf7\xdc\xd1\x5d\x03\x89\x74\x8d\x92\xd7\xbc\x84\xb4\xd0\x5e\xb9\xb9\xe5\x26\x5e\xd7\xac\xb4\x62\x21\xe6\x06\xa7\x26\x6d\x9b\xd8\x60\x27\xb3\x7f\xee\xd4\x70\x57\x2f\x8a\xb9\xa0\x51\xd6\xea\x00\xdc\x41\x17\x3d\x5b\xef\x96\x62\xa4\xaf\x3b\x59\x46\xe9\x9e\x56\x9c\x63\xef\xff\xed\xef\x27\x48\xac\x2b\x8c\x7b\x52\xb4\x38\x60\x74\x71\xa6\x1d\x8a\x8e\x13\xab\xf6\x0e\x41\xb5\xd9\xcf\x5d\xe9\x6d\xb1\x35\x78\xdd\xd0\xc2\x68\xd7\xda\xba\x6b\xb5\x42\xad\x22\x60\x34\xa6\xde\x83\xdc\xf6\xc9\x0a\x8a\x55\xec\x9a\x0a\x83\x69\x30\x37\xbc\x64\xca\x9b\xc4\x5b\xce\x2d\x63\xa5\x80\x54\xfc\x8a\x45\xd0\x63\xa3\x28\x3e\x69\x0c\x2d\x16\x35\xa4\x78\x33\x53\x4c\xd6\x35\xbf\x6d\x2f\x8f\xae\xec\x3a\xee\x7d\xe8\xeb\xdb\x5a\xc1\xf1\xed\x42\x0d\x9f\x0e\x0b\x92\x82\x29\x84\x9b\xe3\x38\x34\x0a\xf4\xf9\x8c\x0f\xe4\xb3\x9a\x2e\x51\x21\x7a\x67\x35\x33\x2c\x7b\x46\x44\xcb\xed\x19\xc9\xbd\x1c\x16\x1b\x0c\xe9\x95\x13\x27\x67\x8c\xa0\x34\x9b\xf6\x5f\xa7\x97\xdd\xed\x70\x69\xc0\xef\xb1\xf5\xa5\xec\x88\xc5\x27\x96\x7c\x06\xcb\x64\x22\xd6\x7f\x2e\x03\xa4\x54\xd9\x2a\x07\xff\x16\x71\xd0\x96\x33\x5a\x32\x5d\xa4\xd2\x3b\x8d\x2a\x8a\x66\x1c\xec\x43\x21\xc5\x4c\x2a\x28\x3b\x76\x72\x0b\x21\x65\x59\xd9\xd1\xb4\xef\x29\x55\x8d\xcb\x54\x4e\x2b\xf1\x19\xae\x45\x9c\x47\xf3\x47\xed\x9c\x57\xa1\x93\xb5\xa1\xa2\xa4\x95\x14\x51\x26\x76\x72\xf6\x8a\xcb\x6d\xe8\xc3\xd7\x3a\xfb\x9f\x0b\x3b\x55\xd1\x75\x92\x02\x5e\x4e\xf2\xe6\xc7\x95\x80\x44\xb7\xd3\x52\xd6\x94\x6f\xed\x4b\x49\x37\x2b\xfb\x10\xe1\x77\x7a\xd5\xf7\xa7\x26\x0b\x59\x95\xe0\x97\x1a\x57\xec\x9a\x55\x81\x34\x2b\xb7\x15\x9f\xb6\xc6\x41\x2d\x17\xb2\xae\x1d\xf2\x1b\x36\xa0\x71\x28\x71\x5b\xcb\x54\xec\x0c\x40\xab\x67\x3d\xa4\x41\x30\x24\x27\x96\x3c\x06\x8b\x1a\xbf\x25\x78\x8b\xbd\xfd\xef\x2c\x5e\x39\x23\xcc\x6a\xa4\x09\x9a\xe6\x0e\x4e\xf2\x4a\xdf\x85\x5d\x1c\xe6\x15\x12\x7c\x6a\xcb\xb1\xfb\x98\x48\x6c\xd8\x60\xf7\xa2\xd5\x6c\xad\xbb\x74\x87\xa8\x9d\x58\x83\xfb\x5a\x02\x44\x9b\x57\xf0\xf0\x82\x2a\x42\x3f\x44\x6b\x61\x03\x7e\x15\xa4\x55\x49\x3d\x11\xae\x8c\x30\x19\x59\x7d\x50\x9c\x6c\x48\x12\x1d\xc6\x7b\xb6\xfe\xc3\x61\x09\x74\x95\x2c\x68\x05\x4d\x88\x52\x59\x8c\x64\xcb\x9f\x5a\xa5\x25\x82\x10\xa4\xf6\x35\xe1\xb3\x4a\xd2\xd2\x37\x57\x63\xbe\x8f\x22\x35\x2b\xae\xf6\xd4\xb4\x23\x84\xf0\xc4\x99\x7c\xd9\x77\xa3\x58\x84\x62\xdd\x9b\x58\x42\xeb\xd2\xd4\xc9\x5e\xf5\x33\x06\xdd\x9b\xc5\x57\xa4\x23\x65\xd0\x04\x1e\x7a\x7c\x06\xe2\xd8\xf7\x93\x07\x59\xc9\x35\x39\x78\xe9\x17\xfd\x20\x6d\x96\x81\x31\x4a\x93\x08\xa9\x95\x8b\xe7\x70\x1d\x02\x9f\x61\xa8\xe2\x8a\x0b\x28\xd5\x0a\x42\xce\xb3\x44\x40\xa3\x6f\x9a\x8a\xa7\x73\xd9\x0f\xb4\xe2\x65\x90\x9c\x54\x25\x27\xb0\x12\x12\xb6\x8f\x8c\xa3\x43\xd2\x28\x36\x5e\x3f\x28\xe9\xd9\x85\x2e\xb8\xe3\x63\x93\xe3\x8f\x36\xd6\x1d\xc8\xb8\x84\xbc\x15\x70\xe6\x04\x2b\xc9\x98\x08\xd9\x6d\x05\xb3\xfa\x39\x2a\xec\x77\xce\xb0\xae\xb5\xd6\x2e\xae\xe1\xe3\x00\x63\x1a\xf7\x7d\x8a\x8a\x4d\x1d\x4f\x62\xb0\xb2\x1f\x21\xef\x2a\x57\xb6\x9f\x17\xba\x08\xba\x9e\xe8\x76\xe5\x5c\x6a\x1f\x30\xc0\x77\xae\xa9\xab\xf1\xc5\x86\xd8\x48\xe0\xc6\x4e\xba\xe0\x0d\x0a\x31\x6a\xdc\x9f\xa7\x08\x07\x28\x2f\xef\xd5\x6c\x36\xb2\x7c\x96\x52\x7a\xf0\x14\x9d\x28\xf2\x06\xda\x55\x7c\x7b\xf6\x3c\x9c\x65\xfb\xd4\x17\x17\xa9\xa5\x9d\x5f\xe0\x73\x35\x33\x73\x5e\x92\x29\x37\xbe\x73\xe0\xa1\x60\x37\xc4\x9e\x81\x60\x90\x93\x7e\x0f\x7a\x3f\x7f\x78\x3d\x47\xc4\x51\x02\x15\x5f\xba\xda\x7b\xa6\x3c\xd2\xf2\x94\x1b\x2c\xd1\xfa\xfe\xcd\x23\xdf\xab\xe3\x66\xac\x6e\xc6\xe3\xf1\x38\x65\xfd\x7c\xf8\x77\xd4\xdb\xf9\x10\x50\xa9\x65\xe9\x1d\x62\xdd\xfe\xdb\xfb\xa6\x23\x49\xfb\xe2\x57\x7c\xff\x7b\xa4\x0b\xa6\x26\xf1\x44\x20\xce\x7f\xfa\x63\x9a\xa8\x89\xbb\xf8\xed\x42\xec\x6c\x20\x23\x94\xfe\x4f\xd9\x82\x5e\x73\x6b\x02\xcc\xf0\xfc\x83\x47\xf6\x3d\xbb\xef\x35\x9a\x64\x59\xe0\xb0\x13\x11\x57\x99\xbd\x6b\xa4\x86\x13\x05\x15\x08\xe7\x12\xc0\x27\xfa\x4d\x63\x30\xa4\x86\x3e\xd9\x6d\xfd\xa3\x76\xf4\x84\x9e\x4b\xe7\xc0\x52\x47\xbf\x2a\x64\x4a\x2d\x11\xe1\x95\x0f\x57\x18\xfe\x28\x29\x81\xd2\x9d\x2a\x88\x8e\x08\x49\xd8\x6c\xc6\x0a\xe8\x65\xcc\x9a\x05\xab\x99\xa2\x55\x9f\x34\xdd\x16\x0b\x42\xf5\x33\x6b\x81\x2b\x7b\x40\x51\x59\xad\xe9\xd6\x8d\x06\x89\xc3\xab\x04\x9b\xba\xe4\x49\xd5\x1c\xa8\xda\x44\xbd\xae\x0e\xbe\x17\x6f\xa4\x34\xaf\xb8\x06\x4d\xd7\x15\x9b\x62\x6a\xd3\xc1\x06\xa7\x6e\xf8\x2e\x14\xb0\xdc\x1f\x41\x91\xa4\x54\x74\x6d\xde\x76\x71\xc0\xed\xb5\x61\x6f\xc3\x90\x6c\xe4\xaa\x95\x1a\xc9\x85\x59\xeb\x47\x6c\xf5\xba\x22\x01\x70\xda\x8e\xb7\x9a\xe9\xe0\x92\xf3\x7a\x62\x5a\x4f\x08\x1c\xaf\xe8\x32\x40\xd0\xb8\xe6\x4a\x2b\x4e\x2a\x4c\x99\x72\xdf\x4d\xa5\x59\xac\x79\xb1\xb6\xc7\x9b\x27\xe8\xe0\x5c\x79\xd0\xa8\xeb\x1d\xd0\xc7\xba\x5e\x9d\xd0\x40\x25\x96\x35\x29\x59\xc9\xc4\xd6\x2d\x50\x49\x00\xa7\xa4\x66\x58\xd9\xd5\x7f\xd0\x5d\x0a\x27\xec\xb5\x04\x39\xb4\x8b\x33\x76\x16\x75\x42\x70\x11\x9e\xee\x44\x81\x97\xc1\x1e\x3d\x88\x45\x09\x29\xc6\x4a\x4a\x48\x66\x4b\xda\xd6\xb3\x19\xa4\xf6\x6e\x50\xd3\xae\xad\x64\x76\xfd\x0e\x08\xaf\xe9\x9c\x11\xda\xe5\xc8\x19\x49\x98\xd0\xad\x72\x3c\xb1\x75\x3f\x10\x3b\x4a\xc9\x30\xbb\xc7\xbd\xce\xdb\xb3\xe7\xe4\x09\x39\xb4\xef\x73\x04\x62\x7f\x46\x79\x15\xa0\x8e\x57\xd6\x81\xcf\xa0\x26\x40\x6e\x1b\x5f\x09\xaf\x1d\xb2\x13\x67\xb4\xd2\x6c\x64\xef\x4e\xb8\x1a\xdd\x7b\x63\xd8\x14\x55\xee\x86\x29\x68\xd3\x90\x56\x9f\xf4\x7b\x10\x3b\xa9\xc7\x77\x2a\x65\xc5\xb6\xce\xd7\x0c\x6d\x52\x77\x75\xc3\xbd\xbd\x93\x1b\x2e\x8e\x4b\xd8\xf3\xdb\xdf\x12\x3c\x72\x35\x33\xb4\xa4\x86\xba\x9b\xcf\xff\xe0\x3f\x96\x11\x1f\xee\xbf\x4f\x1b\x43\xee\x3f\xd7\x5a\x7b\xd7\xb6\xe4\x06\x32\x82\x2d\xb9\x70\x2e\xa5\xb0\xa5\x8f\x34\xb9\x38\x85\xdf\x93\x8a\x4e\x59\x05\x89\x85\xe8\x75\xf5\x1e\x2e\xb4\x82\xfa\x79\x3a\x49\x78\xd9\x60\x74\x2d\xa8\xee\x9b\x5b\x42\x96\xfe\xc6\x2e\x65\x8c\x74\x13\x08\x93\x90\x0d\xe4\xc9\x08\xb7\xdf\xca\xcf\xf2\x58\x51\xd0\xc2\x1a\x43\xa0\xce\x84\x7a\x63\x4f\x96\xe6\xd7\xec\x20\x09\x8b\x23\xfa\x7b\x52\x33\x2a\x34\x51\x0c\x56\x1a\xac\x78\x84\xb2\x46\xf7\x95\x14\x1e\xdf\x39\xbc\xeb\x6a\x94\xcf\xab\x11\x29\xef\x8a\x10\xbb\x58\x35\xa3\x2b\x79\x03\xe7\xbb\xa2\x6a\xee\x9d\x05\xda\xa5\xa0\x54\x95\xbc\xd1\xa4\xe6\xef\x20\x09\x24\x34\x28\x87\xd5\x68\x45\xf4\x01\x20\x51\x7b\x1c\x9f\x90\xa5\xe2\x8c\x66\x19\xe3\x7f\x82\x53\x3c\x65\xf1\x7a\xdb\x01\xa5\x94\x08\x82\xcd\x2a\x3e\xe7\xd3\x8a\xf5\x56\x0b\xbc\x6f\xbf\x8c\xa5\x4f\x98\xfa\x85\xb8\xe2\x4b\xf8\xfb\xe4\x35\x0b\xe0\x41\x01\x7d\xdb\x05\xc2\x62\x78\xbe\xe0\x2b\x90\xae\xe1\x9c\xfb\xb8\x77\xb8\x12\x8f\x8c\xcb\xe5\x6e\xa4\xd6\xdc\xf5\x99\xd8\x3c\x39\x62\x29\x7d\x6c\xcb\x52\xa8\x38\xf5\xeb\xed\xd7\x9a\x42\xcd\xc6\xd8\x28\xc6\xc8\x0b\x3e\x55\xcc\x8a\x1b\xc1\x2a\x98\x92\x5f\x9c\x5c\x9c\x75\x5c\x05\x49\x7b\x55\x45\xa2\x0f\x13\x48\xb8\x81\xea\x2f\xfb\x8c\x52\xf1\x6b\xa6\x88\xbd\x43\x5a\x00\x7a\xf1\x8b\xec\x25\xc2\x74\x19\x7a\xe4\xc1\xb5\xe2\x24\x22\x30\x13\x96\xe4\x39\x1f\x31\x4f\xa9\x18\x3c\xb9\x38\x7b\x8e\x14\xf8\x84\x97\x09\xf9\x1e\x12\xfc\xe2\xc5\xa1\xe0\x5d\x21\x8a\x8d\x61\xeb\x2b\x56\x12\xe5\x25\x41\xb5\x4c\x3a\x0d\x1b\x7c\x38\xbd\xf3\x11\x1c\x39\xa9\x9c\xee\x00\xb3\x40\x34\x23\x1a\x59\xc4\xef\xe0\x28\xeb\xdf\x15\xe0\xa7\x76\x2d\x28\x1c\xc4\xce\x8a\x1a\x02\xe0\xf0\x6b\xca\x89\x13\x7b\x31\xec\x50\x4a\xa8\xa6\x77\x1c\x7b\xa7\xce\x9d\x07\x17\xab\xee\x7d\xb5\xe1\x76\x8c\x5b\x13\x43\x0d\x22\xc0\x8c\x16\x54\x90\x39\x33\x44\x9b\xb6\xb8\xb2\x6f\x11\xda\x3d\x9c\x78\xa8\x45\xa8\x96\xb8\x47\x4a\x51\x92\xdf\xcc\x2d\x18\x32\xd9\x4e\x4a\xec\xad\x65\xe1\x19\xaf\xf0\xfa\xad\x8c\xe2\xc3\xeb\xb1\xb8\x74\xdb\xb6\x5f\xef\xb4\x76\xf3\x7a\x44\x66\xec\x52\x44\x28\x51\x54\x94\xb2\x5e\xa3\xcf\x5e\xae\x8c\x16\x8b\x04\x3a\x3a\x75\x7b\x5b\xdb\x23\xc5\xdd\xff\x1e\x6b\x65\x80\xed\x91\x12\x80\x5c\xb1\x56\xee\xb7\xed\x91\x98\xd3\x34\x30\xc1\x88\x5d\xb3\x2a\x43\x86\x07\x20\x22\xda\x45\x08\xa2\x1e\x3e\x40\x81\xbf\x1a\x00\xef\x1d\x91\x9d\xe4\xb5\x28\x99\x25\x97\xea\x8d\xc4\x94\x3b\x1a\x5e\xdb\x3e\x78\x6f\xdf\x3a\x53\x36\xcf\xa5\x4b\x4e\xea\xde\x1a\xd2\x74\xf6\xf5\xad\xdb\x24\xcf\x16\x59\x7d\xeb\xb7\x1a\x9b\x32\x77\x6f\x0d\x4e\xa4\x7d\x7c\x6b\xcd\x8a\x42\xd6\xcd\x0e\xd3\x52\x31\xe9\x02\xa8\x78\x48\x41\xed\x8d\x87\x14\xd4\xdb\x4e\x41\x8d\x30\x61\x29\xf8\x48\x7a\x49\xa1\xf7\x35\x11\x15\xca\x1a\xec\x2a\x32\x44\x78\x6f\xa8\x59\x8c\xc0\x29\x64\xf8\x75\xa8\xe2\xbb\xc2\x90\x12\xb6\x25\xf5\xa4\xf8\x83\xd8\xe5\xe8\x22\x62\x6c\xa6\xbc\xd5\x4d\xb9\xaa\xf8\x9b\xd7\xdf\x5f\xc6\x78\xb1\xd4\x37\xd6\x4e\x6e\x8b\xba\x2f\x37\xe0\xed\xe4\xb3\xae\xee\xd3\xed\xa5\xb3\x26\x3e\x69\x73\x36\xeb\x5d\x9c\xb7\x4f\xcb\x70\x5d\xcd\x6f\xcd\x34\xf9\x6a\xb2\xeb\xfa\xd3\x07\xed\xd0\x90\x8b\x3e\x4a\x36\x85\x1c\x95\x9d\x18\xda\xc7\x01\xb7\x02\xf2\x5d\x7b\x91\x00\xe8\xb9\xcf\x15\x34\xd8\x87\xc8\x1d\x44\xf9\xb8\xc0\x32\x9f\x18\x71\x2e\xc5\x0c\xf5\xb8\x67\x6b\x2a\xd7\x23\x6b\x16\xf2\x9a\xaa\x25\xa4\xcf\x40\x74\xdb\x65\x85\x1d\xc6\x80\x1a\x47\x60\x07\xa7\x08\x92\x05\x23\x17\x6b\xab\xef\xc2\x26\x1e\x89\xbb\xeb\xf5\x33\x4a\x44\xfb\x5e\xdf\x60\x3f\x85\x43\x13\x37\x4c\xd5\xae\x3d\x32\x73\xdd\x15\xa1\x30\x16\xfc\xac\x61\x7d\xd2\x92\x7b\xa5\x5a\x6d\x8c\x82\xf9\xcc\x35\xab\xa7\x98\x52\xa7\xe3\xc3\xbf\x92\x30\x50\xd3\x79\x92\x8c\x5f\xf5\xa7\x08\x19\xc1\xdb\x05\x0e\x53\xcc\x7e\x8a\x0b\x2b\xdb\xf9\x62\x9d\xb4\x94\x0c\x89\x0f\xbe\x0c\x44\x41\xb4\xe9\x61\x27\x21\x9c\x3b\xc4\x64\x52\x01\xdd\x3f\xbc\xc5\xf7\x48\x21\xbe\x63\x30\xf7\xa1\x08\x7e\x43\x42\xb6\x19\xfb\xac\x93\x0f\xb0\xc0\x2e\x84\xf9\xf3\x28\xe4\xbb\x5e\xcb\xa0\x7d\x46\x06\xca\xf4\xb5\xbc\x0c\x17\xc5\x28\x68\x55\xb4\x55\x4a\x99\x3b\xd9\x1c\x5e\x65\x6a\xce\x5c\x60\xf5\xc2\x28\x5e\x98\xcd\xb9\xa9\xee\x77\x03\x52\x53\x0f\x8f\xab\x66\x41\x8f\xc8\x5b\xed\xa3\x93\x78\x7c\xa2\xe6\xe7\x9f\x20\xf8\x01\x45\x05\x7d\xcd\xee\x02\x48\xcc\xf5\xdd\xac\xe6\x80\xc5\x11\x90\x52\xbb\xbc\x67\xf0\x7e\xf2\xd0\x8f\xe4\x1e\xc9\x8e\x34\xed\x67\xa9\x0b\x53\xed\x44\xe5\xb9\xc0\xa9\xa1\xcc\x9a\xd0\xa0\xff\x84\x8e\x95\xa5\x27\x0e\xd3\x1f\xe2\x86\xe5\x18\x7c\x82\xa0\x73\x2b\x42\x77\x9e\x94\x8b\xc3\xcd\x70\xf8\xbe\x70\xff\x11\xa9\xf9\x7c\x61\x42\x5e\x5f\x45\x5b\x51\x2c\xee\x11\x57\xec\xb2\x3d\x08\xee\x70\xd4\x48\xf1\xca\x4a\xfb\x8a\x34\x54\xd1\xda\xaa\x5d\xee\x7c\x6b\x96\x14\xb9\xb8\x97\xcd\x40\xec\x9f\x82\x58\x4e\xf8\xdb\xbd\x69\x24\xf2\x3a\x34\xaf\x75\x24\x2d\x21\x33\x22\x69\x1b\x49\x8e\xe6\x18\xb0\xa2\x59\x5e\xed\x07\x08\xb2\xed\xcb\xbb\x65\x55\x91\x9c\x24\xd9\x71\x38\xf9\x47\xa4\xc2\xeb\x1c\x45\x40\xcb\xb8\xfd\x90\xb2\xf7\xdf\x38\x3c\x65\xda\xcf\xc5\x5b\x89\xc4\xc6\x00\xaf\x89\x04\x7c\x24\x2d\x75\xb7\xd9\xce\xe9\x37\x52\x95\x96\xf3\xb7\xc3\x08\xed\xbc\xd6\xf4\x44\x31\x00\x35\xa3\xd5\x45\xc3\x8a\x5d\x3a\x30\xbf\x7d\x75\x71\xdc\xa7\x06\xee\x79\xd7\xdd\x88\xc1\xf7\x84\x96\xbe\xac\xf0\x86\x4d\x17\x52\x5e\x25\x4e\x76\x18\x01\xfb\x2e\xda\xe9\xa4\x90\x75\x04\x96\x3d\xd6\x7c\xae\x1f\x3b\xc1\x30\xb6\xcb\x74\x44\xb8\xa8\xe0\xba\xf6\xfa\x10\x80\x0d\xa1\xc9\x32\xe0\x85\x49\x11\xde\x18\x18\xca\x21\x38\x3b\xbd\x6b\x7d\x49\x5e\x0f\x02\x4b\x1c\x7c\xa5\xac\x73\x4c\x6a\x37\xf9\x15\xae\x79\xcf\x9b\xf2\x75\xf0\xa8\x8d\xab\x86\x01\xc0\x9d\x2c\x89\x8b\x19\x59\x13\x75\x97\xa7\xe7\x1f\x1d\x19\xb1\xef\x8e\xcf\x62\x79\x1e\xf9\x95\x43\xe1\xd1\x23\xfb\x97\xc4\xfd\xe9\xa3\xe1\x1d\xbd\x8e\x11\x45\x0f\x50\x04\x1f\xe9\x38\x18\xdb\x61\x7f\x86\xdc\x37\x4c\xba\xe6\xd7\xac\x47\x7f\xaa\x22\x68\xc7\x21\x0f\xe9\xa9\xae\x15\x91\x65\x0e\x87\x38\x5a\xf3\x77\x96\xb6\x78\xae\x88\x3e\x6c\x9f\x2c\xc6\x9b\xbf\x4e\xaa\xe9\x25\x50\x04\x16\xbc\x8c\x23\xbb\x1f\xf1\xe3\x01\x91\xb0\x85\x05\x11\xf0\xc5\x6b\x66\x6e\xa4\xba\xc2\xb5\x8a\xf3\xac\x8c\x84\x5f\x0e\x61\xf1\xb4\x12\x1e\x12\x97\xf1\x64\x3a\xed\xc9\x5c\x0e\x25\x3d\x8e\x0e\x7b\xff\x7b\xad\xe9\xf6\x4b\x7c\xc8\x4a\x99\x8f\x7d\xf0\x1d\x94\xfa\x90\xcd\xe5\x3e\xeb\x2a\xd2\xe4\x76\x0a\x7e\xc8\xae\xab\xcf\xc8\x10\xcc\x3c\x75\xcd\x0b\x76\x5c\x14\x90\x66\xbd\xd5\xd4\xc3\xd8\xf5\x39\xb3\xaf\x4c\x0d\x2b\x2f\x7a\x34\x60\x92\x4f\x19\xbe\x25\xb4\xe2\x14\xfa\x38\x93\xfe\x0f\x2d\x7f\x6f\xdf\x3f\xc4\x3f\x16\x32\x8a\x56\x5e\xdf\x9d\x18\x88\xb9\xdc\x0d\x10\xfe\xda\xf4\x77\x0b\x5a\xb8\xfe\xf2\xeb\xba\xc4\xca\xee\xf8\x52\x89\x95\xf6\x1b\x5b\x4e\xfd\x69\x6d\x58\x0c\xd5\x57\x5d\xd7\x27\x36\x6e\x64\xd9\x35\x79\x8a\x3e\x77\xcb\x38\xa6\x48\xe3\x76\xdd\x9f\x92\xb7\xce\xd8\xbb\xc8\xae\xd4\xb1\x7e\xf1\xbf\x9f\xbf\xbe\xe3\xae\x12\xfe\x4a\xb4\xab\xff\x48\x83\x86\x05\xbb\xe6\x6d\xcf\x28\x01\x85\xea\xe8\x87\x96\xd4\x11\x51\xd4\x45\x2b\x29\x5e\x08\x15\xa3\xe8\x3e\x25\x87\x51\x8f\x90\xad\xaf\xf3\x33\x41\xba\x84\x6a\x54\x09\x46\xc8\x23\x58\x44\xe5\xeb\x3b\x00\x55\xe8\x7f\x3f\x7f\xed\x43\x7d\x81\x7a\x34\x24\x1d\xe7\x39\x97\xdf\xa1\x4f\x66\xe8\xff\x42\x1b\xd5\x16\x86\xb4\x46\xdb\xcf\x53\x48\xf5\x17\xe3\x27\x10\xab\xd8\x9c\x6b\xa3\x96\x4e\x9e\xcb\x59\x44\xb2\x73\x2e\x87\x9f\x5c\xb1\x25\xf9\xc7\x77\xa7\xff\xfc\xaf\x97\xdf\x9f\x1c\xbf\xfc\xaf\x57\xc7\x27\xff\x38\x7b\x7d\xfa\xf3\xcf\x17\xff\xbc\xb8\x3c\x7d\xf5\xf3\xcf\x27\xad\x52\x4c\x98\x13\xec\xdf\x7e\xc1\xcc\xcf\x3f\xbb\x33\xa6\x7f\xfe\xf9\xb2\x68\x78\xf3\xf3\xcf\xe7\xde\xcd\x09\xf7\xa8\x5d\xaa\x84\xee\x12\x00\x6b\xd5\x55\xde\x81\x7e\x87\xdb\x0f\x6f\xd9\xab\xe9\x1b\xd0\x88\x09\x2a\xca\x53\xc4\xe5\xf6\xba\x16\x14\x50\x39\xbd\xf0\xb5\x77\xf6\xdf\xa9\xc8\x84\x0a\xae\x80\x8a\xed\x93\x2a\x42\xe0\x81\x4c\x99\xb9\x61\x2c\xc6\xc9\xce\x81\x35\xf6\xa3\x55\x7d\x8d\xeb\x94\x6f\x15\x98\x5e\x87\x2f\x97\xa6\xe4\x8a\xcc\xae\x39\xbb\x01\x35\x5d\xf3\xb9\xa0\x55\x14\x1a\x84\x86\xb7\x98\x01\xd6\xfd\xfd\x96\x94\xf0\xa8\x40\xb0\x91\xe5\x28\x84\xc9\xfa\x59\x26\x6b\x19\x26\xbd\x06\x4b\x54\x5b\xda\x58\x49\xce\xcf\x9e\x93\xa7\xdb\x2e\x06\xd8\x06\x2e\xab\xe4\x62\x13\x43\x04\x47\x94\x55\xf1\x50\x1f\x1c\x0c\xa7\x7b\xd7\x8c\xee\xc1\x93\x77\xdb\xab\x68\xd6\x56\xd5\x92\xfc\xda\xd2\x0a\xb5\xd7\x73\x59\xae\xdf\x34\x07\x7f\xf1\x1f\xfd\x75\xf2\x97\x40\xf8\x5f\x27\x7f\xb1\xd2\x27\x9c\x8c\xbf\x4e\xf4\x75\x31\xf9\x4b\x51\xb5\xda\x30\x45\xdc\x8f\xb6\x86\xd5\xfc\x48\x83\xa3\x20\xe7\xa8\x9b\x01\x28\xa5\x60\xe7\xde\x89\x46\x87\x4e\x05\xc8\xef\xfc\x56\xd1\x82\x9d\x33\xc5\xc1\x34\x90\xa2\xbc\xd3\x46\x47\x9e\x83\x49\xe9\xfa\x65\xda\x33\xa9\x91\x8e\xb0\x66\x82\xb1\x12\x2d\x35\x47\x36\x23\x73\x4b\x35\xec\xfb\x04\x8c\xaa\xa9\xd5\x06\x0a\xc5\x28\x22\x8a\x91\x92\x55\x0c\xfa\xa1\x26\x35\xb0\xc6\x10\x89\x4f\xd9\x15\x52\x8c\x05\x9b\x63\x0a\xad\x4b\x25\x41\xac\x3e\xbc\x66\xff\xcd\x94\x8c\xd2\x35\xb5\x91\x4d\xd7\x28\xa3\x5a\x92\x6b\x4e\xb7\x9c\x1f\xd4\x0a\x68\xa7\x84\xc2\xf1\x50\x48\x22\x21\x06\xdc\x0a\xee\xc2\x35\x8b\xd6\x90\x52\xde\x88\xed\x55\x0a\x07\xa0\x8e\xc4\x73\x4d\x04\xaf\x46\xbd\x9e\x6b\xb0\xb8\xa4\x01\x9e\xe8\x45\x09\xd2\xac\x0e\xdf\x4a\x21\x7a\xa8\x53\xe0\x37\x6d\x3a\x34\x50\xf2\xc0\xb9\xee\x4a\x50\xad\x00\xc8\xc7\xae\x45\x24\x64\x7c\x68\x26\xb6\xf5\xb3\xd3\x98\xf5\xfd\xf2\xfa\xcb\x01\x6b\xf0\xf0\x12\x63\x2b\xc9\x2a\x33\xa9\x0a\x3e\xad\x96\x64\x41\xab\xd0\xeb\x80\xc6\xbb\xb4\xed\xa2\x5c\x30\x13\x6f\x44\x25\xc5\x3c\xd6\x75\x43\xcb\x82\xc2\x0a\xe5\xb6\x41\xea\xac\x1a\xb7\x94\x6d\xb2\xff\x23\xf6\x7b\x7c\xf9\xc4\x2f\x7a\x8a\xcc\x49\xc9\xa9\x4a\xcd\xa6\x32\xb2\x62\xc8\x29\x43\x84\xd3\xc6\x26\x77\x8f\x74\xfc\xf4\xfb\xd2\xb3\x2b\xc1\xeb\x76\xe9\x0e\x0e\xb0\xdc\x65\x78\x65\xf0\x63\x40\x97\x16\x97\x8a\x8b\xdf\x00\xf0\xff\x92\x58\xad\xc8\xb5\xe6\x71\xbd\x29\xb7\x0f\x8a\xd9\x83\xa5\x78\x53\x31\xf2\x97\x2b\xb6\x1c\x01\xb7\x8f\x50\x9d\xff\x2b\x69\x43\x06\x15\x3c\x1f\x72\x24\x1b\x4b\x80\x54\xe4\x2f\xfe\xbf\xfe\x7a\x87\x2d\xc6\x86\x84\xe1\xf0\xa5\x76\xd5\xf5\xeb\x14\x51\x4f\x78\x04\x54\xc6\xdc\x06\x3a\x40\x14\x23\x71\x95\x27\xe4\x14\x9a\x6f\xa2\x01\x89\xe0\xe5\xd6\x12\x88\x7f\x9c\xe8\x59\xfd\xd1\x87\x53\xdd\x29\xf3\x8e\xfb\x28\x4f\xef\xb5\x74\x1d\xa7\xd8\x88\x9c\x43\x4f\x9d\xee\x13\x10\xc5\xaf\xe5\xe9\x3b\x56\xb4\x69\xd5\xef\x83\x42\x40\x57\x2c\x21\x9b\x32\xcf\xee\x7d\xc7\x96\xfe\x56\xc4\x6d\xb0\xf6\x79\x80\x9a\xeb\x44\x54\x54\x3f\xf8\xe1\x6d\xbc\x62\xdb\xb7\x1d\xc6\x71\xe6\xfd\x1a\x40\x91\xeb\xf2\x18\x4e\xa5\xd7\x8a\x4e\xdf\x71\x6d\xf4\xff\x44\x79\x52\xc8\x7a\xea\x2f\x55\x24\xc7\xf3\x1a\xa2\xfc\xb8\xdd\x77\x58\x1d\xa9\xa4\x0d\xda\x5b\xff\x02\xbb\xda\xe0\xef\xfd\x02\x46\x0d\x6e\xa8\x5d\x8a\x47\xda\x15\x68\x49\x01\x98\xbb\x2e\x22\x81\xcd\xec\x93\xa6\xf2\xb5\x3c\x38\x21\x9e\x3a\xdc\xae\x11\x39\xb5\x66\xd2\x88\xbc\x34\x68\x13\x7f\x6b\x26\x3d\x9d\x00\xbe\x4e\x6c\x12\x08\x33\x00\xcb\xfc\xda\xf2\x6b\x5a\x31\xf4\xc3\xde\xf0\xaa\x2c\xa8\xc2\xfc\x46\x94\xfe\x44\x4b\x57\x0c\x8b\x6d\x35\x93\x22\x59\x41\x2d\x60\x1d\xd7\xbb\xae\x67\x0d\x55\x86\x17\x6d\x45\x15\xb1\xa2\x70\x2e\xd5\x32\xed\x9d\x5e\x1a\xb7\x4a\x1e\x6e\x90\x88\xb6\x66\x8a\x17\x96\xe3\x1b\xaa\xb8\x96\x42\x93\xc3\x90\xf7\xdb\x4b\xed\xbd\xb4\x14\x75\x37\xed\x49\xf8\x0b\xcf\x0a\x69\x81\xc8\x41\xa7\xa0\x13\x24\x49\xc6\x1e\x8e\x1c\xc7\xe1\x72\x95\x90\xd5\xc6\x4f\xce\x52\x90\xb3\xd0\x49\x2d\x96\x82\x87\x58\x14\xe7\x84\x51\x12\x05\x72\xe6\xef\xc5\x70\xe1\xc4\x60\x2d\xa6\xdf\x4a\x6d\x2e\xa4\x62\xe5\x51\xa4\x1f\x05\x51\x3d\x21\x7f\x0f\x2d\x8a\xb7\xed\x67\x87\xa3\x0b\x74\x03\xea\x8d\x7b\x37\x27\x47\x1d\x8f\x77\x37\xc3\x4c\x2a\x76\xcd\x14\x39\x74\x90\x66\xec\x9a\x17\xe6\x68\x42\xfe\xff\xd6\x0e\x4d\x8d\x0d\x06\x03\xd7\xc9\xea\x80\xac\xdf\x75\xd9\x7b\x42\x0e\x61\xaa\xd8\xb8\x3d\x0a\xcd\x15\x97\xda\xb0\x3a\x9d\x9f\x77\x55\xa2\x91\x9c\x57\x99\xe3\x10\xfc\xe0\x4d\xf0\x6e\x73\xd1\x18\x5c\xe1\xf6\xd0\x17\x7e\xeb\x6e\x98\x38\xdc\x8d\x1e\xee\x70\xae\xc3\x7d\x10\x45\x7f\x43\x42\x89\xbf\xf2\xc3\x59\xf8\x6f\x48\x61\x20\x8a\xcd\x41\xa6\xa2\xec\xd9\x71\x8b\xd7\xc4\x34\x51\x23\x1b\x59\xc9\xf9\xf2\xa2\x51\x8c\x96\x27\x52\x68\xa3\xe0\xe6\xb8\x4b\xaf\xd7\xe5\xfb\x88\x70\xcf\x9d\xba\xd2\x9a\xd0\xb1\x71\x86\xb0\x51\xb2\x9d\x2f\xb0\xe1\x35\xfc\x21\xa1\x85\x92\x5a\x87\x77\xda\xd6\xa2\x04\xd7\xa3\x9e\xf8\x0e\xb0\xde\xfd\x1d\xba\x69\xc3\x9c\xd8\x2b\x94\x2e\x9d\x54\xa2\x53\xe8\x0d\xdb\x55\x13\x78\xd2\xb7\x65\x87\x63\x7b\x67\xbf\x77\x1d\xac\xca\x72\xfc\xfa\xf9\xb6\x99\x16\xbb\xb3\xc8\xdf\xb7\xa5\x51\xef\x44\xc0\xc7\x0c\x7b\x17\xec\x5d\x58\x65\x44\xd7\x83\x5e\xb4\xfc\x9a\x89\xb0\x32\xf7\xa4\xb9\x76\x4d\xdf\x5d\x5c\xb1\x9b\x84\xbf\xf4\x2f\xfa\x1d\xdb\xbe\x86\x63\x0c\xce\xba\xb7\x42\x53\xc3\xf5\x8c\xd3\x69\x75\x97\x1d\xbe\x01\xd3\xe5\x82\x55\xac\xd8\xa1\x55\xf1\x32\x26\x22\x34\x3c\x36\x92\xcc\xb8\x58\xe1\xb1\xb4\xab\xa3\x03\xc1\xf3\x4d\xce\xb8\x0e\x08\x7d\x6e\x5a\x28\xe6\x93\xad\x70\xdd\xe2\x43\xce\x22\x26\x69\xb4\xf5\x94\x29\x2f\xc2\xd2\xd4\x23\x87\xa7\x88\x5d\x96\x75\x23\xb1\x98\xd6\xb3\x0e\x49\x6d\xe0\x39\xb8\xc2\x66\x68\xb9\x0a\x2c\xe9\xe9\x3b\xab\xf7\xea\xb4\x8a\x05\x1c\x3d\x4e\x5a\x7d\x28\x66\x2a\xf9\xe2\xb3\x95\xad\x73\x87\xbe\xb6\x6a\x37\xc6\x34\xe2\x4f\x52\xc5\x70\x37\x86\x94\x68\xe1\x48\x2e\xd4\xc2\x91\x27\x59\x91\x20\x80\xc1\x7b\xd7\x0e\xd7\x38\x7c\x13\xa3\xcb\x39\xff\xbe\x1e\xa1\xb5\xef\x10\x4b\x45\xa7\x8c\xd9\x1f\x0f\x20\x0b\x7c\x07\xce\x1c\xb9\x62\x4b\x78\x3c\xce\x98\xde\xb8\x6d\xe0\xb1\xf0\x84\x0d\x29\x3f\xc3\x31\xb6\xaf\x34\xe8\xef\xfd\x32\x27\x3f\x64\xe8\x19\xc7\x91\xe8\x59\xec\x46\x8f\x8f\xaf\x3a\x67\x21\xf2\x64\xcf\x59\xd8\xc9\xe5\xce\x55\x38\x68\xee\xc1\xc5\x6b\x38\x86\x78\xe0\xba\x91\xef\x40\xc7\x34\x7d\x8a\x57\x8e\x42\x4e\x8b\x9c\x0d\x3e\x5e\x38\x36\x79\xe9\xce\xc4\x88\xbc\x96\xc6\xfe\x8f\x73\xa7\xd9\xe3\xfc\x5c\x32\xfd\x5a\x1a\xf8\x64\x2f\x76\x12\x17\x60\x9f\xf6\xd1\x79\x2d\xac\x18\x16\x78\xdd\xb8\xe4\x3b\xab\x28\xb8\xfd\xda\x64\x06\x9f\x09\x22\x95\x5b\xf2\x81\x24\x04\x4b\x5a\x3b\x02\xe2\xfc\x01\xd7\xe2\xfa\xbd\x86\xb8\xa5\x22\xde\xe6\x5b\x23\xc6\x11\x02\x90\xcc\xf8\x0d\xa0\x90\x43\x03\xfd\xd2\x77\xe7\xa7\x76\xe5\xa8\x61\xf3\xad\x2b\x30\x57\x47\xcd\xd4\x9c\x91\x06\xa2\x4e\x19\x38\x77\x88\x22\x81\x63\xa0\x3a\x11\x13\x33\xf8\x18\x65\xae\x7e\xbd\xc5\x87\x82\x4e\x09\xb6\x46\x1e\x1d\x75\xc0\x79\x8f\x48\x41\xad\xab\xa6\xe0\x20\xf9\xbf\x21\xb8\xfc\xff\x48\x43\xb9\xd2\x13\x72\xec\x13\x20\xe3\xef\x5c\x0e\x49\xf4\x98\x01\xa4\x34\xeb\xe1\x0e\x2a\x08\x73\x90\x1b\x72\xb6\xa6\x8c\x8f\x1c\xd4\xbc\xbd\xb0\x83\x73\xf9\xe0\x8a\x2d\x0f\x52\xc1\x9f\x70\xc4\x12\xe5\xe0\x4c\x1c\x74\x19\x8f\x3d\x29\x10\x74\x52\xc0\x5f\x3f\x80\xef\x0e\x6e\x4f\xef\x1f\xa4\x41\x76\x78\x4e\xe7\x19\x54\xb0\x81\x47\xb6\x77\xa6\x6a\xda\x0c\x3b\x52\x1d\xf3\x7d\xc7\x96\x3b\x0b\xc1\xbc\xea\x51\xe1\x4d\x18\xe3\x4c\xf5\x4e\xb3\xd4\x08\x0f\x50\x41\x0a\xc1\xc2\xb9\x05\xe5\x35\x53\xe8\x12\x4c\x9a\x1b\x9d\x60\xf6\xae\x09\x95\x00\x1d\x1a\x10\xf0\x23\x4c\x6c\xf9\xd0\x7b\x34\x2a\x29\xaf\xda\xc6\xf3\x33\x64\x09\xa7\x9e\x18\x2e\x0a\x59\x3b\xbf\x08\xbe\x27\x78\xc2\xdd\xc1\x1c\xbb\x84\x2c\x94\x31\xe1\x28\x60\xca\x57\xcf\xeb\x93\x18\xb5\x8c\x17\x33\x38\x78\x99\xbd\xf6\x83\x3f\xb0\x5b\xde\x0f\x2e\x55\x12\x01\xbe\x14\x20\x5e\x05\xd7\x01\x99\xd6\x21\xee\x3f\x93\x6a\xca\xcb\x12\x7c\x91\x48\x5c\xa8\x47\x5b\x61\x1c\x2b\x69\x7a\x7e\xa8\x34\xa1\xb1\xf2\xd4\x0d\x65\xfa\xab\xce\x2e\xf1\xc8\xa4\x64\x4d\xe3\x80\x49\x5c\x67\x20\xfb\xa0\xf0\x8a\xab\x4b\xe3\x19\xc1\xae\x7e\xd2\x4c\x53\xe6\xc3\x87\xf6\x4a\x12\x6d\x55\x59\x6d\x0f\x14\x31\x74\xcb\x60\xa4\x0f\x44\xb2\xcb\x99\x98\x5b\x21\x6d\xfa\xcc\x96\xd4\xc7\xc2\x35\xdf\x80\xb3\x3d\x65\x86\xfa\x36\x1c\x62\x05\xac\xaa\xbf\xf8\x67\xe2\x5c\x96\x7d\x8f\xf6\x07\x50\xab\xc8\xa1\xff\x8f\xe9\x32\xb9\x26\x87\x0c\xd6\xf1\x06\x68\x76\x39\x2f\x87\xe1\x0a\x97\x73\xa6\xef\xee\x5a\x80\xe9\xa3\x50\x14\xe6\x06\xcf\x15\x43\x90\x62\x90\x4a\x20\xa5\x5c\xc7\xa7\x56\xb0\x6b\x66\xb9\xb7\xe4\x76\x0d\xa7\x6d\x22\xa4\x9b\x4b\x1f\xfb\x65\xcd\xab\xff\xff\x7b\x2e\x5f\x4b\xe3\xc3\x54\xbf\x8c\x5c\xc0\x1c\xf5\xb8\x77\xbc\x6e\x6b\x6c\xd9\x6c\x8c\xb5\x61\xf8\x6c\xc6\x54\x62\x5f\x3a\x12\x4a\x63\xfa\xbe\xeb\x7e\xb4\xc6\x49\x09\x43\xd5\x1c\xea\xb9\x9d\x1f\xda\xab\x5c\xf3\x4a\x4e\x69\x45\x6a\x2e\x2c\x69\x69\x2b\x71\xb9\xf6\x9c\xf0\xc6\xee\x9f\x1f\x20\x0e\x74\x50\xd7\x54\x09\x9d\xe3\x69\x19\x12\xca\xe5\xb6\xcf\x56\x56\x63\xe5\xe1\x20\x5f\x2a\xa6\x35\x66\x2f\xbf\xe2\xe2\xb9\x0b\x2d\x26\x4d\xfb\xc2\x4a\xc7\x77\xb4\x6e\x2a\x36\xc2\xf0\xe3\x97\xe3\x7f\x4b\xc1\x88\xab\xca\x18\x05\x16\x75\x65\x46\x46\x92\xa7\xa8\xf0\x36\x01\x35\xcd\x97\xff\x24\x51\xd0\x93\xbb\x21\xd8\xaa\xc9\x17\x8f\xbf\x78\xfc\x34\x4d\xc4\x9c\xb9\xca\xa8\x82\x6a\xd7\xd8\x75\x7d\x77\xb7\xae\x31\xc2\xf1\x1b\xb1\xab\xf3\xd4\xfd\xef\x17\xee\x7f\xbf\x24\xbf\x25\x3e\x8d\x9c\x93\xf3\xde\xff\xda\xff\x49\x7c\xda\xd8\x32\x4f\xb4\x5d\x4f\x47\xfd\xbb\xb5\xa0\x02\x2f\x3e\x7b\xcf\xbb\xf3\x0d\xda\x1e\xbe\x02\xdc\x33\x85\xac\x19\x2c\xfd\x17\xff\x33\x4d\xd7\xc4\xe7\x42\x01\x81\x21\x52\xb8\xa7\x3f\x3d\x84\xe5\x3a\x22\x37\x90\xf7\x50\xd3\x2b\x0c\x58\x1d\x17\xa6\xa5\x95\x25\xf8\xf0\xcb\xf1\xd3\x23\x22\x45\xef\xe7\x49\x24\x5c\x73\x69\xf5\x35\xbf\x12\x87\x4f\x13\x21\x28\x56\x97\xf3\x8b\x0d\xcb\xd9\x5b\x49\x78\x5b\x2a\x96\xf0\x0a\x79\x65\xb2\x17\xc7\xc7\x62\x79\x43\x97\x41\x28\x7b\x75\x7d\xce\xaf\x19\x59\xf0\xf9\x02\xc0\x1a\x06\xb4\x0a\x25\x98\x96\x0e\x32\x96\xfb\x6e\x8e\x48\xc8\x92\xf0\x44\xed\xef\xcc\x3c\xd2\x90\xd1\x82\x31\x0a\x87\xc3\x13\xca\xe8\x42\x6d\xcc\x53\x10\x2b\x4f\x56\x70\x48\x76\x9c\xe6\xf4\xe5\x17\xdb\xeb\x14\x41\x26\xef\x4c\xad\x08\x14\xf4\xfa\x31\xac\xdf\x66\xab\x97\xcb\x00\xae\xfd\xc8\xad\x05\x17\x45\xb8\x3c\xc3\x35\x7e\xe5\xac\xe1\xee\x46\xeb\x56\x2f\xcd\x2f\x7b\x2e\xcb\x90\x20\x42\x9c\x3e\x0d\x89\x75\x9a\x1c\xf4\xaf\x81\x03\x48\xb4\x0b\xde\x1b\x07\x31\xed\xec\x3d\x2e\x85\x7d\x0f\x7f\xf8\x07\x75\xc0\x26\xe4\x58\x94\x5d\xb1\x53\xe2\x2a\xb1\x5f\x5b\x5a\x81\xf3\x7a\x0e\x79\x82\x2a\xcf\x7a\x45\x65\x51\x6b\x2d\x5d\x3b\x69\x9e\xf8\xda\x78\xee\x75\x5b\x41\xa6\xe5\xc7\xdf\x3f\x2b\x27\xe8\x2e\xd5\x0a\xac\xce\x90\x6b\x55\x4b\x6c\xdb\x2e\xbc\xfa\xef\x32\x2f\xa4\xf3\x4b\x0c\x3a\x0c\x67\xb3\x0d\xd5\x7e\x5d\xee\x16\x99\xb2\x05\xbd\xb6\xc7\x11\x50\xa6\xe2\x93\xea\xb6\x18\x54\xac\x21\xc9\xe8\x51\xfd\x87\x13\x81\xba\xcf\x32\x4f\x06\x1c\xf3\xee\xdd\xa4\xc1\xf7\xfb\x71\xf5\xb6\x0a\xf1\x8f\x9e\x25\x91\x68\x52\xa7\x28\xa8\x5f\x8c\x56\xd6\xd5\x7d\xfe\xd5\x5d\xe9\xad\x5f\xa4\xe9\xad\xb7\xae\x5c\xe2\xff\x26\xdb\x48\xdd\xc1\xdd\x78\x5e\xbf\x3a\xec\x56\xfd\x08\xea\x0e\xd6\x04\x2e\x00\x77\x75\x49\xce\x89\x27\xcc\xa9\xf7\x9a\x9b\x96\x22\x3e\x98\x60\x37\xae\xe2\x3b\xda\xd6\x95\x2d\x8a\x9c\x5c\x5e\x65\x4b\x93\x2b\x53\x56\xd0\x56\x33\x28\x4b\xb0\xe6\x37\xd1\x96\xfd\xbc\xc3\xf0\xcb\xc3\x2f\xc9\x98\x3c\x39\xb2\xa7\x5b\xa0\x68\x01\x16\x8c\x15\x6e\xe8\xbb\x83\x86\x9e\x59\x58\x53\xdf\xee\x73\xa2\x94\xe3\x0e\x5c\x74\x45\xed\xbd\x7f\x6a\x93\x90\x25\x3b\x9e\xcd\xb8\xe0\x66\x99\x8a\xb6\x9f\x47\x7d\x7a\xbd\x46\x49\xa4\x46\x2d\xe4\x0d\xb9\x71\x50\x07\xc0\xcb\x0e\xb1\x2f\x26\xff\xb1\xfd\xc7\x20\xc7\x35\x5c\x96\x41\x17\x71\x16\x47\xd0\x07\x9c\xb4\xb1\x7c\x37\x71\x65\xfd\xae\x8f\x50\xca\x5c\x63\xf2\x0f\x29\xa4\x7a\x86\xc6\x21\xb6\x71\x0f\x3a\xc8\x7b\x5f\xcb\xdd\x2f\x45\xd5\x96\x51\x83\x8e\x4e\x7b\x4a\xbc\x3e\xc7\xe4\x0c\xfc\xb7\xcf\x3e\x36\x73\xf0\xf2\x02\xc6\x43\x19\x2e\xbc\x0f\x11\x94\x9e\xd0\xbf\xb1\x86\x1f\xae\x72\x8e\x81\xc0\x7e\x60\xd2\x7e\x0b\x8b\x4a\x1a\xe0\x9f\x3b\xaf\x3d\xb2\x2b\x02\x35\x51\xc9\x8d\x2b\xf2\x1d\xa5\x98\x8e\x0f\x1e\x24\x6c\xcd\x86\x49\xe9\xab\x07\x20\x69\xf6\xbb\x38\x34\xc8\x7b\xf6\xe2\x91\xad\x71\xd4\x8f\x08\xad\x24\x04\x91\xec\x75\x64\x3f\x62\xa5\xfb\xe1\x4c\xfa\x58\xd3\x6a\xec\x23\x89\x8c\x05\x80\x91\x76\xe5\x2b\xa3\xde\x29\xc8\x71\x04\xfd\x86\x7c\xc2\xa1\xbb\xe3\x03\x86\x54\xee\xea\x84\x45\xc9\xf4\xbb\xab\xeb\x0b\x24\x78\x87\xf5\x15\x03\xcd\x02\x36\x0e\x63\x69\x13\x38\x83\x71\xef\x77\xea\xc2\xcd\x4e\x59\xe2\x3a\x39\xf1\xd3\xaa\xd3\x1c\x10\x85\x0b\x5a\xc5\x76\x87\xb5\x77\x78\xc9\x14\xaa\x3b\x53\xd6\x03\x89\x4a\xad\xb7\xc0\xf1\x63\xf7\x74\x04\x94\x02\xa4\x03\x9c\xfc\xaf\x88\xcd\x7b\x30\x6d\x8b\x2b\x66\x7c\x62\x86\x02\x10\x97\xa6\x35\x64\x4a\x2b\x2a\x0a\x7b\x16\x41\x93\x4d\x73\xd4\xcf\xbc\xeb\xdf\x48\x24\x00\x67\x4b\x7e\x1b\x6c\x68\x11\xe0\x89\xf0\x15\xa2\xaa\x5a\x2e\xb4\xb1\x54\x63\xb9\xed\xb0\xc5\x3b\xae\xb4\x1c\x59\xa9\xeb\x27\x5d\x0b\x5e\xe0\xf4\xee\xbf\x31\x7f\xc6\x69\x04\x8c\x19\x87\x6a\x17\x25\xaf\xc8\x94\x56\x6d\x9b\x74\x3d\x07\x23\xdc\xbf\x2d\xd2\x5e\x92\x4d\xe6\x90\xfd\xb7\x72\x3c\x0e\xfa\x70\x92\x1e\xa1\xea\x60\x84\xbb\x68\x4f\x89\x03\x1a\xc5\x97\x07\x05\x9d\x9a\xa1\x2b\x2e\x4a\x80\x2f\x5e\x25\x26\x3c\xb5\x4f\x95\x35\x04\x3c\x45\x60\xe6\xe6\xa7\x68\xb3\x3b\xf6\xae\xc5\xe7\x9a\x8f\x7b\x57\x42\x74\xdd\x7d\xd1\x57\x51\xa0\xc8\x86\x56\x1e\x84\xc8\xaa\x14\x7c\x66\xad\xae\x52\x32\xcc\x8a\x40\xf7\x78\xa2\xf3\x8d\x79\xbd\xa4\x73\x11\xa5\xde\xda\x3d\x77\x0b\x39\xf4\xd9\x01\xc4\xb0\xaa\xc2\xdb\xa1\xf3\x88\x59\x4b\xd8\xc8\xce\x25\x96\xea\xdb\x1f\x93\x7e\x68\x62\xe3\x64\xf1\x44\x1e\x53\x0a\x22\xa7\xcb\xd0\xf9\x36\x35\x07\x77\xda\x1a\x32\xe7\xd7\x56\x85\x5a\x8b\x7f\x6c\x8a\x65\x60\xfc\x69\xc1\xaa\x86\x28\x56\xb6\x05\x1b\x90\x09\xa8\x13\xcd\x6c\x42\x8e\x63\x87\x20\x40\x7a\x84\xeb\xf2\xa0\xc7\x8b\x07\xae\x4d\xef\x70\x45\x91\xcf\x40\xc2\x82\x89\xc7\x67\x84\x5d\x33\xb5\x24\x8d\xd4\x1a\x64\x3f\xe8\x0b\x88\xc1\x08\xd9\x94\x33\x5f\x58\x03\x4e\x15\x58\x33\xe7\x5f\x48\x9a\xfc\xc0\x39\x25\x0e\xc0\xa9\x2c\x07\xeb\x00\xfb\x1b\xb5\xfe\xf2\xf1\xd3\xd4\xa8\x75\x6e\xef\xdf\x39\xfc\x5f\x08\x29\x0f\x0a\x2d\x9f\xcd\x36\xc9\xc9\xb0\xb6\x3d\xc9\xf3\x29\x51\xe7\xd4\xd0\x24\xac\x0c\x04\x87\xbf\x3c\x8a\x02\xd6\x5f\x3e\xfe\xe2\xf1\xd3\x43\xbb\xf6\x5f\x1c\xd9\x5d\x88\xc2\xca\x5f\x44\x61\xe5\xf0\x97\xee\x2d\x12\x10\xb6\x48\x97\xb4\x73\xf8\xf4\x68\x02\x35\x0d\x00\x9f\x7a\x23\x55\xe9\x4a\xfc\x3d\xa0\xa5\x7d\xf3\xd0\x9d\x94\xd7\x5e\xf9\x1c\x81\xd0\x0a\xd2\x31\xcd\x3d\x04\x01\x0d\x08\xa3\x73\x43\x3e\xaf\xa5\x62\x9f\x47\x53\xdc\x57\xc5\x60\x3d\xb9\xab\xa6\xcd\xf8\x2a\x21\x6f\x77\x48\xb1\xf3\xd0\x52\xe7\xf7\xa5\xa8\xd5\xb4\xd9\xe2\x39\xd7\xb2\x6a\xeb\x6d\xb3\xb0\x87\x29\x44\x2f\x5d\xdd\xaa\x9b\xda\x95\x56\x62\x9a\x43\xed\x6a\x8e\xa7\xcb\x18\x69\x78\xca\x2a\x29\xe6\x18\xab\x0c\xfd\x14\xb7\x9c\xf5\xd3\x80\xdf\x0b\x29\x0a\xd6\x18\xfd\x58\x1b\xa9\xe8\x9c\x3d\x76\x44\x6e\x35\xd9\xee\x20\x0b\x7e\x00\x6a\xfb\x95\x6f\xd8\xb3\x08\xdf\x23\xe0\x40\xfb\xfa\x6f\x90\x97\xb4\x00\x54\x4c\x58\x75\xab\x2d\x45\xfd\x8f\x45\xea\x72\xef\x08\xb5\x20\xa1\xc1\xe1\x90\x6a\x50\x7a\xa3\x4f\x2b\xaa\x0d\x2f\xfe\x5e\xc9\xe2\xea\xc2\xc8\x34\x47\x5f\x0e\x0b\x63\x13\x2d\x3d\x4e\x10\xe4\xf8\xc7\x0b\xf2\x9c\xeb\x2b\xa2\x98\x96\xad\x2a\x5c\x27\xb5\x15\xbc\xc8\x6d\xa1\x6d\x71\xd8\xc3\x54\x31\xe3\x3a\x02\x90\x9a\x16\x0b\x34\xfd\x5d\xd6\x03\x7b\xd7\x48\xdd\xf5\x86\x4f\x60\x29\x1c\x71\x23\x8d\xe3\x1f\x2f\xd6\x5f\x99\xeb\xa8\x87\x07\xfa\x10\xb1\x94\x06\x3c\xb1\x5d\xa6\xfc\xd8\x28\x96\xa6\x95\x6d\x5c\x69\xcb\xf0\xe0\x94\x52\xac\xe4\x0a\x71\x5e\xdd\xbb\xb2\xa9\x9e\x14\x9a\x4f\xe8\x8d\x9e\x14\xb2\x26\x27\x17\x67\xa4\x54\xfc\x3a\xb5\x8d\xd3\x30\x51\xf6\x19\xbd\xd1\x0c\xc9\x9f\x5a\xf2\xed\xd7\x29\xeb\xb0\xe3\x56\xa6\xf8\x36\x67\xcf\x13\xfe\x7c\x68\xfd\xf7\x4c\x5f\xda\x77\x4f\xb4\xe7\x72\x55\xcd\x21\x15\xde\x23\x3b\xe3\x15\x43\xc0\x2e\xe4\x44\x17\xf7\x75\x62\x1f\x8e\xf9\x52\xb6\xe4\x86\xa2\x63\x1b\xee\xd9\xf4\xf2\xcd\x4b\xde\x3c\x23\xa7\x42\xb7\x8a\x75\x45\xea\xab\x24\x58\xc5\xdd\xb7\x39\xf6\xe8\x42\x20\x1b\xdc\x71\x14\xf3\x01\x10\x63\x38\x4e\xd1\x3a\xd3\xcf\xc8\x01\x7b\x67\xfe\x78\x30\x22\x07\xef\x66\xda\xfe\x8f\x30\x33\x7d\x30\x21\x67\x75\x53\xf1\x82\x1b\x6b\x8e\x8a\x19\x53\x9d\xab\x18\xff\x20\x53\x13\xa8\x7d\x39\x93\x24\x47\x25\x2b\x38\x85\x81\x3d\x77\xcc\xe1\x81\x10\xcf\xe4\xd1\x07\xe2\x36\xd9\xfb\x6c\x46\x24\x96\x1e\xf4\x51\xd4\xb9\x0e\x0f\xb7\x0c\xed\x66\x17\x09\xed\xa0\xba\xd1\xb1\xf0\x0b\xa9\xfc\x23\x1f\x97\xec\xfa\xb1\x2e\xe9\xd3\x11\xbc\x16\xf2\xe7\x72\x65\x0d\xa8\x26\x07\x4f\xb7\xee\x63\xd0\x8d\x0b\x5e\xf3\x8a\xaa\x6a\x39\x8a\xd7\xb2\x7b\xbe\xbd\x2a\x3d\x21\xe0\x4c\x7e\x72\x40\x0e\x11\xac\x1c\xd4\xf5\x8a\xf9\x6e\x81\xa1\xe9\x30\x54\x40\x25\xf7\xe2\x1b\x9a\x18\x42\x06\x27\x87\x10\xb8\x98\x68\xf9\xbd\xa8\x92\xc1\x3d\x72\x71\xbf\xa7\xc3\xe3\x07\xaa\xd6\x45\xb1\x67\x12\x35\x37\xd6\xfd\xc4\x77\x0c\xe2\xc2\x99\x00\xaf\x2c\x8f\x0e\xc0\xb3\xd8\x37\x71\x96\xde\x1d\x91\x04\x4d\x61\xd7\x1b\xea\xe9\x80\x94\x7a\xc1\x7f\x6d\x19\x39\x7b\xee\x2f\xea\x86\x29\xcd\xb5\x61\xc2\x90\xb2\xa7\xa1\x73\x54\xdb\x0f\x8f\x6b\xfa\x6f\x29\xc8\xe9\xdf\x2f\xdc\x83\x92\x8f\xd9\xfe\xed\x6e\xe2\x65\x45\xff\xdd\x2a\x66\xed\x99\x9d\x99\x5c\x9e\x80\x55\x3b\xcb\x7e\x4e\x9e\x53\x43\xd1\xdc\xc2\x1b\x43\x76\x2d\xc7\xc0\x2c\x9a\x02\x9e\x9b\xef\x6d\x97\xcf\x28\x0a\x44\x6d\x65\x09\x45\x2f\x63\x37\x25\x6d\x3d\x36\x9a\x3f\x96\x9f\xd1\xfe\xb1\x33\x64\xb0\x80\x76\x6c\x79\xd8\xf7\x79\x9d\xea\xd1\xc7\x3f\x7f\xfb\xe6\x6c\x07\x76\x4b\x01\x36\xf9\xfc\x95\x2c\xf3\x18\x2f\x8f\xa2\x07\x7a\x15\x0d\xfa\x15\x9f\xe0\xe7\xa4\xb6\x33\x91\xd7\x52\xb0\x11\x79\xc3\x68\x49\xec\x65\xe5\xfe\xf3\x47\xc5\x0d\x9b\x3c\xda\x95\x92\xeb\x37\x31\xcb\x42\xf8\x87\xf9\x45\x78\x1d\x75\xb1\x84\x56\xb3\x20\xd2\x9d\xce\x3a\xad\xe4\x94\x38\x91\xba\xcb\xb7\x7f\xfb\xe6\x2c\xdb\xcb\xbf\x7d\x73\xe6\xdf\xdd\xfe\xa7\x9c\xed\xe7\x6b\xef\x9b\xe1\xfe\x62\xc5\x62\x1e\x6e\xb9\xbc\x72\x35\x11\x74\xcd\x1a\xbf\x7d\x53\x7c\xb2\x63\x23\x3c\x03\x84\x93\x33\xf4\x9e\x11\x4b\x57\x9a\x1b\x94\x8b\x64\x78\xc4\xbe\x70\xb5\x4f\xea\x5a\x46\x45\x59\x6f\xd0\x7a\xb0\x7c\x46\xea\xb6\x32\xd0\x84\x07\x8e\x96\x3d\x6b\x50\x40\xe6\x0f\x19\x71\x4d\x69\xad\x76\x80\x99\x26\xe5\x33\x8f\x9e\x14\xfe\x62\xf3\x1f\xbc\xa2\x82\xce\xed\xcf\xe1\xc6\x26\x35\xfe\x33\x3a\xd3\x87\x18\xe0\x17\xe1\x2b\x7a\x4d\x79\x45\xa7\xbc\xe2\x06\xac\x91\xa3\x89\x5f\x4b\x84\x9a\x01\x92\x77\x26\xec\xf7\xce\xa4\x8b\xfb\x73\x40\x73\x47\x72\x68\xbf\x7b\x7c\x63\x2f\xc5\xa3\x09\xdc\x90\xf0\xc3\x05\x53\xb1\xd5\x97\x3c\xb3\x3d\xf0\x6f\x6e\xc9\x5a\x1c\x6e\xa1\x45\x07\x0f\x56\x23\xcd\x12\xb0\xd2\x74\xa7\x96\x80\x25\x60\xa3\x25\x00\x5f\xb8\x56\xbb\x3b\x30\x06\x60\xfa\x04\x63\x00\xfe\x2e\xb3\x31\x60\xaf\xa5\xdf\x93\x31\xa0\x59\xa1\x98\x19\x60\x0e\x80\x68\x4c\xfc\xfb\xa1\x06\xc1\xde\xc9\xc5\xf2\x41\x2e\xc6\xa3\x63\xae\x2c\x3b\xd4\x3d\xce\x2b\xeb\xa1\xdf\x3e\x7e\xb5\x82\x72\x8d\xc2\xeb\xc2\x69\x07\xbe\x0f\x3f\xfc\xbd\x15\x59\x29\xf8\xfe\x38\x06\x5f\xe8\xe1\xd0\xe4\x59\x17\xff\x34\xbf\x2c\xa8\xf6\xc0\xc7\x24\xf9\x68\x0f\x7c\xcd\x82\x35\x8b\xd9\xce\xa0\x1d\xec\xec\x2f\x2e\xfa\x89\x24\x27\xac\x59\x90\x17\x17\x1b\x2e\x30\xc4\xef\xb0\xcb\xa5\x31\xbd\xe4\x91\x26\x15\x9f\x31\xc3\x53\x23\x23\xf1\x1d\x76\x82\xb4\xf4\x2e\xb0\x00\xcc\xe4\x2f\x2c\x5c\xae\x10\x78\x14\xd2\x77\x5f\x0d\x76\xcf\x3d\xbc\x5c\x6a\x29\xb8\x91\x5b\xb7\x4a\x27\x39\xfa\x18\xb8\xa9\x77\x7d\x35\x78\x3a\xec\xa6\xbe\xf1\xcb\x49\x5e\x45\x9f\x52\x52\xc8\xaa\x62\x85\xc7\xd2\x00\x36\x1d\xb0\x72\x38\x36\xb8\xc8\x5d\x2a\xb0\x9e\x5c\x7d\x03\x4e\x72\xe7\x0e\x7f\x8c\xac\xf7\xf8\xcd\xe9\xf1\xf3\x57\xa7\x93\xba\xfc\x6c\x21\x6f\xc6\x46\x8e\x5b\xcd\xc6\x3c\x15\x2a\x75\xe7\x5d\x16\x32\x58\xd3\xb7\x80\x5a\xdc\x50\xb3\xc8\x63\x5e\xdb\x27\x59\xf6\xe9\x1a\xee\xbf\xd5\x88\x17\x00\x88\x6c\x2e\x0f\x51\x49\x69\x46\x44\x51\x48\xbe\x0d\x8d\x9c\x67\x6d\x55\x21\x9f\x59\xd9\x33\x8a\xe3\xc3\x8f\x1f\x8c\x5c\xaf\x4e\xf5\x16\xf7\x77\x65\xf1\xee\x8b\x78\x18\xae\x5b\xa6\xda\xcc\x24\x23\xc3\x74\x94\xf4\x59\xe6\xa2\xf7\x39\xe6\x3e\x98\x85\x65\xa0\x2b\xb6\x24\x80\x6a\x6f\xcd\xd6\xb7\x9a\xa9\xfe\x11\x64\xa6\x80\x55\x7f\xdc\x6a\xa6\x26\xf8\xf8\x7b\xbe\xd3\x43\x74\x65\x78\xff\x37\x6c\xb6\x1f\xfb\xfc\x86\xcd\x36\x6d\xb3\xfb\x18\x9a\x47\x87\xaa\x2a\xab\x8a\xb7\x66\x81\x95\xbf\xd8\xde\x1f\xed\x94\x8d\xfb\x8e\x7d\x10\xee\xf9\x46\x0f\xc2\x57\xcf\xd1\xd8\x46\x0c\xb0\xaa\x48\xe6\x26\x20\x71\x1c\xcd\x71\xc6\xc0\x6e\x29\x97\xbd\x16\xb0\x08\x41\xc6\xaf\x59\xb5\x0c\xba\x3a\xd6\xcd\x94\x2d\x22\x22\xd3\xe2\xea\x86\xaa\x52\x63\x73\x60\xc3\x9d\x87\x9b\xa7\x2b\x96\x76\xf8\x16\xea\x0e\x73\xd9\x35\x12\x71\x05\xd8\x1a\xdf\x98\x3b\x63\x06\x0b\x42\x85\x03\x97\x76\x08\x6a\xf6\x8e\xa4\xc9\x49\x17\x9e\x88\xda\xda\x6e\x05\x53\xd6\xda\xaf\x96\xe4\x46\xc9\x54\x04\x36\x3f\xb6\x4c\x2c\x91\xd7\x4c\x5d\x73\x76\xf3\xf8\x46\xaa\x2b\x2e\xe6\x63\xfb\xb2\x63\x3c\x02\xfa\xb1\xe5\x44\xfd\xf8\x33\xf8\x9f\x01\x54\x65\xea\xec\x11\x3c\xd4\x07\x07\x39\xd4\xe1\xc1\x0d\x07\xec\xb0\xf7\xdb\xae\xa5\xba\xa5\xc1\x9e\x25\x19\xeb\xd1\xca\xdf\xd8\x8a\x96\x52\xe3\x6f\xec\x3e\xf6\xe4\x35\x2d\xeb\x44\x14\x63\xb2\x37\xe2\x3a\xd5\xb9\xc3\x45\x99\xb6\x75\x59\x9c\x3b\x30\x7b\xdf\xb9\xe3\x3e\x73\x49\xa0\xa1\x1c\x84\xfa\xa8\x04\x00\xcf\xfa\x22\x8f\x7e\x8d\x47\x06\x0f\x0f\x4e\xbe\x5d\x88\xc2\x51\x9c\x39\x3e\x81\x4f\x85\x08\x85\x6c\x98\x15\xc9\xc5\xd5\x44\xaa\xf9\x6d\x14\x6d\xac\xf2\x6b\xbd\xd4\xbf\x56\x63\xa4\x60\xdc\x94\x1d\xc3\xde\x3f\xcf\xd5\x43\x75\xc6\x07\xab\x33\xee\x77\xa2\xc7\x1e\xd7\x5c\xdc\xe6\x91\x22\xbf\x4b\x2f\xcd\xef\x2a\xe4\xb6\x43\x9e\x18\xee\x8b\xd9\x37\x13\xbd\xd3\xe8\x1a\x09\xd8\x6c\xae\x61\x26\x58\xe0\x78\xb3\xf8\x58\x21\xa0\x30\x50\x45\x6b\x66\x98\xea\x00\xe3\x0b\x29\xc4\x90\x7e\xb3\x46\x92\xef\x1b\x26\x2e\xe0\x12\x7e\x30\xab\x1f\xcc\xea\x0f\x8f\x07\xb3\xfa\xc1\xac\xce\x61\x56\xef\x5d\xc1\x90\x97\xa7\x08\x82\xe8\x0a\x01\x3b\x44\x07\x67\xb3\xdc\xbf\x3b\x33\xd5\x7a\x96\x62\xc6\xe7\xaf\x68\x33\xd8\x80\x0e\x4f\x5a\x31\x86\xc3\xc7\x2e\xb3\x01\xa0\xa9\x1a\xd9\x40\x8b\x3e\x07\x23\x0a\xcb\x7f\xf7\x96\xd9\xd0\xcb\xc8\x1d\xb8\x6c\x45\x20\x03\xf8\x3b\x22\xa5\xaf\x6f\xd4\xf6\x93\x29\x37\x9d\x26\xa1\x99\xc1\x7e\x60\xd8\x73\x95\x48\x41\x0a\x87\xf0\x0e\xf6\x4f\xd4\xa7\x2e\x83\x4d\x25\x88\x2c\x8c\x87\x1a\x0d\xed\xc3\x9e\x3c\x79\xf2\x04\x7b\xc7\x7c\xfd\xf5\xd7\x44\x2a\x42\x49\xc9\x0a\x5e\xaf\xff\x10\x7e\xf5\xd5\xd3\xc4\xf6\x0a\x76\xfc\xf3\xf8\xd5\x4b\xc0\x65\x69\x8c\xc6\x0e\x8d\x48\x91\x7d\x70\x6f\x52\x3d\x22\xff\xeb\xe2\xfb\xd7\x5d\xeb\xbf\xfe\xb7\xe0\x35\x09\xcb\x99\x4e\x4f\x1c\xbe\x7d\xf2\xa7\x3f\xfe\x71\xc0\x93\xc0\xe1\x22\x15\x77\x70\xc6\x1e\x62\x86\xda\xfb\x58\x31\xec\xc9\x03\x0a\x84\xb7\x60\x11\x00\xcc\x24\xb7\x07\x21\x5e\x41\xa9\xf9\x7c\x61\x1c\x4c\xac\x3d\xe2\x15\x2f\x0c\x2a\x02\x08\xae\x25\x1d\x5a\x33\x1c\x7a\xa4\x21\x58\xef\x03\x12\x58\x4a\x36\x22\x15\xbf\x62\x64\xa6\xbf\x55\xb2\x6d\xba\x46\xbe\xd8\xb3\xc4\x63\x1f\x21\x11\x1d\xef\x27\xf7\xc1\xdc\x97\x4a\x6a\x77\x20\xdf\xee\x81\x97\x3a\x22\xa5\x1f\x7d\xbc\x5c\x30\x22\x6f\x04\x53\xe4\x6d\x57\x8c\x9b\x5f\xb4\x5c\x76\x28\x02\x40\x43\xd0\x95\xa1\x90\xa2\x75\x99\x27\xd4\x5a\xe0\x95\xd5\x8e\xbb\x36\x36\xdc\xb0\x7a\x5c\xb1\x6b\x56\xa1\x1b\x3d\xfc\x65\x2b\x06\x30\x08\x21\x87\xc7\x55\xb3\xa0\x47\xb1\xea\xde\x6b\x1f\x7a\x0c\xfa\x13\x54\xe9\xa1\x65\x6e\xe9\x7e\x61\x7f\xa7\x3f\xd0\x38\x74\x4f\x18\xf6\x4f\x69\xc5\x3b\x83\x52\xa6\x72\xb1\x2a\x10\xb1\xe2\x23\x73\x50\xbd\x5d\x27\xe3\x86\xf2\x80\xce\x05\x75\xc6\xb8\x83\x7d\xa3\xae\x48\x44\x40\xb4\xe3\x24\xa8\x40\xbe\xe3\x48\xa3\xe4\x7f\xa3\x54\x06\x4c\xea\x48\x05\x45\xce\xe5\x15\xf3\x48\xce\x5d\x2a\x6d\xf2\xfc\x57\x0c\xb1\x9a\x0b\x29\xa0\x28\xde\x39\x52\xe1\xed\x01\x76\x39\x5a\x1b\xfb\x45\xc5\xb5\x25\x0d\x5a\x58\x39\x8a\x93\xe7\xde\xf0\xa6\x61\x36\xb8\xa8\x34\x8a\xf0\x56\xac\xcd\x8a\xad\x5f\x06\xcc\x0c\x3a\x28\xbc\x20\xf5\x6d\x9b\xbb\xb9\x11\xd1\xdf\x75\x45\x72\xbf\xf5\x5c\x10\x36\x2c\x15\xe3\x96\xc4\x5b\xaa\x99\x69\xdd\xd6\x33\xa5\xa4\xb2\xef\xca\xb4\x76\x0d\x01\x6b\xaa\xae\x58\x19\x14\xb6\x09\x39\xb7\x8b\xe2\x1b\x32\x0d\xf0\x49\x56\xd4\xf0\x6b\xcc\x2e\xaf\xe9\x12\x5e\xd3\x79\x98\x80\xb8\x47\x93\xc9\x23\xd4\x14\xa4\x22\xda\x50\xe5\xae\x6f\xfb\xf9\x30\xc9\xb3\xc3\x44\xcb\x9e\xdc\x78\x45\x1b\xe8\xd9\x0e\x86\x11\x30\x00\x38\xdd\xe0\x9d\x9d\xb6\x44\xdd\x1e\xa5\x8b\xfe\x0c\x2e\xb1\xa1\x11\x22\x1c\xe3\xe4\x96\x00\xfe\xef\xed\xc2\x0c\x39\xe7\x83\xfd\x7a\x20\xa9\x86\xfc\xf9\x0a\x03\x5c\xf5\x9b\x2c\x18\xe9\xa5\xd1\x30\x0f\x52\x26\x6f\x4d\x3d\xc0\x6a\xc4\x91\xd3\x8f\x89\xf4\xf4\xf5\xb9\x4f\x32\x1d\x0d\xea\x3c\xd5\x80\x33\x84\x63\x8f\x2c\x46\x1c\xfb\x66\x37\xe2\x38\x9b\x81\x28\x5f\xb9\xb2\xdd\x55\x13\x7b\x01\xbc\xae\x61\xf7\x6e\xe8\xa4\xbb\x33\xf9\x70\xec\xc4\xf0\xc3\x91\x43\x9b\xc6\x31\xdc\x08\xc4\x31\x24\x6f\x1f\x47\x5e\xc1\xe1\xb3\xff\x71\x33\x9c\xda\x81\x9a\xc5\x2c\x30\x00\x84\xe9\xc1\x09\xe8\x85\xf1\x60\x79\xe1\x94\x1a\x14\x19\x74\xaa\x65\xd5\x1a\x9c\x38\xd7\xa3\x63\x7d\x09\x5e\x88\x55\xd0\x44\x65\x90\x92\xb4\x3a\x49\xa4\x7b\x81\x76\x8c\xea\xca\xf0\x19\x32\x5d\x53\x43\xf2\xe2\x70\xe4\xe5\xb6\x76\x7b\xb7\x43\x06\x91\xbb\x22\x6e\x37\x3b\x12\x0c\xbd\x62\x3a\xee\x66\x21\xaf\x99\x8a\x5d\x15\x43\x09\xd9\x2f\x3f\x03\x8e\x5b\x91\x8f\x89\x3e\x87\x5b\x29\x93\x1a\x12\x6d\xce\xc5\xfa\x79\xa3\xcc\xbb\x8f\x30\xef\x3c\xba\x9c\x3b\xb2\xbc\x6f\x51\xe5\x9c\xf8\x3d\x89\xd1\xe4\x10\x82\xca\x71\x76\xfc\xc3\x02\x7c\xeb\xcd\x82\xb9\x3a\xc2\xc8\x5d\x63\xcd\x02\xab\xf4\x81\x0f\xc9\xb7\xb4\xc6\xbe\x69\xbb\x4a\x48\xca\x1b\x51\x2f\x34\x1f\x1e\xa7\xd5\x9c\x1c\x9e\x84\xb6\x04\x1e\x92\xe0\x4c\x18\xa6\x66\xb4\x60\x47\x71\xfc\x96\x35\x0b\x56\x33\x65\x17\xde\xfd\xce\xa3\xdc\x2f\xa8\x28\x2b\xd7\x5d\x02\x4f\x11\x61\xef\x0c\x53\x76\x93\xba\xfc\xde\x24\x73\x67\xd7\x98\x84\x40\xf9\x2e\xc2\xc9\x30\xf1\xae\xef\x1a\xa4\xc2\x2b\xf4\x22\xba\x79\xba\x6d\xf5\xad\x29\x2d\x0b\xe8\x38\x86\x9f\x2e\x41\x4f\xa4\x00\x3b\x0e\xc4\xfd\x52\xb6\x0a\x6b\x1a\x42\xaa\x7a\x21\x95\xb2\x16\x25\x10\x44\x35\x51\x6c\xce\xb5\x81\x06\x5c\xbe\x71\x30\x36\xf1\xd9\x19\xe4\xd9\x5e\x25\x4b\x87\xac\xe8\x0f\x80\xc9\x25\xcf\xe1\x7c\x10\x8d\x92\xd7\xbc\xf4\x3a\x71\x7c\x3f\x73\x4d\x1a\xaa\xa3\x16\x15\x54\x6b\x59\x70\xd0\xc8\x3b\x2e\x4a\x9e\x1f\x7d\xf7\xe0\xe0\x28\x99\x61\xaa\xe6\x82\xf5\xc0\xc5\xe3\x3c\x6e\x49\x68\xd3\x54\xc9\xc5\x8c\x83\xd9\x42\xc8\x92\x9d\xb7\xd3\x8a\xeb\xc5\xc5\xbe\xe4\xa6\x6e\xa2\x09\xf1\x1f\xd6\x8a\x46\xdf\x97\xa3\x3a\x20\x2f\x56\x68\x0e\x3e\x02\xab\x2f\x59\x95\x9f\x4b\x01\xce\x59\xaa\xb5\x9f\x35\x16\x35\x12\xf4\xce\x8a\x19\xe6\xbf\x4a\xd7\xa3\xbb\xf7\x76\xed\x7d\xa8\x28\xe1\xd3\xb7\xa2\xe9\x7d\x5e\xd0\xaa\x1a\xe0\xab\xeb\xab\xd8\x5e\x7b\x41\xa7\x95\x6f\x15\x84\x07\x86\xdb\xb3\xe4\x57\x19\xaa\x76\xf1\xf6\x9a\x60\x93\xe5\x74\x15\x77\xe3\xc6\x69\x52\x4b\xec\x33\x21\x88\x14\x7e\x77\x47\x56\x21\xf7\x7f\x10\x38\x00\x11\x12\xf1\x1c\x3f\x64\x0c\x3f\x64\x0c\x7f\x64\xec\xdc\xa6\x23\x0f\x19\xc3\xdb\x8e\x7d\xcc\x18\xde\xbb\xaa\x1e\xef\xfb\xc3\xeb\x91\x96\x63\xc8\x33\xc2\xbc\xd6\x16\x2b\x2a\x83\x96\x3a\x54\x0b\xfe\x08\xb4\xcb\x8e\x8c\x58\x9f\x3e\x7d\x6c\x8c\xe2\xd3\xd6\xa4\x8b\xe2\xbc\xe9\xdc\x1d\x3d\x60\x9e\x32\xed\x74\x86\xb1\xdb\xb2\x22\xba\x3c\x5c\x58\x2a\xdc\x68\x91\xa6\x31\xd0\x54\x9a\x04\xdb\x05\xcc\x16\xfc\xf0\x91\x26\xa5\x2c\xda\x9a\x09\xd3\x71\x48\x57\x4e\x88\x91\xc1\x1d\xde\xaa\xb4\x2c\x39\x2a\x25\xe7\x19\xee\xd7\x41\xe2\xa8\x94\x37\xc2\xde\x47\xc7\xe7\x49\x20\xea\x7d\x00\xf5\xee\x59\xb1\x1b\xc3\x7f\x4c\xec\xe7\x74\x2a\x5b\x13\xba\x5a\x3f\x64\xa5\x6f\x7c\x44\x9e\x63\xba\x29\x97\xc0\x48\xd2\x6a\xf6\xc1\xac\xf3\x2e\x17\x20\xeb\xcc\x0f\x09\xf0\xfb\x91\xc8\xf0\x90\x00\x9f\x3a\xf3\x43\x02\xfc\x43\x02\xfc\x43\x02\xfc\xc7\xc6\xef\x2d\x01\xfe\x0c\xb3\xd8\xed\x96\x56\xae\xdf\x77\x4f\xa1\x71\xc9\x5f\x03\x24\xcb\x7e\x25\xee\x3e\xef\x94\x38\xe4\x96\xd5\x66\x00\x2b\x8e\x43\x3c\x61\x5d\xaa\x51\x54\x48\xef\xb5\x3c\xe0\xc9\xdf\x43\x92\xef\x1e\x24\xe9\xc2\x5a\x0e\x70\x62\xe3\xe8\x23\xc8\x76\x70\xc4\x17\xac\x62\x85\xc1\x2a\x88\xa8\x0c\xa3\x91\xe5\x33\x94\x6f\x54\x08\x89\x36\x95\x1e\x91\x8a\x4e\x59\xa5\x47\x0e\x10\x0b\xbc\x2a\x0d\x2d\xd0\xad\xdb\xf2\x12\x94\x80\x0e\xb5\x3a\x15\x4f\x16\x47\x16\x2e\x20\x99\x38\x81\x00\x37\xc0\x12\x9d\x0f\x61\x09\x92\x8d\x2d\xec\xa0\x0d\xff\x81\x29\x3d\xa0\xdf\x6d\x37\xfa\xcd\xf8\xf1\xa9\x9e\x1b\x74\xb1\x60\x35\x85\xff\x7c\xe1\x97\xc0\x0a\xc8\x1b\xc5\x8d\x61\xd8\xd2\x96\xa9\x5a\x13\x39\x1b\xf5\x50\x59\x0e\xae\x87\x74\x79\xf5\x23\x93\xf7\x8d\xf8\xc3\x74\x3e\x38\xa3\x93\xac\x2e\xd8\x79\x2f\xff\x12\xb2\xd3\xac\xe1\x63\xcf\x96\x8f\x97\x76\xb5\x30\x70\x89\xe0\x0a\xef\xd1\xe2\xe4\x77\x2d\xe2\xd8\xb7\xc4\xfb\xd4\x84\xfb\x51\x48\x71\xe9\xdb\x98\x03\xc9\x79\x48\xb8\xef\x8f\x87\x84\xfb\x87\x84\xfb\xac\x09\xf7\x91\xb2\xe3\xef\xad\x0d\xb9\xf3\x71\xe2\x8d\x4f\xa0\x9f\x06\x6b\xd2\xb9\xc8\x7c\xfe\xbb\x4f\x7e\x97\xaa\x5f\xe3\xf7\x68\x32\x79\x84\x55\x7e\x9d\x4f\xad\x35\xb3\xf1\x37\x84\x89\x42\x96\xf6\x39\x97\xf0\x7c\xa5\x0d\xa8\xf0\x5d\x60\x32\xa6\xa5\xf6\x73\xc5\x75\x82\xf0\xec\x1c\x1a\xd5\xe0\xab\xc2\xf7\x77\x7e\x91\x5f\x31\x1d\x2c\xdc\x3b\x75\x36\x74\xa1\xf6\x7e\x01\x9f\x82\xe7\xf4\x5a\xff\xbd\x26\x15\xaf\x39\xb4\x3c\x43\x2b\x9a\x69\x33\x2c\x32\x4b\xc8\x21\x3e\x72\x52\x34\xed\xc8\x3d\x7e\x52\xb3\x5a\xaa\xe5\x28\x4c\x61\xbf\xec\xcd\xe9\x7e\x71\x04\x4a\x74\xd1\x2a\xc5\x84\xa9\x96\xc3\x9a\xc0\x74\x63\x0f\xb5\x69\xbf\x03\x7b\xa2\x4c\x07\x06\x19\xd2\x9c\xa9\x1b\x7d\x19\xd4\x25\x80\x42\x6e\x44\x58\x45\xb8\x3b\x1d\xd8\xef\xa8\x4b\xbb\xb5\x9f\x32\x71\x4d\xae\xa9\xd2\xc3\xce\x3c\xc9\xab\x3f\x97\xfc\x9a\x6b\x39\xb0\x42\x85\xac\x2e\xcf\x45\x08\xf9\xda\x93\x2a\x5b\xd3\xb4\xc6\x5d\x27\xfe\xf8\xb2\x77\x8d\xb4\x4a\x5a\x38\xb6\x2b\x86\xc6\xd3\xd4\x88\x7a\x37\x1a\x6a\x0c\x53\xe2\x19\xf9\x3f\x87\x3f\xff\xe1\xb7\xf1\xd1\xdf\x0e\x0f\x7f\x7a\x32\xfe\xf3\xbf\xfe\x70\xf8\xf3\x04\xfe\xe3\xf3\xa3\xbf\x1d\xfd\xe6\xff\xf1\x87\xa3\xa3\xc3\xc3\x9f\xbe\x7b\xf5\xed\xe5\xf9\xe9\xbf\xf8\xd1\x6f\x3f\x89\xb6\xbe\xc2\x7f\xfd\x76\xf8\x13\x3b\xfd\xd7\x27\x3e\xe4\xe8\xe8\x6f\xff\x63\x30\xe9\x54\x2c\xbf\x1f\x28\x87\x71\x8c\x33\xea\x03\xfd\x27\x66\x61\xbf\x15\x2b\x85\x0b\x33\x96\x6a\x8c\x8f\x7e\x46\x8c\x1a\xac\x8d\x7b\xf6\xca\x7d\xfe\x3b\x1d\x24\xdc\x4b\xc1\x40\xdc\xa3\x03\x7e\x5b\x36\xe0\x43\x55\xdb\x43\x55\xdb\x87\xc6\xef\xba\xaa\x0d\xb2\xee\x9e\xf3\x9d\x61\xe6\xfb\xf9\xfb\x40\x81\x86\xd5\x8d\x54\x54\x2d\x49\xe9\xa2\xba\xcb\x5b\x68\x86\xb8\x65\x32\x9f\xab\x7a\xf1\xed\x0f\x3e\x03\xd2\x4b\x9e\xc2\x12\x3b\xce\x0a\xa9\x59\xc9\xdb\x7a\xd7\xa1\x53\xa4\x22\xde\xf8\x1b\xbb\xc5\x90\x14\x2a\x67\xa1\xc8\xc8\xfd\xcc\xa5\xe5\x40\x0c\x13\xdc\x5e\x81\x33\xb2\x04\x4f\xad\xc0\x3d\x38\x70\xd5\x04\x35\xa3\x22\x24\xa7\x40\xe5\x8b\x2c\xd9\x23\x1d\x7e\x8b\x24\x65\xc9\x07\xc1\xac\x57\x57\xe8\x7d\xe8\x26\x38\xb2\xc6\xfb\x2b\xb0\xb8\xee\xac\x0c\x31\x23\x77\x93\x1c\xb7\xfe\x10\xcf\x6c\xbe\x26\x99\x25\x8b\x52\x3e\x21\xf6\x14\x1c\xb0\xe8\xe2\xf2\xc9\x9e\x41\x8e\x05\xb6\x1c\x11\x2e\x88\x68\x6b\xa6\x06\x68\x27\x3e\xbc\x45\x0e\xd9\x64\x3e\x19\x91\x27\x5f\x7f\xf5\xd5\x88\x3c\x79\xfa\xf5\xd7\x5f\x1f\x45\xa9\x51\xef\x4d\x28\xb2\x3f\x1c\x5c\xdb\x13\xa9\x06\xb1\x59\xf3\x64\xd0\xb3\xf7\x29\x71\x06\xea\x2b\xdc\x7f\xf7\x90\xc1\x50\x17\xf2\xdf\x44\xce\xf7\xe4\xc9\xc1\x31\x6c\xb5\x26\xc5\x4b\xe6\x5a\x62\x96\x71\xfc\x65\xc1\xd4\x00\x75\x2e\xd2\x9b\x16\x14\xda\xf5\x62\x09\x00\x91\x82\xfc\xc8\x45\x29\x6f\xb2\x15\xb2\x50\xab\xa9\x05\x27\x11\x68\x68\xa7\xee\x10\xf8\x96\x03\x25\xf3\x4a\xd9\xde\x26\x74\x24\x3a\x83\x35\xff\x37\x7b\xc9\x6b\x6e\x76\x2d\xa2\x02\x21\xbe\x48\xd3\x48\x08\x93\xb8\x66\xd2\x33\x52\xc9\x22\xaa\xd8\xed\xb9\x76\xe0\x1a\xf5\x7b\x36\x38\x5d\xdd\x5e\xa6\x96\x1a\xf4\x29\x22\x87\x68\x2c\xb8\xe3\x85\xdd\x72\x0c\xc5\xc0\xad\x36\xf8\x06\xb5\x93\xd5\xf4\x1d\xaf\xdb\x9a\xb4\xda\xbe\x99\x14\xfd\x67\x77\x2f\x76\x83\x8a\x83\x3b\x6d\x5c\xc0\x1f\xf5\x04\x66\x7a\x32\xc8\x82\x91\x8b\xb0\x03\xfd\x43\x1c\x62\x24\xba\x05\x57\xba\xa3\xce\x39\x74\xe5\x0c\xea\xac\x82\x5f\x4f\x13\x80\xa0\x6b\xe4\x00\x63\x65\x45\x9d\x11\xbc\xea\xeb\x33\xa0\x5d\x2d\xa2\x0d\x6a\x85\x2b\x88\xbf\xaf\x5a\xc6\xbd\xf3\x8a\x0d\xf4\x85\xe5\xf2\x80\x65\xf1\x7b\x65\xf7\x76\x05\x80\x81\x9d\x19\xa3\x01\xe1\xa0\x67\x8d\xba\xf8\xee\x06\xb4\x03\xea\x0b\xcd\x83\x80\x1d\xd2\xca\xec\x32\xc4\x92\x9d\x69\x5b\x2c\x0b\xd7\xa4\x97\x77\x45\x2a\xa1\x50\x01\xcf\x2e\x60\x87\x8e\xed\xff\xf3\x31\x67\xef\x18\x9a\xb2\x19\xd6\x77\xe2\xdf\x40\xbc\x4e\xa7\xa1\x98\x62\xd4\xbd\x62\x06\xc0\x52\x5d\x02\xa9\x7d\x28\x14\xa9\xd6\xf2\xda\x8a\x90\xa4\x27\xbf\xd5\xae\xc2\x82\x27\x1e\x0b\x7a\xd4\xeb\xda\xe0\x12\x5f\x05\x63\x25\x02\xbb\x56\xdd\x0a\xa8\x56\x24\xbe\xff\xf4\xc8\x2b\x32\x20\xb9\x85\xd5\x1f\x2a\x1f\x1a\x41\x55\x52\x31\xcb\x02\xd0\x3c\x59\xc9\x9a\x68\x41\x1b\xbd\x90\x06\xc2\xb0\xb4\xa1\x05\x37\xc9\x88\x9c\x46\xd1\xe2\xca\x3e\x19\xd2\xd8\xe1\xcd\xd2\x5e\xa3\x38\x72\xb0\x62\x31\xaf\xf6\xa1\x70\xcd\x42\xc9\x76\xbe\x00\xac\x54\xfc\x55\x51\x51\x8d\xc0\xbc\x69\xb9\xda\x1b\xe7\x74\x81\x43\x4d\xca\xa5\xa0\x35\x2f\xfc\xfe\x01\x8c\x80\xd5\xb0\x31\x61\x13\x68\x49\x5d\x36\x4a\xce\x99\xd2\x5c\x1b\x26\x0c\x6a\xa4\x27\x15\xe5\x35\x39\xd4\x8c\x91\x53\x7f\xd4\xf1\x9b\x0b\x74\x7b\x63\xb2\x48\x7a\xdd\x69\x9c\x8c\x2a\x85\x0f\xed\x0a\x56\xc0\x27\xde\x3c\x8b\x2a\x8a\xd2\xdb\x2c\xba\x53\xb9\xf1\x15\x8f\x06\x1c\xc6\xcd\x6b\x26\x15\x94\x88\x3b\xd7\xf3\x35\x13\xa5\xec\x2a\xeb\x92\xe6\x3a\x3e\x3f\xd3\x71\x80\x11\x65\x5a\x83\xb3\xc3\x17\x95\x14\x73\x84\x17\x11\x4e\x6d\x71\x12\x31\x69\x3e\xab\x70\x09\xc2\x45\xc9\xaf\x79\xd9\xd2\x0a\x55\xad\xe4\x65\x3a\xb9\x38\x43\x22\xad\x05\x3b\xbe\x61\x60\xc8\xa2\xae\xdd\xdd\x22\xfe\xd5\xf8\x1a\x66\x8a\xb5\x7d\x19\x15\x86\x18\x99\x26\x90\x98\x4b\x0b\xb3\x8b\x76\x43\x97\x64\x4c\x2c\x57\x03\xee\x45\xaf\xd4\xd0\xed\x98\x9b\x76\x26\xd3\x74\x86\xda\x6b\x79\x8e\xb9\x13\x17\xee\x18\xc4\x70\x41\x05\x38\xd6\x20\xab\xcb\xf2\x3f\xc8\xd4\xf5\x55\x4b\x95\x38\x4d\xe0\xe0\xee\x51\xa8\xf8\x6a\x6a\x4f\x5c\xa2\xbf\x78\xc7\x3e\xdb\xeb\xee\x34\x5e\xb2\xba\xa9\xa8\xd9\xb9\x7b\xec\xc7\x28\xc9\x2d\xca\xbd\xb7\x57\x07\x15\xe5\x98\x56\x56\x64\x9c\xff\x70\xe2\xd0\x96\x51\xb0\x67\x29\x8d\xbe\xf4\xea\x87\x70\x16\x0e\x9a\xb2\x1b\x65\x3a\x74\xb0\x9f\xb2\x12\xf4\x01\x47\xf1\x10\x2c\x0d\x0c\xc4\xb9\x73\x75\xfe\xc3\xc9\x88\xf0\x09\x9b\xf8\x7f\x85\x29\xbc\xba\x64\xe4\x1c\xd1\xc9\x3c\xaa\x67\x7a\xc6\xbe\x2c\x27\xf8\xea\x71\x3e\x58\x3c\xe7\x2f\x7f\xb1\x8b\x62\xbf\xfd\xeb\xf8\x2f\xee\x82\x81\x7f\xfd\x62\xb5\xb6\x01\x70\x0a\xbf\xac\x3c\x2d\x06\x84\x02\x75\xc7\xfe\xeb\x97\x73\x59\x5e\x34\xac\x98\xe0\xf2\xeb\x5f\x06\x15\x91\x10\xc2\x84\x51\xcb\x09\x39\x97\x50\x22\xcd\x4b\x14\x68\xf0\xae\x8a\xfd\xb7\x77\x05\x02\x1b\x84\x2c\xaa\x82\x1a\x26\x40\xfb\xb5\xb4\x25\x4f\xed\x5a\x01\xc0\xb4\x20\xe6\x29\xac\xf3\x21\xa4\xbe\x60\x0b\xaf\x11\x31\x52\xc2\x1d\x95\x7a\xdb\xda\x71\x2c\x08\x7b\xc7\x35\xf4\xea\xc4\x9d\x04\x26\xa1\x0e\xdb\xca\x9b\x1c\x96\x18\xcb\x77\xa1\xf7\x6c\x23\xd3\x2b\x58\x60\x05\x3f\x17\xd2\x7c\x1e\x0e\xaf\xf7\x62\x83\x6d\x21\x09\xbd\x96\xbc\x24\xad\x06\x9d\x53\x90\x56\x40\x0a\xe0\x80\xae\x17\x8e\x7b\xa6\x4b\x52\x73\x6d\xe8\x15\x9b\x90\x0b\x6b\x8e\xc4\x65\x39\xc8\x53\x82\x4c\x2b\x59\x5c\xb1\x92\xb4\xc2\xf0\x6a\x90\x67\x26\xd0\x0d\x4b\x1b\x99\x2a\x10\xef\x6e\x0b\xab\xe5\x36\x8a\x8d\xbd\xc1\x84\xbf\x1a\x10\xcf\xc2\x0b\x3d\xac\x6a\xb7\x57\xa3\x70\x54\x17\x14\x03\x4b\x4d\x09\x53\x3a\xf0\x93\x81\xc2\x68\x0d\xa8\xc9\xae\xa7\x84\x7f\xbb\x7f\x00\x93\xe9\x09\x79\x0d\x96\x4b\x95\x7e\x28\xb1\x6a\x16\x63\x71\x2e\xe3\x54\xb0\x82\x69\x4d\xd5\x12\x91\x65\xb8\xf1\xa0\x46\xad\x66\xb3\xb6\x02\x83\x31\x7d\x51\xa9\x68\x2d\xc1\x44\xb1\x42\x0a\x6d\x54\x5b\x00\xd7\x50\x32\x55\xf2\x8a\x89\x0e\xe9\x2d\x93\x5b\xbb\x43\xf5\xb0\xea\xb5\x90\xa4\x58\x50\x31\x67\xa1\xfb\x09\xa9\x69\x09\x9c\xfc\x5d\x70\x7e\xa4\x2f\xa6\x0c\x7c\x41\x67\xc6\xaa\x85\x06\x18\x64\x6a\xad\x04\x9f\xdd\x9b\xfe\x62\x6f\x02\xe2\x4f\x1d\x25\x08\x0b\x5e\xed\x10\x6b\x62\x78\x86\xe6\x18\xac\xd5\x54\x87\x61\x86\x8c\xcc\x9a\x19\x5a\x52\x43\xf7\x05\x44\xea\x15\x5d\x86\x4c\x6f\xac\x81\x03\xd6\x8d\x6a\xe3\x9c\x99\xe0\xfd\x43\xb2\xe1\x71\x0f\x9e\xf3\x1f\x4e\x06\xcd\x0f\x0e\x21\xe0\x56\xe8\x38\x6d\xac\x94\x71\xf1\xbb\x19\x66\xe6\x50\xc5\x02\x24\x94\x25\xcd\x53\x82\xd7\x38\x2b\x49\xd9\x0e\xce\x0e\xeb\x54\x84\x21\xd9\x3e\x59\x32\x91\x2d\x7f\xee\x0b\x73\x5c\x76\xc5\x5d\x45\x1f\x9e\x68\xa3\xa1\x8f\x35\x00\x4c\x18\xae\x58\xd4\x23\x6a\x10\x09\x8e\xdf\x5a\x81\x92\xb4\xcf\x79\xc8\x9a\x73\x66\x74\x97\xd0\x86\x0a\xe5\xc0\x59\x8d\x33\x92\xf0\x8d\xc0\xf2\xf3\xdc\xe8\x62\x2d\x1b\x17\x60\xd0\x9c\xc8\xe7\x5a\x3a\xc5\x71\x58\x28\x37\x5b\x5a\x7c\xae\x2c\x74\x5a\xd8\x7b\xfe\x95\x2c\x87\xa7\xb3\xe7\x4d\x98\xec\x91\xd6\xa1\x1b\x22\x08\xa8\x86\x70\x27\xfe\x00\x62\xed\xba\xd7\x8f\x0b\x35\x99\x05\xbd\x1e\x9c\x43\x99\x1c\x0b\xeb\xfc\x15\x63\x1f\x16\x43\x72\xc7\x40\xee\xf8\xe9\x40\xc2\x86\x17\xf4\xfb\x31\xb0\xb0\xbf\x4f\x50\x96\x9c\xeb\x5b\xc0\xf8\xf7\xc3\x5e\xf1\x17\x59\xf2\xad\x73\x73\x7b\x47\x99\x53\x5b\x5d\xf9\x5d\x28\x14\x75\xb8\xe8\x8c\xdb\x4b\x78\xf8\x7e\x7d\xde\x33\x53\x9d\x73\x25\xc4\x37\x10\x53\xf4\xd0\x07\x3c\x26\x8e\xad\x7d\x87\xeb\xfe\xcf\x8f\x32\x13\x03\x56\xf9\x66\x1f\xf8\xe0\x99\xce\x1c\xda\x80\xf7\x5c\x31\x05\x95\xaf\x11\xb6\xb9\x15\x35\x4a\x56\x15\x53\xb0\x05\x2e\xa8\xb1\x52\x50\x6d\x77\x8b\x60\x5a\x7d\x7a\x0b\x41\x3f\x7c\x98\x2f\xb8\xda\x04\xbb\x09\xd6\x35\xb5\xfb\xdf\x85\x1d\x0c\x84\x2f\x7d\x95\xfc\x26\x7a\x86\x8b\xbc\x88\x15\xc3\x8c\x2b\x7a\xa6\x91\xd1\xaf\xde\xb0\x19\x16\x8f\xf6\x3e\x5a\xfb\xdb\xc1\x74\x6d\x9a\x1b\x15\xd5\xde\xc4\x93\x0e\x25\xc2\x79\x59\xc2\x3a\x0d\x5f\x1b\xc7\x3f\xbd\x29\xfa\x99\x65\x2b\xd4\xc4\xad\x2e\x37\xbe\xc1\x50\x9a\xb2\xd5\xd9\xe5\xab\xb4\x83\x66\x85\x3c\xd1\xd3\xdf\x7f\xcc\x20\x8f\x1f\x8e\x7c\x05\x7b\x80\x7f\x01\x69\x83\x39\x2a\x9f\x72\xdf\x20\x04\x03\x70\x21\xe1\xd1\xf2\xe9\x1c\xfe\xe1\xad\x83\x50\x09\x34\x65\x56\xce\x76\x9d\x6f\x87\x9f\x0b\x82\x67\x23\x9e\x7f\x43\x51\x7d\x27\xb0\xbe\xe3\xa2\x0c\xf0\x06\x1e\xdf\xdf\xaa\x5a\xc7\xe7\x67\x48\x75\x1e\x9a\x5e\x80\x74\x5f\x3a\xd3\xd5\x2c\xb8\x2a\xc7\x0d\x55\x66\x89\x41\xaa\x51\x8f\xe2\x00\xcd\x9d\x61\xea\xac\x35\x68\xf6\x30\x65\x67\x39\xd8\x02\x9f\x60\xe8\xf2\xf3\xdf\xcb\x21\xfb\xb6\x22\x43\x01\xbf\xfd\xe8\xad\xc8\xeb\xae\x17\x73\x08\xc7\xdc\x93\x15\xb9\xad\x3a\x3a\xd2\xbf\xcd\xf6\x57\x6b\xb6\x57\x6d\x3f\xab\xdf\x29\xb1\xe0\x79\x70\x01\x45\x19\x23\xc0\x06\x7b\x11\xfc\xf5\xf6\x49\x23\xc2\x67\x56\xfd\x92\x62\x0c\x39\x8c\x83\xc9\xeb\x12\x98\x9c\xcd\x3a\x71\x29\xf2\xe8\x4b\x07\xc1\x14\x51\x19\x4d\xdd\xc9\x41\x72\x28\x64\xba\xab\xdd\x0f\x90\xad\x38\xd7\x11\x62\xbd\xbc\x27\x27\x64\x3a\xbc\x7f\xae\x1d\x3f\x2e\x58\x40\xb2\x71\x4e\xf8\xe8\x2e\xf0\xca\x2d\x17\xa5\x3d\x54\x98\x3f\x0f\x50\xdc\x6d\x51\x30\x16\x82\x7f\x4e\x2c\x0d\x37\x4e\x7b\x77\x8f\x5b\xf2\x9a\x9a\x62\xc1\x34\xd1\xd2\x6e\x91\xd0\x86\x56\x15\x2b\x43\xd2\x12\x32\x8a\x04\xfb\xc0\x25\x34\x0d\xa6\x23\x32\x3b\x86\x2f\x71\x14\xe2\x70\xf1\xd3\xa6\xa2\x2e\x3c\x34\x6b\x45\x81\x85\xa6\xdc\x2c\x43\xbe\xc8\xaa\x89\x09\x1e\x65\x0d\x51\xb3\xe1\x46\xcc\x0c\x73\x3f\x22\xef\x70\x60\x66\xb8\xfc\x97\x78\xdd\x2f\xe8\x35\xeb\xf2\x36\x5c\x8b\x7a\x7b\x4b\x87\xae\x05\x19\x78\x3d\xea\x7a\x30\x42\x0b\x21\x56\xd8\xc5\xa3\x38\xad\x9b\xaf\x28\xec\xc3\xed\xb9\x78\x1d\x0e\xa3\x45\x5f\x33\x91\x8e\x82\x59\xa5\x99\x09\xfd\x58\x86\x6b\xbc\xc4\x65\xc2\xd3\xd6\xc8\x9a\x1a\x5e\x40\xb0\x8d\xcf\xa2\x74\xaf\x1a\x53\x28\xac\xa4\xf1\x29\xed\xa8\x22\x81\xe2\xe6\xf6\x2d\x93\x18\xd8\x6c\x2c\xdd\xc2\xc2\x47\x6b\xed\x76\xb9\xbf\xac\x7e\x59\x22\xd5\x33\xd3\x7b\x5e\xfa\xe6\x16\xc4\x2c\x14\x63\x84\xd7\x8d\x54\x86\x0a\x43\x4a\x3e\x0b\xed\x56\x7c\xae\xe0\x87\x78\x22\x87\x67\xe7\x47\xc8\x90\x8d\x66\xc1\xd0\x67\x55\xc9\x1b\x4d\xcc\x8d\x0c\xc1\x83\x2e\x53\xcb\xb5\xaf\x18\xf5\x89\xc9\xa0\xe3\xb8\x59\xed\x55\x67\xf9\x2a\xba\x87\x46\x56\xf6\xdc\xb0\xaa\xb2\xff\xfb\xa1\xdb\x68\x30\xc2\xd7\xc6\x35\xe1\x73\x81\x1d\x05\xb8\xf6\x61\x2c\x87\x2e\x76\x58\x2a\xd9\x34\x2e\x8d\xa1\x3e\xca\xbf\x26\x90\x86\xae\xae\x99\x86\x72\x11\x8f\x78\x66\x59\x61\xce\x04\x53\xd4\x40\xa2\x1c\x61\x4a\x49\x85\x2a\xc9\x2a\x91\x43\xc3\x37\x38\x32\xfa\x45\x3e\xc2\x74\x98\x44\xb9\x99\xc9\xfc\x6f\xdc\xb7\x19\xde\x8b\x0b\xe4\x37\x2f\x77\x32\x30\x90\xc7\x30\x78\xab\x7d\x7a\x4b\x27\xd5\x02\x8e\x69\xff\xb5\x7a\x18\x07\x27\x4a\x6a\xfd\xda\xff\x09\xf2\xf8\xf3\xe8\x3e\xbe\x25\x98\x83\x07\xf7\xd0\x47\xc7\x83\x7b\xe8\xc1\x3d\xf4\xe0\x1e\x82\xf1\xe0\x1e\x5a\x1d\xbf\x17\xf7\x10\xe9\xae\xab\x7d\x95\x4d\xaf\x63\x2b\xa1\x7f\xc1\xde\xf2\x3a\x13\xf2\x5a\x1a\x97\x97\x0b\xc6\x22\x7d\x6f\x7c\x87\xc2\x0d\x7d\x43\x97\x13\xc1\x8c\xeb\xff\xe6\x83\xa2\x6f\x3c\x4d\xdf\x2a\xab\xf8\x3b\x2f\x43\x24\x37\xbc\x20\xf3\x4d\x01\xa3\x59\x8c\x44\x2d\xa8\x4b\x13\x86\xcf\x1f\x69\x97\x0c\x6a\xbf\x07\xdc\xdc\xf8\x01\x05\x9b\x90\x0b\x57\x20\xb2\x32\xf9\x7a\x6b\xaa\x92\x19\xca\x87\x74\xbc\x8c\xc7\xc7\x10\x9d\x76\xa6\xed\x90\x9c\xc7\x26\x20\xff\xed\x9b\xd7\xb3\x43\x12\x8d\x4a\x5a\xe3\x42\xf8\xee\x07\xb7\x95\x16\xf3\x56\x33\xd5\xcf\x01\x8c\x72\x14\xc2\x61\x75\x4c\x61\x39\x71\xb8\x5e\x1f\xfa\xbb\xd9\xf9\x5c\x09\x59\xa3\xd8\x35\x97\xad\xf6\xa5\xff\xad\x41\xad\x41\x1b\xe7\x58\x59\xf0\xf9\xc2\xff\xd8\x97\x6c\x42\xda\xb1\x2a\xc3\x81\x1c\x4c\x99\x36\xd4\xb4\xba\xdf\xcf\xa0\x80\xcc\xbb\x3d\x4a\x3f\x0a\x3c\xb1\x3f\x06\x45\x4e\xd5\x1b\x21\x18\xf6\xf5\x72\x7b\x89\x00\x11\xf8\xe8\xa9\x3b\x97\x1e\xeb\xa2\xc3\xf5\x28\x64\xdd\xb4\x86\x45\xe7\xd7\x9d\xae\x3c\x62\x7b\x4b\x66\xea\x75\xc0\x7c\x5c\x53\x41\xe7\x6c\x1c\x48\x1b\x77\x30\x17\x8f\xb3\x49\xed\x2c\x6c\x45\xb2\xb7\x3f\x8c\xc7\xbd\x83\xa7\xe8\x8f\x6c\xc0\xad\xe4\x56\xc0\x5b\x49\x7e\x00\x57\x72\xfb\x20\xae\x24\x60\x6a\xef\xab\x00\x7a\xe3\xe8\x5b\x15\x41\x4e\x61\xf8\x90\x08\xca\x69\xf6\x82\x17\x20\xd0\xc2\x35\x91\x35\x37\x86\xf9\x7a\xbc\x20\x52\x46\x84\x9b\x1e\x2e\x99\x13\xa0\x10\x17\xc4\xf2\x39\xf6\xae\xa9\x78\xc1\x4d\xd4\xc0\x37\x11\x41\x61\x75\x80\x33\xe0\x86\x6b\x54\xcb\x05\xe1\x75\x53\xb1\xa0\x4d\x8f\x1d\xbc\x8e\x8f\x5d\x85\xb7\x29\xa0\x38\x83\xb0\x77\x10\xc1\x44\x82\x1f\xe4\xf6\x96\xe3\x41\x6e\xbf\x67\x3c\xc8\xed\xec\x72\x1b\xc1\xb0\x87\x63\xcb\xf7\xe4\xb5\x7f\xa8\x6b\xe7\x47\xa7\xac\x22\xbf\xb6\x4c\x2d\x11\x56\x39\x00\x63\x48\x2b\xec\x34\x2f\x11\xc0\xc1\xa7\x42\xec\x91\xb7\x3f\xa7\x72\x0e\xa9\x16\xa7\xef\xac\xad\x0a\x48\x8b\xd9\x6f\xc9\xd5\x09\xfa\xcd\x14\x71\x17\xc2\xce\xc4\x56\x29\x56\x12\xc5\x9f\x80\x89\x79\xfc\xfa\x79\x4e\x67\x44\x8e\x3a\x0d\x92\xaf\x56\x83\xdc\x92\x92\x41\xc8\xf1\x07\xd6\x1a\xf7\x24\x7c\x03\xf7\x78\xa8\xeb\x09\x41\x50\x72\xc5\x96\x23\x57\xeb\x48\x2c\x07\x52\xff\xe3\x4c\x24\x62\xf9\x38\xaa\x3f\x57\x0c\xd3\x1f\x86\x75\x6b\xef\x8f\xcc\x17\x62\xce\xb0\x1b\x8e\xb1\x7d\xed\x6c\xcf\xf2\x5b\x94\xe7\x8e\xce\x7c\xe7\x13\xfb\xaa\xb9\x1e\xb5\x72\x66\x2c\xef\x38\x4f\x35\xf2\xbc\xfd\x20\xc0\x31\x06\x36\x07\xa8\x4c\x10\xf8\x79\xd8\x8b\xe4\x0e\x0c\xe0\xf0\xdb\x78\x4b\x8b\x95\x4d\xc0\x90\x88\xd6\x3e\xa0\xdf\x15\x5b\x3e\xd2\xae\xaf\x95\x14\x7a\xc1\x1b\x50\xdf\x21\x07\x48\xce\xb2\x1e\x71\x1c\x3f\x40\x3d\xa8\x27\x06\xef\x8d\x33\x31\x22\xaf\xa5\xb1\xff\x73\x0a\xe8\x0c\x20\x5e\x9e\x4b\xa6\x5f\x4b\x03\x9f\xec\x35\x17\xe0\x22\xdd\x07\x1e\x70\xa9\x3a\x1c\x12\x65\xe0\x7a\x45\x78\x79\x00\xeb\x73\x7b\xed\x8b\x75\x02\xbf\x70\x4d\xce\x04\x91\xca\x6d\x51\x46\x72\xc0\xcd\x8e\x24\x21\x31\x3e\x76\xdd\xe5\xd2\x6d\xa2\xc6\xf1\x88\x54\x3d\x16\xb9\x13\xc2\x1c\x51\x10\xc1\xc1\x6f\x20\x52\x05\x29\xa4\xbe\x76\x1f\x50\x9f\x14\x35\x6c\x9e\x21\xf7\xb5\x1b\x35\x53\x73\x68\x3c\x57\x2c\x72\x9f\x86\x5c\x8a\x16\x8e\x8c\xea\x16\x8e\x5b\x38\xb2\xb7\x5a\x2e\x7b\x27\x13\x80\xee\xfe\x12\x30\x2e\xf6\xd5\x7b\x16\x91\x88\x5a\x6c\x4d\x1b\x2b\x6f\xfe\xaf\x55\x56\xe1\x78\xfd\x3f\xd2\x50\xae\xf4\x84\x1c\x13\xcd\xc5\xbc\x62\xbd\xef\x5c\xe0\x37\x7a\x4c\x26\xb2\x20\x2f\xc5\xea\x87\xd7\xb4\x62\x08\x54\x44\x05\x61\xe8\xae\x02\x80\xea\x15\xc3\x68\x44\x6e\x16\x52\xa3\xe6\x1b\x32\xf3\x0f\xae\xd8\xf2\x60\x94\x25\x14\x46\xe2\xfb\xd9\x3e\xfa\x4c\x1c\x74\x9d\x45\x7b\x92\x28\xe8\xfe\x90\x28\x78\x00\xdf\x1d\xdc\x8d\x3d\x76\x0f\xdc\x55\xf7\xa2\x36\xc8\x85\x1b\x4f\x2a\x8a\xe1\xfe\x7d\x0b\x94\xaf\xd2\xb7\x9a\xbd\x03\x50\xef\xd1\x6f\xba\x54\x0d\x07\xf3\xb5\x77\x51\x5c\x00\xee\xcd\x84\x1e\x91\x81\xb9\x90\xac\x63\x63\x14\x9f\xb6\x86\xe9\xbd\xe5\x84\xf7\x12\x1a\xe1\x9a\x85\x86\xdc\x76\xe7\x7f\xd8\xf4\x07\x11\x04\x1c\xd7\xb9\x98\x63\xbd\x4f\x5b\x84\x29\x1b\x03\x03\x48\xe5\x20\xe6\xd6\x8a\xd7\xec\xbf\x69\x20\xd5\x81\x88\x0f\x4f\x8d\xea\x12\x2f\x15\xd3\x8d\xc4\x62\xad\x8d\x0b\xe3\x14\xc9\x05\xd5\x90\xac\x3e\x73\x09\x4e\x4d\xab\x1a\x09\x60\xe0\x54\xac\x1d\xc6\x2c\xc0\x09\x0e\x25\xc3\xa3\x10\x21\xe2\x5a\x38\xb9\xf6\xbc\x87\x86\xca\xc7\x2b\x8d\x99\xa4\x82\x6e\x0a\x2e\x9f\x5e\x94\xbc\x70\x7e\x21\x6a\x88\x48\x43\xf0\x8d\xc7\x66\x06\xf2\x05\x3f\xe8\x16\x08\xf8\xef\xc8\x4a\xde\x44\x40\xda\x99\x30\x90\x63\x23\xc8\x99\x98\x31\xaa\xf9\xb4\x62\xae\x26\x40\x1b\x6a\x32\xac\x5f\x54\x9f\xe7\xd6\xd1\x9a\xd3\xa0\x45\x70\xa3\x57\x93\x6b\x0e\xb9\x28\xaa\x16\x78\x40\xf0\xea\x08\x5c\xd8\x54\x14\xac\xf2\x1d\x6f\x02\x1c\x55\x36\x98\x85\x28\x91\x68\xc6\x94\xc2\xf5\x9a\x2e\x37\x9f\x66\x52\x4a\x86\x69\xc5\x80\x24\x32\xc2\xd7\xdb\x5c\x58\x92\x0b\x92\xc2\xad\x16\x25\xe7\x0c\x4f\x07\xee\x0c\xa1\xf6\x2a\x99\x55\x08\x84\xe6\xee\x12\x58\xa1\xa5\x83\x4e\x89\x32\x86\x46\x88\x8a\xe9\xc0\x2b\xe3\x4e\xd2\x83\xc9\x73\x08\x91\xbb\xba\xbf\x70\x9b\xc6\x9d\x64\x1a\xc3\xf5\xc5\x06\x07\x1e\x33\xdf\x5f\xaf\x06\xb4\x25\xf3\xe3\x76\x2e\x2c\x68\xb7\xe4\x7b\x42\xf4\x3a\xe9\x75\xa5\xc5\xb7\xa4\xb3\xfc\x00\x87\x5e\xce\xc8\x0b\x5e\x31\xbd\xd4\x06\x6b\x06\x79\x8d\x82\x0b\xab\x2a\xa5\x21\x28\x15\x30\x99\x0e\x05\x97\xbd\xcd\xf2\x04\xb2\xb2\xed\x70\x76\x95\xa4\x7b\xac\xd7\x29\x7d\x31\xf3\x1a\x6e\xeb\xaa\x04\x82\x4a\x57\xac\x22\xca\xa5\x44\x0c\x5a\xad\x59\x12\xae\x61\x6f\x35\x66\x45\xdf\x17\xfb\x82\x4f\x15\x23\x27\x0b\x2a\x04\xab\xa2\x06\xc4\x2e\x75\x83\x1a\x43\x8b\x05\x4a\x73\x4a\xac\x24\xa9\x98\x79\xa4\xc9\x42\x6a\x43\x6a\x5a\x2c\xb8\x08\x9d\x96\x44\x68\xc4\xdd\xc1\xe0\xde\x43\xa4\xf7\x99\xbe\xb4\x04\x24\xee\x73\x2e\xe1\x82\x54\x78\x8e\x9d\x75\x07\x1b\xa4\x8a\x91\x04\xd2\x80\x32\xf4\xc0\x5c\x7b\xb6\x83\xd1\xea\xa4\x14\xec\x35\x7a\x0a\xe0\xde\x84\xdf\xa6\xcf\x7c\xfa\x6e\x42\x0e\xd8\x3b\xf3\xc7\x83\x11\x39\x78\x37\xd3\xf6\x7f\x84\x99\xe9\x83\x09\x39\xab\x43\xa2\x10\x17\x91\x1a\xc1\xdc\x1f\x10\x3e\x23\xad\x18\x5c\x0b\x39\x58\x62\x55\xad\xc8\xc2\x1f\x8f\xaa\x56\xf4\x5b\x4d\xbf\x38\x21\x86\xaa\x39\x33\x76\x0e\x22\xda\x7a\xca\x54\x6a\x0f\xf0\xfd\x68\xd5\xa7\x18\x2d\xbf\x17\x55\x72\x6c\x2f\xd7\x81\xf2\x74\xf4\xd7\xfb\x79\x94\xb8\x36\xa3\x95\x66\xe4\xd0\xfe\xf0\xf1\x8d\xe2\x86\x1d\x4d\xc8\x1b\xff\x57\x50\x35\x0e\xba\xe8\x4c\x0e\xd1\xf7\xb0\x02\xc4\x3d\x54\x33\x83\xa0\xbd\x82\xf8\x9e\x8d\xad\x48\xd7\x02\x71\xc3\xa7\x52\x56\x2c\x11\xd3\x1c\x79\xef\xc7\x1f\x5f\x27\xbb\xc6\xfa\xfc\xdd\x3d\xef\x7d\x6c\x7e\x23\x55\x55\xde\xf0\xd2\x15\x11\x91\x43\xfb\xe3\xa3\x61\x2c\x3f\x24\xb4\x30\x30\x90\x90\xbb\xaf\x5b\x1e\x1f\xfe\xcd\x0d\x2f\xf3\xec\xe8\x80\x03\x08\x44\xf4\x79\xc0\x3b\x46\x2c\x0f\x10\x60\x02\x5e\x32\x61\xac\x70\x57\x9a\x1c\xc2\x5f\xa4\x03\x49\x9e\x72\x6c\xfc\x01\xf3\x4a\x45\x0a\x59\x4f\xb9\xe8\xfa\xf2\x74\xbc\x69\x15\x18\x2b\x6f\x7d\xc4\x4d\x33\x83\x60\xfa\x00\x06\x28\xcd\x82\x68\x5e\xb7\x95\xa1\x82\xc9\x56\x57\xc9\x28\x14\x0f\xec\xb9\x36\x66\x15\x7b\x87\xb2\x6f\x57\x5d\x07\x3b\x0a\xfa\x9a\x31\x00\x3c\x74\xad\xd1\x56\x55\xe3\xa4\xb9\x3a\x54\xa1\xf2\x71\x50\xad\x43\xa3\x0f\xf6\x8e\x15\x0e\x46\xb4\xa9\xda\x39\x4f\xf4\xce\x3c\xb7\x6f\x51\x50\xc3\xca\x67\xe4\x45\xf7\x72\x00\x6d\xe5\xbf\x99\x90\x13\x9f\xd3\xe8\xa6\x27\x27\x17\x67\xcf\x5d\x77\x2c\xa1\x0d\xa3\xbb\xd0\xdd\x87\x25\x50\x8d\x9d\x2b\x76\x07\x46\x03\x4e\x9c\x45\xc4\x76\x2d\xca\x56\xe3\x1f\xee\x1b\xd7\x18\x3f\xb4\x10\x1e\xd6\xcd\x69\xb0\x48\x78\xb0\x97\x76\x66\x2f\xc5\x1d\x87\x23\xb2\x4a\xd6\x30\x61\xef\x3c\x11\x9f\x7f\x5c\xe7\x9d\xb1\x89\xeb\x25\x9f\x47\xaf\xf4\x8d\xe9\x7b\x4a\x65\xe4\x23\x5f\xc8\xaa\xd4\x84\xbd\x33\x8a\xda\x6b\xbf\xb6\x17\x7c\xf8\x9b\x19\xa1\x62\x39\x19\xa6\x62\x0e\x0a\x4b\xe7\x0d\x45\x0f\xde\x99\xfd\xb6\xd0\xca\x07\x0b\x2d\x1e\x9a\x15\x8a\x99\x01\xe8\x63\xd9\x3a\xdf\x7b\x42\xfa\xdb\xd5\xfb\x78\xcd\xc1\x8a\xdf\x7a\xc0\x05\x97\x56\x32\xc4\x6f\xac\x99\xd0\xdc\xf0\xeb\x5e\x7b\x4c\x40\x0f\xa5\x5a\x07\x3f\x24\x28\x53\x4e\x00\xea\x1e\xb0\x67\xf2\xc4\x18\x9f\xe4\x33\x22\xe4\xca\x5b\xc5\x30\x14\x21\x4e\xd8\xfb\x49\xf2\xa4\x21\x0f\xa7\xc6\xce\xd2\x54\x00\x4e\x20\x3e\x7c\x04\x10\x65\xf8\xdf\x98\x8a\x63\xd7\x20\xf2\xc6\xc2\x2a\xa4\xaf\xb4\x5b\xbd\xdd\x89\xcd\x1c\x29\xe7\x43\xd1\x66\x72\xc6\x8e\x5e\x47\xaa\x9d\x07\x1a\x19\x16\x5e\xe8\xb7\x52\x63\xb3\x19\x2b\xec\xd9\x80\xf6\x6d\xbe\x17\x99\x35\x6b\xcb\x16\xc1\x3c\x3c\x8e\x67\x1f\x87\x73\x28\x62\x5d\x04\x33\xd1\x65\xaf\x9e\x09\x6d\x28\x40\x2b\xc2\x1b\x5b\x3d\xcd\x2a\x4f\xae\x01\x9f\x3b\x4e\x18\xbd\xf6\x00\x8d\x03\x89\xa8\xad\x1a\x56\x30\x65\x4f\x4c\xb5\x24\x37\x4a\x0e\x2d\xda\xda\x32\xb6\x2a\xaf\x99\xba\xe6\xec\xe6\xb1\x43\x9f\x19\xdb\x97\x1d\x3b\xec\xbc\xc7\xe0\xee\x7a\xfc\x19\xfc\xcf\x00\xaa\x32\x45\xdf\xdc\x2d\xfb\x8c\x1c\x1c\xe4\xf0\x0b\x0c\x4e\x5d\x9b\x41\x17\xca\x24\x83\x2a\x8f\x4f\x00\xa6\x5f\x09\x95\xb9\x0f\x9d\x43\xe0\x53\x42\x63\xee\xae\x89\x14\x72\x7b\xd8\xfd\x83\x5c\xff\x12\xa2\x2d\x9f\x74\x80\x49\xad\x10\xc9\xf5\x85\x7d\xdb\x1f\xa7\xe9\x19\xfe\x21\xc1\x93\x8b\xb1\x51\x8c\x85\x57\x35\xce\x7c\x12\xd2\x77\xfe\x0e\x86\xcd\x3d\x0c\xe2\x95\xd4\x50\xcd\xcc\x90\x60\x72\x2e\x51\x1f\x91\x62\xd7\x37\x96\xfa\xee\x2b\xc8\xb7\x62\x00\xf0\xec\x9b\x1b\x92\xf1\x5f\x9d\xe9\x2f\x7a\xbf\xb4\x46\xbf\xdb\xd7\xf4\x9b\x1c\xd1\x85\xa0\xc9\x09\xfa\x80\x70\xee\x8e\x49\x76\x65\x23\xba\xb7\x7c\xfb\xf6\xec\x79\x1e\x57\x4a\xf7\x3c\xef\x19\x80\xff\xee\x2f\xbf\x3b\xa4\x5c\x93\x56\xf0\x5f\xdb\xd8\x09\x0d\x6d\xeb\xc3\x41\x72\xbf\xdf\xc5\xea\xcc\x0b\xd6\x25\x27\x3c\xe7\xfa\x6a\x57\x92\x71\x8d\x90\xbe\x8c\xfc\xf6\xe4\x94\xb8\x4f\x3f\x94\x49\x90\x34\xf5\xdd\x64\x1f\xf4\x65\xe8\xb7\x27\xa7\x2b\xaf\xbb\xe2\x46\x3d\xae\x2a\xef\xeb\x91\x42\x07\x80\x4e\x27\x5d\x33\x2d\x31\xc8\x66\xab\xd1\x2b\x56\x72\x85\xa9\x6a\xfe\x2d\xcb\x49\xa1\x79\xe8\xfa\x35\xbf\x62\x13\x2e\xa3\xb4\xd4\xb4\x25\x18\x94\x45\xa6\x3f\x9b\x17\xac\x4b\x88\x2e\xb9\xbe\xba\x7f\x9e\xe4\xa6\x7c\x9d\x06\x58\xfb\x7b\x4b\x3f\x59\x75\x77\x3a\xd9\xe9\x94\x20\x38\xdd\x4b\xd9\x92\x1b\xd7\x7c\x7b\xa0\x9b\xf5\x92\x37\xcf\xc8\xa9\xd0\xad\x62\x5d\x85\xee\x2a\x09\xd6\xc2\xbe\x75\xa7\x2b\x74\x99\xd7\xcf\x76\x9c\xaa\xb2\x17\x47\x91\xe4\xb8\xdb\x1b\xaa\x0c\x78\x3d\x77\xcd\xda\x81\x10\xaf\x12\x44\x1f\x88\xdb\xe4\xed\xb3\x99\xc7\x50\x1a\xb9\xe6\xa8\xe8\xb9\xe7\x3a\x3c\xbc\xcb\x98\x06\xed\x2f\x07\xff\xbe\x90\xc1\x62\x79\x5c\xb2\xeb\xc7\xba\xa4\x4f\x47\xf0\x5a\x1e\x03\xb2\xbf\x06\x54\x93\x83\xa7\x07\xe9\x33\x5f\xf0\x9a\x57\x54\x55\xd8\x4a\x24\xf4\x68\x09\xcf\xb7\x37\xa4\x27\x04\xca\xce\x9e\x1c\x90\x43\xa9\x80\xa2\x82\x0a\x52\x31\xdf\x76\xc4\x49\xd2\x25\x3a\x07\x8e\x7e\x27\x47\x68\xd7\xf9\x58\x78\xb1\xed\xfc\x10\x96\xde\x1e\x72\x3a\x77\x1c\xe7\x3c\x7f\xde\xa9\x8f\x5c\x58\x1d\x6c\x42\xde\x3a\xcd\xce\xe9\xe6\xc8\xb5\x25\x28\x64\xf8\x8b\xdf\x07\x77\xfc\x9e\xc2\x38\x2b\x01\x99\x5b\x0d\xac\x90\xf5\x4c\xbe\xdf\x09\x47\xa4\x06\x8b\xe6\xdc\xbc\x61\x8d\xdc\x99\x9d\x88\xd3\xaf\xa4\xd4\x70\x63\x3f\x90\x9a\x1b\xa9\x96\x84\x1a\x42\xf1\x66\x28\xda\x8a\x2a\xa2\x18\x26\xc7\x64\x30\xdb\xdc\xec\x2b\xc6\xda\xa5\xec\x32\x70\x62\x0c\x43\xe7\x86\x0e\xf4\x8d\xdc\x6d\x9c\x18\xa3\x3b\xb5\xf7\xd5\x73\xae\xb0\xd3\x3e\x54\x85\x71\x73\x12\x26\x43\x38\xa5\x4a\x0a\x07\x6d\x64\x67\x74\x59\x38\x73\x6e\x5c\x67\x5a\x24\xc0\x7e\xed\x9f\x96\x44\x4a\xd7\xeb\x5f\x96\x8f\x74\xf7\xc6\xf7\x30\xb7\xa7\x63\x9c\x5d\xf8\x13\xc1\xec\x96\x6a\xe7\xd2\x35\x10\x12\x1a\x3e\x60\x1e\x6d\xf7\xf9\x30\xc5\x11\xf2\x5c\x84\x0c\xc1\x59\x82\x35\x8c\xca\xe0\x19\x79\x34\x99\x3c\x9a\x80\x2a\xfb\x68\xf2\xc8\x1b\x62\x55\x28\x87\x75\xda\x5e\x47\x8c\x2f\xa2\x1c\x02\x58\xd0\x97\x1a\x13\x42\xbe\xf7\xa8\x9f\xd0\x05\x72\xa5\x22\x37\x14\xdb\x56\x55\x78\x07\x68\xa0\xd2\x97\x3d\x03\x22\xa1\x10\xcf\x6d\xa7\xf1\x4b\xba\xc2\xde\x39\xbf\x76\x4d\xd4\x76\x96\x66\xd3\xbd\x62\x16\x4e\x8d\x57\xcc\x39\x50\xdf\xbc\xdc\xdd\xbb\xa1\xe8\xce\xf4\x66\xee\x1e\x70\xef\x55\xc8\xba\xe6\x86\x2c\xa8\x5e\x04\x2f\x5e\xd7\xe5\x66\xd8\xd5\x34\xd4\xf9\x5b\xb5\xda\x30\x35\x4b\x92\x5d\x59\x2e\x73\x4f\xc0\x8a\xb3\x37\x7c\xec\x30\x89\x45\xe7\x8a\x81\x4b\x4e\x2f\xa8\x62\xf6\x97\x0d\xdc\x3e\x15\x9f\x31\xc3\x53\x0f\x47\xef\x7e\x0f\x33\x7f\x38\xb8\xd5\x11\xbe\x5f\xe1\xad\xa1\x77\x21\x13\x65\x23\x79\x6a\xab\x86\x31\x69\xa8\x49\xe9\x23\x3a\xf4\x16\x0d\x64\x67\x39\xc1\xe1\x69\xfe\x08\xfb\x0f\xd0\x98\x04\x0e\x74\xbd\x54\x22\x86\x31\xb2\x91\x95\x9c\x0f\xcc\xe1\x1f\xe4\x08\x33\x8b\x5d\x6b\x11\x96\x06\xbf\x6a\xdd\xd2\x04\x5f\x8d\x19\x80\xf6\xb5\xc1\x78\x62\xce\x19\xe5\xdb\xef\x38\x43\xe9\x71\x38\x9d\x8f\xdf\x9c\x1e\x3f\x7f\x75\x3a\xa9\xcb\xcf\x10\x03\x62\x4c\xc7\x8d\xdc\x59\x18\xf2\x5e\x58\xd2\x6b\xdb\x86\xde\x67\x90\xc4\xac\x44\x9d\xc4\x3e\x60\x0c\x98\x4d\x0d\x53\x35\x47\x5c\xa9\x7d\x35\xb1\x77\xc2\x25\xa9\xd6\xb5\xbd\xe3\xce\x13\x0f\x72\x0e\xf6\xf0\xf3\xf7\x2f\xe4\x46\xb1\x31\x00\x49\x58\x5b\x72\xc6\x2b\x00\xa2\xe9\xf4\xd4\xe8\x7e\x4e\x9a\xd4\x47\x5c\x7d\x48\x17\x9f\x5c\x2d\x57\x23\xaf\x9d\x95\x19\x22\xeb\xd8\x2d\xb5\xaa\xd2\xea\x9e\x00\xcb\xc7\x2a\x65\x2e\x0a\x44\xe7\xf0\xc2\x52\xb9\x6e\x80\x8d\xe2\xd7\xbc\x62\x73\x4b\xc2\x82\x8b\xb9\xee\x3a\x10\xb9\x64\xb4\xa4\x69\x01\x63\x88\x75\x3a\x4d\x48\xea\x79\x05\xa9\x65\x01\x9c\x1f\x8f\xe6\xeb\xef\x2f\x89\x60\x48\x42\xe2\x21\x1b\xe8\x78\xb2\x44\x26\xde\xec\xbb\x8e\xb6\xee\x46\x1f\xd9\x9b\xab\xd8\x27\xa4\x6c\x3a\xaa\x83\x02\x4e\x18\xdb\xc1\xcb\x9e\x12\xbd\xac\x2b\x2e\xae\xa0\x65\x87\xbb\x4e\x5c\x2b\x3b\x46\xec\x17\xfe\x00\x2b\x46\xab\xfc\x6a\xc0\x1d\xb1\x32\xc9\xa1\x02\x98\x3d\x88\xc1\x83\xc9\x62\xa5\xde\x3f\xbc\xb0\x47\x4f\x79\x96\xfb\x3b\x39\xcf\xf3\x5e\x6f\x2d\xaf\xe9\x7c\x67\x85\xa6\x30\x79\xef\xc2\x16\xe4\xfb\x93\x33\x5f\x37\x70\x18\x3b\xa4\xf1\xb7\x52\x11\xaa\x0c\x9f\xd1\xc2\x1c\x91\xa6\xad\x2a\x67\xe2\x7a\x25\xcf\x49\x89\xf7\xe4\x9e\x26\x11\x79\xd9\xb9\xd0\xa0\x80\x43\xcb\xea\xda\xce\x6a\xac\x0d\x8f\x9e\xc0\xb6\x71\x09\xad\x00\xcd\x26\xc8\xcd\x82\x17\x0b\x72\xde\x56\xd5\xb9\xac\x78\xb1\x0c\x7d\xcf\xd1\xd9\x5e\xda\x6b\x21\xf1\x5e\x38\xae\x6e\xe8\x52\x3f\x8b\xdf\x92\x50\xf8\x8c\x50\x63\x58\xdd\x20\x33\xdb\xa5\x59\x6d\xb7\xd9\xf9\xdb\x41\x59\xe4\x96\x50\x10\x79\x94\x57\x41\x32\xb6\xee\x83\xc4\xfb\x7a\x4c\x5e\xb3\x6b\xa6\xfa\xf4\x09\xfb\x11\x3c\x5a\xf7\x69\x82\xad\x03\x6d\xbc\xd5\xe0\x15\xc1\x56\xeb\x6b\x5b\xfd\x11\xda\xf9\x6c\xe5\xb1\x5c\x8b\x47\x86\x38\xae\x4a\x7d\x91\xb3\xd9\x6b\x69\xce\xf1\x19\xfd\xf7\xc1\x37\x79\xcf\xac\xb4\xb2\x36\xc6\xd2\xcf\x6e\xd9\xa1\xe4\xfa\x6a\xd0\x2b\x04\x2f\x4e\xbc\x3d\x43\x99\x79\xce\x8c\x65\xe7\x71\xe0\x68\x47\x83\xe5\x6a\xf8\xae\xb4\x2f\xeb\xce\x97\x62\x0e\x8a\x70\xe4\x98\xbb\x66\x54\x78\xbc\x41\x76\x43\x14\xab\xa5\x41\x3d\xd7\xd2\xeb\x9c\xdc\x85\xac\x19\xa1\xd7\x94\x57\x74\x5a\x41\xe6\xae\x7d\xb8\x7b\x56\xb2\xef\xf0\x18\x56\x00\xf2\xa1\xa4\x3f\x8f\x96\x5b\x02\xcf\x23\xff\x38\x18\xf0\xf8\x90\x22\x59\x95\x2c\xae\x62\x5d\x75\xa6\x64\x8d\x3f\xc1\xaa\xf3\x12\x2a\xa1\x68\x59\x12\xcd\xe7\x02\x80\x01\x85\x21\x15\x35\x4c\x14\xcb\x09\x79\x81\x93\x77\x70\x88\x8a\x19\xc5\x43\xd5\xba\x90\xaa\xa6\x95\x5f\xe4\x29\x2d\xae\xe4\x6c\x06\x4f\xed\x7e\xef\x12\xb5\x9c\xb0\xc2\x35\xa1\x5a\x0a\x9c\x9c\x69\x4d\xe7\x03\x84\x15\x74\xff\xb6\x0a\x94\x2b\xac\xc0\x5d\x72\x50\xa1\x5e\x50\x7a\x1c\x50\x9f\xba\xaf\x3c\x54\x5b\x07\xc5\x16\xf8\x55\xb5\xc2\x70\x2b\xfe\x7a\xbd\xc4\x08\x44\x0c\xd7\x12\x4f\xed\x54\xae\x31\x1b\x80\x47\x38\x88\x35\x28\xc5\xba\x86\xae\x03\x48\xdf\x5a\xbe\xda\xaa\xa8\x87\xaa\x9d\xf4\x55\x88\xee\x11\xe0\x66\xff\xe2\xdc\x52\xed\x60\xae\x3b\xed\xf2\x10\x70\xdf\x3a\xa6\xf8\xe9\xf3\x7f\x4d\xae\xe3\x28\x3c\xfc\xb9\x55\x39\x8e\x2c\xbd\x35\x53\x73\x44\x41\x63\xa4\xa6\x82\xcf\x98\xb6\x1c\xb2\xb4\xec\xe4\xa2\x2b\x9a\xd6\x8c\xdc\x58\x46\xc2\x1c\xd8\x95\xd7\x4b\x94\xaf\x97\x2b\xf1\x9c\x68\x47\x3b\xd7\xc6\xa1\x92\x89\xb9\x41\x17\xed\x14\x95\x63\x78\xe8\x0a\xe1\x58\x42\x07\xad\xef\xc3\xde\x7d\x74\xdd\x74\x3b\x6d\x70\xd5\xd8\xcc\x6a\x49\x4f\x27\x5f\x7e\x99\xfe\xea\x58\xc9\x05\x73\x6a\x56\xb4\x8a\x9b\xa5\x15\xab\xec\x9d\x99\xcc\x34\xf4\xba\x3f\x01\x30\x55\x77\xed\x2e\x28\xb8\xb7\xb1\xec\x0b\x8f\x5b\xc7\xf2\x96\x0d\xef\x61\x1d\x47\x13\xb4\x8a\x5d\x6b\xe3\x6e\x91\x67\x4e\xf4\xda\xf3\xd0\x1d\x3a\x3d\x21\xe7\x52\x23\xee\x6b\x40\x4e\x1f\x50\x68\xb8\xe7\x7a\x8f\x1d\xbf\x13\xcd\x87\x80\x9d\xbc\xdf\xba\x4f\xea\x7b\xc5\xf6\x1e\x72\x94\x9d\xfd\x19\x34\xd5\x32\xc4\xd0\xf9\x4a\xcb\x7c\xa9\x7a\x4b\xd1\x75\xd7\xdc\x61\x34\xdb\xad\xd2\xae\x4f\xff\x1b\xef\xe0\x22\x67\xab\x4c\xdb\xaf\x72\x77\xf8\xe4\xe9\x9b\xf6\x77\xb6\xa0\xd7\x6c\xe3\xc5\xda\xc8\x72\xb2\xe1\x06\x82\x63\x94\x3e\xa1\x35\xdc\x42\xd9\x78\x00\xbd\xd6\x9a\xd5\xd3\x2a\x34\x5e\x5f\xbb\xe0\x37\xe9\x30\xd3\x25\xa9\xa4\x04\xc0\xd4\xb6\x21\x42\x96\xcc\x1e\x00\x48\xd8\xa4\x95\x1e\x91\x8b\x63\xf7\xc3\x26\x9a\x12\x5b\x4e\x80\xde\xda\xb0\x62\xc3\x0f\xee\xcc\x07\x15\x75\x5b\x45\xa5\x25\xbd\x8a\xa1\x57\x87\x2d\x1d\x38\x02\x54\x3e\x81\xbf\xcd\xb5\xba\xaf\xd8\x35\x83\x24\x95\x19\x9f\x13\x6c\xfe\x5a\xbb\xd6\x20\x3e\x37\x5c\x2a\x68\x46\xa9\x78\x99\xee\xf6\x59\xd5\xc5\xec\x96\xde\x48\x75\x55\x49\x5a\xfa\x1a\xd4\xca\x2a\x3c\x15\xbf\x62\xe4\x39\x6b\x2a\xb9\x74\xfd\x3c\x44\x49\x2e\x0c\x35\x6c\xd6\x56\x17\x03\xb6\x62\x98\xcf\x46\x17\x9a\xef\xcc\x67\x63\x27\x5f\xf1\xd9\x9c\x5d\x9c\x5c\x9c\xdd\xfb\x2a\xb7\x61\x5e\xbc\xc7\x9f\xc1\xca\xdc\xbf\x48\x03\xff\x35\x2d\xf1\x6b\x4c\xaa\x36\xf5\x2f\x31\x45\xef\x5c\x2a\x43\xab\x1d\xe8\xd0\xc5\x82\x36\xc7\xad\x59\x3c\xe7\xba\xb0\xc2\x24\x8f\x2a\xbd\xf6\xd4\x08\xfc\x9c\x41\x54\xce\xd9\x4d\x84\xfb\xf3\xe2\x7e\x77\xf2\x8f\xe3\x73\x42\x5b\xcb\xcd\xc6\xb5\x21\xd8\x49\x0c\x97\x44\x6b\x73\x81\x4d\x97\xb2\xae\x8c\x7b\xe6\x47\xd6\xc5\xff\x6a\x9f\x56\x65\xdf\x6a\x10\x37\x15\x01\x3e\xd4\x21\xde\xab\x3a\xc4\xd4\xeb\x82\xe4\x30\x23\xb8\xe0\x86\x53\x23\xd5\x3e\x94\x3e\xf5\x88\x09\xd9\xa7\xad\x36\xb2\x76\x22\xe1\xcc\xff\x02\xc0\x22\x06\xc5\x7f\xd7\x26\xeb\x52\x5a\x21\x43\x08\xb6\xe5\x4c\x18\xa6\x66\xb4\x60\x2b\x30\xb7\x23\x70\x76\x23\x4d\xdc\xff\x26\x99\x9a\xbf\xb8\x4c\xf5\x06\xee\xc1\xbf\x3e\xfb\x4b\x54\xe8\xf8\xd7\x60\x78\x38\xc7\x7b\x6c\x63\x08\x56\x0c\x69\x55\x33\x9c\x7b\x7e\xcd\x73\x2f\xf0\x5f\xc5\x4a\xd2\x3e\x2e\xed\xff\x6e\x69\x85\x5b\x32\x64\xbb\x87\xbf\x66\x8f\x15\x76\x7e\x4a\xfa\x8c\xe9\xd6\x2d\x70\x21\xc2\xa8\x80\x64\x46\x97\x92\x70\x8b\x69\x14\x15\xda\xb2\x58\x1e\xb7\xc9\x23\x67\x88\x3d\x22\x87\xa6\x68\x92\x6b\x50\x33\xa0\x34\x05\x84\x26\xf7\x1f\x49\x8f\xc9\xd5\xb8\xa0\x6a\x45\x6c\x14\xe1\xd2\x5f\x22\x53\xbf\x0c\x8d\x0b\x86\xad\xd6\xce\x0b\x65\x41\x4e\xed\x1c\x36\xdd\x91\x11\x4e\x40\xbc\xd4\x68\x52\x90\x97\x5c\x1b\x04\x83\xc5\x1f\x03\xf8\x1b\x82\x9f\x5b\x73\xf5\x9c\x48\x45\x78\xf3\x5f\xb4\x2c\xd5\x33\xd4\x3c\x7d\xec\x53\xa5\x63\x11\x72\xed\x92\xef\x00\x86\xd0\xfb\x2b\x0e\xcd\xb2\xe1\x05\xad\xaa\x25\xb9\x3c\x39\x87\x19\x34\xf9\xe6\x4f\x4f\xc0\x7e\xfd\xf2\x8b\x3f\x3d\x19\x78\x84\x1e\xb0\xd3\x57\xc6\xbd\xc8\x55\xbe\x07\x55\xbf\xfb\x86\xcc\xda\xc3\x51\x85\x4e\x93\xd6\x3e\xbc\x40\x18\x51\xab\x1c\xb9\xeb\x0e\x05\x81\x3d\x5d\x41\xd5\xcb\x69\x45\x3e\x00\x76\x46\xe3\x01\xb0\xf3\x01\xb0\xf3\x01\xb0\xf3\xfd\x23\xf6\x73\xee\xfa\x3e\x8a\x69\x81\x66\x88\xeb\x7a\x13\xaa\x4c\xe7\xbf\x77\x95\x29\x91\xd5\x52\x05\x6f\x8e\x0d\x8c\xc1\x60\x86\x74\xb7\xe8\x9a\x36\x3c\x7f\x7d\xf1\x5f\x2f\x8f\xff\x7e\xfa\x12\x56\xd5\x61\xce\xd8\xe3\xcd\xc5\x9d\x86\x51\x6e\x55\xc4\x0c\xdb\xef\xdd\x95\x17\x8b\x95\xc2\x62\x41\x5e\xbf\xb8\xd8\xb2\xa6\x78\x07\x31\xb0\xcf\xc4\x2c\x7d\x97\xee\x5b\xa9\x8d\xfd\x53\xcd\xd4\x6e\xba\xeb\xec\x4d\x9d\x8e\x0f\xf3\xb2\x77\x7d\xaf\xbf\xe5\x57\x5c\x9d\x9d\x39\xd8\xd3\x98\x91\xfc\xc7\xd4\xcb\xda\x2d\xc2\x6d\xbb\xf7\x95\xb2\x77\xc9\x16\xc3\x2c\x62\x95\xab\x29\xd6\xa0\x46\x25\x2a\xea\xa7\x65\x2f\x12\x54\x2f\x94\x55\xf3\xac\x82\xc7\xb4\xf6\xca\xc6\x7f\xee\x39\x6e\x36\x35\xdf\xdf\x95\x42\xb0\x91\x18\xd7\x8e\x1f\xf3\x6d\x7a\x65\xcf\xbd\x04\xbc\xb4\xac\x9b\xd5\xce\xdf\x30\x63\x2f\xf7\x0d\x94\xb2\x86\x16\xa9\xaa\x68\x1a\x57\x74\x2b\x31\xf6\x0c\xd2\x7d\x84\x9f\x40\x5b\xf2\x7b\xa8\x88\x00\xdd\x3b\x02\x59\x0e\x73\xef\x5a\x38\x05\x42\x56\xfb\xfd\xd1\x6d\x58\x92\x50\x1d\x6a\x6b\xb0\x2e\x27\x43\x63\xc0\xbd\xe4\x59\xf2\xbb\xd4\x57\x7e\xbc\x63\x77\xf9\x2e\x5d\xe5\xcd\x42\x1a\x29\xf6\xa3\x99\xc1\x26\x5a\xfa\x57\xcb\x39\xfc\xe2\x24\x24\xc9\x46\x57\x13\xa2\xcf\x86\x84\xcf\x95\xba\x5c\x97\xc6\x99\xa3\x24\x37\x06\xbe\x3a\xdf\x44\xf1\x87\x31\xb0\x36\xbe\xe4\xef\x0b\x0e\xab\x29\xcf\x9e\xef\xe0\x16\xb9\x0f\x69\x72\xbf\xd3\xce\xa7\x77\x94\xf6\x36\x1c\xec\xab\xcc\xd4\xca\xc6\x3e\xc8\xef\xf1\xd9\x73\xe7\x88\xf0\x7d\x6a\xb4\x93\x0b\xe4\xfd\x82\x6a\x27\x36\x85\x54\xe6\x46\xaa\x1d\xf7\xf7\xee\x53\xb1\x02\x98\xe4\xbe\x5b\xeb\xe9\x75\x47\xd2\xbc\x4f\xda\x56\xad\x65\x56\xdf\xcb\xee\x54\x12\x41\xef\xe9\x2b\xf3\xae\x9c\xf8\x19\x26\x85\xac\x07\xb6\x94\xd9\xf1\x05\x81\xdb\xfb\x9f\x7c\x49\x5c\xc0\x25\x11\x31\xff\x87\x2e\x8b\xdf\xc3\x5d\x71\x7f\xee\x88\xbd\x33\x47\x1e\x5a\x2e\xf7\x86\x17\x1e\x59\xf6\xc7\x3f\xcc\xc5\x20\x2d\x6f\x76\xb7\x38\x0d\x37\x82\xfb\xdd\x4e\x6e\x6d\x25\xff\x1b\xae\x82\xc1\x17\x76\x78\x12\xa6\xde\xc1\x0d\x46\xab\xca\xee\xac\x14\x2c\x14\xcf\xe9\xae\x14\x14\x6b\x21\x6b\xda\xb8\xb2\xd0\x52\xde\x88\x1b\xaa\x4a\x72\x7c\x7e\x76\xf7\xb7\xce\x60\xd0\x78\x3c\x47\xaf\x64\xb9\x73\xf9\x1f\x91\x02\x17\x3e\x40\x79\xd8\x7f\x4c\xb9\xd1\x88\xaf\x08\x68\x87\x26\x8e\x7f\x58\xcd\x27\xe4\xe3\x5b\x79\x6e\x65\xb7\x7b\x52\x06\x7b\x42\x10\x59\x18\x5a\xb9\x24\xa2\x29\x33\x37\x8c\x09\xf2\xe4\xc9\x13\x4c\x7d\x78\xf2\xf5\xd7\x5f\x43\x9d\x35\x29\x59\xc1\xeb\xf5\x1f\xc2\xaf\xbe\x7a\xfa\x34\x9d\x94\x7f\x1e\xbf\x7a\x49\x68\x01\xee\x2b\x32\x95\x66\xe1\x28\x02\xd6\x8b\x27\xd5\x23\xf2\xbf\x2e\xbe\x7f\xed\xf5\x10\xbd\xf2\x2d\x70\x76\x58\xce\x01\xee\x19\x87\xd0\xc2\x01\x6f\xa7\x4b\x4e\xa0\x66\x11\xd0\x48\x28\x24\x89\x45\x98\x36\x4e\x5e\x0e\xa8\x75\x82\x76\xe8\x7c\xbe\x80\x6d\xe1\x02\x4e\x61\xc5\x0b\x07\xf9\x8f\x29\x2b\x58\xc4\xec\x81\x35\x11\x62\xc4\xab\x10\xc9\x33\xdb\x25\x1b\x61\xd9\xb1\x03\x34\x19\x05\xf7\x85\x62\xba\xad\x0c\xb4\x84\x9a\x32\x47\x44\xc7\xb1\x9a\x25\x73\xe0\x7e\x64\x97\xbb\x63\xf4\x56\xef\x3e\x40\x16\x91\xd2\xef\xe5\x7f\xb9\x60\x44\xde\x08\xa6\x48\xd4\x34\x35\xbf\x40\xb8\xec\x7a\xa1\x01\x0d\x5d\xe1\xbc\x43\x0c\x81\xee\xb4\xd4\xaa\x22\xd5\x94\x16\x57\xe4\x66\xc1\xf0\x60\xd8\x6b\x65\x8c\x55\xf4\x6d\xef\x2f\x5b\x31\x80\x41\x08\x39\x3c\xae\x9a\x05\x3d\x8a\xd3\x33\xc3\xc9\xb7\xf3\x1e\x43\x8e\xdc\x8f\x56\x1d\x42\x15\xc5\xd2\xfd\xc2\xfe\x4e\x93\x19\xa3\xa6\x55\x8c\xcc\xa9\xf1\x80\x10\x4c\xd0\x69\x35\x54\xc1\xcc\xc6\xb0\x7f\xfa\x63\x5a\x30\x17\xef\xea\x5d\x33\xab\x57\x19\x9c\x2b\xa4\xe2\xd6\x8a\x98\x05\xe8\x72\xd4\x38\x20\x78\x4f\x4e\x69\xb1\x20\x4c\x18\xe8\xf6\x81\xb2\xd2\xfe\x3c\x79\xea\x05\x15\xa5\xe5\x79\xab\xbb\x20\x19\xf7\xb6\x96\x21\x5f\x56\xf4\x79\x58\xf1\x1e\xf0\x5a\xa7\xfa\xd1\x4a\x8a\x79\x7c\x93\x74\x96\x60\x04\x4d\x35\xe0\xd2\x84\x22\x59\x80\xa1\xb6\x1b\x83\x52\x4a\x3b\xf0\x2c\x8d\xa8\x6c\x53\x36\xe4\xc2\xc8\x92\x0b\x9f\x27\x1b\x9e\x90\x02\xd1\xd0\x2f\x55\xab\xcd\xdf\x5b\xcb\x90\x43\x9e\x96\x37\x3f\x9e\x90\x93\x35\xea\x30\xb9\xdc\xe5\xeb\x41\x7c\xbe\x28\x98\xc6\xc3\xfb\x0b\xa2\xd9\x98\xee\xd7\xbf\xe0\xb6\x0d\xa4\x42\xce\x36\x11\xe2\xf1\x01\xb9\xb0\xaa\x27\x6d\x8d\x1c\xb7\x4d\x49\x03\x56\x7a\x22\xc6\x64\x37\xe0\xd2\x18\x81\xe0\x0f\x5e\x8e\x75\x3a\xa2\x03\x13\x5f\x15\x83\x67\xff\xc0\x1b\x5b\x1d\xca\x25\x37\xc3\x49\xa8\x82\x02\x29\x68\xcd\x00\xf7\x09\xc9\x1d\x48\x42\x21\xeb\x29\x17\x0e\x2e\x71\x06\x78\x92\x4c\x61\x44\x1b\xb0\x12\x49\x45\xa7\xac\x72\x04\x48\x35\xf8\x95\xbf\xf3\x28\x5d\x4c\xd9\xfb\x4d\x13\x3a\x9f\x2b\xa6\x35\xbf\x66\x0e\x98\x92\xff\x3b\x50\x03\x4d\xd0\x4e\x5f\x79\xd0\x4e\x4d\x6e\x14\x37\x86\xa5\xb7\x81\xc2\x11\x1a\xac\x59\xf6\xee\x9c\x5e\x13\x42\x4e\xb5\x34\x4c\xf1\x02\x66\x75\x5b\xad\x89\x6e\x8b\x85\x55\x67\xa0\x92\x75\x0c\xe8\x9c\xc3\x57\xbd\x43\xeb\x41\xb8\xcf\x05\xa3\xa5\x47\x30\xd4\x46\xf1\xa6\x61\xe5\x84\x90\x13\x2b\x7e\x66\xbc\xa0\x06\xf1\xe9\x48\xc9\xca\xb6\xa9\x38\xfa\x9b\x07\x92\x01\xca\xa2\x2a\x19\xc0\x90\xca\x19\x14\x72\x84\xc9\x22\x63\x06\xda\x12\x70\x3b\xff\x94\x1b\x45\xd5\x12\x55\x7e\xb7\x97\x03\x89\xb0\xb7\x4f\x01\x98\x88\x30\x17\xd0\x03\x00\x4a\x24\xbd\xef\x90\x1f\x59\x2e\x01\x32\xd8\x99\xdd\x8d\x01\xb9\xbc\x7e\xe4\xb9\x93\xec\x80\xa3\x7d\xe1\x4e\xf6\xd0\x87\xe5\xbe\x96\xec\x40\xda\xc0\xff\xb4\x2e\x2a\x03\x6a\xac\x29\x16\x4e\x53\xec\x8b\x2a\x42\xd0\xe1\x49\x87\x55\x5a\xe1\x70\x08\x9d\xdc\x8b\xc8\x80\xcd\xc0\xcc\x84\x90\x57\xad\x69\x69\x55\x2d\xc7\xec\x9d\xbd\xec\xad\x30\x03\xed\x09\xda\xca\x01\xa8\x03\x58\x37\xa3\x0c\x84\x80\x10\x6a\x14\xe2\x1e\x6b\x72\x80\xef\x2f\x24\x34\xd1\x38\xc0\xc9\x34\x33\x50\x82\x06\x05\x5f\xa3\xcd\x7f\x92\x63\x4d\xae\x99\x5a\xba\x79\x07\x3f\x2e\xdb\x51\x25\x59\xcf\x08\x01\x09\x65\x8a\xc5\xe9\xbb\x46\x21\xec\x4f\x96\x67\xae\x1c\x97\xd5\x29\xb0\xf7\x83\xb7\x94\xfa\x8c\xed\x85\x11\xdc\x20\x58\x10\x15\x7f\x02\xb7\xc4\xf1\xeb\xe7\xc3\xaf\x07\x1c\xc3\x0d\x9f\xfe\x18\x68\x06\xf5\x47\x7e\x99\x83\xe3\xf8\x03\x6b\xee\xfa\x72\xf8\x6f\xb0\x35\x2c\xe2\xf5\xe9\xe0\x7a\xa4\xe4\x8a\xb9\x6b\x92\x0a\x17\x33\x73\x3f\xce\x46\xa4\x62\x00\x0b\x8a\xe8\xa7\x6c\x09\x93\xe1\xfc\x79\x76\x3e\xf3\xa1\xc4\x91\xeb\x26\xed\xc6\xd8\xbe\x7c\xc6\xa7\xf9\xcd\xca\xf4\xc8\xbc\xb2\x08\xc7\x15\x4b\x8e\x3c\x6e\x1a\xbd\x53\x64\x39\xc9\x7b\x6a\xe0\x0c\xd8\x0f\x02\x9e\x56\x60\x7b\x0a\x3d\x64\x35\x31\x32\x17\xb3\x91\x7c\x95\xb6\xfd\xe1\x37\xf4\xd6\x96\x2c\xa3\xe0\x21\x11\xbd\xfd\xbc\x97\x2b\xb6\x7c\xa4\xf1\xcc\xdb\x1b\x62\xc1\x1b\x30\xcd\xe1\xb2\x97\xb3\xcc\x07\x1f\xc7\x0f\x80\x86\xef\xc9\xc1\x9b\xe5\x4c\x8c\xc8\x6b\x69\xec\xff\x9c\xbe\xe3\xda\xd9\x30\xcf\x25\xd3\xaf\xa5\x81\x4f\xf6\x9e\x1f\x70\xa9\xee\x0b\x37\xb8\x70\x15\x87\x22\x4b\xb8\x86\xc1\x50\x87\x25\xf1\xbb\xee\x41\xc2\x03\xe7\x70\x4d\xce\xa0\x0f\x34\x6e\x55\x56\x82\xa0\xc2\xd7\x03\xa6\x5b\x72\xbc\xbf\x4e\x48\x31\xf6\x48\x04\xeb\xf4\x38\x6e\x91\xaa\xc7\x2c\x77\x44\x9a\x23\x0b\x82\x03\xf8\x0d\x74\xca\x69\x2a\x5a\xb0\xd2\x37\xe2\xa0\x76\x55\xa9\x61\xf3\xc4\x5a\xfa\xf7\x8d\x9a\xa9\x39\x44\x04\x8b\x01\xcd\xb9\xd6\x47\x6e\xc5\x0c\x47\x56\xf5\x0c\xc7\xad\x1c\xe2\x5b\x41\xe6\xb9\xf3\x29\x40\xef\x7f\x69\xaf\xd9\xdb\xb0\x2a\xb2\x49\xa2\x88\x4c\xd4\x7e\x6b\xda\x58\x29\xf4\x7f\xad\x92\x0b\x07\xee\xff\x91\x86\x72\xa5\x27\xe4\xd8\xb7\x2e\x89\xbf\x73\x7e\xa4\xe8\x31\xd9\x08\x6b\xa0\xb6\xf7\xd7\x96\x5f\xd3\xca\x01\x71\x53\x41\x18\xb6\x81\xb1\x34\xae\x9a\x56\x23\x72\xb3\x90\x1a\x35\xe6\x10\x7c\x3c\xb8\x62\xcb\x83\x51\x06\x7f\xaa\x1f\xb1\xe4\x3b\x38\x13\x07\x5d\x90\xbc\x27\x9f\x82\xdd\x00\x71\xd3\x03\xf8\xee\xe0\xae\x6c\xba\x8c\x7a\x3d\x2d\x4b\x8e\x21\xe8\xf3\xec\xea\x6e\x56\xf1\x91\x1f\x41\xa5\x1b\x43\x71\x8f\x70\xdc\x9e\x1b\xcd\x9f\xcc\x0d\x61\x87\xe9\xd2\xb7\x22\x72\x2e\xab\x75\x8f\x56\x06\x42\xc0\x27\x16\xf9\xcf\xec\x91\xe8\x39\x21\x73\xb9\x91\xb2\x30\x8b\xef\x01\xb0\x8f\x5b\x6a\xf5\x2b\xd5\xb2\x11\x29\xa5\x78\x64\x5c\x08\x21\x6e\x24\xb6\xda\xb2\xa4\xdc\xb0\xeb\x87\xfa\x28\x03\x29\x54\x31\xe8\xac\xe2\x9b\xa8\x39\x7f\x27\xb6\x1a\x83\x58\x95\xf1\xb9\x1f\xf6\x9f\x9b\x08\x19\x0a\x86\xe5\x08\x71\x90\x58\x42\xc2\x2d\x00\x4d\x95\x63\x62\x3a\xc6\x8b\x48\xea\xc7\xbf\x32\x50\xf1\x21\xf6\x86\xbb\xb3\x03\xee\x42\xd7\xed\xbf\x99\x92\x19\xe6\xdd\xe0\x20\xcf\x75\x9a\x86\x24\xe2\x76\x63\x08\x20\x48\x37\x7a\x47\xe9\x0d\x18\xc3\xd7\x2e\xdb\x0e\xba\xe4\x45\xf8\xe2\x4a\x22\x23\x40\x0a\x34\x7c\x31\x85\x75\xd9\x2b\x21\xd3\xb1\xcb\x3e\x8a\x99\x2d\x03\x30\x51\xf4\x38\x87\x9e\xf2\x91\xa8\xca\xe5\x82\x75\x91\x61\x39\x03\x2a\x7d\xa0\xfc\x76\x0e\x54\x40\xbc\x6e\x05\x82\x3f\x63\xd2\x69\xbe\x80\x6c\x56\xd6\x6a\x07\xe4\x29\x76\x23\x3f\x53\xb5\xdb\x27\x2d\xe6\xe0\xa6\xb3\x59\xdc\x37\xeb\xfd\xa9\x88\x86\x5e\x31\x4d\x1a\xc5\x0a\x56\x02\x40\x05\xc4\xa2\xa3\x64\xc7\x1c\xc4\xec\x57\xb6\x62\x37\x72\xe4\x2d\x76\x63\x78\x06\x23\x0e\x2c\x31\x78\x45\x9b\x8c\x79\x53\xe1\x99\x80\x96\x60\xe9\xb4\x2a\x00\x9d\xca\xd6\x78\x10\x7b\xf7\x7d\x49\x0d\x85\xce\x7d\x98\x05\xb4\x1f\x09\x09\xf9\xa2\x0a\x99\x1c\x3e\xf9\xe5\x04\x16\xa0\xf4\x0b\xbe\x46\x84\xd1\x62\x61\x6d\xf7\x31\x56\x16\x34\x94\x2b\xef\x5e\x78\x6e\x37\x0a\x0f\x93\x5c\x55\x7f\x73\x5c\x08\x81\x23\xfc\x35\x10\x15\xcb\xf8\x94\x22\x5f\x94\xaa\x5d\x3d\x9d\x73\x36\x88\x0e\x2e\x24\x03\x25\x3e\xd8\xe7\x9b\x19\xbb\x70\x0d\xac\xc8\x64\x83\xa0\xab\xb8\xb6\x44\x5e\xb1\x65\xb8\xc2\x32\x50\xb1\xe1\xed\xbb\x4e\x15\x56\x23\x73\x05\x41\xad\x58\x9b\xdf\xaa\xe8\x99\x68\xc0\x3e\x92\xf6\xa5\xa9\x0f\x5d\x45\xfd\x32\xa0\x13\x34\x60\x26\x74\xed\x1a\x1d\xb7\x84\xed\xcc\xe1\x82\x8e\xb6\x5e\xb3\xd0\xc8\x99\x29\x25\x95\x7d\x7f\xa6\x35\xe1\xb0\x4f\x35\x55\x57\xac\x0c\xb6\xe5\x84\x9c\xdb\x85\xf2\x7e\xea\x0c\x94\x28\xaf\x13\xfb\x36\xd1\xf6\xd5\x9d\x9b\x09\xc8\x7c\x34\x99\x3c\x42\x85\x59\x2a\x34\x17\x51\xab\xb2\x9f\xe7\xba\x40\xf2\x38\xa5\xb3\xb9\xa2\x7b\xb2\xe9\x15\x6d\x34\xba\xfa\xad\x51\x08\xc1\x4d\x49\x28\xae\x88\xcb\x79\xa3\x83\x61\x78\xba\x91\xd9\xd5\x96\x37\x7c\x9e\x2f\x74\x9e\x21\xb1\x0d\x47\xee\x70\x79\xc6\x50\xf9\xfb\xc2\xe4\x8e\x87\x9c\x3c\xcc\x9b\x7b\x91\x31\x6a\x52\x0f\xa8\x69\x5c\x1d\xb7\x15\xf0\x84\x6a\xb1\x9e\x6d\xf0\x49\x15\x8f\x06\xd5\xe8\x3c\x86\x02\x8e\x3d\x2a\x79\x5c\x1d\xfb\x56\x02\xb9\x3a\xce\x66\xd8\x83\xbd\xaf\x84\xb8\xeb\x31\xae\x6a\x0d\xe6\xf4\xa0\xee\xbb\xab\x63\x77\xb5\x91\xab\x63\x27\xb5\x92\xab\x23\xaf\x49\x87\x63\x78\x2d\xe5\xea\xc8\xe3\x1d\xc4\x71\x5b\xc2\x09\x54\x04\xee\xfb\xa4\xc7\xae\x47\x67\x6e\x80\xc2\x0f\x8e\xdd\x26\xba\x18\x32\xca\x24\xa7\xce\xa1\x58\xa2\x53\x2d\xab\xd6\x20\x09\xf9\x27\x89\x75\x46\x78\x49\x1f\x53\xcd\xa3\x28\xae\x4e\x17\x69\xa2\x60\x49\xa0\x7a\x96\x73\xae\xec\x17\x6a\x1e\x07\x1b\x8e\xdb\xe2\xd9\x1d\x39\xdb\x70\xec\x95\xcb\x0d\xc7\xbe\x3a\xde\x70\xdc\xb2\xac\x1e\xe4\x84\xc3\x71\xab\x19\x31\xfb\x1a\x40\xcf\xdf\x44\x08\xc7\x7e\xb4\x12\xc2\xb1\x17\x0d\x85\x3c\x29\xf9\xdb\x0a\xe1\xd8\xa7\xce\x1f\xfd\x91\xf5\x72\x1a\xde\x68\xc8\x8f\x5b\xca\x81\xf0\x8f\x75\xd7\xc3\x32\xf4\xd9\xee\x39\xe6\xa0\xa1\x8f\xd1\xe8\x37\xf4\x99\x9c\xd8\x99\x7b\xb8\x3f\x37\x5f\x68\xfb\xb6\x52\x8a\x3c\x90\xd2\xf1\xf9\x59\xc6\xb8\x47\xf4\xd4\xf7\x44\x3e\xe2\x5f\x3c\xc4\x3e\x3e\x65\xf4\x16\xf8\x0c\xc3\x16\x71\xfd\xd6\xf3\x6e\x45\x1d\xf2\x63\x16\x33\x73\xff\x7d\xad\x6b\x2f\xfe\xc2\x5a\x48\x71\x17\xda\x88\x03\x8d\x74\x6a\x68\x67\x4b\x39\x1b\x04\xd1\xd1\x7d\xbd\xf6\x70\xb0\x01\xb2\xff\x7e\xd9\x3d\xf5\xa6\xc2\xea\x0f\xe8\x97\xb9\x3a\x7a\xdc\xf2\xe8\x8d\x5f\x44\x97\x78\x82\x41\xb4\x28\x9e\xd7\xc8\xf2\x19\xa6\xca\x52\x21\xa4\xc1\x4a\x98\x11\x26\x59\xe9\x91\x4b\x37\x8b\x20\xf6\x45\x49\x5a\x5e\x62\x4d\x7d\xc0\xca\x7e\x94\x55\x59\xdf\xfb\xe2\x38\x58\xc0\xf3\x3c\xec\x44\x6e\xa9\x9e\x8d\x36\xfc\x07\xa6\xb4\xe5\x82\x8c\x05\x02\x3d\xe6\x72\xcf\xf7\x9c\xa4\x8b\x05\xab\x29\xfc\xe7\x0b\xbf\x40\x56\x68\x3b\x84\x09\x08\x12\x32\x55\x5b\xc5\x77\xd4\x03\xd7\x3c\xb8\x7e\x9a\xa1\xda\xb9\x1b\xb7\x52\x1c\x11\xf6\xfc\xd6\x96\xf3\xbc\xe7\xf6\x02\x23\x5e\xba\xec\xab\xd0\xef\x22\x84\x61\xad\x26\x71\x8d\xeb\xbf\xe7\x4b\x77\x9b\xe9\xe1\x38\xee\x43\x14\x26\x35\xfa\x32\x0a\x5a\x7a\x3f\x6a\x92\x8d\xb0\x87\xe8\xcb\xc7\xc7\x43\xf4\xc5\x8d\x87\xe8\xcb\x27\x8f\x5b\x8b\xbe\x44\x2a\x9d\xbf\x61\x37\x84\x4f\xe2\xde\xb1\x3e\x86\x32\x0d\x4e\xe9\x09\xc6\x62\x7d\xe0\xc3\x47\x3d\xa4\xea\xa7\xb5\x3c\x9a\x4c\x1e\x61\x62\xcb\x24\x04\x6f\x5b\x33\x1b\x7f\x43\x98\x28\x64\x69\x9f\x73\x09\xcf\x57\xda\x80\xb9\xd3\x79\xf4\x62\x5a\x6a\x3f\x57\x9c\x1a\x03\xcf\xce\xab\x37\x66\xbc\xb6\x3c\x28\xf3\x8b\xdb\x54\xce\x33\x5e\x2f\x9d\x72\xef\x29\x0f\x61\x08\xdc\x50\xa6\x9c\x96\xdf\xc1\x4d\x57\xbc\xe6\xae\xd6\xdc\xca\x53\xa6\x4d\xae\x12\x42\x42\x0e\xf1\xe1\x93\xa2\x69\x47\x6e\xa2\x49\xcd\x6a\xa9\x96\xa3\x30\x99\xfd\xb2\x37\xbb\xfb\xc5\x11\x18\x17\x45\xab\x14\x13\xa6\x5a\x0e\x6b\xc9\xb3\x69\xdc\x13\x2b\xc3\xef\xd4\x1e\x1b\x19\x81\xb9\xf2\x54\x5b\x74\xa3\x2f\xf1\x4e\xfc\x34\x18\xce\x08\xab\x0d\xf7\xbd\x6b\xae\x36\xea\x3c\xa0\xf6\x53\x26\xae\xc9\x35\x55\x3a\x97\x84\x21\xb7\x65\x57\x94\xfc\x9a\xeb\x5b\x04\xd2\xb8\x70\x4a\x0b\xc6\xe2\x64\x6b\x9a\xd6\xb8\xeb\xce\x8b\x08\xf6\xae\x91\x56\x15\x0d\xa2\x61\xc5\x3c\x7b\x3a\xd4\xe5\x1d\x8f\x86\x1a\xc3\x94\x78\x46\xfe\xcf\xe1\xcf\x7f\xf8\x6d\x7c\xf4\xb7\xc3\xc3\x9f\x9e\x8c\xff\xfc\xaf\x3f\x1c\xfe\x3c\x81\xff\xf8\xfc\xe8\x6f\x47\xbf\xf9\x7f\xfc\xe1\xe8\xe8\xf0\xf0\xa7\xef\x5e\x7d\x7b\x79\x7e\xfa\x2f\x7e\xf4\xdb\x4f\xa2\xad\xaf\xf0\x5f\xbf\x1d\xfe\xc4\x4e\xff\xf5\x89\x0f\x39\x3a\xfa\xdb\xff\xc8\xf8\x12\x54\x2c\xbf\xcf\x76\x27\xe0\x18\xdf\x8a\x5e\xd3\x7f\xf6\xed\xe2\x05\x70\x61\xc6\x52\x8d\x71\x92\x67\x50\x4c\x99\x6d\x2a\xcf\x9a\xb7\x27\x63\x3a\xad\x2a\xdc\xa0\xc1\xfc\xde\x73\x21\x72\xfb\x16\xf6\x43\x5a\xc6\x47\xc6\x43\x5a\xc6\x96\xe3\x3f\x38\x2d\xa3\x91\x65\x04\x41\xbb\x4f\xb8\xd5\x0e\x94\x59\x07\x64\x68\x05\x01\x01\x31\xb7\xa7\x06\xfa\xf3\xd0\xca\x55\xfc\x92\xc3\x46\xf1\x6b\xcb\x1e\xa1\x72\xa6\x7b\xa7\x81\x64\x14\x0b\xca\xc5\x51\x07\x90\xd6\xc8\x12\xdc\x0a\xad\x66\x1e\xc0\x19\x8a\x81\x2e\x5f\x5e\x90\xa2\xe2\x00\x4a\xa2\x42\xc3\xf2\x81\x93\x7b\x34\xe5\x39\x13\x4c\x21\x44\x30\x59\x7d\xd5\x56\x33\x28\x3e\x81\x0b\x42\x94\x89\xcd\xb6\xbb\x71\xde\xe3\x88\x37\x68\x0e\xf9\x16\x74\x58\xe1\x8f\x75\xc0\x00\xc0\xea\xda\xe3\xba\xca\x60\xda\x34\x4a\x5e\xb3\x1c\x75\x50\xce\x0e\x83\x57\xe4\x5a\x03\xa4\x4a\xbc\xad\xb8\x31\xa3\xb0\x44\x50\x05\xde\xc3\x4a\x1c\xba\xf1\xab\x73\x91\xf7\xa1\x4a\x5f\xba\x0f\x4b\xc9\x74\xe4\x5a\x68\x85\xe1\x55\x3e\x22\x34\x59\xd0\x6b\x46\xa6\x8c\x09\x5c\x10\xb4\x38\xa0\x5e\xae\x7f\x8a\xa3\xca\xad\x41\x2d\xab\xfc\x70\x1a\x08\x17\x90\xad\x01\xf8\xf0\xb9\x18\xdb\xf9\x28\xe7\x76\x75\xd5\x12\xe2\xc0\x92\xc0\x41\x47\xbe\x8a\x37\xc1\x1d\x40\xc3\x6b\x4b\x4b\x89\x15\xd9\x03\xe9\x70\x90\xf0\x8e\x7d\x7d\x9f\x6e\xb6\xf9\x10\x4c\x2e\x0c\x35\xad\x9e\xfc\xdd\xd2\xfb\x86\xcd\x14\xd3\x8b\xe3\xa1\x46\xbb\x7d\x1d\x6d\x68\xdd\x64\x5b\x53\x2b\x9d\x10\x13\x21\x20\xc2\xa0\xf3\x3e\x2c\x9a\x7f\xed\x4e\x90\x3a\x1c\xfc\xe1\x51\x44\xb8\xdb\x47\x28\x02\x1b\x6a\x65\x16\x9e\x95\x0d\xb3\x5f\xb1\x25\xf8\x0c\xb3\x1e\xd5\x13\x7b\x52\xe1\xb1\xd8\x6c\x62\xf0\xaa\x5e\xf6\xd6\xc9\x5f\x38\x08\x11\xdb\x2d\xae\x3d\x1c\x80\x29\x0f\xb7\xbe\x93\x09\xe8\x8a\x3c\x3f\x7d\x35\x90\x04\xd7\x2f\xc5\xf5\x93\x8f\xc4\xff\xa1\x9d\xf5\xbb\x93\x8b\xcf\xbe\x71\x13\x1f\xc5\x1e\xf0\xda\x65\x56\xe4\x21\x80\x3b\x7c\xfa\xd5\x53\x89\xa2\xd1\x09\xa4\xfe\x71\x3a\x34\xcb\x86\x17\xb4\xaa\x96\x43\x4b\x30\xf1\x81\xae\xb8\x54\x31\xd3\x2a\x70\x0a\x73\xb5\x89\x14\x41\x2a\x46\x67\x63\xd0\x18\xa4\x41\xc0\xf9\xa3\xc1\x7c\x70\x0e\x89\xa1\x91\x88\x58\x67\x0a\xdc\x83\x91\xe5\x8b\x82\x91\xa5\x6c\x1d\x8a\x6a\x81\xf9\x2f\x85\x2c\x07\x2b\x23\x54\x40\x4b\x48\x7b\xdf\xa3\xea\x67\x57\x17\x41\x70\x96\xb2\x05\xa5\x24\x3a\x56\x1b\x0f\xc6\xd0\xbd\x58\x7b\x2f\xf0\xa8\xd7\xf4\x8a\x11\x73\x23\xfb\xc7\x1e\x88\x0d\xf0\x95\x9a\x91\x42\x72\x51\xf0\xc1\xeb\x80\x09\xaa\xbd\xcd\x57\x2e\x5d\x64\xe4\x0a\x71\x1b\xa9\x35\x9f\x56\x2c\xd2\xdc\x56\x14\x27\xcb\x25\x19\x75\x04\xbb\xfe\xb0\x37\x5d\x51\xae\x52\x4c\x37\x52\x40\x5c\x15\xee\x69\x08\x44\x4d\x08\xf9\xe7\xca\x1a\x0e\x5e\x8e\xaa\x22\x82\x61\x00\xb7\x58\xb0\xe2\xca\x75\x26\xe6\x9a\x14\x52\x20\x74\xdb\xc8\xb9\xb7\xc7\x40\x24\x28\x27\x76\x59\x96\x19\x92\x7a\x0b\x29\x5c\x5f\xeb\x2c\xe2\x36\x56\x32\xc1\xab\xab\x64\xa5\x49\xb1\x90\x52\x3b\x0d\xaf\xef\x32\x8c\x77\x81\x0f\xbd\x8f\x51\xd7\xfc\x9f\xf0\x4e\x6d\x65\x62\x79\xc6\xeb\x06\x4b\x64\x60\xcf\x1e\x69\x52\xca\xa2\x0d\xff\xb6\x6b\x5f\x31\xaa\x04\x59\xc8\x1b\x62\x86\x62\x3e\xd9\xa3\xbc\xf2\x72\xae\xc6\x5c\x0f\xc6\x01\xde\xc3\xb6\x19\x57\x6c\x79\x99\xda\x2d\x3b\x7e\x4e\x87\xb7\xb4\x27\x29\xa8\x9b\x44\xf0\x3e\xd6\x40\xfc\x18\x50\xb4\xd6\xaf\x54\x10\xa0\x56\xa6\x42\x88\xd7\x95\x8c\xad\xd8\x18\x83\x4f\x3e\x81\xfc\x7d\x6b\xf1\x75\x72\x51\x13\xbd\x90\x6d\x05\x46\xee\x46\x6d\x75\x42\xc8\x8f\x0b\x26\xdc\xb5\xec\xae\xbe\x1c\x25\x0a\xef\xbb\x3c\xd7\xaf\x3f\x2b\x77\x75\x27\x78\xc3\x75\x93\xa7\xf2\xde\x5f\x54\x7d\x4b\x48\xb1\x48\xe6\x8e\xc8\x94\x15\xd4\xae\xd0\xea\xcd\x27\xf1\x42\xca\x03\x4a\x82\xcd\x25\x6b\x5e\x8e\xfd\x55\xbb\x57\x68\x58\x9b\xb8\x63\xcf\xcf\xd9\x9a\x02\x79\x67\xe7\xec\x13\x8d\x9a\x7e\xeb\x8b\xba\xad\x0c\x6f\x2a\x6c\xd9\x05\x88\x94\x59\xb2\x9a\x7a\x96\x92\x43\xba\x04\x4a\xce\xdf\x9c\xfd\x70\x7c\x79\x4a\xbe\x3b\xfd\x27\x7e\x3c\x8a\xf3\xc5\xa9\xb7\x7c\x9c\x5a\x97\x81\x92\x2b\xb6\xcc\xb6\xba\x9d\xf9\x85\x2b\x05\x67\xf6\xe4\xf4\xcd\xe5\xd9\x8b\xb3\x13\xfb\x56\xf8\xf1\x68\x35\x05\x1e\x0d\xa9\x0c\x44\xac\x4b\xf1\x80\x9f\xe8\xcd\x33\x90\x2b\xd8\xc1\x64\x89\x4d\x84\x6a\x56\x72\xab\x68\x0c\x37\x97\xec\x78\xab\xfb\xde\xda\xee\x60\x92\x8a\x19\x8d\xa2\xf4\x5c\x96\x8f\xf4\x9a\x9d\x84\xf6\x84\xe7\xc6\x1c\x72\x14\xac\x25\x2f\x0f\xa9\xb1\x56\xa4\xe2\xec\x1a\xdd\x8a\x41\x96\x6e\x72\x20\xe3\xf2\x05\x23\x2b\x4f\xd6\xfe\x7f\xbb\x94\xb8\x1a\xfd\xb6\x7d\x57\xc9\x46\xd3\xb1\xa7\xe5\xe7\x58\x91\x00\xe9\x5c\x2d\x57\xef\xae\xb5\x1b\xe7\x86\x6a\x6f\xe3\x3b\x2f\x28\x1c\x96\xa1\x34\x64\x94\xff\xee\xee\xdf\x6f\x91\x0f\xdc\xf5\xa0\x4c\x3d\x28\x53\x7b\xae\x4c\x39\x6b\x6c\x1f\x0f\x93\xbd\x5c\xa1\x48\x59\xce\x2c\x99\x80\x0f\xd8\x8b\x26\xf8\x58\x99\x73\x81\x40\x68\x26\xcb\x79\xc2\x6e\x39\x01\xde\x9f\x91\x83\x37\x17\xc7\x5f\x3e\xf9\xfa\x8b\x83\x11\xfc\xe7\x1f\x9f\xfc\xf9\x4f\xf6\x3f\x4f\x4f\x9e\x5f\x1c\x9f\x7f\xf1\x55\xf4\x8f\x2f\xbf\xf9\xe3\x41\x0e\x18\x3a\xf7\xb8\xaf\xbe\x78\xea\x1a\x0e\x1c\x9c\x3e\xff\xe2\xab\xaf\x9e\xfe\x39\x5b\x83\xbe\x2c\xec\x53\xd3\x77\xa7\xef\x1a\xae\x80\xb1\x2f\x58\x21\x45\xb9\x97\x08\x94\x9b\xe8\xf4\x7e\xf6\x9a\xbe\xe3\x75\x5b\x93\x8a\xcf\x18\x84\x9c\xa0\x28\xc2\x18\x17\x76\xcb\x23\x06\x22\x39\x94\x85\x45\x43\x08\x48\x36\x98\x64\xc7\x5d\xc7\x3a\x72\xcd\xd4\x94\x1a\x5e\x77\x58\x8e\x1b\x43\x5c\x7a\xb8\x03\xcd\x8e\x2e\x5e\x1d\xfc\x90\x5d\x1b\xf8\x2c\x6f\x7a\x36\x23\x12\xb7\x63\x44\xae\xda\x29\x1b\xd3\x86\x63\xd0\x1d\xa5\x80\x66\xc6\x05\xc5\xbf\xf9\xd3\x1f\x9f\x3c\x39\xfc\xe2\x8f\x64\x21\x5b\xa5\x8f\x26\x2b\x3f\xcf\x40\x8b\x8b\x4a\x80\x4a\xe7\xc4\x83\x5e\x48\x65\xa0\xde\x9d\x0a\xf2\xe5\x9f\x9e\x3c\x21\x87\x4f\x81\x80\x23\x17\x1b\xf2\xec\x05\xb0\x0c\x74\x9a\x45\xc7\xc5\x9d\xe6\x9a\x7c\xfd\xcd\x9f\xbe\xf8\xa3\x9d\xf3\xcf\x4f\x49\x49\x97\x99\xd4\xf9\xcb\xf7\x79\x42\xdd\x91\xb1\x16\x06\x83\x8b\x12\x34\xc5\x15\xff\xbc\xc3\x94\xc8\x71\x8d\x87\x23\xf9\xb9\x5b\xe6\xcf\x71\x9d\x5f\x6d\x38\xce\x08\xb0\x21\xe4\xfa\x8e\x64\x20\x44\x3b\x91\xd1\xdb\x5b\xf4\xb9\x6b\xa3\x28\x47\xe8\x56\x26\x66\x52\x15\x18\x1d\xeb\xf3\x5e\x0e\xf3\xf9\x97\x1e\xc0\xc5\x2f\xfd\x50\x99\x60\xd7\x90\x87\x66\xb7\x63\xad\xf9\x33\x14\xb0\xe3\x4a\xe6\xd8\x14\x29\xe6\x7e\x79\xfd\x61\xdb\x63\xbc\xea\xc1\x85\x35\xb7\x06\xec\xef\x64\xf8\x23\x1d\xa4\x68\x49\x4e\x2e\xde\x74\xe0\xf4\xb4\x2c\x15\xd3\xda\x9b\x62\x01\x97\x7f\xaf\x54\x80\x07\x70\xfa\xde\xd8\xab\x94\xcc\x7d\x4d\xc6\xdc\x4f\x70\x7a\xe2\xb8\xe6\xb8\x43\x24\xd8\x57\xc6\x8e\x48\x44\xc5\x02\xd2\xd2\x68\x6b\x16\x52\x81\x55\xdd\x50\xad\x23\xc7\xcf\x0a\x3c\x47\x06\x2a\xde\x1b\x2d\x9d\xa0\x72\x8a\x17\x55\x97\x29\xa7\x98\x95\x36\x05\xe4\x4c\x5e\x5b\xfb\x0a\x13\xbf\xb2\x20\x5e\xd5\xcc\x50\xc0\xb7\xe1\x02\x3c\x9c\x37\x34\x9b\x7b\x57\xb3\xd8\x0e\x04\x6d\xbb\xdc\xa0\x62\xff\x02\xb9\x72\xad\xb8\x66\x0a\x4e\xfe\xdb\xfe\x1e\xfd\x12\xc0\x2f\x32\xad\xfc\xe6\xd4\x4d\x87\x67\x85\xce\x94\x60\x21\x80\x80\x1b\x9e\x1e\x65\xc7\x69\x94\x1e\xa4\x5b\x6c\x33\xe6\x01\xe3\x69\xcd\xfc\xc6\x02\x0a\x91\xf6\x7d\xc8\xc2\xee\xc4\x48\x1f\x59\x94\x71\x87\x30\xe9\xd9\xdc\x15\x21\x57\xd5\x0a\xce\x94\xac\x29\x17\xe3\x46\xb1\x19\x7f\xc7\xca\x09\x79\x2d\x03\x37\x5a\x5a\x72\xb8\x9b\x14\x23\xae\x03\xa9\x14\xa1\x66\x9c\xbd\x2b\x58\x63\xa0\x82\xfe\x9a\x29\x68\x6a\xc3\xff\xcd\xb0\x2e\xd1\xf5\xa9\x42\xa7\x20\x13\x86\x2b\x87\xbe\x90\x65\x9f\x2e\x9c\x6a\xe8\xdc\x80\x3e\x7b\xc1\x3b\xd8\x74\xd4\x60\x1c\x33\x43\x5c\xb1\xe3\x64\xe5\x2f\x33\x90\x52\x32\xb1\x0c\xa5\x96\xbd\x38\x13\x52\x02\xd3\x97\xd2\xc9\x88\x42\xce\x05\xff\x77\xb6\xc6\x4e\x99\x8a\x2d\x6f\xab\x27\x62\x26\x2d\x4c\xb3\x42\x31\x93\x31\xa3\x1f\x1f\xf8\x1e\x50\x31\xf7\xe5\x03\x9e\xd8\xa7\x8c\xdf\x7f\x2f\x95\x0b\x64\x87\x87\x46\x2a\xe4\xfe\x37\x52\xc1\xbd\x7c\xe8\xa2\xf2\xd0\x45\xe5\xa1\x8b\xca\xe0\x27\xed\x29\xee\xdf\x43\x17\x15\x3f\xee\x03\x7e\xd7\x43\x17\x95\x4f\x18\x0f\x38\x5e\x1f\x1c\x0f\x38\x5e\xbd\xf1\x1f\x8e\xe3\xf5\xd0\x45\x25\x71\x92\x87\x2e\x2a\x1f\x1b\x0f\x70\x1d\x1f\x19\x7b\x15\x1b\xc2\xb1\xaf\x11\x22\x1c\xff\xc1\x70\x1d\xe4\xa1\x8b\xca\x43\x17\x15\x4f\xca\x43\x17\x95\x41\xe3\xfe\x74\x51\x41\xe6\xdf\xd4\x4b\xc5\xf9\x59\xbb\x46\x2a\xff\x81\x7d\x54\xb4\x65\xbf\x82\x1d\x17\x85\x6c\x85\xb9\x94\x57\x6c\x20\xca\xfc\x4a\xd4\x63\xed\xe9\x56\x0c\xbd\x2f\x0a\xb2\xfe\xe3\xbd\x0c\x89\xe4\x2b\xdc\x1d\xec\xd0\xca\xe7\xca\xa2\x6d\xc9\xad\x62\xb4\x8f\x97\xa3\xa7\xcd\x5b\x46\x56\x7b\x11\x25\x2b\xbb\x2f\xdc\xcd\x69\x2c\xd3\x4c\xc8\x31\x51\xac\xe0\x0d\xe2\x49\xcd\x08\xc5\xcf\x73\x64\x45\x58\xf9\xc0\xa1\xf6\x63\xb6\xfc\xff\xd8\xfb\xb6\xe6\xb6\x75\x6b\xe1\xf7\xfe\x0a\x7c\x6e\x67\x9c\xa4\x96\xbd\xdb\xee\x76\xfa\xe5\xcd\xb1\xd3\x1e\x4f\x73\xf1\xb1\xb3\xd3\x99\x73\xda\x4e\x21\x12\x92\x30\x26\x01\x6e\x80\xb4\xad\xdd\xe9\x7f\x3f\x83\xb5\x00\x10\x94\x78\x13\x49\x5b\xda\xa9\xf9\xe2\x44\x12\x81\x05\x60\x61\xdd\x2f\x86\x6a\xb0\x64\xe1\x59\x95\xfd\x9c\x33\x15\xf8\x06\xac\x76\xb3\x01\xe8\x14\x46\x5f\xb3\x24\xd4\xf5\x41\xb3\x7f\xe0\x9a\x39\xe7\xb4\x0d\xa7\x0d\x76\xe4\x4b\x08\x43\x58\x12\x74\x1a\x60\x82\xa5\xdb\x93\x98\x30\x4c\x73\x42\xbe\xc5\x7e\x0e\x81\xf5\x5b\x40\x96\x06\x01\x70\xf9\xb3\x98\xc4\x85\xb2\xd1\x0e\x0b\x0c\x10\x31\x32\x9a\x6b\xde\x81\x64\x74\x8a\x6b\x87\x94\xd8\xdf\x2a\x5d\x62\x14\x16\x2b\xa3\xd1\x8a\xe9\x00\x5e\x54\xc0\xee\x6c\x94\xcc\x24\xe5\xb3\xcc\x93\x25\xc5\x92\x0b\x34\xe5\xc1\xac\x4e\x82\x2d\x4b\x5d\xd9\x45\x6f\x82\xfc\x25\x00\xc7\xbc\x3e\x45\xd8\x32\x18\x11\x6a\xeb\x6d\xe1\xce\xf0\x45\xf8\x1f\x4d\x64\x12\xbb\xd0\xde\x3f\x7e\x47\x32\xa6\x22\x24\x4b\x93\x38\xae\x35\x56\xf4\xca\x25\x49\xf8\x3d\x94\x7d\x6f\x99\xde\x47\x16\x5f\x06\x04\x00\xa3\xaf\xa7\xc0\x16\x11\x97\x1d\x2e\x72\x92\x30\xaa\x73\xf2\x9b\xef\x48\xca\x45\x91\x8f\x2d\xba\x41\x0e\x3a\xc2\x71\x1a\xcb\xe2\xf4\x94\x24\xb4\x26\xc2\xbf\xbd\x49\xd1\x7a\xd2\x53\xb8\x2c\x99\xe4\x22\xdf\x34\x30\x06\x69\xb6\x53\x71\x2b\xf0\xe0\x1f\x14\x3f\x78\x09\xb4\xae\x3c\x07\x65\x4c\x3b\x54\x33\xda\xe1\x91\xa1\x89\x0d\x66\x3f\x16\x72\xbe\x1e\x56\xce\x76\x8a\x9b\x60\xa7\x0f\x1b\x21\x52\xf2\xdf\xf6\x43\x24\x58\x36\xc6\x73\x25\x75\x8e\xde\x35\xbd\xa2\x0a\xeb\xbb\x42\x41\x04\x97\x99\x33\xec\xb0\x2f\xcd\xc4\x50\x6c\xf1\xad\x9f\x97\x6b\x12\xfb\x8f\xbd\x83\x8d\x8b\x59\xae\x18\xf3\x20\x83\xe5\x0a\xe2\x80\x5c\x46\xcf\xa8\x8e\x17\x23\x15\xd6\x71\x6a\xea\x8c\x28\xb6\xe4\x3a\x57\xc3\x82\x37\x66\xc3\xc5\xbf\xb1\x3a\xed\x52\xc9\x22\x1b\x4a\xd5\xa7\xa2\xe5\x00\x84\x73\xd4\xb9\x70\xbd\x28\x62\x5a\x8f\xc9\x15\xb0\x82\x9b\xc5\x31\x98\x63\xe0\x58\xa3\x99\xa8\x62\x34\xfe\x2c\x92\xc1\x91\x2f\x53\x6d\xb4\x83\x03\xad\xc3\xa0\x23\x40\xc6\x20\x5c\x50\x77\x7d\xed\x01\x20\x27\x00\x1a\xc2\x62\xd4\xdb\xcd\xeb\x33\x68\xa7\x13\xc4\x7b\x0c\x67\x12\xa1\x64\xbd\xa0\x89\x1e\xcc\x96\xc7\x5b\x0e\xdd\xf5\xdd\xff\x01\x21\x1c\x55\x82\x6e\x2b\x25\x49\x55\x56\x46\x72\x87\x75\xe3\x5e\xb0\x4a\xdd\x70\xcb\x77\x69\x86\xa1\x41\x3c\x1e\xd5\xc0\x39\xde\x1a\xc2\x8c\x61\xbd\xaf\x3c\x0c\x61\xb1\x56\x57\x58\xc6\x62\x4a\x24\xd3\x94\xea\xd7\x83\x81\xc1\x28\x51\x0a\x45\xd9\xb5\xad\x15\x27\x72\x45\x93\x72\x87\x82\x26\x38\xfb\xba\xd6\x39\x13\x54\x0c\x0e\x7c\x9f\x0a\x67\x10\x0a\x23\xf0\xba\xd2\x4e\x4b\x7e\xcf\xc4\xe6\x7d\xb6\xc6\xb5\x77\x34\xba\x63\x23\xea\x20\xff\xa0\xdd\x19\xc7\x6b\x41\x6d\x5d\x58\xc3\x86\xee\xb9\x21\x07\x2c\xde\x98\x57\x9f\x94\xd9\xe2\x9a\xe5\xae\x70\x2f\x9a\x29\xf6\x75\x70\x63\x54\x99\xa9\x8e\x0d\x54\x84\x27\xe2\x79\x1a\xe3\xf2\x14\xbf\x8f\x98\xb3\xf2\x98\xf9\xf6\xb5\xdf\xb8\xbe\x49\x76\xdc\x61\x73\x40\xa3\x6c\x95\x2d\x9b\x54\x80\x6d\x1c\x12\xc3\xab\xd6\x5e\xe9\xdb\xb8\x0b\xf3\x35\xf8\xb6\xc7\xf1\x9b\x81\xfb\xa1\xe6\x83\x84\xcc\x29\xd0\x4e\xcd\xe3\x2a\x63\xb9\xa1\xb1\xd4\xe4\x1d\x54\xc2\xbb\x64\x60\x14\x7c\x6e\xa5\xe1\xe6\xdd\x65\x87\xc2\x60\xa0\xfe\xb6\x94\x05\x9e\xd2\xe5\x30\x43\xd1\x8c\xa4\x52\xf0\x5c\xaa\x21\x3c\x6f\xac\xae\xb0\xd0\x63\x4a\x35\x4d\x45\x37\x11\x0a\x67\xa9\x2b\xdb\x63\xf8\x5a\x4d\x41\x70\x2b\xa0\xee\x5a\x16\xe4\x81\x82\x9d\x1b\xb1\x7b\xb8\xc4\xfa\x85\x67\x6f\xc9\x7b\xa1\x0b\x15\x54\xfb\xde\x04\xc1\x30\x3a\x87\x9c\x8e\xdd\xc1\x45\x32\xbb\x8f\x7d\x65\x6c\x43\x8f\xc1\x70\xbc\x7f\xa4\x69\x96\x30\xfd\x96\x1c\xb1\xc7\xfc\xfb\xa3\x13\x72\xf4\xb8\xd0\xe6\x8f\xc8\x17\xfa\xe8\x94\x5c\xa5\x59\xc2\x23\x9e\x27\x6b\xc2\xc5\x82\x29\xe5\x23\x49\xf0\x85\x8d\x04\xae\xe1\x90\xec\x18\xc1\xa1\x73\xa9\xe8\x92\x9d\x59\xd9\xe0\x97\x6a\x3e\x54\x12\x19\xcd\x93\xe0\x12\xee\x1b\x99\x01\x08\xef\xb2\x02\x6a\x8c\x1f\x8d\x61\x4f\xb5\xa7\xc2\x2c\xca\x9c\xde\xfd\x11\xce\xc5\x9e\xc0\x99\x9a\xc7\x67\x37\xef\xcf\x2f\x3f\xbe\x3f\x4d\xe3\x5f\xae\xe4\xc3\x2c\x97\xb3\x42\xb3\xd9\xe0\xf2\x4c\xa3\x4f\xe6\x8e\xad\xa1\x97\xde\x9e\xcf\xc6\x82\x51\xf1\x09\xe4\x12\x42\x5f\xe0\x73\xa3\x80\xdc\xbc\xbb\x1c\x67\xc2\x0d\x8c\x14\x67\x2c\x8f\xce\x22\x96\xad\xce\xec\xcc\xff\xa9\xe7\x1f\x04\x4c\x6d\xed\xc9\xa0\x01\x1d\xcf\xdc\x37\x46\x39\x38\x50\x7a\x8d\x64\x92\x60\x9d\x32\xc3\xb5\x2e\x58\xb6\xf2\x3f\xf8\x59\x9f\xfc\x98\x64\xc3\x91\x29\x86\x13\xa0\xde\x13\x04\xd4\x66\x52\x0e\x0e\xd8\x9b\x0a\xf5\x0c\x0c\x55\x3e\x03\x9f\x8c\x63\x33\x01\xf1\x52\xf3\x69\x85\x88\x9f\x27\xb9\x1a\x2a\xce\xfc\x2c\xec\xc3\x37\xee\x4b\xcd\x72\x90\x62\xb9\x20\xe8\x4c\xfc\x68\xa4\xea\x43\x30\x04\x1f\x04\x2a\x8d\xb1\x43\x63\x71\x8b\x11\x9d\xf7\xa7\xc2\x04\x0f\x08\x68\xdd\x41\xbc\x3d\x2d\xf2\x15\x13\xb9\x2b\xa3\x6c\xab\x71\x84\xb2\x10\xb9\x5a\xa0\x3d\x30\x1e\x11\x14\x2c\xef\x99\x52\x3c\x66\x9a\x8c\x16\x86\x42\x3f\x10\x4f\x7e\xd6\xa8\x35\x2a\x1e\x77\x8a\xf0\xd7\xb1\x19\x21\x53\x46\x7f\x4c\x9f\x05\x72\x18\xf9\x1f\x07\x91\xf9\xf1\x14\x39\x1f\x87\x98\xed\x31\x51\x7c\xd4\xf8\x0c\x8f\xe9\x73\x16\x0e\xc6\xc9\x51\x11\x3b\xe1\x93\xc9\xc4\x4e\x1a\xa7\x7c\x44\x41\xfb\x03\x20\xe9\xd3\x08\x9e\xb0\x0f\x3b\x0f\xa2\x23\x9a\xb0\xab\xcf\xfb\x72\x47\xd8\xe9\xab\x2e\x89\x5b\xfb\x61\xc6\x94\xeb\x94\xe2\xbc\x63\x79\x4e\xa3\x95\x75\x10\xb8\xb8\x04\x29\xc2\x6a\x8f\x42\xc6\x43\x83\x67\x43\x9f\x84\x83\xa1\xdd\x2f\xe1\xc0\xff\xb6\x7c\x13\x4b\x9a\xb3\x87\x81\xfa\xfb\xac\x14\x1b\x87\xbe\x0f\x86\xf1\x17\xdf\x46\xad\x63\x61\xbc\xff\xc2\x17\x51\xd9\x1a\xfb\xe9\x3d\x16\xa7\x0d\xbe\x8a\x29\xd8\x00\x8c\xb8\x17\x6f\x2e\x3e\x9e\x0e\x3f\x2e\x86\x09\x23\xf6\xd6\x4d\x82\x7f\x76\x2c\x87\x45\x70\x90\xb6\x92\xb7\x13\x97\x1d\x81\x3b\xbf\xbe\x22\x7f\xc6\x9f\xef\x6d\xf7\x32\x25\x73\x34\x83\x5e\x42\xa1\xd4\x49\xf6\x60\x73\x50\xb7\x19\xa1\x26\xeb\x36\xe1\xda\xff\x96\xd8\x1f\xbb\x7e\x2e\x91\x14\x0b\xbe\x2c\x14\x8b\x89\x75\x5c\xed\x6d\x97\x0e\xce\x42\xb4\x65\xb3\x21\xaf\xcc\x77\x67\xd0\x0f\xfe\xf5\x69\x69\x2d\xda\x30\x25\x0d\xb7\xed\x3e\xa1\x09\xea\x9b\x34\xdc\x04\x11\x31\xae\x16\x64\x69\xac\x71\xc8\x0f\xe2\xb8\xcf\x8b\x1c\x31\xab\xd0\x1c\x92\x65\x82\x74\x65\xdb\x8d\x9b\xeb\xb2\xdc\x23\x5a\x85\x4e\xc8\x07\xb9\xe4\xc2\xb1\x17\x69\xd3\xd5\x16\x74\xb8\x79\xe6\xc5\x3e\xb2\xf5\xbc\xd8\x47\x5e\xec\x23\x2f\xf6\x91\xe6\x47\xeb\xe4\x3d\xe6\x39\x4d\x42\xb3\xcb\xe1\xc8\x9f\x12\xba\xb4\x39\x54\x67\x31\xd7\xe6\x2f\xb9\xbd\xfd\x00\x51\xd1\x85\x70\xa6\x73\xc0\x4d\x2b\x7d\x9d\xb8\x1d\x42\x5e\xba\x3f\x36\x86\x62\xce\xc7\x11\xa5\x29\x27\x63\x64\x25\x28\x84\x8b\xd8\xb5\x13\x0a\x4a\x92\xd8\x5f\x00\x3f\xa3\xbe\xdc\x2f\x66\xf5\xcf\x99\xa1\x56\xd1\xdd\x75\x10\x98\x2c\x95\xf9\x4c\x04\x1f\x4d\xa2\x7c\x4c\x34\xe6\x94\x6a\xc8\x06\x48\x63\x50\xe1\x7a\x2a\xe7\x75\x30\x9e\x93\xc6\x9d\x10\x72\x6b\x0f\x12\xbe\xa3\x5a\xcb\x88\x97\xa9\x04\xb6\x6b\xa9\x13\xd1\xb1\x9b\xc2\xde\x36\x19\xf5\xe0\x69\x36\x04\xd5\xef\x1a\xcd\xc4\x21\xb6\xfd\x05\xd5\xa1\x26\xc2\x85\xdb\xb7\xbd\x6d\x02\x5e\xb5\x31\x1d\xa9\xa6\x22\x12\x25\x24\x9b\xfb\xe8\x09\xc2\x66\x28\xb8\xab\x35\x6e\x71\x6f\xb0\xc5\x09\x1f\x88\x02\xe5\xba\x06\x6b\xb9\xf6\x24\x49\x16\x2a\xda\x8f\xea\x38\xbc\x35\xc3\x24\x06\x5e\xd4\x37\xaa\xb9\x4c\xf8\x99\x0d\x2a\x07\x5a\x9d\xc9\xac\x48\x5c\x3b\x9e\x51\xa5\xbe\x47\x46\xa3\x22\x6c\xcf\x6f\xb3\x1d\xab\x79\x04\x35\x7c\xf7\x7d\x21\xc3\x72\xc2\xbb\xd7\x8d\x0e\x73\xf4\x35\x99\xaf\xdd\x70\x13\x58\x3c\xf7\x5f\x36\x7a\xaa\x32\xd1\xc3\xad\xcb\x95\xf2\xd2\x15\x0b\xce\x77\x7f\xf8\xfe\xfb\x11\xc2\x10\x57\x2c\xca\x25\x24\x03\xda\x92\xfd\x3e\x62\x96\x2a\x06\xba\x3f\xd6\x74\x76\xf6\x65\x4c\x06\xcb\x47\xc5\x75\xec\xaf\xae\xf4\x5e\xea\x48\x4f\x51\x4a\x61\x7c\x9d\xe8\xa0\x6e\xc5\x81\x90\x9a\x1f\x76\x2f\xff\x31\x0d\x69\x31\xd3\x84\x30\x78\xc3\x08\x64\x48\x03\x95\xc3\x9e\x33\x34\x49\xe6\x34\xba\x33\xba\x8b\x68\x29\x14\xc2\x35\x29\xc4\xa8\x42\xe3\x87\x55\x05\x64\x62\x84\x1d\x58\xf1\x63\x54\x44\xf1\x64\x69\x1e\xd0\x34\xe9\x6a\xcf\x4d\x93\xf6\xda\x2a\x69\x9f\x0d\x92\xf6\xd7\x16\x69\x8f\xcd\x90\xf6\xdd\x02\x69\x2f\x8d\x8f\xf6\x9e\x81\xf0\xfc\xad\x8d\x26\xa9\xd4\x3a\x45\x95\xd6\xb1\xcd\x8b\x46\x56\x78\x9d\xa6\xba\xeb\xe8\xf6\x44\xcf\xd1\x94\x68\x22\xa3\xfc\xf8\x06\x44\xd3\x16\x73\xdb\x77\xb3\xa1\x03\xd2\x15\xf1\x39\xcc\xc6\x42\x7b\x69\x27\xb4\xef\x26\x42\x7b\x6c\x1d\x34\x5d\x0d\xbd\xa9\xda\x04\x8d\x2f\xe1\x39\x2d\xe1\xd8\x53\x23\xa0\x27\x6c\xff\xf3\x2c\x4d\x7f\x9e\xba\xd5\xcf\x44\x6c\x6a\x7c\xdd\xd1\x69\xb1\x6d\x0f\xf5\x46\x0f\xa6\xd6\xe8\x61\x59\x18\xf0\x79\x12\xfa\x78\x28\xf5\x45\xc9\x04\x4d\x3f\x46\xb7\xfa\xd0\x13\xf5\xfa\x98\x2a\xcc\xee\x10\x3c\x8f\x25\x24\xb5\x1e\x5c\xd7\xc1\x1c\x29\x37\xd4\x4c\x82\x50\x9c\x8c\x46\x80\xfc\xc5\xc4\x49\xae\xcf\xe2\xe6\x22\xa3\xdd\x91\x08\x89\x1c\xa4\xa2\x4d\xe2\x91\x44\x00\x3e\xdf\x6e\x24\x9d\xf8\x8f\x9f\x3f\xd7\xc4\x4f\xdd\x91\x6d\xe2\xb6\xee\xc0\xf2\x4d\x5e\x12\x2f\xfa\x3c\x87\x98\x78\xf1\x5c\x45\xa2\xbe\xbd\xd8\xf7\xf8\x25\xf6\x3d\x7c\x0e\x30\xf6\xdd\x21\xad\x0e\xb9\x31\xb2\x5d\x30\x86\xc8\xb9\x51\xab\x5c\xbd\xd4\x92\x06\x9f\x5f\x5f\x0d\x9e\x3d\x52\x0c\x3a\xfb\xd0\x44\x9f\xd6\x59\x49\x5c\x84\xa7\xb5\xc9\x38\xeb\x08\xcd\x73\x96\x66\x03\x89\x37\x79\x09\x7d\xaf\x7b\x5e\x42\xdf\x5f\x42\xdf\x5f\x42\xdf\x9b\x9f\x43\x0e\xe0\x5c\x15\x29\x15\x33\xc3\x4f\x21\x6e\xbe\x92\xb1\xb7\x21\xa6\x9f\x12\xcb\x01\x47\x11\x2d\x2c\x60\x8e\x41\x1b\x82\xff\x58\xb0\xd2\x37\xe7\x55\xb6\x03\x08\xb5\x05\x38\x0e\xe7\xb8\x50\x93\xdd\xe0\xb3\x91\xdc\x2a\xc1\x6a\xf7\xd2\x1f\x9d\x63\x8d\xe3\x8e\x0c\x26\xaf\xb8\xd2\x73\x17\x5c\x73\xbd\xa1\x6c\x57\xbc\x10\x96\x90\x03\x1d\x1d\x17\xcf\x10\x6a\x82\x06\x45\xcd\xda\x6d\x97\xb3\x39\x23\x29\x57\x4a\x2a\x1b\x0c\x1c\x2e\x1f\x73\x4b\xf9\x72\x95\x33\x85\x36\x2b\xcc\x80\x1b\x4e\x3e\x6f\x59\x6e\x6f\x01\xdc\xa2\x5c\x12\x2a\xb0\xbc\xb5\xf9\xb7\xab\xa3\x04\x5b\xe3\x24\x90\x39\x5b\xd1\x7b\x2e\x8b\x11\xe6\xc0\x5b\x94\xa7\x8e\xec\x90\xa0\x2b\xac\x65\xe1\xc3\xfd\x0a\x6d\x36\xc3\x9f\x82\xde\xc6\x83\xc1\x53\x7f\x2a\x07\x05\x47\x4f\x2c\x5d\xf8\xc4\x8c\x3d\x72\x9d\x6f\xef\xb9\x43\x01\x6b\x92\xdd\xcb\x65\xbe\xd7\x99\xe1\xbe\x5f\x07\x57\x42\x9f\xe2\x0a\x57\x80\xa8\x9a\x40\xee\x6f\xe1\xab\x2e\x03\x88\x6d\x10\x88\x5d\x21\x48\x4a\xa3\x15\x17\x13\x54\x01\xff\x5a\x01\xac\x62\x09\x39\x25\xe7\x49\x52\xa6\x8a\x6a\x9f\x9d\xed\x2c\x23\xd5\x45\x99\x43\x1a\x04\x8e\xc1\x5c\xc5\x62\x08\x65\x45\x11\x0b\xac\xf8\x9a\x9f\xda\x09\x4e\xef\xd3\x07\xaa\xd8\x69\x24\x53\x72\x71\x7b\x45\x62\xc5\x07\xb6\xec\xdc\x73\x89\x0f\x3c\xe2\xeb\x61\xc1\x16\xdf\x9a\xbd\xe7\xc5\xd6\x73\x50\xb6\x1e\x9f\x25\x96\xf0\x68\x7d\x75\x39\x6d\xe6\x19\x8e\xe9\x04\x4d\xed\xb3\xce\xcc\xe7\xe4\x1d\xd5\x2c\x26\x1f\xa9\xa0\x4b\x74\xb1\xbe\xba\xbd\x7e\xf7\xf1\xb5\x41\x78\x70\x1f\x5f\x5d\xd6\xa6\xa6\xdd\x86\x83\x7f\xda\x57\x53\x09\xb2\xb9\x75\x93\xc9\xf6\x5b\xa3\x0e\xdc\xbe\xbd\xf5\xdb\x20\x5e\x6c\xbd\x1e\x11\xb6\x50\xd3\x83\xe4\x7a\xb3\x61\x28\xe6\x82\xb9\xee\xce\x7a\x93\xa5\xde\xa7\xf1\xdd\x73\x6f\xc0\xb6\x37\xd2\xe8\x8f\x77\x6c\xbd\x33\xf5\x9e\xc1\x09\x8e\x9c\x1c\xd7\x91\xd2\xe6\x46\x6c\x41\x6c\x57\x1b\x84\xfd\xe2\x3c\x7b\xc4\x72\x56\xce\xf5\x36\x57\x34\x67\xcb\xf5\x25\xcb\x12\xb9\x36\x58\x7c\x1d\x84\x9a\xe1\x4f\xe7\x28\x4a\xab\x39\x8d\x88\x2a\x12\x68\x37\x13\x6f\xb5\x54\x16\x8c\xc5\x25\x99\xe7\x42\xe7\x34\x49\xcc\x01\xc2\xf8\xad\x10\xf5\x16\x0e\xfa\x8a\x01\x33\x84\xb3\xf3\x57\x76\x0d\xe7\xb8\x84\x4f\x5d\xa7\xdd\x5f\x10\x80\xe9\xbb\xf1\x6d\x97\xd8\xdd\xde\x51\xba\x43\x04\x06\xa4\x68\x37\x45\x62\x18\x74\x12\xeb\xb0\xa6\x89\x55\x39\x2c\x2a\x60\x43\x1c\xa0\x7f\x66\x91\xd6\x04\x28\x99\xae\x04\xef\x04\xaf\xf7\x9a\x9f\xce\x65\x91\x93\x87\x15\x4a\xa0\x66\x60\x42\xb3\x2c\xe1\x58\xc8\x45\x2a\x1b\x36\x1e\xf8\x93\xb7\x7f\xd6\x87\xd4\xee\x28\x86\xee\x26\x76\xce\xc8\x3d\x53\xf3\x3e\xf6\xb7\x5d\x25\x4a\x9a\x71\x08\xc0\xeb\x4d\xc2\x86\x0a\x8d\x7e\xa2\x3a\x0f\xff\xf9\xf5\xd5\x9f\xb1\x6d\xa5\x41\x08\x7b\xd4\x2e\x04\x0d\x33\x7e\xad\x1b\xc0\xf7\xcb\x3b\xbf\xbe\xc2\x36\x94\xb6\x65\x5e\xe9\x1a\x30\x1a\x3b\xc5\xfc\xf6\xb2\x6f\x3d\x5d\x9a\x11\x73\x22\x05\xdb\xa5\x03\xba\x81\x80\x89\x22\x65\xd8\x8e\xcf\x03\x43\xb8\x80\x79\x3c\x14\xa5\x07\x02\xad\xca\xa7\xe4\xe8\x28\xd4\x09\xb1\x02\x96\x0a\xe0\x06\x52\x77\xf4\xa6\xf2\x2b\x43\xd7\xca\x85\xf5\xe5\xf0\xbb\xc7\xe9\xef\x18\x97\x3f\x80\x63\x4e\x10\xb9\x23\xa4\xb8\xb1\xfb\xfd\xc3\xcd\x87\x27\x47\xd0\x8d\xe9\x6c\x53\x34\x06\xed\xc9\x33\xaa\x72\x4e\x13\x52\xa8\xc4\x05\xc4\x62\xa4\x98\x4d\xba\x5e\xd1\xfb\xa0\xe1\xdc\x29\x21\x6f\x10\x2b\x2d\x32\x20\x29\x03\xa3\xa8\x6d\xc0\xb8\x28\x92\xe4\x84\x2c\xb8\xa0\x86\x91\xb1\x8c\x04\x61\x89\xbd\x21\xbe\xe5\x22\x62\x06\xee\x99\xc3\x4b\x02\x90\x3b\xb3\x91\xa7\x69\x10\xe6\x16\xba\x5c\x10\x14\x43\xdf\x22\xb0\x0b\x2f\xa4\x22\x17\x49\xa1\x73\xa6\x6e\xa4\x61\xc3\x65\x82\x14\x59\x28\x99\x12\x1a\x7e\xfd\x8e\x8b\x78\xa7\x64\xd3\x1b\x60\xed\x11\x15\x84\x71\x08\x8c\x32\x53\x43\x04\xbf\x41\xf6\xf2\x52\xbd\xd2\x45\xb4\x32\x5b\x74\x94\xc9\x58\x1f\x19\xea\x7c\x84\xee\x46\x7d\xf4\xda\xfc\x6f\x73\xad\x98\x6f\x14\xbc\x77\x46\x33\x7e\xf4\xfa\x84\xc0\x86\x43\x38\xa9\xec\x1f\x3f\xfa\x8d\xde\x23\xb7\x61\x60\xea\x1b\x74\x8b\x2a\x23\xc0\xc5\x10\x65\xe8\xdb\xc3\x8a\xe7\x98\x61\x66\x6e\x0a\xfa\x00\x7c\x3b\xaf\x4d\x46\x4a\xc8\xb9\x73\xa2\x99\xab\x95\x32\xea\x22\xcc\xd9\x3d\x53\xeb\x7c\x65\x7b\x04\x39\x2a\xfa\x72\x72\x70\x33\x46\x9d\x9a\x25\x65\xee\x84\xca\x8f\x81\x26\x6c\x9d\xd0\xf1\x9b\xe3\x4d\x96\x54\xf2\xe0\xff\xec\xf3\x00\x21\x6c\xd0\x59\xc0\x9b\xd5\x73\xf8\x0a\x1f\x21\x33\xf1\xe4\xf0\xc3\x07\x1b\x9e\x82\x1b\xfe\x17\x2e\xc0\xeb\x0d\xf2\x90\x2b\xb7\x62\x0f\xad\xf6\xa4\x60\x9e\xff\xd8\x53\xda\x56\xba\xfa\x2a\x4a\x2d\x30\x3a\x3d\xb3\x69\xa8\xd6\x01\xac\xb2\xfa\x51\xc6\xf5\x97\xb8\x82\x24\x57\xc1\x8f\x7d\x2c\x71\x69\xe6\xb4\x63\x59\xcd\x69\x9d\xd5\x6a\xa1\xed\x67\xda\x72\x7e\x4d\x90\x94\x76\x3a\x20\xfb\xc1\x37\x5f\xca\xc0\x08\xb2\x48\xe8\xb2\xc4\x45\x20\xe2\x28\xd9\x5f\xdc\x7e\x75\x4b\xd0\xa4\xa1\xba\x7b\xa7\xea\xd4\xa5\x2c\xcd\xca\x5d\x6a\xfc\x45\xa3\x2b\xa3\x5b\x63\xf2\x83\x37\x63\x53\x9f\xb8\xaf\xbc\xd5\x54\xdf\xb4\xff\xce\xb4\x4e\x03\x4c\x70\xcd\x39\x9d\x29\x04\xf2\xa3\x40\x86\xbb\xfd\x5a\x41\x93\x0e\x78\x1b\x90\xf6\x8e\xad\x1f\xa4\x8a\xbb\x11\xf6\xdc\x13\x33\xf7\x8a\x53\xe6\x5d\x30\x18\x9a\xe3\x65\xad\x63\x67\x30\xaa\xb6\x02\x9f\xd0\x39\x4b\xba\x41\x6f\x50\x0c\x3e\xd2\xcc\x2c\xa7\x4c\x32\x46\x8b\x94\x8d\x32\x43\xed\x14\x33\xd3\x5c\x0e\xa5\x54\x4b\x2a\xf8\x4f\x98\x99\x1d\x19\x4a\x21\x15\xff\xa9\x1e\xd5\x5e\xa1\x4f\x1f\x6d\x5c\x09\x8b\xf2\xd7\x16\xeb\x6b\x49\x76\xc7\xb5\xa0\x71\xcc\x51\x04\xbb\xee\xc0\xe0\xf6\xfd\xe2\xe2\x6e\x97\x93\x86\xdf\x63\x62\x58\xe9\xd8\x7b\xc2\x63\x6e\x21\x0b\xdd\x37\xb7\x3d\x8c\xae\x07\x7b\x2a\x54\x4b\xa2\x48\xeb\xfb\x29\xe5\xc8\xb5\xeb\x3b\x25\x36\xec\xae\xc5\x26\x6a\x65\x6b\x43\x4b\xcd\xfa\xfc\x68\xcf\x70\xaf\x46\x6d\x38\x4b\x29\x1f\xba\x63\xf8\x8c\x38\xb2\x94\xe6\x85\xe2\x79\x2d\xa7\x6e\x7f\x91\x8b\xbf\x14\x73\xf6\x95\x29\x6d\xce\x63\xd7\xd7\x05\xe4\x48\x9e\x5f\x5f\xd5\x6e\xcb\x34\x1c\xb9\xd1\x90\x01\x76\x33\x0b\xb9\x11\x17\x49\x21\x68\x3a\xe7\xcb\x42\x16\x3a\x59\x87\x1e\x14\x4a\xee\xb8\x88\x4f\x09\xb9\x42\xb3\xaa\x38\xce\x09\x15\x52\xac\x53\xfb\x53\x11\x25\x45\xcc\x2a\x23\x36\xb1\x32\x49\xe8\xbd\xe4\x31\xa1\x45\x2e\x53\x9a\xf3\x88\x44\x92\xa9\x08\xea\x54\x87\xe3\x17\x9a\x11\x5a\x19\xb1\x7c\x37\x2a\x74\x2e\x53\x92\x52\xa5\x57\x34\x49\x9a\x50\x62\x02\xe9\x00\xcc\x69\x8d\xdf\x9a\x5d\x69\xfc\xf2\xbe\x65\x1f\xba\xaf\x03\x4c\x3c\xea\x3a\x18\xe0\x46\x0d\x70\xdf\x8c\xd4\x3d\xc6\xb0\x45\xc6\x6b\x53\x46\x2b\xf8\xf9\x65\xc5\x48\x56\xcc\x13\xae\x41\x85\x07\xc2\xb5\x26\x73\xb6\xe2\x36\xf5\xa6\x9b\x62\x35\x1e\x71\xd7\x3e\xb7\x91\x8c\xce\x1d\x6a\xa1\xf0\xad\xef\x5a\x0e\x78\x95\xd2\x65\x0f\xd1\xbe\xe1\xfa\x7e\x30\x64\x9f\x8a\xb5\xe7\xa7\xd0\xaf\x5a\x9f\x10\xa9\x6c\xea\xbb\xd3\xfd\x94\xfd\xca\x77\x61\x57\xe4\xb3\xdd\x51\x9b\xc9\x6f\xaf\x01\xd4\xc5\x60\x6a\x21\x55\x6a\xf6\x9d\x2b\xb2\x28\x04\x58\xc3\x1b\xf4\x42\x88\xe1\x03\xfe\x63\x8d\x99\x34\xd1\xd2\x13\x03\x38\x36\xe1\x00\x23\x54\x93\x07\x96\x24\x18\x46\x84\xcd\xb5\x83\xca\xf8\x65\xb9\xe0\x32\x94\x70\x5e\xaf\x5b\xc6\x7c\xc9\x74\x4e\x5e\xdd\xfe\xd7\xf9\x6b\x10\x88\xc0\x58\xb7\x26\x39\x5d\x9e\x6e\xc4\x87\x97\x15\xc0\xe2\x02\xc4\xb2\x88\xe6\x34\x91\x4b\x8c\x40\x33\x24\xc5\xbc\x9f\x25\x74\x0d\x69\x5c\x19\x55\x90\x2b\x18\xa1\xc1\x92\xa8\x42\xe4\xbc\xde\x5d\xfe\x74\x9c\xb2\x9b\x26\xc1\xe6\x35\x7e\xdb\xe8\x1e\xee\xa6\x39\x1d\xad\xd8\x9f\x96\x05\x2b\x96\x30\xaa\x6b\xdf\xee\x73\x1f\xec\xeb\x1b\x91\xb0\x19\x8d\xee\xe8\xd2\x9c\xbc\x25\x66\xce\x6d\xe4\x68\x8a\x4f\x07\xb1\x31\xa3\x60\x60\x6c\x9d\xc0\xa0\x95\x35\x60\xfe\xa2\xf6\x87\xe7\xce\xe0\x7d\x8b\x36\x05\xcb\xbd\x8e\xb5\x1f\xa2\xac\x33\x67\x35\x81\x98\x6b\x03\x40\xc1\xf5\xca\x57\x2f\x89\xf9\x02\x13\x26\xc8\xbc\xe0\x49\xec\x7b\xc6\x68\x70\x7e\xb9\x0b\xdc\xc6\x64\xbe\xd8\x96\x0f\x85\x66\x8b\x22\xc1\x7c\x1b\xfb\x9e\x25\x06\x82\xe1\xfc\x29\xbd\x63\x24\x5a\x51\xb1\x2c\x9b\x54\x18\x85\x10\x1d\x9c\xb1\x04\x7e\xef\xeb\x78\x04\x84\x81\x26\x3c\x5f\xd7\xd7\xc6\x32\xd3\xd9\x26\x6e\xf5\x18\x31\x83\xb4\x2d\xfe\x48\xa8\x41\x0c\x69\xfd\x18\x5c\x85\xc7\xdd\xfc\x22\x8d\xe3\x33\x9a\x32\x11\x13\x2a\x84\xcc\x6d\x4c\xa2\x54\x56\x8b\x6b\x79\x11\x5e\x72\xed\xe5\xcc\x1b\xb1\x8c\x8a\x94\x89\xbc\x59\xef\x9d\xd9\x92\x41\x71\x11\xb1\xed\x83\x31\x2b\x2d\x3f\x64\xe2\x9e\x2b\x29\xcc\x80\xba\x1e\x41\xae\xa0\xdc\x57\x91\x81\x0e\xe8\x0e\x92\x16\xf9\x0a\xce\x45\x92\x98\xe5\x4c\xa5\x5c\x30\x9b\x34\x95\x52\x91\xf3\x48\xa3\x05\x16\x31\xc8\x1e\x3b\x20\x39\x50\xb8\xc6\x23\xc0\x2d\xf5\x2c\x94\x00\xf9\xdd\x1a\x06\xf2\xca\x23\x29\x90\xf6\xbb\x2e\x25\xe9\x3d\x53\x24\x53\xcc\xe3\x2d\xb8\xcf\xeb\xf5\xd3\x58\xe6\x33\xcd\x32\x8a\xde\x4e\x2f\x3b\x2a\x6f\x83\x34\x17\x0c\x9d\x47\x49\xb6\xa2\xe0\x18\x35\x8b\x32\x04\x78\xb5\xce\x56\x4c\x68\xa4\xe6\x54\x31\x92\xf0\x94\x37\x59\x64\xa0\x74\x57\x4a\x1f\x79\x5a\xa4\x24\x61\x62\x89\xe5\x45\x7e\xfb\x9d\x41\x60\x45\xa3\x9c\xd5\xf7\x6d\xef\xa0\x5e\x29\x7d\xfc\x00\x83\xbd\x25\xbf\xfd\xae\xe6\xfb\x8a\x75\xf1\x9e\x26\x3c\x46\x94\x6b\xc2\x6d\x55\x24\x66\x3a\x96\x2c\x4e\x53\x9a\x47\x2b\xa6\x5f\x1d\xff\xe3\x7f\xbf\x9b\xfd\xff\xf3\xd9\xff\xd0\xd9\x4f\xb3\xbf\xff\xfa\xd5\xdf\xfe\x76\x5a\xf9\xe0\xf5\x9b\x5f\x1d\xbf\x6e\x20\x9e\x29\xd3\xda\x10\xe7\xcd\xa3\xf3\x15\x01\x22\x99\x66\xd2\x90\x13\xb9\x20\x13\x9c\x45\xeb\xaa\x8e\xff\x1f\xac\x4b\x67\x09\xcf\x5f\x1d\x1f\x9f\x1e\x1f\xbf\x3e\x85\x90\x6f\xfd\xea\xf1\x84\x3c\x96\x0b\x3e\xfe\xc7\x77\x66\x85\x7f\xff\xf5\xaf\x8e\x8f\x5f\xbf\x3e\xee\x5a\x9b\x05\xa4\x02\x31\x17\xf5\x4b\x36\x4c\x1f\x7c\xa7\x09\xa3\xb1\x59\xcf\x4f\x4c\xc9\x6d\xb0\x15\xcb\x12\xda\xe0\x06\xd9\x92\x42\xcb\x9a\xe5\x86\xf8\x81\xb9\x5c\x0a\xe6\xc7\x38\x25\xb7\x28\xa5\xc0\xfa\xe0\x8e\xfc\x33\x65\x39\x8d\x69\x4e\x4f\x3f\xd1\x94\xfd\xb3\x5a\x2a\x52\x26\xb1\x19\x68\x67\x64\x44\x03\x8f\xec\x96\x9c\x3f\x18\x52\xe7\x7f\x0e\xd7\xdd\x49\x83\xad\x7e\x97\x91\x42\x33\x2c\xff\xfd\x63\xa6\x58\x7b\x80\x58\x05\xd6\xcd\x97\xaa\x1e\x8d\xa4\xba\x12\x2b\x03\x01\x0d\x3d\x85\xa3\x09\x3f\x01\x12\x71\xfe\xe9\xb2\xd9\xc9\xd7\xed\x9e\xe8\x70\x47\xf4\x8f\x04\x38\x6f\x81\xdd\x05\x02\xd8\x6f\xaa\x11\x2a\xae\x60\x18\x94\xa3\xc4\x22\x56\x54\x94\xfc\xc0\xfc\xb8\x65\x5a\x3c\xe7\xb2\xa4\x5d\x69\x6a\x6c\x76\xe1\xf4\x8a\x33\xea\x13\x5d\xd4\x55\x61\x70\xe6\x97\xd1\xf8\xa3\x7e\xc1\x46\x9d\x55\x00\x9b\xaa\xfc\xe1\x99\x40\x79\x29\xe7\x4f\xf6\xc7\xd0\x37\x38\xab\xa7\x0b\xca\x2d\x75\x07\x40\x3b\x43\x4b\x3c\x16\x54\x52\x43\xee\xd8\xfa\xd8\xda\x4f\xcd\x0d\x5a\xf1\x0c\x99\xa1\x8d\x34\xe9\x3a\x7e\x7c\xbe\x1a\xd6\x15\xc8\x81\xe6\x2e\x5d\x89\x13\xf2\x49\xe6\xe6\xcf\x7b\x20\xe3\x80\x4e\x97\x92\xe9\x4f\x32\x87\x4f\x26\xd9\x29\x04\x70\xca\x7d\xb2\xc6\x75\x0c\x2b\x80\xeb\x1e\x98\xe0\xed\x7e\x60\xf3\xb3\x40\x64\xe6\x9a\x5c\x09\x23\xf7\xe1\x92\x3b\xa6\xf0\xc5\x71\xb5\x9d\xc0\x31\x5c\x21\xc5\xcc\x65\xfe\x6e\xcf\x60\xf7\x51\xaa\xca\x36\x0e\x9e\xcc\x4e\x84\x49\x73\xf0\x0d\xd7\x8e\x2f\x79\xe5\x96\x3a\x87\x63\xa7\xb7\x33\x65\x6a\x09\x11\x43\x51\x47\x84\x4b\x5f\x3f\x6f\x2f\xef\x6e\x6f\x9f\xee\x20\x4f\xee\x80\x97\x80\x27\x7d\x68\xf4\xfa\x90\x1d\xf0\x31\x18\x0a\xa9\x7e\x8a\xee\xa0\x7f\x19\xe2\x0e\x47\xfa\x6f\x28\x2c\xad\x4f\xc9\x39\xd1\x5c\x2c\x13\x56\xf9\xce\x06\x71\x05\xc3\xb4\x4c\x95\x41\xee\xfb\x8f\x05\xbf\xa7\x89\x61\x33\x90\x6b\xe8\x4b\xd2\xc9\xc5\x16\xb3\x3d\xb1\x05\xa4\x0d\x41\xf4\xca\xe7\xd1\x1d\x5b\x1f\x9d\xb4\x26\x5f\x86\x18\x7d\x74\x25\x8e\xca\x5a\x8b\x15\x2c\xf5\x3c\x0d\x64\xca\x23\xf8\xee\x68\x38\xdf\x6e\xe5\x50\xfd\x7d\x57\xa4\x1b\xe5\x76\xcb\xe8\xd6\x77\xbc\x3e\xd8\xb5\x0f\x92\x38\xf9\xf2\x95\x7e\x0d\xde\x1a\xc1\x08\x14\x03\x55\xa0\x69\x9b\x4f\xc3\x56\x2c\x73\x06\xb3\x65\x65\x9f\x9c\x22\x5b\x2a\x1a\x33\xb2\x54\x34\x6b\xb8\xb4\xbb\x49\xa7\x28\xe2\xd6\x4d\xd9\x62\xec\x3b\x7c\xcb\x5a\xc3\x59\xb7\xd8\xb2\x5b\xdf\x7b\x60\xf3\x95\x94\x77\x50\x6f\x8d\x37\x2a\x7c\xd3\x38\x6a\xfe\x8a\x73\x5d\x96\x9f\x39\x23\xba\x26\x31\xcb\x29\x4f\xc0\x3c\xf0\xf9\xc3\x47\x1b\x9a\xee\x64\x35\x07\x65\x3d\xcd\x98\xc0\xe2\x48\x63\x9b\x7d\x71\xc3\xee\x39\x7b\xb0\x16\xad\x26\x12\x35\x23\x4b\x26\x20\xec\xb9\x25\x79\x61\x46\x34\x8f\xd9\x7b\x30\x2a\x35\x0f\x34\x22\xf4\xa2\x01\xe6\x2e\x5a\xd1\xce\xeb\x3a\xf9\x5c\x0f\x1e\xe7\xed\xf2\xd7\x52\xb5\xb4\x84\xea\x57\x4e\xb1\x5f\x29\x59\x5f\xfb\xe2\xfb\xef\x7f\xd7\xc2\x57\xc0\xa6\xf2\x96\xfc\xe1\xf7\xbf\xff\xdd\xef\x9b\x7f\xc6\x05\xfe\xec\x37\xcd\xeb\xb3\xb7\xed\xe2\xe6\xf2\x00\xf6\x3b\xf6\x59\x44\xed\x61\x5d\x3d\x86\x5a\x50\x9e\x14\xca\x26\xe1\xf5\xd4\x1e\xff\x14\xbe\x03\x21\x39\xa5\x89\x9a\xba\x11\x5d\xf6\x8a\xcd\x6a\x59\x70\xc1\x34\x59\xc9\x07\x52\x08\xc5\x22\xb9\x14\xfc\x27\x16\x63\xd3\x00\x8d\x61\xd5\x86\x84\x7b\x14\x27\x4c\xc4\x99\xe4\x22\x07\x16\xbb\xa2\x22\x6e\xad\xe6\xd9\x63\xa5\xe1\x0d\x1e\xb5\x65\xc0\x8d\x76\xda\xb0\x8f\xe5\x1b\x1b\xdb\x65\xd6\xec\x02\x98\x90\xcb\xe1\xb6\x8d\x5a\x29\x12\xc6\xdb\x16\x9b\x4b\x0d\x8c\xbb\x99\x04\xd0\xd4\x01\x9f\xfd\x58\x30\xb5\xc6\x72\xb0\x5e\x71\x0b\xf2\x54\xbe\x94\x65\xac\xdd\x1a\xad\x50\x49\x1b\x3d\xcd\xa4\xc6\x24\x13\x88\x5a\x65\xd8\xf4\x06\x54\xd6\x4a\x07\xc1\x9f\x2e\x96\x88\x9c\x13\x51\x24\x49\xcb\x4c\x0d\x83\x08\xd9\x16\x8f\x84\x4f\x2f\xfb\x43\x3f\xc3\x40\x5f\x13\x14\x3e\xfb\x33\x44\x85\x0b\x9f\x48\x8b\xda\x35\x49\x65\x4f\x06\x2a\x7c\x86\x98\xa9\xf0\xd9\x21\x29\xae\x7f\x42\x5c\xbf\xd6\x18\x3d\xcc\x57\xf8\xec\x92\x31\xd7\xb3\xa1\xc5\x53\x1a\xb4\xf0\xd9\x29\xb2\xba\x9f\x71\xab\x06\xf4\x9e\xd9\x53\x4f\x68\xe8\xc2\xe7\x29\xcc\x5d\xf8\xec\xb4\x8f\x7d\x4c\x5f\xf8\x0c\xd9\xc5\x67\x30\x83\xd9\x35\x3f\xa7\x31\xac\x63\xca\x89\x4d\x62\xf8\xf4\x36\x8c\x59\xe0\x76\x4a\x83\xd8\x21\x05\x62\xc7\xf4\x87\x11\xa9\x0f\x83\x5f\xed\x61\x3c\xc3\x67\x37\x8c\x7e\x46\x43\x9a\x9b\xf0\xd9\xcc\x69\xf8\x3c\xb7\x51\x0d\x9f\xde\xfc\x74\x37\x03\x5b\x38\x78\x07\xba\x0e\x29\x9f\xa8\x18\x17\xf7\x12\x1b\xf5\xef\xa4\x44\xb4\xe2\xd9\xcd\xd6\xa8\x1b\x8a\xc6\x03\xf0\x58\xab\x69\x58\xd5\xcc\x85\xeb\x40\xf7\x48\x8c\xb0\x2b\xf5\xaf\x2c\x29\x96\xe6\xac\x20\x00\xce\xc6\xd0\xb5\xdd\x1d\x19\xf3\x05\x47\x00\x3a\x05\xe6\xd6\x6d\xed\xa8\xe9\x30\x89\x8e\xbd\xcb\x05\xbe\x29\x12\xf6\x57\x9e\xaf\x3e\x97\x75\xc2\xe0\x16\xe7\x45\x96\xc0\x6e\x06\x5f\x18\xb4\xbf\x29\x75\x1f\x0c\x8b\x31\xea\x6e\x9a\x32\x11\x97\x91\x49\xad\x13\x6a\xa3\x3d\x63\x2a\x5c\x92\xa0\x86\x08\x53\xb1\xc7\x8c\x8a\x52\x17\x82\x88\x8d\xb6\x1b\xd2\xf3\x7e\xf4\x15\xf9\x7a\x17\x47\xd8\x95\xdf\x6f\x15\x43\x08\xaa\x19\x54\x8a\x1e\x90\x39\x4b\x24\x04\xb5\x61\xba\x1f\xa6\xc6\xf6\xae\x0f\x70\xb5\x70\x6f\x59\xc1\xcc\xb6\x83\xf4\x01\x37\x20\x82\x26\x3c\x62\x9e\x23\xcb\x3e\x15\xe8\x6e\xac\xb0\xde\x4f\xfe\xef\xc3\x5a\x7b\xb2\xd5\x1d\x58\xea\x08\x76\x4a\x33\xde\x6d\x69\xc4\x67\xc0\xc9\xbb\xa1\xc3\xb3\x0f\x43\xc1\x3a\x4f\xdf\xfd\xf8\xe5\xfc\xdb\x9e\x11\xe7\x5f\xd6\x47\x9c\xfa\xf8\x65\x85\xa2\x96\x22\xb6\x3f\xfb\x92\x1b\xad\xa4\xbc\x23\x11\x55\x46\x96\x00\x47\xc1\x8c\x5c\xdc\xbc\x3f\xff\xf2\xfe\x84\xfc\x70\x7d\x09\x7f\x2f\xdf\x7f\x78\x6f\xfe\x5e\x7c\xfe\xf4\xe9\xfd\xc5\x17\x23\x9b\xbf\xe9\x04\x61\x61\x94\xcd\x24\xc1\xd3\x37\x02\x90\xac\x12\x73\x2a\xd6\x64\x51\x40\x73\xa1\x12\x98\x0a\x94\x14\x2d\x94\x34\x8e\xfb\x64\xe8\x7f\x73\x38\x58\x39\x73\xcf\x09\x37\x8d\xc2\xc1\x9e\xe1\x96\xbb\x62\x34\xdd\x2b\x7b\x1e\x24\xef\x5d\x5c\x60\x57\x1c\x1f\x56\x77\xa0\x3e\xca\x36\x7c\xfe\xd4\x15\x8b\x1c\x3e\xc7\x99\x8c\xf5\xb1\x2d\x30\x61\xfe\xdd\xbd\xed\xf0\xca\x59\x22\x97\xc7\xbe\x2e\x05\x23\x89\x5c\x12\x5d\xcc\x7d\xd1\x11\x10\x25\x7b\x8d\xf6\xc6\x0d\x53\xa9\xa0\x70\xe2\x2b\x93\x04\xa3\xf6\x06\xae\x32\x66\x38\xc0\x2e\x70\x9d\xe9\x88\x26\xac\x32\x92\xf9\x60\x57\x80\xde\x9c\xd5\xaf\xd0\x29\x42\x5c\x6d\x8c\xd8\x87\x52\x3c\xf0\x24\x8e\xa8\x8a\xb7\xc8\x45\x19\xac\x8b\x98\x83\xfd\x97\x05\x08\x8e\xe5\xd4\x58\xbd\xb8\x9b\x0a\xdf\x33\x95\xd0\x0c\x93\xd7\xa1\x71\x38\xa8\x02\x3d\x40\xbc\x64\x19\x83\xe2\x37\xd8\x2b\x95\x11\x26\xa2\x44\x42\x79\x66\x94\x3a\x4f\xaa\xc7\x82\xa9\x39\xae\xaf\x61\xdf\xa2\x26\xdf\x38\x7b\x85\x2c\xe8\xa9\xa9\x0e\xa6\x56\x37\x96\x50\x77\x45\x33\x3a\xc7\x41\x5b\xa3\x57\xe2\x19\x39\xb2\x89\x20\x47\x27\xe4\xc8\x57\xcb\x8e\xad\xc2\x7f\xf4\xa6\xbb\x0f\x81\x1f\x20\x2c\x77\x03\xf6\x00\x1b\x48\x31\x03\x38\xc3\xea\x62\x80\xdd\x2e\x04\xa4\x37\xe8\x65\x25\x79\x23\x52\x5a\x4f\x0e\xac\xa1\x3a\x51\xf7\x48\xe1\x42\xb7\xa0\x2e\xcb\x4a\x8d\x86\xf8\xe8\x4d\x65\xf8\xdc\xb5\xd4\x20\x42\xda\xc3\x53\xcc\x60\x63\x5b\xfe\x5a\xf8\xdc\x56\xee\x9e\x0f\xa1\x09\x4b\xe9\x73\x45\x32\x0a\x39\x1e\xee\x97\xdd\xc3\x5e\xda\x52\xef\x5c\x1b\x88\xfb\xdd\xca\xd6\x4b\x14\x44\x4d\xf4\x34\x85\xdc\xfa\x37\x2e\x12\xaa\x75\x8d\x3f\x15\x78\x80\x19\xd8\x36\x54\x31\xbc\xd7\x86\x94\x40\xc7\xf8\x15\xbd\x6f\x59\x6a\x0f\xa0\x73\xaa\x96\x2c\x6f\x8f\x77\xa0\x62\xfd\xb9\xb5\x73\xd1\xac\x77\x87\xc9\xd9\x00\x83\x14\x17\xf9\x4c\xaa\x19\xbe\xf2\x96\xe4\xaa\x68\xb2\x3b\xe4\x3c\x65\xb2\xc8\x6f\x59\x24\x45\x7d\xa5\x0b\xfb\xbb\xc9\x02\x38\x76\x28\xff\x61\x63\x88\xce\x9d\xf8\x1d\xb6\x53\x73\x06\xad\x52\x36\x77\x71\x43\xd5\x8a\xd8\x9f\x3f\x7c\x1c\x73\xd8\x04\xca\x1e\xb6\x9f\xe4\x57\xcb\x93\xc5\xd2\x43\x6a\x21\x6f\x7d\xed\x63\x91\xef\xfe\xd2\x85\x8f\x47\x69\xff\xb5\xdd\x8c\xf6\xea\xc4\x8d\xeb\xd7\x39\xcd\x8b\x2d\x6c\xe8\x62\x45\xb5\x99\x82\xb7\x30\x54\xe8\x12\x0b\x0b\x9f\xa2\x46\x87\x95\x9f\xe1\x77\x2e\x61\xe5\x94\xd8\x17\xcd\x95\xcd\x15\xe5\x68\x0e\xa3\x51\x5e\xd0\x6d\x8f\xbe\x79\xd9\x26\xbb\xd4\x97\x3b\x6f\x31\x88\xb5\x19\xc1\x22\xa6\x72\xfd\x81\xea\xfc\x87\x2c\xa6\x0d\x85\x6f\x36\x92\x58\x74\x0e\x77\x0a\x75\xda\x07\xc1\x62\xc3\x84\xec\x96\xe0\x78\xe4\xc1\x50\xf7\x02\x47\xac\x19\xb0\x03\x2b\xdd\x1d\x33\xaf\xcf\xcc\x54\xf5\x50\xdf\x48\xb3\x27\xe7\xb5\x34\xaa\x9a\x2b\xd4\x05\xad\xe1\x68\x0a\x46\x23\x82\x3d\xd6\x49\x95\xe3\x21\x4e\x18\x15\xf5\x15\x02\x2a\xb0\x5e\xe0\xef\x76\xc7\x29\x3b\x01\x79\x58\x71\xa3\x6e\x61\x81\x20\x4d\x9c\x10\x1b\xb3\x84\x35\xe4\x4b\x8e\x4c\x2f\xb2\x33\x5c\xda\x09\xc6\x46\x66\x5f\x57\x87\xf3\x0e\x75\xab\x5b\xda\x52\x12\xa5\x96\x66\x65\x1f\x6f\xab\xd8\x5c\x30\x08\x6f\xf3\x44\x46\x77\xd8\x89\x03\x2a\x71\xf2\x9f\x1a\xb2\x0e\xf1\xc1\x4c\x5c\x11\xf3\xc8\x47\x43\x64\x4a\x2e\x15\xd3\x95\xad\xc6\xc2\xe5\x1a\x47\x37\x73\x9a\x3d\xf7\xf3\x06\xe9\xbb\xa4\x10\xb6\x56\xd3\xf3\x64\x40\x39\x2b\x3d\x14\x1d\xa8\xb8\xea\xb7\x55\x74\xcc\x19\x86\x56\x4e\x41\xc2\x32\xd8\xac\xcf\xfe\xd2\x5c\x2f\x63\xd2\xf4\xa4\xb6\xaa\x1d\xf8\x0b\xee\x9a\xb5\xb5\xfe\xaa\xa5\xbe\x47\x5f\x57\x40\x47\x1d\x0f\xd2\x5f\x75\xf2\x20\xf7\x19\x6d\xd2\x94\x8d\xc9\xa3\x70\x7a\x94\xb0\xdf\x25\xb6\xa6\x6f\xcb\xc3\x9d\xbc\xea\x62\x97\x5e\x5f\x95\xdb\x52\x2a\x53\xb6\xe0\x17\x86\xdf\x2d\xa4\x6a\x54\xdb\xa6\x03\xbe\xbd\xea\x4b\xe7\x40\x46\xa6\x6d\x8e\x73\xaf\x32\x6e\x47\x41\xfd\x2b\x27\x84\x92\x15\xd7\xb9\x54\x36\x00\x05\x3a\xcc\x2b\x2a\x34\x7e\xdf\xc8\x2b\xc6\x46\xce\x5f\x78\x10\x08\xcd\x32\x46\x95\x0b\x03\xb0\xec\x8c\x6a\x30\xa2\x46\x52\xc5\xb5\x80\x39\x93\x4c\xad\x38\x56\x3b\xfd\x04\x05\xaf\x12\xaa\xf3\x2f\x1e\x06\x23\x53\xf4\xa4\xc6\x55\x89\xc9\x2e\xb1\x5c\x8d\x2b\xbc\x2c\x45\xf9\xa5\x24\x54\x58\x43\x55\xd3\x14\xbd\xf0\xab\x5b\x2e\x29\xd7\x86\x02\xe0\xa0\x75\x3d\x78\x61\x2f\x58\xe2\xf3\x40\xee\x92\xd1\xfb\x81\x7c\x8e\x6d\x12\x89\x6f\x93\x68\x5f\x77\xcc\x1e\x05\x07\x4c\xdd\x70\xed\x04\xd6\xcd\xa8\x46\x40\x4c\x40\x33\x88\xbf\x56\xa3\x8e\x2c\x5b\x35\xd4\x54\xa9\x59\x8c\xbf\x45\x3e\x45\xa8\xf7\x75\xe8\x09\x8d\x62\x54\xb7\x15\x94\xda\x25\xc6\x7a\xae\x38\x5b\x90\x0b\x9a\xb2\xe4\x82\xea\x29\x77\x1e\xc8\x43\x9b\xa9\x86\x9d\x2e\x4f\xc9\xf1\x4d\x10\x85\xf3\x49\xe6\x1f\x59\xde\x54\xe0\xa0\xb3\xee\x64\x1f\x42\xf0\xa4\x24\x60\xb4\x3a\xd2\x7d\xe1\x47\x5e\xf5\xd1\x10\xb6\x5c\xec\x83\xb8\xd2\xed\xc5\xd4\x9a\xae\x71\xf5\x02\x17\x0a\xcc\x93\xd1\xd0\x8b\xdc\x51\xa0\xa9\xe9\xf2\xf6\xb9\xb6\x7b\xba\xb0\xbb\x5c\xd5\x8e\xd5\xfb\x21\x6e\x6b\x4d\x3d\x5b\x1b\xf1\xa5\xa2\x4e\x83\xaf\x28\x0c\xbd\xc7\xe2\x3c\x5c\x1b\x25\x6f\x4a\xc1\x68\xbf\x45\x0f\xed\xa1\x36\x7e\xdf\x22\xf9\xcf\xda\xf9\xfc\xd8\x82\x8a\x31\xf8\xdf\x0c\x06\x3c\x67\xb8\xdc\xa5\x9b\xd5\x1a\x60\x7c\xd3\x36\xf8\x1f\x7a\xf7\x3d\x64\x15\xfc\x78\x05\x25\xa7\xd8\x3d\xa4\x69\x08\x48\x3f\x65\x44\x30\x28\x14\xd6\x54\x25\x88\xf4\x57\xd9\xfa\xa9\x6b\xdd\xaa\x74\xa7\x9a\x4c\xba\x8f\xd6\xfd\xa8\xed\x80\xf1\xe9\xab\x15\xf6\xd0\xba\x77\x50\x07\xbb\x75\xaa\x1d\x06\xeb\x14\x30\x77\x1c\xaf\xde\xf0\xbc\xf9\x6c\xf4\x57\x33\xaf\xdc\x00\x3d\xc7\x48\x8b\xc8\x50\xe5\x08\x5a\x07\x22\x99\xf7\xdd\x5d\x43\x23\xf3\xcd\x26\x0d\x84\x90\xfe\x2a\x86\x4f\xb5\xac\xa2\xe0\xd3\xed\x79\x67\x25\xd3\xde\xe3\x1d\x40\x59\xd6\x4e\x04\x7a\xda\x3a\x8d\xf8\x74\x61\xdd\xfe\xf1\xad\x4f\x89\xee\x56\x1c\x7b\xa2\x0a\xb9\x9a\xa9\x7b\x16\x57\x3c\x8c\xb6\x85\x67\xf5\xb3\xc0\x1f\x5d\x8e\x6f\xb7\x9d\xfc\xeb\xdf\xbf\xf8\xbf\x00\x00\x00\xff\xff\x73\x54\xe9\x3b\x37\xe8\x0c\x00") func operatorsCoreosCom_clusterserviceversionsYamlBytes() ([]byte, error) { return bindataRead( @@ -225,7 +225,7 @@ func operatorsCoreosCom_operatorsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_subscriptionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\xfd\x77\xe3\xb6\x95\x30\x8e\xff\xde\xbf\x02\xc7\xed\x39\xb6\x5b\x49\x33\xd3\x66\xdb\xee\x3c\xfd\xb6\xc7\xf1\x78\xba\x7e\x92\x99\xf8\x19\x4f\xd2\xb3\xdf\x6c\x77\x03\x93\x90\x84\x9a\x04\x18\x02\x94\x47\xdd\xec\xff\xfe\x39\xb8\x17\x00\x41\x49\x36\x01\x59\x92\x3d\x59\xe2\x87\x64\x4c\x91\x78\xbd\xb8\xef\x2f\xb4\xe2\xdf\xb1\x5a\x71\x29\x5e\x13\x5a\x71\xf6\x49\x33\x61\xfe\x52\x93\xdb\x3f\xaa\x09\x97\x2f\x16\xaf\x7e\x71\xcb\x45\xfe\x9a\x9c\x37\x4a\xcb\xf2\x03\x53\xb2\xa9\x33\xf6\x86\x4d\xb9\xe0\x9a\x4b\xf1\x8b\x92\x69\x9a\x53\x4d\x5f\xff\x82\x10\x2a\x84\xd4\xd4\x3c\x56\xe6\x4f\x42\x32\x29\x74\x2d\x8b\x82\xd5\xe3\x19\x13\x93\xdb\xe6\x86\xdd\x34\xbc\xc8\x59\x0d\x9d\xbb\xa1\x17\x2f\x27\xbf\x7d\x39\x79\xf9\x0b\x42\x04\x2d\xd9\x6b\xa2\x9a\x1b\x95\xd5\xbc\x82\x9e\x26\xb2\x62\x35\xd5\xb2\x56\x93\x4c\xd6\x4c\x9a\xff\x95\xbf\x50\x15\xcb\xcc\x18\xb3\x5a\x36\xd5\x6b\xb2\xf1\x1d\xec\xce\x4d\x85\x6a\x36\x93\x35\x77\x7f\x13\x32\x26\xb2\x28\xe1\xdf\xb8\xc4\xeb\x60\x54\x78\x5c\x70\xa5\xbf\x5a\xfb\xe9\x6b\xae\x34\xfc\x5c\x15\x4d\x4d\x8b\x95\xd9\xc2\x2f\x6a\x2e\x6b\xfd\xbe\x1d\xdb\x8c\xa5\x9a\x9b\xf0\xdf\xf6\x45\x2e\x66\x4d\x41\xeb\x6e\x27\xbf\x20\x44\x65\xb2\x62\xaf\x09\xf4\x51\xd1\x8c\xe5\xbf\x20\xc4\x6e\x97\xed\x73\x4c\x68\x9e\xc3\x11\xd0\xe2\xaa\xe6\x42\xb3\xfa\x5c\x16\x4d\x29\xfc\x98\xe6\x9d\x9c\xf9\x5e\x5f\x93\x8f\x73\x46\x2a\x9a\xdd\xd2\x19\x73\xe3\xdd\xb0\x9c\x68\xe9\x3f\x20\xe4\x1f\x4a\x8a\x2b\xaa\xe7\xaf\xc9\xc4\x6c\xf1\xc4\xec\x60\xf0\x33\x9e\xcf\x15\x76\x12\x3c\xd7\x4b\x33\x5d\xa5\x6b\x2e\x66\x0f\x0d\x9f\x51\x4d\x0b\x39\x23\x08\x46\x64\x2a\x6b\xa2\xe7\x8c\x98\xa1\xf8\x94\xb3\xdc\xcd\xef\x81\x19\xe1\xa7\x6b\x73\xba\x5e\x7d\x1c\x3d\xa5\x39\x15\x82\x15\x44\x4e\x49\x53\xe5\x54\x33\x45\xb4\x6c\xf7\xe7\xe1\xed\xb1\x1f\xaf\xcd\xe6\x7c\xed\xf9\x86\xe9\xe0\xab\x8b\x57\xb4\xa8\xe6\xf4\x95\x7d\xa8\xb2\x39\x2b\x69\x7b\x86\xb2\x62\xe2\xec\xea\xf2\xbb\xdf\x5d\xaf\xfc\x40\xba\x4b\x09\x41\x94\xdc\x32\x56\xa9\xf6\x52\x90\xa6\x32\x6b\x32\x8b\x23\x37\x4b\xa2\x6b\x9a\xdd\x72\x31\x83\xa5\xcf\x70\xbd\xe7\x78\x30\x6a\xb2\x36\x65\x79\xf3\x0f\x96\xe9\xe0\x71\xcd\x7e\x6c\x78\xcd\xf2\x70\x2a\x66\x67\x1d\x26\x58\x79\x6c\xf6\x29\x78\x54\xd5\x66\x5a\x3a\xb8\x87\xd8\x02\x54\xd4\x79\xbe\xb2\xcc\x9f\xc6\x2b\xbf\x12\x62\x76\x07\xbf\x24\xb9\xc1\x4b\x66\x41\x73\xe6\xae\x0b\xcb\xed\x96\x9a\x03\xd6\x73\xae\x48\xcd\xaa\x9a\x29\x26\x10\x53\x99\xc7\x54\xd8\x55\x4e\xd6\x3a\xbf\x66\xb5\xe9\xc8\x5c\xe9\xa6\xc8\x0d\x42\x5b\xb0\x5a\x93\x9a\x65\x72\x26\xf8\x3f\x7d\xef\xb0\x89\x66\xd8\xc2\x40\x90\x26\x70\x21\x05\x2d\xc8\x82\x16\x0d\x1b\x11\x2a\xf2\xb5\xbe\x4b\xba\x24\x35\x33\xe3\x92\x46\x04\x3d\xc2\x27\x6a\x7d\x2e\xef\x64\xcd\x08\x17\x53\xf9\x9a\xcc\xb5\xae\xd4\xeb\x17\x2f\x66\x5c\x3b\x54\x9d\xc9\xb2\x6c\x04\xd7\xcb\x17\x80\x75\xf9\x4d\x63\x8e\xfe\x45\xce\x16\xac\x78\xa1\xf8\x6c\x4c\xeb\x6c\xce\x35\xcb\x74\x53\xb3\x17\xb4\xe2\x63\x58\x8c\x40\x24\x5b\xe6\xbf\xac\x2d\x72\x57\x2b\x03\x6f\xbc\x48\xc4\xa1\xcd\xc4\xc3\x32\xf8\x94\x70\x45\xa8\xed\x10\x17\xdb\x9e\x89\x79\x64\xb6\xf1\xc3\xc5\xf5\x47\xe2\x66\x84\xe7\x86\x47\xd4\xbe\xba\x61\x87\xdc\x69\x99\x9d\xe5\x62\xca\x6a\xfc\x72\x5a\xcb\x12\x7a\x65\x22\xaf\x24\x17\x1a\xfe\xc8\x0a\xce\x84\x36\x37\xbd\xe4\x5a\x01\x58\x33\xa5\xcd\x41\xae\x77\x7c\x0e\xa4\x8d\xdc\x30\x8b\x23\xf2\xf5\x57\x2e\x05\x39\xa7\x25\x2b\xce\xa9\x62\x07\x3f\x3b\x73\x46\x6a\x6c\x0e\x24\xfa\xf4\x42\xc2\xbd\xfe\xc1\xda\xad\x27\xc4\x91\xdc\x7b\x8f\x3b\x44\x41\xd7\x15\xcb\xfc\x75\xa4\x82\x9c\x55\x55\xc1\x33\xbc\x71\x7a\x4e\x35\xc9\xa8\x30\xdb\xc9\x85\xd2\xb4\x28\xd8\xea\xed\xb8\x77\x16\xf7\xe1\x1f\x02\xc8\x66\x85\x5c\xb9\xc7\x6b\x34\xa3\xfb\x83\x27\xb3\x2b\x6f\xdc\x87\xab\x4c\xb3\x98\x7f\xfd\x87\x07\xb6\x9c\x20\x4b\x34\xe5\xb3\x4d\x9f\xdd\xbb\x97\xe7\xf0\x09\x30\x53\x94\x0b\x65\xbb\x68\x6a\xdc\xcd\x96\x76\x1a\x6a\x4a\x3b\x9c\xc4\x3a\x1c\x3e\xb8\xb3\x7d\x6b\x36\x8d\x4e\x81\xf5\x5b\x6e\xfe\xb5\x1f\x01\xb8\x76\x39\x6d\x67\x3e\x22\x72\xc1\xea\x9a\xe7\x16\x75\x57\x32\x3f\x56\x80\x58\xf3\xa6\x00\x42\x25\x85\xd2\x35\xe5\x1b\x2f\xbd\x6b\x82\x17\x66\xf1\x63\xaa\xf1\x06\x31\x45\xee\x78\x51\x90\x5f\x0b\xa9\x7f\xed\x47\x80\x01\x64\xcd\x67\xdc\x63\x67\x45\xb8\x70\xe3\x02\x59\xb7\x7c\x89\x54\x6c\xa5\xc3\xfb\x07\xff\x56\x31\xc2\xca\x4a\x2f\x1d\x9a\x3a\xf9\xef\xff\x39\x35\x34\x81\xd5\x54\x05\x03\x76\xfa\xbb\x17\xd3\x63\xeb\x39\x29\x12\x71\x5a\xb0\x2f\x32\x67\x67\x3d\xa7\x46\x56\x4f\xee\x0d\x43\xf6\x47\xc1\xe7\xfe\xd4\xc3\x43\xa9\x9b\x82\x29\xcf\xc2\x99\xbd\x7b\xa0\xf3\x88\xb5\xc4\xae\x07\xdf\x63\x53\x56\xd7\x2c\x7f\xd3\x98\x5b\x76\xed\x67\x75\x39\x13\xd2\x3f\xbe\xf8\xc4\xb2\x46\x6f\x60\x29\x1e\x5c\xfa\x03\x40\xeb\x9a\xe1\x1b\xed\x4e\xb0\x1a\xa1\x0c\x67\x04\xac\xa3\xfd\xc1\x6c\x09\xb0\x05\x66\x07\x15\x62\x3d\x45\x35\x57\xd3\x65\xef\x00\x66\x47\xfd\x9e\xb3\x4f\x86\xe2\x01\xef\x1f\xdc\x76\xc3\xc8\x01\x71\xe3\xac\xc8\x47\xe4\xa6\xd1\x84\x6b\xa0\x7c\xd9\x5c\x4a\xb5\x8e\xed\x56\x1b\xc5\xa3\x85\x79\x2d\xb8\x04\xc6\x85\x48\x61\x80\x95\x94\x86\x5c\x01\xc3\xc4\xc2\xe1\x27\xb0\xf2\xf6\x33\xbe\x4a\x6d\xd6\x5b\x29\x95\x6e\x8f\xcb\x90\x7e\xb8\x80\x82\x91\x3b\xae\xe7\xf0\xc7\xac\x66\xc8\x34\xa9\xa6\x34\x83\xde\x31\x3e\x9b\x6b\x35\x22\x7c\xb2\x81\x92\xae\x36\x03\x80\x8c\x66\xf3\x60\x5a\x25\x63\x5a\x11\x5a\x14\x6e\x09\x21\xd4\x22\xf5\x28\x0d\x03\x41\x4e\x1c\x87\xd1\x3b\x8a\xe5\x0e\x46\x9e\xfa\xac\x02\xde\xc6\xe3\x1a\x11\xa6\xb3\xc9\xe9\xa8\xb7\xfb\x4c\x96\x95\x41\x08\x14\xf6\xe0\x66\x49\xb8\x36\xbc\x3b\x72\x43\xb5\x6c\x66\xb8\x53\xac\xb0\x13\x77\xbc\x2c\x1c\xbe\x61\x2e\x41\x1a\xdc\x40\x6e\x56\xdb\x11\x6e\xee\x91\x63\x57\xcd\x70\x1c\x37\x09\xf6\xaf\xa4\x3a\x9b\x5b\x34\x9c\xc9\xba\x66\xaa\x92\xc2\xf4\x8c\xbf\x5c\xb4\x6b\xfb\x3f\xe6\x9d\xde\xf1\x4c\xa7\x27\xea\xb4\x3d\xec\x39\x9f\xcd\xdd\x59\xd3\x1a\xd1\x71\x17\x46\xfa\x8e\x1c\x51\x09\xad\x6b\xda\x77\x8f\xb8\x66\x65\x0f\x22\x21\x5b\xdc\x7e\x42\xce\x84\x45\xf6\x2d\x60\x07\x20\xa6\x59\x5d\xfa\x8d\x04\x28\x04\xb4\xa7\x70\x13\x78\x69\x38\x21\xae\x2d\x98\x93\x97\x11\xe3\x9d\x98\x9b\x40\xb8\x3e\x56\x70\x6b\xc7\xb2\x3a\x9d\x90\x33\x22\x1a\x8f\x78\x1e\x9a\x82\x90\x7e\x06\xb6\x23\x33\x2d\x25\xdb\xbe\xfa\xf1\x51\x1c\xfa\xc6\x76\x3f\x83\xb6\xde\xc6\x76\xfe\x4c\x44\x5c\x42\xf3\x3a\xee\x5a\xef\xab\xb1\x84\xc4\xbd\xed\xe6\x10\xf3\xf6\x0a\xc4\x9c\xe1\xcd\x51\xac\x60\x99\x36\xd4\x90\xd5\xe5\x88\x50\xa5\x64\xc6\x8d\xa8\xd0\xc2\x7e\xf7\x42\xe1\x4a\xfa\xf7\x9e\xa4\xee\x3f\x49\x5e\x3f\x01\x69\xb4\x7b\xbf\x63\xbf\x5b\xdb\x8d\x82\x2b\x6d\x10\x54\x77\x57\x3a\x78\xf7\x66\x09\xbf\x1e\x2b\x52\xd0\x1b\x56\x3c\xc0\x57\xad\xb6\xf8\xcb\xdf\xb6\x48\x34\x70\xcf\x82\xa2\x10\x42\xdb\x56\xa1\x21\x58\xb7\x95\x7b\x3d\x9c\x80\x18\xe4\x98\x7a\x64\x05\x47\x84\x92\x5b\xb6\x1c\x21\x4a\x17\x5e\x85\x93\x34\x05\xe8\xb8\x66\x48\xd0\x0d\xdc\xdd\xb2\x25\x74\xf8\x30\xbb\xb9\xb1\xab\x54\xb8\xc3\x96\x82\x01\xda\x36\x36\x13\x4d\xfc\x62\x8b\x0d\x4a\xbf\x1a\xd8\x6e\xd9\x83\xec\xf3\xa6\xb6\xa6\x6c\x04\x70\x87\xf3\x80\x43\x02\x0a\xec\xe0\x81\x1a\x11\x99\x6d\xd6\x3f\x3c\xdc\x1e\x14\x38\x1f\x6a\x6e\xf7\x1e\xb5\xae\xc4\x0b\x62\xda\x07\xaf\xc3\x41\x78\x3f\x56\x08\xaf\x06\xef\xcc\x39\x28\x2b\xcd\x45\x01\x34\x92\x0e\xb4\xd8\xbe\xa3\x05\xcf\x03\x1d\xa8\x61\x36\x2e\xc5\x88\xbc\x97\xda\xfc\xef\xe2\x13\x57\x86\xc7\x7c\x23\x99\x7a\x2f\x35\xfc\x39\x21\x7f\xd5\x78\xf5\xbe\x8e\xc4\xcb\x6d\xdb\xfa\x0c\x70\x7d\x87\x3e\x81\x33\x81\x48\xd4\xec\x70\xa8\x89\x53\x13\x23\x99\x03\x8b\x6e\x77\xce\x60\xad\x4b\x61\x84\x02\xdc\xb9\xe4\xa1\x40\x19\x8b\x72\x36\x0e\x59\x36\x0a\x54\x69\x42\x8a\x31\xb0\x51\x1b\xc7\xc4\x03\x32\xe3\x86\x47\xb4\xc3\xe1\xef\x1f\xfa\xaf\xda\x0c\xfb\xb5\x1e\x05\x1f\x27\x8f\x1b\x0c\x36\xa7\x0b\x60\xed\xb9\x98\x15\x9e\x89\x1f\x91\xbb\x39\xcf\xe6\x28\x3d\x82\x26\x4c\xb3\xba\xaa\x99\xe1\x18\x28\xe8\xcc\xcc\x93\x19\xab\xd3\x41\xff\xa3\x11\x0d\x70\x7c\xd4\x77\x17\x34\x63\x39\xc9\x41\x64\x41\xd5\x2b\xd5\x6c\xc6\x33\x52\xb2\x7a\xc6\x48\x65\x48\xff\x76\x00\x9f\x46\x89\xb1\x25\xd3\xe3\x70\xc0\x2d\x6e\x18\x21\x9f\xc6\xb7\xcd\x0d\xab\x05\xd3\x4c\x8d\x0d\x7f\x32\xb6\xb3\xd7\xb2\xe4\x59\x74\x67\x3b\xe9\x06\xf8\xac\xb7\x46\x6e\x3b\x10\x8b\x05\x32\xe2\xc0\x62\x0d\x2c\xd6\xc0\x62\x0d\x2c\xd6\xc0\x62\x45\xb7\x81\xc5\x7a\xf4\xf0\x03\x8b\x35\xb0\x58\x07\x67\xb1\x3a\x5d\x94\xb4\x4a\xed\x01\xf5\x72\x5b\x28\x02\xff\x86\x0a\xdd\x55\xcd\x1f\x30\x7c\xce\xaf\xa1\xab\x02\x34\x7c\xcc\xb5\x25\x4e\x1f\x41\x6d\x68\x2d\x91\x35\x15\x33\x46\x5e\x8d\x5f\xbd\x7c\x99\xa2\x20\xb4\xe0\x1c\xf5\xc5\x54\xd6\x25\xd5\xf0\xcd\xef\x7e\xdb\xf3\xc5\x23\x4e\xe5\x3e\x7b\xc9\x61\x0c\x75\x16\xf3\x78\xdb\x4c\x87\x45\xbe\xc7\x96\x06\x64\x4c\x48\x4d\x4a\xa6\x09\xed\xe7\xc9\x42\xb5\x3b\x2f\xd9\xc8\x99\x43\x11\xed\x58\xb7\x11\x67\x14\xcc\x89\x14\xd6\xf4\x62\x0e\xbf\xff\x70\xb7\x5a\x41\xc6\xa8\x62\x86\xc4\xdf\x30\xb3\x8a\x7e\x53\xa0\x26\x4a\x96\x66\xd6\x5c\x68\x87\xc4\xcc\x12\x98\x3b\x18\x72\xc2\x26\xb3\x09\xc9\x1b\xe8\x96\x0a\xeb\x07\x73\x8a\xab\x55\x4b\xa5\x59\xd9\x6f\x0b\x34\xc4\xb0\x86\xff\x99\x6d\xd1\xf5\x12\x2c\xe4\x0b\x26\x74\x43\x8b\x62\x49\xd8\x82\x67\xda\xef\x1f\xb8\xed\x70\xad\xa2\x76\x2a\x81\x8d\x8e\x67\x9d\xc7\x6b\x37\xb4\x8f\x48\xa5\x70\xbe\x6b\x7d\xc7\xe0\x9c\xce\x0d\xf8\x60\x57\x32\xb9\x57\x26\xd4\xa6\x5f\x34\xdb\xc2\x3f\x01\xb8\xbf\xf9\xd0\x6f\x65\x23\xc9\xf4\x27\x81\xe6\x6c\xc7\x5a\x59\x83\x97\xac\xad\xf1\x6d\x7d\xa5\x1b\x4c\x5e\xb8\xf6\xce\xad\x91\xd3\xc8\x01\xf5\x9c\xa1\x91\xf2\xec\xfd\x9b\xb8\x1d\x23\xd6\x39\xe0\xa3\xac\x64\x21\x67\xcb\xf0\x78\x61\x3b\xc1\xfc\x67\xe7\x81\xbe\x3a\xc8\x82\x1b\x98\x7f\xbf\x02\x0f\x83\x69\x68\x30\x0d\x0d\x7a\x0b\x68\x83\xde\x62\xd0\x5b\x0c\x7a\x8b\xb8\x36\xe8\x2d\x1e\x3d\xfc\xa0\xb7\x18\xf4\x16\x83\x69\x68\xbd\x0d\x2c\x56\x7f\x1b\x58\xac\x07\xdb\xc0\x62\xf9\x36\xb0\x58\x03\x8b\x35\xb0\x58\x03\x8b\x35\xb0\x58\x87\xea\xe6\xb1\xa6\xa1\x47\x4d\x61\xbb\xc1\x2b\x99\x3f\x22\x78\xab\x92\xf9\x03\xb1\x5b\xa8\xd3\xcf\xe4\xb8\x90\x19\xd5\x36\xcc\xd6\x7c\x62\xad\x50\x8a\x96\x68\xa6\x18\x91\x7f\x4a\xc1\x30\x9a\xc5\x5c\x0f\x30\x16\x48\x3d\x67\xb5\x79\xfd\x44\x9d\x3e\x18\x42\x30\xc4\x7e\x0d\xb1\x5f\x43\xec\xd7\xbd\xed\xd9\xc4\x7e\xcd\xa9\x42\xb8\x45\xd2\x78\x7f\x28\x58\x80\x93\x3e\xb2\xba\xfc\x99\x46\x82\x19\x70\xb7\xe0\x08\x49\x22\x5a\x90\xc2\x9d\xc9\xad\xc1\x9f\xe5\x57\xdd\xfd\xb0\x62\x35\x2c\x8a\xe6\x39\xcb\x49\xc5\xea\x31\x82\xa8\x24\x53\x2e\xf2\x0d\x6b\x75\xfb\xd3\x8f\x1e\xf6\x18\x8a\xd5\x5d\x47\xd4\x37\xfb\x89\xc7\xea\x4e\x64\x0b\xa3\x62\x68\x19\xed\x10\xc1\x67\x11\x9d\x95\x2a\xa1\x8f\x89\xb6\x06\xc5\xaf\x22\x65\xf4\x74\x31\x1b\x84\x63\x67\x7e\xdc\x52\xfd\x94\x24\x0a\x9d\x59\x79\xfc\xc7\x86\xd5\x4b\x88\xcf\x6f\xc5\x4e\x9f\x8b\xc4\x7a\xc4\x70\x45\x32\xaa\x90\xac\xa6\xb0\xca\x97\x53\x8c\x9a\x14\x4d\x51\x8c\xb0\x9f\xd5\xcb\xea\xd0\x1c\xc0\x81\x90\xe6\xf7\x64\x8d\x58\xa2\x8a\x66\x3b\x1d\xc8\xf6\x56\x58\xb2\x7a\x4e\xab\x5d\xa1\x6e\xcc\xa9\x0e\xf1\x58\x36\xea\x0e\x37\x58\xd3\x93\xed\xe3\xd8\xb6\x15\x60\xb6\x12\x5f\x1e\x2d\xaf\x3f\xb0\x27\x8f\xd0\x2b\xc2\xcb\xc9\x93\xd9\x8d\x6e\x91\x6c\xaf\x5f\x24\x5b\xeb\x18\xc9\x56\x7a\x46\xb2\xad\xae\x91\x3c\x42\xdf\x48\xb6\xd3\x39\x92\x55\x68\x33\x27\x64\x19\xdf\xfd\xa8\x1f\xc9\xe3\x84\xf3\xed\xd5\x90\x64\x07\x17\x2b\x1c\x3f\xc8\xec\xb4\x3f\xbd\x24\x89\xd5\x4d\xc2\xb5\xea\xa8\x27\x0f\x7d\x2e\xdb\xa9\x26\xc9\x8e\x4e\xc5\x65\xc6\x01\x5d\xd8\xa1\x94\x95\xe4\xe9\x15\x96\x0f\x4e\xc1\x0e\x1f\xad\xe1\xdb\x6a\xf4\x47\x68\x05\xc9\xa3\x34\x83\x64\x7b\xed\x20\x79\x2c\xb0\xef\x4c\x4b\xb8\xd3\xae\x80\x4f\xfa\x1a\xfc\xd0\x1e\xc1\x6d\x25\xdf\xc0\x60\x58\xe4\x2e\x4a\x5a\x99\xdb\xf7\xdf\x86\x89\x00\xc0\xfc\x1f\x52\x51\x5e\x2b\x23\xdd\x58\xbd\x76\xf8\x9b\x55\xdf\x05\xdd\x24\x4f\xa0\x32\x03\x1b\x1a\xbf\xa0\x85\x61\x72\xd0\xe9\xd7\xea\x20\xcc\x5c\x56\x59\xc8\x11\xb9\x83\x84\x59\x86\xbc\xa1\x66\x82\x2b\x72\x74\xcb\x96\x47\xa3\x28\xf5\x40\xb7\x85\x37\xfb\xe8\x52\x1c\x21\xeb\xb4\x76\x2f\x3d\x9f\x25\x45\xb1\x24\x47\xf0\xdb\xd1\xae\x79\xd4\x2d\xf8\xa3\x30\x35\xeb\xb6\xec\xc7\x56\xd7\xe9\xb1\x0a\x6e\xd2\x81\xbe\xaf\xd8\x72\x5b\x47\x84\x24\x98\x7f\xd7\x19\xd1\x31\xd4\x00\x66\x46\x76\xf7\x7c\x13\x66\x66\x05\x96\xc9\xea\xa8\x50\x5d\xc5\x8b\x22\x61\xb4\x1b\x46\x34\xbd\x65\x60\xe1\x91\x90\x5a\x8e\xe7\x0c\x93\xe9\x21\xe8\xc0\x48\x06\x64\x1a\x05\xe9\x71\x49\x21\xe5\x6d\x53\x39\xd0\x73\xd9\x24\x13\x86\xe4\x22\x93\xa5\xf3\xa9\x47\xbf\xd6\x91\x4d\x30\x77\xcb\x96\x63\xcc\x81\x89\xcf\x61\x60\x20\x01\x56\x35\xf1\x43\x47\x30\xff\x81\x50\x45\x7e\x00\xa6\x52\x90\x13\xf8\xf0\xf4\x87\x14\x97\x02\xbf\x81\xa8\x7d\x95\x0d\x60\x16\x66\x88\xa5\x9d\xa0\x5a\xdd\xdb\x87\x76\x2c\x61\x68\x97\x29\x2e\xdc\x8c\x63\xb4\x37\x9c\x50\xa1\xf9\xa9\x57\xd2\x4c\x08\xc0\x01\x70\xc9\xb9\x14\xc7\x1a\xe7\xe7\xf0\x9a\xeb\x20\xc5\xeb\xc0\xef\x7b\x6b\xf1\x43\x6b\x01\x1e\x79\xce\xa6\xb4\x29\xb4\xcd\x46\x6a\x50\x1f\x50\xfa\x84\x11\x3e\x3a\x7b\x89\x65\xf8\xa7\xb2\xbe\xe1\x79\xce\x04\x84\x38\xb8\xe9\xdf\x48\x17\x10\xd4\x82\xbb\xc1\x6c\x9d\x33\x4e\x19\xf6\xac\x50\x72\xb4\xda\x63\xe6\xb3\x95\x9a\x5b\x74\x37\x67\xa2\x3b\x00\xe1\xca\x6c\xaa\x62\x09\x4c\xed\x41\x5c\x7f\x1e\x8f\xf3\xb6\x76\xbd\xe2\xea\x09\xf0\xde\xea\xa0\x03\xea\x8b\x42\x7d\x42\xea\x01\xfb\x7d\xb6\xd8\x6f\x0d\xe8\x77\x81\x00\xd7\x3a\x1d\x70\x60\x32\x0e\x14\x2e\x0d\xf2\x13\x5b\x01\x50\x31\x86\x5e\xac\x6e\x4a\xaa\xd5\x99\x41\xa0\xd7\x76\xfa\x32\x17\x06\x07\x78\x16\x7a\xc8\x9d\x31\xb4\x11\x36\x19\x3c\x98\x43\xdb\x61\x11\x5f\xac\xda\xdc\x13\xc6\x74\x82\x8b\x14\x4c\x81\x8a\x9d\x79\xff\x8a\x60\x18\xe8\x35\x65\x29\x10\x0a\xd7\xaa\x0f\x45\xbe\x1a\x1c\xd7\xf6\x0d\x7a\xfd\x92\x51\xa1\xc8\x91\x73\xf1\x38\x56\xed\x1b\x47\x49\xf7\xcd\xa5\xbe\xf4\x63\x43\xa6\xe3\x30\xdd\x65\x3b\xf4\x60\x47\x19\xec\x28\x61\x1b\xec\x28\xeb\x93\x18\xec\x28\xf7\xb5\xc1\x8e\xb2\xd5\xf8\x83\x1d\xa5\xdb\x06\x3b\xca\x60\x47\x19\xec\x28\x83\x1d\x65\xb0\xa3\x0c\x76\x94\xd8\x8f\x76\x61\x47\x69\xc5\xa0\x43\xc8\xd1\xa1\xc8\x6a\xfd\xc4\xb1\xca\x16\xd5\x3c\x6b\xa3\x42\xdd\x5b\xf8\xaf\xa7\x12\xaa\x43\x31\xf8\xb1\x22\x75\x28\xa0\xaf\x69\x30\x92\x25\xea\x7b\xe5\x67\x2f\x61\xaf\x8d\xb1\x23\xd1\xfa\x67\xae\x5c\x0a\x1c\x58\x0f\x71\x1d\x3e\xba\x50\x16\x5b\xb8\xef\x86\xb5\x71\x2e\x39\x39\x71\xba\xd6\x53\x73\xe0\x42\xea\xee\x8f\x42\xf3\x71\xfb\x86\x77\x10\x06\x95\xb0\xcb\xe6\x96\xb2\xe9\x4e\x66\x69\x75\x8f\x62\xa5\xec\x65\x0b\x6d\x06\xff\xb3\xba\x33\x5b\xae\x6c\x25\x35\x08\x4d\xab\x1b\x21\x0c\x7b\x24\x85\x8d\xe2\x48\x98\x09\x92\x16\x54\xf3\xda\x5b\x89\xc2\x14\xac\x11\x24\xaa\xf6\x98\x82\x00\x00\xaa\xb1\x4c\xa2\xcd\xb9\x24\x85\x55\x92\x9b\x27\xd8\x4f\xc2\x24\xfc\x85\x85\xfd\xe4\x7e\x45\x29\x77\xf5\x02\xee\x68\x38\x59\xae\xe0\x1c\x69\x51\xc8\xbb\x14\xfa\x94\x78\x23\xb6\x4e\x0e\x18\x0d\xbd\x77\xc9\x59\x04\x57\xbc\xe5\x63\x79\xf5\x21\xd5\xe0\x83\x6d\x48\x35\xf8\x3c\x52\x0d\x06\x76\xd0\x30\xe7\x60\xff\x5e\x41\x4e\xc2\xbd\xe6\x1c\x24\xe4\x6f\x73\x06\xb7\xa8\x66\x68\xbc\x6c\x0a\xcd\xab\x36\xca\x58\xe1\x09\x15\x28\x52\x4f\x6d\x34\x60\xf7\xf6\x9a\xd9\xd0\x6c\xde\x3b\xd4\xca\x2d\x87\xf1\x20\x6a\x59\x01\x36\xc5\x88\x39\xd0\xbf\x63\xa2\x3f\x27\x6b\x63\xd8\x21\x7f\xea\x68\xaa\x28\xfc\xf7\xc6\x15\x0c\x0d\x6c\xe0\x8a\x9c\x18\xea\x58\x2c\xad\xd5\xb8\x83\x08\x3b\x64\x35\x62\x00\xd4\x83\x2d\x98\x63\x50\x67\x7c\xc1\x44\x4b\x7d\x4f\xd4\xe9\xa9\xe3\x89\x57\xf9\x87\x88\xde\x1f\xc3\x61\xc4\x60\xed\x54\xce\x60\x85\xde\x47\x8c\xb0\x81\x23\xf8\x53\x40\x65\xff\xdc\xcf\x13\x44\x0c\x82\x57\xda\x85\x67\x06\x07\xdd\xf2\x02\xbd\xbd\xec\x31\x0a\x2e\x25\xd4\x2a\x4d\x2b\xbe\x45\x88\xd5\xb6\x99\x32\xf7\x1b\x5a\xb5\xd7\xb0\xaa\xcf\x27\xa1\xe5\x13\x9b\xff\x3e\x83\x6c\x4c\xcf\xc4\xdc\x37\xa4\x63\xba\xaf\x3d\x55\x3a\xa6\xbd\x9b\xf3\x3e\xbb\xac\x4c\x07\x35\xdf\x1d\xc6\x74\xf7\x99\x65\x65\x7a\x12\x53\xdd\x33\xcf\xcf\xb4\x3f\x13\xdd\x90\xfc\xe8\x69\xf2\x4b\xa6\x9a\xe1\xb6\xbf\x55\x4f\x6a\x7e\x7b\x52\xd3\xdb\xd3\x9b\xdd\xb6\xe2\x55\x1e\x6b\x6e\x4b\xbe\x26\x8f\x35\xb3\x6d\xe3\xb2\xbf\x1d\x3c\x1f\x2e\x44\xe9\xc0\x3e\xfa\xcf\x23\x34\xe9\x89\x1c\xf3\x9f\xca\x29\x7f\xbf\x0e\xf9\x4f\x10\x8a\x74\x90\x30\xa4\x54\xb2\x9f\x44\xec\x1f\x87\xbb\xb6\xa1\xc8\x5b\x86\x1c\x6d\x89\xbf\x0e\x19\x6a\xf4\x33\x40\x61\x5b\x85\x18\x0d\x58\xec\x89\xb0\xd8\xee\x42\x8a\x0e\x15\x4e\xf4\x33\xc3\x65\x5b\x86\x0e\xed\x4c\xbb\xbd\x9f\x90\xa1\x43\x87\x0b\xed\x21\x54\xe8\x29\xc2\x84\xf6\x10\x22\x34\xd8\x04\x22\xdb\x60\x13\x88\x6d\x83\x4d\xe0\xbe\x36\xd8\x04\x56\xdb\x60\x13\x18\x6c\x02\x83\x4d\x60\xb0\x09\xac\x0f\x38\xd8\x04\x06\x9b\x40\x5c\x1b\x6c\x02\x87\xb1\x09\xa4\x86\xdd\x6c\x07\xcb\x4f\x13\x6e\x73\xd8\x50\x9b\xdd\x87\xd9\x3c\x61\x88\xcd\xcf\x4c\xe1\x92\x1c\x4e\xb3\x1d\x98\x3f\x97\x30\x9a\xe7\x11\x42\xf3\xe4\xe1\x33\x8f\x0d\x9d\xd9\x4d\xd8\x4c\x02\xb4\x6f\x09\xe7\x95\xcc\xcf\x84\xe6\x8f\x2d\x7c\x14\x02\xe0\x7d\xd5\x8f\xe8\x42\xf2\x9c\x54\x8d\xb6\x05\x57\x86\x0a\x48\xbd\x30\x70\x98\x0a\x48\x9d\xc3\x1b\xca\x20\x3d\xd4\x9e\x4d\x19\xa4\xfb\xce\xec\x80\xb5\x90\x54\x73\xa3\x6b\x9a\xe9\xa4\x82\x48\xce\xe0\x38\x94\x44\x5a\x6b\x43\x49\xa4\xa1\x24\xd2\x50\x12\x69\x28\x89\x34\xa4\xf2\x1b\x52\xf9\x85\xed\xd9\xd8\xf1\xc8\x90\xca\x2f\xf1\xd3\x21\x95\x5f\x5f\x1b\x52\xf9\x0d\xa9\xfc\xee\x1b\x7d\x48\xe5\x37\xa4\xf2\x4b\x1b\x78\x48\xe5\x47\x86\x54\x7e\x43\x2a\xbf\xcf\x38\x95\xdf\x50\x12\xe9\xb3\xa8\x0b\x32\x14\x05\x49\x18\xfb\x79\x15\x05\x19\x4a\x22\x3d\x38\xc8\x50\x12\x69\x40\x7d\x43\x49\xa4\x9f\x2d\xf6\x1b\x4a\x22\x45\x0c\x32\x94\x44\x1a\x4a\x22\x3d\xd8\x86\x92\x48\x83\x1d\x85\x0c\x76\x94\xc1\x8e\x92\xfa\xd5\x60\x47\xb9\xbf\x0d\x76\x94\x94\x36\xd8\x51\xa2\x47\x1f\xec\x28\x83\x1d\x25\x6d\xe0\xc1\x8e\x42\x06\x3b\xca\x60\x47\xf9\x8c\xed\x28\x43\x49\xa4\xa1\x24\xd2\x50\x12\xc9\x8f\x3c\x94\x44\x1a\x4a\x22\x41\x1b\x4a\x22\x45\x8c\x30\x94\x44\xfa\x5c\x4b\x22\x75\xc2\x82\x3e\xdf\xba\x48\xe9\xcb\x18\x8a\x23\x0d\xc5\x91\xee\x69\x43\x71\xa4\xa1\x38\xd2\xa6\x36\x14\x47\x1a\x8a\x23\x3d\xd0\x86\x44\x88\x91\x6d\x48\x84\x18\xdb\x86\x44\x88\xf7\xb5\x21\x11\xe2\x6a\x1b\x12\x21\x0e\x89\x10\x87\x44\x88\x43\x22\xc4\xf5\x01\x87\x44\x88\x43\x22\xc4\xb8\xf6\xf4\x06\xb8\xff\x1d\x89\x10\x87\xe2\x48\xcf\xb2\xb2\xc8\x50\x56\xa4\xa7\x3d\x9f\xb2\x22\x43\x71\xa4\x4e\xe7\x43\x71\xa4\x01\x85\x0d\xc5\x91\x3e\x3b\x2c\x36\x14\x47\xda\xd0\xf9\x50\x1c\x69\x28\x8e\x34\x14\x47\x1a\x6c\x02\xbd\x6d\xb0\x09\x0c\x36\x81\xb0\x0d\x36\x81\xd5\x36\xd8\x04\x06\x9b\xc0\x60\x13\x18\x6c\x02\xeb\x03\x0e\x36\x81\xc1\x26\x10\xd7\x06\x9b\xc0\x50\x1c\x69\x28\x8e\x34\x14\x47\x82\x36\x14\x47\x1a\x8a\x23\x0d\xc5\x91\x36\x7e\x0c\x8a\x56\x94\x6c\xee\x83\xec\x58\x58\x3e\x6b\xbb\xb2\x1c\x7c\x23\x94\xae\x9b\x4c\x37\x35\xcb\xe1\xc0\xf0\x30\x0d\x63\xa0\xb4\xac\x9d\x55\x00\x2a\xcd\xbc\x61\x55\x21\x97\x86\xda\x8e\xc8\x95\xcc\x47\xe4\xec\xea\xf2\x9a\xd5\x0b\x9e\x31\x07\x7d\xdf\x58\x9a\x7e\xff\xbe\x7d\x5c\x56\x3c\xa3\x45\x01\x1a\x8b\x76\x36\x25\x5d\x3a\x5d\xf2\xcd\x92\xb0\x4f\x9a\xd5\x82\x16\x44\x4b\x59\xa0\xf9\xc5\x4c\x06\x10\x62\xcd\x74\xcd\xd9\x82\x11\x5a\xdf\x70\x5d\xd3\x7a\x49\x4a\xa6\x69\x4e\x35\xbd\x7f\xd4\x6f\x15\x0b\x63\x34\xb4\x24\x55\xcd\xc6\x78\x03\x3a\xf3\x00\xd8\xfc\xe6\xeb\x77\xee\x7e\xd3\x3c\x77\x01\x09\x0e\xc2\xaf\x9b\x1b\xbf\xdb\xc7\xf7\x73\x5b\xb9\xdf\x2d\x35\x02\xf0\xb4\x2a\x9a\x8a\x2b\xdc\xb3\x7b\x25\xd2\x08\xb6\x24\x8d\x09\xe9\x85\x4f\x26\x16\x8f\x05\xad\x0b\xb1\xe8\x6a\xf6\x98\x58\xf0\x5a\x0a\xe0\x23\x17\xb4\xe6\xf4\xa6\x60\xd6\x92\xe6\xed\x2b\x96\xb7\x63\x0f\xc0\xcb\xb9\xb7\x33\x60\xb0\xcb\xbd\x57\xb2\x9f\x9e\xf5\x50\xb0\xce\x4a\x2f\xc4\xe2\x3b\xda\x55\x33\x88\x8d\x4b\x22\xf6\x05\xb3\x24\x4a\xce\xfb\x17\x14\xc5\x74\xc6\xa8\xc3\xc6\x80\xe1\xef\x7d\x21\x4e\x69\x65\xba\x78\x98\x5e\xa6\xd1\xc9\xf7\xb4\x6c\x2b\x68\x6d\xd8\xae\x3e\x84\xfa\x0e\x39\x7e\x65\x81\xc8\x10\x84\xaa\xe6\x42\xc3\x56\x9f\x5d\x9f\x5f\x5e\x92\x6c\x4e\x6b\x9a\x69\x56\x2b\xc2\x3e\x65\xac\xd2\xe4\xf8\xff\x77\xfc\x70\xbf\x91\x08\x1a\x70\xdf\x2e\x77\xe3\x3b\x07\x24\x50\xde\x88\x09\xc3\xd9\xfd\xea\xe4\xbb\xb3\x0f\xff\xf5\xfe\xec\xdd\xc5\x29\xc8\x2c\xec\x53\x45\x45\xce\xfa\x78\xd0\x46\xb9\x10\x9f\xaa\x66\x0b\x2e\x1b\x55\x2c\x3d\x09\xdf\x7c\xd7\x56\x2f\x99\xc1\x3f\x3d\xa3\x98\xfd\xb6\xe8\x69\x73\xa7\xa0\x67\xa1\x2d\xf4\xb7\x66\xc0\x9a\x29\x59\x2c\x58\xde\xa7\x5e\x81\x60\x4b\xb7\x1d\xad\xa1\xb5\x6a\xb4\xd3\x22\x39\xdb\x69\x23\xb2\x39\x15\x33\x96\x4f\xc8\x1b\xd9\x98\xd1\x7e\xf5\x2b\xd8\xb2\x9a\xe5\x4d\xd6\xbb\x63\xa8\x02\x44\x89\xf9\x57\x23\xc7\x61\x18\xba\xae\xb0\x7a\x9a\xca\x68\xe5\x36\x35\x3c\x15\xb5\x14\x9a\x7e\x7a\x1d\x53\x87\xed\xe8\x57\xc1\x87\x47\xae\x2e\x9e\x34\xd3\x43\x6e\x0c\x57\x54\x40\x49\xb3\x82\x1c\x85\x6f\xf7\xf5\x7d\x61\xe6\xc7\xf2\x10\x76\x30\xb4\x91\x2d\x58\x0d\xda\x27\x0b\x39\x23\x52\xb3\x19\xad\xf3\x82\x29\x08\xaa\xbb\x9b\x33\x28\x52\x88\xa2\x34\x1e\x54\xcf\x58\xcc\x6b\xca\x84\xec\xd5\x60\xbe\x41\x33\x36\x20\xf3\xa3\x9e\x65\xa4\xdc\xbc\xb7\xb5\xec\xa9\x71\xd5\xb9\x7d\xd7\x10\xb5\xe3\x8d\xfd\x9b\xc0\xf5\xd8\x5a\x49\x26\x21\x19\x51\x86\xfd\x9d\xb6\x46\x78\xf3\x3c\xc2\x10\x1f\xad\x2c\x88\xb7\x16\x64\x52\x4c\xf9\xec\x1d\xad\xbe\x62\xcb\x0f\x6c\x9a\x18\x40\x88\x9c\xbf\xd5\x7f\x03\xb2\x34\xe4\x07\x3b\xec\xe7\x5b\xf7\x18\x2f\x16\x63\x93\x49\x33\xa9\x44\x1b\x52\xd6\x2a\xd7\xa1\x0c\x62\xe5\x84\x9d\x73\xf3\x24\x8a\x82\x6e\x9c\x5c\xb4\xc4\x19\x52\x54\x8b\x0a\xa2\x6d\x0c\x1f\x5b\x96\x97\x2b\xc2\xa6\x53\x96\x69\xbe\x60\x85\x0f\x65\xb6\x15\x34\x6d\x68\xf1\x0d\xcd\x6e\xef\x68\x9d\x2b\xa8\xc9\x48\x35\xbf\xe1\x05\xd7\xcb\x98\x7a\x97\xd8\xac\xd4\x64\xa3\x9f\x9d\x62\x5e\x28\x4d\x01\x7d\xb9\xca\x8d\x66\x87\x51\xae\xa0\xce\x32\x8e\xb7\xd1\xc5\x0d\x47\x0f\x07\xc5\x03\x33\x56\x1b\x02\x57\x2c\xc9\x5d\x2d\xe3\x65\xbf\x77\x12\x02\x86\xa7\xf2\x35\x99\x6b\x5d\xa9\xd7\x2f\x5e\xb4\xb2\xd9\x84\xcb\x17\xb9\xcc\xd4\x8b\x4c\x0a\xc3\x63\xa8\x17\x72\x61\xe8\x22\xbb\x7b\x71\x27\xeb\x5b\x2e\x66\x63\xb3\x80\x31\x5e\x20\xf5\x02\x84\xed\x17\xbf\x84\xff\xed\x03\xca\x88\x73\x1e\x7a\x4d\x8e\x8e\x22\xde\x97\x15\x8a\x07\x5b\x40\xe6\x35\x68\x10\x96\x1d\x32\xe2\x11\x8b\x21\x11\x5c\x2b\xb8\x57\xce\x0a\x62\xb9\x90\x84\x65\xdf\x48\x59\x30\xda\xef\xce\xf5\x18\xd5\x27\x80\x7d\x3a\x56\x8d\xba\x97\x2d\xea\xc5\xcb\x65\xaf\x67\x25\xf3\xd7\x44\x35\x55\x25\x6b\xad\x5a\xa9\xd4\x00\xc5\xa8\xfb\x27\xe8\x65\x46\xe4\x07\xff\x10\xdd\xc6\xbe\x3f\xfe\xd3\x57\x17\xff\xfe\xe7\xe3\xbf\xff\x10\xfe\x16\xc8\xa7\xc1\x0b\x11\xd3\x54\x15\xcb\x26\x42\xe6\xec\x3d\xcc\x00\xfe\xb4\xdc\xdd\x59\x96\xc9\x46\x68\xfb\x83\xa6\xba\x51\x93\xb9\x54\xfa\xf2\xca\xff\x59\xc9\x7c\xf5\xaf\x08\x23\xea\x1e\xe9\x0a\xec\xf5\x15\xd5\x11\xa9\x01\x92\xa8\x0b\xad\xf8\x77\xac\x56\x11\xc9\x30\xb0\x75\xe0\xc5\x7e\x19\x96\xdc\x2d\x29\xfc\xf3\xad\x9b\xae\xc1\xbd\x77\x35\xd7\x1a\x7c\x1a\x6d\x36\x02\x39\x1d\xb9\x2b\x8d\x8c\xd4\xe2\x55\x92\xe2\x36\x1a\x73\xf8\x5d\xdb\x62\x71\x30\x7b\xbb\x32\xaf\x39\xb1\x1e\x9d\x6b\xfa\xc6\xb3\xab\x4b\xb2\xc0\xdd\xd8\xc3\x42\x1e\x87\x0a\x0a\xb6\x15\x8b\x15\x85\x0c\xde\xfa\xde\xed\xd6\x04\x2c\x99\x65\x4c\x61\x06\x31\x9b\x62\xeb\xb5\xa2\xcf\xc7\x85\x58\x98\xbe\x15\x99\x32\xaa\x9b\x9a\x91\x19\xd5\x2e\xb3\x08\x13\x86\xbf\x8d\xd0\x4f\x3e\x31\x9f\x07\xf5\x74\x63\xae\xac\x79\x71\x21\x8b\xa6\x04\x64\xf5\x2c\xf8\xc7\x04\xa3\x00\x32\x9a\x86\x23\xb0\xd7\xc2\x1f\x3a\x39\x33\x97\x7e\x01\xae\x24\xf8\x0e\x96\x4e\x5f\x80\xb5\x35\x4c\xb2\xa2\x34\xad\x75\x82\xee\xda\xfb\x8d\x3b\x2d\x80\x1d\x9e\x12\xcc\x67\x80\x45\xd1\x77\xae\x4b\x69\x1b\x66\x12\x22\x67\x45\x35\x07\x43\xdf\xcc\xf3\xa9\x1b\x21\x77\xe4\x3d\xcb\x14\xff\x27\x48\x5e\x05\x2f\xb9\x46\x76\xf1\xd5\x6f\xff\x18\x4c\x66\x2f\x88\xf0\x11\x2c\x51\x34\x24\x6c\xe2\x9d\x0c\x18\x3c\xc0\x36\x79\xcf\x15\xf7\x5e\xbc\x4b\x5b\x2e\x99\x15\x5f\xc1\xaf\xc5\xf4\xd2\x42\xdf\x82\xd6\x4e\xba\xad\x9a\x9b\x82\xab\x79\xbc\x69\xfc\x72\xea\x77\xcb\xf4\xa1\x18\x38\x06\xe8\xba\x61\xde\x06\xda\xe2\x7d\xb3\xa6\x95\x99\x24\x18\xb1\x36\xea\x54\x3b\x29\x9c\x5a\x75\xf1\x15\x18\x3a\xbd\x3e\x4b\x4d\x7e\xf1\xa8\xf5\x4c\x69\xa1\x76\xbb\x20\x23\xce\xd4\xb5\xac\xbd\x0a\xab\x66\xba\xa9\x45\xeb\x0b\x74\x25\x73\x92\xd5\x0c\x23\x3f\xf6\xc0\x30\x93\x50\x50\x80\xf5\x45\x7c\x52\x6d\xc7\x1c\x24\xa1\x47\x33\x46\x88\x1f\x11\xd5\x23\xe2\x43\xcd\x5c\x37\x56\x24\x96\x60\x9a\xf6\xce\x5e\x28\x9f\xcb\xc8\x1c\xa9\xcb\x6f\x65\xa1\x05\x3a\x3d\x9e\x4c\x8e\x71\x26\xb2\x46\x74\x8b\x52\xa8\x79\xbe\x17\x94\xd3\x12\xb4\x2d\xd5\x17\x22\x10\xfe\xed\x96\x95\x86\x6f\x77\xcb\x72\xea\xcb\x14\x1e\xe3\x80\x8c\x97\x4b\xad\xf3\xf6\x20\xb2\x98\x1b\xcd\x6d\x98\x47\x14\xaf\xd1\x77\xc8\x27\xfa\x41\xc2\xa3\xac\x39\xf1\xc7\x86\x29\x1d\x23\xb4\x9f\xe0\x67\x93\xac\x6a\x46\xb6\x8b\x49\xc9\x4a\x59\x2f\xfd\x9f\xac\x9a\xb3\x92\xd5\xb4\x18\x2b\x2d\x6b\x3a\x63\x23\x3f\x00\x7e\xe6\xff\xc2\x0f\x3b\x53\x58\xff\x1a\x2d\x04\x59\x53\xd7\x4c\xe8\x62\xe9\x64\xcb\x27\xe6\xfb\xdc\x3e\xee\x98\x49\xf3\xc7\xb5\xe5\x7d\x39\xf6\xc6\x37\xd4\xc9\xf9\x55\x81\x8a\x18\x6f\x8f\x1a\xb5\x84\x00\x6c\x00\x48\x28\xd5\xf1\x3e\x6e\x7f\xce\x17\x5c\x6d\x15\xf9\x73\xed\x3d\xa8\xc0\xdd\xa8\xd1\x55\xa3\x6d\xfa\x48\x2f\x55\x7c\xaa\xa4\x02\xeb\x80\xcf\x5e\xd5\x11\x27\x5f\xc5\x68\x89\x00\xf7\x6b\x56\x8b\xd7\xe4\x3f\x4f\xfe\xe3\x37\x3f\x8d\x4f\xff\x72\x72\xf2\xfd\xcb\xf1\xbf\xfe\xfd\x37\x27\xff\x31\x81\x7f\xfc\xfa\xf4\x2f\xa7\x3f\xb9\x3f\x7e\x73\x7a\x7a\x72\xf2\xfd\x57\xef\xfe\xfa\xf1\xea\xe2\xef\xfc\xf4\xa7\xef\x45\x53\xde\xe2\x5f\x3f\x9d\x7c\xcf\x2e\xfe\x1e\xd9\xc9\xe9\xe9\x5f\x7e\x15\x35\x3d\x2a\x96\xdf\x44\x60\x0d\x6c\xe3\x2d\x72\x72\xb6\x5f\x6d\xeb\xac\xc4\x85\x1e\xcb\x7a\x8c\x9f\xbf\x06\x26\x29\xa2\x13\x77\x6c\xdb\xc0\xf9\x07\x77\x5b\x5b\x8c\xe7\x89\xe7\x1e\x00\xf9\x31\x04\x40\xb1\xac\x66\x7a\x57\xe6\x0d\xec\xcd\x71\x83\x2b\x6e\x6f\xcf\x5d\x12\x3e\xa4\xc5\xc3\xa7\x12\x84\xfd\x6a\x39\x2b\xc3\x6e\x4d\x5a\x86\x89\x12\x94\x4b\xed\x7b\xb7\x2c\x32\x16\x75\xb0\x90\x0c\x16\x92\xc1\x42\xd2\x95\xf2\xaf\xf1\x0e\x3d\x73\xf3\x08\x13\x8b\x87\xac\xec\x09\xce\x5e\x6f\x21\x2f\x70\xe8\xf0\xe5\x98\x6b\x2d\x49\x25\xab\xa6\xa0\xfa\x1e\x1f\x92\x04\xef\xaf\x7e\x1d\x97\x47\x65\xe7\xff\x75\xf9\xe6\xe2\xfd\xc7\xcb\xb7\x97\x17\x1f\x26\xe4\xac\x28\x42\xb5\xdb\xfd\x10\xd7\x4a\xea\xc8\x59\x13\x8a\xae\x5e\xa0\x9f\xbb\x73\x0a\x95\xd6\x87\x86\xab\x56\x51\x87\xd9\x8e\x91\x40\x59\x0f\x0a\x2e\x7c\xce\xe3\x7b\x87\xf4\x0c\x9b\x8f\x75\x58\x4b\x73\x8e\x9e\xb4\x4a\xbb\x65\xc2\x2c\x35\xbd\x05\xef\x9f\x8c\xe5\x4c\x64\x0f\xc8\x7a\xdf\x61\xfc\x84\xdb\xb3\x1b\x23\x66\x80\x83\x1e\x62\x14\x92\x37\x55\xc1\x33\x73\x3e\x5e\x23\x19\xdd\xf7\x65\x59\x36\xfa\x21\x4f\xae\x9d\xfb\xe1\x19\x48\xb3\xbe\x1e\x81\x3b\x1e\xd0\x37\x2f\xee\xf9\x58\x3f\x6f\xa8\x04\x67\x16\xbc\x94\xf7\x1f\x7e\x14\x4b\x10\x47\xb8\xbd\x2f\x47\x2f\xa7\xb3\x46\xb1\x5b\xe3\x6a\x97\x52\x3f\xd8\xcb\x1e\xdc\x51\xe2\xe8\x74\x3a\x8d\xde\x96\x3e\x1f\x92\x36\x1f\x90\x2e\x6f\x4f\x93\x9f\x8e\x1e\x27\xd1\xe2\x78\x3a\x1c\x4f\x83\x13\x3c\x14\x52\xe9\x6e\x3c\xcd\xdd\x56\x12\xaa\x6a\x36\xe5\x9f\x76\xe9\x58\xfa\x8d\x53\x62\x68\xf6\x49\x5b\x77\xf6\x8a\x09\x1f\xfc\xe4\xf4\x86\xe0\xb7\xfe\xd9\xf9\xe1\xa2\x3c\x92\x8e\x48\xaf\x37\xc9\x3b\x03\x16\x1d\xb0\x68\xa7\x0d\x58\xb4\x57\x8a\x79\x4e\x28\x54\xc8\xbc\x37\x89\x52\xec\x6d\x7a\x1f\xf4\xb5\x92\x5b\x05\x8d\x50\x6e\xe1\x60\xea\x74\x9e\xc5\x95\x04\x88\x9e\x72\xdd\x06\xc8\xdd\x0f\x68\xd7\x1b\x7a\x84\xc8\x37\xfb\xe5\xb1\x72\x39\xc2\x56\xfa\x5f\x29\x57\x83\xa1\x48\x0f\x8f\x95\x08\xca\xc8\xa3\x36\x98\x4b\xed\x05\x55\x8a\xcf\xc4\xb8\x92\xf9\xd8\x8c\xf2\xe2\x41\x7e\xfe\x90\xd1\x48\x5e\xa5\xfd\xd8\xe3\xfe\xe0\x0d\x3e\x81\xe0\x60\xd0\x5a\xa3\x59\x60\x0d\xf2\x76\x02\x97\xa2\x2a\x42\x30\xed\x15\x83\x1e\x79\x38\x25\x15\x74\xc6\xc6\x76\xb2\x63\x3f\xd9\xb1\x9f\xdb\x23\xce\x2b\x86\x98\x65\x05\xe5\x0f\xc7\xfb\xa6\x90\xb0\x73\xe8\xcd\xd6\xfd\xf1\x01\xd9\x2b\xd5\x37\x9c\xbc\xca\x05\xba\x2a\xba\x9f\xf0\xe3\x87\x6d\xf0\x70\x59\x7c\x02\xc5\x0d\x07\xf9\xe0\xd7\x01\x8d\xcc\x81\x8f\x52\x78\x01\x1f\x26\x44\x6f\x96\x82\x96\x3c\x73\x50\x76\x56\x40\x70\x2d\x97\xa2\xe3\xf6\x12\x3f\x34\x57\x84\x7b\xb0\x22\x97\x9a\x64\x54\xa0\xe5\xd2\xba\x41\x18\x84\x11\x7a\x3f\x3c\xb0\x1d\x51\xc1\xdd\x11\x21\xdd\x9d\x43\xfe\x10\x1e\x48\x18\x97\x22\x05\x23\x4c\xe8\x1a\x32\xdd\x5e\xc9\xdc\x90\x96\x49\xe7\xed\x1e\x97\x9e\x68\x3e\x2c\x56\x2f\xdf\x13\x1c\x47\x9e\x0f\x4b\x17\x10\x88\x90\x73\xef\x6c\x69\x25\xf3\xc9\x86\x2b\x11\x5f\xc2\xe8\x4a\xe6\x36\x06\x5c\x77\xe0\xcd\xdc\x16\x00\xb5\x92\xde\xba\xc8\x6c\x6f\x54\xa2\x0b\xca\x8b\x88\xe0\x21\x02\x29\x47\x15\xcf\x19\xa1\x31\xb8\xd3\x4f\x2c\x9e\x1d\xb2\x26\xf2\x7d\x1c\xc2\x07\xec\xda\x25\xda\x82\xfd\xcf\xe6\x52\x31\x01\xf7\x8d\xba\xb1\x7d\xa1\x40\x07\xf6\x39\xe2\xc8\x18\x96\xf3\x72\x8a\x6c\xee\x88\xb0\x05\xab\x97\x1a\xca\x75\xb9\xa4\xae\xd8\x8d\x19\xbf\xa4\x79\xb0\xeb\x23\x22\x0d\x5f\x76\xc7\xa3\x9c\x78\x00\x4f\xe0\xfc\x54\x53\x68\xcf\x6b\xdb\xd9\xef\xec\x34\xd6\x03\xd8\x0d\x17\x77\xdb\x9b\xad\xb7\xf7\x42\xde\x17\x19\x5f\xd2\xea\xde\xaf\xd0\xeb\x62\x57\x44\xea\x6b\xf4\x0a\xc1\x4f\x6e\xac\xf1\xbd\xa4\x9f\x78\xd9\x94\x84\xa2\xdf\x8d\x9c\x6e\x60\x20\xa2\x92\x05\xec\x82\x1d\xd8\xc0\x06\xa8\xfb\xf8\x00\x12\x8f\x56\xd3\x53\xda\x3c\x53\xb7\x81\x28\x77\x81\x34\x37\x81\x04\xf7\x80\xad\xdd\x02\x9c\x03\xd0\xae\x00\xd9\xa2\xb4\x35\x50\xe6\xa2\x17\x94\x1d\x7d\x7d\x18\x96\x2f\xa7\xed\x18\x5c\x11\x59\x72\xad\xad\x9f\x4d\x40\x01\x46\x84\xeb\x8e\x53\x8a\xbd\x60\x7c\x8a\x84\x86\x2b\xc2\x3e\x55\x05\xcf\x38\xf8\x36\x39\xff\xcb\x87\x19\x3d\x8f\x13\x6d\xaa\x2a\x5e\x56\x98\xac\x0a\x2e\xca\xd8\xf1\x90\x36\xec\xd3\xcf\xd2\xc6\x29\xb3\x4f\x19\x63\xb9\x9d\xc8\x70\x5f\x87\xfb\x9a\x7c\x5f\xd5\x8e\x54\x11\xa1\x1a\xa2\xcd\x9b\xe3\xd5\x11\xe6\x2a\x41\x4e\x1b\x54\x0c\x38\xe8\x7a\xe8\x62\x5e\xb8\xac\xea\x1f\x18\x98\xf7\xae\x99\x56\x36\x43\x0f\xf4\xf4\x90\x5e\x6d\x2d\x4b\xb3\xcf\xc4\xee\xd2\x5d\x51\x50\x1c\x06\x6f\xb4\xf9\x4d\x1e\x90\x92\xf5\x2a\x7b\x0b\xba\x0e\x56\x56\x05\xd5\xad\x26\xe4\x11\x89\x50\x62\x98\xf8\x94\x44\xc6\x4f\x9b\xba\x78\x3f\x62\x5b\x2f\x1b\xfc\x84\x29\x88\xb7\x4d\x3a\xbc\x07\x81\xb1\xdf\x89\x2b\x32\x79\x70\xbc\x60\x19\xe5\xe5\xb5\xef\x94\xc0\x09\x62\x58\x7c\xda\xdf\x74\x39\x6c\xcf\xa9\x7d\xf7\x95\xcc\x37\x61\xf7\x62\x13\xf6\xa6\xef\xdd\x81\x92\xf2\x1e\x3c\x0d\xef\x21\x13\xef\x26\xa5\xda\x4d\x49\x9e\x18\x9d\x38\x71\x7b\xaf\xdc\x94\x84\x89\x5b\x7e\x18\x99\x16\x37\x05\x76\x0f\x9c\xfa\xf6\xc0\xc9\x6e\x9f\x22\xbd\xed\xde\xe4\x87\x08\xd0\x4c\xb7\xec\x69\x59\xd8\xba\x3e\x71\x96\x9e\x8f\xed\xfb\xb0\x1d\xad\x13\x78\xd0\xd3\x61\xdc\xd2\x1e\x84\xec\x8f\x8e\xcf\x35\xd8\xa9\x9d\x34\xc0\xb8\xd6\x34\x9b\xdb\x24\xb5\xf8\x8b\x81\x04\xb1\x24\x06\x08\x34\x52\x72\x9b\x27\xf3\xa1\x73\x9e\x33\xa2\x6b\x5e\x15\x8c\xfc\xc9\x5f\x88\x11\xda\xf6\xff\x1c\xa4\x0a\x73\x49\x45\x5b\x60\xfc\x93\xfb\xd7\x9f\x1f\x99\xa1\x2e\x8e\xc9\xc1\x29\xed\x92\x57\xbd\x80\x1e\x09\x17\x39\x78\x30\x22\x2b\x84\x9b\x87\x83\x99\xad\x85\x75\x4f\x6c\x76\x4f\x4c\x95\x6b\x4d\xb0\xe0\xea\xd8\xbe\xdc\xcb\x3a\x80\x87\x67\xab\x9a\xf0\x1e\x0e\xfe\x0e\x33\xf2\x5e\x5e\x5b\xb3\xed\x88\x5c\x81\x76\xb8\x7d\x02\x77\xfe\xbd\xbc\xf8\xc4\xb2\x46\xf7\x38\xdd\x44\xa2\xff\x5e\x9e\x31\x6d\x3f\xbf\x6a\x19\x4a\xdc\x98\x0e\x43\xd9\x5e\xac\x90\xa5\x7c\x70\x63\x6f\xd9\xb2\x77\x57\x2d\x93\x60\x99\x59\xab\x1a\xf7\x30\xea\x88\x3c\xf2\x0d\xff\xc7\x99\xf2\xca\x1b\x2e\x70\x2a\x38\xb0\x3b\x67\x18\xdb\x9d\x87\x91\x40\x8a\x22\x62\x12\x91\xbb\x1d\xc7\xf1\xa6\x3a\x6f\xc5\x73\xba\x9e\x5e\xf4\x6d\xe9\x26\xfe\x16\x37\x70\x44\x2e\x7e\x6c\x68\x31\x22\x5f\x6b\xa4\x41\x7f\xd5\x93\x4e\x0e\x37\xf8\xb9\x37\x1b\x9d\xf5\x6f\x5e\x25\xa0\x77\xbc\xc8\x33\x5a\xdb\x20\x3b\xc0\x43\x44\x49\x6b\x8f\x05\x34\x98\xf5\x7a\xb2\x3b\x4c\xd8\x42\x91\x42\xa7\xde\x8a\xd6\x9a\x67\x4d\x41\x6b\x62\x2e\xfb\x4c\xd6\xbd\x11\x2a\x5f\x6b\xbb\x46\x52\xb1\x7a\x2a\xeb\x92\x88\xa6\x64\x35\xcf\xd0\x9f\xa9\xe6\xca\x90\x8f\x93\xda\x25\xda\xe8\xe4\xd6\xf8\x68\xc6\x6e\x31\xf6\xb9\xff\xc2\x1d\x99\x3a\xdd\x09\x54\xb5\xd7\xea\x9a\x65\x52\xe4\x3b\x95\xe6\x3f\xae\x76\xbe\xea\x36\x5d\xb1\x9a\x4b\x4c\x5a\xc4\x4b\xb6\x7a\xcf\x4f\x3a\x9e\x30\x7d\x02\xe1\xd4\x61\x5d\x8f\xe4\x46\xa1\x8a\xb6\x6b\xdc\xc6\x5a\x78\xa7\x01\xe5\xf3\x68\x67\x42\xbe\x5c\x3a\x5d\x71\x9f\x64\xc0\xb5\x4b\x6c\xa0\x98\x76\x89\x1d\x1d\x4e\xb0\x90\xd4\xe2\xb3\xa9\xac\x21\x61\xe2\x49\x2e\x31\xa0\x7f\xc1\x33\x7d\x3a\x21\xff\x7f\x56\xcb\x88\x8c\x98\x82\xcd\x30\xa8\xdc\x62\x18\xaf\x18\xab\x19\xb5\xe1\x02\x2f\xc9\x09\x74\x4a\x78\x59\xb2\x9c\x53\xcd\x8a\xe5\x29\xea\xc9\x18\x51\x4b\xa5\x59\x8f\x91\x30\x5e\xbf\x89\x31\xa0\xf0\xee\xef\xbf\x78\xe0\xcd\x3d\x64\x32\xb5\xd9\x12\xdb\x8d\x45\x97\xbd\x15\xe8\xf1\x39\xbe\x7b\x15\x0f\xf7\x0a\x8a\x61\x5c\x44\x9b\x65\xdd\x11\x09\x0f\x5b\xff\x30\x00\x4a\x49\xcd\x66\x80\x1f\xf0\xce\x3d\xf2\x76\x62\x90\xf0\x3b\xd9\x88\xfb\x8d\x31\x9d\x7d\xfb\xda\xea\x02\xbf\x0b\x3e\x4c\xcd\x71\xbc\x5b\xce\x34\x98\x49\x60\xfe\xa1\x98\x36\x00\x58\x41\x83\x58\xf1\xad\x36\x9a\x26\xc2\x6a\xbf\xc3\xbc\xc5\x30\x97\x9e\x44\x5e\x3b\xc9\x6e\xec\x07\xda\xe5\x55\xb8\x5a\x49\x65\x11\xe4\xd7\x75\xf5\x61\x83\x74\x0d\x2d\x04\xc3\x64\x58\x6e\xe3\x2f\xfb\xd0\x4e\x90\xba\xe2\xf8\xf5\x6e\xdc\xaa\x71\x37\x6a\x59\xd1\x19\x5c\xd6\x5d\x6e\xca\x6a\xdf\x24\x67\x9a\xd5\x25\x17\x4c\x91\xb9\xbc\xc3\xdf\x91\x2b\xa9\xec\x5b\x2c\x6f\x5d\x20\xe6\xb2\x77\x47\xb0\x16\x6c\x9b\xc9\x18\xb1\x07\x78\xae\xde\xd1\x25\xa1\xb5\x6c\x44\x6f\x5e\x04\x60\xe7\x3d\xe5\x78\xb7\x32\xe9\xf7\x52\x30\xef\x15\xd3\x47\x65\x3b\xa4\xed\x86\x69\x6a\x2e\xfc\xab\xc9\xab\x97\x51\x73\xf8\xc0\xb2\xa6\x56\x7c\xc1\x3e\x30\x9a\x7f\x63\x44\xff\x36\x2f\xcd\xe5\xf4\x4a\x2a\xc5\x6f\x30\x1d\x90\x61\xd0\x30\xd9\xd7\xfa\x84\x3d\xab\x0c\x33\x97\x35\x69\x84\x97\x55\x7a\x66\x61\xc9\x7c\x68\x9e\x35\x9d\xec\x86\xbf\x49\xcc\x2a\x0e\x7b\xb9\x62\x28\x72\xee\xee\x0e\x57\xed\x64\x5e\xb5\xdd\xec\x5d\x42\xfe\x3b\xbc\xd6\xd0\xf7\x18\x94\x38\x7c\x0a\xe6\xc3\x11\x3e\xba\xab\xb9\x66\x01\xdd\x3a\xc1\xb4\x43\xdd\xc3\xea\xd9\xf6\x6e\xce\x65\xe8\x20\x66\x3f\xfa\x1d\xb2\xeb\x55\x30\xdc\xe5\xce\xac\xc3\x78\x5b\x19\xc8\x39\x9d\xb7\xbb\x66\x31\x44\x8b\x2f\xe7\x54\xe4\x45\x2f\x1c\xfb\x15\x14\xcb\xde\x74\x50\xe0\xb6\xd0\x5e\x37\xd8\xc7\x51\xc8\xa4\xce\xa9\xe1\x2b\x81\x97\x04\x05\xb2\xc8\xfd\x0d\x0b\x0e\x2b\x75\x1c\x04\x06\x44\x59\x21\xd2\xb0\xd7\xfd\x0d\x57\xf6\x7a\x83\xca\x06\x28\xb7\xe5\x6f\x4b\xda\x5b\x8a\x25\x58\x7f\xbb\x99\x13\xcb\x5e\x6d\x18\xad\x45\x2e\x2b\xe3\x6d\x3b\xd6\xc8\xc0\x3b\xb2\xe4\x3e\x3d\x8d\x63\x7e\x5b\x84\x5d\x1b\xee\xa3\x64\xed\xc4\x7a\x86\x5a\x9d\xb6\x47\x81\x6b\x73\xde\x3c\x2b\x3f\xa9\x9e\x71\xfa\xa7\xdc\x95\x67\x50\xb3\xd7\xc9\x4f\xa6\x29\xc6\x0d\x47\x24\xd7\x5f\xc9\x0e\x36\x63\x02\xa4\x15\x50\x07\x3a\x8d\x96\x75\xe2\xa3\x4a\x8a\x18\x40\xeb\x39\x64\x83\x67\xfa\xc9\x07\x7e\xd6\x33\x18\xd0\x98\x13\x59\xaf\xdc\x06\x27\x80\x6d\xa0\x24\xa9\xb3\x07\xc2\xdc\xf6\x8b\x40\x15\x08\x5a\x66\x03\x5b\xe5\x83\x9c\xfa\xab\xb3\x9b\xa8\xb3\xe6\x66\xdf\xac\xe2\x86\xac\x67\x21\xc8\x1d\xab\xfb\xb9\xc6\x04\xfa\x70\x74\x44\x4e\xb0\x9f\x63\x45\x6a\x29\xf5\x6e\x88\xba\xdd\x9f\x8b\x4f\xd5\x4e\xb5\x61\x17\xb6\x8a\x41\x4c\x8a\xb8\x1d\x6d\xd6\x97\x6c\x4e\x17\x4c\x11\xc5\x4b\x5e\xd0\xba\x80\x14\xf1\xd7\xb8\x3c\x88\x85\xdb\x98\x94\x30\xa2\x86\x47\xa0\x7a\x0f\xe7\x19\x74\xb7\xcf\x73\x24\x6e\x0d\xe6\x88\x80\xde\xb8\x35\x99\x39\x96\x8d\x6e\x68\x51\x2c\x09\xfb\x94\x15\x8d\xc1\x97\x3b\x11\x96\xb7\x91\x93\x57\x45\xe4\xca\x46\x0c\x1c\x50\x40\xee\xea\x5e\x0d\xbf\x9a\x3b\x70\x02\x81\x18\xed\x37\x60\x8c\x81\xf0\x0b\x9a\x65\x4c\x29\x97\x4c\x61\x19\x26\x84\xf0\x6b\xf8\x5c\x6a\xfe\xd0\x3b\x75\x51\x50\xa5\x79\xf6\x65\x21\xb3\xdb\x6b\x2d\xeb\x9d\xea\x8a\x36\xf5\xbf\x52\x49\xe9\xec\x6f\xd7\x06\x79\xdf\x06\x19\xac\xac\x47\x68\x68\x21\xa3\x3d\x03\xdd\x36\x37\xac\x60\xfa\x58\x81\xfc\x48\x4a\x9a\xcd\xb1\x9e\x57\x8e\xa9\x50\x5d\x8e\x34\xab\x47\x7f\xf0\x88\xb0\xbd\x31\xb3\x84\x0a\x79\xaf\xcd\x1c\xd7\x97\x81\x8e\x6f\xf6\x1d\x4c\x33\x82\x1a\x2c\xb0\x4a\xba\x88\x3e\x2e\xc6\xba\x66\x7d\xec\xd4\xc6\x7d\x82\xd8\x58\x5b\xe4\x86\xd7\xe8\x72\x67\xe7\xcf\x6e\xd4\x24\x53\x7c\x42\xef\xd4\x24\x93\x25\x39\xbf\xbe\x24\x79\xcd\x17\xfd\xb1\x16\x89\xbe\xac\x36\xfb\xe0\x0b\x7b\xc3\x7f\x49\xef\x14\xc3\x89\xde\x98\x89\x42\x2d\xb6\x08\xdc\xb1\x53\xef\x2c\x9c\xcb\xe5\x9b\x07\x5f\x8c\xf7\xbc\x9a\xaa\x8f\x66\x8e\x3d\x6f\x6d\xe3\x8b\x83\x3d\x3b\x55\xe9\x94\x17\x0c\x55\xc0\x78\xb2\xdd\x5c\x9e\x00\xf4\x4b\xd9\x90\x3b\x8a\xd6\x14\x20\x60\x51\x51\xdd\xbc\x7a\x4d\x2e\x84\x6a\x6a\xd6\x5a\xeb\x56\x07\xdb\xc4\x92\xc3\x4d\xb1\x20\x2b\x66\x51\xea\x69\x6c\x17\x9f\x68\x59\x15\x4c\xbd\x26\x47\xec\x93\xfe\xe2\x68\x44\x8e\x3e\x4d\x95\xf9\x9f\xd0\x53\x75\x34\x21\x97\xa5\xf7\xe5\xe6\x62\xca\xea\xda\x07\x82\xe3\x07\x86\x25\xef\x48\x51\xfd\x63\x1e\x1a\x6e\x49\x9a\x17\x0e\x98\xa7\xfa\x35\x69\x64\x2b\x38\xf2\x9d\x3b\x50\x0a\x1e\x88\xdd\x00\xd1\xe5\xd4\xb9\xee\xa3\x5c\x65\x59\x78\x18\xd0\x76\x63\xc0\xc6\x8e\x63\x28\x4f\x1a\xa0\xbc\xf5\x79\x37\xc9\x8b\x9c\x2d\x5e\xa8\x9c\xbe\x1a\xc1\x54\x95\x8d\x3d\xef\xae\x8b\x2a\x72\x14\x57\x05\xe1\xda\x71\x6e\xa3\x70\x27\xda\x9e\x0c\x22\x76\x43\x82\x03\xce\xcb\x23\x10\x5d\xcc\xd8\x19\x15\xa4\x60\x74\x61\xc5\x39\x44\x19\x4b\x34\x30\xf4\x72\x58\x29\xc6\x1a\xd2\x35\xd8\xfc\xee\xb7\xbd\xe2\x75\x8c\x0e\x86\x6c\x05\x4d\xae\x6f\x67\xb5\xa9\x1b\x9b\x54\x6a\x2a\xeb\xcc\xcb\x9c\x56\x4b\xc3\x34\xe0\x06\x2e\x3a\x76\x8d\xe7\x7d\x61\xe3\x72\xa6\x39\x2a\xb2\x17\x27\x4c\xdb\x37\x68\x90\x05\xff\xb1\x61\xe4\xf2\x8d\x2f\x0d\xc3\x6a\xc5\x95\x36\x02\x45\xde\xe1\x7b\x38\x32\x43\x27\x67\x25\xfd\xa7\x14\xe4\xe2\xcb\x6b\xdb\x51\x04\x28\x3e\x6b\x04\x49\xff\xd9\xd4\xcc\xf0\x78\x3b\x65\x2d\x5d\xa7\xab\xfc\xa4\x79\x4e\xde\x50\x4d\x91\xad\xb4\x11\x4e\xa2\x25\x79\x86\x29\xbc\xe1\x22\xb7\x3f\x6d\xc9\x12\xfa\xe1\x93\xf8\xc0\x60\xda\x66\xf3\xfa\xd6\xb8\x91\xf9\x33\x50\x83\xdc\x9f\xe9\x2b\x89\xff\xdb\x03\x37\x66\x66\x13\x51\xa7\x03\x5f\xfc\xf6\xc3\xe5\x8e\xb8\xb6\x0c\x38\xfc\xd9\x3b\x99\xa7\xb2\x6e\xc7\xc1\xa7\x8e\xa0\xfe\x9b\x81\x8b\x73\x7c\x4e\x4a\xd3\x27\x28\xae\x46\xa0\xbc\x25\xdf\x80\x6e\x13\xfe\xf9\xb7\x9a\x6b\x36\xe9\x4f\xad\x9b\xc0\x3a\xb8\x0d\x4c\x5c\x86\xfb\xcc\x2d\x21\x4c\x0a\x94\x1b\xe8\x07\xe4\x62\xf9\x83\x9b\x42\xde\x10\x7b\xe5\x77\x3d\xf7\x6f\x3f\x5c\x6e\x31\xf5\x6f\x3f\x5c\xba\x99\x9b\x7f\xca\xe9\xe1\x26\x7d\x08\x86\xff\xed\x0a\xff\x9d\xc2\x8b\xb5\x39\x79\x57\xb9\xf8\x5d\xb2\xf0\x93\x83\x31\xef\xdb\xe5\x3a\x32\x63\xf5\x09\xfd\x5c\x44\x64\x65\xee\x5e\x7e\xf3\x0d\x61\x9f\x2a\xc4\xa8\x81\xef\xe6\xf5\x9c\x42\x22\x6d\x97\xb3\x13\xc1\xcf\xc0\xa3\x32\x24\xdb\x01\x22\xa1\x58\x2e\xcd\x50\x03\xd4\xd2\xe7\xaf\x9d\x47\xba\xff\x62\xf3\x07\xef\x20\x12\x34\x7f\x8d\x34\x80\x60\x60\x68\x1e\xc0\xfd\x09\x9a\x2b\x84\xff\xc9\x26\x00\xc0\xb4\x5b\x8a\xe9\xd3\x49\x47\xb7\xae\x60\xca\x3b\x45\x46\x07\x61\x3c\xd7\x2c\x98\xe4\xc4\xfc\xf6\x02\xec\xa3\xa7\x93\xd6\x62\x06\x69\x2a\x5a\xde\x34\x62\x0c\x73\x29\x3e\x3c\x9a\x7b\x4d\xcb\xbd\x1b\x5d\x65\x05\xce\xdd\x60\x86\x9d\xf3\x41\xa6\xd3\x8d\x7c\x10\xfc\xe0\x2a\xf3\xef\x93\x15\x82\x81\xb6\x60\x85\xe0\xbb\xad\x59\x21\x28\x74\xf2\x6c\x58\x21\x4c\x56\x18\xc5\x0c\xc1\xd5\xed\x7d\x33\x9e\x1d\x3a\xc8\xbd\xcd\x7f\x4e\xf7\xb6\x3d\xac\xc4\x3d\x6b\x3f\x74\x0c\x8c\xcf\xd4\xe3\xb2\xec\x77\x22\x63\xf1\x22\x5e\x5b\x6a\x60\xab\x6d\x22\xbb\x66\xae\xdf\x57\x11\x05\x03\x12\x10\xb8\x07\xac\xd4\x55\xb9\xef\xdc\xa2\x90\x48\xc1\x63\x12\x55\x87\x2f\x72\x92\x19\xab\xe6\xd3\x9d\x7a\x39\x9b\x1e\xdf\x5e\x77\xcd\x38\xe7\xac\x9a\x93\xb7\xd7\x1b\x50\x1e\x1c\x0e\x2c\x4b\xa1\x71\xe7\x58\x91\x82\x4f\x19\xf8\x24\x24\x60\xbd\x73\x1c\xb5\x83\xf2\xbc\x33\x9a\x43\x71\xb8\x58\xaf\x82\x15\x92\x14\x52\xcc\x0c\x73\x10\x57\xbe\x67\x0f\x48\xaa\x94\x82\x6b\x59\x3f\xec\x0d\x11\x8f\x78\x5c\x77\xfb\x40\x3c\xae\x6f\xb3\x75\x6d\xa5\x93\x77\xc1\x53\x4a\x32\x59\x14\x2c\xd3\xb6\xee\x2a\x1c\x7b\xd4\x0a\xb1\x6d\x50\x9a\x30\xab\xb3\x9c\xdc\xfe\x11\xd4\x26\x56\x41\xf2\x02\x8f\xf2\xc5\x87\x8b\xb3\x37\xef\x2e\x26\x65\xfe\xcb\xb9\xbc\x1b\x6b\x39\x6e\x14\x1b\xf3\xfe\x2a\x22\x9f\x71\x98\x28\x89\x2e\x0c\xd7\x65\xb5\x2b\x5b\xf0\xd6\x65\x28\x7e\x4d\xbe\x55\xe8\xbd\xe1\x3d\x77\x58\x0e\xd6\xec\x11\xa9\xa9\x4d\x3c\x4a\xf1\xaa\x4e\x9b\xa2\xc0\xd3\x34\xf7\x68\x14\xea\xa3\x5f\x7c\x7e\x0c\x6f\x67\x13\x9e\x3d\xf7\x7b\xf8\x6b\x91\x42\xb1\xfb\xf9\x67\xb2\xd5\x61\xb5\xbd\x77\x8f\xeb\xba\xf3\x5c\xbb\x02\x86\x5a\x42\xcc\x1a\x44\x97\x1b\xc6\xf6\x5b\xc5\xea\x2e\x98\x32\x9d\xc1\xee\xbc\x68\x14\xab\x27\xd8\xfd\x33\xdc\xfb\x38\xae\x22\x2e\x0d\x37\x79\xc4\xce\x7f\x60\xd3\x4d\x1b\x6f\x1f\x7b\x8f\x1b\xc7\xf9\xd3\x46\xcf\x99\xd0\xdc\xa6\xd9\xb4\x9c\xd7\xc6\x93\xc0\x0c\x01\xcf\x70\xeb\x23\x0b\x50\xa5\x95\x8b\x1a\x4a\x2c\xb5\x6d\x28\xb1\xf4\x3c\x4a\x2c\x3d\xa6\x6e\x9c\xc1\x9e\xfb\xc0\x3a\xa6\x5f\xc8\x58\x17\x72\x27\x3e\x07\x57\x4d\x73\xa9\xf0\x1d\xb3\x87\x1d\x7c\x42\xf3\x92\xc7\xd4\xdf\x7d\x76\x98\x3c\xe3\x22\xef\xdb\xcc\x44\xd1\x0b\x7a\xec\x8a\x5e\xf6\x99\x35\xc4\x7b\x27\x2e\xea\xb4\x4c\x98\xd2\xdc\x3a\x6c\x75\xfd\xb5\x92\xe4\x2f\x1c\x26\x4d\xe5\x64\xe7\xb6\xb5\xbe\x09\xbf\x07\x8d\x93\xac\x98\x41\x24\xd9\xed\x44\xd6\xb3\xc7\x39\x60\xad\x42\x45\xb9\x54\x3f\x16\x63\x1c\x6b\x5c\xe5\x2d\x58\x1c\x5a\x56\xfc\x99\x78\x5a\x3d\x3f\xe3\xcb\xb3\xf0\x9f\xda\x0d\xd8\x91\x67\x28\x6f\x3d\x7b\x45\xe5\x41\xce\x23\x45\xaa\x3a\x04\x6b\xdf\x52\xda\x4a\x72\x1b\x1d\xed\x2b\xb9\x22\xde\x0a\x8b\x99\x57\xb4\xa6\x25\x83\xa2\x42\x8d\x75\xdd\xcd\xa4\x10\x31\x1c\x33\x84\x88\x7e\x53\x31\x71\x0d\x08\x7a\x60\xc7\x37\xb7\x81\x1d\x7f\xa0\x0d\xec\xf8\xc6\x76\x10\xb7\x39\x77\xdf\x79\x6e\x44\x7c\xeb\x1c\xda\xc6\x64\x58\x2e\xec\x79\x60\xd9\x7e\xae\xdb\x95\xa3\x4b\x60\xbc\xfd\x37\x2b\xac\x75\x5b\x1e\x12\xad\x18\x10\xed\xe4\x4b\xac\xc2\xed\xc1\x6d\xda\x0d\xa7\x18\x8f\xea\x2c\xf8\x6d\xe1\x8e\x15\x05\x19\x41\xf7\x5d\x4a\x52\x9a\x27\x37\x5c\xb7\x34\x42\x31\xc8\xf7\x53\x72\x9b\xa8\x57\x0a\x92\xd9\xb8\x41\xe0\xe8\x0c\xf7\x66\xbb\x4b\xe2\x07\x05\x91\x99\xa6\x36\xbd\x14\xb9\x61\xfa\x8e\x31\x41\x5e\xbe\x7c\xf9\x12\x44\x9b\x97\x7f\xf8\xc3\x1f\x08\x24\x3d\xcf\x59\xc6\xcb\xf5\x17\xe1\xad\x7f\x79\xf5\x2a\x66\xd0\x7f\x3f\x7b\xf7\x35\xc4\x19\x55\x5a\x91\x1b\xa9\xe7\x76\x6c\xd3\x45\xa7\x7b\x35\x22\xff\xf7\xfa\x9b\xf7\xc4\xe7\x30\xea\xfe\x0a\xf2\x8f\xdf\xa2\x98\x91\x43\xe5\xf4\xcb\xdf\x7f\xf1\x45\xd4\x37\x20\x24\xc9\x1a\x82\xb9\xdb\xa0\xbd\xca\x85\x9b\x09\xa9\xd7\x73\x46\x5b\xd6\x29\xba\x6c\x5d\xc9\x67\x73\x38\x08\x73\xff\xa5\x98\x16\x3c\xd3\x48\x24\x30\xf1\x03\x82\x84\xad\x5b\x42\x6d\xfa\x37\x2b\x0b\x44\x99\x9a\x72\x36\x22\x05\xbf\x65\x64\xaa\xfe\x5a\xcb\xa6\x6a\x93\x34\xda\x32\x1a\x19\x15\x66\x7c\x1c\xae\x85\x3b\xc5\xa2\x53\xc3\xee\xc3\x53\x3c\xd2\x56\x94\x7e\xe5\xa0\xe3\x15\x41\x63\x84\x55\x24\x6f\xd9\x72\x8c\xd0\x5d\x51\xee\xc3\xde\xc0\xe5\x16\xb9\x89\x2e\x3f\x92\x45\x55\xbc\x6e\xab\x76\xba\x98\xe8\xaa\x96\xff\x40\xa0\xe1\xc2\xe5\x3f\xb3\x4a\x05\x65\xe5\x33\x9b\x94\x53\xb4\x76\xeb\x88\x91\x5c\x72\x69\xc3\x6b\xda\xb4\xd6\x6d\x6e\x35\x72\x39\x0d\x03\x8f\x21\xbb\x32\x57\x66\x12\x50\x7c\xda\xce\x2d\x62\x94\x0d\xb3\xf7\xfd\xc2\xdd\x50\x08\x61\x8d\x58\xeb\x1f\xc3\xc9\xa3\xc6\x00\xd2\x00\x93\xa6\x2e\x87\x5e\x3b\x0a\x86\xca\xda\x68\x6a\xfb\xae\x3b\x2d\xbf\xdd\xd1\xc9\x77\x6d\x84\x2d\xd3\x8d\x3d\x22\x8c\x60\x6f\x44\xc1\x94\xb2\x11\xda\x25\xad\x6f\x59\xee\xf1\xf3\x04\xc2\x9e\x55\x64\x06\x31\xe2\x92\x80\xf3\x05\xba\x46\x94\x74\xd9\xc9\x7e\x63\xa6\x71\x3c\x99\x1c\x23\x6a\x91\x35\x06\xdc\x23\x16\x30\xcf\x9f\x28\x59\x6f\xe7\x6e\x41\xbd\x69\xea\x12\x2e\x43\x06\x45\x09\xe9\xeb\xda\x88\x66\x6a\xf7\x32\x06\xf7\x25\x49\x26\xf1\xaa\x1d\x6c\x31\x89\xce\xdd\x9b\xd5\xc3\x39\x9a\x5c\x4b\x13\x8e\x22\xd3\x9e\x63\xbb\x2f\xf9\xb9\xdd\x63\x7b\xdf\x62\xd9\xfb\x64\x06\xbb\x8c\x62\x6d\x36\x4c\x35\x5a\x94\xc3\x31\xba\x46\xb0\x28\xfe\xc6\xa6\x4e\xe8\x2f\xe5\xdb\xb6\x27\x61\x6b\xb0\x3d\x1d\x73\x83\xed\x72\xba\x9a\x5d\x22\x40\x6f\x21\xa3\xe9\xe8\x50\x4c\x0e\xa8\xb6\x1d\x82\x5b\xc1\xb6\x67\x9e\x05\x5b\x1a\xe7\x82\x2d\x85\x7f\xc1\x16\xe7\x5e\x82\x6d\xdb\xcb\xe5\xdc\x51\x70\x7b\x2c\x99\x41\x4a\x32\xf5\x9b\x8f\xa9\x64\xab\x00\xb1\x24\xdc\x29\x4b\xae\xf0\x5a\xd1\x1b\x25\x8b\x46\xe3\x10\xe9\x9d\x84\x34\x0f\x26\xe9\x72\x93\xc7\x11\xba\xd5\xee\x02\x4a\x09\x9c\x08\x92\xa7\x94\xbe\x0e\xe7\x6b\x34\x94\xcd\x1e\xca\x66\xdf\xd3\x9e\x57\xd9\x6c\xf7\x99\x8f\x61\x0e\xeb\x67\xb7\xf2\x8c\xac\x89\x41\xba\xc0\xdf\x3f\xa7\x72\xda\xd8\x32\xc5\x53\x14\x53\x8a\x93\x93\x73\x9f\xf1\xc4\x79\x35\x5f\x0a\xcd\xea\x29\xcd\xd8\x69\xa8\xb0\x62\xd5\x9c\x95\xac\x36\x1b\x64\xdf\x73\xa9\x3d\x6c\x42\x37\x72\xb3\x74\xf0\x47\xd8\x27\xcd\x6a\xb3\x99\xad\x29\xf5\xf0\x85\x7f\x70\xdc\x5d\xe9\xc4\xa0\xb3\xbd\xa8\xc3\xa0\xe7\x4e\x9d\x52\x8b\xd7\xda\xcd\xc3\xbd\xc6\x8d\x56\xa1\x6a\x30\xe6\x86\x9f\x4b\x01\xfc\x03\xa0\x98\xa5\x6c\x6a\x74\x7a\xf0\xf6\xf4\x4c\xd6\xb5\xe1\x59\x60\x68\xaa\x48\xcd\x66\x46\x88\xad\xb1\x64\x33\xbc\x51\x34\xe6\xc1\x4e\xa3\xc3\xf6\x6e\x3f\xf6\x86\xe2\x07\xe2\xe3\x22\x7a\xb3\x1c\x66\x55\xcb\x05\xcf\x1d\x83\x19\x62\x69\xae\x48\x45\x55\x90\x8f\x86\x2a\x25\x33\x0e\x4a\xca\xf6\x04\x23\x46\x42\x09\x1f\x18\x55\x9f\x65\xb5\x93\xbf\x21\x34\x62\x4b\x48\xdc\x1f\xe1\x09\x97\x70\x24\x42\xe6\xec\xaa\xb9\x29\xb8\x9a\x5f\xef\xd3\x90\xb8\x69\x1c\x74\x00\x5f\xf3\x0c\xbc\xcf\xa0\x18\x65\xae\x14\x8a\x03\x5f\x68\xa8\x9b\x61\x62\xb9\x11\xaf\x24\x9c\x96\xeb\x3f\xbc\x62\x12\x68\x7c\xc1\x6c\xae\xbe\xf3\xeb\x87\xc3\x9b\xb1\xbd\x6f\xd7\x62\x33\x50\x61\x69\x88\x9c\x7d\x2b\xaa\xce\xf3\x8c\x16\xf7\x97\xc4\x0b\x5b\x97\x45\x71\x74\x09\xc5\x01\x97\xb7\x0a\x01\x90\x1b\xd8\x74\x7b\xc4\x83\x2a\x9f\x36\x0b\x77\xb4\x51\x77\x65\x83\x15\x29\x25\x26\xa0\x11\x50\xb0\x1a\x5f\x82\x2a\x19\xee\x83\x20\x6b\x1a\x24\xff\x85\x1b\x30\x18\x67\xef\x69\x83\x71\xf6\x81\x36\x18\x67\x37\xb6\x83\x38\xd7\xb4\x99\x7b\x69\x90\x64\xb5\x53\xf4\xd6\xf3\x09\xf1\x1c\x47\x4f\x54\xc4\x4e\x5d\x5e\x70\x56\x67\x5a\xd7\xfc\xa6\xd1\x7b\xaa\xc3\xb7\x32\x06\xb0\xc0\x4c\x59\xca\x31\xb6\x9b\x98\x05\x08\xcb\x2a\x83\x3c\x66\x0c\xe8\x4d\x34\x4b\x38\xf1\x9c\x1b\x30\x6d\xf8\xf0\x58\x91\x5c\x66\x8d\xaf\x8c\x0c\xa7\xd3\x7a\xb3\xc5\x16\x4e\x4c\xc2\xc3\xe9\x75\xc5\xc2\x41\x7a\xaf\x56\x2e\xef\x84\xc1\x76\x67\x57\x3d\xb9\x27\xba\x79\x27\xda\xaf\x42\x31\xc5\x3d\x26\xe6\x39\xbd\x91\x8d\xf6\xd9\x7d\xff\x97\x99\xd9\x37\xe9\x9d\xb5\x24\x8d\x62\x0f\x9a\xd1\x5b\x6d\xf2\x96\x63\x0c\xb6\xfb\xc1\x76\x3f\xd8\xee\xef\x6b\x9d\x7b\x7c\x89\x66\xf9\xb0\xfa\x74\x07\x7f\xb9\x54\xc9\x31\x5b\xb7\x7f\x6b\xe8\x9b\x16\xe3\xa2\x48\xb3\x9a\xa8\x62\x45\xce\xc2\xdb\xde\x6a\xe3\x03\x77\x50\x87\x92\x81\x25\x7e\x7a\xcb\xe9\x9e\xec\xa1\xb0\xba\x28\x19\x1a\x5b\x37\xe2\xb6\x0d\x92\xc6\x9a\xf2\xe8\x26\x11\x78\x64\x54\x32\x7f\x8d\xe5\x45\xa9\x10\x12\xd9\x01\x35\xb2\xb5\xd7\x47\x36\xd4\x05\x18\xe1\x8a\x66\x28\x97\x36\x3c\x07\x4c\xd0\x46\xac\xf7\xc7\xdf\x62\x4b\x3c\x01\x92\x7c\x0a\x04\x4e\x02\x16\xd8\x53\x42\x28\x6c\xa9\x47\x62\x1a\xad\xf8\x77\xac\x56\x51\xf9\x3d\xdb\xd6\x4d\x36\x8d\xdf\xbb\x93\x50\xd9\x9c\x95\x14\xfe\xf9\xd6\x2d\xc0\x5c\x6b\xc3\xef\x6a\x86\x89\x3d\x59\x5d\x1a\xc1\x6b\xd4\xf1\x67\x3f\x5a\xc4\xe5\xc5\x74\x2d\x59\x58\x21\x0e\x0c\xfb\x53\xe0\x3f\xb0\xdc\xab\x8e\x61\xcd\x80\x20\xd0\xf7\x02\x2b\x76\xae\xb8\xc3\x00\xe2\xc2\xfd\xd9\xf3\xd2\x1e\x23\x5d\x61\x3b\x84\x1f\xc0\xb6\xf6\xff\x91\xb7\x2f\x74\x59\x9e\xe8\x81\x07\xfb\xff\x60\xff\xef\xb6\x67\x6e\xff\x0f\x48\x9e\xc3\xa0\x1b\x0c\xfc\xa1\x85\xc4\x59\xf9\x6f\x98\x93\x2d\xac\xfc\xe2\x4c\xf7\xce\x6e\x2f\xeb\xae\xe3\xd9\xf1\x64\x72\x8c\xae\x67\xad\xc0\xd3\xe8\xe9\xf8\x8f\x84\x89\x4c\xe6\xa6\x9f\x8f\xd0\x7f\xad\x34\xb0\x4b\xad\xe6\x2f\x9c\x4b\xe9\xc6\x0a\x9d\xd7\xa0\xef\x34\xba\x9a\x80\xf6\x5c\x86\xd9\xb7\x8f\x61\x2e\x12\xd0\x57\xcb\x7c\xf8\xdc\xb6\x76\x2b\x7c\xad\x04\xcb\x85\xb8\xdf\x15\x29\x78\xc9\x35\x56\xed\x35\xf7\x9d\x29\x1d\xab\xb8\x24\xe4\x04\x3f\x9e\x64\x55\x33\xb2\x1d\x4d\x4a\x56\xca\x7a\x39\xf2\x9d\x99\x1f\x3b\xbd\xdb\x37\xb0\x6a\x47\xd6\xd4\x35\x13\xba\x58\xc6\x26\xe6\x69\xdb\x81\xb8\x1c\xb7\x53\x7b\x64\x72\xfc\xe1\xc4\xa5\x8f\x6a\x5b\xf7\x46\xb6\xd6\x61\x50\xaf\xfb\xd5\x62\x59\x60\x0c\x78\x1e\xb5\xb6\x73\xf3\x94\x89\x05\x59\xd0\x5a\xc5\xde\x00\xb2\x2d\x5f\x93\xf3\x05\x57\x7d\x25\x9c\x1f\x58\xdc\xb5\xd7\x7d\x42\xc9\xc1\x46\x57\x8d\xb6\xe8\xce\x81\xb8\xab\x34\xe1\x41\x7b\x85\x7d\x7b\xd5\xaf\x02\x6e\x5b\x45\xb5\x66\xb5\x78\x4d\xfe\xf3\xe4\x3f\x7e\xf3\xd3\xf8\xf4\x2f\x27\x27\xdf\xbf\x1c\xff\xeb\xdf\x7f\x73\xf2\x1f\x13\xf8\xc7\xaf\x4f\xff\x72\xfa\x93\xfb\xe3\x37\xa7\xa7\x27\x27\xdf\x7f\xf5\xee\xaf\x1f\xaf\x2e\xfe\xce\x4f\x7f\xfa\x5e\x34\xe5\x2d\xfe\xf5\xd3\xc9\xf7\xec\xe2\xef\x91\x9d\x9c\x9e\xfe\xe5\x57\x09\x93\xa4\x62\xf9\x4d\x34\x4e\xc1\x36\xde\x8a\xae\x74\xbf\x4d\x3c\xfa\x15\xde\x8f\x0b\x3d\x96\xf5\x18\x3b\x79\x0d\x59\xd0\xa3\xbb\x72\x47\xbb\xfd\x1d\x69\xa9\x56\x5b\xf5\xc4\xb1\xc7\x7b\xbe\x04\x8f\xe3\x80\xb7\x76\xec\x02\x53\xd1\x1b\xbe\xd3\xec\x03\xae\xcf\x6e\x90\x94\x66\x65\x25\x6b\x5a\x2f\x49\x6e\x95\x5b\xcb\x47\x25\x7d\x7b\x64\x62\x75\x98\x64\xce\x1f\x86\xf1\x3d\xa8\x8a\x4b\x96\xf3\xa6\xdc\x4b\x5a\x36\xe8\x39\xdc\xf4\x3b\x28\x3b\x62\x8b\x9a\x38\x5f\x1f\xfb\x9a\x2b\xc9\x45\xb3\x5b\x14\x54\xfc\xa9\xc4\xe9\x0f\x3b\xb5\x28\x8e\x8e\x56\x6a\x7c\x83\x6e\x1a\x9c\x60\x64\xce\x8e\x95\x7f\x17\x07\x4f\x54\x12\xa3\x39\xd3\xfa\x46\x9e\xd8\xae\x4e\x0d\x23\xf8\x0e\x78\x85\x03\xa4\xe1\x8f\x82\x16\x92\x98\xbc\x89\xff\x93\x7d\x6d\xb8\xa2\xbd\x44\x78\xbb\xce\x7d\x45\x70\x09\xc2\x9c\x4d\xbc\x38\x25\x85\xcc\x02\x07\xb0\x0e\x33\x00\xe0\x70\xe1\x2e\x71\xbc\xad\xd0\x00\x85\x19\x17\x79\x3d\x50\x86\x16\x0a\xbd\x5b\x78\x06\x05\xda\x40\x34\x84\x33\x4b\x80\x04\xd3\x6d\x49\x3f\xf1\xb2\x29\x49\xa3\xcc\x6c\xa5\xe8\xf6\xd2\x4e\xf6\xce\xd5\x99\x83\x54\x76\x5c\xc0\x47\x1d\xd1\x38\x46\x45\x39\x67\xe4\xda\xef\x5f\xab\x0e\x41\x53\xba\x95\xe4\x54\x03\x82\x84\x9d\x87\x65\x93\xe5\x14\x1c\x2b\x3c\xc7\xa6\x7c\xa9\xb2\x2d\x2e\x95\xe0\x45\xf7\x56\xb9\x22\x42\x7e\x7b\x1b\x61\xfd\x15\x9f\xd3\x0d\x78\xc6\xbc\x51\x34\x47\x94\xce\x07\x25\x72\x3f\x8f\xe0\x79\xbc\xf7\xe6\x4e\x49\xb6\x77\x09\xed\xd0\xec\xb0\x7e\x51\xd7\x3d\x94\x3a\x4f\x42\x8f\x42\xe2\xd2\xec\x7c\xf4\x3a\x1d\x4b\xea\xb3\x65\x66\x53\xf8\xf1\x4e\x1d\x38\x1c\x14\xe1\x1b\xc2\xd8\xc6\xe6\x3f\x4e\xf7\xe3\xcc\x8f\x37\x6c\x8a\xee\x4d\xf8\x0d\xc8\xee\xaa\x2f\x74\x0e\x35\x5a\x05\xd3\x10\x8b\xc7\x7c\x75\x40\xf4\xbb\x2a\xe5\x22\xa2\x80\xf0\xb7\xca\x1a\x9c\x79\x2f\x40\xd1\xd3\x4e\x9c\xbc\x42\x11\x5b\x30\x96\x63\x2c\x60\xd1\xce\xbf\x6e\x44\xef\xec\x6f\x4e\xc9\x94\x51\xdd\xd4\xe8\xfd\x23\x8c\x94\x53\x38\x01\x0e\xd5\x4e\x35\x33\x87\x02\x29\x10\x6b\x59\x12\x25\x68\xa5\xe6\x52\x83\xea\x84\x56\x34\xe3\x3a\x22\xbc\x4c\xd7\x34\xbb\x85\x1a\xcb\x35\xb3\xb3\xed\x9b\x5a\x76\x6a\xa3\x18\x42\x88\xe8\xc6\x3e\xea\x79\x2d\x9b\xd9\x1c\x42\xf1\xf0\xad\xac\xa0\x0a\x63\x2e\xfb\x8c\xec\x1b\x7b\xb7\x8a\x01\x45\xf2\xa5\xa0\x25\xcf\x7c\xa5\xa9\x5a\x2e\xb8\xe2\xd2\x1a\xa9\x60\xd4\xfe\x45\x53\x72\xe5\xcb\x00\xa1\x65\xec\xbc\xa0\xbc\x24\x27\x8a\x31\x72\xe1\x2e\x09\xfe\x72\x8d\x02\x02\xaa\x3b\x63\x1c\xac\x42\xa3\x9a\x4d\x7d\x6c\x33\xa7\x98\x27\x4e\x75\x1b\xb8\x31\xc4\x24\xc4\xb2\xf0\xbc\x71\xda\xfd\x05\x7e\x0d\x18\x6f\x5e\xb1\xac\xc1\x5f\xd0\x55\xc3\x63\x22\x97\xad\x7b\x4c\x4f\xaf\x67\x57\x97\x2a\x54\x2b\xe0\x5d\xb6\x05\x96\xe0\x07\x9b\x6e\xd9\xe7\x95\xf5\x98\xa0\xa7\x67\x43\x60\x05\x14\x62\x5e\xf0\xbc\xa1\x05\x92\xd6\x88\x45\x9e\x5f\x5f\xe2\xc0\x7c\x36\xd7\xe3\x3b\x06\x8a\x60\xe4\x81\x5a\xdc\xe7\xa6\xcb\xd7\x9c\xb6\xb9\x02\x22\x1c\x51\x83\xd9\x2a\xa6\x71\xc9\x77\x74\x09\xf9\xe7\xad\xf3\x6f\xc7\xdb\xc7\xd5\x84\xc1\x01\xa6\xb2\x8f\xca\x94\x8e\x7e\x5b\x10\xea\x5d\xf6\x19\xa0\x94\x8c\x0a\x60\xc6\x41\xa3\x6f\xe0\x09\xb0\xc6\xfa\x9a\xfb\xef\x5f\x50\x20\xcb\x7f\x84\x0c\x89\xa2\x06\x56\x7b\x65\xb6\x3d\x48\x53\x8b\x16\x62\x3f\xb2\xb2\x2a\xa8\xde\x8b\x03\xce\xdf\x02\x93\x43\x60\x0f\x37\x48\x8c\x8a\x7c\x4c\x0b\x73\x55\xae\xbe\x3b\xb7\x01\xaf\x88\x78\x12\x3d\xed\x3e\x3a\x22\x24\x7c\x2d\x65\xc3\x86\x6f\xc4\x39\x90\x3d\xf5\x86\xe5\x40\x41\xec\xdc\xe2\x9c\x84\xe5\x9d\x60\xb5\x83\xbd\xab\xef\xce\x47\x84\x4f\xd8\xc4\xfd\xe5\x3b\x73\xe4\x51\xcb\x19\x86\xce\xb8\x10\xb5\x18\xdb\xba\xcc\x27\xb8\x9c\x50\xbf\x1f\xf6\xfe\xc3\x9f\xcc\x42\xcd\xaf\x7f\x1e\xff\x29\xa8\x5d\xf8\xe7\x1f\x0c\x3d\x8e\xf2\x55\xfd\x61\xe5\xbb\x30\xe6\x02\x88\x9e\xf9\xeb\x87\x2b\x5b\xb6\xd8\x16\x35\xfe\x21\xd2\xa9\x82\x10\x26\x74\xbd\x9c\x90\x2b\x09\x7e\x78\x3c\xc7\x2b\x0b\xf3\xaf\xd9\x3f\x9c\x59\x08\x8e\xcb\x6b\xd0\x33\xaa\x99\x00\xae\xe4\xc1\x0a\xc0\x6d\xb3\x19\x00\x60\x00\x40\x4e\x14\x76\xe9\x04\x54\xaf\x98\x0e\x67\x44\xb4\xc4\xe4\xf4\xfd\xb8\xdc\xb4\x33\x41\xd8\x27\xae\x20\xfb\x19\xee\x38\x1c\x1b\xb5\x21\x21\x8e\x91\x33\xc3\x1a\x48\xf0\x39\xf3\x2a\x19\xe3\xbb\x01\xeb\xff\xb5\x90\xfa\xd7\xfe\x32\x38\x8f\x52\xe0\xd8\x24\xa1\x0b\xc9\x5d\x8d\x6d\x83\x78\x04\x18\x59\xa2\x12\x4d\xd8\xf3\xbc\x59\x92\x92\x2b\x4d\x6f\xd9\x84\x5c\x1b\x76\x2e\x74\x32\xc1\x53\x16\x04\x6a\xe1\xb1\x9c\x34\x42\xf3\x22\x52\xa2\xf3\x73\x81\x8d\x09\x58\x3d\x48\x2d\xd1\x64\x86\x27\xa9\x6a\x36\x76\xac\x25\xbe\x15\xa5\x77\xb1\x55\x3d\xdd\x9e\xb4\x7b\x3a\xf2\xa0\x3f\xa7\xa8\x16\xa9\x72\xe8\xdc\x7a\x6a\x47\x5f\xd8\xb5\x68\x0a\xb3\x1b\x52\x64\x2d\xeb\x08\xc7\xae\x26\xe4\x3d\xf0\x83\x45\x0c\x90\xa3\xd3\x18\xea\x81\xac\x95\x4d\xb0\x8c\x29\x45\xeb\x25\x3a\xb1\x73\x5f\x5d\xbb\x51\x6c\xda\x14\xc0\x2e\xc7\x6c\x09\x15\x58\xc9\xbc\x66\x99\x14\x4a\xd7\x4d\x06\xe7\x48\xc9\x4d\x2d\x6f\x99\x68\xc3\x90\xa2\x10\x63\xe8\x71\xdf\xba\x36\x1b\xb6\x47\x48\x92\xcd\xa9\x98\x31\x9f\x02\x84\x94\x34\x07\x28\xfa\xca\x0b\x58\x31\x5b\x21\xfd\x49\xd1\xa9\x91\x6a\xb8\x86\x23\xbb\x31\x1c\x99\xb3\x47\xc6\x4c\xf6\x83\x0f\x02\x28\x03\xe3\xa5\xe0\xc5\x8e\x1d\x79\x53\x6c\x55\x63\xe0\xbf\xfb\x05\xf7\x24\xdb\x54\xc9\x34\xcd\xa9\xa6\xfb\x8c\xd3\x78\x47\x7d\x19\x77\xeb\x0b\x05\x87\x1e\xf8\x48\x59\x36\xcb\x49\x85\xb2\xe2\x61\x62\x97\xab\xef\xce\x23\x47\x02\x31\x10\xce\x19\xf2\x46\x6a\x73\x8f\xac\x79\x1e\x20\x0f\x43\x63\x5c\x2c\x86\x99\x84\x1b\x13\xc9\x01\xcb\x49\xde\x24\x68\xfb\x5b\xa2\x12\x67\xcf\x4c\xb4\x66\x9a\xf3\xde\xe7\xc1\x7c\x6c\xdd\x84\xb2\x6e\x64\xc1\x46\x61\x02\x2d\xf0\x4c\x68\x5e\xb3\x20\xbd\x4f\xe4\x60\xf6\x54\x1b\x81\x37\xbd\x7b\xbe\x08\x00\x33\xa6\x55\xeb\x92\x8c\xe4\x3f\xba\x7f\x6d\x19\x47\x9c\x25\xf0\xb2\xee\xcc\xad\xfe\x6e\xe3\xa2\x22\x7b\x47\xb8\x51\xd2\x92\x79\xc3\xde\xec\xe5\xc8\xb7\xb1\x2d\xd3\xcc\x60\xfb\x77\x32\x4f\x31\x47\x6f\xeb\x7d\xd0\x19\xae\x0d\x4f\xc3\xa8\x48\x05\xca\x67\x7c\x01\x1c\x62\x54\x27\xb9\x11\xd2\xa8\x39\x5d\x24\xa4\x52\xd9\x5a\xe3\xd9\xca\x39\x63\x5f\x85\x17\x26\x36\x86\x89\x8d\x5f\x45\x4f\x21\xc5\x91\xd7\xb5\x68\x87\xde\xee\x20\x89\x56\xd7\x47\x25\x82\x70\xcd\xa0\xff\xeb\x44\x8b\xeb\xf6\xd0\xd3\x8e\x66\x99\x01\xeb\x44\xe5\x1d\xf0\x6c\xb0\x3f\xe3\x06\x6d\xa7\xec\xe0\xaf\x3b\x6c\xb3\x15\xb4\xbc\xce\x0c\xc3\x29\x4f\x9c\x12\x6d\x62\xc1\xc4\xe5\xa9\xec\xbe\x7e\xba\xf5\xb0\xc0\xf9\x6f\xd6\xe2\x24\xf4\x79\x69\xfd\x89\x9d\x0c\x6a\x64\xbd\x1a\x6c\x68\x2e\x8c\xdf\x5c\xbc\x5a\x16\x05\xab\x61\x03\xad\xfa\x6c\xc5\xf1\x13\x6a\x5f\xa2\x01\x3c\x26\x0f\x99\x6b\x4e\x41\xeb\xc5\x63\xc1\xee\x3c\x5f\x4f\x15\x66\x98\x77\xfe\x46\xa0\x62\x76\x5e\xb7\x9b\x46\x4e\xb9\xea\x7f\x73\x6a\xdc\x33\xb1\xc4\xad\x7b\x13\x80\x0b\xaa\x4b\xc9\xcc\x4c\xca\x88\xce\x82\xde\x14\x86\x45\x0b\x40\xca\xcf\x68\x85\x97\xd0\x32\x78\xeb\x03\x9b\xa6\x6c\x07\xe8\x99\xc3\x8f\xe3\x46\x41\x66\xa4\xf3\xe1\xa4\xf5\xfd\xb6\xd2\x5b\x52\x92\x71\xd7\x2c\x74\x74\x3a\xeb\xfa\x5b\xae\x8c\x1b\xe6\xbd\xdb\x38\xd7\xf8\xd1\xb7\xf0\xc7\xda\xc6\x23\x0b\xb2\xa7\xf1\x5e\x5d\x56\xf7\x83\x48\x79\x1d\xdb\x36\x2e\x5c\xe0\xa9\x0e\xae\xa0\x69\xfe\x38\xdb\x63\x4b\x82\x6a\x58\x18\xd3\x29\x47\x66\xf0\x87\xe3\xd4\xbc\x87\xcb\x0d\x33\xf8\xa7\x4d\x0a\x99\x02\x51\x04\xa1\x2a\x1c\x69\x83\x13\x6f\x7b\xbd\xbf\x82\xa2\xa6\xd6\xb4\xef\x52\x52\x18\x32\x7d\x76\x75\x89\xf3\x4b\x1d\xfd\x2d\xe0\xb7\xa5\x65\xd6\xf5\x9c\xd7\xf9\xb8\xa2\xb5\x5e\xa2\xb2\x73\xd4\x99\x9b\x8f\xaa\x4f\x1a\x64\x4b\xbf\xa6\xb8\x32\xc8\x61\xeb\x1c\x37\x6c\x95\x33\xde\x5b\x1f\x8e\x7b\xcf\xec\x10\xeb\x89\x8f\xca\xdf\xb8\x9e\xb0\x88\xa5\x53\x0c\x3e\xe1\x7a\x1e\x1f\x71\x40\xba\xb8\xf2\xb0\x3c\x90\x41\xce\xaa\xeb\xf5\x88\x8c\x0a\x48\x3f\x56\x81\x2c\xc3\xe0\x58\xcf\x4d\x83\xee\xc9\xf4\x34\x22\x7c\x6a\x88\xb4\x14\x63\xb0\xee\x27\x4c\xa4\x35\x66\x5a\xde\x7d\x62\x1d\xec\x51\x5b\x04\x17\x32\x98\x4f\x30\x48\x7b\xd3\xc9\x89\x90\x31\xca\x24\xd7\x00\x4f\x60\xaf\xa7\x18\xfb\x70\x8f\xe5\xea\x26\x25\xe1\x24\x69\xb9\x87\x50\xcd\x14\x60\x30\xc7\xc0\x70\x91\x1b\x20\x05\x92\x08\x0a\x28\xd5\x64\x19\x63\x5e\x05\x6c\x2f\x69\x0a\xeb\xde\xc1\x8d\x76\xc3\x4a\xaa\xb3\x39\x53\x44\x49\xc8\xaa\xae\x34\x2d\x0a\x96\x7b\xb3\x26\x1e\xa8\x04\xbe\xce\x9a\x3c\x13\x46\x0c\x18\xc3\x94\x0d\x0a\x54\x70\x56\x07\x5e\x15\xd4\x2a\x1f\xa7\x8d\xc8\xd0\x67\x98\xeb\xa5\xb7\x6a\xad\x32\xeb\xa0\xb7\x51\xa0\x67\x4d\x61\x28\xa7\x68\xb7\x0a\x74\x30\x1e\x90\x80\xb4\x2c\x91\x98\x18\xc9\xb0\xb5\x44\xd9\x8c\xc1\x86\x32\xf8\xf4\x1b\x49\x70\x16\x24\xea\x18\x21\x37\x16\xb2\x4c\xe2\x38\x74\x0a\xe2\x62\x7b\x06\x31\x5c\xdb\x49\xb0\x65\x6b\x8c\xe3\xa9\x67\x18\x15\xf3\xe5\xc0\x55\x0a\xd7\x42\xac\x17\x14\x6d\xb4\x2c\xa9\xe6\x19\xa8\x67\xf9\x34\x30\xf2\x96\xbe\x28\x9f\x77\x72\x42\xa2\x0a\x44\xdd\xee\x7a\xf2\xb5\xda\xcc\x6c\x3e\x6a\xdb\x82\x9d\xb2\xa7\xd1\xdd\x14\xb7\xd4\x80\xd5\x48\x9e\xfb\x47\x97\x37\x85\xe8\x79\xcd\x18\xe1\xa5\x11\x93\xa8\xd0\x24\xe7\x53\x9f\x2f\xc7\xd9\xec\x1f\x3a\xbb\x34\x49\xf4\x6f\xe0\x0f\x12\xf4\x87\xaa\xee\xa2\x90\x77\x8a\xe8\x3b\xe9\xd5\x6e\xad\x2d\xd7\xe6\x4b\x19\x75\x87\x4d\xa2\xa0\xb6\x7f\x83\xb6\xcd\x49\x07\x98\x76\x64\x6e\xed\x1d\x2b\x0a\xf3\xff\x87\xf0\x6d\x42\xa4\xd7\xc6\x75\xf2\x99\xc0\x44\x1c\x5c\x39\x35\xab\x8d\x27\x3b\xc9\x6b\x59\x55\xd6\x0c\x54\x9e\x3e\x66\x9d\xe0\xda\x54\x2f\x98\x02\x37\x3d\x17\xcd\x66\x8e\x6c\xc6\x04\xab\xa9\x06\x43\xb8\xcd\xa0\x0d\xc4\x71\x75\x3a\xf1\x6a\x4b\x6c\x5b\xc9\x69\x3d\x60\x80\x6e\x0b\x9b\x8f\xdd\xbd\x63\x7f\x4d\x9a\x2b\x17\x08\x01\xee\xc6\x26\x1d\xe9\xc9\x97\x4c\xd3\x53\xf2\xad\xc2\x83\xf2\xf4\xc2\x47\x09\x46\x49\xe7\x36\xcb\x11\x0a\xe8\x49\xc3\x9f\x15\xd5\x3c\x18\x3f\x94\x72\x7d\xa8\x75\x77\xa7\x3a\x33\x3b\xaf\xa5\x52\xef\xdd\x27\x7b\x99\xe4\x20\x01\x0f\x12\xf0\x20\x01\x3f\xdc\x06\x09\xf8\xd0\xeb\x01\x7c\x77\xc8\x3b\xf9\x3e\x64\x08\xbb\x88\x7a\x67\xfb\x41\xc8\x7b\xa9\xad\xbb\x0b\xf0\xef\xf4\x5e\xa5\x27\x05\x9c\x7e\x47\x97\x13\xc1\xb4\xcd\x43\xe7\x74\xfb\x1f\xdc\xe8\x7f\xad\x0d\xe7\x67\x05\xb4\xe0\x16\xb9\x0b\xec\x92\x08\x06\xa3\x68\x89\xa4\xb8\xf5\xbe\x81\xe7\xc7\xca\x7a\x74\x98\xdf\x21\xd8\x9e\x74\x4a\xb2\x4c\xc8\xb5\xf5\x16\x5c\x19\x7c\x3d\x55\x58\xce\x34\xe5\x71\x79\x28\xc3\xe6\x28\xe5\xc7\x7b\x68\xf4\x01\x28\x21\xd9\x0e\x64\x7d\xe8\xe6\x21\x54\x2d\x6d\x08\x74\xe0\x11\x1f\x46\x95\xb4\x2f\x3c\xde\x52\xf9\xad\x62\x75\xd7\xc5\x20\x30\x68\xf9\x2b\x61\x8f\xc9\x40\x41\x0a\x63\xe7\xf3\xd7\x99\x9e\xad\xcf\x6d\x55\xb3\x05\x97\x8d\x72\xb1\x31\x8d\x46\x9a\xa4\xb4\x95\x33\xe7\x7c\x36\x77\x2f\x3b\x9f\x71\xf0\xe6\xa9\x73\x0f\xf6\x09\x73\x50\x9a\xea\x46\x75\x93\xde\x64\xe0\x1a\xf0\x24\xf6\x5c\x7f\x76\xfb\x65\xde\xb6\x63\x94\x30\x96\xe8\x90\x28\xf9\x6b\x8c\x5e\xc2\x4e\x6e\x2c\x44\xbb\x90\xab\x36\x64\x2c\x93\x65\xd5\x68\x16\x40\xbe\x85\xd6\x54\x14\x94\x78\x90\x9d\x1c\x96\x2f\x4a\x2a\xe8\x8c\x8d\xfd\x24\xc6\x6d\xb4\xd5\x8b\x2d\x30\x50\xe2\x91\x92\x47\x24\x51\x0c\xdb\x33\x8e\x92\x5a\x59\x6c\x7a\x14\x39\x79\x64\x24\x39\x79\x4c\x34\x39\xd9\x65\x44\x39\xf1\x69\x29\x0e\x79\x1d\x3f\xd8\x31\x57\x2f\xa4\x25\x3c\x0f\x5d\xc8\xed\xd8\x7b\x90\x60\xfc\xa8\x5c\x11\x59\x72\xad\x99\x73\x4a\xf6\x17\x6c\x44\xb8\xee\x64\x4d\xb0\x88\x03\x14\xe0\xe8\x59\xcc\x3e\xf9\x12\xd9\x2d\x93\x95\x38\x19\x10\x64\xee\xb8\x42\x26\x4a\x10\x5e\x56\x58\x64\x05\x10\xc0\xd8\xc6\x3c\x3a\x35\xaf\x9f\x77\x06\x7e\x81\x84\x7d\x02\xa5\x3c\x4e\x6d\xc0\x4c\x03\x66\x5a\x69\x3f\x07\xcc\x84\x19\x29\x52\x12\xa6\x74\x30\x92\xfb\xdc\xe6\xab\xa4\x37\xac\x20\x3f\x36\xac\x5e\x12\xb9\x60\x41\xd4\x16\x54\xf6\x56\x3c\xc7\xf8\x24\x67\x01\xdb\xb3\xc6\x6b\x3b\xa6\x09\xac\x66\x17\x9f\x0c\xa7\x0e\xf9\xd7\x1e\x81\xaf\x57\xbb\xea\x66\xf5\xc4\xdd\xf2\x3b\x18\xf2\xe4\xe8\x40\x1a\x3e\x01\xb6\xfb\xec\xfd\x9b\xed\x84\xa3\x34\xc7\x41\xb2\x8d\xf3\xe0\xda\xe2\x93\x89\x15\x21\x67\x0f\xec\x09\xee\x9d\xff\x05\xa8\x84\x77\xfd\xf4\xfa\x77\x72\xcb\x96\x23\xeb\xda\x4d\xcc\xe9\x53\xf7\x72\xf2\x64\x30\xc6\xa3\xad\x40\x68\x3a\x8d\xcd\xa4\xdd\x6d\x5b\x23\xe1\xed\x94\xb6\xd8\xe2\x4b\x3f\x76\xbf\x72\x9b\x96\x8a\xeb\xb7\xa6\x12\x49\x25\x22\xc3\x76\x5f\xb9\x48\x84\x21\xa8\xed\xe6\xf2\x1c\x78\xb0\x81\x0c\x12\x80\x90\x52\x0f\x91\x6c\xaf\x1c\xc3\xe6\x36\xf6\xd1\x4b\xdd\xe2\x62\x85\xe3\x77\xe3\xf2\x6f\xd9\xf2\x58\xd9\x04\x76\x52\xa8\x39\xaf\xb0\x9c\xa9\x62\x80\xa3\xb6\x03\x78\x6c\xdf\x81\x9b\xba\x1b\x16\x31\xd8\xa5\x18\x91\xf7\x52\x9b\xff\x5d\x40\x98\x11\x5c\xab\x37\x92\xa9\xf7\x52\xc3\x93\x83\x9f\x0b\x2e\xf1\xa9\x4e\xc5\x5a\x26\x39\x58\x0b\x01\x4d\x63\x86\x1d\x88\xb9\xb7\xbb\xef\xbc\x2d\xfd\x09\x72\x45\x2e\x05\x91\xb5\xdd\xca\xad\x06\xd6\xae\x20\xb2\xb2\xc3\x3a\x4b\x42\x6b\xa0\xdf\x34\xae\x3d\x35\x59\x77\x0e\x6d\xc7\x53\xb0\xc3\x83\x5e\x11\x7f\x01\x4d\x29\x78\x8a\xb8\xf0\x18\x2c\xc1\x4b\x35\x9b\x25\xb9\xad\xb4\xad\x64\xf5\x0c\x32\x36\x66\x09\xc5\x1b\x83\xc9\x6f\x49\x58\xb1\x6d\x45\x5e\xc3\x81\xb7\x04\xf6\x1d\xf9\xeb\xef\xb8\x2b\xe0\x93\xbe\x86\xb0\xac\x43\x4a\xc7\xc1\xb0\xc8\x5d\x94\xb4\x32\xb7\xef\xbf\x0d\x13\x01\x80\xf9\x3f\x50\xff\x5c\x4d\xc8\x19\x51\x5c\xcc\x0a\xd6\xf9\xcd\xaa\xec\x83\x6e\x92\x27\x00\x96\x34\x43\xe3\x17\xb4\x60\x18\xfb\x49\x85\xaf\x04\x2a\xa7\x6b\x2c\xe4\xc8\x16\x44\x37\xe4\xcd\xbb\x98\x1d\xdd\xb2\xe5\xd1\x28\x51\x91\x4a\x42\x9a\x60\x3a\xb9\x14\x47\x6d\x7a\xd9\xce\xbd\xf4\x7c\x16\xf8\x0e\x1c\xc1\x6f\x47\xbb\xe6\x51\x9f\x48\x48\x7d\x32\x97\x4f\xab\x54\x3e\x2f\x28\x1a\x49\x0e\x61\x8a\x58\x1d\x73\x53\x81\xc1\xeb\xe0\x9d\xd6\x3c\x65\x23\x91\x9f\x50\xd3\x0e\xd9\x5d\x92\x43\xa6\x92\x0e\x76\xb5\xa4\xcf\x41\xcf\xe6\xde\xc1\x83\xc0\x69\x9f\x1f\xdc\x9c\xc5\x77\x9b\x3e\x08\xe2\xc6\xb9\x4a\x3f\xae\xcb\xe9\xaa\xbf\x41\x90\xba\x24\x8c\xc8\x91\xb5\x8d\x40\x5f\xf3\x07\x86\x6a\x87\x6d\x55\xa4\xd8\x3a\xa8\x6d\x6b\x5d\x19\x6a\xa6\x2a\x89\xbe\xb2\x1b\x17\x6b\x59\x84\x39\x55\xe0\x5f\x35\xb5\xa6\xd3\xaa\xa9\x2b\xa9\x6c\xa9\xba\x55\x90\x4f\x8c\x42\xb2\xa1\x61\x2e\x60\x14\x43\xba\xfd\x4d\x30\xf7\xc7\xe7\x98\x3e\x5b\xc9\x2f\x28\x6b\x48\xbc\x66\x9d\xbd\x44\xce\x33\x2b\x4f\x52\x4d\x44\x5f\xf2\x97\xb0\x6d\x3e\x68\xe7\xc7\x89\x22\x8d\x4f\x78\x85\x47\xee\x58\x37\x9c\x25\x13\x1a\xac\x82\x82\x5c\x8a\x29\xa3\x8a\xdf\x14\xcc\xba\xa6\x29\x4d\x75\xd2\x9e\x04\x0e\x59\x76\x6f\x8c\x30\x01\x94\x8b\x6b\xb5\x6a\x0e\x3c\xe1\x22\x2b\x1a\x38\x41\xc1\x8b\x53\x50\x04\x51\x91\xb1\x02\x29\xa7\xcc\x7d\xdc\xef\x16\xd1\x47\x81\x39\x73\xca\xea\xda\x96\xb6\x5b\x6e\xbe\x49\x24\x97\x0c\x1d\x6a\x20\x50\x6e\x84\x0b\xd9\xec\x87\x68\xb7\x36\x05\xb1\xe2\x0e\x50\x72\xc5\x10\x5e\x71\x5f\xb1\x72\xea\xb4\x08\xaa\xeb\xd8\x55\x5b\xef\xb5\xeb\xc0\x9a\x39\xc2\x24\x14\x36\x83\x44\x98\x5c\x3b\x61\x22\x36\x79\xc3\xfe\x31\x34\x6e\xf2\xb8\xbd\xe9\x63\x40\xd0\x2c\x41\x41\xbd\x35\x86\x8e\xab\x8e\xe5\xda\x63\x51\x32\x94\x0a\x70\xe9\xe3\x3a\x89\x50\xdb\xd8\x85\x47\xd3\xc9\xef\xe0\xba\xc8\x29\x79\xdb\xd6\x73\xe5\x0a\x0c\x16\xdc\x25\x97\x33\xc0\x8b\xf7\x09\x0d\xe7\x78\xb9\x0d\xbe\x4e\x55\xa4\x6e\xb1\xe7\x8f\x20\x83\x6d\x07\x8e\xdf\x70\x11\x10\x6b\xc9\x48\x56\xef\x23\xb8\xdd\x7b\x3f\xd0\xc4\x5d\x8d\x5c\xeb\xb4\x27\xc1\x41\x67\x2d\xd3\xac\xab\x3f\x79\xcb\x6f\x6a\x46\xce\xe7\x54\x08\x56\x04\xb9\x9e\xad\x11\x8b\x6a\x4d\xb3\x39\x62\x26\x4a\xcc\xbd\x2a\x98\x3e\x56\x64\x2e\x95\x26\x25\xcd\xe6\x5c\xf8\x44\xa0\xc2\x67\x16\x6f\x33\xb3\x1c\x3c\x0d\xd6\xde\x2b\x30\x5b\x08\x08\xcb\x16\x77\x0a\x33\x47\xf4\xe4\x13\xfa\xae\xf5\xd2\xd6\x3c\xb4\xf7\x10\xf6\x19\xa5\x1c\xc0\xca\xf0\x6e\xcc\x18\xf7\x97\x87\x26\x97\xa5\x37\x4c\x72\x11\x10\x1e\x66\x3f\x20\x7c\x4a\x1a\x91\xe0\xae\x9d\x70\x27\x8b\x26\xa2\x3e\x51\x37\x13\x79\xd1\x08\xb3\xe9\x6d\xc5\x99\xb7\xe7\x44\xd3\x7a\xc6\xb4\xe9\x8d\x88\xa6\xbc\x61\x75\x7f\x4a\xf2\xfd\x15\x49\x3b\x48\x4d\xd3\xce\x0e\xf4\x94\x22\x25\x1f\xdc\x57\x10\xba\x01\xdc\xc0\x54\xc6\xd1\x61\xf4\xb7\x73\x85\x54\xb1\x8c\x9e\xc1\xd5\xdf\x59\x52\xd2\x88\x18\xea\x9c\x52\xeb\x14\xcf\xf2\x6f\x7f\x7b\x9f\x5a\x68\xee\xb8\xfd\xf2\x3e\x00\xb9\x93\x75\x91\xdf\xf1\xdc\xba\x56\x92\x13\xf3\xf2\x69\x2c\xb0\xec\xb8\xee\xdc\xf6\x69\x71\x53\x75\x53\x77\x77\x3c\xdf\x4b\xcd\x58\xe8\xb8\xbb\xd3\x4e\x74\x32\x3b\x4d\x60\xab\x79\xce\x84\x36\xa8\xa3\x56\xe4\x04\xbe\x88\xc9\xdb\x70\xc1\x31\xbb\x1e\x8c\x00\x95\x6d\xca\x1b\x2e\xda\x04\x91\xed\x59\x1b\x72\x63\x6e\xbe\xd3\xb6\x2a\xa6\x31\x47\x17\x44\xe7\x4b\x3d\x27\x8a\x97\x4d\xa1\xa9\x60\xb2\x51\xf1\xe5\xe4\x3f\xcb\xe3\x9e\x16\xec\x13\xde\xcd\x5d\x26\x41\x6e\x7b\xed\x72\x0b\x10\x1b\xd4\x66\x96\x5d\x65\x17\x7a\x7a\x6d\x43\x2e\xf3\x17\x9e\xb1\xf0\x19\xf2\xd8\x27\x96\xd9\xdc\x18\x55\xd1\xcc\x78\xaf\x44\xf5\xc6\xcc\xcc\xc8\xa4\xf9\x6b\xf2\xb6\x9d\x30\x44\xe2\xba\x5f\xb0\xdc\x30\xd8\xed\xed\x40\xe4\xfc\xfa\xf2\x8d\x4d\x65\x2a\x94\x66\x74\x57\x3c\x4a\xac\xa9\x73\x6c\xd5\x11\x3b\x62\x78\xb0\xb3\xc4\xcb\xde\xe6\x72\x5d\xd5\x9e\xd9\x5f\x6c\xdd\x02\x9f\x03\x3f\x36\x79\x67\x02\xd0\x0f\x9c\x1a\xb6\x07\x38\xb5\x30\x0d\x7e\x30\x81\x9c\x55\x4c\xe4\x50\x58\x2f\x80\x7b\xdc\xa5\x9d\x1e\x91\x2d\x02\x97\x4a\x97\x5d\xed\xb8\x0e\x51\x0e\xf4\x2e\x73\x59\xe4\x8a\xb0\x4f\xba\xa6\x06\xcd\x97\x06\xa1\xfb\x6f\xa6\x84\x8a\x65\x44\x05\xcf\xe7\x54\xec\x9b\x3c\x09\x17\x98\xff\x9c\xb8\x40\xc5\xb2\x9a\xe9\xa8\x20\xe1\x2d\x4a\x80\xb8\xce\xbb\x1b\xd8\x79\xbc\x26\xca\xe3\xaf\x2e\xd4\xa5\xad\xf3\x1b\x35\x9e\x50\x1c\x0a\xea\xad\x54\x0f\xae\xa8\x52\x5e\x3a\x06\x22\x67\xaf\xad\xea\x64\x8d\x88\x18\x02\x35\xb5\x7c\x4a\x84\x5c\x99\x69\x18\xd4\xe3\xf5\xa8\x9d\x57\x22\xba\xf7\x16\xb3\x12\x8b\x0a\x50\x01\xe1\xf1\xd8\xcd\x08\x62\x86\xf1\xdf\x68\x34\x33\xeb\x0a\xe4\x7e\x58\x59\xcc\x3e\xd9\xb5\xef\xf6\xb2\xa7\xb9\xf2\xc4\x47\xb2\x6d\xa7\x87\x7b\x1f\x10\x57\x17\x1c\x15\xab\x02\xea\xe6\x7b\x65\x50\x85\x93\x2f\x18\x64\x93\x75\xc9\x55\x0d\xe3\x9b\x37\x18\x80\xe4\x52\x3c\x74\x13\x37\xc4\x07\x6a\x07\x21\x37\xad\x17\xc3\xa5\x50\x9a\x42\x8c\x3f\xac\xc2\x50\x55\x43\x00\x6d\xde\x5e\x0b\x88\xa8\x2d\x77\x99\x02\xa2\x87\x2b\x0d\xd1\xcc\x58\x6d\x60\xad\x58\x92\xbb\x5a\xc6\x3b\x55\x26\xea\x7d\xe5\x82\xd5\x0b\xce\xee\x5e\xd8\xc8\xb6\xb1\x59\xc0\xd8\x06\x87\xbf\x00\xf1\xf0\xc5\x2f\xe1\x7f\x51\xe3\x27\xeb\x21\x2d\xb6\x7e\x4d\x8e\xfa\xcb\xeb\x6d\x6b\x9e\x9d\x42\x32\xe8\x9d\x56\x30\xb3\x5d\xae\x28\x0d\xed\x43\x2b\x06\xc4\x28\x09\x2d\x7e\x0b\x58\x17\x73\x21\x5c\x47\x36\x15\x1f\x51\xe6\x8c\xda\x90\xc7\x46\x88\x08\x2f\xdb\xae\x1c\x80\x1d\x76\x84\x00\xef\x14\xc0\xc5\x58\xd7\x8c\xf9\x45\x69\xcb\x26\x0a\xe9\xca\x30\x44\x16\xd7\xdc\x83\xe2\x32\xa7\x9a\x2a\xa6\xe3\xd4\xd4\xe9\xa8\x28\xe8\xde\xac\x38\xc4\x4a\xf6\x27\xb0\x34\x32\xc8\x4d\xe3\x32\x1a\x93\xf1\x9f\xad\x70\x20\x3a\x6f\x1a\xb1\xc0\xee\x74\x0c\x96\x9f\xbb\x52\x54\xce\x87\x1a\x47\x69\x0f\x68\x97\x3c\xab\x9d\xe3\xb7\xdf\x5e\xbe\x49\x15\x8a\xda\x2f\x9d\xec\x00\xff\xee\x6e\x93\x05\x64\xa8\x39\xc5\x7f\x6c\x42\x75\x07\xd4\xe4\xf0\x20\x68\xdf\xdf\xd5\xda\x66\x19\x6b\x8d\x0b\x6f\xb8\xba\xdd\xe5\x2d\x5f\xeb\xbc\x7b\xdf\xff\x7a\x7e\x41\xec\xd3\x87\xec\x03\x3d\x83\xec\xda\x7a\xd0\xbd\xf9\x7f\x3d\xbf\x58\x59\xc2\x8a\x22\xe0\xac\x28\x9c\x7c\x66\x04\x0d\x97\xfa\xc0\xe2\x84\xe4\x0d\x02\xdc\x61\x78\x9f\x9a\x61\xbd\xc0\x60\xe6\xf9\x24\x53\xdc\xa7\x47\x9d\xdd\xb2\x09\x97\x81\x23\xc2\x9e\xeb\x39\xce\x32\xd6\xba\x9f\xe4\x5c\xdd\x1e\x5a\xbf\x51\xe5\xef\xfb\x92\x68\x3c\x2f\x83\xce\xaa\x70\xef\x4a\xfd\x04\x35\xbf\x96\xb2\x21\x77\xb6\xba\x41\xb4\xfa\xe0\x23\xaf\x5e\x93\x0b\xa1\x9a\x9a\xb5\xbe\xdc\xab\x83\x19\x7e\x7d\x87\xca\x04\x28\x96\xa1\x5e\x1f\xcc\xf8\x73\x60\x70\x25\x69\xd4\xa0\xa2\xb5\x06\xc9\x7f\x1f\x00\xe4\x3b\x77\xe4\x22\x78\x20\x76\x03\x41\x97\x53\x17\x81\x38\xb2\xf9\xc1\x7d\x51\x44\xd7\x4d\xeb\x31\x02\xb4\x3a\x0d\x4a\xde\xfa\xd2\x54\xe4\x45\xce\x16\x2f\x54\x4e\x5f\x8d\x60\xaa\x2e\xe6\xbe\xbb\x2e\xaa\xc8\xd1\xab\xa3\x98\x31\xae\x79\xc9\x0b\x5a\x17\x98\x9d\xce\x27\xed\xf3\x3d\x19\xfc\xeb\x86\x04\xf7\xcd\x97\x47\xe4\x44\xd6\x30\x76\x46\x05\x29\x98\xcb\x64\x67\x71\xc5\x12\x45\x8d\xd3\x67\x0c\x92\xfb\xb0\x2e\x22\x32\xdd\x0b\xf8\xe6\x8e\x1b\xb4\x9c\x4c\xa7\x48\xd1\x9b\x96\xd8\x73\x61\xa8\xeb\x84\x7c\x6b\xa9\xb3\xe5\x78\x10\x36\x72\x20\xb5\xf8\xc6\xf3\x3d\x99\xe7\xa3\xc2\x5b\x51\xc6\xed\x48\xd5\x46\xd6\x6d\xc2\xcf\xf8\x34\xfa\x55\x82\x33\xae\x3f\xb0\x4a\xee\x94\xc7\xc5\x2e\x57\x0c\x5a\x5c\x9b\x07\x52\x71\xa8\xc2\x4d\x35\xa1\x88\xa3\xb2\xa6\xa0\x46\xea\x45\x83\x55\x12\x23\x6a\xc7\x59\x61\x3f\x3f\x86\xf5\xd0\x82\x48\x72\xab\x48\xf1\x33\x19\x59\xac\xde\xab\x31\xf5\x95\x7e\xa1\x08\x08\xf8\x46\x72\x7d\xee\xbb\xc5\x00\xc3\x42\x0a\x1b\x02\x68\xfa\xb6\x36\xb0\x19\xd7\x36\xc5\x39\x0e\x65\x7e\x76\xbd\xf5\x0c\xda\x16\x1c\x81\x0a\xe5\x7e\x15\x07\xb7\xa1\xb5\x87\xb6\x2b\xf9\xdb\x15\xfd\xde\x8b\xf4\xed\xeb\xbc\xbb\x24\x5e\xe8\x9f\xd0\x3e\x8f\x25\xdd\xef\x5c\x2d\x25\x57\x0d\x08\x7d\x60\x6b\x8d\x70\x74\x3c\x99\x1c\x4f\x80\x6d\x38\x9e\x1c\x3b\xd6\xb2\xf0\xce\xd0\x96\x0a\xb7\xc3\xa6\x95\xcc\xeb\xde\x96\x09\x21\xdf\xb8\xfc\x04\x90\x40\x79\xc5\xf3\xda\x3b\x55\xb7\x75\xa0\x31\xf5\x5c\xf7\xce\x45\x69\x8a\x41\x87\xdd\xdc\x84\x13\xb7\xae\xda\x33\xbe\xb0\xb9\x55\x77\x6a\xfa\x6a\x27\x98\x08\x0f\xe1\xca\xac\x12\xe1\xc3\xd7\xbb\x9d\x19\x22\x91\xe4\x79\x59\xdc\x63\x67\x95\xc9\xb2\xc4\xd2\x5e\x73\x2f\x0b\xb7\xb9\xf9\x62\x11\x5f\xbc\xfa\x02\xcb\x9c\x4d\x7b\xee\x61\x22\x4a\x77\x9d\xae\xa8\x2b\xfc\x63\x9b\x1f\x44\xb4\x42\x15\xa0\x45\x35\xa7\x35\x53\x58\x8e\xdc\x16\x5f\xee\xaf\xd9\xb9\x82\xe5\xfd\x18\x0f\xab\x1a\xdb\x29\xee\x5f\xd9\x18\x8f\x3d\x99\xc8\x2b\xc9\xfb\x93\x67\x8d\x49\x45\xf5\xc3\x69\xaa\xe3\x31\xac\x1f\x34\x11\x72\xfd\x77\x0e\x74\xdd\x83\xa0\x92\xa3\xcd\x00\x17\x1c\x8b\x96\x95\x2c\xe4\x2c\xda\xfb\x27\x52\x9c\xd4\xf3\xfd\x48\x92\x7a\xee\x56\xd7\x2e\xc1\xcb\x4c\x3a\x2a\xc2\x73\x03\x33\x67\x6b\x67\x2a\x97\xc6\xcf\x32\x6e\x2f\x3c\x54\xbe\xf8\x70\x71\xf6\xe6\xdd\xc5\xa4\xcc\x7f\x89\x71\x20\x63\x3a\x8e\xa9\x80\xf9\x39\x70\xd5\x6b\x1b\x89\x7a\x0e\xc0\x09\xae\xf0\x64\x5b\x43\xb1\x62\x75\xc9\x31\x46\xf1\x90\xec\xf6\x9e\x4f\xa8\x9f\xd3\x36\x58\xf1\xaa\x17\xac\xd3\x8e\xc6\xf5\xd9\x45\xcb\x55\xcd\xc6\xbe\xc8\xd3\x94\x17\x10\x84\xd5\x52\xf4\x00\x4b\xf7\x74\xef\x34\xc7\x4e\x09\x8d\x7d\x14\xcb\x55\x0d\x72\xcb\x9d\x7a\x9d\x3d\x26\xb7\xee\x2f\x0a\xea\x2b\xba\x5a\x4d\x1d\x9d\x61\x91\xa6\xda\xe6\x96\xad\x6a\xbe\xe0\x05\x9b\x41\x79\x6b\x2e\x66\xaa\xcd\x2d\x68\x8d\xa8\x3d\x03\x40\x1c\x1c\x6b\xe9\x92\x37\x93\xbd\x03\x93\xa8\x4f\x97\x84\x40\xfd\xfe\x9b\x8f\x50\x78\x1e\xec\xaf\x7b\x56\x1f\x9b\xe9\xf4\x62\xfd\x7d\x68\x8d\x77\x47\x69\xf6\x8a\xa6\x9d\x39\x68\x13\xe0\x46\xaa\xf4\x50\xa7\x86\x28\x9f\x12\xb5\x2c\x0b\x2e\x6e\x47\xbe\x68\xd8\x54\xda\x74\xa9\x8c\x98\x1f\x1c\x38\xd7\x8c\x16\x8f\x21\x06\x3b\x07\x02\x92\x46\x08\xf4\x9e\xf4\xf8\xc0\x58\x99\xbb\xfa\x6f\x0e\xed\xa0\xee\x24\x11\x8b\x47\xd8\xe5\x9f\xdd\xb6\xf2\x92\xce\x76\xea\xf8\x0b\x1d\x76\xd0\xb6\x20\xdf\x9c\x5f\xfa\xda\x7f\xa1\xe2\x02\xdf\x95\x35\xa1\xb5\xe6\x53\x9a\xe9\x53\x52\x35\x50\xa1\x05\xea\x4d\x58\x32\x6b\x6f\xc7\x3d\x5e\x01\x3d\xd3\xf9\xd8\x8a\x91\xe0\xa2\xa5\x64\xb1\x30\xfd\x6b\x28\xf4\x0c\x72\x6f\x53\x59\xa7\x02\x08\x59\x75\x15\xe3\xaf\x9a\xa2\xb8\x92\x05\xcf\x96\xbe\x58\x01\xaa\x5f\x72\x83\x8a\x7a\x71\xd1\x59\x71\x47\x97\xea\x75\x38\x73\x42\xe1\x19\xa1\x5a\xb3\xb2\x42\x90\x31\xcb\x5d\x4d\x5a\xdc\x6a\x60\xb0\x88\xae\x2b\x96\x3e\xa5\xbc\xf0\x77\xbf\xb1\x0f\x7a\x71\xf9\x98\xbc\x67\x0b\x56\x77\x67\x22\xcc\x23\xe8\x44\x75\x47\x87\x8d\x07\x6e\xa6\x51\x20\xdf\x60\x7d\x84\xb5\x83\xea\x99\x25\x9f\xae\x74\x8b\xb5\x45\x2c\x4c\xf4\x4f\xf9\x72\xfa\x5e\xea\x2b\x7c\xbb\x3b\x73\x9c\xf3\x3d\xfd\xd3\xc2\x70\x63\x4b\x37\x8e\x39\xcc\x9c\xab\xdb\x47\x4d\xd6\xcb\x63\xe1\x96\xc7\x03\x1d\x54\xd3\xad\x31\x91\x21\x40\x9e\x1d\xcd\x40\x1f\xfc\x96\x9b\x65\x59\x88\xaf\x99\x0d\xa5\x1e\x59\x20\x2c\x19\x75\x75\x99\x05\xbb\x83\x2a\xeb\xba\xad\xfa\x6b\x55\x2f\x99\x2c\x19\xa1\x0b\xca\x0b\x7a\x53\x80\xa7\x85\xe9\xdc\xf6\x15\x21\x81\x9f\xc1\xaa\xc0\xc2\x28\xdd\x0d\x31\x67\xed\x61\x13\x4f\xdf\x26\x9d\x09\xaf\x0d\x4e\xa0\x90\xd9\x6d\xc8\x6f\x40\x95\x2a\xe5\xca\xcd\xc3\x4d\xa6\x4b\x42\xf3\x9c\x28\x3e\x13\x10\xee\x2c\x34\x29\xa8\x66\x22\x5b\x4e\xc8\x5b\x1c\x5c\x05\x55\xa0\x75\xcd\xbd\x5f\xbf\x80\x1a\xec\x6d\xe5\xcb\xec\x56\x4e\xa7\x2b\x55\xa3\xad\xe9\xd3\x22\x0a\x5c\x3d\x55\x52\xe0\xe0\x4c\x29\x3a\x8b\x42\x14\xab\x65\x60\x70\xe7\x6d\xf2\x01\x87\x8e\x5c\x66\x01\xe7\xba\x54\xbb\xd0\xd8\x36\xf4\xd5\x43\x5b\xdd\x08\xcd\x4b\xb6\x92\x75\x93\x80\xfe\x76\xcd\x85\xc1\x0c\x65\xd3\x92\x42\x60\x8a\x0d\x74\x75\xe5\x55\x78\x6e\xe7\xb7\x66\xeb\x5d\x45\xa8\xe0\xef\x17\xb3\xde\x00\x2f\x03\x2c\xba\x25\x42\xa1\x66\x9b\xee\xa5\xe5\x52\x4e\x20\xce\xb6\x3d\xe8\xef\x7f\xfd\xf7\xc9\x22\xb4\x31\xc0\xe7\x86\x7c\x9e\x9a\x99\x95\xac\x9e\xb9\xfa\x21\x25\x15\x7c\xca\x94\x39\xf5\xa5\x01\x11\xab\xc7\x83\x02\x43\x77\x06\x38\xd0\x9b\x62\x65\x21\xbd\xb8\xed\xe3\x8a\x8e\x30\x38\xa5\x56\x2c\x3b\xa9\x65\xaf\xc5\xef\xba\xb9\x41\x76\x0a\x3e\x5f\x99\x8c\xab\x95\xa5\x83\x9d\xef\xdd\x0b\xd5\xdc\x54\xb8\x13\x6c\x6a\x28\xfe\xab\xc9\xef\x7e\x17\xb3\x1c\xf4\xd5\x84\xde\x15\xcb\x9a\x9a\xeb\xa5\x41\x5e\xec\x93\x9e\x4c\x15\x54\x9e\x38\x87\x44\x0c\x96\x34\xcd\x29\xa8\x83\xd0\xb1\x13\x2f\x40\x0b\x9a\x06\x5c\x0e\xee\x85\x56\x79\xba\xb9\x0f\x4e\xcd\x2e\x7b\x6a\xd1\x93\x81\xaf\x16\x88\xd5\x84\x5c\x49\x85\xb9\x1d\x7c\xf6\x9e\x28\xd7\xdc\x67\x43\xad\x4d\xfb\xec\xe8\x35\x01\x99\xe4\x79\x53\xec\xfe\x15\x84\x9c\x3c\xc2\x83\x19\xe7\x35\xa4\xc0\xd4\x44\xd3\xd9\x4a\xb1\x0b\x59\x77\x16\xdd\x66\x5a\xde\xb1\x15\xc1\xae\x71\x1f\xb7\xe9\x83\x13\xad\xc9\xe5\x2a\xc0\x74\xa3\x19\x6c\xee\x9d\x98\x6d\xfc\x92\xcd\xe9\x82\x6d\x44\xf1\x95\xcc\x27\x1b\xf0\x26\x00\x6b\x4c\xd7\x86\x25\xf7\x41\x03\x3e\xf9\x8b\x52\xac\xbc\x29\xda\xfa\x21\xab\x44\x65\x13\x85\xbc\x59\x92\x42\x4a\x48\xab\xd0\x54\x44\xc8\x9c\x19\x30\x03\xa7\x04\x5a\xa8\x11\xb9\x3e\xb3\x2f\x56\xc1\x90\x98\x1a\x0c\xf8\x9f\x8a\x65\x1b\x5e\xd8\x83\x54\x1d\x64\xbd\x46\x92\x18\xe3\x33\xd6\xf1\xf9\x97\x36\x58\xa5\x2d\xa2\x62\xcb\x51\x14\x6c\xc1\xc0\xac\x36\xe5\x33\x82\xe9\xb6\x4b\x9b\x80\xcd\xf9\x08\xc9\x1a\x92\x18\xd7\x3c\x8f\x11\x85\x57\xa9\xb7\x39\x90\x3b\x59\xdf\x16\x92\xe6\x41\xa9\x74\x45\x0a\x7e\xcb\xc8\x1b\x56\x15\x72\x69\xb3\xa6\x89\x9c\x5c\x6b\xaa\xd9\xb4\x29\xae\xa3\x36\x32\x56\xba\x55\x99\xe2\x3b\x95\x6e\x4d\x87\x2b\xd2\xed\xe5\xf5\xf9\xf5\xe5\xb3\xf4\x6e\x7d\x9c\xae\xe1\xc5\x2f\x61\xb5\x87\xd6\xe2\xf1\x1f\xfb\xcc\xb9\x63\x52\x34\xfd\xef\xa0\x81\xfc\x4a\xd6\x9a\x16\x3b\xe2\x6d\xb2\x39\xad\xce\x1a\x3d\x7f\xc3\x55\x66\x2e\x46\x2a\x8b\xb3\xf6\x7d\x90\x54\x87\x81\x56\xd8\x72\x98\x84\x3b\x98\xb2\xef\x9d\xff\xdb\xd9\x15\xa1\x8d\x81\x03\x6d\xd3\x45\xed\x4c\x7f\x1f\xae\xec\x1a\x93\x2c\x6e\xb9\x2e\xfb\x75\xcf\xaa\xdc\x5b\xfb\x5e\xd3\x53\x85\x07\x0f\xbe\xbf\x07\xf4\xfd\xed\x47\x51\x24\x8d\xe1\xe2\x82\x6b\x4e\xb5\xac\xf7\xe5\x34\xd9\x19\xc0\xfb\x52\x34\x4a\xcb\xd2\x5e\x90\x4b\xf7\x06\x04\xd9\x44\x5a\x04\xd6\xba\x6d\x5d\x31\xc0\x4e\x09\x1b\x75\x29\x34\xab\xa7\x34\x63\x2b\x09\x2e\x46\xa0\x5e\xc2\xd1\xb9\x7b\x27\x62\xdc\x3f\x59\x2f\x24\xa8\xe7\x5b\xfc\xf9\xf5\x9f\x02\x37\xe2\x3f\x7b\x16\xcd\x2a\xb5\x42\x6e\x4c\xb0\x2c\x2e\xe5\x5d\xca\xc9\xfd\x98\x8a\xb7\xf8\x8f\x62\xc5\x9d\x0a\xb7\xe0\xff\x35\xb4\xc0\xad\x8b\x3b\x80\x94\x49\x76\x8e\x61\x2f\xf0\xd5\x3d\x68\xbb\x3e\x7f\xaa\x18\xb8\x05\xf8\x04\x45\x46\x61\x17\xad\x6b\x2a\x94\x39\xc8\x54\x61\xe9\xd8\xb2\x8b\xc7\xe4\x44\x67\x55\x84\x77\x75\x52\xe4\xa3\x8f\x7a\xb4\xff\xe8\xf9\x20\x3d\x3d\x54\xd1\x88\x90\xa1\xc3\xcd\xf8\x88\xe0\xf0\xb5\x4f\x0f\x15\xbb\xaa\xbd\x38\x70\xc3\xed\xda\x4b\x3a\x1e\xdb\xb5\x87\x92\x70\xf1\xc8\x3a\x91\xaf\xb9\xd2\x98\x48\x02\x5f\x86\x40\x62\x4c\xb5\x63\x98\xdf\x2b\x23\x25\xf0\xea\xbf\x68\x9e\xd7\xaf\x91\xca\x3b\x0d\x77\x1d\x13\x27\x6e\x44\x14\xed\xcb\xe3\x39\xc9\xe3\x44\x2f\x2b\x5b\x57\xfd\xe3\xf9\x15\xf4\xa5\xc8\x1f\x7f\xff\x12\xb8\xe1\xdf\xfd\xf6\xf7\x2f\xa3\xc1\xec\xb3\xcc\xc9\x43\xfe\x17\xfa\x92\x1f\x22\xd7\x43\x27\x5f\x03\xe4\xf6\x35\x3c\xe8\x35\xa6\x36\x30\xe4\xc9\xa2\x42\xbc\x00\x06\xd6\x3c\x59\xdd\x8e\x53\x1d\x12\x0e\x0c\x09\x07\xda\x36\x24\x1c\xd8\x3c\xb1\x40\x52\xdf\x8b\x7b\x47\xd0\x3f\xa4\x94\x5d\xa7\x72\x48\xe0\xae\x3e\x47\x02\xd7\x7b\xa0\xfd\xe8\x22\x6d\x4b\xc3\x20\xaf\xb8\xac\x5e\x6d\x12\xac\x37\xef\xaf\xff\xeb\xeb\xb3\x2f\x2f\xbe\x86\x75\xda\xa8\x31\x03\xd6\x5c\xec\x49\xa9\xb5\xa3\x4b\x14\xbb\xd7\xbb\x75\x4f\x17\x2b\x8e\xe9\x82\xbc\x7f\x7b\x9d\xe8\x93\xbe\x57\x1d\xe1\x2f\xc5\x34\x66\xdf\x0e\xeb\xe6\x67\x5e\x52\xac\xde\x5d\x86\xbc\xbd\x7a\x03\x06\xd5\x3e\x3b\x5a\x1c\x73\xd2\xb8\x8a\x03\xa8\x51\xfa\x8e\x91\x7c\x26\x1e\xdb\x66\xd3\x70\x23\x9f\xa5\xaf\xf6\x7e\x8e\x24\x96\x67\xae\xd3\xd3\x3c\x46\x26\x47\xab\x83\x5c\x90\x06\x21\x21\x89\xa8\x0d\xf1\x34\x64\x93\x29\xe5\x08\xc6\xe7\x0a\xd5\xd5\xa6\x32\x09\xbb\x44\xf5\x1b\x07\xb0\x25\x12\x5c\x8d\x87\xc0\x15\xbe\x63\x9e\xed\xb3\x2c\x6d\xae\xf1\x10\xda\x4b\x81\x00\x56\x34\xeb\x27\xe5\x3b\xab\x66\xd3\x3e\xc2\x27\x90\xda\xfe\xe0\xc4\x04\x46\xdd\x61\xb2\x11\xdf\xdf\x3e\x2e\x9a\xef\x7c\x35\xef\x2a\x4d\x39\x62\x42\x95\xf7\x93\x43\x1f\xbb\xa4\x04\xad\x4f\x0c\x03\xe4\x19\x52\xa2\xbf\xed\x4d\x81\xb2\x6b\xe5\x49\x35\x97\x5a\x8a\xfd\xa5\x81\xda\xd4\x7f\x17\x71\x5d\xc1\x1b\xe7\xde\x1d\x20\x40\x7c\x98\x09\xc2\x9b\xcc\x57\x7c\xc0\xad\x79\x3c\xcd\xfd\x3b\x0c\xb8\xbc\xda\x34\xb7\x87\x63\x2f\x37\x2e\xe7\x39\x85\x61\x56\xf9\xe5\x9b\x1d\x61\xae\x21\x9b\x32\xb6\x67\x5a\xf7\xc2\x9c\x74\xe2\xe1\x98\x4f\xdc\xae\x5f\xbe\xb1\x82\x86\xcb\x35\xa7\xec\x7d\x20\xf7\x5f\xc5\x9d\xf1\x4e\xb2\xd6\x77\xb2\xde\x43\x96\xf9\x6e\xcf\x2b\xc1\x82\xf6\xb7\xb5\x1c\x93\x3b\xc7\x2b\xdd\x49\x24\x25\x8d\x5b\x5d\x81\xd9\xd1\x9e\xa1\xef\xc9\x18\xf7\x29\x9f\xb8\xbe\x26\x99\x2c\xa3\x93\xc5\xed\x01\x29\xe1\x86\x7f\x0e\x88\xe9\x1a\x10\x53\x00\x36\x0f\x21\xa8\xe7\x8a\x9f\x9e\x16\x2f\x1d\x84\xc1\xfa\x59\x25\x2a\x77\xd7\x23\x71\xc7\xdc\x67\x56\x6b\x6a\xce\xba\xc5\xe5\xd4\x63\x21\xfb\xde\xce\x70\x77\x2d\xff\x01\x88\x26\x01\x6d\xfb\x6f\xd0\xac\x0a\x38\x8f\x16\x85\xd9\x55\x29\xda\x9a\x1f\xaa\x75\xac\x45\x2f\xd4\x92\x56\xd6\xc9\x36\x97\x77\xe2\x8e\xd6\x39\x39\xbb\xba\xdc\x0d\xf6\x4a\x48\xe3\x83\xb0\x16\x57\x61\x6f\x8b\x44\x3e\x6d\xf7\x80\xca\x35\xd6\x43\x64\xe4\x86\x6b\xd5\xa9\x70\x1a\xe8\xa8\x0c\x9d\xf2\x5e\x34\x06\xb3\x18\x2c\x62\x7b\x4a\xe2\x9b\x04\x91\x99\xa6\xae\x24\xe7\x0d\xd3\x77\x8c\x09\xf2\xf2\xe5\x4b\x34\x3c\xbc\xfc\xc3\x1f\xfe\x00\x5e\xe0\x24\x67\x19\x2f\xd7\x5f\x84\xb7\xfe\xe5\xd5\xab\x98\x41\xff\xfd\xec\xdd\xd7\x84\x66\x20\x04\x62\x55\x1d\x1c\x1b\x0e\x38\xec\x5e\x8d\xc8\xff\xbd\xfe\xe6\xbd\xa3\x30\x6a\xe5\x57\x80\x1f\xbf\x45\x51\xc2\x93\x8d\x59\xe2\x10\x55\xd6\x1a\x17\xa8\x9e\xfb\x58\x1e\x0a\xa6\xc9\x20\x9e\xcb\xde\xfd\x28\xcf\x3c\x48\xb4\xcf\x67\x73\xd8\x54\x2e\x00\x7e\x0b\x9e\xd9\x14\x4a\x68\xee\x71\xf5\x28\x30\xac\x1f\x03\x74\x1c\x79\x89\x18\xc3\x2c\x78\x84\xae\xd2\x36\xf0\xa7\x2d\x4d\x5d\x33\x65\x64\x43\x5b\x7d\x14\x87\x6b\x61\x48\xb1\xe8\x1a\x1e\xfb\xf0\x56\xb1\x97\x7b\x2f\x8a\x46\x8b\x37\x2c\x4f\x5b\x70\xa5\x83\x22\x94\x16\xed\x80\x4e\x97\x5c\xd0\x6c\x4e\x98\xd0\x90\x1e\x0a\x0f\xd8\xbc\x1e\x31\xc8\x9c\x8a\xdc\xdc\x30\xa8\x56\x00\x03\x3e\x91\xab\xc9\x36\xc6\xfb\x2b\xbf\x07\x9d\xd8\xc5\x16\x23\x53\x23\xb2\x86\x60\xda\x32\x26\x41\xd4\x58\x64\xf9\xd4\x8b\x4f\x14\xb2\x66\x98\xad\x42\xfd\xae\xb2\x11\x6c\x2a\xac\xad\x15\xd3\x59\x62\x05\xf4\x34\x87\x09\x42\x32\x4c\x86\xf2\xb1\x6e\x94\xfe\xb2\x31\x07\x1c\x5b\xc9\x73\xdb\xda\xa9\xe7\x6b\x23\xa2\xaf\x82\x35\xd0\x81\xda\x36\xcb\x98\x42\x50\xfe\x01\x03\x63\x74\xfb\xf6\x0f\xb8\x91\xd1\xe3\xc9\xe9\xa6\x21\x5d\x20\x2b\x17\x06\xf7\xd3\x46\xcb\x31\x14\xad\x76\x09\x54\x7a\x43\x99\xdb\x76\x56\x54\x73\x3a\x22\x33\x1a\x30\xb1\xeb\x23\x06\x00\x38\x65\x54\x37\x35\x83\x2f\x12\xc6\x79\x60\x15\x06\xe1\x59\xcb\x3c\x40\x56\x5b\x55\x58\xd0\x92\x41\x48\x16\x4e\x2c\x7a\xb0\x95\x1a\x71\x8a\xcf\x04\xab\x51\xad\x0a\x21\xb9\xa4\xa0\x37\xac\xb0\x43\xc9\x3a\x61\x19\x5f\xb9\xf0\x37\x56\x1b\xec\xa9\x08\x9d\xcd\x6a\xa6\x14\x5f\x30\x1b\xd3\xcc\xff\xd9\xd6\xa6\x9b\x33\x72\x75\xf1\xce\x45\x76\x2b\x62\x18\x5b\xcd\x62\xf2\xda\x61\xf3\x59\x15\x0d\x68\xb5\xb2\xc7\x84\x90\x0b\x25\x35\x54\x5c\x33\xfd\xdb\x23\x51\xbe\xc2\x32\xb8\x85\x8e\x21\x84\x3b\x65\xcf\xda\xb0\x1d\x8c\xfe\x9e\x33\x9a\xbb\x40\x59\xc3\x52\x56\x95\x11\x7d\xc9\xb9\xb9\xa2\x53\x5b\xf5\x1b\x03\xa5\xf3\xc6\x88\x2a\xb4\x57\x57\x16\xb6\x8f\x73\x46\x64\x9d\x33\xac\x29\x3e\x05\xef\x1b\xdf\x6d\x40\xdf\x21\x23\x10\x37\x23\xdd\x70\x5d\xd3\x7a\x89\x14\xd3\x9e\x44\xf4\x70\x06\x67\x62\xb5\x73\xe8\x15\x46\x86\x38\x28\x12\x93\xe2\xcd\xb5\x44\x84\x46\x12\x24\xec\xb6\x45\x19\xc3\x5d\x4b\xc5\x99\xa6\x01\xf8\x5f\x5b\xe8\x8f\xff\xec\x31\x25\xa7\x09\xc1\xf1\x40\x64\x58\x47\x06\x3e\x28\x5f\x67\x73\x4b\xd7\xbb\x57\x94\x10\x94\x04\x69\xac\x0b\x19\x36\x1b\x42\xcd\x1d\x12\xf0\x6e\xf4\x4c\x4f\x0c\x03\xad\x1b\x5a\x14\xcb\x31\xfb\x64\x48\x89\xb9\xc4\x40\x43\x21\x6b\x24\xf8\xdf\x37\x42\x31\x9d\x52\x46\x9e\xe0\xe5\xab\x6a\x4c\xff\xa0\xc8\x11\xae\x49\x48\xc8\x07\x75\x84\xdd\x1a\x41\xe0\xa6\xd1\xe8\xb3\x36\xda\xfc\x49\xda\x3a\x17\xac\x5e\xda\x11\x12\x3e\xdc\x02\x9c\xc9\x96\x30\x47\xe0\x0e\xea\x6c\x7e\xf1\xa9\xaa\x31\x56\x28\xf1\xeb\x15\xf0\x5b\xed\x0c\x93\x26\x39\xee\xb1\x0b\x3e\xee\x12\x02\x86\x43\xaf\xb0\xf0\x09\x60\xb1\xb3\xf7\x6f\x52\xd0\x17\xb6\x14\x16\xb1\xdb\xa2\x19\xc6\x6e\x7b\xcc\x0d\xc4\x76\xf6\xc0\xde\xd8\xc4\x53\xee\x17\xcc\x15\xec\x4a\x7e\x39\xa9\x8e\x92\x5b\x66\x91\xb0\x91\x3c\x41\xd9\x65\x5f\xde\x62\x3a\x35\x83\x58\x6c\x0c\x2e\x67\x4b\xe8\x16\x47\x4a\x3d\x8b\xad\xc1\xd9\x4d\x24\x15\x4f\xb7\x6d\x6c\xa6\xbe\xd5\x77\x6e\xfb\x92\x3f\xde\xf6\x0e\x62\xbb\x65\x11\xaa\xbd\x4d\xad\x03\x7f\xe6\xbc\x9c\xd4\x06\x30\x65\x1e\xf8\xa0\x36\x0f\x46\x14\x52\x0d\x2b\xa2\x65\xfa\x91\x92\xed\x6a\xfb\x87\xcd\x6d\xf1\x0e\x16\xbc\xd5\x85\x0b\xe7\xd0\x35\x66\xdc\xb2\xe5\xb1\xc2\x1b\x60\x30\xd8\x9c\x57\x58\x2a\xcb\x90\x07\x23\x01\x6f\x79\x0d\xb0\x7d\x07\xc9\x65\xdc\xc0\x88\xe3\x2e\xc5\x88\xbc\x97\xda\xfc\xef\xe2\x13\x57\x96\xdb\x7b\x23\x99\x7a\x2f\x35\x3c\x79\x92\x13\xc2\x85\x3e\xe5\xf9\x58\x9d\x14\x07\x6f\x4c\x40\xe7\x20\x38\xc0\x82\xdc\x39\xb8\xbc\x1f\xfe\x2c\xb9\x22\x97\x90\x68\x1b\xb7\x74\xcb\xa1\xc1\xe1\xd6\xe5\x35\x31\x03\x3b\x19\x5b\x48\x31\x76\xae\xef\xeb\x23\xdb\xf3\x93\x75\xe7\xf8\x76\x3e\x09\x3b\x01\xd0\x8d\xe1\x2f\x90\x70\xad\x2a\x68\xc6\x72\x97\x3d\x8a\x9a\x9d\xa2\x9a\xcd\x7a\x9d\xc2\xef\x6b\x25\xab\x67\xa0\xca\xcb\xa2\xb2\x18\x6e\x58\xc0\xd6\x84\x18\xdb\x96\xe4\x38\x1c\x7c\x6b\xf0\x7f\x64\x48\xd1\x1e\x3b\x03\x1e\xeb\x6b\x83\xda\x1f\xc7\xab\x6d\x71\x2f\x83\xa1\x91\x2b\x29\x69\x65\xee\xe4\x7f\x1b\xe6\x03\x40\xf5\x7f\x48\x45\x79\xad\x26\xe4\xcc\x65\xb5\x0a\x7f\xb3\xd2\x63\xd0\xcd\x16\x53\xa8\xc0\x85\xf7\xc7\x86\x2f\x68\x61\xb3\x68\x50\x41\x18\x66\xfd\x32\xb3\x59\x65\x42\x47\xe4\x6e\x2e\x15\x72\x32\x3e\x5e\xe6\xe8\x96\x2d\x8f\x46\x49\x1a\x0c\xd7\xc2\x1b\x7f\x74\x29\x8e\x5a\x6d\x71\xe7\xb6\x7a\x1e\x0d\xdc\x60\x8f\xe0\xb7\xa3\xdd\xf3\xb9\x5b\x71\x56\xdb\xd6\x58\xde\x34\x81\xe4\x2b\xf6\x98\x00\x96\xb6\xc5\x87\x66\x61\xdb\x85\x98\xec\x60\x7a\x83\xe2\xec\x66\xe9\xf2\xbb\x59\x41\x75\x5d\x8e\x4d\x1a\x12\x64\xde\x40\x3e\x36\x20\xd6\x51\x11\xa4\x8b\x94\x89\x07\xe5\xd2\xd9\x1c\x6a\x93\x0d\x3d\xad\x1b\x36\x22\xb9\x14\xc7\xda\xaa\xbb\xc2\x1c\x88\xab\xb9\xa8\xf2\x0d\xe7\x70\xa2\x4e\x93\x06\xa5\x35\x83\xe4\x58\x2e\xa7\xa3\xd5\x30\x60\x3e\x44\xd0\x74\x42\x42\x18\xe7\x01\xba\x69\xc8\xf8\x08\x3a\x3b\xa4\x8d\xa3\x13\x12\x70\x17\x64\xd9\x0e\x87\x6d\x0f\x3d\x18\xbc\xab\x3d\x4d\x1a\xef\x21\x20\x02\x2c\xde\xc6\xf5\xa1\x5a\xe4\x9f\xac\x96\x49\x23\x6c\x50\x1d\xa5\x43\x67\x9c\x45\xbf\x6d\x71\x91\x22\x6d\xeb\x80\xe6\x07\x60\xef\x17\xd6\x50\x09\x69\x34\x83\x44\x22\xb5\xc4\xa3\x01\x9f\x07\xf8\xe1\x06\x56\xb5\xf7\x2b\xd7\x1e\xd5\x33\x55\x00\x06\x5a\xfb\x34\x6a\xd5\xa3\xd5\xfb\x38\x67\xad\x46\x5e\x4e\x6d\xcd\x72\x34\x3a\x3c\x16\x14\x7d\x72\x8c\x46\x60\xa6\x09\xb4\x8a\x6f\xa3\x1e\xdf\xe2\x58\xd1\xdf\xe2\x1d\xad\xb6\xb2\x82\xf9\xaf\x3b\xc5\xe9\xe9\x8d\x6c\xb4\xcb\xef\x61\x7f\x87\x12\xc0\x5a\x3a\xfb\xe3\xfe\x54\xe7\xdb\xe8\x38\x92\x19\xf9\xc7\x80\x34\x7a\xc2\x74\xfd\xb0\x46\x84\xd1\x6c\x6e\x38\xc0\x31\xba\x59\x18\x2e\xd5\xb1\xa3\x6f\xcc\xd6\x21\x63\x28\x57\x49\x4c\x1a\xf0\xf9\xd3\x70\x20\x17\xf8\xe7\x38\xb3\x91\xf3\x91\x54\xd6\x75\xcd\x32\xa7\xa2\x8d\x35\x48\x1a\xd3\xa9\xe7\x5c\xa6\x62\xab\xfa\x81\x55\x82\x8c\xba\x52\xe8\xc9\xc8\x1e\x2c\x37\x9f\xf9\x8b\x91\x34\xde\x86\x15\xb5\xe9\x6f\x0c\x36\xb5\x7e\x45\x8d\x58\x1b\xc9\x10\xbc\xe4\xd1\x30\x2d\xa6\x59\x08\x75\xaa\xad\x20\xdd\x0e\xa4\x6e\x06\x07\xf1\x36\x27\xa5\x3d\x55\x7f\x18\x69\xe2\x77\x70\x44\x8a\xf9\xcc\xcb\xac\xae\x65\x6d\xd6\xc4\x94\x22\x1c\x76\xb9\xa4\xf5\x2d\xcb\x3d\x97\x34\x21\x57\x66\xf1\x4e\x46\x4f\x1a\xb3\x76\xd4\xc8\x65\x70\x0e\x6b\x86\x99\x09\x1d\x4f\x26\xc7\xb6\xa0\xc1\x7a\x05\xb1\x64\xec\x95\x2a\x90\x6f\x21\x86\x77\xee\xef\x3b\x5a\x29\x54\x47\x18\xf6\x06\xd4\x91\x12\x4a\xf7\xe9\xb9\xb3\x29\xd2\x84\x98\x98\xd5\xe5\x6c\x21\x00\x6d\xab\x56\xde\x46\xa5\x9c\x64\x38\xc4\xb6\xbd\x1a\x79\x2b\x15\xf2\x7d\xea\x63\x7b\x52\xf6\xc6\x6f\xab\xf9\xdf\x4a\x03\x53\x46\xb9\x04\xae\xb6\xc7\xab\x1d\xc1\xb5\x8b\x2b\xf2\x8d\x93\x7d\xe2\x1c\x06\xf5\xdc\x16\xa6\xde\x46\x4f\xf6\x24\x1e\x83\xab\xed\xe9\x3c\x08\x57\xdb\xe5\x14\x13\x80\x6f\xac\x4f\x18\xba\x74\x7a\xb6\x2e\x32\x5d\xee\x6a\x3b\x84\x6b\xe1\x6a\xdb\xb3\xab\xe1\x6a\x4b\x73\x3d\x5c\x6d\x29\xae\x88\xab\x2d\x55\x3a\xc3\xf6\xf8\x0b\x1c\x16\x67\xab\x3b\x42\x9e\x65\xed\x80\xe5\x02\x51\xb7\x0a\x90\xdc\x56\xf7\xd6\x12\x6a\xbc\xba\xf4\x46\xc9\xa2\xd1\xf1\x15\xe0\xee\xeb\x2e\xa4\xfb\x30\x71\xa7\xd9\x4c\x25\xf6\xab\x1d\x07\x7c\x03\x70\x6d\x48\x8e\xb7\xeb\x75\x17\x9a\xbf\xed\xb5\xe0\x87\x54\xfd\x3d\x26\x43\x13\xb6\x43\xe7\x69\xc2\x76\xe0\x6c\x4d\x6e\xd0\xc7\xe4\x6c\xc2\xf6\xb4\x99\x9b\xb0\x6d\x09\xde\x29\x59\x9c\x5c\x7b\xb4\x96\xd5\x67\x1d\x47\x8a\xb9\xf4\xa9\x80\x3b\x42\x10\x64\x56\xd2\x0a\xa5\x31\x67\x47\xb4\xc5\x54\xf6\xac\xaa\x7b\xbc\xba\xdf\xc5\xa8\x9c\x5d\x5d\x6e\xa5\x45\x09\xbe\xbf\x47\x8f\x12\xbe\xf1\x33\xd6\xa4\x5c\xa2\x6a\x24\xf4\xc9\x7a\xd3\xae\xdc\x06\x46\x26\xb2\x36\x4f\x23\x53\xae\x4d\xfb\xad\xa1\xeb\x61\x72\xd1\xe0\x9c\xb5\xb4\x21\x3d\x2d\x07\x60\xa9\xac\xab\x9a\x83\xbe\xbc\x29\x4e\xe0\xe4\x69\xe4\xcf\x03\xca\x92\xb0\x1f\x51\x89\x1f\x57\x5b\xe7\xa4\x8e\xdb\xd2\x17\xa8\x6c\x46\xc5\x57\xa0\x6d\xab\x64\xfe\x1a\x8d\xa4\x54\x08\x89\x85\x9b\xd4\x08\x0d\x15\x6a\x64\xcd\x30\x41\x4e\x0d\x91\x93\x86\xe7\xe8\x01\xed\xd3\x01\x1c\x7f\x4e\x8e\x69\xb0\xfc\xab\xd4\xa3\x24\x8f\xf6\x30\xa3\x15\xff\x8e\xd5\x71\x69\xe7\x37\xb5\xce\xc1\xda\x9e\xdc\x29\xaa\x6c\xce\x4a\x0a\xff\x7c\xeb\x96\x67\x50\x8d\xf5\xaf\x07\xb5\x1c\xab\x4b\xc3\x7a\x8c\x3a\x51\xa6\x47\x8b\x57\x49\xfe\xb1\x6d\x7b\xa4\x8b\x87\x3f\x85\x1d\x6c\xc6\x55\x47\xc4\x30\xc0\x0d\x9a\x02\x30\xae\xb8\xd4\x30\x5e\x6d\x69\xa8\xcc\x02\x77\xef\x09\x16\xbe\x1b\xf3\x3b\xb6\xa7\xd2\xd3\x6c\xab\x9f\x19\x79\xde\xa7\xab\x6d\xd9\x62\x0a\x83\x7e\x66\xd0\xcf\xfc\xaf\xd6\xcf\x04\x84\xdd\xe1\xfa\x0d\x6a\x97\x30\x85\xa9\xd3\xbd\xb4\x85\x0a\x26\xa8\xfd\x74\x6a\x14\xa7\x43\x69\x6b\x02\xa2\xf9\xe3\x78\x32\x39\x46\x03\xc8\xc4\xab\x4b\x1b\x3d\x1d\xff\x91\x30\x91\xc9\xdc\xf4\x83\x15\xfd\x6a\xa5\x81\xb5\x6c\x25\xf6\x70\x2e\xa5\x1b\x2b\x34\xa1\x40\xdf\xdb\x72\x0f\x5b\xa1\x60\x17\x95\xff\x76\x37\x0c\xd6\x56\x08\xb4\x65\xc5\x7c\x21\x25\xbb\x65\xbe\xb6\x94\xe5\xc9\xda\x1c\x02\x05\x2f\xb9\xf5\x4e\x36\xd8\x85\x29\x9d\xee\xbe\x47\xc8\x09\x76\x33\xc9\xaa\x66\x64\xbb\x9c\x94\xac\x94\xf5\x72\xe4\xbb\x35\x3f\x76\xc6\xb1\x6f\x9c\x02\xd3\x97\x35\x75\xcd\x84\x2e\x96\xb1\xd9\xa0\x36\xb5\x27\xe4\xfe\xdc\x8e\x1e\x98\xf9\xf3\x07\x9b\xea\x5f\xd2\xb6\xee\xfd\x6f\x0b\x07\x82\x42\xce\xef\x0a\xd0\x18\x9b\x77\x6e\xd4\xea\x27\xcc\x53\x26\x16\x64\x41\x6b\x95\x7e\xdf\xc8\xe3\xf9\xbd\x9c\x2f\xb8\xda\x49\xc8\xc1\xb5\x25\x7e\xa8\x67\x96\x8d\xae\x1a\x6d\xd1\xb1\xbb\x46\xae\x84\x98\xbf\x3e\x2b\x4c\xef\xab\x78\x15\x51\xd8\x2a\xaa\x35\xab\xc5\x6b\xf2\x9f\x27\xff\xf1\x9b\x9f\xc6\xa7\x7f\x39\x39\xf9\xfe\xe5\xf8\x5f\xff\xfe\x9b\x93\xff\x98\xc0\x3f\x7e\x7d\xfa\x97\xd3\x9f\xdc\x1f\xbf\x39\x3d\x3d\x39\xf9\xfe\xab\x77\x7f\xfd\x78\x75\xf1\x77\x7e\xfa\xd3\xf7\xa2\x29\x6f\xf1\xaf\x9f\x4e\xbe\x67\x17\x7f\x8f\xec\xe4\xf4\xf4\x2f\xbf\xda\x6a\xba\x54\x2c\xbf\xd9\x02\xbf\x61\x1b\x3f\x92\x3e\x76\x7b\xd9\x95\x27\x38\x17\x7a\x2c\xeb\x31\x76\xf7\x1a\x5c\x16\xb7\xe8\xd4\x81\xc5\x2e\xee\x61\x4b\x87\xdb\xa2\x78\x4e\xf8\x78\x82\x8b\xb6\x2b\xf9\x62\x07\xc6\x82\x4a\xe6\x41\x60\xf4\xbe\xf3\x10\xd8\x80\x7c\xe5\xe3\xff\x6b\x50\x66\x88\x59\x50\xf1\xd2\x7a\x12\x92\x93\xaa\xe6\x0b\xaa\xdb\xf0\xba\x20\xd2\x3a\x7a\xc0\x6c\x4e\xb9\x38\x6d\x83\xbb\x2a\x99\x03\x7b\xda\x28\xe6\xd3\xea\x1b\x12\xff\xf1\xeb\x6b\x92\x15\x1c\xdc\xe3\x6b\x9f\x13\x38\x7a\x18\x17\x5f\x3f\x63\x82\xd5\x18\x60\x4e\x56\xa7\x0f\x05\x8e\xb8\x46\xc0\x13\x79\x6f\x9e\xdc\x60\xd7\x3a\x67\xf4\x01\x09\xbe\xcb\xb5\x86\x3e\xb7\xe8\x75\x08\xe1\xc6\x36\xef\xa7\xf5\x43\xa4\x55\x55\xcb\x05\x4b\xf3\x9a\xb2\x3c\x05\xd6\x1c\x51\x0a\x1c\xf6\xc3\xed\xc7\x6d\x1d\xf9\x65\x83\x17\x68\x27\x16\x32\xfe\x80\x56\x7b\x25\xf7\xe5\x0e\xf8\x68\x1f\xe6\x92\xa9\x80\x45\x6d\x84\xe6\x0f\x97\x54\xbc\x67\x38\x45\xe6\x74\x61\x64\x4f\x26\x70\x91\x48\x95\xc1\x0b\xae\x7b\x2b\x02\x8f\xae\xc8\x7c\x56\xae\x59\x5c\xc3\x05\x58\x16\x20\xab\x46\x3a\x50\x59\x29\x71\x66\xf6\xa6\x5e\x82\x3e\x56\x12\xb8\x38\x78\xd2\xe1\x16\x5a\x30\xc7\x3a\xef\x22\x47\xef\xcd\xe8\x11\x6d\x22\x0d\x0b\x3a\x2e\x1d\x2f\xdb\x0c\x80\x93\x6b\x4d\x75\xa3\x26\x5f\x9a\x99\x7d\x60\xd3\x9a\xa9\xf9\x59\x3c\xa3\x68\xa6\xa8\x34\x2d\xab\x2d\x76\xc4\xdc\x60\xf4\x3c\xf6\xf1\x06\xa8\xba\xf0\x4b\xf6\xd5\xe8\x3d\x5a\xb1\x19\x41\x52\x34\x8a\xa0\xa5\x1a\x21\x42\xa8\xa8\xb9\xd7\x08\x91\x1b\xc6\xb9\x65\x4b\x90\xf0\xb6\x04\xfd\x73\x03\xf9\xd0\x01\x26\xac\x49\xd8\x93\x8f\x9d\x55\x3a\xe4\x89\x01\xd1\xed\xd6\x18\x10\x84\x9c\x1b\xc0\x81\x4d\x48\x20\x0c\x5e\x5d\xbc\x8b\x1e\xcc\xe6\x30\xb2\x29\x9b\x03\x04\x77\x62\xfa\xff\xea\xfc\xfa\x97\x7f\xb4\x43\x9c\x86\x5a\x81\xd2\xda\x11\x52\x87\xe2\x36\x53\xc7\x2a\x94\x23\xa2\xb0\x97\xb6\x0b\xb4\x6d\x29\x93\x78\xa7\x46\xfc\xd4\xba\x60\xd6\x4c\x37\x35\x08\xd5\xbc\xde\x34\xa8\x20\x05\xa3\xd3\x31\xd0\x2e\xa9\x31\x21\xc7\x69\xc2\x79\x5d\x81\x89\x3c\xb8\x5c\xeb\x87\x87\x3b\x38\x32\xe7\x97\x31\xb2\x94\x8d\x8d\x45\xc6\x62\x4f\xc4\x88\xf3\xf1\x40\x46\x05\x64\x2e\x34\x94\x07\xd9\x02\xb3\x37\x18\x4c\xb1\x94\x0d\x10\xc2\x00\x78\x37\x02\x65\xfc\x4e\xae\xcd\x15\xf4\x09\x25\xbd\x65\x44\xdf\xc9\xee\x35\x82\x69\xf9\xf0\x54\x65\xc4\x6a\x2e\xb2\xb8\xea\xce\xd8\xd0\x28\xdf\x39\xa4\xda\x1a\x47\x46\xd6\x05\xb5\x72\x25\xf8\x5b\x0e\x60\x85\x2c\x9b\xd3\xdc\x8a\x5a\x99\xdd\x83\x9d\x6d\xdd\x51\xeb\x9a\xa9\x4a\x0a\xd0\xb1\x02\x1d\x01\x15\xd8\x84\x90\x7f\x5f\xd9\x97\x84\x25\x16\x05\x11\x0c\xd5\xb6\xd9\x9c\x65\xb7\x36\x69\x2b\x57\x46\x5a\xc5\x10\xb5\x91\x55\x04\x8c\x61\x3a\x40\x10\xcd\x52\x97\x49\xce\x09\x99\x14\x36\xdd\x6e\x22\xf2\x09\x19\x10\x57\x59\x5b\x91\x6c\x2e\xa5\xb2\x3c\x41\x57\xec\x0b\xf7\x90\xc7\xd3\x0b\xe4\x43\xfe\x0f\xcc\xb3\x29\x74\x78\xe7\x79\x59\xa1\x03\x10\xec\xed\xb1\x22\xb9\xcc\x1a\xff\xb7\xd9\xb9\x82\xd1\x5a\x90\xb9\xbc\x23\x3a\x3e\x6e\xc7\x5c\x8d\x95\x09\x5b\xcf\x66\x95\x10\xdf\x7e\xa0\xd4\x3b\xb7\x6c\xf9\xb1\x3f\x5d\x6f\xf8\x45\x1b\x49\xb3\x47\x63\xfc\x26\x74\x72\x28\xbf\xa4\xbf\xf9\xd8\xa4\x75\x34\x0e\xc8\xc0\xe0\x07\x50\xcb\x5a\x57\xb2\x15\x2e\x2f\xe1\x1e\x10\xf0\xca\x31\x1c\x73\x7b\xc7\x15\x51\x73\xd9\x14\xc0\xf8\x6f\xe4\x43\x26\x84\xfc\x6d\xce\x84\x25\x05\x16\x09\xa7\x39\x13\xdd\x87\xb0\xd7\x11\xb1\xc1\x21\xaa\x45\x22\x1e\x1d\xa6\x7a\x6b\x3b\x94\xd9\xe5\x3a\x6b\x16\xe0\x8f\x11\xb9\x61\x19\x35\xab\x5e\xc5\xc1\x12\x11\x66\x6a\x00\x07\x26\x19\x2d\x79\x3e\x76\xe8\x7d\xef\x61\x66\x9b\xce\xeb\x09\xe0\x76\x8d\x35\xd8\x03\xdc\x46\x32\x90\xdd\xa4\x3a\x65\x53\x68\x5e\x15\x98\x28\x0e\xe2\x50\x13\x2d\x65\x1d\xfe\xd3\x46\xb2\xc2\x98\x57\x1f\x2e\xbf\x3b\xfb\x78\x41\xbe\xba\xf8\x77\x7c\x3c\x0a\x3d\x51\xa8\xe3\x32\x2d\x19\x4f\x1a\xf3\x96\x2d\xb7\xd8\x9b\x96\x7d\xc5\x75\x02\xb4\x9f\x5f\x7c\xf8\x78\xf9\xf6\xf2\xdc\xcc\x14\x1f\x8f\x56\x1d\x66\x90\x3d\x4d\x1a\x6e\x1d\x4f\xf9\xb8\x4b\xc7\xde\xc2\xdd\xc3\x1c\x46\x4b\x4c\xc0\x55\xb2\x9c\x1b\xd2\x94\xc2\x84\x9a\xf6\xad\xea\xea\x5d\x5a\x40\x27\x90\x81\x1e\x50\xc8\x15\x54\x6f\x5b\xe5\x3e\x91\xa3\x73\xf0\x91\x86\x3f\x80\x07\x75\x78\x80\x6a\xc3\x6f\xd7\x9c\x2d\x50\xc5\xe0\x71\xc8\x26\xa5\x0f\x6e\x89\x67\x5d\x53\x7d\x7c\xfe\x61\x0d\x9f\x25\x6a\x60\xba\x02\xdd\x46\x26\xbb\xc3\x7d\xa5\xad\xd2\x27\x0f\x28\x96\xab\x18\x77\x0d\x7b\xde\x51\xe5\x64\x19\xab\xfb\x00\x40\x8d\x1f\x6d\x2b\x0c\x67\xe9\xcd\xe1\x91\x1a\x9c\xec\x40\x7e\x07\xf2\xfb\x40\xb3\xdc\xec\xa1\x80\xd3\xa0\x79\x70\xf3\x96\x53\x33\x34\x44\xbe\x76\xb4\x6f\x4e\xaf\xeb\x2b\x66\x40\x69\xd0\xa4\x31\x30\xaf\x95\x4f\x7f\xc2\xc8\xd1\x87\xeb\xb3\xdf\xbd\xfc\xc3\x6f\x8f\x46\xf0\xcf\x2f\x5e\xfe\xeb\xef\xcd\x3f\x2f\xce\xdf\x5c\x9f\x5d\xfd\xf6\x5f\x82\x3f\x7e\xf7\xc7\x2f\x8e\xd2\x42\x34\xed\x87\xff\xf2\xdb\x57\x36\xf5\xca\xd1\xc5\x9b\xdf\xfe\xcb\xbf\xbc\xfa\xd7\x2d\xd2\x2c\x26\x1e\x5d\x49\x3f\x5d\x7c\xaa\x38\x96\x18\xb9\x66\x46\x48\x3d\x58\x5c\xf3\xa6\xb1\x9d\xb6\xaa\xa4\x9f\x78\xd9\x94\xbe\x12\x29\x3a\x40\x69\x6d\xd5\xbe\xa9\x97\x22\xb8\x7f\x89\x80\xe0\x95\x98\xb2\x42\xf3\x28\xb7\x39\x0a\xc9\x82\xd5\x37\x54\x43\xa5\x34\x4b\x08\x36\x2a\x5e\x55\x8a\xd8\x6c\x5a\x6b\x95\xf0\xba\x83\x36\x3d\x79\xe2\xec\x2f\xa7\x44\xe2\xb6\x8d\xa0\x58\xcd\x98\x56\xdc\x96\x5c\x84\x9b\xa2\x98\xb6\x46\x8e\x3f\xfe\xfe\x8b\x97\x2f\x4f\x7e\xfb\x05\x99\xcb\xa6\x56\xa7\x93\x95\xd7\x93\x46\xb5\x9a\x39\x20\xe1\xf6\x0a\xa9\xb9\xac\xb5\x2b\x64\xfc\xbb\xdf\xbf\x7c\x49\x4e\x5e\xc1\x50\xa7\x56\xbb\xe9\x0e\x1c\xc2\x3c\xe8\x4d\x22\x9f\x82\x27\xc2\x15\xf9\xc3\x1f\x7f\xff\xdb\x2f\x4c\xef\xff\xfa\x8a\xe4\x74\x99\xcc\x66\x7d\xbc\x4f\x4f\x61\x01\xd3\xf0\x78\x0c\x90\x33\xf0\x00\x2b\xfa\x2c\x1b\x77\x92\x46\x24\x3c\x88\xff\xda\x6e\xd2\xaf\x71\x97\xde\x6d\xb8\x1e\x18\x58\x23\xe4\xfa\x7e\x26\x0d\xa9\xec\x65\xeb\x9c\x01\xea\xa8\x94\xae\x29\xc7\xb0\x7b\x26\xa0\x10\x0a\xe8\x6c\xbb\xd0\x90\x26\x3c\xfc\xd0\x09\x77\xf9\xa1\xab\xc0\x15\x0c\xeb\x7f\x9a\xcd\x5c\x4b\xce\x0c\x6e\xfd\x51\xa5\x88\x57\xb6\x14\x6b\xab\xc1\xe6\x38\x90\x4e\x47\xa5\xe9\x66\xfa\xed\x1c\xd8\x76\x90\x24\xc5\x62\xa9\x63\xe5\xb1\x47\x4e\xce\xaf\x3f\xb4\xa9\x42\x6c\x29\x55\xc7\xb4\xfa\xcc\x27\x7b\x27\x30\x8d\x62\xf5\x59\xeb\x05\x7f\x28\xda\xb2\x32\x2c\xa2\x15\x30\x48\xd2\x46\xcf\x65\x0d\xdc\x5d\x45\x95\x0a\x98\xff\x95\x10\x8b\xa4\xf1\xee\xd5\x6f\x4e\x90\x84\x20\xf8\xb7\xd6\xd0\x9a\x99\x7d\xcc\xc0\x7e\xbd\x30\xbc\x06\x9a\x07\x13\x63\xe2\x4a\xa6\x29\x44\xf7\x40\x8e\xfe\x25\xb9\xa3\x5b\x88\xcc\x8a\x85\x7c\x0e\xd0\xb9\x7c\x03\x71\xfb\x01\xec\xa1\x8d\x58\xb0\x1a\xdc\x64\xbf\xed\xee\xf0\x0f\x3e\x04\x22\x79\xdf\x36\x1b\xcc\x5d\xe2\x7e\x60\xbe\x3d\x15\x06\x2f\xcb\x14\x83\x9b\x69\x17\x81\x71\x4a\x35\x98\xd4\xcc\xa5\xfa\xa0\x25\x73\x07\x00\x11\x54\xca\x65\x3d\xf3\x7b\x1b\xc6\x70\x24\x92\x41\x1b\x99\xea\x40\xcc\x3a\xf5\x16\xc5\x4a\xd4\x9a\x2c\x29\x17\xe3\xaa\x66\x53\xfe\x89\xe5\x13\xf2\x5e\x7a\xf8\x30\xa3\xa6\x89\x1c\x35\x23\x36\x6f\xa6\x14\xde\x83\x9a\x7d\xca\x58\xa5\xc1\x47\x7c\xc1\x6a\x48\x46\xc4\xff\xc9\xd0\x5b\xd1\xe6\xe0\x42\xb1\xce\x88\x5d\xb5\xf5\xf8\x4f\xdc\xe5\x6b\x8b\xd6\xad\x20\xe7\xb4\xfa\x4e\x70\x52\x41\xd2\x65\xb4\x77\x58\x67\xc7\xc9\xca\x97\x49\x83\xe6\x4c\x2c\xbd\x53\x65\x47\xeb\x85\x63\xc2\x40\xb9\xb4\x77\x2e\x93\x33\xc1\xff\xb9\x45\xda\xab\x64\xb7\xca\xc7\xe7\x23\x4c\xc6\xb6\x58\x11\x6b\x2b\x9f\x20\xfc\xf4\x9e\x50\x42\xfb\xe3\xcf\x38\x8a\xf0\xb3\xc9\xc7\x74\x8d\x47\x31\x24\x63\x7a\xf2\x64\x4c\x78\x12\x43\x26\xa6\x76\x71\x43\x26\x26\x68\x43\x26\xa6\xb0\x0d\x99\x98\x3a\xe3\x0e\x99\x98\x86\x48\xbf\x21\xd2\xef\xe9\x23\xfd\x86\x4c\x4c\x43\x26\xa6\xcd\x6d\xc8\xc4\xd4\xdf\x86\x4c\x4c\xff\xdb\x32\x31\x21\x88\x6d\xca\xc7\x64\x25\xd2\x36\x19\xd3\x67\x97\x8b\x49\x99\x43\xce\xd8\x59\x96\xc9\x46\xe8\x8f\xf2\x96\x45\xe7\x12\x59\xd1\xa1\xac\xf5\x63\x2e\xe5\x7d\x3a\x95\xf5\x97\x0f\xa6\x60\x79\x86\xb5\x22\x69\x93\x73\x26\xd2\xa2\x07\x1f\x83\x7a\xdd\x78\x8e\x9e\x1b\x3e\x46\xe4\x2c\x6f\x7f\xb0\x78\x59\x9b\xa3\x99\x90\x33\x52\xb3\x8c\x57\xdc\x16\x64\xa1\xf8\x3c\x4d\x57\x6f\xee\x85\x2d\xbb\xbf\x34\xb7\x85\x15\x53\x8f\x1e\x7d\x39\xfe\x3a\xd0\x3f\x58\x4a\xbd\x32\xa5\x34\x31\xd6\x4c\x13\xf9\x40\xe0\xfa\xee\xb8\x62\x4e\x41\x6b\x0d\xb4\xc1\x2a\x3f\x86\xa3\x85\xc1\xbd\xa9\xc3\x06\xcb\xb1\xfb\xb8\x95\xe9\x70\x2b\x5c\xc9\x9e\xca\x9d\x61\x6d\xe0\x96\x59\x04\xf5\x34\x56\xb2\xf2\x75\x7b\xc1\xe8\x60\xa8\xaf\x4b\x37\x84\x28\x21\x0d\x8c\x11\x7f\x78\x28\x55\xed\x69\x62\x28\x21\xcd\xe6\x4c\x05\x33\x43\x89\xe7\xd6\x5a\x53\x12\xc3\xe3\x4c\xab\x8a\x66\xc6\x05\x0a\x48\xd0\xbf\xe3\x37\xda\x00\x37\xbb\x90\xd5\xc9\x7d\x0c\x06\x36\x9f\xa7\x19\xac\x81\xc1\xdc\x18\x4f\x87\xab\xe5\xd3\xf0\x0f\x45\x64\x91\x3b\x03\xf0\x1f\x5f\x1a\x99\x3a\xc3\xab\x9b\xa8\xe8\x55\x18\x9b\xa7\x25\x29\x0c\xb7\x6f\xc8\xdc\xfd\x03\x79\x4b\xf3\x9b\xe0\xea\xa0\x85\x3d\xd9\x6b\xcc\x67\xf5\xd1\xa4\x60\x54\x69\xf2\xea\x25\x29\xb9\x68\xf4\x36\x95\x48\x1e\x65\xc8\xfe\xfd\x17\xd1\xdf\x3d\xaa\x82\x49\xe2\x6d\x0b\xa5\x31\xf8\xb7\x17\xc9\xac\xde\xb8\x04\xe0\xab\x24\x17\x7a\x55\x40\x0b\xdc\x4b\xd3\xb1\x29\x68\xa6\xf7\x86\xc5\xb6\x16\x63\x7e\x6c\xe4\xcd\xb2\x2f\x24\x3c\x6d\xc3\x6d\x97\xdd\x6a\x92\xff\xcf\x3e\xc4\xed\xb5\x56\xc3\xb9\x61\xcd\x41\x8f\xa1\xe6\xb4\x66\xb6\x4e\xfd\xb1\xf2\xde\x1b\x7d\xfb\xf5\xc6\x0c\x01\x21\x9a\xaf\xfd\x08\x5c\x91\xdc\x3f\xf6\xaa\x0c\x2e\xc6\xba\x66\xcc\x4f\x0e\xa4\x0c\xd0\xd1\x3b\xaf\x8f\xc8\x1c\x2a\xd1\x8c\x53\x2c\xbb\x34\x26\x35\x9b\x71\xa5\xeb\x3e\x35\xee\x38\x06\xf1\xc6\x73\x51\xb3\x5a\x36\x11\xc5\x58\xd2\x2f\x1b\x74\xec\x14\x1a\xce\xb0\x94\x65\x4c\xa9\x38\xef\x08\x8b\x06\xed\xe9\x40\x6f\xbd\x5f\x25\x5c\x96\x9a\xd1\xfc\x1b\x51\x44\x68\xa5\xd3\x97\xee\xfa\x46\x59\x15\xa8\x1d\xf8\x42\x01\x08\x3a\x00\xb5\x5b\x82\x62\x30\xdc\x07\x96\x23\x47\x67\x3e\x1f\x43\xb2\xa1\x40\x9b\x1b\x83\x33\x42\xca\x31\xa5\x85\x8a\xd0\xfa\xa6\x48\x4d\x0e\x40\xf7\xb3\x65\xd8\x77\x17\x5d\xd8\x98\x14\x59\xb7\x31\x28\x6e\xfb\x3e\xb8\x0f\x2c\xc3\x10\x23\x45\xb7\xcc\x31\x0d\xec\x3e\x54\x01\x06\x7a\x6d\xae\x3d\x1a\x5e\x4f\xfc\x68\x61\x60\xb2\x0b\x23\xb0\xa7\x94\xc9\xb2\xa4\x51\xe5\xd5\xd0\x12\x48\x21\x15\x86\xb2\x31\x6a\x42\xd7\xb4\x68\x57\x1d\xa4\x08\xda\x25\x90\x6b\x26\xa8\x88\x30\xea\xa7\x9f\x17\xf6\x4c\xe4\x9d\x0f\x81\x99\xf1\x05\x13\xab\xd0\x6d\x85\x90\x2f\x69\x76\xcb\xa2\xa2\xe5\xbf\x55\x6e\x7f\xf3\xa5\xa0\x36\x82\xd9\xa0\xb3\x05\x37\xd7\x80\xe5\x2b\x23\xa8\x51\xeb\xbd\x09\x15\xeb\x31\x40\x1c\x19\xcd\x5d\x6e\x65\xa3\x58\x44\xaa\xa4\xf4\x8d\x34\xfd\x3e\x1e\x4b\x2a\xb4\xff\xd4\x7c\x91\x31\xc7\x39\x9b\x9e\x77\xb9\x03\x38\xbb\xc4\x3d\x70\x70\x10\xdc\x37\x1b\x09\x64\x5d\x18\x30\x3d\x4c\x61\x70\xde\xd2\xa5\xc1\x5b\x85\xa2\x9b\x65\x64\x89\xb5\xc8\xd5\xd4\x37\x3d\xe4\x38\xed\x18\xeb\x9b\xbc\x8b\xb6\x3e\xd0\x5c\x2a\xf2\x25\xc4\xb9\xbd\x61\x20\xce\xec\x8f\xe1\xf9\xf0\xe5\x9b\x1e\x66\xc7\xcc\xef\x39\x31\x3a\xbc\xa4\xb3\x3e\xd6\x79\x4c\x4a\x29\xb8\x96\xf5\xc3\xf8\x30\x9e\xcf\x99\xaa\xb8\x20\x93\xf4\x1b\x8c\x3d\x3b\x69\xa2\x4d\x63\xe3\xa3\x4c\x02\x33\x21\x1c\xfa\x52\x36\xe4\x8e\x62\xa9\x5e\x80\x8b\x18\xda\xfe\x91\x57\xaf\xc9\x85\x50\x4d\x1d\xe4\x37\x58\x1d\xcc\x20\x41\x77\xac\x0e\x15\x02\xb0\x61\x8d\x5e\x28\xa7\x89\x29\x76\x22\x46\xbc\xf8\x44\xcb\xaa\x60\xea\x35\x39\x62\x9f\xf4\x17\x47\x23\x72\xf4\x69\xaa\xcc\xff\x84\x9e\xaa\xa3\x09\xb9\x2c\xab\x82\x67\x5c\x17\x4b\xc2\xc5\x94\xd5\xb5\xd7\xea\xe3\x07\x2b\x4e\x4e\x31\x63\x26\xea\xd8\x95\x96\x35\x9d\xb1\x17\x96\x16\xfc\xb2\xbe\xe9\xa7\x31\x09\x18\x0f\x00\x75\x1f\x20\x03\x1d\x7b\x05\x0f\x60\x0b\x7c\x14\x5b\x49\x72\xc3\x3e\x31\x7b\x5c\x93\xdb\x3f\xc2\x4e\xd9\x3d\x79\x51\xdf\xe4\x2f\x3e\x5c\x9c\xbd\x79\x77\x31\x29\xf3\x5f\xce\xe5\xdd\x58\xcb\x71\xa3\xd8\x38\x22\xb0\x24\x61\xaf\x6e\xd9\x12\x32\xc0\xed\x61\xb7\x6c\xd7\x1d\x79\x5d\x4b\x30\x17\xc0\x73\xc3\x3c\x7d\xf8\xf2\xcd\xb7\x2a\x4e\x3f\x18\x08\x16\x2f\x98\xce\x5e\x64\xac\x9a\xbf\xb0\x63\x7c\x9e\x7b\x1f\x18\x78\xd6\x56\xd4\xf3\xa9\xc3\xb2\xfb\x38\x37\xd7\x37\x52\xff\x4c\x16\x05\x46\x21\x19\x9c\x78\xce\xaa\xb9\x7f\xe1\xd9\xed\x7a\x9c\x23\x5a\xb4\xfb\xd9\x61\x74\x38\x04\x32\xfc\xc9\x08\x83\x5d\xfa\x51\x9a\x7e\xbb\xf8\x0a\x9e\xc4\xa2\xab\xe0\xca\xd5\x37\xdb\x12\x82\xe7\x73\xc9\xfa\xc9\xcc\x93\x69\x17\x3e\xb8\x1f\x15\xd3\x40\xef\xb9\x20\x58\x11\xe4\x9d\xe1\x34\xf6\xa5\x46\x38\xf0\x81\xc5\xe9\x2b\xd0\xf5\x3c\x2a\xa3\x74\xfa\x29\xf8\xce\x81\xab\x0e\x7c\x31\x68\xa3\xe7\x4c\x68\x17\x0c\x6e\xfd\xdf\x43\x1a\x45\x2e\xa7\x28\xd1\xe6\x51\x06\x6e\xb9\x60\x75\xcd\x73\xa6\x48\x02\x91\x0a\xb5\x67\xbc\x78\x76\x07\x18\x69\x71\x4e\x33\x06\xc7\x7b\xdf\x6c\x67\x3a\x78\x8c\xc7\xcd\xa1\x7d\x6d\x0e\xec\x65\xf3\x38\xff\x9a\xa7\xf5\xac\x49\xb6\x13\xa7\x78\xd3\x3c\xc6\xc3\x64\xaf\x2a\xa7\x0e\x31\x87\x27\x5b\x10\x73\x9a\x97\x3c\x2a\x41\xc4\xb3\x26\xe7\xb0\x8a\x07\x5e\x57\x19\x2d\xd8\xe5\x37\xbb\x54\x19\xd9\x2e\xbb\x6a\xa3\x6b\xfb\xb0\x62\xb5\xcb\x8c\xe3\x34\x82\x5a\xd3\x6c\x6e\x55\x3b\xce\x56\x20\x45\x18\x1b\x2a\x64\xde\x6f\xdc\x0d\xf5\x46\x6e\xb4\x87\x75\x47\x6e\xa2\xcf\x49\x7f\x34\xa3\x9a\xdd\xf5\xf2\xe7\xe3\x96\x44\xf7\xbf\x09\x4a\x91\xcf\x5c\xd3\x94\xa2\x4d\xf2\xae\xfd\x6b\xbd\xec\x52\x7f\x34\xb9\x47\x73\x94\x86\x64\xe0\xdb\x9d\xe9\x7e\xb1\xf9\xbb\xff\x69\xda\x47\x24\x2c\xb4\x25\x9e\xa7\xfd\xca\x9d\x15\x6c\xa2\x8d\xa2\x77\x2c\x84\xbb\x80\x67\x57\x97\xe4\xaf\xf8\xfa\x4e\x57\x59\xd5\x52\xa3\xc0\xfd\x06\x42\x84\x13\x57\xb0\xfa\xb9\x5b\x4a\xc8\xeb\xba\x25\x5c\xf9\x77\x89\x7d\xd9\xe5\xce\xc9\xa0\xe2\x66\x53\xb3\x9c\x58\x65\xdd\x4e\xd7\x78\x10\x39\x6b\x4d\x1e\x22\x27\xe6\xb7\x17\x90\x95\xfa\x74\xd2\xca\x5c\x2b\x02\x59\x8c\x66\x60\x27\x22\xdb\x33\x14\x8a\x02\xfb\x8e\x8b\xc4\x6c\x05\x21\x07\x36\xc0\x76\x78\xef\xc2\xa8\xfe\x85\xe2\xe0\xa6\x13\x38\xc6\xda\xac\xc2\x5c\xb5\xc1\x96\x28\x5b\x8d\xc8\xd7\x72\xc6\x85\x43\x5e\xd2\x3a\x9e\x4d\x69\x8c\x40\x34\xc8\x29\x83\x9c\xb2\xda\x06\x39\x65\x63\x53\xaa\xb8\x10\xf4\xa6\x88\xf1\x09\xef\x3a\xbd\xfb\x0f\xc9\xdb\x82\xce\x08\x83\x3f\x5e\xe4\x5c\x99\xff\x93\xeb\xeb\xaf\xc1\xcb\xa2\x11\x4e\x99\x02\x10\x60\x69\xa5\x2f\x20\x84\x38\x79\xb7\x48\x12\x49\xd5\xbb\xa8\x60\xcf\x2d\xd0\x64\xdb\xbd\xaf\x2e\xa0\x3a\x81\x11\xf6\x0d\xc0\x96\xd4\x87\x7d\xa3\xe7\xf5\x0d\x33\xb7\x34\xbb\xbd\x0a\x9c\x22\x64\x6d\x9e\x89\xe0\x51\x22\x93\x95\xfc\xf5\x76\xec\xd6\xca\x30\x71\xc7\x70\x95\xae\xd4\x0e\xbe\x74\x7c\x8b\x23\x3a\xd7\x76\x6b\xe1\x37\xaa\x94\xcc\x78\xeb\xd4\x63\x73\x53\x3a\x66\x06\x73\xab\xec\x74\x33\x90\x7f\x4e\x5d\x0e\x32\xe8\x1b\x38\x30\x07\x28\xf6\x0d\xaa\x42\x8e\x8b\x0b\xb7\xea\x9d\x2e\x01\xc1\x31\x2e\xe3\x54\xfa\xe5\x68\x7b\x5f\x5d\xaf\xbf\x08\xab\xee\x22\x2e\xab\x82\x3d\xe1\x08\x69\xce\xae\x79\x4e\x51\x8d\xb1\x06\x05\x5c\xf9\x4b\x07\x55\x5d\x76\xb6\x7f\x31\x69\x56\x12\x55\x09\xc8\x57\x75\xfd\xe6\xf0\x99\x75\x31\x01\xac\x51\xc9\xaa\x29\x5c\x9a\xa8\xc8\xa4\x06\x8f\xb4\xc6\xe3\x2c\x76\xa3\x1d\x88\xe7\xb0\x82\x48\xec\x7d\x80\x67\x18\xe8\x9d\x1e\x8f\xef\x20\x16\xd3\xac\xde\x2c\x5d\x77\x49\x32\xfb\x21\xc3\xf1\x77\x15\x7e\x1f\xa3\xdd\xe8\x04\xe8\x77\xa4\xae\x97\xbf\xff\xe2\x8b\x28\x82\xc6\x6b\x96\x69\x09\x2e\x9b\x36\x81\x87\xf7\x18\xa0\x35\x03\xe9\x00\x63\xe5\x9d\x7e\x03\xdd\x06\x75\xa4\x55\xe5\x10\x91\xf9\x7b\x8e\xc4\x4f\x8b\xe9\x48\x89\xb4\x8f\x34\x87\x6f\xe1\x2d\x03\x19\x93\x2e\x0f\x96\x31\xe9\x40\x79\x92\x0e\x93\x1d\xe9\x10\x39\x91\x0e\x92\x09\xe9\x70\xf9\x8f\xf6\x9c\xf5\x68\x2f\x2e\x26\xfb\xcc\x6b\x94\x18\x24\x9c\x16\x20\x1c\x9f\xb9\x28\x3a\x8c\x38\x35\x84\x38\x21\x37\xd1\x6e\x33\x12\x25\x4b\xf4\x29\xd9\x87\xb6\x0d\x8f\x3b\x5c\xa6\xa1\x27\xcc\x2f\xf4\xd4\x59\x85\xf6\x9c\x4b\xe8\x70\x19\x84\x0e\x92\x37\x68\x9b\x38\xd4\xf4\x1c\x41\x29\xf1\xa7\xdb\x5e\xae\xbd\x67\x01\xda\x49\xee\x9f\x1d\x67\xfc\xd9\x5d\x9e\x9f\xc3\x39\x52\xc6\x67\x3f\x79\x74\xce\x13\x95\x9c\xf4\x24\xdd\xde\xb3\x2f\x65\x4d\xdb\xfb\x46\xe5\x94\x4b\x0c\xeb\xca\x68\x1c\xa3\xab\x9c\xaa\x28\x16\xe5\x6e\xb6\xf6\x2d\xdc\xb1\x1e\x82\x24\x68\x70\xb0\x77\xd9\xc3\x5c\x24\x2a\x71\xb0\xd3\x6f\xae\x57\x3c\x42\xfc\xe3\x7d\x3a\x82\xf8\x41\x7a\x5c\x41\xdc\xc2\x0f\xe0\x0c\x32\x78\x5b\xec\xce\xdb\x62\xf7\x71\x3a\xcf\xcd\x40\x9f\x0f\x06\xfa\x64\x03\xbd\x3b\x6e\x15\x62\x6a\x44\xc9\xc0\xd4\xca\x9b\xb0\xbe\x5d\x8b\x23\xce\xae\x2e\x23\xc6\x69\x6b\x70\xa9\xc9\x26\x6e\xd7\x99\xee\x2c\x17\xed\xeb\x4c\x68\xcd\xca\xaa\x17\x8d\x90\xc1\x3e\x3f\xd8\xe7\x37\xb4\xc1\x3e\xbf\xb1\x1d\xda\x5e\x37\x6f\x4a\x2a\xa0\x3e\x35\x98\xf1\x3b\x0e\x63\x2b\x0c\xcd\x84\x58\x4c\x1a\x79\x2d\x31\x13\x03\xe4\xc6\x68\x04\xff\xb1\x61\xad\x3e\xcb\x33\x96\x7b\xb2\x75\x42\xdf\xfb\xdd\x40\xe4\x8b\x57\x30\x73\x26\xd7\xa2\x88\xed\x9a\xfd\x66\x3a\x14\x1b\xbb\x89\x30\x4c\x47\x45\x0b\xb5\xa9\x6c\x35\x95\x0e\x93\xde\xd1\x3f\x58\xf4\x03\x38\x21\x56\xcb\x1d\x72\xa6\x06\x10\xcc\x7a\x6c\x1a\xae\x1b\x46\x4a\x5e\xd7\xb2\xb6\x76\xd7\x70\x49\xe8\x40\xc8\x67\x73\xcd\x6a\x94\xfc\xeb\xe8\x6a\x84\xd7\x4c\x5b\xa8\x02\xa8\xd4\x12\xaa\xdb\x08\xfb\x6f\x17\x4e\x03\xcb\x75\x74\xe8\x86\xcd\xe9\x82\xcb\x26\x2a\x80\xf4\x1a\x29\xe5\x91\xfd\x18\xf8\xa7\xa5\x6c\xbc\x85\x09\x8b\x4c\xfa\x3d\x54\xeb\xe7\x15\x31\xc8\xfb\xf6\x73\x50\xd0\xd8\x2a\x24\x55\xcd\xc6\xec\x13\x57\x7a\x7d\xc7\xdc\x51\x59\x1b\xe3\xce\xae\xc1\x42\x55\x06\x8b\x7f\x17\x91\xfe\x21\x0d\xf8\x3b\x1d\x77\x05\x9f\xc5\x35\xfc\xd4\x27\xf6\xd8\x8c\x70\x98\xc0\x85\x94\x34\x9b\x73\x91\x94\x3c\xe1\xbb\xce\x14\x3a\xf2\xcf\x84\x9c\x15\x45\xeb\x3b\xa8\xbc\x4b\xab\x93\x87\xba\xd3\xd7\xfd\x05\xd9\x0d\x7c\xd4\x2c\x07\x1b\x65\x5b\xff\x35\x53\x7c\x62\xbb\x9a\x2c\xca\x3b\x5a\xb3\x49\x26\x4b\x72\x7e\x7d\x49\xf2\x9a\xf7\xe6\x3c\xdc\x83\x7f\x3d\x6e\x7a\x6f\x85\xd4\xe7\x25\xa3\x0d\xf2\x59\xdb\x52\xdc\x91\x9c\xa3\x54\xc1\xb3\xe5\xe5\x9b\x6d\xdd\xac\xf0\x6b\xc7\x00\x28\xef\x62\x65\x9e\x93\x2f\xa9\x62\x39\x79\x47\x05\x9d\xa1\xfa\xf0\xe4\xfa\xea\xcb\x77\xa7\x06\x80\x40\xdd\x79\xf9\x66\xa3\x1f\xd6\x75\xd8\xf9\xfb\x5d\xe6\x7f\x59\x5b\xf8\x16\xbc\xd1\xda\xf7\x5b\x2e\x7e\xa7\x89\x6d\x88\x67\x27\xe2\xca\x3d\x6f\x48\xd5\x73\xb5\x9a\x19\x11\x9d\xa4\x5c\x4a\x56\xb5\x8a\x9a\x17\x65\x7e\xfb\xb8\xe9\x73\x23\x4d\x14\xc5\x55\x41\xc5\x59\x55\xd5\x72\xb1\x59\xeb\x1a\x83\x1c\xdc\xf7\x6e\x01\xe8\x60\xee\x1e\x56\x78\x22\xe0\x53\x29\x50\x88\xc1\x61\x37\xef\xff\xa5\xf6\x8a\x59\x29\x80\x05\x3b\x3a\x6b\xb4\x2c\xa9\xe6\xd9\x11\x91\x35\x39\x7a\x47\x45\x43\x8b\x8d\xb1\x29\x0f\xae\xf8\x3e\x01\xf3\xc1\x8f\xd0\x11\x6d\xcb\xcf\x1e\x64\x60\x1f\xfe\x5e\xd3\xda\xa0\xba\xf3\xeb\xef\x92\xbe\x55\x9a\xea\x66\x8d\x32\x3c\x40\xad\xee\xa7\x4f\x63\x52\x50\xa5\xbf\xad\x72\x83\x1f\x56\x7e\x7d\x88\x08\x65\x54\xd3\x42\xce\xfe\x8d\xd1\x62\xf3\x65\x88\x01\xa9\xf3\xb0\x13\x67\x11\xb1\x1e\xa5\xcd\x8d\xff\xfe\x58\x11\x23\x4a\x1a\x28\xe1\x5a\x91\x9a\x15\x6c\x41\x85\x76\x9f\x5f\xc3\x29\xa8\x63\xbb\x2d\xf7\x02\x1c\x6f\x6d\xac\x39\xd3\xac\x2e\xb9\xe8\x8e\x73\x0d\xdf\x9f\x4b\x81\x05\xe2\x14\x5a\x91\xf0\x8b\xee\x58\xf7\x43\xe5\x7d\xae\x07\x0f\x38\x1b\x74\x76\x2a\x9c\x4f\x77\x7b\xf0\xb5\x1b\x2b\xba\xcc\xf1\x21\x78\x6e\x76\xe6\xb6\xb6\x7b\xe4\x56\x18\x89\x02\x32\x9c\x6f\xde\x9b\x5e\x36\xa7\x8f\xbd\x19\x3b\x70\xc0\x29\xdc\x1f\x15\x38\xb6\xf3\xbe\xcf\x29\xe1\x21\x68\xc4\xd6\xcf\x18\xad\x4e\xe5\x7e\x4c\xdd\xd9\xf8\xf3\x95\xcf\x30\xb1\x8a\xf7\x6d\x42\x2f\x8f\xce\x4b\xf7\x53\x96\x28\xbe\x31\x8e\xc5\xa3\x15\xff\x8e\xd5\xca\x4c\x31\x5e\x3a\x38\xbb\xba\x24\x0b\xfc\x2a\x4d\x17\x16\x49\x0a\x41\x47\xd6\x4f\x05\xd3\x58\xce\x4b\x1b\xd8\x54\x5b\x09\x96\x92\x8a\x33\xcc\xad\x4e\x85\x2b\xfd\x69\xe8\x19\xa3\xb9\x7d\x68\x4b\x62\xe2\x6f\x23\xeb\x71\x18\xc5\xa0\xa0\xdf\xae\xb3\xc1\x52\x4c\xf9\x0d\xde\x08\x2f\xfe\x2a\xad\x0e\xd0\xa6\x0a\x34\x58\x05\xb8\x8b\x11\x51\x4d\x36\x27\xd4\x08\x32\xca\x5c\x07\x83\x2f\xd8\xa4\xa4\x82\x4f\x99\xd2\x13\xdb\x1b\xab\xd5\xf7\xbf\xfd\x7b\x1f\xdb\xf1\x56\xd6\xc4\x46\x69\x8f\x5c\xe6\x6a\xbb\xc6\x16\xe6\xb8\xc2\x8d\xf0\x3d\xb7\x1a\x99\x4a\xe6\x76\xc1\x77\xb0\x14\x4d\x6f\x0d\x29\xc5\xa5\x34\xec\xff\x63\xee\x5c\x7a\xdb\xb8\x81\x00\x7c\xef\xaf\x20\x94\x43\x12\xc0\x1b\x01\x39\xb6\xa7\xd6\x72\x5b\xa1\x41\x5b\x24\x76\x81\xa2\xe8\x81\xde\x9d\xae\x08\xaf\xb8\x02\xc9\x95\x62\x04\xf9\xef\x05\x39\xe4\x3e\x24\xf1\xb1\xd2\x5a\xca\xcd\xf2\xbe\x86\xc3\xd7\xcc\xc7\xe1\xd0\x44\x0d\xc4\x6c\x94\x99\x39\x37\xb6\x13\xfb\x8b\x9e\x3b\xbf\xce\xc8\x9b\x9d\x31\x42\x66\xfa\xe7\x0c\xc5\x69\x77\x9a\xf5\x81\x53\x27\x16\x26\x4d\x13\xac\x2c\x41\x44\xd7\x58\xf5\xa3\xb0\x05\xae\xde\xda\xac\xdd\xbc\xee\xbd\xca\xc5\xf9\x75\xfc\x64\x5f\xcc\x7f\xde\xff\x3b\x23\x6f\x86\x3a\x89\x7c\x92\xf1\x02\x3e\x93\xf7\xb8\x5a\xca\xa4\xd6\xde\xdb\x77\x08\x5c\xe4\x33\x57\xf4\xb3\xfe\x62\xbe\xaa\x25\x70\x04\x60\xaa\x26\x2b\xba\x05\x22\xeb\x35\x90\x1d\x54\x55\x66\xd7\x8f\xc9\x8e\x3e\xc7\x93\x95\xbb\x2a\x34\x29\x50\xc9\x86\x0a\x35\x68\xc6\x93\x74\xc2\x27\xc6\x27\xcd\xb4\xf8\x1b\xe3\xfb\x21\x9d\x51\x07\xef\x08\x14\x2e\x99\x72\x59\x07\xec\xfe\x22\xf5\x3c\xd7\x95\x25\xd8\x63\xa3\x6a\x21\xe7\x05\x6c\xa1\x9a\x4b\x56\x66\x54\xe4\x2b\xa6\x20\x57\x8d\x80\x39\xdd\xb0\x2c\xaf\xb9\x6e\x18\x26\x27\xef\xba\x78\xa5\x35\x21\x33\x5d\xd0\x30\x25\x4e\xd4\x58\x7c\xed\x61\x9c\xc6\x4e\x59\x6b\xb8\x0e\x46\x1f\xa1\xa0\x04\x14\x3b\x5e\x4b\xc8\x3b\xaf\xae\x2a\x83\xfc\xe6\x53\x68\x4a\x00\xda\xfe\xe3\xe7\xe6\xa8\xbe\x3e\xe1\xc0\x97\xef\x7f\x43\x8f\x49\x18\xed\x6b\x86\xb0\xc1\x2c\xb1\xa6\x05\x4e\x23\x94\x47\xf7\xb9\xbf\x70\x9f\xd5\xf5\xd1\x08\x2d\xd9\x73\x66\x5e\x51\x57\x19\xe5\x85\xfe\x1b\x13\x6f\xe4\xe1\x88\xd4\xc4\x0a\x68\xd8\xa4\x83\xdf\xc3\x72\x71\xfd\xe6\x39\x7f\xd5\xb0\x29\x46\xba\x53\xd6\xb3\xac\x5d\x9e\x68\x2c\xa3\x4b\x82\x11\xba\xa2\x01\x67\xc0\x0c\x1d\x11\x26\xdd\x5b\x7f\xb0\x91\x03\xed\x41\x37\x31\xd3\x39\xbc\x9a\xdf\xf3\x11\x12\xe5\xfd\xd0\x3d\xd1\x67\xe1\x26\xf2\x9f\x4a\x65\x8f\x12\x71\x99\x5f\x07\xc5\x70\xce\xe9\x8a\xf2\x32\x60\xda\x24\x55\x8c\x8b\x9b\xd4\x82\x64\xfa\x9b\x87\x6e\x75\xeb\x7c\x46\x7d\xea\x9e\x9f\x6a\x5c\x95\x8a\xc9\xf6\x38\x0d\xed\xb6\x4a\x45\xe8\x96\xb2\xca\xac\x13\xd6\x8f\x12\xc4\xd6\xc2\x76\x3c\xec\x8a\xee\xfb\xd8\xd8\x6d\x15\x1a\xbc\x17\xf2\x70\x5d\x19\x0e\x6b\x25\x54\x00\xe3\xf5\xee\x49\xef\x95\x7a\x12\xff\x16\xd1\x82\xf7\xb2\x77\x81\x22\xee\xe4\xe9\xf6\xf7\x2b\x50\xa1\x1e\x81\xaa\x7b\x16\xb2\x50\x0e\x9a\xf4\xe0\x39\xc7\xe5\xba\x06\xbd\x03\x52\xd6\x4a\x9b\x9d\x8d\x69\xfb\xe8\x1f\x60\x2e\xf9\xb6\xa1\xbd\x74\x8b\xee\x4a\x79\x2f\xa8\xc9\x30\x51\xf3\x91\xc5\x1c\x3e\x78\x58\x4e\xeb\x8b\xd8\x96\xa4\xf0\x6e\xf2\x9f\xa8\xd7\x06\x2e\x62\xdd\xe1\x52\x65\x38\x19\xc6\xa4\x45\x5e\x83\x94\xc1\x14\xc7\xc3\x6d\x25\x78\x37\x76\xe5\xbd\x45\xfe\xb5\xbb\x86\xdb\xd9\xb5\x53\x51\x80\xa2\xac\x72\x5d\x19\x55\xd1\x6a\x29\x36\xba\x06\x0b\x28\x80\xca\x90\x41\x33\x90\xfa\xa3\xb9\x19\x85\xae\x39\x64\xbb\x5a\x14\xe4\x96\xae\xa1\xba\xa5\x12\xec\xbb\xfa\xf9\x6a\xb0\x8e\x5e\xcb\x49\x45\x3e\x8e\x43\x3d\x22\x23\xe4\xeb\x16\x14\xcc\xaf\xce\xa1\x45\x01\x6f\x1c\x95\xbe\x17\x0d\xdc\x90\x9f\xf5\xec\x75\x43\x1e\xf8\x13\xaf\x77\xe7\xc9\xaa\x82\x8b\x75\x03\x49\xfb\x11\x92\x2e\xdd\xf9\x00\xec\xb5\xe2\x9e\x28\x91\x1d\xf0\x3d\xf4\x79\x38\xd9\xb4\xb7\x3a\x89\xf4\x9f\x07\xa8\x51\xbb\xd6\xa2\x2e\x05\x48\x89\x14\x67\x34\xbe\xef\x2d\x58\xfc\x02\xdc\xae\x0f\x47\xc5\x5b\x1e\x7b\xca\x49\xea\xe6\xb5\xb2\xbb\x62\xeb\xdb\x7e\x6c\x53\x1d\x35\x35\xc2\x3b\x23\x7a\x82\x7a\x20\xa3\x4f\xc2\xe3\x70\xb1\x37\xeb\xf5\xee\x45\xa3\x24\x44\xc6\x5d\xe9\x6e\x3f\xfd\xe5\x57\xb6\x77\xee\x8b\xcd\x4f\x71\xfc\x78\x2e\x78\x8c\xf6\x99\x28\x6c\x4c\xb5\xf4\x2f\x03\x18\xaf\x89\x16\xaf\x0b\x15\x2f\x8e\x13\x2f\x0a\x12\x2f\x87\x10\x4f\x84\x87\xd1\x8e\x14\x02\x86\xa9\x7d\x68\x1c\x24\xbc\x3a\x1e\x8c\xea\x24\x84\x04\x53\x75\x32\x0e\x03\x5e\x1a\x00\x26\xa9\x20\x08\xfd\xc6\xe8\x61\x24\xe8\xbb\x30\xe2\x8b\xea\x22\x11\xeb\xa5\x6a\xe4\xe5\x50\xde\x37\x0b\xf1\xa2\x2a\x0e\x80\xbb\x54\xb5\x8e\x82\x75\x17\xc6\x74\x91\xf2\x8f\x43\x73\xd6\xc6\x84\x22\xc5\x44\x5f\xf6\x6e\xee\x1b\xe9\xd6\x40\x34\x01\x70\xf6\x0e\x17\x70\xd7\x37\x25\x4f\xb5\xd4\xb5\xf1\x7c\x6a\xfc\x87\x15\x39\xdd\x1a\xb6\x26\x3c\x14\xad\x4f\x19\x2b\x02\x21\x8b\xbb\x3f\x3f\xde\xdd\xfe\x78\x7f\xb7\xd8\xb7\xc2\xc7\x9b\xcb\x61\x50\x94\xf5\xcc\x65\xcf\x0d\x7a\xb2\xf2\x5c\xd2\x6d\xcb\x73\xa9\x69\xd8\xb1\xa7\xce\x37\xde\xcf\xb2\x19\xce\x9a\x5c\xe3\xe3\xc4\x44\x03\x85\x69\x5b\x18\xb5\xaa\xad\xca\x55\x5d\x15\xd2\xed\x6f\x58\x2e\xda\x44\x04\x8c\xe7\x55\x53\x68\x93\xeb\xe1\x61\xb9\x90\xef\x08\xf9\x09\x72\xda\x48\x6d\xba\xf9\xdd\xf5\x9a\xbf\x56\xe4\x8f\xdf\x3f\xfc\x6d\xb6\x76\x99\x27\x6f\xda\x74\xa9\xe6\xec\x3d\x46\xf1\xf8\x40\x53\x50\xf3\x56\x34\xeb\x8c\x44\x39\xdd\xe8\x11\xd8\x8f\xfc\x19\x66\xaf\xa1\xbc\x20\x2b\xa8\x36\x7a\x76\x78\x02\xd2\x9d\x53\xa6\x3f\x68\xae\xe2\xfe\x0d\x1b\xc7\x5e\x82\xc2\xa4\x04\xa1\x50\xf5\x60\x05\x44\x08\xfb\x19\x6c\x7d\x80\x0b\x2c\x7d\xd9\x51\x69\x09\xe5\x51\x69\x23\x4d\x25\xce\xe3\xfc\x48\xcb\x03\xb3\x70\x66\x31\xbf\x0e\x64\xd6\xc2\x76\xdc\x0a\x83\xc3\x98\x4a\xa6\xe7\xfe\x48\xc0\xe3\x27\x44\x1f\xb0\x2b\xd8\x57\xf2\xe0\xc3\xed\x5e\xa0\x9e\xc8\x69\xb2\x48\x10\x5b\x28\xbe\x37\xeb\x39\xee\x5f\x18\x6d\x3b\xfc\x5f\xf3\xe8\x8c\x99\xde\xa8\x63\x09\x1c\xf9\xf2\xf5\xbb\xff\x03\x00\x00\xff\xff\x3c\xa9\x97\x6e\x9b\xab\x03\x00") +var _operatorsCoreosCom_subscriptionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x6b\x77\xe4\xb6\x95\x2f\x0e\xbf\xcf\xa7\xc0\x52\xb2\x96\xa4\xa4\xaa\xba\x3b\x71\x2e\xd3\x27\x4f\xb2\xe4\x6e\x75\x8e\x8e\xdd\x6d\x9d\x56\xdb\x5e\xf3\x78\x72\xc6\x10\x89\x52\x21\x22\x01\x9a\x00\x25\x55\x26\xf3\xdd\xff\x0b\x7b\x03\x20\x58\x55\x12\x01\xaa\xaa\xa4\xf6\x10\x2f\xec\x16\x8b\xc4\x1d\x1b\xfb\xfa\xdb\xb4\xe2\xdf\xb1\x5a\x71\x29\x5e\x13\x5a\x71\x76\xa7\x99\x30\x7f\xa9\xd9\xf5\x9f\xd4\x8c\xcb\x17\x37\xaf\x7e\x71\xcd\x45\xfe\x9a\xbc\x69\x94\x96\xe5\x47\xa6\x64\x53\x67\xec\x2d\x9b\x73\xc1\x35\x97\xe2\x17\x25\xd3\x34\xa7\x9a\xbe\xfe\x05\x21\x54\x08\xa9\xa9\x79\xac\xcc\x9f\x84\x64\x52\xe8\x5a\x16\x05\xab\xa7\x57\x4c\xcc\xae\x9b\x4b\x76\xd9\xf0\x22\x67\x35\x54\xee\x9a\xbe\x79\x39\xfb\xed\xcb\xd9\xcb\x5f\x10\x22\x68\xc9\x5e\x13\xd5\x5c\xaa\xac\xe6\x15\xd4\x34\x93\x15\xab\xa9\x96\xb5\x9a\x65\xb2\x66\xd2\xfc\xaf\xfc\x85\xaa\x58\x66\xda\xb8\xaa\x65\x53\xbd\x26\x1b\xdf\xc1\xea\x5c\x57\xa8\x66\x57\xb2\xe6\xee\x6f\x42\xa6\x44\x16\x25\xfc\x1b\x87\x78\x11\xb4\x0a\x8f\x0b\xae\xf4\x57\x6b\x3f\x7d\xcd\x95\x86\x9f\xab\xa2\xa9\x69\xb1\xd2\x5b\xf8\x45\x2d\x64\xad\x3f\xb4\x6d\x9b\xb6\x54\x73\x19\xfe\xdb\xbe\xc8\xc5\x55\x53\xd0\xba\x5b\xc9\x2f\x08\x51\x99\xac\xd8\x6b\x02\x75\x54\x34\x63\xf9\x2f\x08\xb1\xd3\x65\xeb\x9c\x12\x9a\xe7\xb0\x04\xb4\x38\xaf\xb9\xd0\xac\x7e\x23\x8b\xa6\x14\xbe\x4d\xf3\x4e\xce\x7c\xad\xaf\xc9\xa7\x05\x23\x15\xcd\xae\xe9\x15\x73\xed\x5d\xb2\x9c\x68\xe9\x3f\x20\xe4\x1f\x4a\x8a\x73\xaa\x17\xaf\xc9\xcc\x4c\xf1\xcc\xcc\x60\xf0\x33\xae\xcf\x39\x56\x12\x3c\xd7\x4b\xd3\x5d\xa5\x6b\x2e\xae\x1e\x6a\x3e\xa3\x9a\x16\xf2\x8a\xe0\x36\x22\x73\x59\x13\xbd\x60\xc4\x34\xc5\xe7\x9c\xe5\xae\x7f\x0f\xf4\x08\x3f\x5d\xeb\xd3\xc5\xea\xe3\xe8\x2e\x2d\xa8\x10\xac\x20\x72\x4e\x9a\x2a\xa7\x9a\x29\xa2\x65\x3b\x3f\x0f\x4f\x8f\xfd\x78\xad\x37\x6f\xd6\x9e\x6f\xe8\x0e\xbe\x7a\xf3\x8a\x16\xd5\x82\xbe\xb2\x0f\x55\xb6\x60\x25\x6d\xd7\x50\x56\x4c\x9c\x9c\x9f\x7d\xf7\xbb\x8b\x95\x1f\x48\x77\x28\xe1\x16\x25\xd7\x8c\x55\xaa\x3d\x14\xa4\xa9\xcc\x98\xcc\xe0\xc8\xe5\x92\xe8\x9a\x66\xd7\x5c\x5c\xc1\xd0\xaf\x70\xbc\x6f\x70\x61\xd4\x6c\xad\xcb\xf2\xf2\x1f\x2c\xd3\xc1\xe3\x9a\xfd\xd4\xf0\x9a\xe5\x61\x57\xcc\xcc\x3a\x4a\xb0\xf2\xd8\xcc\x53\xf0\xa8\xaa\x4d\xb7\x74\x70\x0e\xb1\x04\xa4\xa8\xf3\x7c\x65\x98\xff\x9a\xae\xfc\x4a\x88\x99\x1d\xfc\x92\xe4\x86\x2e\x99\x01\x2d\x98\x3b\x2e\x2c\xb7\x53\x6a\x16\x58\x2f\xb8\x22\x35\xab\x6a\xa6\x98\x40\x4a\x65\x1e\x53\x61\x47\x39\x5b\xab\xfc\x82\xd5\xa6\x22\x73\xa4\x9b\x22\x37\x04\xed\x86\xd5\x9a\xd4\x2c\x93\x57\x82\xff\xd3\xd7\x0e\x93\x68\x9a\x2d\xcc\x0e\xd2\x04\x0e\xa4\xa0\x05\xb9\xa1\x45\xc3\x26\x84\x8a\x7c\xad\xee\x92\x2e\x49\xcd\x4c\xbb\xa4\x11\x41\x8d\xf0\x89\x5a\xef\xcb\x7b\x59\x33\xc2\xc5\x5c\xbe\x26\x0b\xad\x2b\xf5\xfa\xc5\x8b\x2b\xae\x1d\xa9\xce\x64\x59\x36\x82\xeb\xe5\x0b\xa0\xba\xfc\xb2\x31\x4b\xff\x22\x67\x37\xac\x78\xa1\xf8\xd5\x94\xd6\xd9\x82\x6b\x96\xe9\xa6\x66\x2f\x68\xc5\xa7\x30\x18\x81\x44\xb6\xcc\x7f\x59\x5b\xe2\xae\x56\x1a\xde\x78\x90\x88\x23\x9b\x89\x8b\x65\xe8\x29\xe1\x8a\x50\x5b\x21\x0e\xb6\x5d\x13\xf3\xc8\x4c\xe3\xc7\xd3\x8b\x4f\xc4\xf5\x08\xd7\x0d\x97\xa8\x7d\x75\xc3\x0c\xb9\xd5\x32\x33\xcb\xc5\x9c\xd5\xf8\xe5\xbc\x96\x25\xd4\xca\x44\x5e\x49\x2e\x34\xfc\x91\x15\x9c\x09\x6d\x4e\x7a\xc9\xb5\x82\x6d\xcd\x94\x36\x0b\xb9\x5e\xf1\x1b\xb8\xda\xc8\x25\xb3\x34\x22\x5f\x7f\xe5\x4c\x90\x37\xb4\x64\xc5\x1b\xaa\xd8\xde\xd7\xce\xac\x91\x9a\x9a\x05\x89\x5e\xbd\xf0\xe2\x5e\xff\x60\xed\xd4\x13\xe2\xae\xdc\x7b\x97\x3b\x24\x41\x17\x15\xcb\xfc\x71\xa4\x82\x9c\x54\x55\xc1\x33\x3c\x71\x7a\x41\x35\xc9\xa8\x30\xd3\xc9\x85\xd2\xb4\x28\xd8\xea\xe9\xb8\xb7\x17\xf7\xd1\x1f\x02\xc4\x66\xe5\xba\x72\x8f\xd7\xee\x8c\xee\x0f\xfe\x9a\x5d\x79\xe3\x3e\x5a\x65\x8a\xa5\xfc\xeb\x3f\x3c\x30\xe5\x04\x59\xa2\x39\xbf\xda\xf4\xd9\xbd\x73\xf9\x06\x3e\x01\x66\x8a\x72\xa1\x6c\x15\x4d\x8d\xb3\xd9\xde\x9d\xe6\x36\xa5\x1d\x4e\x62\x7d\x1f\x3e\x38\xb3\x7d\x63\x36\x85\xce\x81\xf5\x5b\x6e\xfe\xb5\x9f\x00\xb8\x72\x36\x6f\x7b\x3e\x21\xf2\x86\xd5\x35\xcf\x2d\xe9\xae\x64\x7e\xa8\x80\xb0\xe6\x4d\x01\x17\x95\x14\x4a\xd7\x94\x6f\x3c\xf4\xae\x08\x5e\x98\xc1\x4f\xa9\xc6\x13\xc4\x14\xb9\xe5\x45\x41\x7e\x2d\xa4\xfe\xb5\x6f\x01\x1a\x90\x35\xbf\xe2\x9e\x3a\x2b\xc2\x85\x6b\x17\xae\x75\xcb\x97\x48\xc5\x56\x2a\xbc\xbf\xf1\x6f\x15\x23\xac\xac\xf4\xd2\x91\xa9\xa3\xff\xfa\xef\x63\x73\x27\xb0\x9a\xaa\xa0\xc1\x4e\x7d\xf7\x52\x7a\x2c\x3d\x2b\x45\x22\x56\x0b\xe6\x45\xe6\xec\xa4\x67\xd5\xc8\xea\xca\xbd\x65\xc8\xfe\x28\xf8\xdc\xaf\x7a\xb8\x28\x75\x53\x30\xe5\x59\x38\x33\x77\x0f\x54\x1e\x31\x96\xd8\xf1\xe0\x7b\x6c\xce\xea\x9a\xe5\x6f\x1b\x73\xca\x2e\x7c\xaf\xce\xae\x84\xf4\x8f\x4f\xef\x58\xd6\xe8\x0d\x2c\xc5\x83\x43\x7f\x60\xd3\xba\x62\xf8\x46\x3b\x13\xac\xc6\x5d\x86\x3d\x02\xd6\xd1\xfe\x60\xa6\x04\xd8\x02\x33\x83\x0a\xa9\x9e\xa2\x9a\xab\xf9\xb2\xb7\x01\x33\xa3\x7e\xce\xd9\x9d\xb9\xf1\x80\xf7\x0f\x4e\xbb\x61\xe4\xe0\x72\xe3\xac\xc8\x27\xe4\xb2\xd1\x84\x6b\xb8\xf9\xb2\x85\x94\x6a\x9d\xda\xad\x16\x8a\x4b\x0b\xfd\xba\xe1\x12\x18\x17\x22\x85\xd9\xac\xa4\x34\xd7\x15\x30\x4c\x2c\x6c\x7e\x06\x23\x6f\x3f\xe3\xab\xb7\xcd\x7a\x29\xa5\xd2\xed\x72\x99\xab\x1f\x0e\xa0\x60\xe4\x96\xeb\x05\xfc\x71\x55\x33\x64\x9a\x54\x53\x9a\x46\x6f\x19\xbf\x5a\x68\x35\x21\x7c\xb6\xe1\x26\x5d\x2d\x66\x03\x32\x9a\x2d\x82\x6e\x95\x8c\x69\x45\x68\x51\xb8\x21\x84\xbb\x16\x6f\x8f\xd2\x30\x10\xe4\xc8\x71\x18\xbd\xad\x58\xee\x60\xe2\x6f\x9f\xd5\x8d\xb7\x71\xb9\x26\x84\xe9\x6c\x76\x3c\xe9\xad\x3e\x93\x65\x65\x08\x02\x85\x39\xb8\x5c\x12\xae\x0d\xef\x8e\xdc\x50\x2d\x9b\x2b\x9c\x29\x56\xd8\x8e\x3b\x5e\x16\x16\xdf\x30\x97\x20\x0d\x6e\xb8\x6e\x56\xcb\x01\x4e\xee\x81\x63\x57\x4d\x73\x1c\x27\x09\xe6\xaf\xa4\x3a\x5b\x58\x32\x9c\xc9\xba\x66\xaa\x92\xc2\xd4\x8c\xbf\x9c\xb6\x63\xfb\x5f\xe6\x9d\xde\xf6\x4c\xa5\x47\xea\xb8\x5d\xec\x05\xbf\x5a\xb8\xb5\xa6\x35\x92\xe3\xee\x1e\xe9\x5b\x72\x24\x25\xb4\xae\x69\xdf\x39\xe2\x9a\x95\x3d\x84\x84\x0c\x38\xfd\x84\x9c\x08\x4b\xec\xdb\x8d\x1d\x6c\x31\xcd\xea\xd2\x4f\x24\xec\x42\x20\x7b\x0a\x27\x81\x97\x86\x13\xe2\xda\x6e\x73\xf2\x32\xa2\xbd\x23\x73\x12\x08\xd7\x87\x0a\x4e\xed\x54\x56\xc7\x33\x72\x42\x44\xe3\x09\xcf\x43\x5d\x10\xd2\xf7\xc0\x56\x64\xba\xa5\x64\x5b\x57\x3f\x3d\x8a\x23\xdf\x58\xee\x67\xd0\xd6\xcb\xd4\xf6\x9f\x89\x88\x43\x68\x5e\xc7\x59\xeb\x7d\x35\xf6\x22\x71\x6f\xbb\x3e\xc4\xbc\xbd\xb2\x63\x4e\xf0\xe4\x28\x56\xb0\x4c\x9b\xdb\x90\xd5\xe5\x84\x50\xa5\x64\xc6\x8d\xa8\xd0\xee\xfd\xee\x81\xc2\x91\xf4\xcf\x3d\x49\x9d\x7f\x92\x3c\x7e\x02\xd2\x68\xf7\x7c\xc7\x7e\xb7\x36\x1b\x05\x57\xda\x10\xa8\xee\xac\x74\xe8\xee\xe5\x12\x7e\x3d\x54\xa4\xa0\x97\xac\x78\x80\xaf\x5a\x2d\xf1\x87\xbf\x2d\x91\x64\xe0\x9e\x01\x45\x11\x84\xb6\xac\xee\x86\x60\xdc\x56\xee\xf5\xfb\x04\xc4\x20\xc7\xd4\x23\x2b\x38\x21\x94\x5c\xb3\xe5\x04\x49\xba\xf0\x2a\x9c\xa4\x2e\x40\xc5\x35\xc3\x0b\xdd\xec\xbb\x6b\xb6\x84\x0a\x1f\x66\x37\x37\x56\x95\xba\xef\xb0\xa4\x50\x80\xb6\x4c\x4d\x47\x13\xbf\x18\x30\x41\xe9\x47\x03\xcb\x35\x7b\x90\x7d\xde\x54\xd6\x94\x8d\xb0\xdd\x61\x3d\x60\x91\xe0\x06\x76\xfb\x81\x1a\x11\x99\x6d\xd6\x3f\x3c\x5c\x1e\x14\x38\x1f\x2a\x6e\xf6\x1e\x35\xae\xc4\x03\x62\xca\x47\xaf\xc3\xc1\xfd\x7e\xa8\x70\xbf\x1a\xba\xb3\xe0\xa0\xac\x34\x07\x05\xc8\x48\xfa\xa6\xc5\xf2\x1d\x2d\x78\x1e\xe8\x40\x0d\xb3\x71\x26\x26\xe4\x83\xd4\xe6\x7f\xa7\x77\x5c\x19\x1e\xf3\xad\x64\xea\x83\xd4\xf0\xe7\x8c\xfc\x4d\xe3\xd1\xfb\x3a\x92\x2e\xb7\x65\xf0\x1a\xe0\xf8\xf6\xbd\x02\x27\x02\x89\xa8\x99\xe1\x50\x13\xa7\x66\x46\x32\x07\x16\xdd\xce\x9c\xa1\x5a\x67\xc2\x08\x05\x38\x73\xc9\x4d\x81\x32\x16\xe5\x6c\x6c\xb2\x6c\x14\xa8\xd2\x84\x14\x53\x60\xa3\x36\xb6\x89\x0b\x64\xda\x0d\x97\x68\x8b\xcd\xdf\xdf\xf4\xdf\xb4\x69\xf6\x6b\x3d\x09\x3e\x4e\x6e\x37\x68\x6c\x41\x6f\x80\xb5\xe7\xe2\xaa\xf0\x4c\xfc\x84\xdc\x2e\x78\xb6\x40\xe9\x11\x34\x61\x9a\xd5\x55\xcd\x0c\xc7\x40\x41\x67\x66\x9e\x5c\xb1\x3a\x7d\xeb\x7f\x32\xa2\x01\xb6\x8f\xfa\xee\x82\x66\x2c\x27\x39\x88\x2c\xa8\x7a\xa5\x9a\x5d\xf1\x8c\x94\xac\xbe\x62\xa4\x32\x57\xff\xb0\x0d\x9f\x76\x13\x63\x49\xbe\x8f\xc3\x06\x07\x9c\x30\x42\xee\xa6\xd7\xcd\x25\xab\x05\xd3\x4c\x4d\x0d\x7f\x32\xb5\xbd\xd7\xb2\xe4\x59\x74\x65\x5b\xa9\x06\xf8\xac\x77\x46\x6e\xdb\x13\x8b\x05\x32\xe2\xc8\x62\x8d\x2c\xd6\xc8\x62\x8d\x2c\xd6\xc8\x62\x45\x97\x91\xc5\x7a\x74\xf3\x23\x8b\x35\xb2\x58\x7b\x67\xb1\x3a\x55\x94\xb4\x4a\xad\x01\xf5\x72\x03\x14\x81\xdf\xa3\x42\x77\x55\xf3\x07\x0c\x9f\xf3\x6b\xe8\xaa\x00\x0d\x1f\x73\x61\x2f\xa7\x4f\xa0\x36\xb4\x96\xc8\x9a\x8a\x2b\x46\x5e\x4d\x5f\xbd\x7c\x99\xa2\x20\xb4\xdb\x39\xea\x8b\xb9\xac\x4b\xaa\xe1\x9b\xdf\xfd\xb6\xe7\x8b\x47\xac\xca\x7d\xf6\x92\xfd\x18\xea\x2c\xe5\xf1\xb6\x99\x0e\x8b\x7c\x8f\x2d\x0d\xae\x31\x21\x35\x29\x99\x26\xb4\x9f\x27\x0b\xd5\xee\xbc\x64\x13\x67\x0e\x45\xb2\x63\xdd\x46\x9c\x51\x30\x27\x52\x58\xd3\x8b\x59\xfc\xfe\xc5\x1d\x34\x82\x8c\x51\xc5\xcc\x15\x7f\xc9\xcc\x28\xfa\x4d\x81\x9a\x28\x59\x9a\x5e\x73\xa1\x1d\x11\x33\x43\x60\x6e\x61\xc8\x11\x9b\x5d\xcd\x48\xde\x40\xb5\x54\x58\x3f\x98\x63\x1c\xad\x5a\x2a\xcd\xca\x7e\x5b\xa0\xb9\x0c\x6b\xf8\x9f\x99\x16\x5d\x2f\xc1\x42\x7e\xc3\x84\x6e\x68\x51\x2c\x09\xbb\xe1\x99\xf6\xf3\x07\x6e\x3b\x5c\xab\xa8\x99\x4a\x60\xa3\xe3\x59\xe7\xe9\xda\x09\xed\xbb\xa4\x52\x38\xdf\xb5\xba\x63\x68\x4e\xe7\x04\x7c\xb4\x23\x99\xdd\x2b\x13\x6a\x53\x2f\x9a\x6d\xe1\x9f\xb0\xb9\xbf\xf9\xd8\x6f\x65\x23\xc9\xf7\x4f\xc2\x9d\x33\x8c\xb5\xb2\x06\x2f\x59\x5b\xe3\xdb\xfa\x48\x37\x98\xbc\x70\xec\x9d\x53\x23\xe7\x91\x0d\xea\x05\x43\x23\xe5\xc9\x87\xb7\x71\x33\x46\xac\x73\xc0\x27\x59\xc9\x42\x5e\x2d\xc3\xe5\x85\xe9\x04\xf3\x9f\xed\x07\xfa\xea\x20\x0b\x6e\xf6\xfc\x87\x95\xfd\x30\x9a\x86\x46\xd3\xd0\xa8\xb7\x80\x32\xea\x2d\x46\xbd\xc5\xa8\xb7\x88\x2b\xa3\xde\xe2\xd1\xcd\x8f\x7a\x8b\x51\x6f\x31\x9a\x86\xd6\xcb\xc8\x62\xf5\x97\x91\xc5\x7a\xb0\x8c\x2c\x96\x2f\x23\x8b\x35\xb2\x58\x23\x8b\x35\xb2\x58\x23\x8b\xb5\xaf\x6a\x1e\x6b\x1a\x7a\x54\x17\x86\x35\x5e\xc9\xfc\x11\xc1\x5b\x95\xcc\x1f\x88\xdd\x42\x9d\x7e\x26\xa7\x85\xcc\xa8\xb6\x61\xb6\xe6\x13\x6b\x85\x52\xb4\x44\x33\xc5\x84\xfc\x53\x0a\x86\xd1\x2c\xe6\x78\x80\xb1\x40\xea\x05\xab\xcd\xeb\x47\xea\xf8\xc1\x10\x82\x31\xf6\x6b\x8c\xfd\x1a\x63\xbf\xee\x2d\xcf\x26\xf6\x6b\x41\x15\xee\x5b\xbc\x1a\xef\x0f\x05\x0b\x68\xd2\x27\x56\x97\x3f\xd3\x48\x30\xb3\xdd\xed\x76\x04\x90\x88\x76\x4b\xe1\xcc\xe4\xd6\xe0\xcf\xf2\xf3\xee\x7c\x58\xb1\x1a\x06\x45\xf3\x9c\xe5\xa4\x62\xf5\x14\xb7\xa8\x24\x73\x2e\xf2\x0d\x63\x75\xf3\xd3\x4f\x1e\x76\x18\x8a\xd5\x1d\x47\xd4\x37\xbb\x89\xc7\xea\x76\x64\x80\x51\x31\xb4\x8c\x76\x2e\xc1\x67\x11\x9d\x95\x2a\xa1\x4f\x89\xb6\x06\xc5\xaf\x22\x65\xf4\x74\x31\x1b\x84\x63\x67\x7e\x1c\xa8\x7e\x4a\x12\x85\x4e\xac\x3c\xfe\x53\xc3\xea\x25\xc4\xe7\xb7\x62\xa7\xc7\x22\xb1\x1e\x31\x5c\x91\x8c\x2a\xbc\x56\x53\x58\xe5\xb3\x39\x46\x4d\x8a\xa6\x28\x26\x58\xcf\xea\x61\x75\x64\x0e\xf6\x81\x90\xe6\xf7\x64\x8d\x58\xa2\x8a\x66\x98\x0e\x64\xb8\x15\x96\xac\xae\xd3\x6a\x55\xa8\x1b\x73\xaa\x43\x5c\x96\x8d\xba\xc3\x0d\xd6\xf4\x64\xfb\x38\x96\xa1\x02\xcc\x20\xf1\xe5\xd1\xf2\xfa\x03\x73\xf2\x08\xbd\x22\xbc\x9c\xdc\x99\xed\xe8\x16\xc9\x70\xfd\x22\x19\xac\x63\x24\x83\xf4\x8c\x64\xa8\xae\x91\x3c\x42\xdf\x48\x86\xe9\x1c\xc9\xea\x6e\x33\x2b\x64\x19\xdf\xdd\xa8\x1f\xc9\xe3\x84\xf3\xe1\x6a\x48\xb2\x85\x83\x15\xb6\x1f\x20\x3b\xed\x4e\x2f\x49\x62\x75\x93\x70\xac\x3a\xea\xc9\x7d\xaf\xcb\x30\xd5\x24\xd9\xd2\xaa\x38\x64\x1c\xd0\x85\xed\x4b\x59\x49\x9e\x5e\x61\xf9\x60\x17\x6c\xf3\xd1\x1a\xbe\x41\xad\x3f\x42\x2b\x48\x1e\xa5\x19\x24\xc3\xb5\x83\xe4\xb1\x9b\x7d\x6b\x5a\xc2\xad\x56\x05\x7c\xd2\xd7\xe0\x87\xf6\x08\x6e\x2b\xf9\x04\x06\xcd\x22\x77\x51\xd2\xca\x9c\xbe\xff\x32\x4c\x04\x6c\xcc\xff\x26\x15\xe5\xb5\x32\xd2\x8d\xd5\x6b\x87\xbf\x59\xf5\x5d\x50\x4d\x72\x07\x2a\xd3\xb0\xb9\xe3\x6f\x68\x61\x98\x1c\x74\xfa\xb5\x3a\x08\xd3\x97\x55\x16\x72\x42\x6e\x01\x30\xcb\x5c\x6f\xa8\x99\xe0\x8a\x1c\x5c\xb3\xe5\xc1\x24\x4a\x3d\xd0\x2d\xe1\xc9\x3e\x38\x13\x07\xc8\x3a\xad\x9d\x4b\xcf\x67\x49\x51\x2c\xc9\x01\xfc\x76\xb0\x6d\x1e\x75\x00\x7f\x14\x42\xb3\x0e\x65\x3f\x06\x1d\xa7\xc7\x2a\xb8\x49\x67\xf7\x7d\xc5\x96\x43\x1d\x11\x92\xf6\xfc\xfb\x4e\x8b\x8e\xa1\x86\x6d\x66\x64\x77\xcf\x37\x21\x32\x2b\xb0\x4c\x56\x47\x85\xea\x2a\x5e\x14\x09\xad\x5d\x32\xa2\xe9\x35\x03\x0b\x8f\x04\x68\x39\x9e\x33\x04\xd3\xc3\xad\x03\x2d\x99\x2d\xd3\x28\x80\xc7\x25\x85\x94\xd7\x4d\xe5\xb6\x9e\x43\x93\x4c\x68\x92\x8b\x4c\x96\xce\xa7\x1e\xfd\x5a\x27\x16\x60\xee\x9a\x2d\xa7\x88\x81\x89\xcf\xa1\x61\xb8\x02\xac\x6a\xe2\xc7\x8e\x60\xfe\x23\xa1\x8a\xfc\x08\x4c\xa5\x20\x47\xf0\xe1\xf1\x8f\x29\x2e\x05\x7e\x02\x51\xfb\x2a\x1b\xa0\x2c\xcc\x5c\x96\xb6\x83\x6a\x75\x6e\x1f\x9a\xb1\x84\xa6\x1d\x52\x5c\x38\x19\x87\x68\x6f\x38\xa2\x42\xf3\x63\xaf\xa4\x99\x11\xd8\x07\xc0\x25\xe7\x52\x1c\x6a\xec\x9f\xa3\x6b\xae\x82\x14\xaf\x03\x3f\xef\xad\xc5\x0f\xad\x05\xb8\xe4\x39\x9b\xd3\xa6\xd0\x16\x8d\xd4\x90\x3e\xb8\xe9\x13\x5a\xf8\xe4\xec\x25\x96\xe1\x9f\xcb\xfa\x92\xe7\x39\x13\x10\xe2\xe0\xba\x7f\x29\x5d\x40\x50\xbb\xdd\x0d\x65\xeb\xac\x71\x4a\xb3\x27\x85\x92\x93\xd5\x1a\x33\x8f\x56\x6a\x4e\xd1\xed\x82\x89\x6e\x03\x84\x2b\x33\xa9\x8a\x25\x30\xb5\x7b\x71\xfd\x79\x3c\xcd\x1b\xec\x7a\xc5\xd5\x13\xd0\xbd\xd5\x46\x47\xd2\x17\x45\xfa\x84\xd4\x23\xf5\xfb\x6c\xa9\xdf\xda\xa6\xdf\x06\x01\x5c\xab\x74\xa4\x81\xc9\x34\x50\x38\x18\xe4\x27\xb6\x02\xa0\x62\x0c\xbd\x58\x5d\x97\x54\xab\x33\x83\x40\xaf\x61\xfa\x32\x17\x06\x07\x74\x16\x6a\xc8\x9d\x31\xb4\x11\x16\x0c\x1e\xcc\xa1\x6d\xb3\x48\x2f\x56\x6d\xee\x09\x6d\x3a\xc1\x45\x0a\xa6\x40\xc5\xce\xbc\x7f\x45\xd0\x0c\xd4\x9a\x32\x14\x08\x85\x6b\xd5\x87\x22\x5f\x0d\x8e\x6b\xeb\x06\xbd\x7e\xc9\xa8\x50\xe4\xc0\xb9\x78\x1c\xaa\xf6\x8d\x83\xa4\xf3\xe6\xa0\x2f\x7d\xdb\x80\x74\x1c\xc2\x5d\xb6\x4d\x8f\x76\x94\xd1\x8e\x12\x96\xd1\x8e\xb2\xde\x89\xd1\x8e\x72\x5f\x19\xed\x28\x83\xda\x1f\xed\x28\xdd\x32\xda\x51\x46\x3b\xca\x68\x47\x19\xed\x28\xa3\x1d\x65\xb4\xa3\xc4\x7e\xb4\x0d\x3b\x4a\x2b\x06\xed\x43\x8e\x0e\x45\x56\xeb\x27\x8e\x59\xb6\xa8\xe6\x59\x1b\x15\xea\xde\xc2\x7f\x3d\x95\x50\x1d\x8a\xc1\x8f\x15\xa9\x43\x01\x7d\x4d\x83\x91\x2c\x51\xdf\x2b\x3f\x7b\x09\x7b\xad\x8d\x2d\x89\xd6\x3f\x73\xe5\x52\xe0\xc0\xba\x8f\xe3\xf0\xc9\x85\xb2\xd8\xc4\x7d\x97\xac\x8d\x73\xc9\xc9\x91\xd3\xb5\x1e\x9b\x05\x17\x52\x77\x7f\x14\x9a\x4f\xdb\x37\xbc\x83\x30\xa8\x84\x1d\x9a\x5b\xca\xa4\x3b\x99\xa5\xd5\x3d\x8a\x95\xb4\x97\xed\x6e\x33\xf4\x9f\xd5\x9d\xde\x72\x65\x33\xa9\x41\x68\x5a\xdd\x08\x61\xd8\x23\x29\x6c\x14\x47\x42\x4f\xf0\x6a\x41\x35\xaf\x3d\x95\x28\x4c\xc1\x18\x41\xa2\x6a\x97\x29\x08\x00\xa0\x1a\xd3\x24\x5a\xcc\x25\x29\xac\x92\xdc\x3c\xc1\x7a\x12\x3a\xe1\x0f\x2c\xcc\x27\xf7\x23\x4a\x39\xab\xa7\x70\x46\xc3\xce\x72\x05\xeb\x48\x8b\x42\xde\xa6\xdc\x4f\x89\x27\x62\x30\x38\x60\xf4\xee\xbd\x4d\x46\x11\x5c\xf1\x96\x8f\xe5\xd5\x47\xa8\xc1\x07\xcb\x08\x35\xf8\x3c\xa0\x06\x03\x3b\x68\x88\x39\xd8\x3f\x57\x80\x49\xb8\x53\xcc\x41\x42\xbe\x5f\x30\x38\x45\x35\x43\xe3\x65\x53\x68\x5e\xb5\x51\xc6\x0a\x57\xa8\x40\x91\x7a\x6e\xa3\x01\xbb\xa7\xd7\xf4\x86\x66\x8b\xde\xa6\x56\x4e\x39\xb4\x07\x51\xcb\x0a\xa8\x29\x46\xcc\x81\xfe\x1d\x81\xfe\x9c\xac\x8d\x61\x87\xfc\xa9\xa3\xa9\xa2\xe8\xdf\x5b\x97\x30\x34\xb0\x81\x2b\x72\x64\x6e\xc7\x62\x69\xad\xc6\x1d\x42\xd8\xb9\x56\x23\x1a\x40\x3d\xd8\x0d\x73\x0c\xea\x15\xbf\x61\xa2\xbd\x7d\x8f\xd4\xf1\xb1\xe3\x89\x57\xf9\x87\x88\xda\x1f\xc3\x61\xc4\x50\xed\x54\xce\x60\xe5\xbe\x8f\x68\x61\x03\x47\xf0\xe7\xe0\x96\xfd\x4b\x3f\x4f\x10\xd1\x08\x1e\x69\x17\x9e\x19\x2c\x74\xcb\x0b\xf4\xd6\xb2\xc3\x28\xb8\x94\x50\xab\x34\xad\xf8\x80\x10\xab\xa1\x48\x99\xbb\x0d\xad\xda\x69\x58\xd5\xe7\x03\x68\xf9\xc4\xe6\xbf\xcf\x00\x8d\xe9\x99\x98\xfb\x46\x38\xa6\xfb\xca\x53\xc1\x31\xed\xdc\x9c\xf7\xd9\xa1\x32\xed\xd5\x7c\xb7\x1f\xd3\xdd\x67\x86\xca\xf4\x24\xa6\xba\x67\x8e\xcf\xb4\x3b\x13\xdd\x08\x7e\xf4\x34\xf8\x92\xa9\x66\xb8\xe1\xa7\xea\x49\xcd\x6f\x4f\x6a\x7a\x7b\x7a\xb3\xdb\x20\x5e\xe5\xb1\xe6\xb6\xe4\x63\xf2\x58\x33\xdb\x10\x97\xfd\x61\xfb\x79\x7f\x21\x4a\x7b\xf6\xd1\x7f\x1e\xa1\x49\x4f\xe4\x98\xff\x54\x4e\xf9\xbb\x75\xc8\x7f\x82\x50\xa4\xbd\x84\x21\xa5\x5e\xfb\x49\x97\xfd\xe3\x68\xd7\x90\x1b\x79\x60\xc8\xd1\x40\xfa\xb5\xcf\x50\xa3\x9f\x01\x09\x1b\x14\x62\x34\x52\xb1\x27\xa2\x62\xdb\x0b\x29\xda\x57\x38\xd1\xcf\x8c\x96\x0d\x0c\x1d\xda\x9a\x76\x7b\x37\x21\x43\xfb\x0e\x17\xda\x41\xa8\xd0\x53\x84\x09\xed\x20\x44\x68\xb4\x09\x44\x96\xd1\x26\x10\x5b\x46\x9b\xc0\x7d\x65\xb4\x09\xac\x96\xd1\x26\x30\xda\x04\x46\x9b\xc0\x68\x13\x58\x6f\x70\xb4\x09\x8c\x36\x81\xb8\x32\xda\x04\xf6\x63\x13\x48\x0d\xbb\x19\xb6\x97\x9f\x26\xdc\x66\xbf\xa1\x36\xdb\x0f\xb3\x79\xc2\x10\x9b\x9f\x99\xc2\x25\x39\x9c\x66\xd8\x36\x7f\x2e\x61\x34\xcf\x23\x84\xe6\xc9\xc3\x67\x1e\x1b\x3a\xb3\x9d\xb0\x99\x84\xdd\x3e\x70\x9f\x57\x32\x3f\x11\x9a\x3f\x36\xf1\x51\xb8\x01\xef\xcb\x7e\x44\x6f\x24\xcf\x49\xd5\x68\x9b\x70\x65\xcc\x80\xd4\xbb\x07\xf6\x93\x01\xa9\xb3\x78\x63\x1a\xa4\x87\xca\xb3\x49\x83\x74\xdf\x9a\xed\x31\x17\x92\x6a\x2e\x75\x4d\x33\x9d\x94\x10\xc9\x19\x1c\xc7\x94\x48\x6b\x65\x4c\x89\x34\xa6\x44\x1a\x53\x22\x8d\x29\x91\x46\x28\xbf\x11\xca\x2f\x2c\xcf\xc6\x8e\x47\x46\x28\xbf\xc4\x4f\x47\x28\xbf\xbe\x32\x42\xf9\x8d\x50\x7e\xf7\xb5\x3e\x42\xf9\x8d\x50\x7e\x69\x0d\x8f\x50\x7e\x64\x84\xf2\x1b\xa1\xfc\x3e\x63\x28\xbf\x31\x25\xd2\x67\x91\x17\x64\x4c\x0a\x92\xd0\xf6\xf3\x4a\x0a\x32\xa6\x44\x7a\xb0\x91\x31\x25\xd2\x48\xfa\xc6\x94\x48\x3f\x5b\xea\x37\xa6\x44\x8a\x68\x64\x4c\x89\x34\xa6\x44\x7a\xb0\x8c\x29\x91\x46\x3b\x0a\x19\xed\x28\xa3\x1d\x25\xf5\xab\xd1\x8e\x72\x7f\x19\xed\x28\x29\x65\xb4\xa3\x44\xb7\x3e\xda\x51\x46\x3b\x4a\x5a\xc3\xa3\x1d\x85\x8c\x76\x94\xd1\x8e\xf2\x19\xdb\x51\xc6\x94\x48\x63\x4a\xa4\x31\x25\x92\x6f\x79\x4c\x89\x34\xa6\x44\x82\x32\xa6\x44\x8a\x68\x61\x4c\x89\xf4\xb9\xa6\x44\xea\x84\x05\x7d\xbe\x79\x91\xd2\x87\x31\x26\x47\x1a\x93\x23\xdd\x53\xc6\xe4\x48\x63\x72\xa4\x4d\x65\x4c\x8e\x34\x26\x47\x7a\xa0\x8c\x40\x88\x91\x65\x04\x42\x8c\x2d\x23\x10\xe2\x7d\x65\x04\x42\x5c\x2d\x23\x10\xe2\x08\x84\x38\x02\x21\x8e\x40\x88\xeb\x0d\x8e\x40\x88\x23\x10\x62\x5c\x79\x7a\x03\xdc\xff\x0c\x20\xc4\x31\x39\xd2\xb3\xcc\x2c\x32\xa6\x15\xe9\x29\xcf\x27\xad\xc8\x98\x1c\xa9\x53\xf9\x98\x1c\x69\x24\x61\x63\x72\xa4\xcf\x8e\x8a\x8d\xc9\x91\x36\x54\x3e\x26\x47\x1a\x93\x23\x8d\xc9\x91\x46\x9b\x40\x6f\x19\x6d\x02\xa3\x4d\x20\x2c\xa3\x4d\x60\xb5\x8c\x36\x81\xd1\x26\x30\xda\x04\x46\x9b\xc0\x7a\x83\xa3\x4d\x60\xb4\x09\xc4\x95\xd1\x26\x30\x26\x47\x1a\x93\x23\x8d\xc9\x91\xa0\x8c\xc9\x91\xc6\xe4\x48\x63\x72\xa4\x8d\x1f\x83\xa2\x15\x25\x9b\xfb\x76\x76\xec\x5e\x3e\x69\xab\xb2\x1c\x7c\x23\x94\xae\x9b\x4c\x37\x35\xcb\x61\xc1\x70\x31\x0d\x63\xa0\xb4\xac\x9d\x55\x00\x32\xcd\xbc\x65\x55\x21\x97\xe6\xb6\x9d\x90\x73\x99\x4f\xc8\xc9\xf9\xd9\x05\xab\x6f\x78\xc6\xdc\xee\xfb\xc6\xde\xe9\xf7\xcf\xdb\xa7\x65\xc5\x33\x5a\x14\xa0\xb1\x68\x7b\x53\xd2\xa5\xd3\x25\x5f\x2e\x09\xbb\xd3\xac\x16\xb4\x20\x5a\xca\x02\xcd\x2f\xa6\x33\x40\x10\x6b\xa6\x6b\xce\x6e\x18\xa1\xf5\x25\xd7\x35\xad\x97\xa4\x64\x9a\xe6\x54\xd3\xfb\x5b\xfd\x56\xb1\x30\x46\x43\x4b\x52\xd5\x6c\x8a\x27\xa0\xd3\x0f\xd8\x9b\xdf\x7c\xfd\xde\x9d\x6f\x9a\xe7\x2e\x20\xc1\xed\xf0\x8b\xe6\xd2\xcf\xf6\xe1\xfd\xdc\x56\xee\x67\x4b\x4d\x60\x7b\x5a\x15\x4d\xc5\x15\xce\xd9\xbd\x12\x69\x04\x5b\x92\xc6\x84\xf4\xee\x4f\x26\x6e\x1e\xbb\xb5\x4e\xc5\x4d\x57\xb3\xc7\xc4\x0d\xaf\xa5\x00\x3e\xf2\x86\xd6\x9c\x5e\x16\xcc\x5a\xd2\xbc\x7d\xc5\xf2\x76\xec\x81\xfd\xf2\xc6\xdb\x19\x30\xd8\xe5\xde\x23\xd9\x7f\x9f\xf5\xdc\x60\x9d\x91\x9e\x8a\x9b\xef\x68\x57\xcd\x20\x36\x0e\x89\xd8\x17\xcc\x90\x28\x79\xd3\x3f\xa0\x28\xa6\x33\x46\x1d\x36\x05\x0a\x7f\xef\x0b\x71\x4a\x2b\x53\xc5\xc3\xf7\x65\xda\x3d\xf9\x81\x96\x6d\x06\xad\x0d\xd3\xd5\x47\x50\xdf\x23\xc7\xaf\xec\x26\x32\x17\x42\x55\x73\xa1\x61\xaa\x4f\x2e\xde\x9c\x9d\x91\x6c\x41\x6b\x9a\x69\x56\x2b\xc2\xee\x32\x56\x69\x72\xf8\xff\x3b\x7c\xb8\xde\x48\x02\x0d\xb4\x6f\x9b\xb3\xf1\x9d\xdb\x24\x90\xde\x88\x09\xc3\xd9\xfd\xea\xe8\xbb\x93\x8f\xff\xf9\xe1\xe4\xfd\xe9\x31\xc8\x2c\xec\xae\xa2\x22\x67\x7d\x3c\x68\xa3\x5c\x88\x4f\x55\xb3\x1b\x2e\x1b\x55\x2c\xfd\x15\xbe\xf9\xac\xad\x1e\x32\x43\x7f\x7a\x5a\x31\xf3\x6d\xc9\xd3\xe6\x4a\x41\xcf\x42\xdb\xdd\xdf\x9a\x01\x6b\xa6\x64\x71\xc3\xf2\x3e\xf5\x0a\x04\x5b\xba\xe9\x68\x0d\xad\x55\xa3\x9d\x16\xc9\xd9\x4e\x1b\x91\x2d\xa8\xb8\x62\xf9\x8c\xbc\x95\x8d\x69\xed\x57\xbf\x82\x29\xab\x59\xde\x64\xbd\x33\x86\x2a\x40\x94\x98\x7f\x35\x71\x1c\x86\xb9\xd7\x15\x66\x4f\x53\x19\xad\xdc\xa4\x86\xab\xa2\x96\x42\xd3\xbb\xd7\x31\x79\xd8\x0e\x7e\x15\x7c\x78\xe0\xf2\xe2\x49\xd3\x3d\xe4\xc6\x70\x44\x05\xa4\x34\x2b\xc8\x41\xf8\x76\x5f\xdd\xa7\xa6\x7f\x2c\x0f\xf7\x0e\x86\x36\xb2\x1b\x56\x83\xf6\xc9\xee\x9c\x09\xa9\xd9\x15\xad\xf3\x82\x29\x08\xaa\xbb\x5d\x30\x48\x52\x88\xa2\x34\x2e\x54\x4f\x5b\xcc\x6b\xca\x84\xec\xd5\x60\xbe\x45\x33\x36\x10\xf3\x83\x9e\x61\xa4\x9c\xbc\x77\xb5\xec\xc9\x71\xd5\x39\x7d\x17\x10\xb5\xe3\x8d\xfd\x9b\xb6\xeb\xa1\xb5\x92\xcc\xc2\x6b\x44\x19\xf6\x77\xde\x1a\xe1\xcd\xf3\x08\x43\x7c\xb4\xb2\x20\xde\x5a\x90\x49\x31\xe7\x57\xef\x69\xf5\x15\x5b\x7e\x64\xf3\xc4\x00\x42\xe4\xfc\xad\xfe\x1b\x88\xa5\xb9\x7e\xb0\xc2\x7e\xbe\x75\x87\xf1\x62\x31\x36\x99\x34\x93\x4a\xb4\x21\x65\xa8\x50\xc7\xac\xb0\xe2\xdc\x55\x7c\x72\x40\x3f\xa3\x87\x8a\xbc\xa5\x9a\xa6\x19\x9b\xd1\xaf\x08\x49\xdc\x97\x5c\xd0\x7a\xd9\xd6\xe1\xe3\x9d\xb3\xa6\xae\x99\xd0\xc5\x12\x26\x85\x5e\x81\x7c\x86\x9e\x2f\x96\x6e\x33\x71\x63\xb6\x74\x92\x69\x38\x5a\xf6\xee\xe7\x00\x5c\x19\x36\xb9\x21\x47\x60\x49\x59\xb4\x8d\xe4\x53\xcb\xb2\x73\x45\xd8\x7c\xce\x32\xcd\x6f\x58\xe1\x43\xb1\x6d\x06\x50\x1b\x1a\x7d\x49\xb3\xeb\x5b\x5a\xe7\x0a\x72\x4a\x52\xcd\x2f\x79\xc1\xf5\x32\x26\x5f\x27\x16\x2b\xf5\xd9\xe8\x6d\x67\x58\x10\x4a\x53\x20\xbf\x2e\xf3\xa4\x99\x61\x94\x8b\xa8\xb3\xec\x23\x35\x71\x71\xcf\xd1\xcd\x41\xf2\xc3\x8c\xd5\x66\xa1\x8b\x25\xb9\xad\x65\xbc\xec\xfa\x5e\x42\xc0\xf3\x5c\xbe\x26\x0b\xad\x2b\xf5\xfa\xc5\x8b\x56\xb6\x9c\x71\xf9\x22\x97\x99\x7a\x91\x49\x61\x78\x24\xf5\x42\xde\x98\x7b\x9d\xdd\xbe\xb8\x95\xf5\x35\x17\x57\x53\x33\x80\x29\x12\x00\xf5\x02\x94\x05\x2f\x7e\x09\xff\xdb\xc5\x2e\x23\xce\xf9\xe9\x35\x39\x38\x88\x78\x5f\x56\x28\xde\x0c\xd8\x99\x17\xa0\x01\x59\x76\xae\x41\x7f\x8c\xcd\x15\xc7\xb5\x82\xe3\xee\xac\x38\x96\x8b\x4a\x18\xf6\xa5\x94\x05\xa3\xfd\xee\x68\x8f\x51\xdd\xc2\xb6\x4f\xbf\x15\xa2\xce\x65\x7b\x75\xe0\xe1\xb2\xc7\xb3\x92\xf9\x6b\xa2\x9a\xaa\x92\xb5\x56\xad\x54\x6d\x36\xc5\xa4\xfb\x27\xe8\x95\x26\xe4\x47\xff\x10\xdd\xde\x7e\x38\xfc\xf3\x57\xa7\xff\xfe\x97\xc3\xbf\xff\x18\xfe\x16\xc8\xd7\xc1\x0b\x11\xdd\x54\x15\xcb\x66\x42\xe6\xec\x03\xf4\x00\xfe\xb4\xdc\xe9\x49\x96\xc9\x46\x68\xfb\x83\xa6\xba\x51\xb3\x85\x54\xfa\xec\xdc\xff\x59\xc9\x7c\xf5\xaf\x08\x0a\xba\xc3\x7b\x11\xe6\xfa\x9c\xea\x08\x68\x83\xa4\xdb\x91\x56\xfc\x3b\x56\xab\x08\x30\x0f\x2c\x9d\xfd\x62\xbf\x0c\x53\x06\x97\x14\xfe\xf9\xce\x75\xd7\xd0\xde\xdb\x9a\x6b\x0d\x3e\x99\x16\x4d\x41\xce\x27\xee\x48\x23\x23\x78\xf3\x2a\x49\xf1\x1c\x4d\x39\xfc\xac\x0d\x18\x1c\xf4\xde\x8e\xcc\x6b\x7e\xec\x15\xbf\xa6\x2f\x3d\x39\x3f\x23\x37\x38\x1b\x3b\x18\xc8\xe3\x48\x41\xc1\x06\xb1\x88\x51\xc4\xe0\x9d\xaf\xdd\x4e\x4d\xc0\x52\x5a\xc6\x1a\x7a\x10\x33\x29\x36\xdf\x2c\xfa\xac\x9c\x8a\x1b\x53\xb7\x22\x73\x46\x75\x53\x33\x62\x58\x1b\x77\xb7\x0a\xc3\x9f\x47\x30\x52\x4f\xcc\xa7\x42\x3e\xe0\x98\x23\x6b\x5e\xbc\x91\x45\x53\x02\xb1\xfa\x3c\xf9\x5f\xc3\x11\xd8\x63\xe1\x17\x9d\x9c\x98\x43\x7f\x03\xae\x30\xf8\x0e\xa6\x7e\xbf\x01\x6b\x71\x08\x12\xa3\x34\xad\x75\x82\xee\xdd\xfb\xbd\x3b\x2d\x86\x6d\x9e\x12\xc4\x63\xc0\xa4\xee\x5b\xd7\x05\xb5\x05\x91\x90\xc8\x49\x51\x2d\xc0\x50\x79\xe5\xf9\xd4\x8d\x3b\x77\xe2\x3d\xe3\x14\xff\x27\x48\x8e\x05\x2f\xb9\x65\xd6\x5f\xfd\xf6\x4f\x41\x67\x76\x42\x08\x1f\xc1\x12\x45\xef\x84\x4d\xbc\x93\xd9\x06\x0f\xb0\x4d\xde\xf3\xc6\xbd\x17\xef\x92\x97\x4b\x66\xc5\x6f\xf0\xcb\x31\xb5\xb4\xbb\xef\x86\xd6\x4e\x3a\xaf\x9a\xcb\x82\xab\x45\xbc\x69\xff\x6c\xee\x67\xcb\xd4\xa1\x18\x38\x36\xe8\xba\x61\xde\x86\xdb\xd2\x7d\x33\xa6\x95\x9e\x24\x18\xe1\x36\xea\x84\x3b\x10\x54\xad\xba\xfb\x1c\x0c\xb5\x5e\xae\x53\xb3\x5f\x3c\x6a\x3c\x73\x5a\xa8\xed\x0e\xc8\x88\x33\x75\x2d\x6b\xaf\x82\xab\x99\x6e\x6a\xd1\xfa\x32\x9d\xcb\x9c\x64\x35\xc3\xc8\x95\x1d\x30\xcc\x24\x14\x14\x60\x7c\x11\x9f\x54\xc3\x98\x83\x24\xf2\x68\xda\x08\xe9\x23\x92\x7a\x24\x7c\xa8\x59\xec\xc6\xba\xc4\x5e\x98\xa6\xbc\xb7\x07\xca\x63\x31\x99\x25\x75\xf8\x5c\x76\xb7\x40\xa5\x87\xb3\xd9\x21\xf6\x44\xd6\x48\x6e\x51\x0a\x35\xcf\x77\x42\x72\xda\x0b\x6d\xc0\xfc\x7e\xb2\x7e\x17\x8e\xa8\xda\x29\x2b\x0d\xdf\xee\x86\xe5\xd4\xaf\x29\x3c\xc6\x1e\x19\x2f\x07\x0d\xf4\x6e\x2f\xb2\x98\x6b\xcd\x4d\x98\x27\x14\xaf\xd1\xf7\xc9\x03\x15\xe1\xc5\xa3\xac\x39\xf4\xa7\x86\x29\x1d\x23\xb4\x1f\xe1\x67\xb3\xac\x6a\x26\xb6\x8a\x59\xc9\x4a\x59\x2f\xfd\x9f\xac\x5a\xb0\x92\xd5\xb4\x98\x2a\x2d\x6b\x7a\xc5\x26\xbe\x01\xfc\xcc\xff\x85\x1f\x76\xba\xb0\xfe\x35\x5a\x38\x5a\x05\x97\x95\x2d\x9f\x98\xef\x73\xf3\xb8\x65\x26\xcd\x2f\xd7\xc0\xf3\x72\xe8\x8d\x87\xa8\x93\xf3\xa3\x02\x15\x37\x9e\x1e\x35\x69\x2f\x02\xb0\x61\x58\xcd\xe0\xe1\x2e\x4e\x7f\xce\x6f\xb8\x1a\x14\xb9\x74\xe1\x3d\xc0\xc0\x5d\xaa\xd1\x55\xa3\x2d\xfc\xa5\x97\x2a\xee\x2a\xa9\xc0\xba\xe1\xd1\xb7\x3a\xe2\xe4\xab\x18\x2d\x11\xd0\x7e\xcd\x6a\xf1\x9a\xfc\xbf\xa3\xff\xf8\xcd\xbf\xa6\xc7\x7f\x3d\x3a\xfa\xe1\xe5\xf4\xdf\xfe\xfe\x9b\xa3\xff\x98\xc1\x3f\x7e\x7d\xfc\xd7\xe3\x7f\xb9\x3f\x7e\x73\x7c\x7c\x74\xf4\xc3\x57\xef\xff\xf6\xe9\xfc\xf4\xef\xfc\xf8\x5f\x3f\x88\xa6\xbc\xc6\xbf\xfe\x75\xf4\x03\x3b\xfd\x7b\x64\x25\xc7\xc7\x7f\xfd\x55\x54\xf7\xa8\x58\x7e\x13\x41\x35\xb0\x4c\x07\x60\x8a\xb6\x5f\x0d\x75\xb6\xe2\x42\x4f\x65\x3d\xc5\xcf\x5f\x03\x93\x14\x51\x89\x5b\xb6\x21\xfb\xfc\xa3\x3b\xad\x2d\xc5\xf3\x97\xe7\x0e\x36\xf2\x63\x2e\x00\xc5\xb2\x9a\xe9\x6d\x99\x67\xb0\x36\xc7\x0d\xae\xb8\xed\x3d\x77\x49\x78\x1f\x12\xab\x13\x44\x3d\x14\x22\xcc\x57\xd7\x2c\x33\x6b\x19\x26\x4a\x50\x2e\xb5\xef\x5d\xb3\xc8\x58\xda\xd1\x42\x32\x5a\x48\x46\x0b\x49\x57\xca\xbf\xc0\x33\xf4\xcc\xcd\x23\x4c\xdc\x3c\xe4\x25\x90\xe0\xac\xf6\x0e\x70\x8d\x43\x87\x35\xc7\x5c\x6b\x49\x2a\x59\x35\x05\xd5\xf7\xf8\xc0\x24\x78\xaf\xf5\xeb\xb8\x3c\x29\x7b\xf3\x9f\x67\x6f\x4f\x3f\x7c\x3a\x7b\x77\x76\xfa\x71\x46\x4e\x8a\x22\x54\xbb\xdd\xbf\xe3\x5a\x49\x1d\x39\x6b\x42\xd1\x55\x0d\xf4\x73\xb7\x4e\xa1\xd2\xda\x92\xb9\x6a\x15\x75\x88\xd6\x8c\x17\x94\xf5\x00\xe1\xc2\x63\x36\xdf\xdb\xa4\x67\xd8\x7c\xac\xc6\x1a\x4c\x3b\x7a\x02\x2b\xed\x86\x09\xbd\xd4\xf4\x1a\xbc\x97\x32\x96\x33\x91\x3d\x20\xeb\x7d\x87\xf1\x1f\x6e\xce\x2e\x8d\x98\x01\x0e\x86\x48\x51\x48\xde\x54\x05\xcf\xcc\xfa\x78\x8d\x64\x74\xdd\x67\x65\xd9\xe8\x87\x3c\xd1\xb6\xee\x47\x68\x76\x9a\xf5\x55\x09\xdc\x09\xe1\x7e\xf3\xe2\x9e\x8f\x55\xf4\x86\x4a\x70\xc6\xc1\x43\x79\xff\xe2\x47\xb1\x04\x71\x17\xb7\xf7\x45\xe9\xe5\x74\xd6\x6e\xec\xd6\xb8\xda\xbd\xa9\x1f\xac\x65\x07\xee\x34\x71\xf7\x74\xfa\x1d\x3d\xf4\x7e\xde\xe7\xdd\xbc\xc7\x7b\x79\xf8\x9d\xfc\x74\xf7\x71\xd2\x5d\x1c\x7f\x0f\xc7\xdf\xc1\x09\x1e\x0a\xa9\xf7\x6e\xfc\x9d\x3b\x54\x12\xaa\x6a\x36\xe7\x77\xdb\x74\x8c\xfd\xc6\x29\x31\x34\xbb\xd3\xd6\x1d\xbf\x62\xc2\x07\x6f\x39\xbd\x21\xf8\xdd\x7f\x76\x7e\xc4\x28\x8f\xa4\x13\xd2\x8b\x4d\xf2\xce\x48\x45\x47\x2a\xda\x29\x23\x15\xed\x95\x62\x9e\x13\x09\x15\x32\xef\x05\x81\x8a\x3d\x4d\x1f\x82\xba\x56\xb0\x61\xd0\x08\xe5\x06\x0e\xa6\x4e\xe7\x19\x5d\x49\xd8\xd1\x73\xae\xdb\x00\xbf\xfb\x37\xda\xc5\x86\x1a\x21\x72\xcf\x7e\x79\xa8\x1c\xc6\xd9\x4a\xfd\x2b\xe9\x76\x30\x94\xea\xe1\xb6\x12\xb7\x32\xf2\xa8\x0d\x62\xc1\xbd\xa0\x4a\xf1\x2b\x31\xad\x64\x3e\x35\xad\xbc\x78\x90\x9f\xdf\x67\x34\x95\x57\x69\x3f\x76\xb9\x3f\x7a\x83\x4f\x20\x38\x18\xb2\xd6\x68\x16\x58\x83\xbc\x9d\xc0\x41\x6c\x45\x08\xa6\xbd\x62\xd0\x23\x17\xa7\xa4\x82\x5e\xb1\xa9\xed\xec\xd4\x77\x76\xea\xfb\xf6\x88\xf5\x8a\xb9\xcc\xb2\x82\xf2\x87\xe3\x95\x53\xae\xb0\x37\x50\x9b\xcd\x5b\xe4\x03\xca\x57\xb2\x87\x38\x79\x95\x0b\x74\x55\x74\x3f\xe1\xc7\x0f\xdb\xe0\xe1\xb0\x78\x00\xc8\x0d\x0b\xf9\xe0\xd7\xc1\x1d\x99\x03\x1f\xa5\xf0\x00\x3e\x7c\x11\xbd\x5d\x0a\x5a\xf2\xcc\xed\xb2\x93\x02\x82\x83\xb9\x14\x1d\xb7\x97\xf8\xa6\xb9\x22\xdc\x6f\x2b\x72\xa6\x49\x46\x05\x5a\x2e\xad\x1b\x84\x21\x18\xa1\xf7\xc3\x03\xd3\x11\x15\x9c\x1e\x11\x92\xde\x59\xe4\x8f\xe1\x82\x84\x71\x35\x52\x30\xc2\x84\xae\x01\xa9\xf7\x5c\xe6\xe6\x6a\x99\x75\xde\xee\x71\xe9\x89\xe6\xc3\x62\xf5\xf2\x3d\xc1\x7d\xe4\xf9\xb0\x74\xc1\x05\x11\x72\xee\x9d\x29\xad\x64\x3e\xdb\x70\x24\xe2\x53\x30\x9d\xcb\xdc\xc6\xb0\xeb\xce\x7e\x33\xa7\x05\xb6\x5a\x49\xaf\x5d\x64\xb9\x37\x2a\xd1\x1b\xca\x8b\x88\xe0\x27\x02\x90\xa9\x8a\xe7\x8c\xd0\x18\xda\xe9\x3b\x16\xcf\x0e\x59\x13\xf9\x2e\x16\xe1\x23\x56\xed\x80\xc2\x60\xfe\xb3\x85\x54\x4c\xc0\x79\xa3\xae\x6d\x9f\xe8\xd0\x6d\xfb\x1c\x69\x64\x0c\xcb\x79\x36\x47\x36\x77\x42\xd8\x0d\xab\x97\x1a\xd2\x8d\xf9\x18\x19\xa8\xc6\xb4\x5f\xd2\x3c\x98\xf5\x09\x91\x86\x2f\xbb\xe5\x51\x4e\x3c\x40\x27\xb0\x7f\xaa\x29\xb4\xe7\xb5\x6d\xef\xb7\xb6\x1a\xeb\x01\xf8\x86\x8b\xbb\xee\x45\x1b\xee\x3d\x90\xf7\x45\xf6\x97\xb4\xba\xf7\x2b\xf4\xba\xd8\xd6\x25\xf5\x35\x7a\x85\xe0\x27\x97\xd6\xf8\x5e\xd2\x3b\x5e\x36\x25\xa1\xe8\x77\x23\xe7\x1b\x18\x88\x28\xb0\x83\x6d\xb0\x03\x1b\xd8\x00\x75\x1f\x1f\x40\xe2\xc9\x6a\x3a\x24\xcf\x33\x75\x1b\x88\x72\x17\x48\x73\x13\x48\x70\x0f\x18\xec\x16\xe0\x1c\x80\xb6\xb5\x91\x2d\x49\x5b\xdb\xca\x5c\xf4\x6e\x65\x77\xbf\x3e\xbc\x97\xcf\xe6\x6d\x1b\x5c\x11\x59\x72\xad\xad\x9f\x4d\x70\x03\x4c\x08\xd7\x1d\xa7\x14\x7b\xc0\xf8\x1c\x2f\x1a\xae\x08\xbb\xab\x0a\x9e\x71\xf0\x6d\x72\xfe\x97\x0f\x33\x7a\x9e\x26\x5a\xa8\x2d\x5e\x56\x08\xb6\x05\x07\x65\xea\x78\x48\x1b\xb6\xea\x7b\x69\xe3\xac\xd9\x5d\xc6\x58\x6e\x3b\x32\x9e\xd7\xf1\xbc\x26\x9f\x57\xb5\x25\x55\x44\xa8\x86\x68\x71\x7f\xbc\x3a\xc2\x1c\x25\xc0\xe4\x41\xc5\x80\xdb\x5d\x0f\x1d\xcc\x53\x87\x0a\xff\x91\x81\x79\xef\x82\x69\x65\x11\x86\xa0\xa6\x87\xf4\x6a\x6b\x28\xd3\x1e\x49\xde\xc1\x75\x51\x50\x1c\x06\x6f\xb4\xf8\x2c\x0f\x48\xc9\x7a\x95\xbd\x05\x5d\x07\x2b\xab\x82\xea\x56\x13\xf2\x08\x20\x97\x18\x26\x3e\x05\x88\xf9\x69\xa1\x97\x77\x23\xb6\xf5\xb2\xc1\x4f\x08\xa1\x3c\x14\x34\x79\x07\x02\x63\xbf\x13\x57\x24\xf8\x71\xbc\x60\x19\xe5\xe5\xb5\x6b\x48\xe3\x04\x31\x2c\x1e\xb6\x38\x5d\x0e\xdb\x31\x34\xf1\xae\xc0\x88\x13\x66\x2f\x16\x70\x38\x7d\xee\xf6\x04\x2a\xbc\x77\x18\xe1\x7d\x02\x07\x27\x41\x05\xa7\x80\x3f\x46\x03\x3f\x0e\xf7\xca\x4d\x01\x7c\x1c\xf8\x61\x24\xac\x6f\xca\xde\xdd\x33\x74\xef\x9e\xc1\x7a\x9f\x02\x9e\x77\x67\xf2\x43\xc4\xd6\x4c\xb7\xec\x69\x59\xd8\xbc\x44\x71\x96\x9e\x4f\xed\xfb\x30\x1d\xad\x13\x78\x50\xd3\x7e\xdc\xd2\x1e\xdc\xd9\x9f\x1c\x9f\x6b\xa8\x53\xdb\x69\xd8\xe3\x5a\xd3\x6c\x61\x41\x76\xf1\x17\xb3\x13\xc4\x92\x98\x4d\xa0\xf1\x26\xb7\x38\x9f\x0f\xad\xf3\x82\x11\x5d\xf3\xaa\x60\xe4\xcf\xfe\x40\x4c\xd0\xb6\xff\x97\x00\xea\xcc\x81\xa2\xb6\x9b\xf1\xcf\xee\x5f\x7f\x79\x24\xc2\x5e\x1c\x93\x83\x5d\xda\x26\xaf\x7a\x0a\x35\x12\x2e\x72\xf0\x60\x44\x56\x08\x27\x0f\x1b\x33\x53\x0b\xe3\x9e\x59\x74\x52\x84\xfa\xb5\x26\x58\x70\x75\x6c\x5f\xee\x65\x1d\xc0\xc3\xb3\x55\x4d\x78\x0f\x07\x7f\x86\x19\xf9\x20\x2f\xac\xd9\x76\x42\xce\x41\x3b\xdc\x3e\x81\x33\xff\x41\x9e\xde\xb1\xac\xd1\x3d\x4e\x37\x91\xe4\xbf\x97\x67\x4c\x9b\xcf\xaf\x5a\x86\x12\x27\xa6\xc3\x50\xb6\x07\x2b\x64\x29\x1f\x9c\xd8\x6b\xb6\xec\x9d\x55\xcb\x24\x58\x66\xd6\xaa\xc6\xfd\x1e\x75\x97\x3c\xf2\x0d\xff\xcb\x99\xf2\xca\x4b\x2e\xb0\x2b\xd8\xb0\x5b\x67\x68\xdb\xad\x87\x91\x40\x8a\x22\xa2\x13\x91\xb3\x1d\xc7\xf1\xa6\x3a\x6f\xc5\x73\xba\xfe\xbe\xe8\x9b\xd2\x4d\xfc\x2d\x4e\xe0\x84\x9c\xfe\xd4\xd0\x62\x42\xbe\xd6\x78\x07\xfd\x4d\xcf\x3a\x18\x74\xf0\x73\x2f\x9a\x9e\xf5\x6f\x5e\xbd\x40\x6f\x79\x91\x67\xb4\xb6\x41\x76\x40\x87\x88\x92\xd6\x1e\x0b\x64\x30\xeb\xf5\x64\x77\x94\xb0\xdd\x45\x0a\x9d\x7a\x2b\x5a\x6b\x9e\x35\x05\xad\x89\x39\xec\x57\xb2\xee\x8d\x50\xf9\x5a\xdb\x31\x92\x8a\xd5\x73\x59\x97\x44\x34\x25\xab\x79\x86\xfe\x4c\x35\x57\xe6\xfa\x38\xaa\x1d\xd0\x46\x07\x5b\xe3\x93\x69\xbb\xa5\xd8\x6f\xfc\x17\x6e\xc9\xd4\xf1\x56\x76\x55\x7b\xac\x2e\x58\x26\x45\xbe\x55\x69\xfe\xd3\x6a\xe5\xab\x6e\xd3\x15\xab\xb9\x44\xd0\x22\x5e\xb2\xd5\x73\x7e\xd4\xf1\x84\xe9\x13\x08\xe7\x8e\xea\x7a\x22\x37\x09\x55\xb4\x5d\xe3\x36\xe6\xf2\x3b\x0e\x6e\x3e\x4f\x76\x66\xe4\xcb\xa5\xd3\x15\xf7\x49\x06\x5c\x3b\x60\x03\xc5\xb4\x03\xa6\x74\x34\xc1\xee\xa4\x96\x9e\xcd\x65\x0d\x80\x8f\x47\xb9\xc4\x80\xfe\x1b\x9e\xe9\xe3\x19\xf9\xff\xb3\x5a\x46\x20\x7a\x0a\x76\x85\x41\xe5\x96\xc2\x78\xc5\x58\xcd\xa8\x0d\x17\x78\x49\x8e\xa0\x52\xc2\xcb\x92\xe5\x9c\x6a\x56\x2c\x8f\x51\x4f\xc6\x88\x5a\x2a\xcd\x7a\x8c\x84\xf1\xfa\x4d\x8c\x01\x85\x77\xff\xf0\xc5\x03\x6f\xee\x00\x89\xd5\xa2\x3d\xb6\x13\x8b\x2e\x7b\x2b\xbb\xc7\x63\x94\xf7\x2a\x1e\xee\x15\x14\xc3\xb8\x88\x16\x25\xde\x5d\x12\x7e\x6f\xfd\xc3\x6c\x50\x4a\x6a\x76\x05\xf4\x01\xcf\xdc\x23\x4f\x27\x06\x09\xbf\x97\x8d\xb8\xdf\x18\xd3\x99\xb7\xaf\xad\x2e\xf0\xbb\xe0\xc3\x54\x8c\xe6\xed\x72\xa6\x41\x4f\x02\xf3\x0f\x45\xd8\x00\x60\x05\x0d\x61\xc5\xb7\xda\x68\x9a\x08\xab\xfd\x16\x71\x97\xa1\x2f\x3d\x40\x5e\x5b\x41\x67\xbe\xe4\x22\x87\xa9\x40\x7f\xe9\xad\x92\xd9\xd5\xba\xbd\x5a\xce\xb9\x4c\x7b\x21\x0b\x5e\xb5\xb8\x0d\xd2\xbe\x6c\x44\xcf\xaa\x2a\xc0\xfb\xb2\xef\x7a\xf4\x4b\x07\xe4\xd4\xc2\x40\x40\x72\xd7\xee\xfe\x22\x27\xeb\xcc\xa9\x90\xec\x8e\x65\x7d\x14\x55\xc8\x9c\xdd\x20\x73\x20\xa4\x6a\x38\xe6\x5b\x55\xe0\x8b\x4b\xbe\xe6\xa2\xb9\x5b\xe9\xbe\x79\x73\x41\x6f\x4c\xfd\xee\x02\xe8\xcd\x2e\xfb\x3d\x17\xb9\xbc\x55\xd0\x58\x2f\x87\xd8\x75\x8b\x02\x5a\xef\xb0\x0f\xd0\x73\x98\x97\xf4\xca\x61\x62\xc4\xd5\x66\xb5\x63\x80\x56\x64\x11\x44\x2d\xf8\x02\x30\x02\x80\xa8\xe5\x04\x27\x3c\x1f\x5f\xae\x2e\x71\xd7\xaf\xeb\xa1\x16\x63\x15\x44\x51\xca\xa1\x61\x16\xad\x40\xb7\xa3\xd8\x43\xea\x00\x7f\x1c\x13\x8e\xc7\xf9\x0a\x9e\x4b\x00\x92\xed\x92\x3c\x07\x98\x25\x2d\x19\x87\xb6\xfa\xcc\xcb\x91\xe3\xc5\x7e\x5b\xcc\xd7\x5e\xf4\xbe\xb4\xd3\xbd\x5a\x37\xc9\x99\x66\x75\xc9\x05\x53\x64\x21\x6f\xf1\x77\x3c\x62\x01\xea\xac\x77\xe9\x59\x48\xd5\x67\xf9\xe8\x20\xd4\xfa\xcc\x38\xe0\x89\x7d\x4b\x97\x84\xd6\xb2\x11\xbd\x38\x1f\x20\x9e\x7a\x4e\xe8\xfd\x4a\xa7\x3f\x48\xc1\xbc\x97\x57\xd2\x81\xbb\x64\x9a\x9a\x0b\xec\xd5\xec\xd5\xcb\xa8\x3e\x7c\x64\x59\x53\x2b\x7e\xc3\x3e\x32\x9a\x7f\x23\x8a\x65\x80\xb3\x74\x36\x3f\x97\x4a\xf1\x4b\x84\xb7\x32\x02\x07\x82\xd7\xad\x77\xd8\x8b\x7e\xd0\x73\x59\x93\x46\x78\xd9\xbb\xa7\x17\x96\x6d\x0d\xdd\x0d\x4c\x25\xdb\xe1\xd7\x13\x51\xfe\x61\x2e\x57\x0c\x9f\x2e\x7c\xc3\xdd\xbd\x5b\xe9\x57\x6d\x27\x7b\x9b\x3b\xff\x3d\x9e\x50\xa8\x7b\x0a\x4a\x49\x3e\x07\x73\xf8\x04\x1f\xdd\xd6\x5c\xb3\x80\x0f\x3b\x42\x18\xad\xee\x62\xf5\x4c\x7b\x17\x03\x1d\x2a\x88\x99\x8f\xfe\x00\x83\x7a\x75\x1b\x6e\x73\x66\xd6\xf7\x78\x9b\xa9\xcb\x05\x51\xb4\xb3\x66\x29\x44\x4b\xfa\x16\x54\xe4\x45\xef\x3e\xf6\x23\x28\x96\xbd\xf0\x66\xe0\x86\xd3\x1e\x37\x98\xc7\x49\x28\x74\x2d\xa8\xb9\x3b\x41\x36\x02\x83\x88\x61\x43\xec\x09\x0b\x16\x2b\xb5\x1d\xdc\x0c\x48\xb2\x42\xa2\x61\x8f\xfb\x5b\xae\xec\xf1\x06\x15\x24\xf0\x0d\xf6\x0e\x2f\x69\x6f\x6a\xa4\x60\xfc\xed\x64\xce\xac\xb8\xb0\xa1\xb5\x96\xb8\xac\xb4\x37\xb4\xad\x89\xd9\xef\x28\x62\xb6\x2c\x87\x15\xe6\x5a\x82\x5d\x1b\x96\xac\x64\x6d\xc7\x7a\x9a\x5a\xed\xb6\x27\x81\x6b\x7d\xde\xdc\x2b\xdf\xa9\x9e\x76\xfa\xbb\xdc\x95\xcf\x51\x53\xdd\xc1\xdb\xd3\x14\xe3\xe0\x23\x92\x5d\xac\xa0\xdd\x5d\x31\x01\xd2\x37\xa8\xb7\x9d\x86\xd6\x3a\xa5\x52\x25\x45\xcc\x46\xeb\x59\x64\x43\x67\xfa\xaf\x0f\xfc\xac\xa7\x31\xb8\x63\x8e\x64\xbd\x72\x1a\x9c\x42\x61\xc3\x4d\x92\xda\x7b\xb8\x98\xdb\x7a\x71\x53\x05\x8a\x03\x33\x81\xad\x32\x4d\xce\xfd\xd1\xd9\x4e\x14\x65\x73\x99\xc8\xd4\xf5\x52\xc0\x55\xae\x6f\x03\x8a\x5f\xb8\xe5\x0e\xd5\x40\x06\x70\x35\x47\x06\x39\xc2\x7a\x0e\x15\xa9\xa5\xd4\xdb\xb9\xd4\xed\xfc\x9c\xde\x55\x5b\xd5\xee\x9e\xda\xac\x22\x31\x90\x87\x5b\x9a\xac\x2f\x99\x91\xc5\x14\x51\xbc\xe4\x05\xad\x0b\xc8\xc4\x70\x81\xc3\x83\xd8\xce\x8d\x20\x9b\x11\x39\x75\x02\x53\x52\xd8\xcf\xa0\xba\x5d\xae\x23\x71\x63\x30\x4b\x04\xf7\x8d\x1b\x93\xe9\x63\xd9\xe8\x86\x16\xc5\x92\xb0\xbb\xac\x68\x0c\xbd\xdc\x8a\xf2\x67\x88\xde\x67\x55\xe5\x53\xd9\x08\x98\x3d\x2a\x7c\xba\xb6\x04\xc3\xaf\xe6\xad\xa6\xc0\x2a\xe2\xad\x71\x11\xc2\x89\x68\x96\x31\xa5\x1c\x38\xc8\x32\x04\x38\xf1\x63\xf8\x5c\x72\x70\xd1\x5b\x75\x5a\x50\xa5\x79\xf6\x65\x21\xb3\xeb\x0b\x2d\xeb\xad\xea\x3e\x37\xd5\xbf\x92\xd9\xec\xe4\xfb\x0b\x43\xbc\xaf\x03\x44\x36\xeb\xe1\x1c\x5a\x7c\x69\x4f\x43\x46\x78\x2f\x98\x3e\x54\x20\x3f\x92\x92\x66\x0b\xcc\xaf\x97\x23\xb4\xaf\xc3\xfc\xb3\x9a\x9f\x07\x97\x08\xcb\x5b\xd3\x4b\xc8\x58\xf9\xda\xf4\x71\x7d\x18\xe8\xc8\x69\xdf\x41\xd8\x1c\xd4\xc8\xa2\xbe\xc3\x46\xa8\x72\x31\xd5\x35\xeb\x63\xa7\x36\xce\x13\xc4\x7a\xdb\xa4\x53\xbc\x46\x17\x52\xdb\x7f\x76\xa9\x66\x99\xe2\x33\x7a\xab\x66\x99\x2c\xc9\x9b\x8b\x33\x92\xd7\xfc\xa6\x3f\x76\x28\xd1\x37\xdb\xa2\x69\xbe\xb0\x27\xfc\x97\xf4\x56\x31\xec\xe8\xa5\xe9\x28\xe4\x46\x8c\xa0\x1d\x5b\xf5\x36\xc4\xbe\x9c\xbd\x7d\xf0\xc5\x78\x4f\xc2\xb9\xfa\x64\xfa\xd8\xf3\xd6\x10\xdf\x32\xac\xd9\x69\x37\xe7\xbc\x60\x68\xd2\xc0\x95\xed\x62\xd3\xc2\xa6\x5f\xca\x86\xdc\x52\xb4\x0e\xc2\x05\x16\x85\x52\xc0\xab\xd7\xe4\x54\xa8\xa6\x66\xad\xf5\x79\xb5\xb1\x4d\x2c\x39\x9c\x14\xbb\x65\xc5\x55\x94\xb9\x05\xcb\xe9\x1d\x2d\xab\x82\xa9\xd7\xe4\x80\xdd\xe9\x2f\x0e\x26\xe4\xe0\x6e\xae\xcc\xff\x84\x9e\xab\x83\x19\x39\x2b\x7d\x6c\x02\x17\x73\x56\xd7\x1e\xd8\x00\x3f\x30\x2c\x79\x47\x8a\xea\x6f\x73\xdf\xfb\x96\xa4\x79\x95\x81\xb9\xb5\x5f\x93\x46\x06\xed\x23\x5f\xb9\xdb\x4a\xc1\x03\xb1\x9d\x4d\x74\x36\x77\xa1\x28\x28\x57\x59\x16\x1e\x1a\xb4\xd5\x98\x6d\x63\xdb\x31\x37\x4f\xda\x46\x79\xe7\x71\x64\xc9\x8b\x9c\xdd\xbc\x50\x39\x7d\x35\x81\xae\x2a\x8b\xa5\xd0\x1d\x17\x55\xe4\x20\x2e\xab\xc7\x85\xe3\xdc\x26\xe1\x4c\xb4\x35\x19\x42\xec\x9a\x04\x87\xb2\x97\x07\x20\xba\x98\xb6\x33\x2a\x48\xc1\xe8\x8d\x15\xe7\x90\x64\x2c\xd1\x60\xd6\xcb\x61\xa5\x18\x1f\x49\xd7\x00\xf9\xbb\xdf\xf6\x8a\xd7\x31\x3a\x18\x32\x68\x37\xb9\xba\x9d\x15\xb2\x6e\x2c\x48\xda\x5c\xd6\x99\x97\x39\xad\x96\x86\x69\xa0\x0d\x5c\x74\xec\x74\xcf\xfb\xc0\xc6\x61\x00\xba\x5b\x64\x27\x4e\xc5\xb6\x6e\xd0\x20\x0b\xfe\x53\xc3\xc8\xd9\x5b\x9f\xea\x88\xd5\x8a\x2b\x6d\x04\x8a\xbc\xc3\xf7\x70\x64\x86\x8e\x4e\x4a\xfa\x4f\x29\xc8\xe9\x97\x17\xb6\xa2\x88\xad\xf8\xac\x09\x24\xfd\x67\x53\x33\xc3\xe3\x6d\x95\xb5\x74\x95\xae\xf2\x93\xe6\x39\x26\xcc\x83\x5f\xad\xf5\x4d\xb4\x57\x9e\x61\x0a\x03\xbb\xe2\x40\x96\xd0\x37\x9f\xc4\x07\x06\xdd\x36\x93\xd7\x37\xc6\x8d\xcc\x9f\xd9\x35\xc8\xfd\x99\xba\x92\xf8\xbf\x1d\x70\x63\xa6\x37\x11\x79\x67\xf0\xc5\x6f\x3f\x9e\x6d\x89\x6b\xcb\x80\xc3\xbf\x7a\x2f\xf3\x54\xd6\xed\x30\xf8\xd4\x5d\xa8\xff\xdb\xec\x8b\x37\xf8\x9c\x94\xa6\x4e\x50\x5c\x4d\x40\x79\x4b\xbe\x01\xdd\x26\xfc\xf3\xfb\x9a\x6b\x36\xeb\x87\x8a\x4e\x60\x1d\xdc\x04\x26\x0e\xc3\x7d\xe6\x86\x10\x82\x5c\xe5\x66\xf7\x03\x71\xb1\xfc\xc1\x65\x21\x2f\x89\x3d\xf2\xdb\xee\xfb\xb7\x1f\xcf\x06\x74\xfd\xdb\x8f\x67\xae\xe7\xe6\x9f\x72\xbe\xbf\x4e\xef\x83\xe1\x7f\xb7\xc2\x7f\xa7\xf0\x62\x2d\xc6\xf4\x2a\x17\xbf\x4d\x16\x7e\xb6\x37\xe6\x7d\x18\x76\x97\x69\xab\x4f\xe8\xe7\x22\x02\x65\xbc\x7b\xf8\xcd\x37\x84\xdd\x55\x48\x51\x03\x77\x8f\x8b\x05\x05\x60\x78\x87\x41\x8b\xdb\xcf\xec\x47\x65\xae\x6c\xb7\x11\x09\xc5\xf4\x7f\xe6\x36\x40\x2d\x7d\xfe\xda\x45\x58\xf8\x2f\x36\x7f\xf0\x1e\x22\x9b\xf3\xd7\x78\x07\x10\x0c\x74\xce\x83\x7d\x7f\x84\xe6\x0a\xe1\x7f\xb2\x80\x16\x08\x23\xa7\x98\x3e\x9e\x75\x74\xeb\x0a\xba\xbc\x55\x62\xb4\x17\xc6\x73\xcd\x82\x49\x8e\xcc\x6f\x2f\xc0\x3e\x7a\x3c\x6b\x2d\x66\x00\xbb\xd2\xf2\xa6\x11\x6d\x98\x43\xf1\xf1\xd1\xdc\x6b\x1a\x96\x74\x74\xd6\x20\x58\x77\x43\x19\xb6\xce\x07\x99\x4a\x37\xf2\x41\xf0\xc3\x85\x4d\xab\xbe\x4b\x56\x08\x1a\x1a\xc0\x0a\xc1\x77\x83\x59\x21\x48\xdc\xf3\x6c\x58\x21\x04\xdf\x8c\x62\x86\xe0\xe8\xf6\xbe\x19\xcf\x0e\xed\xe5\xdc\xe6\x3f\xa7\x73\xdb\x2e\x56\xe2\x9c\xb5\x1f\x3a\x06\xc6\x23\x4f\xb9\xac\x11\x9d\x48\x6f\x3c\x88\x17\xf6\x36\xb0\xd9\x63\x91\x5d\x33\xc7\xef\xab\x88\x04\x18\x09\x04\xdc\x6f\xac\xd4\x51\xb9\xef\xdc\xa0\xf0\x92\x82\xc7\x24\x2a\xaf\x64\x64\x27\x33\x56\x2d\xe6\x5b\x75\x27\x35\x35\xbe\xbb\xe8\x9a\x71\xde\xb0\x6a\x41\xde\x5d\x6c\x20\x79\xb0\x38\x30\x2c\x85\xc6\x9d\x43\x45\x0a\x3e\x67\xe0\x93\x90\x40\xf5\xde\x60\xab\x1d\x92\xe7\x9d\xd1\x1c\x89\xc3\xc1\x7a\x15\xac\x90\xa4\x90\xe2\xca\x30\x07\x71\xe9\xa8\x76\x40\xa4\x4a\x29\xb8\x96\xf5\xc3\xde\x10\xf1\x84\xc7\x55\xb7\x0b\xc2\xe3\xea\x36\x53\xd7\x66\xee\x79\x1f\x3c\xa5\x24\x93\x45\xc1\x32\x6d\xf3\x08\xc3\xb2\x47\x8d\x10\xcb\x06\xa5\x09\xb3\x3a\xcb\xd9\xf5\x9f\x40\x6d\x62\x15\x24\x2f\x70\x29\x5f\x7c\x3c\x3d\x79\xfb\xfe\x74\x56\xe6\xbf\x5c\xc8\xdb\xa9\x96\xd3\x46\xb1\x29\xef\xcf\x8a\xf3\x19\x87\x3d\x93\xe8\x44\x87\x5d\x56\xbb\xb2\x09\x9c\x1d\xe2\xf6\x6b\xf2\xad\x42\xef\x0d\xef\xb9\xc3\x72\xb0\x66\x4f\x48\x4d\x2d\x90\x2e\xc5\xa3\x3a\x6f\x8a\x02\x57\xd3\x9c\xa3\x49\xa8\x8f\x7e\xf1\xf9\x31\xbc\x9d\x49\x78\xf6\xdc\xef\xfe\x8f\x45\xca\x8d\xdd\xcf\x3f\x93\x41\x8b\xd5\xd6\xde\x5d\xae\x8b\xce\x73\xed\x12\x72\x6a\x09\x31\x98\x80\x96\x60\x18\xdb\x6f\x15\xab\xbb\xdb\x94\xe9\x0c\x66\xe7\x45\xa3\x58\x3d\xc3\xea\x9f\xe1\xdc\xc7\x71\x15\x71\xb0\xf2\xe4\x11\x33\xff\x91\xcd\x37\x4d\xbc\x7d\xec\x3d\x6e\x1c\xe7\x4f\x1b\xbd\x60\x42\x73\x0b\x1b\x6b\x39\xaf\x8d\x2b\x81\x88\x17\xcf\x70\xea\x23\x13\xaa\xa5\xa5\x3f\x1b\x53\x86\xb5\x65\x4c\x19\xf6\x3c\x52\x86\x3d\x26\x0f\xa2\xa1\x9e\xbb\xa0\x3a\xa6\x5e\x40\x60\x0c\xb9\x13\x8f\x29\x57\xd3\x5c\x2a\x7c\xc7\xcc\x61\x87\x9e\xd0\xbc\xe4\x31\xf9\xa4\x9f\x1d\x25\xcf\xb8\xc8\xfb\x26\x33\x51\xf4\x82\x1a\xbb\xa2\x97\x7d\x66\x0d\xf1\xde\x89\x8b\x3a\x2d\x13\x42\xf4\x5b\x87\xad\xae\xbf\x56\x92\xfc\x85\xcd\xa4\xa9\x9c\x6c\xdf\x06\xeb\x9b\xf0\x7b\xd0\x38\xc9\x8a\x19\x42\x92\x5d\xcf\x64\x7d\xf5\x38\x07\xac\xd5\x5d\x51\x2e\xd5\x4f\xc5\x14\xdb\x9a\x56\x79\xbb\x2d\xf6\x2d\x2b\xfe\x4c\x3c\xad\x9e\x9f\xf1\xe5\x59\xf8\x4f\x6d\x67\xdb\x91\x67\x28\x6f\x3d\x7b\x45\xe5\x5e\xd6\x23\x45\xaa\xda\x07\x6b\xdf\xde\xb4\x95\xe4\x36\xda\xdf\x67\x26\x46\xba\x15\x26\xe7\xaf\x68\x4d\x4b\x06\x49\xb2\x1a\xeb\xba\x9b\x49\x21\x62\x38\x66\x08\x11\xfd\xa6\x62\xe2\x02\x08\xf4\xc8\x8e\x6f\x2e\x23\x3b\xfe\x40\x19\xd9\xf1\x8d\x65\x2f\x6e\x73\xee\xbc\xf3\xdc\x88\xf8\xd6\x39\xb4\x8d\xc9\xb0\x5c\xd8\xf3\xa0\xb2\xfd\x5c\xb7\x4b\xaf\x98\xc0\x78\xfb\x6f\x56\x58\xeb\x36\xdd\x29\x5a\x31\x20\xda\xc9\xa7\x0c\x0e\x40\x2e\xb6\xc3\x29\xc6\x93\x3a\xbb\xfd\x06\xb8\x63\x45\xed\x8c\xa0\xfa\xee\x4d\x52\x9a\x27\x97\x5c\xb7\x77\x84\x62\x80\x5f\x55\x72\x0b\x3c\x2d\x05\xc9\x6c\xdc\x20\x70\x74\x86\x7b\xb3\xd5\x25\xf1\x83\x82\xc8\x4c\x53\x0b\x97\x46\x2e\x99\xbe\x65\x4c\x90\x97\x2f\x5f\xbe\x04\xd1\xe6\xe5\x1f\xff\xf8\x47\x02\x20\xfe\x39\xcb\x78\xb9\xfe\x22\xbc\xf5\xfb\x57\xaf\x62\x1a\xfd\xf7\x93\xf7\x5f\x43\x9c\x51\xa5\x15\xb9\x94\x7a\x61\xdb\x36\x55\x74\xaa\x57\x13\xf2\x7f\x2e\xbe\xf9\xd0\x42\x71\x74\x7f\x05\xf9\xc7\x4f\x51\x4c\xcb\xa1\x72\xfa\xe5\x1f\xbe\xf8\x22\xea\x1b\x10\x92\x64\x0d\xc1\xdc\x6d\xd0\x5e\xe5\xc2\xcd\x84\xd4\xeb\x18\xe8\x96\x75\x8a\x4e\xc3\x58\xf2\xab\x05\x2c\x84\x39\xff\x52\xcc\x0b\x9e\x69\xbc\x24\x10\xf8\xc1\xa3\xc3\x00\x7a\x9a\x85\x33\xb4\xb2\x40\x94\xa9\x29\x67\x13\x52\xf0\x6b\x46\xe6\xea\x6f\xb5\x6c\xaa\x16\x74\xd4\xa6\x85\xc9\xa8\x30\xed\x63\x73\xed\xbe\x53\x2c\x1a\xea\x78\x17\x9e\xe2\x76\x2b\x7f\xbb\x23\x2d\x49\x50\x7d\x57\x3b\xfb\x69\xc1\x88\xbc\x15\xac\x26\xdf\xb6\xae\xcd\x8f\x39\x68\x9f\xda\xa8\x03\x68\xcd\xf3\x25\xe0\x14\xd5\x58\xcb\x11\x35\xfc\x7c\x61\x38\x91\x36\xc3\x38\xd7\xac\x9c\x16\xec\x86\x15\xa8\xb0\x69\x53\x34\x89\xa8\xc5\x21\xe4\xe8\xa4\xa8\x16\xf4\x38\x64\x88\xfc\x89\x32\x2d\x9c\xc0\xcd\x08\xbe\x9f\xc8\xe7\x9b\x1e\xbe\x33\xef\xad\xa0\xe0\x59\xce\x46\x44\x84\x22\x93\xc7\x6c\x8b\x07\x11\xcc\x48\xbc\x09\x31\x7d\x43\x40\xc5\x2b\xf2\xe7\x04\x93\xe5\x5e\xb3\xe5\x14\x89\x5e\x45\xb9\x8f\x86\x04\x4f\x6c\x9c\xd3\x2e\x9b\x9a\x45\x25\xf6\x6f\x93\x13\xbb\x50\xf9\xaa\x96\xff\x40\x5a\xe2\x81\x9c\x9c\xae\x49\x59\xb1\xdd\x62\x0f\x8b\xd6\x9d\x21\xa2\x25\x87\xa1\x6f\x44\x10\x8b\xde\xdf\x42\x48\x92\xb3\x79\x18\x8f\xee\xd0\xaa\x18\xa6\xc8\x77\x7d\x8b\x68\x65\x43\xef\x7d\xbd\x40\x32\x15\x12\x9e\x46\xac\xd5\x8f\x28\x03\x51\x6d\x00\xc7\x00\x9d\xa6\x0e\x2a\xb4\x6d\x05\x23\xa8\x6d\x90\xbd\x7d\xd7\xad\x96\x9f\xee\x68\x8c\x71\x1b\x78\xcd\x74\x63\x97\x08\x81\x0d\x1a\x51\x30\xa5\x6c\xe0\x7e\x49\xeb\x6b\x96\xfb\x6b\x7b\x06\xd1\xf0\x2a\x12\x28\x91\xb8\x5c\x07\xfc\x06\x3d\x66\x4a\xba\x84\xae\x5b\x59\x11\xba\x71\x38\x9b\x1d\xe2\x8d\x23\x6b\xc4\x61\xc0\xcb\xc1\x3c\x7f\x22\x4c\xf2\xce\xd9\x82\xb4\xfa\xd4\xe1\xca\x03\x50\xac\x04\x94\xce\x36\xd0\x9d\xda\xb9\x8c\x21\x58\x49\x02\x6b\xbc\xc6\x0f\x4b\x4c\x3e\x07\xf7\x66\xf5\x30\x14\x9d\x2b\x69\x32\x73\x64\x76\x07\x2c\xf7\xe5\x78\xb0\x73\x6c\xcf\x5b\xac\xd4\x97\x2c\x77\x95\x51\x1c\xef\x86\xae\x46\x4b\xf8\xd8\x46\xf7\xf6\x8d\x62\x7b\x2d\xa2\x46\x7f\xc6\xf2\xb6\x3c\x09\xb7\x8b\xe5\xe9\x78\x5e\x2c\x67\xf3\x55\xd0\x91\x80\xbc\x85\xf2\x87\xbb\x87\x62\xa0\xc1\xda\xb2\x0f\x26\x16\xcb\x8e\x59\x59\x2c\x69\x9c\x0b\x96\x14\xb6\x16\x4b\x9c\xd7\x11\x96\xa1\x87\xcb\x79\x29\xe1\xf4\xd8\x6b\x06\x6f\x92\xb9\x9f\x7c\x44\xcc\xae\x02\xc2\x92\x70\xa6\xec\x75\x85\xc7\x8a\x5e\x2a\x59\x34\x1a\x9b\x48\xaf\x24\xbc\xf3\xa0\x93\x2e\x05\x43\xdc\x45\xb7\x5a\x5d\x70\x53\x02\x27\x82\xd7\x53\x4a\x5d\xc9\x04\x33\xce\x9e\x8b\x65\xe8\x9a\x36\xe9\xe2\x4a\x12\xa1\x58\x21\x12\x9b\x05\x10\x0d\x79\x61\xab\x9a\x65\x2c\x07\xcf\x15\x79\xc3\xea\x50\xc4\x89\x6f\xf2\xa9\xe4\x13\x2c\x8f\x3c\xeb\xbd\xb2\xca\x23\x5d\x13\x77\x9a\x62\x78\x80\x66\x7d\x9f\x5a\xf5\x3d\x6a\xd4\x87\x6b\xd3\x9f\x4e\x93\x3e\x2c\xf2\xac\x57\x83\xee\xd5\x8f\x69\xbb\xce\x7d\xe6\x21\x0f\x1c\xf2\x61\x47\xf0\x32\x6c\x95\xb9\x8c\x41\xee\x73\xa8\x6c\x36\x37\xe7\x16\x0d\x7f\x43\x6d\x00\x99\xe2\x29\x7a\x6c\xc5\xc9\xd1\x1b\x0f\x90\xe4\x82\x20\xce\x84\x66\xf5\x9c\x66\xec\x38\xd4\x6f\xb3\x6a\xc1\x4a\x56\x9b\x09\xb2\xef\x39\x24\x20\x8b\xff\x48\x2e\x97\x6e\xff\x11\x76\xa7\x59\x6d\x26\xb3\xf5\xbc\xd8\x7f\xde\x3b\x6c\x77\x5b\x2a\x74\xa8\x6c\x27\x4a\x3c\xa8\xb9\x93\xa6\xdb\xd2\xb5\x76\xf2\x70\xae\x71\xa2\x55\x68\x49\x88\x39\xe1\x6f\xa4\x00\xbe\x12\x48\xcc\x52\x36\x35\xfa\x48\x79\xf7\x9b\x4c\xd6\xb5\xe1\x65\xa1\x69\xaa\x48\xcd\xae\xb8\xd2\xac\x06\x2d\x08\xbe\x51\x34\xe6\xc1\x56\x83\x49\x77\xee\x6e\xe2\xfd\x4a\x1e\x08\xa7\x8d\xa8\xcd\x4a\x1e\x55\x2d\x6f\x78\xee\x78\x8a\x90\x4a\x73\x45\x2a\xaa\x02\xf8\x2a\xaa\x94\xcc\x38\xf0\x2e\xed\x0a\x46\xb4\x84\x9a\x1f\x10\x60\x3c\x28\x73\x07\xee\x25\xf4\x79\xb1\x30\xeb\x5b\x5d\x12\x21\x73\x76\xde\x5c\x16\x5c\x2d\x2e\x76\xe9\x77\xb0\xa9\x1d\x8c\x17\x59\x73\x24\xbe\xcf\xff\x20\xca\xbb\x41\x28\x0e\xf2\x82\xb9\xdd\x0c\xc3\xc3\x8d\xd8\x2d\x61\xb5\x5c\xfd\xe1\x11\x93\x70\xc7\x17\xcc\x42\x7b\xbe\xb9\x78\x18\x0d\x01\xcb\x87\x76\x2c\x16\xb0\x0e\x33\x23\xe5\xec\x5b\x51\x75\x9e\x67\xb4\xb8\x3f\x23\x6c\x58\xba\x2c\x8a\xbb\x97\x50\x4c\x74\x30\x77\xb8\x01\xb9\xd9\x9b\x6e\x8e\x78\x90\xe4\xda\x26\xa1\x88\xf6\x01\x59\x99\x60\x45\x4a\x89\x78\x55\x82\x48\xe1\x56\x01\x92\x44\xb9\x0f\x02\x90\x45\xc0\x0a\x87\x13\x30\xfa\x72\xdc\x53\x46\x5f\x8e\x07\xca\xe8\xcb\xb1\xb1\xec\xc5\x17\xaf\x05\xfa\xa6\x01\x26\x73\x27\xe7\xbb\xe7\x13\xe2\x39\x8e\x9e\x20\xaa\x2d\x32\xca\xce\x2d\xe5\x44\xeb\x9a\x5f\x36\x7a\x47\x69\x68\x57\xda\x00\x16\x98\x29\x7b\x73\x4c\xed\x24\x66\x01\xc1\xb2\x4a\x42\x4f\x19\x83\xfb\x26\x9a\x25\x9c\x79\xce\x0d\x98\x36\x7c\x78\xa8\x48\x2e\xb3\xa6\x64\x42\xb7\xab\xd3\x3a\xbf\xc6\xe6\x0d\x4e\xa2\xc3\xe9\x69\x35\xc3\x46\x7a\x8f\x56\x2e\x6f\x85\xa1\x76\x27\xe7\x3d\x50\x35\x5d\x98\x9a\xf6\xab\x50\x4c\x71\x8f\x89\x79\x4e\x2f\x65\xa3\x3d\x18\xf8\xff\x30\xaf\x9c\x4d\xf6\x08\x2d\x49\xa3\xd8\x83\x5e\x37\xad\x95\x61\x60\x1b\xa3\xab\xcf\xe8\xea\x33\xba\xfa\xf4\xbd\x3c\xba\xfa\x6c\x2a\xa3\xab\x8f\xd9\x10\x67\xe8\xc5\x63\x26\xd9\x25\x5d\xeb\x5c\x6b\x0e\x70\x3f\xe6\x44\xed\xde\x79\xe2\x6d\x7b\x11\xe3\x9a\xac\xc2\x1d\xad\x88\xdf\xb8\x37\x5b\xe3\x5d\x10\x54\xe0\x6e\x6a\x58\xf9\xa7\x77\xb4\xd8\x91\xfb\x04\x8c\x2e\x4a\xb5\x82\xa5\x8b\xdb\xd0\x42\x6d\x5c\xb0\xc2\x88\x3c\x64\xc5\x81\xab\x92\xf9\x6b\x3c\xab\x54\x08\x89\x5c\xa2\x9a\x90\x02\x12\xc9\x4f\x6c\xc0\x24\xc8\x47\x15\xcd\x50\x5d\xd1\xf0\x1c\x2e\x88\x16\xf7\xa4\x1f\xc5\x01\x4b\xe2\x0a\x90\xe4\x55\x20\xb0\x12\x30\xc0\x9e\xc4\x8a\x61\x49\x5d\x12\x53\x68\xc5\xbf\x63\xb5\x8a\x42\x89\x6e\x4b\x37\x65\x01\x7e\xef\x56\x42\x65\x0b\x56\x52\xf8\xe7\x3b\x37\x00\x73\xac\x8d\x18\xa4\x19\xc2\x43\xb3\xba\x34\xf2\xf8\xa4\x13\x15\x75\x70\x13\x87\xae\xec\x4a\xb2\x0c\x4b\xdc\x36\xec\x4f\xa4\xf2\xc0\x70\xcf\x3b\x76\x78\xb0\xaa\x1a\xb6\xaf\xc0\x3c\xe6\x2b\xde\x73\x40\xb8\x70\x7e\x76\x3c\xb4\xc7\x08\xdd\x58\xf6\xe1\x36\x34\xd4\x5d\x68\xe2\xcd\x4e\x5d\x4e\x38\xba\xe1\xd1\x5d\x68\x74\x17\xea\x96\x67\xee\x2e\x14\x5c\x79\x8e\x82\x6e\xf0\x07\x0a\x0d\x67\xce\x29\xe8\xd2\x73\xc2\x56\xac\x75\x9e\x3e\xce\xcd\x47\xd6\x5d\x3f\xd5\xc3\xd9\xec\x10\x3d\x55\x5b\x39\xb8\xd1\xf3\xe9\x9f\x08\x13\x99\xcc\x19\xe6\x8f\x25\x73\x5e\x2b\x0d\xec\x52\xab\x10\x0e\xfb\x52\xba\xb6\x42\x5f\x57\xa8\x3b\xed\x5e\x4d\x20\x7b\x0e\xa7\xfc\xdd\x63\x98\x8b\x04\xf2\xd5\x32\x1f\x1e\x21\xdd\xc9\x1e\xce\xa0\x6c\xb9\x10\xf7\xbb\x22\x05\x2f\xb9\x56\x3e\x3b\x2d\x53\x3a\x56\x9f\x4d\xc8\x11\x7e\x3c\xcb\xaa\x66\x62\x2b\x9a\x95\xac\x94\xf5\x72\xe2\x2b\x33\x3f\x76\x6a\xb7\x6f\x60\xee\xa7\xac\xa9\x6b\x26\x74\xb1\x8c\x85\x77\x6b\xcb\x9e\xb8\x1c\x37\x53\x3b\x64\x72\xfc\xe2\xc4\x81\x10\xb6\xa5\x7b\x22\x5b\xa7\x01\xb0\xba\xf8\xd1\x02\xbd\xb6\xb0\x19\x93\xd6\xa5\xc2\x3c\x65\xe2\x86\xdc\xd0\x5a\xc5\x9e\x00\x32\x94\xaf\xc9\xf9\x0d\x57\x32\xda\x8b\x6d\x6d\x70\x17\x5e\x25\x6e\x76\xb3\x6c\x74\xd5\x68\x4b\xee\xdc\x16\x77\xf9\x8a\xfc\xd6\x5e\x61\xdf\x5e\xf5\x5b\x06\xda\x52\x51\xad\x59\x2d\x5e\x93\xff\x77\xf4\x1f\xbf\xf9\xd7\xf4\xf8\xaf\x47\x47\x3f\xbc\x9c\xfe\xdb\xdf\x7f\x73\xf4\x1f\x33\xf8\xc7\xaf\x8f\xff\x7a\xfc\x2f\xf7\xc7\x6f\x8e\x8f\x8f\x8e\x7e\xf8\xea\xfd\xdf\x3e\x9d\x9f\xfe\x9d\x1f\xff\xeb\x07\xd1\x94\xd7\xf8\xd7\xbf\x8e\x7e\x60\xa7\x7f\x8f\xac\xe4\xf8\xf8\xaf\xbf\x4a\xe8\x24\x15\xcb\x6f\xa2\x69\x0a\x96\xe9\xa0\x7b\xa5\xfb\x6d\xe2\xd2\xaf\xf0\x7e\x5c\xe8\xa9\xac\xa7\x58\xc9\x6b\xc8\xa5\x11\x5d\x95\x5b\xda\xe1\x67\xa4\xbd\xb5\xda\xdc\x59\x8e\x3d\xde\xf1\x21\x78\x3c\x07\x3c\xfa\x81\x8e\x7e\xa0\xab\x65\xb0\x1f\x28\x58\x96\xdf\xf2\xad\x62\x1b\xb9\x3a\xbb\x21\xd8\x9a\x95\x95\xac\x69\xbd\x24\xb9\xd5\x85\x2f\x1f\x05\x29\xfb\xc8\xb4\x2d\xd0\xc9\x9c\x3f\xbc\x1c\x3b\xb0\x2c\x95\x2c\xe7\x4d\xb9\x13\xd0\x57\xa8\x39\x9c\xf4\x5b\x48\x6a\x66\x53\xa6\x39\xd7\x40\xfb\x9a\x4b\xf8\x49\xb3\x6b\x14\x60\xfd\xaa\x24\x2a\xa2\x21\x35\xd4\x81\xf5\x90\x2a\x19\x15\xde\x94\x05\x3e\x73\x32\x67\x87\xca\xbf\x8b\x8d\x27\xda\x94\xd0\xfb\xc1\xba\xd8\x1f\xd9\xaa\x8e\x8d\x80\xf0\x1e\x78\xc8\x3d\x24\xf9\x89\xda\x2d\x24\xed\x46\x88\xd3\x64\x0c\x01\xff\xcd\x59\xe0\x3c\x60\x33\x27\x59\x85\x05\x0a\xa0\xce\x6d\xc0\x9f\x54\xbf\xf8\x13\x23\x32\x8b\xa6\x64\x75\xd4\x6d\xe4\x94\x98\xe4\x88\xcd\xae\x66\x13\xf2\xf2\x8f\xbf\xff\xfd\x84\xbc\x7c\xf5\xc7\x3f\xfe\xf1\x38\x30\x57\xde\x6b\x10\x34\x2f\x26\x78\xfa\x05\xd7\x46\xc8\xd4\xbd\x8c\xac\xe5\x69\x8c\x64\xe0\xf1\x65\xff\xdd\x89\x27\xc5\xbb\xcf\xfd\x12\x28\x95\x22\x9a\x01\xe5\x88\xb9\x0f\x6b\x9e\x33\x0b\x0b\x9c\x87\x3a\xbd\x05\xab\xa3\xae\xe4\x4f\x6b\x99\xdb\xd1\x05\x8a\x48\x41\xbe\xe7\x22\x97\xb7\x03\x1c\xe3\xa8\xb9\x6d\xbd\xb8\x07\xb7\xec\xa9\xdd\x6a\x0e\xee\x29\x67\xee\x62\xdd\xab\x51\xa8\x57\x21\xa2\xf8\x3f\xd9\xd7\x46\x86\xdd\x09\xaa\x93\xab\xdc\xb9\x14\x6b\x09\xaa\x37\x0b\xb6\x3e\x27\x85\xcc\x02\x2f\xee\x8e\xe8\x06\x44\xda\xcd\x62\x82\xc3\x8f\x21\xd5\xa6\x5d\x94\xcc\x71\x75\x14\xba\xa8\xf2\x0c\x92\x32\x83\x22\x0f\x28\x69\x02\x7d\x36\xd5\x96\xf4\x8e\x97\x4d\x49\x1a\x65\x7a\x2b\x45\xb7\x96\xb6\xb3\xb7\x2e\xb7\x34\xec\x53\x2e\xe0\xa3\x0e\x49\x88\x31\x28\x2d\x18\xb9\xf0\xf3\xd7\xdd\xe8\x5e\xef\xa6\x1a\x50\xfb\xd8\x7e\x58\xa5\x86\x9c\x83\x77\xa4\x97\xaf\x95\x4f\x4f\x3c\xe0\xaa\x13\xbc\xe8\xde\x75\x2e\x71\xa8\x9f\xde\x46\xd8\xa0\x83\xe7\x74\x2f\x3d\x63\x49\x36\x5a\x7e\x4d\x97\x5a\x13\x65\xd5\x47\x48\xa8\x3e\x04\x63\xab\x8c\xb4\x8f\xeb\xe8\x70\xd2\x61\xce\xd2\x6e\x8c\x07\x75\xe1\x00\x9e\x84\xc4\x41\x6b\x7e\xf2\x1a\x78\xcb\x80\x67\xcb\xcc\xc2\x76\xf3\x4e\xee\x67\x6c\x14\xf7\x37\x60\x14\x4c\xcd\x7f\x9c\xa6\xde\x89\x83\x97\x6c\x8e\x3e\xca\xf8\x0d\x68\x5a\x55\x1f\x2e\x02\xda\x1f\x0a\xa6\x01\x68\x81\xf9\x8c\xe0\xe8\x3c\x5d\xca\x1b\x73\xa0\x7a\xea\xf8\x56\x59\xaf\x31\xde\xbb\xa1\xe8\x71\x07\x1b\xcb\xba\x50\x08\xc6\x72\x04\x7a\x28\xda\xfe\xd7\x8d\xe8\xed\xfd\xe5\xb1\xbb\xce\x80\xde\x08\x73\xe3\x14\x4e\xdd\x86\xec\x40\xcd\xcc\xa2\x00\xec\x79\x2d\x4b\xa2\x04\xad\xd4\x42\x6a\x50\x74\xd3\x8a\x66\x5c\x47\x60\x07\xe8\x9a\x66\xd7\xa6\x0e\x70\x1a\x82\xde\xf6\x75\x2d\x3b\xb6\x21\xaa\xe1\x8e\xe8\x02\x5b\xe8\x45\x2d\x9b\xab\x05\xe0\x2c\xe0\x5b\x59\x41\x15\x02\x6a\xf4\xf9\xd6\x6c\xac\xdd\xaa\x71\x15\xc9\x97\x82\x96\x3c\xf3\xd9\x65\x6b\x79\xc3\x0d\x8f\x83\x2e\x05\xd0\x6a\xff\xa0\x29\x39\xf7\xa9\x3f\x91\x7f\x78\x53\x50\x5e\x92\x23\xc5\x18\x39\x75\x87\x04\x7f\xb9\x40\x75\x0e\x1a\xa7\x62\xbc\xa4\x43\x17\x08\x9b\xee\xc4\xa2\x25\x02\xbb\x6c\x59\xd6\xc0\x17\x31\x06\x04\xd7\xee\xe7\x8d\xdd\x3e\x8e\xda\xc6\x9b\x47\x2c\x6b\x70\xfa\x77\x19\xb0\x99\xc8\x65\xeb\xe3\xda\x53\xeb\xc9\xf9\x99\x0a\x95\xc0\x78\x96\x6d\x52\x55\xf8\xc1\xa6\x58\xf1\xb9\x24\x3c\x25\xe8\xa9\xd9\x5c\xb0\x82\x70\x91\xf3\x1b\x9e\x37\xb4\xc0\xab\x35\x62\x90\x6f\x2e\xce\xb0\x61\xc3\x93\x4f\x6f\x19\xb0\xe6\xc8\x03\xb5\xb4\xcf\x75\x97\xaf\x45\x5e\x19\x6e\x9e\x61\xc2\xe6\xbe\xe3\xc9\xac\x01\xd7\x0c\xf9\x96\x2e\x21\xe7\x94\x8d\xe0\xe9\xb8\xec\xba\x3c\x90\xd8\xc0\x5c\xf6\xdd\x32\xa5\xbb\xbf\xed\x16\xea\x1d\xf6\x09\x90\x94\x8c\x0a\x10\x91\xc1\xfe\x6a\xf6\x13\x50\x8d\xf5\x31\xf7\x9f\xbf\x20\x29\xae\xff\x08\x19\x12\x45\xcd\x5e\xed\xd5\xa4\xec\x40\xc7\x71\xd3\xee\xd8\x4f\xac\xac\x0a\xaa\x77\x22\xe8\x7e\x1f\x18\x88\x03\xef\x25\x43\xc4\xa8\xc8\xa7\xb4\x30\x47\xe5\xfc\xbb\x37\x16\xcd\x04\x09\x4f\xa2\xbb\xfc\x27\x77\x09\x09\xcb\xf5\x21\x1b\xbe\x91\xe6\x40\xc6\x84\x4b\x96\xc3\x0d\x62\xfb\x16\x17\xe9\x83\x8a\x55\xbb\xf7\xce\xbf\x7b\x33\x21\x7c\xc6\x66\xee\x2f\x5f\x99\xbb\x1e\xb5\xbc\xc2\xf8\x57\x87\x3f\x10\xe3\x09\x25\xf3\x19\x0e\x27\xb4\xc6\x86\xb5\xff\xf8\x67\x33\x50\xf3\xeb\x5f\xa6\x7f\x0e\xf2\x95\xff\xe5\x47\x73\x1f\x47\x05\x9c\xfc\xb8\xf2\x5d\x18\x38\x09\x97\x9e\xf9\xeb\xc7\x73\x99\x5f\x54\x2c\x9b\xe1\xe4\xa9\x1f\x23\x5d\xe0\x08\x61\x42\xd7\xcb\x19\x39\x97\xe0\x4c\xcf\x73\x3c\xb2\xd0\xff\x9a\xfd\xc3\x09\xea\xb0\x5c\xde\xde\x99\x51\xcd\x04\x70\x25\x22\x26\x17\x17\x71\xf0\x4e\xd0\x00\x10\x27\x0a\xb3\x74\x04\x86\x32\x84\xc0\x9c\x10\x2d\x31\x21\x55\x3f\x2d\x37\xe5\x44\x10\x76\xc7\x15\x20\x1e\xe3\x8c\xc3\xb2\x51\x1b\xd7\xe9\x18\x39\xd3\xac\xd9\x09\x1e\x27\xbb\x92\x31\x9e\x76\x30\xfe\x5f\x0b\xa9\x7f\xed\x0f\x83\xd3\xef\x00\xc7\x26\x09\xbd\x91\x3c\x27\x8d\x02\xbe\x41\x90\x46\x80\x49\x3c\x0a\x45\xcc\xae\xe7\xe5\x92\x94\x5c\x69\x7a\xcd\x66\xe4\xc2\xb0\x73\xa1\x4b\x20\xae\xb2\x20\x90\xff\x9a\xe5\xa4\x11\x9a\x17\x91\x12\x9d\xef\x0b\x4c\x4c\xc0\xea\x81\x95\xa0\xc9\x0c\x4f\x52\xd5\x6c\xea\x58\x4b\x7c\x2b\x4a\x1b\x6a\x33\xf9\xbb\x39\x69\xe7\x74\xe2\xb7\xfe\x82\xa2\xb2\xb2\xca\xa1\x72\x1b\x6e\x15\x7d\x60\xd7\x42\x22\xcd\x6c\x48\x91\xb5\xac\x23\x2c\xbb\x9a\x91\x0f\xc0\x0f\x16\x31\x9b\x1c\x3d\xbf\x51\x3b\x6b\x7d\x22\x04\xcb\x98\x52\xb4\x5e\x62\x24\x1a\xd7\x2e\xd4\xb0\x51\x6c\xde\x14\xc0\x2e\xc7\x4c\x09\x15\x8d\xe9\x04\xa9\x59\x26\x85\xd2\x75\x93\xc1\x3a\x52\x72\x59\xcb\x6b\x26\xda\x58\xe2\x64\x85\x4f\x1b\x9f\x64\xd8\x1e\x21\x49\xb6\xa0\xe2\x8a\x79\x7c\x37\x52\xd2\x1c\x76\xd1\x57\x5e\xc0\x8a\x99\x0a\xe9\x57\x8a\xce\x8d\x54\xc3\x35\x2c\xd9\xa5\xe1\xc8\x9c\xf7\x48\x4c\x67\x3f\xfa\x48\xbe\x32\x70\x35\x11\xbc\xd8\x72\x34\x4e\x8a\x67\xc1\x14\xf8\xef\x7e\xc1\x3d\xc9\x93\xa0\x64\x9a\xe6\x54\xd3\x5d\x06\x5b\xbe\xa7\x4b\xef\x99\x83\x9e\xab\xb0\xe8\x81\x47\xab\x65\xb3\x9c\x54\x28\x2b\x1e\xa2\xf6\x9d\x7f\xf7\x26\xb2\x25\x10\x03\x61\x9d\x01\x2b\x5e\x9b\x73\x64\xb5\xb4\x73\xb4\xcd\x19\x29\xc8\x05\x54\x9a\x4e\xb8\x36\xf1\x3a\x60\x39\xc9\x9b\x04\xdb\x6c\x7b\xa9\xc4\x59\xf6\x12\x7d\x4f\xcc\x7a\xef\x72\x61\x3e\xb5\x4e\x9d\x59\x37\x3c\x70\xa3\x30\x81\xfe\x52\x4c\x68\x5e\xb3\x00\xbb\x31\xb2\x31\xbb\xaa\x8d\xc0\x93\xde\x5d\x5f\xdc\x00\x57\x4c\xab\xd6\x44\x8c\xd7\x7f\x74\xfd\xda\x32\x8e\xd8\x4b\xe0\x65\xdd\x9a\x5b\xfd\xdd\xc6\x41\x45\xd6\x8e\xfb\x46\x49\x7b\xcd\xc7\x2a\xcb\x07\xb8\x1b\xa5\x7b\x02\xd1\xcc\x50\xfb\xf7\x32\x4f\x71\x1e\x1a\x6a\xe8\xef\x34\xd7\xc6\x98\x23\xb4\x81\x02\xe5\x33\xbe\x00\xf6\x05\xd5\x41\xae\xc4\x3b\x6a\x41\x6f\x12\x6c\xff\x83\x35\x9e\xad\x9c\x33\x75\xca\x4f\xec\xd8\x14\x3a\x36\x7d\x15\xdd\x85\x94\xb0\x0b\x57\xa2\xc3\x2f\xba\x8d\x24\xfa\xc8\x3c\x0a\xcd\xc9\x15\x43\xfe\x2f\x12\xfd\x63\x86\xef\x9e\xb6\x35\xcb\x0c\x58\x97\x57\xef\x2e\x6d\x11\x7b\x18\x37\x64\x3b\x65\x06\x7f\xdd\x61\x9b\xad\xa0\xe5\x75\x66\x88\x89\x70\xe4\x94\x68\x33\xbb\x4d\x1c\x36\x7d\xf7\xf5\xe3\xc1\xcd\x02\xe7\xbf\x59\x8b\x93\x50\xe7\x99\x8d\xfe\x70\x32\xa8\x91\xf5\x6a\xb0\x6c\x3b\x2c\x1e\x73\xf0\x6a\x59\x14\xac\x86\x09\xb4\xea\xb3\x15\x37\x7d\xc8\x77\x8f\xee\x4a\x31\x20\xb3\xae\x38\x05\xad\x17\x8f\x05\xbb\xf5\x7c\x3d\x55\x98\x55\xca\x79\x87\x82\x8a\xd9\xc5\x48\x6c\x6a\x39\xe5\xa8\x07\x9b\xc3\xd7\xbd\xc2\x15\x68\x19\xbc\xf5\x91\xcd\xd1\x85\xba\xf3\x68\xed\xdb\x84\x1e\x6c\x6a\x05\xd9\x8a\x4e\x13\xb3\x36\xe6\xc6\xca\x61\x49\x29\x82\x5c\xb1\xeb\xdc\xa9\xac\x6b\xed\x5d\x69\x37\x84\x27\xde\xd8\xd7\xf8\xd6\x07\xf8\xc1\x0e\xf1\x84\x05\x90\x5b\xde\xab\x95\xea\x7e\x10\x29\x79\x63\x19\xe2\x3a\x0b\x11\x42\x60\x46\x4f\xf3\x83\x1c\x4e\xf7\x08\x2a\x54\xbd\x51\xdf\xac\xfb\x15\xfc\xe1\x78\x2e\xef\x59\x78\xc9\x0c\x25\x69\xb1\xbb\x53\x76\x14\xc1\x5d\x15\xb6\xb4\x21\x78\xa2\x3d\xa8\x5f\x71\x91\xfb\x20\x14\x87\x10\x65\x2e\xdc\x93\xf3\x33\xec\x5f\x6a\xeb\xef\x80\x52\x2d\x2d\xdb\xad\x17\xbc\xce\xa7\x15\xad\xf5\x12\xd5\x96\x93\x4e\xdf\x3c\xc8\x4d\x52\x23\x03\xfd\x49\xcd\x36\x7c\xc4\x72\xc3\x54\x39\x33\xbc\xf5\x91\xba\x77\xcd\xf6\x31\x9e\x78\x90\x9c\x8d\xe3\x09\x53\xd0\x3b\x15\xdf\x13\x8e\xe7\xf1\x7e\xae\xa4\x4b\x2b\xf7\xcb\xcd\x18\xe2\xdc\xf5\xa1\xb2\x2c\x07\xc8\x31\x56\x15\x2c\x43\xac\x0a\xcf\x17\x83\x16\xc9\xd4\x34\x21\x7c\x6e\xae\x5b\x29\xa6\x60\xa7\x4f\xe8\x48\x6b\x96\xb4\x5c\xf8\xcc\x3a\x2f\xa1\xde\x07\x0e\x64\xd0\x9f\xa0\x91\xf6\xa4\x93\x23\x21\x63\xd4\x42\xae\x00\x9d\xc0\x5a\x8f\x31\xe6\xec\x1e\x1b\xd4\x65\x0a\x2e\xb8\x29\xdf\x2f\x98\x8f\x92\xb3\x0a\xa3\x80\x82\x39\x56\x84\x8b\xdc\x6c\x52\xf4\x6c\x02\x00\x9c\x26\xcb\x18\xf3\xca\x5c\x7b\x48\x53\x98\xf0\x0e\x6d\xb4\x13\x56\x52\x9d\x2d\x98\x22\x4a\x42\x4e\x24\xa5\x69\x51\xb0\xdc\x1b\x28\x71\x41\x25\x70\x68\xd6\x78\x99\xd0\x62\xc0\xe2\xa5\x4c\x50\xa0\x4c\xb3\xda\xec\xaa\xa0\x56\x8d\x38\x6f\x44\x86\x4e\xd8\x5c\x2f\xbd\x7d\x6a\x95\xed\x06\x0d\x8c\x02\x8d\x69\x0a\x6b\x38\x47\x0b\x54\xa0\x4d\xf1\x1b\x09\xae\x96\x25\x5e\x26\x46\xc6\x6b\x6d\x4a\x36\xb1\x83\xb9\x19\x3c\x1a\x56\xd2\x3e\x0b\x70\xb3\x26\xc8\x8d\x85\x2c\x93\x38\x0c\xdd\x7b\xf8\x0a\xcb\x94\xc2\xf9\x86\x63\x3b\x0a\xa6\x6c\x8d\xc5\x3c\xf6\x6c\xa9\x62\xda\xe3\xdb\xa5\x70\x2d\xc4\xfa\x33\xd1\x46\xcb\x92\x6a\x9e\x81\xa2\x95\xcf\x03\x73\x6d\xe9\x53\x6a\x7b\x77\x25\xbc\x54\xe1\x52\xb7\xb3\x9e\x7c\xac\x36\x33\x9b\x8f\x9a\xb6\x60\xa6\xec\x6a\x74\x27\xc5\x0d\x35\x60\x35\x92\xfb\xfe\xc9\xc1\x98\x11\xbd\xa8\x19\x23\xbc\x34\x02\x0f\x15\x9a\xe4\x7c\xee\xe1\xeb\x9c\xf5\xfd\xa1\xb5\x4b\x93\x29\xbf\x07\xcf\x8e\xa0\x3e\x54\x5a\x17\x85\xbc\x55\x44\xdf\x4a\xaf\x40\x6b\xad\xb2\x16\xbe\x6c\xd2\x6d\x36\xe9\x06\xb5\xf5\x1b\xb2\x6d\x56\x3a\xa0\xb4\x13\x73\x6a\x6f\x59\x51\x98\xff\x3f\x44\x6f\x13\x22\x6c\x37\x8e\x93\x5f\x09\xc4\xc5\xe2\xca\x29\x4c\x6d\x1c\xef\x51\x5e\xcb\xaa\xb2\x06\x9d\xf2\xf8\x31\xe3\x04\x27\xa5\xfa\x86\x29\x70\xb8\x73\x51\xc4\x66\xc9\xae\x98\x60\x35\xd5\x60\xd2\xb6\x89\x4e\xe0\x72\x5c\xed\x4e\xbc\x02\x12\xcb\x20\x39\xad\x67\x1b\xa0\x03\xc2\xe6\x65\x77\xef\xd8\x5f\x93\xfa\xca\x05\xee\x00\x77\x62\x93\x96\xd4\x45\xb0\x7c\xab\x9c\xe9\xad\x3d\xf9\x1e\x63\xa2\xdb\xd5\x4e\x84\xcb\x9b\x5a\x2a\xf5\xc1\x7d\x82\xfb\xeb\x6d\x70\x8b\x3c\x3a\xc8\x65\x14\x41\x47\x11\x74\x14\x41\xfb\xca\x28\x82\xee\x7b\x3c\x40\xef\xf6\x79\x26\x3f\x84\x1c\x59\x97\x50\x6f\x6d\x3e\x08\xf9\x20\xb5\xf5\x1c\x01\x06\x9a\xde\xab\x75\xa4\x40\xd3\x6f\xe9\x72\x26\x98\xb6\xb8\xac\x4e\x4d\xfe\xd1\xb5\xfe\xb7\xda\xb0\x5e\x56\x42\x0a\x4e\x91\x3b\xc0\x0e\x54\x37\x68\x45\x4b\xbc\x0b\x5b\x47\x16\x78\x7e\xa8\xac\x73\x84\xf9\x1d\x50\x46\xc2\x0a\x32\x36\x23\x17\xd6\xf1\x6e\xa5\xf1\x75\xe8\xcc\x9c\x69\xca\xe3\x70\x99\xc3\xd2\x17\xeb\xb9\x87\x9b\x90\x0c\xdb\xb2\x3e\x66\x7d\x1f\xba\x8e\x16\xfb\x21\x70\x2e\x0f\x03\x34\xda\x17\x1e\x6f\xf4\xfb\x56\xb1\xba\x6b\xad\x0f\x6c\x43\xfe\x48\xd8\x65\x32\xbb\x20\x85\xb3\xf2\x78\xae\xa6\x66\xeb\xbe\x5a\xd5\xec\x86\xcb\x46\xb9\x30\x93\x46\xe3\x9d\xa4\xb4\x15\xf4\x16\xfc\x6a\xe1\x5e\x76\xee\xd7\xe0\x18\x53\xe7\x7e\xdb\x27\xf4\x41\x69\xaa\x1b\xd5\x45\xfb\xca\xc0\xca\xfe\x24\xa6\x51\xbf\x76\xbb\x65\xde\x86\x31\x4a\x18\x96\xb3\x4f\x92\xfc\x35\x06\x02\x61\x25\x97\x76\x47\xbb\xe8\xa5\x36\xfa\x2a\x93\x65\xd5\x68\x16\xec\x7c\xbb\x5b\x53\x49\x50\xe2\x42\x76\x30\x9d\x5f\x94\x54\xd0\x2b\x36\xf5\x9d\x98\xb6\x81\x4b\x2f\x06\x50\xa0\xc4\x25\x25\x8f\x00\x15\x0e\xcb\x33\x0e\x38\x5a\x19\x6c\x3a\x7c\x06\x79\x24\x84\x06\x79\x0c\x8c\x06\xd9\x26\x94\x06\xf1\x78\x3c\xfb\x3c\x8e\x1f\x6d\x9b\xab\x07\xd2\x5e\x3c\x0f\x1d\xc8\x61\xec\x3d\x48\x30\xbe\x55\xae\x88\x2c\xb9\xd6\xcc\xf9\xf7\xfa\x03\x36\x21\x5c\x77\x22\x8b\x2d\xe1\x00\x0d\x34\x3a\xe9\xb2\xbb\xaa\xe0\x19\xd7\x01\x40\x7b\x6f\x04\xce\x6a\x01\x41\xe6\x96\x2b\x64\xa2\x04\xe1\x65\x85\xc9\xe8\x80\x00\x4c\x6d\xf8\xa0\xd3\xb3\xfa\x7e\x67\xe0\x62\x47\xd8\x1d\x68\xc5\xb1\x6b\x23\x65\x1a\x29\xd3\x4a\xf9\x39\x50\x26\x84\xe2\x49\x41\x8a\xea\x50\x24\xf7\xb9\x05\xea\xa5\x97\xac\x20\x3f\x35\xac\x5e\x22\x84\x8c\x0f\x80\x92\xe6\xe8\x2b\x9e\x63\xa8\x8f\x33\x41\xed\x58\xe3\x35\x8c\x69\x02\xb3\xd5\xe9\x9d\xe1\xd4\x01\x23\xe0\x11\xf4\x7a\xb5\xaa\x2e\x9c\x31\xce\x96\x9f\xc1\x90\x27\x47\x5f\xcc\xf0\x09\xb0\xdd\x27\x1f\xde\x0e\x13\x8e\xd2\x7c\xf0\xc8\x10\x3f\xbc\xb5\xc1\x27\x5f\x56\x84\x9c\x3c\x30\x27\x38\x77\xfe\x17\xb8\x25\xbc\x17\xa5\x57\x80\x93\x6b\xb6\x9c\x58\x2f\x69\x62\x56\x9f\xba\x97\x93\x3b\x83\xe1\x12\x6d\xa6\x66\x53\x69\x6c\x66\x89\x6e\x19\x4c\x84\x87\x29\x6d\xb1\xc4\xa7\xc8\xee\x7e\xe5\x26\x2d\x95\xd6\x0f\xbe\x25\x92\x52\x69\x87\xe5\xbe\xb4\xda\xb8\x87\x20\x07\xae\x83\x0c\xf0\xdb\x06\xc0\x18\x80\x20\xa5\x2e\x22\x19\xae\x1c\xc3\xe2\x26\xf6\xd1\x43\x1d\x70\xb0\xc2\xf6\xbb\x21\xee\xd7\x6c\x79\xa8\x2c\x72\xa7\x14\x6a\xc1\x2b\x4c\xfb\xae\x18\xd0\xa8\x61\x1b\x1e\xcb\x77\xe0\xf1\xed\x9a\x45\x0a\x76\x26\x26\xe4\x83\xd4\xe6\x7f\xa7\x10\xb1\x03\xc7\xea\xad\x64\xea\x83\xd4\xf0\x64\xef\xeb\x82\x43\x7c\xaa\x55\xb1\xa6\x41\x0e\xe6\x3a\x20\xd3\x08\x21\x05\xe1\xeb\x76\xf6\x9d\xbb\xa3\x5f\x41\xae\xc8\x99\x20\xb2\xb6\x53\x39\xa8\x61\x50\x35\x61\xe3\xd8\xac\xb3\x24\xb4\x16\xf2\x4d\xed\xda\x55\x93\x75\x67\xd1\xb6\xdc\x05\xdb\x3c\xe8\x15\xf1\x17\xd0\x94\x82\xab\x86\x8b\x34\x81\xe8\xd3\x9a\x6a\x76\x95\xe4\x37\xd2\x96\x92\xd5\x57\x00\x55\x9b\x25\x24\xb9\x0e\x3a\x3f\xf0\x62\xc5\x32\xe8\x7a\x0d\x1b\x1e\xb8\xd9\xb7\xe4\xfa\xbe\xe5\xaa\x80\x4f\xfa\x1a\x22\x9c\xf6\x29\x1d\x07\xcd\x22\x77\x51\xd2\xca\x9c\xbe\xff\x32\x4c\x04\x6c\xcc\xff\x26\x15\xe5\xb5\x9a\x91\x13\xa2\xb8\xb8\x2a\x58\xe7\x37\xab\xb2\x0f\xaa\x49\xee\x00\x58\xd2\xcc\x1d\x7f\x43\x0b\x86\x61\x94\x54\xf8\x8c\xe9\x72\xbe\xc6\x42\x4e\xc8\xed\x42\x2a\xe4\x48\xbc\x8f\xd7\xc1\x35\x5b\x1e\x4c\x12\x15\xa9\x24\xbc\x13\x4c\x25\x67\xe2\xa0\xc5\xd5\xee\x9c\x4b\xcf\x67\x81\xf1\xfe\x00\x7e\x3b\xd8\x36\x8f\xfa\x44\x42\xea\x93\xf9\x5c\x5a\xa5\xf2\x9b\x82\xa2\x91\x64\x1f\xa6\x88\xd5\x36\x37\x25\xdc\xbd\x08\xde\x69\xcd\x53\x36\xa8\xf7\x09\x35\xed\x00\x94\x92\x1c\x7d\x94\xb4\xb0\xab\x29\xee\xf6\xba\x36\xf7\x36\x1e\xc4\x20\xfb\xc4\x08\x66\x2d\xbe\xdb\xf4\x41\x10\x82\xcd\x55\xfa\x72\xad\x23\xc6\x06\x28\x20\x61\x70\x8b\xac\x6d\x30\xf7\x9a\x43\xae\xf9\x9b\xb6\x59\x02\x63\xf3\x82\xb7\xa5\x75\x65\xa8\x99\xaa\x24\x3a\xab\x6e\x1c\xac\x65\x11\x16\x90\x8a\xc9\xb9\xb3\x69\x52\x35\x75\x25\x95\x4d\xdd\xba\xba\xe5\x13\x03\x7a\x6c\x94\x95\x8b\xbd\xc4\xe8\x68\x7f\x12\xcc\xf9\xf1\xe0\xfa\x27\x2b\x00\x9a\xb2\x06\x0c\x33\xeb\x6d\x25\x72\x9e\x59\x79\x92\x6a\x22\xfa\x70\x54\xc2\xb2\x79\xa1\x9d\x23\x25\x8a\x34\x1e\x3b\x0a\x97\xdc\xb1\x6e\xd8\x4b\x26\x34\x58\x05\x05\x39\x13\x73\x46\x15\xbf\x2c\x98\xf5\x0d\x53\x9a\xea\xa4\x39\x09\xbc\x8b\xed\xdc\x18\x61\x02\x6e\x2e\xae\xd5\xaa\x39\xf0\x88\x8b\xac\x68\x60\x05\x05\x2f\x8e\x41\x11\x44\x45\xc6\x0a\x87\xa4\xe8\x43\x68\x07\x84\xff\x04\xe6\xcc\x39\xab\x6b\x9b\xea\x75\xb9\xf9\x24\x91\x5c\x32\x74\xa8\x81\x98\xb3\x09\x0e\x64\xb3\x23\x60\x7a\xf8\x93\x9d\x01\x4a\xce\x19\xee\x57\x9c\x57\xcc\x24\x3e\x2f\x82\x6c\x73\x76\xd4\x4b\x1b\x38\x17\x58\x33\x27\x88\xe7\x60\xc1\x18\xc2\xac\x02\x09\x1d\xb1\x38\x08\xbb\xa7\xd0\x38\xc9\xd3\xf6\xa4\x4f\x81\x40\xb3\x04\x05\xf5\x60\x0a\x1d\x97\x2d\xd2\x95\xc7\x92\x64\x80\xd0\x74\x48\x6c\x1d\xa4\xdf\x36\x78\xe0\xd1\xf7\xe4\x77\x70\x5c\xe4\x9c\xbc\x6b\xf3\x9b\x73\x05\x06\x0b\xee\x70\xda\xcc\xe6\xc5\xf3\x84\x86\x73\x3c\xdc\x86\x5e\xa7\x2a\x52\x07\xcc\xf9\x23\xae\xc1\xb6\x02\xc7\x6f\xb8\x10\x84\x35\x5c\x8f\xd5\xf3\x08\x7e\xef\xe8\x87\x99\x7e\x9d\x45\x8e\x75\xde\x83\x15\xd0\x19\xcb\x3c\xeb\xea\x4f\xde\xf1\xcb\x9a\x91\x37\x0b\x2a\x04\x2b\x02\x90\x7b\x6b\xc4\xa2\x5a\xd3\x6c\x81\x94\x89\x12\x73\xae\x0a\xa6\x0f\x15\x59\x48\xa5\x49\x49\xb3\x05\x17\x1e\x53\x53\xf8\x94\x0a\x2d\xc8\xc9\xde\x11\xa5\xe6\xea\x93\xa9\xb4\x77\x8e\xd3\x0f\x15\xd6\xec\x76\x40\x98\xc6\xdf\x3c\xd6\x92\x80\x31\x32\x09\xb1\x7a\xad\x96\x36\x07\xb0\x3d\x87\x30\xcf\x28\xe5\x00\x55\x86\x77\x63\xda\x38\xbd\x9b\x91\x03\x76\xa7\xbf\x38\x98\x90\x83\xbb\xb9\x32\xff\x13\x7a\xae\x0e\x66\xe4\xac\xf4\x86\x49\x2e\x82\x8b\x87\xd9\x0f\x08\x9f\x93\x46\x24\xf8\x4b\x27\x9c\xc9\xa2\x89\x48\xcc\xd6\x4d\xc1\x50\x34\xa2\x9b\x60\xe0\xdd\x1b\xa2\x69\x7d\xc5\xb4\xa9\x8d\x88\xa6\xbc\x64\x75\x7f\x2e\x86\xdd\x01\x01\xef\x25\xc7\x77\x67\x06\x7a\x52\x73\x93\x8f\xee\x2b\x88\x9d\x00\x6e\x60\x2e\xe3\xee\x61\xf4\xb7\x73\x89\xc5\x31\xad\xac\xa1\xd5\x0e\x8d\xb9\x11\x31\xb7\x73\x4a\xee\x6f\x5c\xcb\xef\xbf\xff\x90\x9a\x61\xf3\xb0\xfd\xf2\xbe\x0d\x72\x2b\xeb\x22\xbf\xe5\xb9\x75\xad\x24\x47\xe6\xe5\xe3\xd8\xcd\xb2\xe5\x84\x9b\xc3\x11\x66\x53\x75\x53\xb7\xb7\x3c\xdf\x49\x0e\x75\xa8\xb8\x3b\xd3\x4e\x74\x32\x33\x4d\x60\xaa\x79\xce\x84\x36\xa4\xa3\x56\xe4\x08\xbe\x88\x81\x40\x38\xe5\x08\x54\x07\x2d\x40\x4a\xaf\xf2\x92\x8b\x16\x6b\xb1\x5d\x6b\x73\xdd\x98\x93\xef\xb4\xad\x8a\x69\x84\xbb\x82\xf0\x78\xa9\x17\x44\xf1\xb2\x29\x34\x15\x4c\x36\xaa\x88\x88\x36\xfa\x8c\x97\x7b\x5e\xb0\x3b\x3c\x9b\xdb\xc4\x13\x6e\x6b\xed\x72\x0b\x10\x9c\xd3\x82\xb4\xae\xb2\x0b\x3d\xb5\xb6\x31\x8f\xf9\x0b\xcf\x58\x78\xb0\x39\x76\xc7\x32\x0b\x33\x51\x15\xcd\x15\xef\x95\xa8\xde\x9a\x9e\x19\x99\x34\x7f\x4d\xde\xb5\x1d\x86\x50\x58\xf7\x0b\xa6\xdf\x07\xbb\xbd\x6d\x88\xbc\xb9\x38\x7b\x6b\x51\x41\x85\xd2\x8c\x6e\x8b\x47\x89\x35\x75\x4e\xad\x3a\x62\x4b\x0c\x0f\x56\x96\x78\xd8\x5b\x58\xd4\x55\xed\x99\xfd\xc5\x26\xe6\xf0\x70\xf2\xb1\x38\x98\x09\x9b\x7e\xe4\xd4\xb0\x3c\xc0\xa9\x85\x88\xf2\x41\x07\x72\x56\x31\x91\x43\x46\xd1\x60\xdf\xe3\x2c\x6d\x75\x89\x6c\x86\x8b\xd4\x7b\xd9\x25\xc6\xe8\x5c\xca\x81\xde\x65\x21\x8b\x5c\x11\x76\xa7\x6b\x6a\xc8\x7c\x69\x08\xba\xff\x66\x4e\xa8\x58\x46\xa4\x2e\x4e\x52\xba\x0f\x55\xb4\x27\xcc\xd5\xfe\xb9\xc0\xfc\xe7\xc4\x05\x2a\x96\xd5\x4c\x47\x45\xe9\x0e\xc8\xa6\xe1\x2a\xef\x4e\x60\xe7\xf1\x9a\x28\x8f\xbf\xba\x50\x97\x36\xc1\x79\x54\x7b\x42\x71\xc8\x24\xba\x92\x36\xbd\xa2\x4a\x79\xe9\x18\x2e\x39\x7b\x6c\x55\x07\xb6\x21\xa2\x09\xd4\xd4\xf2\x39\x11\x72\xa5\xa7\x61\x50\x8f\xd7\xa3\x76\x5e\x89\xa8\xde\x5b\xcc\x4a\xc4\xe7\xa7\x02\xe2\xd3\xb1\x9a\x09\x04\xed\xe2\xbf\xd1\x68\x66\xc6\x15\xc8\xfd\x30\xb2\x98\x79\xb2\x63\xdf\xee\x61\x4f\x73\xe5\x89\x8f\x64\x1b\xa6\x87\xfb\x10\x5c\xae\x2e\x38\x2a\x56\x05\xd4\x85\x4e\xc5\x74\x3b\xfc\x86\x01\x30\xab\xc3\x29\x35\x8c\x6f\xde\x60\x00\x92\xc3\x58\xe8\x22\x27\xc4\x47\x4a\x07\x21\x37\xad\x17\xc3\x99\x50\x9a\x42\x90\x3d\x8c\xc2\xdc\xaa\xe6\x02\xb4\x10\xb8\x76\x23\xa2\xb6\xdc\x85\xea\x47\x37\x57\x9a\x4b\x33\x63\xb5\xd9\x6b\xc5\x92\xdc\xd6\x32\xde\xa9\x32\x51\xef\x2b\x6f\x58\x7d\xc3\xd9\xed\x0b\x1b\xd9\x36\x35\x03\x98\xda\xe8\xec\x17\x20\x1e\xbe\xf8\x25\xfc\x2f\xaa\xfd\x64\x3d\xa4\xa5\xd6\xaf\xc9\x41\x7f\x5e\xd1\xa1\xe6\xd9\x39\xe0\x2a\x6f\x35\x45\x9f\xad\x72\x45\x69\x68\x1f\x5a\x31\x20\x46\x49\x68\xe9\x5b\xc0\xba\x98\x03\xe1\x2a\xb2\xa8\x76\x44\x99\x35\x6a\x43\x1e\x1b\x21\x22\xbc\x6c\xbb\x72\x00\x56\xd8\x11\x02\xbc\x53\x00\x17\x53\x5d\x33\xe6\x07\xa5\x2d\x9b\x28\xa4\xcb\x68\x10\x99\x55\x78\x07\x8a\xcb\x9c\x6a\xaa\x98\x8e\x53\x53\xa7\x93\xa2\xa0\x7a\x33\xe2\x90\x2a\xd9\x9f\xc0\xd2\xc8\x00\x1c\xc6\x81\x03\x93\xe9\x5f\xac\x70\x20\x3a\x6f\x1a\xb1\xc0\xce\x74\x0c\x95\x5f\xb8\xac\x4e\xce\x87\x1a\x5b\x69\x17\x68\x9b\x3c\xab\xed\xe3\xb7\xdf\x9e\xbd\x4d\x15\x8a\xda\x2f\x9d\xec\xf0\x6d\x90\xc2\xd4\xfe\x6c\x37\x32\xa4\x6f\xe2\x3f\x35\xa1\xba\x03\xd2\x5b\xf8\x2d\x68\xdf\xdf\xd6\xd8\xae\x32\xd6\x1a\x17\xde\x72\x75\xbd\xcd\x53\xbe\x56\x79\xf7\xbc\xff\xed\xcd\x29\xb1\x4f\x1f\xb2\x0f\xf4\x34\xb2\x6d\xeb\x41\xf7\xe4\xff\xed\xcd\xe9\xca\x10\x56\x14\x01\x27\x45\xe1\xe4\x33\x23\x68\x38\xe8\x03\x4b\x13\x92\x27\x08\x68\x87\xe1\x7d\x6a\x86\x39\x11\x83\x9e\xe7\xb3\x4c\x71\x8f\x34\x7a\x75\xcd\x66\x5c\x06\x8e\x08\x3b\x4e\x58\x7a\x95\xb1\xd6\xfd\x24\xe7\xea\x7a\xdf\xfa\x8d\x2a\xff\xd0\x07\xa2\xf1\xbc\x0c\x3a\xab\xc2\xbd\xcb\x9a\x13\xa4\xcf\x5a\xca\x86\xdc\xda\x44\x01\xd1\xea\x83\x4f\xbc\x7a\x4d\x4e\x85\x6a\x6a\xd6\xfa\x72\xaf\x36\x66\xf8\xf5\x2d\x2a\x13\x20\xef\x84\x7a\xbd\x37\xe3\xcf\x9e\xb7\x2b\x49\xbb\x0d\x2a\x5a\x6b\x90\xfc\x77\xb1\x81\x7c\xe5\xee\xba\x08\x1e\x88\xed\xec\xa0\xb3\xb9\x8b\x40\x9c\x58\xa8\x6d\x9f\x5f\xd0\x55\xd3\x7a\x8c\xc0\x5d\x9d\xb6\x4b\xde\xf9\x2c\x4f\xe4\x45\xce\x6e\x5e\xa8\x9c\xbe\x9a\x40\x57\x5d\xcc\x7d\x77\x5c\x54\x91\x83\x57\x07\x31\x6d\x5c\xf0\x92\x17\xb4\x2e\x10\x1e\xce\xa3\xe6\xf9\x9a\x0c\xfd\x75\x4d\x82\xfb\xe6\xcb\x03\x72\x24\x6b\x68\x3b\xa3\x82\x14\xcc\x41\xc9\x59\x5a\xb1\x44\x51\xe3\xf8\x19\x6f\xc9\x5d\x58\x17\x91\x98\xee\x64\xfb\xe6\x8e\x1b\xb4\x9c\x4c\x27\xdf\xcf\xdb\xf6\xb2\xe7\xc2\xdc\xae\x33\xf2\xad\xbd\x9d\x2d\xc7\x83\x7b\x23\x87\xab\x16\xdf\x78\xbe\x2b\xf3\x7c\x54\x78\x2b\xca\xb8\x2d\xa9\xda\xc8\xba\x4d\xf8\x19\xaf\x46\xbf\x4a\xf0\x8a\xeb\x8f\xac\x92\x5b\xe5\x71\xb1\xca\x15\x83\x16\xd7\xe6\x81\x54\x1c\xd2\xcc\x53\x4d\x28\xd2\xa8\xac\x29\xa8\x91\x7a\xd1\x60\x95\xc4\x88\xda\x76\x56\xd8\xcf\x4f\x61\x6a\xb1\x20\x92\xdc\x2a\x52\x7c\x4f\x26\x96\xaa\xf7\x6a\x4c\x7d\xd2\x5c\xc8\xa7\x01\xbe\x91\x5c\xbf\xf1\xd5\x62\x80\x61\x21\x85\x0d\x01\x34\x75\x5b\x1b\xd8\x15\xd7\x16\x63\x1c\x9b\x32\x3f\xbb\xda\x7a\x1a\x6d\x73\x77\x40\x0a\x7e\x3f\x8a\xbd\xdb\xd0\xda\x45\xdb\x96\xfc\xed\x12\x9b\xef\x44\xfa\x76\x95\x7b\x10\x2f\xf4\x4f\x68\x9f\xc7\x5e\xdd\xef\x5d\x5a\x22\x97\x58\x07\x7d\x60\x6b\x9b\x99\xfc\x70\x36\x3b\x9c\x01\xdb\x70\x38\x3b\x74\xac\x65\xe1\x9d\xa1\xed\x2d\xdc\x36\x9b\x96\x7d\xae\x7b\x5a\x66\x84\x7c\xe3\xf0\x09\x00\xc1\x78\xc5\xf3\xda\x3b\x55\xb7\x29\x95\x11\x7a\xae\x7b\xe6\xa2\x34\xc5\xa0\xc3\x6e\x2e\xc3\x8e\x5b\x57\xed\x2b\x7e\x63\xc1\x4d\xb7\x6a\xfa\x6a\x3b\x98\xb8\x1f\xc2\x91\x59\x25\xc2\xc7\xaf\xb7\xdb\x33\x24\x22\xc9\xfd\xb2\xb4\xc7\xf6\x2a\x93\x65\x89\x59\xb2\x16\x5e\x16\x6e\xb1\xf9\x62\x09\x5f\xbc\xfa\x02\x33\x86\xcd\x7b\xce\x61\x22\x49\x77\x95\xae\xa8\x2b\xfc\x63\x8b\x0f\x22\x5a\xa1\x0a\xc8\xa2\x5a\xd0\x9a\x29\xcc\xec\x6d\xf3\x18\xf7\xa7\xbf\x5c\xa1\xf2\xbe\x8d\x87\x55\x8d\x6d\x17\x77\xaf\x6c\x8c\xa7\x9e\x4c\xe4\x95\xe4\xfd\xe0\x59\x53\x52\x51\xfd\x30\x4e\x74\x3c\x85\xf5\x8d\x26\xee\x5c\xff\x9d\xdb\xba\xee\x41\x90\x14\xd1\x22\xc0\x05\xcb\xa2\x65\x25\x0b\x79\x15\xed\xfd\x13\x29\x4e\xea\xc5\x6e\x24\x49\xbd\x70\xa3\x6b\x87\xe0\x65\x26\x1d\x15\xe1\xb9\x81\x99\xb3\x69\x28\x95\x83\xf1\xb3\x8c\xdb\x0b\xbf\x2b\x5f\x7c\x3c\x3d\x79\xfb\xfe\x74\x56\xe6\xbf\xc4\x38\x90\x29\x9d\xc6\x24\x93\xfc\x1c\xb8\xea\xb5\x89\x44\x3d\x07\xd0\x04\x97\xc3\xb1\x4d\x47\x58\xb1\xba\xe4\x18\xa3\xb8\x4f\x76\x7b\xc7\x2b\xd4\xcf\x69\x1b\xaa\x78\xde\xbb\xad\xd3\x96\xc6\xd5\xd9\x25\xcb\x55\xcd\xa6\x3e\x5f\xd2\x9c\x17\x10\x84\xd5\xde\xe8\x01\x95\xee\xa9\xde\x69\x8e\x9d\x12\x1a\xeb\x28\x96\xab\x1a\xe4\x96\x3b\xf5\x3a\x7b\x44\x97\xee\xcf\xaf\xe9\x93\xa3\x5a\x4d\x1d\xbd\xc2\x7c\x47\xb5\xc5\x96\xad\x6a\x7e\xc3\x0b\x76\x05\x99\xa2\xb9\xb8\x52\x2d\xb6\xa0\x35\xa2\xf6\x34\x00\x71\x70\xac\xbd\x97\xbc\x99\xec\x3d\x98\x44\x3d\x5c\x12\x6e\xea\x0f\xdf\x7c\x82\x1c\xee\x60\x7f\xdd\xb1\xfa\xd8\x74\xa7\x97\xea\xef\x42\x6b\xbc\xbd\x9b\x66\xa7\x64\xda\x99\x83\x36\x6d\xdc\x48\x95\x1e\xea\xd4\x90\xe4\x53\xa2\x96\x65\xc1\xc5\xf5\xc4\xe7\xdf\x9a\x4b\x0b\x97\xca\x88\xf9\xc1\x6d\xe7\x9a\xd1\xe2\x31\x97\xc1\xd6\x37\x01\x49\xbb\x08\xf4\x8e\xf4\xf8\xc0\x58\x99\xb3\xfa\xbf\x1d\xd9\x41\xdd\x49\x22\x15\x8f\xb0\xcb\x3f\xbb\x69\xe5\x25\xbd\xda\xaa\xe3\x2f\x54\xd8\x21\xdb\x82\x7c\xf3\xe6\xcc\xa7\xd1\x0b\x15\x17\xf8\xae\xac\x09\xad\x35\x9f\xd3\x4c\x1f\x93\xaa\x81\x14\x29\x90\xf0\xc1\x5e\xb3\xf6\x74\xdc\xe3\x15\xd0\xd3\x9d\x4f\xad\x18\x09\x2e\x5a\x4a\x16\x37\xa6\x7e\x0d\x39\x93\x41\xee\x6d\x2a\xeb\x54\x00\x21\xab\x2e\xf9\xfa\x79\x53\x14\xe7\xb2\xe0\xd9\xd2\x67\x0b\x40\xf5\x4b\x6e\x48\x51\x2f\x2d\x3a\x29\x6e\xe9\x52\xbd\x0e\x7b\x4e\x28\x3c\x23\x54\x6b\x56\x56\xb8\x65\xcc\x70\x57\x41\x8b\x5b\x0d\x0c\xe6\xa3\x75\x79\xc7\xe7\x94\x17\xfe\xec\x37\xf6\x41\x2f\x2d\x9f\x92\x0f\xec\x86\xd5\xdd\x9e\x08\xf3\x08\x2a\x51\xdd\xd6\x61\xe2\x81\x9b\x69\x14\xc8\x37\x98\xa0\x60\x6d\xa1\x7a\x7a\xc9\xe7\x2b\xd5\x62\x72\x0f\xbb\x27\xfa\xbb\x7c\x36\xff\x20\xf5\x39\xbe\xdd\xed\x39\xf6\xf9\x9e\xfa\x69\x61\xb8\xb1\xa5\x6b\xc7\x2c\x66\xce\xd5\xf5\xa3\x3a\xeb\xe5\xb1\x70\xca\xe3\x37\x1d\x24\xa6\xad\x11\xc8\x10\x76\x9e\x6d\xcd\xec\x3e\xf8\xcd\x25\xda\x37\xcd\xd4\xcc\x86\x52\x4f\xec\x26\x2c\x19\x75\x29\x8e\x05\xbb\x85\x84\xe5\xba\x4d\xa0\x6b\x55\x2f\x99\x2c\x19\xa1\x37\x94\x17\xf4\xb2\x00\x4f\x0b\x53\xb9\xad\x2b\x42\x02\x3f\x81\x51\x81\x85\x51\xba\x13\x62\xd6\xda\xef\x4d\x5c\x7d\x0b\x3a\x13\x1e\x1b\xec\x40\x21\xb3\xeb\x90\xdf\x80\x34\x51\xca\x65\x6e\x87\x93\x4c\x97\x84\xe6\x39\x51\xfc\x4a\x40\xb8\xb3\xd0\xa4\xa0\x9a\x89\x6c\x39\x23\xef\xb0\x71\x15\x24\x54\xd6\x35\xf7\x7e\xfd\x02\xd2\x99\xb7\x49\x24\xb3\x6b\x39\x9f\xaf\x24\x60\xb6\xa6\x4f\x4b\x28\x70\xf4\x54\x49\x81\x8d\x33\xa5\xe8\x55\x14\xa1\x58\xcd\xc3\x82\x33\x6f\xc1\x07\x1c\x39\x72\xc8\x02\xce\x75\xa9\x76\xa1\xb1\x6d\xe8\xab\xdf\x6d\x75\x23\x34\x2f\xd9\x0a\xea\x26\x01\xfd\xed\x9a\x0b\x83\x69\xca\xc2\x92\x42\x60\x8a\x0d\x74\x75\xf9\x4d\x78\x6e\xfb\xb7\x66\xeb\x5d\x25\xa8\xe0\xef\x17\x33\xde\x80\x2e\xc3\x5e\x74\x43\x84\x9c\xc7\x16\xee\xa5\xe5\x52\x8e\x20\xce\xb6\x5d\xe8\x1f\x7e\xfd\xf7\xd9\x4d\x68\x63\x80\xcf\xcd\xf5\x79\x0c\x49\xfc\x59\x7d\xe5\xf2\x87\x94\x54\xf0\x39\x53\x66\xd5\x97\x66\x8b\x58\x3d\x1e\x64\xf8\xb9\x35\x9b\x03\xbd\x29\x56\x06\xd2\x4b\xdb\x3e\xad\xe8\x08\x83\x55\x6a\xc5\xb2\xa3\x5a\xf6\x5a\xfc\x2e\x9a\x4b\x64\xa7\xe0\xf3\x95\xce\xb8\x64\x55\x3a\x98\xf9\xde\xb9\x50\xcd\x65\x85\x33\xc1\xe6\xe6\xc6\x7f\x35\xfb\xdd\xef\x62\x86\x83\xbe\x9a\x50\xbb\x62\x59\x53\x73\xbd\x34\xc4\x8b\xdd\xe9\xd9\x5c\x41\xe6\x89\x37\x00\xc4\x60\xaf\xa6\x05\x05\x75\x10\x3a\x76\xe2\x01\x68\xb7\xa6\xd9\x2e\x7b\xf7\x42\xab\xfc\xbd\xb9\x0b\x4e\xcd\x0e\x7b\x6e\xc9\x93\xd9\x5f\xed\x26\x56\x33\x72\x2e\x15\x62\x3b\x78\xf4\x9e\x28\xd7\xdc\x67\x73\x5b\x9b\xf2\xd9\xdd\xd7\x04\x64\x92\xe7\x7d\x63\xf7\x8f\x20\xe4\xe4\x71\x3f\x98\x76\x5e\x03\x04\xa6\x26\x9a\x5e\xad\x24\xbb\x90\x75\x67\xd0\x2d\xd2\xf2\x96\xad\x08\x76\x8c\xbb\x38\x4d\x1f\x9d\x68\x4d\xce\x56\x37\x4c\x37\x9a\xc1\x62\xef\xc4\x4c\xe3\x97\x6c\x41\x6f\xd8\x46\x12\x5f\xc9\x7c\xb6\x81\x6e\xc2\x66\x8d\xa9\xda\xb0\xe4\x3e\x68\xc0\x83\xbf\x28\xc5\xca\xcb\xa2\xcd\x1f\xb2\x7a\xa9\x6c\xba\x21\x2f\x97\xa4\x90\x12\x60\x15\x9a\x8a\x08\x99\x33\xb3\xcd\xc0\x29\x81\x16\x6a\x42\x2e\x4e\xec\x8b\x55\xd0\x24\x42\x83\x01\xff\x53\xb1\x6c\xc3\x0b\x3b\x90\xaa\x03\xd4\x6b\xbc\x12\x63\x7c\xc6\x3a\x3e\xff\xd2\x06\xab\xb4\x49\x54\x6c\x3a\x8a\x82\xdd\x30\x30\xab\xcd\xf9\x15\x41\xb8\xed\xd2\x02\xb0\x39\x1f\x21\x59\x03\x88\x71\xcd\xf3\x18\x51\x78\xf5\xf6\x36\x0b\x72\x2b\xeb\xeb\x42\xd2\x3c\xc8\x3a\xae\x48\xc1\xaf\x19\x79\xcb\xaa\x42\x2e\x2d\x6a\x9a\xc8\xc9\x85\xa6\x9a\xcd\x9b\xe2\x22\x6a\x22\x63\xa5\x5b\x95\x29\xbe\x55\xe9\xd6\x54\xb8\x22\xdd\x9e\x5d\xbc\xb9\x38\x7b\x96\xde\xad\x8f\xd3\x35\xbc\xf8\x25\x8c\x76\xdf\x5a\x3c\xfe\x53\x9f\x39\x77\x4a\x8a\xa6\xff\x1d\x34\x90\x9f\xcb\x5a\xd3\x62\x4b\xbc\x4d\xb6\xa0\xd5\x49\xa3\x17\x6f\xb9\xca\xcc\xc1\x48\x65\x71\xd6\xbe\x0f\x40\x75\x18\x68\x85\x5d\x36\x7e\xee\xf6\x94\x7d\xef\xcd\xff\x3e\x39\x27\xb4\x31\xfb\x40\x5b\xb8\xa8\xad\xe9\xef\xc3\x91\x5d\x20\xc8\xe2\xc0\x71\xd9\xaf\x7b\x46\xe5\xde\xda\xf5\x98\x9e\x2a\x3c\x78\xf4\xfd\xdd\xa3\xef\x6f\x3f\x89\x22\x69\x0c\x17\x17\x5c\x73\xaa\x65\xbd\x2b\xa7\xc9\x4e\x03\xde\x97\xa2\x51\x5a\x96\xf6\x80\x9c\xb9\x37\x20\xc8\x26\xd2\x22\xb0\x56\x6d\xeb\x8a\x01\x76\x4a\x98\xa8\x33\xa1\x59\x3d\xa7\x19\x5b\x01\xb8\x98\x80\x7a\x09\x5b\xe7\xee\x9d\x88\x76\xff\x6c\xbd\x90\x20\xa1\x6e\xf1\x97\xd7\x7f\x0e\xdc\x88\xff\xe2\x59\x34\xab\xd4\x0a\xb9\x31\xc1\xb2\x38\xc8\xbb\x94\x95\xfb\x29\x95\x6e\xf1\x9f\xc4\x8a\x3b\x15\x4e\xc1\xff\x6d\x68\x81\x53\x17\xb7\x00\x29\x9d\xec\x2c\xc3\x4e\xf6\x57\x77\xa1\xed\xf8\xfc\xaa\x62\xe0\x16\xd0\x13\x14\x19\x85\x1d\xb4\xae\xa9\x50\x66\x21\x53\x85\xa5\x43\xcb\x2e\x1e\x92\x23\x9d\x55\x11\xde\xd5\x49\x91\x8f\x3e\xea\xd1\xfe\xa3\xe7\x83\x74\x78\xa8\xa2\x11\x21\x43\x87\x93\xf1\x09\xb7\xc3\xd7\x1e\x1e\x2a\x76\x54\x3b\x71\xe0\x86\xd3\xb5\x13\x38\x1e\x5b\xb5\xdf\x25\xe1\xe0\x91\x75\x22\x5f\x73\xa5\x11\x48\x02\x5f\x86\x40\x62\x84\xda\x31\xcc\xef\xb9\x91\x12\x78\xf5\x9f\x34\xcf\xeb\xd7\x78\xcb\x3b\x0d\x77\x1d\x13\x27\x6e\x44\x14\xed\xd3\xe3\x39\xc9\xe3\x48\x2f\x2b\x9b\xd8\xfc\xd3\x9b\x73\xa8\x4b\x91\x3f\xfd\xe1\x25\x70\xc3\xbf\xfb\xed\x1f\x5e\x46\x6f\xb3\xcf\x12\x93\x87\xfc\x0f\xf4\x25\xdf\x07\xd6\x43\x07\xaf\x01\xb0\x7d\x0d\x0f\x7a\x81\xd0\x06\xe6\x7a\xb2\xa4\x10\x0f\x80\xd9\x6b\xfe\x5a\x1d\xc6\xa9\x8e\x80\x03\x23\xe0\x40\x5b\x46\xc0\x81\xcd\x1d\x0b\x24\xf5\x9d\xb8\x77\x04\xf5\x03\xa4\xec\xfa\x2d\x87\x17\xdc\xf9\xe7\x78\xc1\xf5\x2e\x68\x3f\xb9\x48\x9b\xd2\x30\xc8\x2b\x0e\xd5\xab\x05\xc1\x7a\xfb\xe1\xe2\x3f\xbf\x3e\xf9\xf2\xf4\x6b\x18\xa7\x8d\x1a\x33\xdb\x9a\x8b\x1d\x29\xb5\xb6\x74\x88\x62\xe7\x7a\xbb\xee\xe9\x62\xc5\x31\x5d\x90\x0f\xef\x2e\x12\x7d\xd2\x77\xaa\x23\xfc\xa5\x98\xc7\xcc\xdb\x7e\xdd\xfc\xcc\x4b\x8a\xd5\xdb\x43\xc8\xdb\xa9\x37\x60\x90\xed\xb3\xa3\xc5\x31\x2b\x8d\xa3\xd8\x83\x1a\xa5\x6f\x19\xc9\x67\xe2\xb1\x6d\x26\x0d\x27\xf2\x59\xfa\x6a\xef\x66\x49\x62\x79\xe6\x3a\x1d\xe6\x31\x12\x1c\xad\x0e\xb0\x20\x0d\x41\xc2\x2b\xa2\x36\x97\xa7\xb9\x36\x99\x52\xee\xc2\xf8\x5c\x77\x75\xb5\x29\x4d\xc2\x36\x49\xfd\xc6\x06\x6c\x8a\x04\x97\xe3\x21\x70\x85\xef\x98\x67\xfb\x2c\x4b\x9b\x73\x3c\x84\xf6\x52\xb8\x00\x2b\x9a\xf5\x5f\xe5\x5b\xcb\x66\xd3\x3e\xc2\x27\x00\x6d\xbf\xf7\xcb\x04\x5a\xdd\x22\xd8\x88\xaf\x6f\x17\x07\xcd\x57\xbe\x8a\xbb\x4a\x53\x96\x98\x50\xe5\xfd\xe4\xd0\xc7\x2e\x09\xa0\xf5\x89\xf7\x00\x79\x86\x37\xd1\xf7\x3b\x53\xa0\x6c\x5b\x79\x52\x2d\xa4\x96\x62\x77\x30\x50\x9b\xea\xef\x12\xae\x73\x78\xe3\x8d\x77\x07\x08\x08\x1f\x22\x41\x78\x93\xf9\x8a\x0f\xb8\x35\x8f\xa7\xb9\x7f\x87\x01\x97\xe7\x9b\xfa\xf6\x70\xec\xe5\xc6\xe1\x3c\xa7\x30\xcc\x2a\x3f\x7b\xbb\x25\xca\x35\xa2\x29\x63\x79\xa6\x79\x2f\xcc\x4a\x27\x2e\x8e\xf9\xc4\xcd\xfa\xd9\x5b\x2b\x68\x38\xac\x39\x65\xcf\x03\xb9\xff\x28\x6e\x8d\x77\x92\xb5\xbe\x95\xf5\x0e\x50\xe6\xbb\x35\xaf\x04\x0b\xda\xdf\xd6\x30\x26\xb7\x4e\x57\xba\x9d\x48\x02\x8d\x5b\x1d\x81\x99\xd1\x9e\xa6\xef\x41\x8c\xbb\xcb\x67\xae\xae\x59\x26\xcb\x68\xb0\xb8\x1d\x10\x25\x9c\xf0\xcf\x81\x30\x5d\x00\x61\x0a\xb6\xcd\x43\x04\xea\xb9\xd2\xa7\xa7\xa5\x4b\x7b\x61\xb0\x7e\x56\x40\xe5\xee\x78\x24\xce\x98\xfb\xcc\x6a\x4d\xcd\x5a\xb7\xb4\x9c\x7a\x2a\x64\xdf\xdb\x1a\xed\xae\xe5\x3f\x80\xd0\x24\x90\x6d\xff\x0d\x9a\x55\x81\xe6\xd1\xa2\x30\xb3\x2a\x45\x9b\xf3\x43\xb5\x8e\xb5\xe8\x85\x5a\xd2\xca\x3a\xd9\xe6\xf2\x56\xdc\xd2\x3a\x27\x27\xe7\x67\xdb\xa1\x5e\x09\x30\x3e\xb8\xd7\xe2\x32\xec\x0d\x00\xf2\x69\xab\x07\x52\xae\x31\x1f\x22\x23\x97\x5c\xab\x4e\x86\xd3\x40\x47\x65\xee\x29\xef\x45\x63\x28\x8b\xa1\x22\xb6\xa6\x24\xbe\x49\x10\x99\x69\xea\x52\x72\x5e\x32\x7d\xcb\x98\x20\x2f\x5f\xbe\x44\xc3\xc3\xcb\x3f\xfe\xf1\x8f\xe0\x05\x4e\x72\x96\xf1\x72\xfd\x45\x78\xeb\xf7\xaf\x5e\xc5\x34\xfa\xef\x27\xef\xbf\x26\x34\x03\x21\x10\xb3\xea\x60\xdb\xb0\xc0\x61\xf5\x6a\x42\xfe\xcf\xc5\x37\x1f\xdc\x0d\xa3\x56\x7e\x85\xfd\xe3\xa7\x28\x4a\x78\xb2\x31\x4b\x1c\xa2\xca\x5a\xe3\x02\xd5\x0b\x1f\xcb\x43\xc1\x34\x19\xc4\x73\xd9\xb3\x1f\xe5\x99\x07\x40\xfb\xfc\x6a\x01\x93\xca\x05\xec\xdf\x82\x67\x16\x42\x09\xcd\x3d\x2e\x1f\x05\x86\xf5\x63\x80\x8e\xbb\x5e\x22\xda\x30\x03\x9e\xa0\xab\xb4\x0d\xfc\x69\x53\x53\xd7\x4c\x19\xd9\xd0\x66\x1f\xc5\xe6\xda\x3d\xa4\x58\x74\x0e\x8f\x5d\x78\xab\xd8\x6d\xf9\xad\xda\x8d\xb2\x31\xa8\xbe\x9b\x8b\xe1\xd3\x82\x11\x79\x2b\x58\x4d\x02\xc8\xe5\xc7\x1c\x9a\x20\x77\x0a\xb4\xd6\xba\xd4\xdb\x78\x9b\x1c\x73\x94\xce\x69\x51\x5c\xd2\xec\x1a\x53\x54\x02\x73\xa7\x59\x39\x45\xff\xfa\xa6\xf3\x65\x23\xa2\x16\x87\x90\xa3\x93\xa2\x5a\xd0\xe3\xd0\x9c\xee\x4f\x87\x69\xe1\x04\xec\xaa\xdf\x9b\xeb\x0f\x2f\x2a\xd3\xc3\x77\xe6\x3d\x45\xe6\x8c\xea\xa6\x66\xe4\x0a\x72\x13\xa3\x5d\x5c\xd0\xcb\x22\xfe\xe2\x1f\xb0\x2d\xfe\xf0\x45\x9f\xfa\x19\x69\xfe\x4e\xf4\xcf\xf6\x3a\xb1\xa2\x4e\xc1\x95\x0e\x72\x93\xda\xdb\x08\x54\xfd\xe4\x94\x66\x0b\xc2\x84\x06\xd4\x30\x3c\xf7\xe6\xf5\x88\x46\x16\x54\xe4\x66\x0f\x41\x12\x0b\x68\xf0\x89\x3c\x90\x86\xf8\x74\x9c\xfb\x39\xe8\x84\xb4\xb6\x17\x35\x2d\xa4\xb8\x0a\xa9\x57\xcb\xaf\x06\xc1\x84\x91\x59\x75\x4f\xef\x28\x80\xa9\x98\xa9\xc2\x73\xa8\x6c\x60\xa3\x0a\x53\xae\xc5\x54\x96\x98\x18\x3f\xcd\x8f\x86\x90\x0c\x31\x72\x3e\xd5\x8d\xd2\x5f\x36\x66\x81\x63\x13\xbc\x0e\x4d\xa9\xfb\x66\xad\x45\x74\x61\xb1\x76\x5b\xd0\xe6\x67\x19\x53\xb8\x95\x7f\xc4\x78\x29\xdd\xbe\xfd\x23\x4e\x64\x74\x7b\x72\xbe\xa9\x49\x17\xdf\xcc\x85\x61\x09\x68\xa3\xe5\x14\x72\x99\x3b\x5c\x9d\xde\x08\xf7\xb6\x00\xa1\x9a\x00\xb1\xf1\xb2\xcd\x7a\x8b\xc1\x06\x0c\xc9\x53\x42\x3b\x0f\x8c\xc2\xdc\x83\xd6\x61\x03\x76\x56\x9b\x6c\x5a\xd0\x92\x41\xa4\x1e\x76\x2c\xba\xb1\x95\xd4\x81\x8a\x5f\x99\x7b\x05\xb4\xed\x10\xa9\x4d\x0a\x7a\xc9\x0a\xdb\x94\xac\x13\x86\xf1\x95\x8b\x8a\x64\xb5\xa1\x9e\x8a\xd0\xab\xab\x9a\x29\xc5\x6f\x98\x0d\x75\xe7\xff\x6c\x53\x16\x2e\x18\x39\x3f\x7d\xef\x02\xfe\x15\x31\xf2\x8e\x66\x31\x70\x87\x58\x3c\xd8\xa6\xd9\x5a\xad\x48\x3a\x23\xe4\x54\x49\x0d\x89\xf8\x4c\xfd\x76\x49\x94\x4f\xbc\x0d\xde\xc2\x53\x88\xec\x4f\x99\xb3\x36\x9a\x0b\x41\x01\x16\x8c\xe6\x2e\x7e\xda\x48\x1a\x55\xc5\xf2\x19\x21\x6f\xcc\x11\x9d\xdb\x64\xf0\x18\x3f\x9f\x37\x46\x82\xa5\xbd\x2a\xd4\xb0\xc0\x85\x5f\xe7\x0c\x53\xcd\xcf\xc1\x29\xcb\x57\x1b\xb0\x7d\x00\x14\xc5\x4d\x4b\x97\x5c\xd7\xb4\x5e\x22\x23\x65\x57\x22\xba\x39\x43\x33\x31\x09\x3e\xd4\x0a\x2d\x43\x78\x1c\x89\x41\xfe\x73\x25\x91\xa0\x91\x04\xc5\x4b\x5b\xa2\x7c\x24\x5c\x49\xa5\x99\xa6\xc0\xf6\xbf\xb0\xbb\x3f\xfe\xb3\xc7\x64\x22\x27\x04\xdb\x03\x49\x72\x9d\x18\x78\xac\x06\x9d\x2d\xec\xbd\xde\x3d\xa2\x84\xa0\x82\x80\xc6\x7a\x16\x62\xb1\x91\xf5\xdc\x11\x01\x1f\x5d\xc1\xf4\xcc\xc8\x55\xba\xa1\x45\xb1\x9c\xb2\x3b\x73\x95\x98\x43\x0c\x77\x28\x80\x89\x42\x58\x06\x70\x7c\x93\xa4\x26\xe1\xf0\x55\x35\xa2\x82\x28\x72\x80\x63\x12\x12\x60\xc2\x0e\xb0\x5a\x23\x1f\x5e\x36\x1a\x5d\x19\x27\x9b\x3f\x49\x1b\xe7\x0d\xab\x97\xb6\x85\x84\x0f\x07\x6c\x67\x32\x70\xcf\x11\x38\x83\x3a\x5b\x9c\xde\x55\x35\x86\x90\x25\x7e\xbd\xb2\xfd\x56\x2b\x43\x2c\x2d\xc7\x3d\x76\xb7\x8f\x3b\x84\x40\xe1\xd0\x59\x30\x7c\x02\x54\xec\xe4\xc3\xdb\x14\xf2\x85\x25\x85\x45\xec\x96\x68\x86\xb1\x5b\x1e\x73\x02\xb1\x9c\x3c\x30\x37\x16\x8f\xcc\xfd\x82\x10\xd2\x2e\x13\x9c\x13\xf6\x29\xb9\x66\x96\x08\x53\x61\x75\xa0\xf6\xe5\x01\xdd\xa9\x19\x84\xe8\x23\xe6\x00\x5b\x42\xb5\xd8\x52\xea\x5a\x0c\xde\xce\xae\x23\xa9\x74\xba\x2d\x53\xd3\xf5\x41\xdf\xb9\xe9\x4b\xfe\x78\xe8\x19\xc4\x72\xcd\x22\x34\xbe\x9b\x4a\x67\xff\x99\xf5\x72\x52\x1b\xec\x29\xf3\xc0\xc7\x3a\xfa\x6d\x44\x01\x81\x5a\x11\x2d\xd3\x97\x94\x0c\xf1\x7c\xee\x16\x37\xc5\x5b\x18\xf0\xa0\x03\x17\xf6\xa1\x6b\xe3\xba\x66\xcb\x43\x85\x27\xc0\x50\xb0\x05\xaf\x30\x83\x9a\xb9\x1e\x8c\x04\x3c\xf0\x18\x60\xf9\x0e\x30\x87\x5c\xc3\x48\xe3\xce\xc4\x84\x7c\x90\xda\xfc\xef\xf4\x8e\x2b\xcb\xed\xbd\x95\x4c\x7d\x90\x1a\x9e\x3c\xc9\x0a\xe1\x40\x9f\x72\x7d\xac\xaa\x92\x83\x93\x2e\x90\x73\x10\x1c\x60\x40\x6e\x1d\x1c\x1c\x8c\x5f\x4b\xae\xc8\x19\xe0\xaf\xe3\x94\x0e\x6c\x1a\xfc\xb0\x1d\xdc\x8d\x69\xd8\xc9\xd8\x42\x8a\xa9\x8b\x88\x58\x6f\xd9\xae\x9f\xac\x3b\xcb\xb7\xf5\x4e\xd8\x0e\x80\x22\x0b\x7f\x01\x1c\xbe\xaa\xa0\x19\xcb\x1d\xa8\x18\x35\x33\x45\x35\xbb\xea\x8d\x15\xb8\xaf\x94\xac\xbe\x02\x0d\x6f\x16\x05\x6e\xb9\x61\x00\x83\x2f\x62\x2c\x03\xaf\xe3\xb0\xf1\xc1\xdb\xff\x91\x91\x66\x3b\xac\x0c\x78\xac\xaf\x0d\x69\x7f\x1c\xaf\x36\xe0\x5c\x06\x4d\x23\x57\x52\xd2\xca\x9c\xc9\xff\x32\xcc\x07\x6c\xd5\xff\x26\x15\xe5\xb5\x9a\x91\x13\x07\x76\x16\xfe\x66\xa5\xc7\xa0\x9a\x01\x5d\xa8\xc0\xb3\xfb\xa7\x86\xdf\xd0\xc2\x82\xab\x50\x41\x18\x82\xc1\x99\xde\xac\x32\xa1\x13\x72\xbb\x90\x0a\x39\x19\xaf\x36\x3e\xb8\x66\xcb\x83\x49\x92\x06\xc3\x95\xf0\xc4\x1f\x9c\x89\x83\xd6\x88\xd0\x39\xad\x9e\x47\x03\xdd\xf6\x01\xfc\x76\xb0\x7d\x3e\x77\x10\x67\x35\x34\xf5\xf6\xa6\x0e\x24\x1f\xb1\xc7\xc4\x35\xb5\x25\x3e\x62\x0f\xcb\x36\xc4\x64\xb7\xa7\x37\x28\xce\x2e\x97\x0e\xf6\xcf\x0a\xaa\xeb\x72\x6c\x52\x93\x20\xf3\x06\xf2\xb1\xd9\x62\x1d\x15\x41\xba\x48\x99\xb8\x50\x0e\xe5\x68\x5f\x93\x6c\xee\xd3\xba\x61\x13\x92\x4b\x71\xa8\xad\xba\x2b\x84\xc6\x5c\x85\x28\xcb\x37\xac\xc3\x91\x3a\x4e\x6a\x94\xd6\x0c\x30\xd3\x1c\xd4\xa7\xd5\x30\x20\x4c\x26\x68\x3a\xb5\xb3\x40\x99\x3f\x37\x35\x19\x1f\x58\x69\x9b\xb4\xe1\x95\x42\x02\xed\x02\xf0\xf5\xb0\xd9\x76\xd1\x83\xc6\xbb\xda\xd3\xa4\xf6\x1e\xda\x44\x40\xc5\xdb\x70\x4f\x54\x8b\xfc\x93\xd5\x32\xa9\x85\x0d\xaa\xa3\xf4\xdd\x19\xe7\xe8\xd1\x96\xb8\x00\xa2\xb6\x74\xb6\xe6\x47\x60\xef\x6f\xac\xfd\x1a\xd0\x55\x03\x7c\x99\x5a\xe2\xd2\x80\x2b\x0c\xfc\x70\x09\xa3\xda\xf9\x91\x6b\x97\xea\x99\x2a\x00\x03\xad\x7d\xda\x6d\xd5\xa3\xd5\xfb\xb4\x60\xad\x46\x5e\xce\x6d\x2a\x7b\x34\x3a\x3c\x76\x2b\x7a\xcc\x94\x46\x20\x00\x09\x3a\x4b\x0c\x51\x8f\x0f\x5c\xd6\x26\xca\x6e\xdf\x96\xc7\x2c\x68\x93\x6e\xc4\x4f\x5b\xc9\xb3\xb5\x94\x52\x9b\x4d\xf3\x9a\x5e\x33\x45\xaa\x9a\x65\x2c\x87\xa0\x1a\xd0\xeb\x07\xc6\xff\xb4\x66\x9f\xca\x7a\xdf\x96\x34\x3b\x7e\x5b\x52\x2c\xfa\x58\xd0\x75\xeb\x3d\xad\x06\x59\x4e\xfd\xd7\x10\x4f\x62\xda\x86\xe4\x76\x97\xb2\xd1\x0e\x2a\xc8\xfe\x0e\xd9\xc4\xb5\x74\x36\xeb\xdd\x99\x5b\x86\xe8\xc5\x92\x85\xbf\xc7\x9c\x1a\x74\xaa\xeb\xba\x74\x4e\x08\xa3\xd9\xc2\x48\x0d\x53\xf4\xd8\x32\x92\x8d\x13\x61\xde\x9a\xa9\xc3\x6d\x28\x57\xd9\x92\x34\x82\xe5\x57\xc3\x91\xa9\xc0\xd5\xcf\x99\x1a\x9d\xbb\xb5\xb2\x5e\xb0\x56\xa0\x11\x6d\xd8\x52\x52\x9b\x4e\xa5\xeb\x40\xcf\xad\xba\x10\x46\x39\xdb\x70\xc0\x8d\xbc\xca\x72\xf3\x99\x27\xa6\x49\xed\x6d\x18\x51\x8b\xa4\x65\x6e\x60\xeb\xa2\xd8\x88\xb5\x96\x0c\x93\x94\xdc\x1a\x22\xec\x9a\x81\x50\xa7\x0e\x0d\x90\xbb\x00\x05\x1e\x62\x4d\x5a\x78\x5b\xbb\xaa\x7e\x31\xd2\x54\x36\xc1\x12\x29\xe6\x41\xdc\x59\x5d\xcb\xda\x8c\x89\x29\x45\x38\xcc\x72\x49\xeb\x6b\x96\x7b\xce\x7a\x46\xce\xcd\xe0\x9d\x5e\x27\xa9\xcd\xda\x71\x30\x0e\x0c\x3e\x4c\x3f\x68\x3a\x74\x38\x9b\x1d\xda\xdc\x28\xeb\xc9\x08\x93\xc9\x5e\xaa\x12\x67\x80\xea\xa6\x73\x7e\xdf\xd3\x4a\xa1\x0a\xcb\xb0\xc4\xa0\xc2\x96\x90\x05\x54\x2f\x9c\x1d\x9a\x26\x84\xd7\xad\x0e\x67\x80\xd0\x3c\xd4\x14\x31\xc4\x0c\x91\x64\x6c\xc6\x32\xdc\xf4\x30\xc8\xec\x70\x9f\xc9\xc1\xae\x94\x3d\xf1\x43\xad\x45\x83\xb4\x76\x65\x94\x77\xf1\x6a\x79\xbc\xaa\x1a\xbc\x44\x3b\x1c\x57\x94\xef\xb1\x5e\xd8\x1c\xf7\x43\x74\xab\x4f\xe2\x7c\xbc\x5a\x9e\xce\x19\x79\xb5\x9c\xcd\x31\x97\xc0\xc6\x54\xa7\xa1\x77\xb8\x17\x05\x22\x91\xb7\x57\xcb\x3e\xbc\x94\x57\xcb\x8e\xbd\x96\x57\xcb\x50\x36\x17\x4b\x8a\x57\xf3\x6a\x49\x95\xe8\xb1\x3c\xfe\x00\x87\x79\x1e\xeb\x8e\x62\xc0\xb2\x76\xc0\x72\x81\x7a\xa4\x0a\x88\xdc\xa0\x73\x6b\x2f\x6a\x3c\xba\xf4\x52\xc9\xa2\xd1\xf1\xc9\x24\xef\xab\x2e\xbc\xf7\xa1\xe3\x4e\x1b\x9e\x7a\xd9\xaf\x56\x1c\xf0\x0d\xc0\xb5\xe1\x75\x3c\xac\xd6\x47\x90\xf6\x54\x01\x1a\xcb\xe3\x77\xc6\xce\x85\x69\x2c\x4f\x24\x52\x63\x79\x7a\xc1\x1a\xcb\xd6\xe8\x4e\xa4\x90\x8d\x65\x4b\x76\xb9\x7d\x1a\x23\x1e\x03\x25\x88\x65\xdf\x80\x82\x58\xf6\x0c\x2b\xe8\x1a\x7d\x0c\xb8\x20\x96\xa7\x85\x18\xc4\x32\x90\x78\xa6\xc0\x0d\xba\xf2\x68\xbb\x8f\x4f\x8f\x81\x44\x6d\xe9\x31\xeb\x3b\x22\x36\x40\x00\x6a\x85\xb2\xbe\xf3\x6c\xb0\x59\xbf\x76\x6c\x3c\x78\xbc\x01\xd2\x05\x53\x9e\x9c\x9f\x0d\xd2\xd1\x05\xdf\xdf\xa3\xa5\x0b\xdf\xf8\x19\xeb\xe9\xce\x50\xf1\x16\x7a\x89\xbe\x6d\x47\x6e\x23\xf8\x13\x19\xe7\xa7\xd1\x58\xac\x75\xfb\x9d\xe1\x1a\x43\x14\xec\x60\x9d\xb5\xb4\x4c\x43\xcb\x5f\x5a\x1e\xce\xa5\x77\xc3\xe8\x82\x94\xb0\x14\xf2\x34\xda\x8d\x3d\x6a\x2a\x60\x3e\xa2\x10\x8a\x57\x4b\x67\xa5\x0e\xdb\x1c\x4d\x68\xfe\x42\xb5\x6a\xa0\xcb\xad\x64\xfe\x1a\xdd\x36\xa8\x10\x12\x33\x0c\xaa\x09\x9a\x4e\xd5\xc4\x1a\x86\x03\xf0\x27\x91\x93\x86\xe7\x18\x93\xe1\x71\x6b\x0e\x07\xb2\x40\x4f\xe2\x2a\x0b\xc3\x3f\x4f\x5d\x4a\xf2\x68\x9f\x57\x5a\xf1\xef\x58\x1d\x97\x1f\x65\x53\xe9\x2c\xac\xad\xc9\xad\xa2\xca\x16\xac\xa4\xf0\xcf\x77\x6e\x78\x86\xd4\xd8\x88\x1f\x50\xfa\xb2\xba\x34\xac\xc7\xa4\x03\x87\x70\x70\xf3\x2a\xc9\x63\xbf\x2d\x8f\x74\x3a\xf3\xab\xb0\x85\xc9\x38\xef\x08\xb0\x20\x3e\x48\x6b\x53\xf5\x18\x66\x5e\x29\x6e\x6e\x99\x1b\x9c\xbd\x27\x18\xf8\x76\x1c\x82\xb0\x3c\x95\x16\x70\xa8\xf6\x6f\xe2\x79\x9f\xae\x2e\x6f\x40\x17\x46\xed\xdf\xa8\xfd\xfb\x1f\xad\xfd\x0b\x2e\x76\x47\xeb\x37\x28\xf5\x42\xac\x6d\xa7\xd9\x6b\x33\xea\xcc\x50\xb7\xee\x94\x74\x4e\x43\xd7\x26\xaf\x45\xe3\xda\xe1\x6c\x76\x88\xe6\xb5\x99\x57\xc6\x37\x7a\x3e\xfd\x13\x61\x22\x93\xb9\xa9\x07\x53\xcf\xd6\x4a\x03\x6b\xd9\x4a\xec\x61\x5f\x4a\xd7\x56\x68\xa0\x83\xba\x87\x72\x0f\x83\x48\xb0\x83\x8f\x79\xb7\x1d\x06\x6b\x10\x01\x6d\x59\x31\x9f\xf1\xcf\xa9\xd7\x5c\x12\x44\xcb\x93\xb5\x60\x37\x05\x2f\xb9\x8d\x97\x30\xd4\x85\x29\x9d\xee\x50\x4c\xc8\x11\x56\x33\xcb\xaa\x66\x62\xab\x9c\x95\xac\x94\xf5\x72\xe2\xab\x35\x3f\x76\xda\xb1\x6f\x1c\x03\xd3\x97\x35\x75\xcd\x84\x2e\x96\xb1\xb0\x85\x9b\xca\x13\x72\x7f\x6e\x46\xf7\xcc\xfc\xf9\x85\x4d\xf5\x78\x6b\x4b\xf7\xfc\xb7\x19\x6e\x41\x21\xe7\x67\x05\xee\x18\x0b\x90\x3a\x69\xf5\x13\xe6\x29\x13\x37\xe4\x86\xd6\x2a\xfd\xbc\x91\xc7\xf3\x7b\x39\xbf\xe1\x6a\x2b\x41\x50\x17\xf6\xf2\x43\x9d\xad\x6c\x74\xd5\x68\x4b\x8e\xdd\x31\x72\xb9\x2e\xfd\xf1\x59\x61\x7a\x5f\xc5\xab\x88\xc2\x52\x51\xad\x59\x2d\x5e\x93\xff\x77\xf4\x1f\xbf\xf9\xd7\xf4\xf8\xaf\x47\x47\x3f\xbc\x9c\xfe\xdb\xdf\x7f\x73\xf4\x1f\x33\xf8\xc7\xaf\x8f\xff\x7a\xfc\x2f\xf7\xc7\x6f\x8e\x8f\x8f\x8e\x7e\xf8\xea\xfd\xdf\x3e\x9d\x9f\xfe\x9d\x1f\xff\xeb\x07\xd1\x94\xd7\xf8\xd7\xbf\x8e\x7e\x60\xa7\x7f\x8f\xac\xe4\xf8\xf8\xaf\xbf\x1a\xd4\x5d\x2a\x96\xdf\x0c\xa0\x6f\x58\xa6\x8f\xbc\x1f\xbb\xb5\x6c\x2b\x36\x85\x0b\x3d\x95\xf5\x14\xab\x7b\x0d\x4e\xd4\x03\x2a\x75\xdb\x62\x1b\xe7\xb0\xbd\x87\xdb\xec\xad\x4e\xf8\x78\x82\x83\xb6\x4d\xf9\x62\x34\x45\x8d\xa6\xa8\x87\xcb\x13\x9a\xa2\x2a\x99\x07\x40\x20\xbb\xc6\xdd\xb1\x00\x34\xca\xe3\xdd\xd4\xa0\x2a\x13\x57\x41\xe2\x6f\xeb\x39\x4f\x8e\xaa\x9a\xdf\x98\xa5\xf1\xbe\x87\x6d\x3f\xa3\x1b\xcc\x16\x94\x8b\xe3\x36\x98\xb9\x92\x39\x08\x3f\x8d\x62\x3e\xbb\x90\x61\x20\x3f\x7d\x7d\x41\xb2\x82\x43\x38\x58\xed\x53\x23\x44\x37\xe3\xf0\x64\xae\x98\x60\x35\x02\xaa\x90\xd5\xee\x43\x9e\x47\xae\x91\xac\x89\xbc\x37\x5d\x40\x30\x6b\x9d\x35\xfa\x88\xec\xa4\x83\x9c\xc5\x18\x13\xf4\xb2\x07\x78\x0d\x0b\x7f\x6e\xfd\xee\x69\x55\xd5\xf2\x86\xa5\x79\x7c\x5a\x8e\x15\x53\xaf\x29\x05\x01\x6a\xe1\xf4\xe3\xb4\x4e\xfc\xb0\x21\xea\xa1\x13\xfb\x1f\xbf\x40\xab\xb5\x92\xfb\xb0\x72\x3e\xd9\x87\xb9\x64\x2a\x10\x80\x1a\xa1\xf9\xc3\x99\xa5\xef\x69\x4e\x91\x05\xbd\x61\xe4\x92\x31\x81\x83\x44\x9e\x0f\x3c\x78\xbb\xa7\x22\xf0\x46\x8d\x84\xf5\x74\xc5\xde\x64\x5c\x80\xdd\x0a\x50\xa4\xd2\x37\x95\xd5\x41\x5c\x99\xb9\xa9\x97\xa0\xed\x97\x04\x0e\x0e\xae\x74\x38\x85\x76\x9b\x6b\x5e\x9a\x56\x73\x8c\x56\x88\x6e\xd1\x02\x47\xd9\xad\xe3\xb2\x12\xb0\xcd\x1b\x70\x76\xa1\xa9\x6e\xd4\xec\x4b\xd3\xb3\x8f\x6c\x5e\x33\xb5\x38\x89\x17\x43\x4c\x17\x95\xa6\x65\x35\x60\x46\xcc\x09\xc6\x48\x1b\x1f\x5f\x87\x8a\x31\x3f\x64\x37\x94\x96\xac\x58\x04\xac\x14\x7d\x35\xdc\x27\x13\x24\x08\x15\x35\xe7\x1a\x77\xe4\x86\x76\xae\xd9\x12\xf4\x07\x03\xb7\xfe\x1b\xb3\xf3\xa1\x02\x04\x68\x4b\x98\x93\x4f\x9d\x51\x3a\xe2\x89\x00\x20\xed\xd4\x98\x2d\x08\x18\x53\x70\xd3\xd8\xd3\x84\xaa\x86\xf3\xd3\xf7\xd1\x8d\x59\xcc\x3e\x9b\xb9\x22\x20\x70\x47\xa6\xfe\xaf\xde\x5c\xfc\xf2\x4f\xb6\x89\xe3\x50\xe7\x54\x5a\x2b\x55\x6a\x53\xdc\x22\x53\xad\xee\x72\x24\x14\xf6\xd0\x76\x37\x6d\x9b\xd1\x2d\xde\x21\x1b\x3f\xb5\xee\xe3\x35\xd3\x4d\x0d\x2a\x1b\x5e\x6f\x6a\x54\x90\x82\xd1\xf9\x14\xee\x2e\xa9\x11\x80\xea\x38\x61\xbd\xce\xc1\x01\x23\x38\x5c\xeb\x8b\x87\x33\x38\x31\xeb\x97\x31\xb2\x94\x8d\xc5\xde\xc0\x9c\x97\x24\x93\x79\xc2\x05\x48\x05\x00\x38\x9b\x9b\x07\xd9\x02\x33\x37\x18\x3c\xb8\x94\x0d\x5c\x84\xc1\xe6\xdd\xb8\x29\xe3\x67\x72\xad\xaf\xa0\xad\x2a\xe9\x35\x23\xfa\x56\x76\x8f\x11\x74\xcb\xc3\x31\x28\x46\x32\xc9\x45\xc6\x13\xc6\x86\x2e\x1f\x9d\x45\xaa\xad\xe9\x6d\x62\xdd\xe7\x2b\xa9\x14\xbf\x2c\x82\xd4\xed\xab\xd7\xb2\x59\xcd\x41\xb7\x95\x99\x3d\x98\xd9\xd6\x95\xbe\xae\x99\xaa\xa4\x00\x0d\x3e\xdc\x23\xa0\x60\x9d\x11\xf2\xef\x2b\xf3\x92\x30\xc4\xa2\x20\x82\xa1\x51\x20\x5b\xb0\xec\xda\x62\xd7\x73\x45\x32\x29\x30\x24\x7b\x62\xd5\x4c\x53\xe8\x0e\x5c\x88\x66\xa8\xcb\x24\xd7\x97\x4c\x0a\x9b\x75\x20\x91\xf8\x84\x0c\x08\xe8\x67\x6a\x59\x28\x92\x2d\xa4\x54\x96\x27\xe8\x2a\x15\xc2\x39\xe4\xf1\xf7\x05\xf2\x21\xff\x0b\xfa\xd9\x14\x3a\x3c\xf3\xbc\xac\xd0\x79\x11\xe6\xf6\x50\x91\x5c\x66\x8d\xff\xdb\xcc\x5c\xc1\x68\x2d\xc8\x42\xde\x12\x1d\x1f\xa7\x6a\x8e\xc6\x4a\x87\x6d\x54\x86\x4a\xc0\x73\xd9\x13\xd4\xdc\x35\x5b\x7e\xea\xcf\x5a\x10\x7e\xd1\x46\x8e\xee\xd0\xd5\x63\x13\x39\xd9\x97\xd7\xdb\xf7\x3e\x16\x77\x9d\x8c\x03\x31\x30\xf4\x01\x94\xfe\xd6\x0d\x76\x85\xcb\x4b\x38\x07\x04\x7c\xbe\x0c\xc7\xdc\x9e\x71\x45\xd4\x42\x36\x05\x30\xfe\x1b\xf9\x90\x19\x21\xdf\x2f\x98\xb0\x57\x81\x25\xc2\x69\xae\x6a\xf7\x11\xec\x75\x42\x6c\x68\x88\x6a\x89\x88\x27\x87\xa9\x91\x26\x8e\x64\x76\xb9\xce\x9a\x05\xf4\x63\x42\x2e\x59\x46\xcd\xa8\x57\x69\xb0\x44\x82\x99\x1a\x7c\x86\xb0\xd1\x25\xcf\xa7\x8e\xbc\xef\x3c\xfe\x76\xd3\x7a\x3d\xc1\xbe\x5d\x63\x0d\x76\xb0\x6f\x23\x19\xc8\x2e\x88\x5c\xd9\x14\x9a\x57\x05\x02\xa3\x02\xee\x42\xa2\x1d\xb6\xc3\x7f\x5a\xe4\x06\x68\xf3\xfc\xe3\xd9\x77\x27\x9f\x4e\xc9\x57\xa7\xff\x8e\x8f\x27\xa1\x9f\x13\x75\x5c\xa6\xbd\xc6\x93\xda\xbc\x66\xcb\x01\x73\xd3\xb2\xaf\x38\x4e\xd8\xed\x6f\x4e\x3f\x7e\x3a\x7b\x77\xf6\xc6\xf4\x14\x1f\x4f\x56\xdd\xb1\x90\x3d\x4d\x6a\x6e\x9d\x4e\x79\x9c\x01\xc7\xde\xc2\xd9\x43\xcc\xbe\x25\x02\x4e\x96\x2c\xe7\xe6\x6a\x4a\x61\x42\x4d\xf9\x56\x75\xf5\x2e\xed\x46\x27\x90\x88\x07\x48\xc8\x39\x24\xb1\x5d\xe5\x3e\x91\xa3\x73\xfb\x23\x8d\x7e\x00\x0f\xea\xe8\x00\xd5\x86\xdf\xae\x39\xbb\x41\x15\x83\xa7\x21\x9b\x94\x3e\x38\x25\x9e\x75\x4d\xf5\x20\xfb\x87\x35\xab\x97\xa8\x81\xe9\x0a\x74\x1b\x99\xec\x0e\xf7\x95\x36\x4a\x0f\x96\x53\x2c\x57\x29\xee\x1a\xf5\xbc\xa5\xca\xc9\x32\x56\xf7\x01\x1b\x35\xbe\xb5\x41\x14\xce\xde\x37\xfb\x27\x6a\xb0\xb2\xe3\xf5\x3b\x5e\xbf\x0f\x14\xcb\xcd\xee\x6b\x73\x1a\x32\x0f\x41\x04\x72\x6e\x9a\x86\xa8\xfd\x8e\xf6\xcd\xe9\x75\x7d\xe2\x30\xc8\x90\x9e\xd4\x06\xe2\x38\x7a\xb8\x2f\x46\x0e\x3e\x5e\x9c\xfc\xee\xe5\x1f\x7f\x7b\x30\x81\x7f\x7e\xf1\xf2\xdf\xfe\x60\xfe\x79\xfa\xe6\xed\xc5\xc9\xf9\x6f\x7f\x1f\xfc\xf1\xbb\x3f\x7d\x71\x90\x16\x5e\x6e\x3f\xfc\xfd\x6f\x5f\x59\xa8\xb1\x83\xd3\xb7\xbf\xfd\xfd\xef\x5f\xfd\xdb\x00\x58\xe1\xc4\xa5\x2b\xe9\xdd\xe9\x5d\xc5\x31\xd3\xda\x05\x33\x42\xea\xde\x30\x19\x36\xb5\xed\xb4\x55\x25\xbd\xe3\x65\x53\xfa\x84\xec\xe8\x5e\xa7\xb5\x55\xfb\xa6\x1e\x8a\xe0\xfc\x25\x6e\x04\xaf\xc4\x94\x15\x1a\xdf\xb9\xc5\xe4\x25\x37\xac\xbe\xa4\x1a\x12\xc6\xda\x8b\x60\xa3\xe2\x55\xa5\x88\xcd\xa6\xb4\x56\x09\xaf\x3b\x68\xd3\x71\x24\xf6\xfe\x6c\x4e\x24\x4e\xdb\x04\x72\xf6\x4d\x69\xc5\x6d\xe6\x69\x38\x29\x8a\x69\x6b\xe4\xf8\xd3\x1f\xbe\x78\xf9\xf2\xe8\xb7\x5f\x90\x85\x6c\x6a\x75\x3c\x5b\x79\x3d\xa9\x55\xab\x99\x83\x2b\xdc\x1e\x21\xb5\x90\xb5\x86\x08\x11\x2a\xc8\xef\xfe\xf0\xf2\x25\x39\x7a\x05\x4d\x1d\x5b\xed\xa6\x5b\x70\x08\x22\xa2\x97\x89\x7c\x0a\xae\x08\x57\xe4\x8f\x7f\xfa\xc3\x6f\xbf\x30\xb5\xff\xdb\x2b\x92\xd3\x65\x32\x9b\xf5\xe9\x3e\x3d\x85\xdd\x98\x86\xc7\x63\x40\x9c\x81\x07\x58\xd1\x67\xd9\xa8\xa6\xb4\x4b\xc2\x6f\xf1\x5f\xdb\x49\xfa\x35\xce\xd2\xfb\x0d\xc7\x03\xc3\xb6\x84\x5c\x9f\xcf\xa4\x26\x95\x3d\x6c\x9d\x35\x40\x1d\x95\xd2\x35\xe5\x08\x19\xc2\x04\xe4\x83\x03\x9d\x6d\x77\x37\xa4\x09\x0f\x3f\x76\x82\xa9\x7e\xec\x2a\x70\x05\xc3\x34\xe8\x66\x32\xd7\x92\x11\x40\xd0\x08\xce\x4e\xda\x94\x62\x8a\x59\x98\x1c\xb7\xa5\xf7\x8c\x04\x94\xe0\x1e\xb9\x05\x50\x30\x4b\xa5\x0e\x95\xa7\x1e\x39\x79\x73\xf1\xb1\x85\xc6\xb2\x19\xe5\x1d\xd3\xea\x91\xbe\x46\x68\xac\x94\x06\x46\x68\xac\x9d\x43\x63\x11\xbb\x8e\x27\x6d\x5c\xce\x3e\xb7\x4f\xd0\x2c\x5e\x45\x60\xc4\xa6\x8d\x5e\xc8\x1a\x24\x82\x8a\x2a\x15\x08\x8c\x2b\x41\x5f\x49\xed\xdd\xab\x13\x9f\x21\xdb\x81\x24\xb3\xb5\xa0\xd7\xcc\x9c\xbd\x0c\x7c\x1e\x6e\x0c\x7f\x8a\x26\xe5\xc4\x28\xdd\x92\x69\x0a\xf1\x86\x90\xc7\x68\x49\x6e\xe9\x00\x35\x8b\x62\x21\x6f\x0c\xbc\x51\xbe\x81\x21\xfa\x11\x6c\xe8\x8d\xb8\x61\x35\x9c\x99\x6f\xbb\x33\xfc\xa3\x0f\xca\x4a\x9e\xb7\xcd\x4e\x16\x2e\xb9\x11\x08\x6c\x9e\x73\x83\xe3\x9e\x62\xa4\x35\xe5\x34\x30\x68\xaa\x06\x81\x5f\x1d\xb4\x15\x2d\x99\x5b\x00\x88\xe9\x54\x0e\x19\xd6\xcf\x6d\x18\x55\x96\xc8\x3a\x59\x24\x06\xb7\xc5\x6c\x98\x41\x51\xac\xc4\xd1\xca\x92\x72\x31\xad\x6a\x36\xe7\x77\x2c\x9f\x91\x0f\xd2\xef\x0f\xd3\x6a\x9a\x98\x5a\x33\x62\xb1\xc5\xa5\xf0\x31\x1d\xec\x2e\x63\x95\x86\xa8\x95\x1b\x56\x03\x60\x23\xff\x27\x43\xff\x69\x8b\x53\x8a\xaa\x00\x23\xaa\xd7\x36\x06\x29\x71\x96\x2f\x2c\x2b\x60\x85\x7f\x67\x09\x72\xc2\xb6\x0a\x12\x53\xa0\x8d\xcc\xba\x5f\xcf\x56\xbe\x4c\x6a\x34\x67\x62\xe9\xdd\xbc\x3b\x9a\x52\x6c\x13\x1a\xca\xa5\x3d\x73\x99\xbc\x12\xfc\x9f\x03\xa0\x41\x93\x1d\xbd\x1f\x8f\xd9\x9c\x7c\x43\x63\x32\xd9\x41\x7e\x64\xf8\xe9\x3d\xc1\xcd\xf6\xc7\x9f\x71\x5c\xf3\x67\x83\x3f\x78\x81\x4b\x31\x82\x0f\x3e\x39\xf8\x20\xae\xc4\x88\x3c\xd8\x0e\x6e\x44\x1e\x84\x32\x22\x0f\x86\x65\x44\x1e\xec\xb4\x3b\x22\x0f\x8e\xb1\xc7\x63\xec\xf1\xd3\xc7\x1e\x8f\xc8\x83\x23\xf2\xa0\x2f\x63\xb8\x57\x4c\x79\x7a\xbd\x25\x96\xcf\x36\xdc\x8b\x8c\xc8\x83\x51\x65\x44\x1e\xfc\x9f\x86\x3c\x88\x5b\x6c\x13\xfe\xa0\xd5\x77\xb4\xe0\x83\x9f\x1d\xf6\xa0\x32\x8b\x9c\xb1\x93\x2c\x93\x8d\xd0\x9f\xe4\x35\x8b\xc6\xce\x5a\xd1\xd0\xad\xd5\x63\x0e\xe5\x7d\x1a\xbb\xf5\x97\xf7\xa6\xbe\x7b\x86\xd9\xda\x69\x93\x73\x73\x11\xee\x8b\xf4\xba\xf6\x1c\xb7\x68\x6e\x2b\x91\xb3\xbc\xfd\xc1\xd2\x65\x6d\x96\x66\x46\x4e\x48\xcd\x32\x5e\x71\x9b\x12\x91\xe2\xf3\x34\x4b\x90\x39\x17\x1c\x3c\xed\xe6\x4b\x73\x5a\x58\x31\xf7\xe4\xd1\x3e\xe7\xac\x0e\xb4\x5b\x96\x0f\x5c\xe9\x52\x9a\x92\xc4\x74\x13\xa5\x0c\x90\x29\x6e\xb9\x62\x4e\xfd\x6f\x5d\x46\x82\x51\x7e\x0a\x5b\x0b\xc1\x2c\x52\x9b\x0d\x86\x63\xe7\x71\x90\x33\xc3\x20\x5a\xc9\x9e\xca\xc1\x6a\xad\xe1\x56\x14\x01\xe3\x07\xe6\x92\x75\x39\xe7\xd0\xa4\x65\x6e\x5f\x07\xaf\x87\x24\x21\x6d\x1b\x23\xfd\xf0\xbb\x54\xb5\xab\x89\xc1\xcd\x34\x5b\x30\x15\xf4\x0c\x99\xd2\x6b\x6b\xab\x4b\x0c\xd8\x35\xa5\x2a\x9a\x2b\x2e\x50\xfc\x86\xfa\x1d\xbf\xd1\x86\xdc\xda\x81\xac\x76\xee\x53\xd0\xb0\xf9\x3c\xcd\x85\x06\xc4\x97\x8d\x11\xbe\x38\x5a\x3e\x0f\xff\x50\x44\x16\xb9\x73\x49\xf9\xd3\x4b\x52\xb1\x3a\xc3\xa3\x9b\x68\x46\x50\x18\x2d\xac\x25\x29\x8c\x2c\x69\xae\xb9\xfb\x1b\xf2\xbe\x2f\x6f\x83\xa3\x83\x3e\x3f\x69\xab\x2a\xf2\x16\xc5\x4e\x93\x82\x51\xa5\xc9\xab\x97\xa4\xe4\xa2\xd1\x43\x72\x01\xee\xcb\x93\xe0\x51\x39\x04\x13\x4f\x5b\x28\xeb\xc3\xbf\xbd\xc0\x6f\xad\x12\x25\x6c\xbe\x4a\x72\xa1\x57\xc5\xff\xc0\xe1\x3d\x9d\x9a\x82\xdd\x63\x74\xe4\x49\x69\x60\x74\xe4\xd9\xe9\xf1\x1b\x2c\xfa\xfe\xd4\xc8\xcb\x65\x1f\xb0\x49\xda\xce\xb2\x55\x86\x40\xcd\x94\xfc\x5f\xfb\x10\x8f\xa4\xf5\x63\x58\x18\x71\x0e\x34\xab\x6a\x41\x6b\x44\x05\x81\x80\x1a\xe7\x83\xd8\x37\xd1\x6f\x4d\x13\x00\x34\xf0\xda\xb7\xc0\x15\xc9\xfd\x63\xaf\x5c\xe5\x62\xaa\x6b\xc6\x7c\xe7\x40\x32\x05\xab\xa1\xf3\x5d\x8c\xc4\x99\x8b\x66\xb6\x63\x59\xec\x29\xa9\xd9\x15\x57\xba\xee\x33\x2c\x4d\x63\x2e\xeb\x78\xce\xfb\xaa\x96\x4d\x44\x3a\xc4\x74\xaa\x02\x15\x3b\x15\xab\x33\x75\x67\x19\x53\x2a\xce\x5f\xcb\x5e\x9d\x76\x75\xa0\xb6\xde\xaf\x12\x08\x6c\xcd\x68\xfe\x8d\x28\x22\xec\x64\xe9\x43\x77\x75\xa3\x7e\x03\x38\x24\xf0\xe8\x85\x2d\xe8\x36\xa8\x9d\x12\xa4\x28\x70\x1e\x58\x8e\x52\x80\xf9\x7c\x0a\x80\x8c\x81\x7d\x29\x86\xd8\x84\xdc\xc6\x9c\x16\x2a\x82\x38\xa7\x48\xda\x6e\x83\xee\x66\xca\xb0\xee\x2e\xb9\xb0\x91\x95\xb2\x6e\x23\x29\xdd\xf4\x7d\x74\x1f\x58\x26\x33\x46\xf3\xd2\x0a\x54\x34\xb0\x44\x53\x05\x14\xe8\xb5\x39\xf6\xe8\x0a\x72\xe4\x5b\x0b\xe1\x35\x5c\x30\x9c\x5d\xa5\x4c\x96\x25\x8d\x4a\x8a\x8d\xbe\x09\x14\x00\x9d\x94\x8d\xb4\x16\xba\xa6\x45\x3b\xea\x00\x46\x71\x9b\x9b\x5c\x33\x41\x45\x84\x9b\x51\xfa\x7a\x61\xcd\x86\x35\x70\x81\x9c\x57\xfc\x86\x89\xd5\xdd\x6d\x05\xd7\x2f\x69\x76\xcd\xa2\x30\x5f\xbe\x55\x6e\x7e\xf3\xa5\xa0\x16\x87\xc3\x90\xb3\x1b\x6e\x8e\x01\xcb\x57\x5a\x50\x93\x36\x06\x41\x31\xed\x60\x4e\x50\x38\xd9\xe6\x54\xc6\xb1\x61\xe9\x13\x09\x4c\xcf\xa3\xa9\xa4\x42\x8b\x74\xcd\x6f\x32\xe6\xa4\x2d\x53\xf3\x36\x67\x00\x7b\x97\x38\x07\x6e\x1f\x04\xe7\xcd\xc6\xb3\x5a\xa7\x2a\x04\x39\x2b\x0c\xcd\x5b\x7a\xc6\x72\x65\x17\x5d\x2e\x23\x13\x63\x47\x8e\xa6\xbe\xec\xb9\x8e\xd3\x96\xb1\xbe\xcc\xbb\x64\xeb\x23\xcd\xa5\x22\x5f\x42\xb4\xf6\x5b\x06\x22\xf0\xee\x18\x9e\x8f\x5f\xbe\xed\x61\x76\x4c\xff\x9e\x13\xa3\xc3\x4b\x7a\xd5\x27\x6e\x4d\x49\x29\x05\xd7\xb2\x7e\x98\x1e\xc6\xf3\x39\x73\x15\x17\x2a\x99\x7e\x82\xb1\x66\x27\x81\xb6\x60\x6c\x3e\x56\x32\x70\x5c\x80\x45\x5f\xca\x86\xdc\x52\xd0\x87\xe0\xbe\x88\xb9\xdb\x3f\xf1\xea\x35\x39\x15\xaa\xa9\x03\x94\x9e\xd5\xc6\x0c\x11\x74\xcb\xea\x48\x21\x6c\x36\x33\x4b\x88\x20\x68\x81\xe2\x22\x5a\x3c\xbd\xa3\x65\x55\x30\xf5\x9a\x1c\xb0\x3b\xfd\xc5\xc1\x84\x1c\xdc\xcd\x95\xf9\x9f\xd0\x73\x75\x30\x23\x67\x65\x55\xf0\x8c\xeb\x62\x49\xb8\x98\xb3\xba\xf6\x96\x20\xfc\x60\xc5\xed\x32\xa6\xcd\x44\xbb\x8c\xd2\xb2\xa6\x57\xec\x85\xbd\x0b\x7e\x59\x5f\xf6\xdf\x31\x09\x14\x0f\x36\xea\x2e\xb6\x0c\x54\xec\x95\x82\x40\x2d\xf0\x51\x6c\xfe\xff\x0d\xf3\xc4\xec\x72\xcd\xae\xff\x04\x33\x65\xe7\xe4\x45\x7d\x99\xbf\xf8\x78\x7a\xf2\xf6\xfd\xe9\xac\xcc\x7f\xb9\x90\xb7\x53\x2d\xa7\x8d\x62\xd3\x88\xf0\xc8\x84\xb9\xba\x66\x4b\x40\xc9\xdd\xc1\x6c\xd9\xaa\x3b\x3a\x1e\x2d\xc1\xc4\x04\xcf\x0d\xf3\xf4\xf1\xcb\xb7\xb1\x6a\x81\x40\xb0\x78\xc1\x74\xf6\x22\x63\xd5\xe2\x85\x6d\xe3\xf3\x9c\xfb\xc0\x28\xb8\x36\xa2\x9e\x4f\x1d\x95\xdd\xc5\xba\xb9\xba\xf1\xf6\xcf\x64\x51\x60\x2c\xad\xa1\x89\x6f\x58\xb5\xf0\x2f\x3c\xbb\x59\x8f\x73\x8d\x8d\x76\x88\x4d\x5a\xca\x47\xb9\x2f\x54\x52\x46\x18\x79\xd3\x97\xd2\xd4\xdb\xa5\x57\xf0\x24\x96\x5c\x05\x47\xae\xbe\x1c\x7a\x11\x3c\x9f\x43\xd6\x7f\xcd\x3c\x99\x76\xe1\xa3\xfb\x51\x31\x0d\xf7\x3d\x17\x04\x55\x9a\xef\x0d\xa7\xb1\x2b\x35\xc2\x9e\x17\x2c\x4e\x5f\x81\xc1\x30\x51\x59\x37\xd2\x57\xc1\x57\x0e\x5c\x75\xe0\xbf\x43\x1b\xbd\x60\x42\x3b\x48\x13\x1b\x91\x13\xde\x51\xe4\x6c\x8e\x12\x6d\x1e\xe5\x14\x21\x6f\x58\x5d\xf3\x9c\x29\x92\x70\x49\x85\xda\x33\x5e\x3c\xbb\x05\x8c\xf4\x52\x48\x73\x20\x88\xf7\xd8\x1a\x66\x23\x79\x8c\x97\xd6\xbe\xfd\xb3\xf6\xec\x99\xf5\x38\x9f\xac\xa7\xf5\xc6\x4a\xb6\xca\xa5\x78\x60\x3d\xc6\x2b\x69\xa7\x2a\xa7\xce\x65\x0e\x4f\x06\x5c\xe6\x34\x2f\x79\x14\xcc\xd1\xb3\xbe\xce\x61\x14\x0f\xbc\xae\x32\x5a\xb0\xb3\x6f\xb6\xa9\x32\xb2\x55\x76\xd5\x46\x17\xf6\x61\xc5\x6a\x87\xef\xe6\x34\x82\x5a\xd3\x6c\x61\x55\x3b\xce\x56\x20\x45\x18\xad\x2e\x64\xde\xef\x10\x10\xea\x8d\x5c\x6b\x0f\xeb\x8e\x5c\x47\x9f\x93\xfe\xe8\x8a\x6a\x76\xdb\xcb\x9f\x4f\xdb\x2b\xba\xff\x4d\x50\x8a\x7c\xe6\x9a\xa6\x14\x6d\x92\x0f\x36\x5a\xab\x65\x9b\xfa\xa3\xd9\x3d\x9a\xa3\x34\x22\x03\xdf\x6e\x4d\xf7\x8b\xc5\x9f\xfd\xbb\x79\xdf\x25\x61\x77\x5b\xe2\x7a\xda\xaf\xdc\x5a\xc1\x24\x5a\x2c\x18\xc7\x42\xb8\x03\x78\x72\x7e\x46\xfe\x86\xaf\x6f\x75\x94\x55\x2d\x35\x0a\xdc\x6f\x01\xb4\x20\x71\x04\xab\x9f\xbb\xa1\x84\xbc\xae\x1b\xc2\xb9\x7f\x97\xd8\x97\x1d\x02\x5c\x06\x59\xc9\x9b\x9a\xe5\xc4\x2a\xeb\xb6\x3a\xc6\xbd\xc8\x59\x6b\xf2\x10\x39\x32\xbf\xbd\x80\xdc\x0a\xc7\xb3\x56\xe6\x5a\x11\xc8\x62\x34\x03\x5b\x11\xd9\x9e\xa1\x50\x14\xd8\x77\x5c\x6c\x78\x2b\x08\xb9\x6d\x03\x6c\x87\xf7\x48\x8d\xaa\x5f\x28\x0e\xae\x5d\x81\x33\xb5\xc5\xc6\xe7\xaa\x0d\xff\x46\xd9\x6a\x42\xbe\x96\x57\x5c\x38\xe2\x25\xad\xb3\xe2\x9c\xc6\x08\x44\xa3\x9c\x32\xca\x29\xab\x65\x94\x53\x36\x16\xa5\x8a\x53\xf4\x88\x4b\xa4\x29\xed\x87\xe4\x5d\x41\xaf\xac\x5f\xdd\x8b\x9c\x2b\xf3\x7f\x72\x71\xf1\x35\x78\x59\x34\xc2\x29\x53\x60\x07\xd8\xbb\xd2\x27\x59\x44\x9a\xbc\x5d\x22\x89\x57\xd5\xfb\xa8\xf0\xf3\x01\x64\xb2\xad\xde\xe7\xc8\x51\x9d\x60\x1a\xfb\x06\x50\x4b\xea\x81\x28\xd0\x5b\xff\x92\x99\x53\x9a\x5d\x9f\x07\x4e\x11\xb2\x36\xcf\x44\xf0\x28\x91\xc9\x4a\xfe\x7a\x18\xbb\xb5\xd2\x4c\xdc\x32\x9c\xa7\x2b\xb5\x83\x2f\x1d\xdf\xe2\x2e\x9d\x0b\x3b\xb5\xf0\x1b\x55\x4a\x66\xbc\x75\xea\xb1\x08\xcb\x8e\x99\x41\xb4\xa7\xad\x4e\x06\xf2\xcf\xa9\xc3\x41\x06\x7d\x03\x07\xe6\x36\x8a\x7d\x83\xaa\x90\xe3\xe2\xc2\x8d\x7a\xab\x43\xc0\xed\x18\x87\x9b\x98\x7e\x38\xda\xda\x57\xc7\xeb\x0f\xc2\xaa\xbb\x88\xc3\x79\xb1\x2b\x1c\x21\xcd\xd9\x31\x2f\x28\xaa\x31\xd6\x76\x01\x57\xfe\xd0\x41\x6e\xb2\xad\xcd\x5f\x0c\xf0\x53\xa2\x2a\x01\xf9\xaa\xae\xdf\x1c\x3e\xb3\x2e\x26\x40\x35\x2a\x59\x35\x85\x03\xae\x8b\x84\x59\x79\xa4\x35\x1e\x7b\xb1\x1d\xed\x40\x3c\x87\x15\x60\x43\xec\x62\x7b\x86\xd0\x13\xe9\x08\x21\xa1\xe7\xbc\x32\x12\xb6\xad\x2e\x49\x66\xdf\x27\x40\xc8\xb6\x00\x41\x62\xb4\x1b\x1d\xc8\x90\x8e\xd4\xf5\xf2\x0f\x5f\x7c\x11\x75\xa1\xf1\x9a\x65\x5a\x82\xcb\xa6\x85\x14\xf2\x1e\x03\xb4\x66\x20\x1d\x20\x7a\x87\xd3\x6f\xa0\xdb\xa0\x8e\xb4\xaa\xec\x03\x2b\x64\xc7\xd8\x20\x69\x81\x08\x29\xd8\x1f\x41\x74\xc6\x0e\x0f\xde\xb7\xe9\x21\x2a\xa9\x07\xcd\x54\x18\xb6\xe6\xc5\x21\xf0\xc9\x86\xd3\x8d\x98\x6d\xb4\x28\x8c\x00\x64\x38\x37\xf1\x40\x30\x0b\x57\xa4\x11\x91\xc0\x2d\x4f\x15\xa9\x32\x78\x5b\xf4\x46\xa5\x44\x7a\x49\x0c\x70\xa2\x02\x68\xbf\xb3\xbd\x41\xfb\xed\x09\xd0\x6f\x3f\x30\x7e\xfb\x00\xef\xdb\x0b\x64\xdf\xfe\x80\xfa\x76\x0c\xcf\xb7\x13\xcf\xa3\x5d\x02\xf0\x25\xe2\x0d\xa4\x61\x0d\xc4\x43\xec\x45\x23\x12\xa4\xa2\x11\x24\x80\xe8\x6d\x17\x3a\x2f\x59\xd1\x93\x02\x93\x37\x34\x3c\x74\x7f\x90\x78\x4f\x08\x84\xf7\xd4\xf0\x77\x3b\x06\xbd\xdb\x1f\xd4\xdd\x5e\x00\xee\x86\xc4\xd4\xa6\x83\xd9\xa5\x84\xb2\x0f\x3d\x5c\x3b\x87\xab\xdb\x0a\x48\xdd\x96\xa1\xe9\xb6\x07\x48\x97\x4c\x30\x53\x62\xea\x87\xae\xe9\x4e\x63\xe9\x9f\x20\x8e\xfe\x69\x63\xe8\x1f\x79\xd6\x77\x19\x3b\x4f\x92\x00\xb6\x1e\x0d\xab\xa5\x92\x71\xb5\xd2\xcd\xc3\xbb\xd2\xed\xb6\xb5\x6f\xd4\x65\x3b\x64\x7b\x62\x73\xc7\x1d\xa2\x67\xad\xaa\x68\x06\xdb\xa6\x19\xec\x8a\xbc\x65\xb5\x25\x49\x50\xf8\x62\xed\xb2\x87\xe9\x4c\xd4\xf9\x62\xa5\xdf\x5c\xac\x38\x90\xf9\xc7\xbb\xf4\x1b\xf3\x8d\xf4\x78\x8e\xb9\x81\xef\xc1\x77\x6c\x74\xce\xda\x9e\x73\xd6\xf6\xc3\xfa\x9e\x9b\x3f\x4f\x3e\xfa\xf3\x24\xfb\xf3\xb8\xe5\x56\x21\xa5\x46\x92\x0c\xc2\x8e\xbc\x0c\x93\x3a\xb7\x34\xe2\xe4\xfc\x2c\xa2\x9d\x36\xf1\xac\x9a\x6d\x92\x82\x9c\xa5\xdf\x4a\x57\x3e\xb9\x9a\xd6\xac\xac\x7a\xc9\x08\x19\xdd\x79\x46\x77\x9e\x0d\x65\x74\xe7\xd9\x58\xf6\x6d\xde\x5f\x34\x25\x15\x53\x43\x81\xc1\xeb\xa7\xe3\x5f\xba\xc2\xd0\xcc\x88\xa5\xa4\x91\xc7\x12\x81\x5b\xd0\x6c\x23\xf8\x4f\x0d\x6b\xf5\x9c\x9e\xb1\xdc\x91\x6b\x04\xd4\xbd\xdb\x09\x44\xbe\x78\x85\x32\x67\x72\x0d\x74\xc0\x8e\xd9\x4f\xa6\x23\xb1\xb1\x93\x08\xcd\x74\x54\xf7\xda\x19\xbc\xce\x57\x98\xf4\x8e\x5e\xca\x92\x1f\xa0\x09\xb1\xd6\x8f\x90\x33\x35\x1b\xc1\x8c\xc7\x22\x3d\x5e\x32\x52\xf2\xba\x96\xb5\x75\xd3\x08\x87\x84\xfe\xc6\xfc\x6a\xa1\x8d\xd0\xfd\xff\xb1\x77\x35\xbd\x6d\xf3\x48\xf8\xbe\xbf\x82\xf0\x1e\xd2\x02\xb1\x03\xf4\xb8\x7b\x4a\x9d\x7e\x18\xdb\x76\x83\x3a\x09\xf0\xa2\xe8\x81\x91\xa6\x36\x11\x99\x34\x48\xca\x6e\x50\xf4\xbf\xbf\x20\x87\xd4\x87\x2d\x91\x94\xe3\x38\x3d\xbc\x39\xc5\x92\x28\x0d\x87\x5f\xcf\x3c\x1c\xce\x18\x2b\x51\x26\xa7\xe0\x9e\x83\x76\xbd\xca\xf6\x4a\x2d\x6c\x7a\x3e\xee\xfe\xf7\xa7\xef\x6c\x75\xfd\x3a\x74\x0f\x4b\xba\x61\xa2\x4c\x32\x9f\xe7\xb8\x52\x8e\x5c\x61\x8b\x9f\x1e\x45\x59\x6d\x48\x63\x66\xf5\x4a\x87\x6a\xbf\xbd\x12\x3e\xf2\xa5\x2e\x6e\x89\x3b\x97\x46\x6d\x2d\x61\x0c\x3f\x99\xd2\xfb\x1a\xf3\x4d\xe5\x08\x88\xa3\x0d\x83\x8d\x5a\x9b\x59\xfc\x2e\x21\x5a\xcc\xb0\xce\xdf\x7a\x71\xdb\xf0\xd9\xcc\xed\xad\x98\xd9\xe3\x82\x8e\x62\xbc\x27\xb2\xa2\xd9\x92\xf1\x41\xb1\x56\xee\x5a\x22\xb4\xec\x9f\x09\xb9\x2c\x8a\xda\xd5\x58\x55\x1e\xf0\xde\x1e\x6a\x8b\x6f\x94\x19\xf9\xb0\xe9\x1f\x12\x72\xeb\xd2\xe0\xf3\xc7\x02\xc9\x14\x9b\xb8\x57\x4d\x36\xab\x2d\x95\x30\xc9\xc4\x8a\x4c\xe7\x33\x92\x4b\x16\x0d\xab\xfb\x0c\xc7\x71\x50\xe9\xd7\xb1\x4d\x98\x3f\xcb\x46\xfb\xc7\x3e\xab\xff\x86\x78\x2f\x7a\xbf\xca\x82\x65\x8f\xb3\xab\x43\xbd\x32\xb1\xb4\x07\x00\xaa\xf2\xc8\x34\xd7\xc9\x5b\xaa\x20\x27\x9f\x29\xa7\x0b\xa4\x95\x5f\xcd\xaf\xdf\x7e\x7e\x6d\x3a\x90\xa5\xc1\x67\x57\x9d\x6e\x9b\xf3\xe6\xcb\xbf\x1c\x33\x5c\xd4\x5e\xc5\x0f\xc0\x46\x7b\xe5\x0f\xac\xfc\x51\xe3\x60\x91\x0a\x4e\x5c\x27\x6d\x72\x74\x44\xf6\xba\xde\x0d\xbe\x8b\x3e\x95\x3e\xea\xb7\xda\x9d\x9a\x37\xab\xfc\xe1\x69\xe2\x33\x63\x4d\x14\xc5\x75\x41\xf9\xe5\x7a\x2d\xc5\xa6\x9b\x75\x4d\x99\x1c\x7c\x79\x5f\x01\x3c\x8f\xe2\x2f\xae\xb1\x45\xac\x0b\x36\x47\x23\x06\x3f\xdb\xad\xff\x99\xae\x88\x59\xc1\x2d\x04\x1b\x5d\x96\x5a\xac\xa8\x66\xd9\x88\x08\x49\x46\x9f\x29\x2f\x69\xd1\x79\x94\x2d\x58\xe3\x3e\x03\x33\x58\x08\xfd\x56\x0f\x2c\x16\x04\xb0\xe1\xf2\x9a\x4a\x33\xd5\x4d\xe7\x77\x83\xca\x2a\x4d\x75\xb9\xb7\x32\x04\x56\xab\xfe\xf5\x69\x4c\x0a\xaa\xf4\xed\x3a\x37\xf3\xc3\xce\xdd\xd0\x22\x94\x51\x4d\x0b\xb1\xf8\x08\xb4\xe8\x1e\x0c\x29\x5d\x6a\xda\x7c\x89\xdf\x29\x73\x0e\xe8\xe5\x7d\x55\xfe\x4c\x11\x63\x4a\x9a\x5e\xc2\xb4\x22\x12\x0a\xd8\x50\xae\x7d\xf1\xb9\x6d\x05\x75\xe6\xd4\xd2\xdb\xe1\x58\xbd\xf7\x9e\x83\x06\xb9\x62\xbc\xfd\x9d\xb9\x2d\x3f\x15\x1c\x33\xdc\x2a\xdc\x5d\xc4\x12\xed\x6f\xf5\xf7\xca\x3e\x97\x94\x80\x13\x4a\x4b\x53\x4d\x79\xda\xea\xc1\xc7\xee\x9d\xe9\xb2\xc4\x8b\xd6\xd1\xbb\x25\xdb\x9e\xf6\xc8\x03\x37\x16\x85\x4d\xa2\xd1\xad\x9b\x28\xcc\x89\xc1\x9b\xb1\xef\x0e\x28\x42\xff\x21\xe2\xb1\x93\xbb\xcf\x59\x25\xd4\x1b\xf1\x2f\x0e\x8c\x76\x45\xe9\x9f\xa9\x5b\x8a\x9f\xee\x14\xc3\x38\x4c\x95\xcf\x1b\x7a\xff\xb4\x1e\xea\x5f\x59\x92\x70\x63\x1a\xc4\xa3\x6b\x76\x07\x52\x19\x11\xd3\xad\x83\xcb\xeb\x19\xd9\x60\xa9\x61\x5c\x58\xe2\x52\x68\x39\xb2\xf8\x2a\x38\x0c\x72\xce\xdc\x39\x48\xe9\x2c\x58\x4a\xd6\x0c\x30\x7d\x07\xe5\x3e\x77\xb9\x59\xcf\x80\xe6\xee\xa2\xcb\xe9\x8d\xf7\xce\x9d\x83\x72\x12\x40\x41\x37\x7f\xbf\x37\x4f\x31\xab\x84\xf5\x52\xb9\xf8\x20\x1c\x07\xe8\x22\x8b\x9a\x59\xc5\xa2\x8b\x73\xa2\xca\x6c\x49\xa8\x31\x64\x94\x19\x0e\x66\xbe\x80\xc9\x8a\x72\xf6\x03\x94\x9e\xb8\xb7\x81\x54\xdf\xde\x7c\x8f\xc1\x8e\xf7\x42\x12\x17\xd4\xe1\xdc\x27\x47\x70\x75\xac\xfb\x1c\x53\xa8\x88\xea\xcd\x35\x23\xb3\x16\xb9\xab\xf0\xd6\x56\x45\xd3\x07\xb3\x94\x62\x55\x4a\xb0\xde\x24\x31\x8c\x32\xb2\x89\xef\x6b\xb1\x7f\x99\xb5\xf3\xf7\x88\xbc\xda\x5a\x10\x32\x32\x3f\x47\x28\x4e\x75\x30\xb5\x49\x38\xd5\x62\x61\x8c\x45\xc9\x16\x0b\x90\xd1\x3d\x56\x53\x14\x36\xc0\xf5\x6b\x97\x18\x82\x8b\xc6\xab\xbc\xff\x67\xcd\x9f\xec\x8a\xf9\xed\xcd\xf7\x11\x79\xd5\xd6\x49\xe4\x93\x8c\xe7\xf0\x93\xbc\xc1\xdd\x52\xa6\x8c\xf6\x5e\x4f\x90\x70\x51\x8f\x5c\xd3\x9f\xe6\x8b\xd9\x52\x28\xe0\x48\x80\x69\x41\x96\x74\x03\x44\x89\x15\x90\x2d\x14\xc5\xd8\xed\x1f\x93\x2d\x7d\x8c\xe7\xc3\xf0\x4d\x68\x23\x26\x93\x35\x95\xba\xd5\x8d\x8f\x32\x08\x1f\x18\x3f\x6a\x60\xd6\xff\x31\xbe\xeb\xea\x1b\x35\xf0\x3a\x48\xe1\x05\xd3\x3e\x48\x89\x3b\x8e\xa8\x1f\x2f\x4c\x63\x49\x76\x5f\x6a\x21\xd5\x45\x0e\x1b\x28\x2e\x14\x5b\x8c\xa9\xcc\x96\x4c\x43\xa6\x4b\x09\x17\x74\xcd\xc6\x99\xe0\xa6\x63\xd8\x10\xde\xab\xfc\xdf\x46\x13\x6a\x6c\x2a\x1a\x66\x89\x13\x35\x16\xdf\x7b\x18\xa6\xb1\x43\xf6\x1a\x5e\x86\x46\x1f\xa0\xa0\x04\x2a\x76\xb8\x96\x90\xef\x7c\x71\x55\x59\xca\xef\xe2\x18\x9a\x92\x80\xd8\x7f\xf8\xda\x1c\xd5\xd7\x1c\x27\xbe\x6c\xf7\x1b\x66\x4e\x42\x2f\x70\x3b\x85\xb5\x56\x89\x15\xcd\x71\x19\xa1\x3c\x1a\x16\xe3\x99\xc7\xac\x69\x8f\x52\x1a\xc9\x1e\xc7\xf6\x15\xa2\x18\x53\x9e\x9b\xff\x31\x4e\x4f\x16\xf6\x54\x4e\x6c\x80\x92\x1d\x75\xf2\x6b\xf8\x98\xbd\xe4\x48\x2e\xd9\x31\x66\xba\x43\xf6\xb3\x1c\x2e\x4f\x04\xcb\x68\x92\xa0\xe7\xb6\x2c\xc1\x03\x98\xb6\x21\xc2\x94\x7f\xeb\x7f\x9d\xe7\x40\x95\x4b\x2d\x06\x9d\xc3\xbb\xf9\x0d\x1b\x21\x51\xde\x4f\x75\x89\x26\x17\x6e\x4f\x84\x50\xa5\x5d\xb6\x2a\x1f\x28\xba\x55\x0d\x6f\x9c\x2e\x29\x5f\x04\xa0\x4d\x52\xc3\x78\x1f\x3b\x23\xc8\xd8\x7c\x73\xdf\xac\xae\x8c\xcf\xa8\x4d\xdd\xb0\x53\xad\xa9\x52\x30\x55\x65\x6c\x32\x66\xab\xd2\x84\x6e\x28\x2b\xec\x3e\xa1\xb8\x57\x20\x37\x8e\x6c\xc7\x7c\x8a\x74\xd7\xc6\xc6\x61\xab\x11\xf0\x9e\xc8\xc2\xf5\x75\xd8\x6f\x95\x50\x05\xac\xd5\xbb\x23\x7d\xaf\xd4\x47\xb1\x6f\x91\x5a\xe8\xbd\xdd\xbb\x41\x11\x37\xf2\x4c\xff\xfb\x08\x54\xea\x7b\xa0\xfa\x86\x85\x10\xca\x5e\x97\x6e\x95\xf3\xbc\x5c\xdd\xa1\xb7\x40\x16\x42\x1b\xd8\x59\xda\xbe\x8f\xf6\x01\xa6\x9e\xa8\x3a\xda\x73\xf7\xe8\xba\x96\x37\x92\xda\x80\x34\x82\x0f\xac\x66\xbb\xe0\x7e\x3d\x9d\x2d\xe2\x7a\x92\xc6\xa7\xc9\x0f\x29\x56\x96\x5c\xc4\xb6\xc3\xad\xca\x70\xec\x9c\xa3\x56\x79\x05\x4a\x05\x23\xa2\xb7\x8f\x1b\xe1\xd3\x38\x94\x77\x36\xf9\x57\xfe\x1e\x46\xbf\x30\x46\x45\x0e\x9a\xb2\xc2\x0f\x65\x54\x45\xa5\xa5\xd8\xec\x1a\xac\xa0\x04\xaa\x42\x80\xa6\x25\xf5\x57\xfb\x30\x0a\x2d\x38\x8c\xb7\x42\xe6\x64\x4a\x57\x50\x4c\xa9\x02\xf7\xae\x66\x78\x2b\x6c\xa3\x33\x75\x54\x91\xbb\xe9\xd0\x1e\x91\x91\xe4\xab\x37\x14\xec\xaf\xda\xa0\x45\x01\xcf\x3d\x2b\x7d\x23\x4b\x38\x27\xef\xcd\xea\x75\x4e\x6e\xf9\x03\x17\xdb\xa7\xc9\xaa\x83\x9b\x75\x2d\x49\x9b\x1e\x92\x3e\x3b\x42\x8b\xd8\xab\xc4\x3d\x50\x22\x37\xe1\xf7\xb0\xcf\xed\xc5\xa6\x7a\xd4\x4b\x64\xfe\xdd\xa3\x1a\x8d\x69\x2d\xc5\x42\x82\x52\xc8\xe2\x0c\xa6\xef\x1b\x1b\x16\x1f\x80\xbb\xfd\xe1\xa8\x78\xb3\xae\x52\x5e\x52\xbf\xae\x2d\xea\x3b\xae\xbd\xdd\xc7\xd6\x45\x27\xd4\x08\x7b\xd1\x37\x04\xed\x21\x19\xfb\x24\xec\x26\x17\x1b\xab\x5e\xe3\x59\x04\x25\x21\x66\xdc\xd7\x6e\x3a\xbf\xeb\x57\x76\xef\xda\x17\x5b\x9f\xe2\xf4\xe3\x53\x89\xc7\xe8\x98\x89\x92\x8d\xa9\x48\xff\x34\x04\xe3\x4b\x52\x8b\x2f\x4b\x2a\x9e\x9c\x4e\x3c\x29\x91\x78\x3a\x0a\xf1\x40\xf2\x30\x3a\x90\x42\x84\x61\xea\x18\x1a\x46\x12\xbe\x38\x3d\x18\xd5\x49\x88\x12\x4c\xd5\xc9\x30\x1a\xf0\xd4\x04\x60\x92\x0a\x82\xa4\xdf\x10\x3d\x0c\x24\xfa\x4e\x4c\xf1\x45\x75\x91\x48\xeb\xa5\x6a\xe4\xf9\xa8\xbc\x3f\x96\xc4\x8b\xaa\x38\x40\xdc\xa5\xaa\x75\x10\x59\x77\x62\x9a\x2e\x52\xff\x61\xd4\x9c\xc3\x98\x90\xa7\x40\xf4\x59\xe3\xe1\x26\x48\x77\x00\xd1\x3a\xc0\xb9\x27\xbc\xc3\x5d\x13\x4a\x1e\x8a\xd4\x0d\x78\x3e\xd4\xff\xc3\x89\x9c\x8e\x86\x1d\x84\x87\xbc\xb2\x29\x63\x55\x20\xe4\xea\xdd\xf5\xd7\x77\xd3\xcb\x9b\x77\x57\xbb\x28\x7c\x38\x5c\x0e\x13\x45\xe3\x06\x5c\xee\x79\xc0\x2c\x56\x3d\xb7\x4c\xdf\xea\xb9\x55\x96\xac\xab\xd4\xd3\xc1\xfb\x93\x30\xc3\x93\x16\xd7\xf8\x3c\x71\xa4\x89\xc2\xf6\x2d\xf4\x5a\x35\xa8\x72\x29\x8a\x5c\xf9\xf3\x0d\xb3\xab\x2a\x40\x05\xe3\x59\x51\xe6\x06\x72\xdd\xde\xce\xae\xd4\x84\x90\xb7\x90\xd1\x52\x19\xe8\xd6\x6f\xae\x0b\x7e\xa6\xc9\xff\xbf\x7c\xfa\xcb\x1e\xed\xb2\x25\xcf\xab\xe8\xca\x36\x55\x27\xa3\x98\x6d\xd4\x56\xd4\xbe\x15\x61\x9d\x95\x28\xa3\x6b\x33\x03\xf7\x53\xfe\x0c\xa3\x1a\x51\x9e\x93\x25\x14\x6b\xb3\x3a\x3c\x00\xa9\xd3\x1a\x9a\x0f\xda\xbb\x78\x7e\xc3\xf9\xb1\x2f\x40\x63\xb0\x8a\x90\xab\x7a\xb0\x01\x22\x0c\xfb\x13\xb8\xf5\x16\x5d\xe0\xd8\x97\x2d\x55\x8e\xa1\xec\x94\x36\xd2\x55\xe2\x7c\x5c\x3f\xa5\xd5\x43\x66\xe1\xca\x62\x7f\xed\xc9\x6c\x84\xad\x79\x2b\x74\x0e\x63\x3a\x99\x3d\xef\xf7\x04\xec\x4e\x28\xbf\xc7\x5d\xc1\xae\x92\x5b\x1f\xae\xce\x02\x35\x44\x4e\x93\x45\x81\xdc\x40\xfe\x1f\xbb\x9f\xe3\x2f\xa1\xb7\x6d\xfb\x5a\x79\xef\xc1\x4c\x63\xd6\x71\x0c\x1c\xf9\xf5\xfb\x5f\x7f\x07\x00\x00\xff\xff\x3a\xb2\xc2\x7d\x66\xce\x03\x00") func operatorsCoreosCom_subscriptionsYamlBytes() ([]byte, error) { return bindataRead( diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go index 3ae0824344..733b75dca7 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" +package otelhttp import ( "net/http" diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go index a7d4b2a815..08ba0778f6 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" +package otelhttp import ( "context" diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/doc.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/doc.go index 1c9aa3ff42..09a2103fe4 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/doc.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/doc.go @@ -3,4 +3,4 @@ // Package otelhttp provides an http.Handler and functions that are intended // to be used to add tracing by wrapping existing handlers. -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" +package otelhttp diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go index 204588b849..844363a090 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" +package otelhttp import ( "net/http" diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/body_wrapper.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/body_wrapper.go index d032aa841b..aeff416046 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/body_wrapper.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/body_wrapper.go @@ -1,12 +1,12 @@ -// Code generated by gotmpl. DO NOT MODIFY. -// source: internal/shared/request/body_wrapper.go.tmpl - // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +// DO NOT MODIFY. Generated by gotmpl. +// source: internal/shared/request/body_wrapper.go.tmpl + // Package request provides types and functionality to handle HTTP request // handling. -package request // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" +package request import ( "io" diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/gen.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/gen.go index 9e00dd2fce..98f7bdbfcf 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/gen.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/gen.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package request // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" +package request // Generate request package: //go:generate gotmpl --body=../../../../../../internal/shared/request/body_wrapper.go.tmpl "--data={}" --out=body_wrapper.go diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go index f29f9b7c96..6b523cb74f 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go @@ -1,10 +1,10 @@ -// Code generated by gotmpl. DO NOT MODIFY. -// source: internal/shared/request/resp_writer_wrapper.go.tmpl - // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package request // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" +// DO NOT MODIFY. Generated by gotmpl. +// source: internal/shared/request/resp_writer_wrapper.go.tmpl + +package request import ( "net/http" diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/client.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/client.go index 0241b08e85..c275b5f051 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/client.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/client.go @@ -1,12 +1,12 @@ -// Code generated by gotmpl. DO NOT MODIFY. -// source: internal/shared/semconv/client.go.tmpl - // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +// DO NOT MODIFY. Generated by gotmpl. +// source: internal/shared/semconv/client.go.tmpl + // Package semconv provides OpenTelemetry semantic convention types and // functionality. -package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" +package semconv import ( "context" @@ -20,8 +20,8 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/semconv/v1.41.0" - "go.opentelemetry.io/otel/semconv/v1.41.0/httpconv" + semconv "go.opentelemetry.io/otel/semconv/v1.43.0" + "go.opentelemetry.io/otel/semconv/v1.43.0/httpconv" ) type HTTPClient struct { @@ -45,7 +45,7 @@ func NewHTTPClient(meter metric.Meter) HTTPClient { return client } -func (n HTTPClient) Status(code int) (codes.Code, string) { +func (HTTPClient) Status(code int) (codes.Code, string) { if code < 100 || code >= 600 { return codes.Error, fmt.Sprintf("Invalid HTTP status code %d", code) } @@ -120,9 +120,7 @@ func (n HTTPClient) RequestTraceAttrs(req *http.Request) []attribute.KeyValue { // Restore any username/password info that was removed. req.URL.User = userinfo } - attrs = append(attrs, semconv.URLFull(u)) - - attrs = append(attrs, semconv.ServerAddress(requestHost)) + attrs = append(attrs, semconv.URLFull(u), semconv.ServerAddress(requestHost)) if eligiblePort > 0 { attrs = append(attrs, semconv.ServerPort(eligiblePort)) } @@ -138,11 +136,13 @@ func (n HTTPClient) RequestTraceAttrs(req *http.Request) []attribute.KeyValue { } // ResponseTraceAttrs returns trace attributes for an HTTP response made by a client. -func (n HTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue { +func (HTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue { /* below attributes are returned: - http.response.status_code - error.type + - network.protocol.name (only when it is not "http") + - network.protocol.version */ var count int if resp.StatusCode > 0 { @@ -153,6 +153,21 @@ func (n HTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue count++ } + // The protocol version is only known for certain once the response + // arrives: req.Proto reflects what the caller asked for, but the + // transport may negotiate a different version (for example HTTP/2 via + // ALPN). Report resp.Proto here so it overrides the request-time value + // on the span. As in RequestTraceAttrs, network.protocol.name is omitted + // when it is "http": the spec only requires it when the name differs from + // the protocol implied by http.request.method. + protoName, protoVersion := netProtocol(resp.Proto) + if protoName != "" && protoName != "http" { + count++ + } + if protoVersion != "" { + count++ + } + attrs := make([]attribute.KeyValue, 0, count) if resp.StatusCode > 0 { attrs = append(attrs, semconv.HTTPResponseStatusCode(resp.StatusCode)) @@ -162,10 +177,17 @@ func (n HTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue errorType := strconv.Itoa(resp.StatusCode) attrs = append(attrs, semconv.ErrorTypeKey.String(errorType)) } + + if protoName != "" && protoName != "http" { + attrs = append(attrs, semconv.NetworkProtocolName(protoName)) + } + if protoVersion != "" { + attrs = append(attrs, semconv.NetworkProtocolVersion(protoVersion)) + } return attrs } -func (n HTTPClient) method(method string) (attribute.KeyValue, attribute.KeyValue) { +func (HTTPClient) method(method string) (attribute.KeyValue, attribute.KeyValue) { if method == "" { return semconv.HTTPRequestMethodOther, attribute.KeyValue{} } @@ -180,7 +202,7 @@ func (n HTTPClient) method(method string) (attribute.KeyValue, attribute.KeyValu return semconv.HTTPRequestMethodOther, orig } -func (n HTTPClient) MetricAttributes(req *http.Request, statusCode int, additionalAttributes []attribute.KeyValue) []attribute.KeyValue { +func (n HTTPClient) MetricAttributes(req *http.Request, resp *http.Response, statusCode int, additionalAttributes []attribute.KeyValue) []attribute.KeyValue { num := len(additionalAttributes) + 2 var h string if req.URL != nil { @@ -200,7 +222,14 @@ func (n HTTPClient) MetricAttributes(req *http.Request, statusCode int, addition num++ } - protoName, protoVersion := netProtocol(req.Proto) + // Prefer the negotiated protocol reported on the response: req.Proto is + // only what the caller asked for, and the transport may have upgraded + // the connection (for example HTTP/2 via ALPN). + proto := req.Proto + if resp != nil && resp.Proto != "" { + proto = resp.Proto + } + protoName, protoVersion := netProtocol(proto) if protoName != "" { num++ } @@ -213,7 +242,8 @@ func (n HTTPClient) MetricAttributes(req *http.Request, statusCode int, addition } attributes := slices.Grow(additionalAttributes, num) - attributes = append(attributes, + attributes = append( + attributes, semconv.HTTPRequestMethodKey.String(standardizeHTTPMethod(req.Method)), semconv.ServerAddress(requestHost), n.scheme(req), @@ -249,7 +279,7 @@ func (o MetricOpts) AddOptions() metric.AddOption { } func (n HTTPClient) MetricOptions(ma MetricAttributes) MetricOpts { - attributes := n.MetricAttributes(ma.Req, ma.StatusCode, ma.AdditionalAttributes) + attributes := n.MetricAttributes(ma.Req, ma.Resp, ma.StatusCode, ma.AdditionalAttributes) if ma.StatusCode == 0 && ma.Err != nil { attributes = append(attributes, n.ErrorType(ma.Err)) } @@ -269,12 +299,12 @@ func (n HTTPClient) MetricOptions(ma MetricAttributes) MetricOpts { // type per failure keeps attribute cardinality bounded, as required by the // OTel spec (error.type SHOULD have low cardinality). Callers that need // finer-grained error distinctions should inspect the error themselves. -func (n HTTPClient) ErrorType(err error) attribute.KeyValue { +func (HTTPClient) ErrorType(err error) attribute.KeyValue { t := reflect.TypeOf(err) if t == nil { return semconv.ErrorTypeOther } - if t.Kind() == reflect.Ptr { + if t.Kind() == reflect.Pointer { t = t.Elem() } var value string @@ -307,13 +337,13 @@ func (n HTTPClient) RecordMetrics(ctx context.Context, md MetricData, opts Metri } // TraceAttributes returns attributes for httptrace. -func (n HTTPClient) TraceAttributes(host string) []attribute.KeyValue { +func (HTTPClient) TraceAttributes(host string) []attribute.KeyValue { return []attribute.KeyValue{ semconv.ServerAddress(host), } } -func (n HTTPClient) scheme(req *http.Request) attribute.KeyValue { +func (HTTPClient) scheme(req *http.Request) attribute.KeyValue { if req.URL != nil && req.URL.Scheme != "" { return semconv.URLScheme(req.URL.Scheme) } diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/gen.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/gen.go index a8a0d58df3..fbcd4f6b23 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/gen.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/gen.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" +package semconv // Generate semconv package: //go:generate gotmpl --body=../../../../../../internal/shared/semconv/bench_test.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=bench_test.go diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/server.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/server.go index 8e0430863d..35e744e41d 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/server.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/server.go @@ -1,12 +1,12 @@ -// Code generated by gotmpl. DO NOT MODIFY. -// source: internal/shared/semconv/server.go.tmpl - // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +// DO NOT MODIFY. Generated by gotmpl. +// source: internal/shared/semconv/server.go.tmpl + // Package semconv provides OpenTelemetry semantic convention types and // functionality. -package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" +package semconv import ( "context" @@ -20,8 +20,8 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/semconv/v1.41.0" - "go.opentelemetry.io/otel/semconv/v1.41.0/httpconv" + semconv "go.opentelemetry.io/otel/semconv/v1.43.0" + "go.opentelemetry.io/otel/semconv/v1.43.0/httpconv" ) type RequestTraceAttrsOpts struct { @@ -67,7 +67,7 @@ func NewHTTPServer(meter metric.Meter) HTTPServer { // Status returns a span status code and message for an HTTP status code // value returned by a server. Status codes in the 400-499 range are not // returned as errors. -func (n HTTPServer) Status(code int) (codes.Code, string) { +func (HTTPServer) Status(code int) (codes.Code, string) { if code < 100 || code >= 600 { return codes.Error, fmt.Sprintf("Invalid HTTP status code %d", code) } @@ -168,7 +168,8 @@ func (n HTTPServer) RequestTraceAttrs(server string, req *http.Request, opts Req } attrs := make([]attribute.KeyValue, 0, count) - attrs = append(attrs, + attrs = append( + attrs, semconv.ServerAddress(host), method, scheme, @@ -216,7 +217,7 @@ func (n HTTPServer) RequestTraceAttrs(server string, req *http.Request, opts Req return attrs } -func (s HTTPServer) NetworkTransportAttr(network string) []attribute.KeyValue { +func (HTTPServer) NetworkTransportAttr(network string) []attribute.KeyValue { attr := semconv.NetworkTransportPipe switch network { case "tcp", "tcp4", "tcp6": @@ -239,7 +240,11 @@ type ServerMetricData struct { } type MetricAttributes struct { - Req *http.Request + Req *http.Request + // Resp is the client response, if any. It is only consulted by + // HTTPClient.MetricAttributes to source the negotiated protocol version; + // server-side metric recording ignores it. + Resp *http.Response StatusCode int Route string AdditionalAttributes []attribute.KeyValue @@ -274,7 +279,7 @@ func (n HTTPServer) RecordMetrics(ctx context.Context, md ServerMetricData) { // It returns "{method} {route}" when the request has a pattern, // or just "{method}" when no route is available. // Non-standard HTTP methods are replaced by "HTTP". -func (n HTTPServer) SpanName(r *http.Request) string { +func (HTTPServer) SpanName(r *http.Request) string { method := strings.ToUpper(r.Method) if _, ok := methodLookup[method]; !ok { method = "HTTP" @@ -287,7 +292,7 @@ func (n HTTPServer) SpanName(r *http.Request) string { return method } -func (n HTTPServer) method(method string) (attribute.KeyValue, attribute.KeyValue) { +func (HTTPServer) method(method string) (attribute.KeyValue, attribute.KeyValue) { if method == "" { return semconv.HTTPRequestMethodOther, attribute.KeyValue{} } @@ -314,7 +319,7 @@ func (n HTTPServer) scheme(https bool) attribute.KeyValue { //nolint:revive // i // // If any of the fields in the ResponseTelemetry are not set the attribute will // be omitted. -func (n HTTPServer) ResponseTraceAttrs(resp ResponseTelemetry) []attribute.KeyValue { +func (HTTPServer) ResponseTraceAttrs(resp ResponseTelemetry) []attribute.KeyValue { var count int if resp.ReadBytes > 0 { @@ -330,17 +335,20 @@ func (n HTTPServer) ResponseTraceAttrs(resp ResponseTelemetry) []attribute.KeyVa attributes := make([]attribute.KeyValue, 0, count) if resp.ReadBytes > 0 { - attributes = append(attributes, + attributes = append( + attributes, semconv.HTTPRequestBodySize(int(resp.ReadBytes)), ) } if resp.WriteBytes > 0 { - attributes = append(attributes, + attributes = append( + attributes, semconv.HTTPResponseBodySize(int(resp.WriteBytes)), ) } if resp.StatusCode > 0 { - attributes = append(attributes, + attributes = append( + attributes, semconv.HTTPResponseStatusCode(resp.StatusCode), ) } @@ -349,7 +357,7 @@ func (n HTTPServer) ResponseTraceAttrs(resp ResponseTelemetry) []attribute.KeyVa } // Route returns the attribute for the route. -func (n HTTPServer) Route(route string) attribute.KeyValue { +func (HTTPServer) Route(route string) attribute.KeyValue { return semconv.HTTPRoute(route) } diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go index d6842ed2ab..0de0bd83c4 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go @@ -1,10 +1,10 @@ -// Code generated by gotmpl. DO NOT MODIFY. -// source: internal/shared/semconv/util.go.tmpl - // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" +// DO NOT MODIFY. Generated by gotmpl. +// source: internal/shared/semconv/util.go.tmpl + +package semconv import ( "net" @@ -15,7 +15,7 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" - semconvNew "go.opentelemetry.io/otel/semconv/v1.41.0" + semconvNew "go.opentelemetry.io/otel/semconv/v1.43.0" ) // SplitHostPort splits a network address hostport of the form "host", @@ -32,29 +32,29 @@ func SplitHostPort(hostport string) (host string, port int) { addrEnd := strings.LastIndexByte(hostport, ']') if addrEnd < 0 { // Invalid hostport. - return + return host, port } if i := strings.LastIndexByte(hostport[addrEnd:], ':'); i < 0 { host = hostport[1:addrEnd] - return + return host, port } } else { if i := strings.LastIndexByte(hostport, ':'); i < 0 { host = hostport - return + return host, port } } host, pStr, err := net.SplitHostPort(hostport) if err != nil { - return + return host, port } p, err := strconv.ParseUint(pStr, 10, 16) if err != nil { - return + return host, port } - return host, int(p) //nolint:gosec // Byte size checked 16 above. + return host, int(p) } func requiredHTTPPort(https bool, port int) int { //nolint:revive // ignore linter @@ -84,7 +84,7 @@ func httpRoute(pattern string) string { return "" } -func netProtocol(proto string) (name string, version string) { +func netProtocol(proto string) (name, version string) { name, version, _ = strings.Cut(proto, "/") switch name { case "HTTP": diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/labeler.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/labeler.go index d62ce44b00..8362b82468 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/labeler.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/labeler.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" +package otelhttp import ( "context" diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/start_time_context.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/start_time_context.go index 9476ef01b0..9b6c0a889b 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/start_time_context.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/start_time_context.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" +package otelhttp import ( "context" diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go index b15895cee2..82501eab32 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go @@ -1,10 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" +package otelhttp import ( "context" + "fmt" "io" "net/http" "net/http/httptrace" @@ -15,7 +16,7 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/propagation" - otelsemconv "go.opentelemetry.io/otel/semconv/v1.41.0" + otelsemconv "go.opentelemetry.io/otel/semconv/v1.43.0" "go.opentelemetry.io/otel/trace" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" @@ -142,6 +143,9 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) { t.propagators.Inject(ctx, propagation.HeaderCarrier(r.Header)) res, err := t.rt.RoundTrip(r) + if err == nil { + res, err = ensureResponseBody(t.rt, r, res) + } // Record the metrics on error or no error. statusCode := 0 @@ -160,6 +164,7 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) { }, t.semconv.MetricOptions(semconv.MetricAttributes{ Req: r, + Resp: res, StatusCode: statusCode, Err: err, AdditionalAttributes: append(labeler.Get(), t.metricAttributesFromRequest(r)...), @@ -183,6 +188,20 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) { return res, nil } +func ensureResponseBody(rt http.RoundTripper, r *http.Request, res *http.Response) (*http.Response, error) { + switch { + case res == nil: + return nil, fmt.Errorf("http: RoundTripper implementation (%T) returned a nil *Response with a nil error", rt) + case res.Body != nil: + return res, nil + case res.ContentLength > 0 && r.Method != http.MethodHead: + return nil, fmt.Errorf("http: RoundTripper implementation (%T) returned a *Response with content length %d but a nil Body", rt, res.ContentLength) + default: + res.Body = http.NoBody + return res, nil + } +} + func (t *Transport) metricAttributesFromRequest(r *http.Request) []attribute.KeyValue { var attributeForRequest []attribute.KeyValue if t.metricAttributesFn != nil { diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go index 2feb885000..9017f2f43a 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" +package otelhttp // Version is the current release version of the otelhttp instrumentation. -const Version = "0.69.0" +const Version = "0.71.0" diff --git a/vendor/go.opentelemetry.io/otel/.golangci.yml b/vendor/go.opentelemetry.io/otel/.golangci.yml index 8a7f1ec5d9..a0ba70805e 100644 --- a/vendor/go.opentelemetry.io/otel/.golangci.yml +++ b/vendor/go.opentelemetry.io/otel/.golangci.yml @@ -143,8 +143,7 @@ linters: - name: constant-logical-expr - name: context-as-argument arguments: - - allow-types-before: '*testing.T' - disabled: true + - allow-types-before: '*testing.T,*testing.B' - name: context-keys-type - name: deep-exit - name: defer diff --git a/vendor/go.opentelemetry.io/otel/CHANGELOG.md b/vendor/go.opentelemetry.io/otel/CHANGELOG.md index 2db588ea27..4d473a1e85 100644 --- a/vendor/go.opentelemetry.io/otel/CHANGELOG.md +++ b/vendor/go.opentelemetry.io/otel/CHANGELOG.md @@ -11,6 +11,34 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm +## [1.46.0/0.68.0/0.22.0/0.0.19] - 2026-08-25 + +This release is the last to support [Go 1.25]. +The next release will require at least [Go 1.26]. + +### Added + +- Support testing of [Go 1.27]. (#8811) +- Support `http/json` protocol in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#8273, #8775, #8831) +- Add `Hasher` struct and methods in `go.opentelemetry.io/otel/attribute` to compute authoritative `Distinct` hashes incrementally for attribute filtering and deduplication. (#8598) + +### Changed + +- Lazily evaluate filtered and dropped attributes on measurement hot paths in `go.opentelemetry.io/otel/sdk/metric` to avoid unnecessary attribute set allocations. (#8598) +- Add `ErrExporterShutdown` to `go.opentelemetry.io/otel/sdk/log` and return it from the `go.opentelemetry.io/otel/exporters/stdout/stdoutlog`, `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`, and `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` exporters when `Export` is called after `Shutdown`. (#8773) +- Clarify in `go.opentelemetry.io/otel/log` that calling `Logger.Enabled` is optional and that cached results can become stale. (#8764) + +### Fixed + +- Export dropped attribute counts in OTLP log records from `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#8829) +- Name span events created from OpenTracing logs after the `event` log field, falling back to `log`, instead of always using an empty name in `go.opentelemetry.io/otel/bridge/opentracing`. (#8648) +- Count exception attributes omitted due to the attribute count limit as dropped in `go.opentelemetry.io/otel/sdk/log`. (#8796) +- Prevent log record and instrumentation scope attributes with empty keys from reaching processors and exporters in `go.opentelemetry.io/otel/sdk/log`. (#8797) +- Fix a data race when span attributes are read concurrently in `go.opentelemetry.io/otel/sdk/trace`. (#8706) +- Prevent a panic in `(*Set).Filter` when called on a nil receiver in `go.opentelemetry.io/otel/attribute`. (#8792) +- The simple span and log processors record `otel.sdk.processor.{span,log}.processed` when the record is submitted to the exporter instead of after the export completes, and no longer set `error.type` from the export outcome, in `go.opentelemetry.io/otel/sdk/trace` and `go.opentelemetry.io/otel/sdk/log`. (#8705) +- Prevent `Resource.MarshalLog` from panicking on nil resources in `go.opentelemetry.io/otel/sdk/resource`. (#8758) + ## [1.45.0/0.67.0/0.21.0/0.0.18] - 2026-08-03 ### Added @@ -3782,7 +3810,8 @@ It contains api and sdk for trace and meter. - CircleCI build CI manifest files. - CODEOWNERS file to track owners of this project. -[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.45.0...HEAD +[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.46.0...HEAD +[1.46.0/0.68.0/0.22.0/0.0.19]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.46.0 [1.45.0/0.67.0/0.21.0/0.0.18]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.45.0 [1.44.0/0.66.0/0.20.0/0.0.17]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.44.0 [1.43.0/0.65.0/0.19.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.43.0 @@ -3887,6 +3916,7 @@ It contains api and sdk for trace and meter. +[Go 1.27]: https://go.dev/doc/go1.27 [Go 1.26]: https://go.dev/doc/go1.26 [Go 1.25]: https://go.dev/doc/go1.25 [Go 1.24]: https://go.dev/doc/go1.24 diff --git a/vendor/go.opentelemetry.io/otel/Makefile b/vendor/go.opentelemetry.io/otel/Makefile index d4711257df..c674ef8a17 100644 --- a/vendor/go.opentelemetry.io/otel/Makefile +++ b/vendor/go.opentelemetry.io/otel/Makefile @@ -69,8 +69,13 @@ $(GORELEASE): PACKAGE=golang.org/x/exp/cmd/gorelease GOVULNCHECK = $(TOOLS)/govulncheck $(TOOLS)/govulncheck: PACKAGE=golang.org/x/vuln/cmd/govulncheck +AFFECTEDMODS = $(TOOLS)/affectedmods +AFFECTEDMODS_FILES := $(sort $(shell find $(TOOLS_MOD_DIR)/affectedmods -type f)) +$(TOOLS)/affectedmods: PACKAGE=go.opentelemetry.io/otel/$(TOOLS_MOD_DIR)/affectedmods +$(TOOLS)/affectedmods: $(AFFECTEDMODS_FILES) + .PHONY: tools -tools: $(CROSSLINK) $(GOLANGCI_LINT) $(MISSPELL) $(GOCOVMERGE) $(STRINGER) $(VERIFYREADMES) $(MULTIMOD) $(SEMCONVKIT) $(GOTMPL) $(GORELEASE) +tools: $(CROSSLINK) $(GOLANGCI_LINT) $(MISSPELL) $(GOCOVMERGE) $(STRINGER) $(VERIFYREADMES) $(MULTIMOD) $(SEMCONVKIT) $(GOTMPL) $(GORELEASE) $(AFFECTEDMODS) # Virtualized python tools via docker @@ -125,9 +130,11 @@ go-work: $(CROSSLINK) # Build -.PHONY: build +.PHONY: build cross-build build: $(OTEL_GO_MOD_DIRS:%=build/%) $(OTEL_GO_MOD_DIRS:%=build-tests/%) +# Cross-platform builds cannot execute the binaries produced by build-tests (go test), so use a compile-only target. +cross-build: $(OTEL_GO_MOD_DIRS:%=build/%) build/%: DIR=$* build/%: @echo "$(GO) build $(DIR)/..." \ @@ -163,6 +170,9 @@ test/%: | grep -v third_party \ | xargs $(GO) test -timeout $(TIMEOUT)s $(ARGS) +.PHONY: test-tools +test-tools: test/$(TOOLS_MOD_DIR) + COVERAGE_MODE = atomic COVERAGE_PROFILE = coverage.out .PHONY: test-coverage @@ -187,15 +197,23 @@ benchmark/%: # sdk/metric is split into two shards to work around CodSpeed limitations. # See https://github.com/CodSpeedHQ/codspeed-go/issues/56 -BENCHMARK_SHARDS := $(filter-out ./sdk/metric,$(OTEL_GO_MOD_DIRS)) ./sdk/metric/root ./sdk/metric/internal -benchmark/./sdk/metric/root: +BENCHMARK_SHARDS := $(filter-out ./sdk/metric,$(OTEL_GO_MOD_DIRS)) ./sdk/metric/. ./sdk/metric/internal +benchmark/./sdk/metric/.: cd ./sdk/metric && $(GO) test -run='^$$' -bench=. $(ARGS) . ./exemplar/... -benchmark/./sdk/metric/internal: - cd ./sdk/metric && $(GO) test -run='^$$' -bench=. $(ARGS) ./internal/... print-sharded-benchmarks: @echo $(BENCHMARK_SHARDS) | jq -cR 'split(" ")' +# Print the JSON list of benchmark shards whose code changed since +# BASE_REF (default: main). Filters print-sharded-benchmarks +# down to shards whose underlying module contains a changed *.go file. +# Non-Go changes (docs, workflows, Makefile, go.mod/go.sum, tooling) emit []. +# Override the diff base via BASE_REF, or pass ARGS=-all to emit the full list. +BASE_REF ?= main +.PHONY: print-affected-benchmarks +print-affected-benchmarks: + @$(MAKE) -s print-sharded-benchmarks | $(GO) -C $(TOOLS_MOD_DIR) run ./affectedmods $(if $(strip $(BASE_REF)),-base=$(BASE_REF),) $(ARGS) + .PHONY: golangci-lint golangci-lint-fix golangci-lint-fix: ARGS=--fix golangci-lint-fix: golangci-lint diff --git a/vendor/go.opentelemetry.io/otel/README.md b/vendor/go.opentelemetry.io/otel/README.md index ce97e9a251..9291d1470d 100644 --- a/vendor/go.opentelemetry.io/otel/README.md +++ b/vendor/go.opentelemetry.io/otel/README.md @@ -53,18 +53,25 @@ Currently, this project supports the following environments. | OS | Go Version | Architecture | |----------|------------|--------------| +| Ubuntu | 1.27 | amd64 | | Ubuntu | 1.26 | amd64 | | Ubuntu | 1.25 | amd64 | +| Ubuntu | 1.27 | 386 | | Ubuntu | 1.26 | 386 | | Ubuntu | 1.25 | 386 | +| Ubuntu | 1.27 | arm64 | | Ubuntu | 1.26 | arm64 | | Ubuntu | 1.25 | arm64 | +| macOS | 1.27 | amd64 | | macOS | 1.26 | amd64 | | macOS | 1.25 | amd64 | +| macOS | 1.27 | arm64 | | macOS | 1.26 | arm64 | | macOS | 1.25 | arm64 | +| Windows | 1.27 | amd64 | | Windows | 1.26 | amd64 | | Windows | 1.25 | amd64 | +| Windows | 1.27 | 386 | | Windows | 1.26 | 386 | | Windows | 1.25 | 386 | diff --git a/vendor/go.opentelemetry.io/otel/VERSIONING.md b/vendor/go.opentelemetry.io/otel/VERSIONING.md index b27c9e84f5..56eaa7d220 100644 --- a/vendor/go.opentelemetry.io/otel/VERSIONING.md +++ b/vendor/go.opentelemetry.io/otel/VERSIONING.md @@ -12,6 +12,12 @@ is designed so the following goals can be achieved. * [Semantic import versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning) will be used. + * Stable module compatibility is understood in terms of the [Go 1 + compatibility guidelines](https://go.dev/doc/go1compat). Code that + compiled against an older version of a package should continue to compile + against newer versions of that package, subject to the exceptions in the + Go 1 compatibility guidelines and any additional exceptions documented + below. * Versions will comply with [semver 2.0](https://semver.org/spec/v2.0.0.html) with the following exceptions. * New methods may be added to exported API interfaces. All exported diff --git a/vendor/go.opentelemetry.io/otel/attribute/hash.go b/vendor/go.opentelemetry.io/otel/attribute/hash.go index f651eb13d9..54c26e67a0 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/hash.go +++ b/vendor/go.opentelemetry.io/otel/attribute/hash.go @@ -33,19 +33,71 @@ const ( emptyID uint64 = 7305809155345288421 // "__empty_" (little endian) ) +// Hasher computes a Distinct value from KeyValue attributes supplied with +// Write. +// +// A Hasher must be obtained from [NewHasher]. The zero value is not usable and +// its methods will panic. +type Hasher struct { + h xxhash.Hash +} + +// NewHasher returns a new Hasher. +func NewHasher() *Hasher { + return &Hasher{h: xxhash.New()} +} + +// Reset resets h to its initial state so it can be reused. +func (h *Hasher) Reset() { + h.h.Reset() +} + +// Write adds kv to the hash. +// +// Write requires attributes to be supplied in ascending key order with no +// duplicate keys. To produce the same Distinct as Set.Equivalent, write +// attributes in ascending key order, with no more than one value for each key. +// If the source contains duplicate keys, retain the last value for each key +// before calling Write. +func (h *Hasher) Write(kv KeyValue) { + // hashKV mutates the digest h.h refers to in place and returns the same + // Hash value it was passed. Discarding the result keeps the digest pointer + // from flowing back into h, which would force the digest to be heap + // allocated for every Hasher. Keeping Write this small also keeps it within + // the inlining budget, which matters because hashKVs calls it per attribute. + _ = hashKV(h.h, kv) +} + +// Distinct returns the identifier for the attributes written to h. When Write +// is called as described above, it returns the same value as [Set.Equivalent]. +func (h *Hasher) Distinct() Distinct { + // No count of written attributes is needed to detect the empty case. The + // sum of a digest with nothing written to it is emptyHash, which is + // non-zero (0xef46db3751d8e999), so it passes through remapZeroHash + // unchanged and matches emptySet.Equivalent. + return Distinct{hash: remapZeroHash(h.h.Sum64())} +} + +// remapZeroHash remaps a 0 sum to a non-zero value, because hash == 0 is a +// reserved sentinel (treated as empty/invalid). +func remapZeroHash(sum uint64) uint64 { + if sum == 0 { + return 1 + } + return sum +} + // hashKVs returns a new xxHash64 hash of kvs. +// +// This routes through [Hasher] so that Set hashing and Hasher cannot disagree: +// there is exactly one implementation of how attributes are mixed and how the +// final sum is framed. func hashKVs(kvs []KeyValue) uint64 { - h := xxhash.New() + h := NewHasher() for _, kv := range kvs { - h = hashKV(h, kv) + h.Write(kv) } - sum := h.Sum64() - // Remap 0 to a non-zero value for non-empty input because hash == 0 is a reserved sentinel (treated as empty/invalid). - const remappedZeroHash uint64 = 1 - if sum == 0 && len(kvs) > 0 { - return remappedZeroHash - } - return sum + return h.Distinct().hash } // hashKV returns the xxHash64 hash of kv with h as the base. diff --git a/vendor/go.opentelemetry.io/otel/attribute/internal/xxhash/xxhash.go b/vendor/go.opentelemetry.io/otel/attribute/internal/xxhash/xxhash.go index c851179cca..4fcdd2dbea 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/internal/xxhash/xxhash.go +++ b/vendor/go.opentelemetry.io/otel/attribute/internal/xxhash/xxhash.go @@ -62,3 +62,8 @@ func (h Hash) String(val string) Hash { func (h Hash) Sum64() uint64 { return h.d.Sum64() } + +// Reset resets the hash to its initial state. +func (h Hash) Reset() { + h.d.Reset() +} diff --git a/vendor/go.opentelemetry.io/otel/attribute/set.go b/vendor/go.opentelemetry.io/otel/attribute/set.go index 87d6f96200..56a70a9f6d 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/set.go +++ b/vendor/go.opentelemetry.io/otel/attribute/set.go @@ -313,6 +313,9 @@ func filteredToFront(slice []KeyValue, keep Filter) int { // Filter returns a filtered copy of this Set. See the documentation for // NewSetWithSortableFiltered for more details. func (l *Set) Filter(re Filter) (Set, []KeyValue) { + if l == nil { + return emptySet, nil + } if re == nil { return *l, nil } diff --git a/vendor/go.opentelemetry.io/otel/renovate.json b/vendor/go.opentelemetry.io/otel/renovate.json index fa5acf2d3b..5008ab2bf1 100644 --- a/vendor/go.opentelemetry.io/otel/renovate.json +++ b/vendor/go.opentelemetry.io/otel/renovate.json @@ -15,6 +15,13 @@ "matchDepTypes": ["indirect"], "enabled": true }, + { + "description": "Disable Go module major updates to v2+", + "matchManagers": ["gomod"], + "matchUpdateTypes": ["major"], + "matchNewValue": "/^v?([2-9]|[1-9][0-9]+)\\./", + "enabled": false + }, { "matchPackageNames": ["go.opentelemetry.io/build-tools/**"], "groupName": "build-tools" diff --git a/vendor/go.opentelemetry.io/otel/sdk/internal/attrnorm/truncate.go b/vendor/go.opentelemetry.io/otel/sdk/internal/attrnorm/truncate.go index 9955e90726..c8341599b3 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/internal/attrnorm/truncate.go +++ b/vendor/go.opentelemetry.io/otel/sdk/internal/attrnorm/truncate.go @@ -16,10 +16,10 @@ import ( // Truncate returns a truncated version of attr. Only string, string slice, // byte slice, slice, and map attribute values are truncated. String values are -// truncated to at most a length of limit. Each string slice value is truncated -// in this fashion (the slice length itself is unaffected), and byte slice -// values are truncated to at most limit bytes. For slice and map attribute -// values, the limit is applied recursively to contained values. +// truncated according to limit. Each string slice value is truncated in this +// fashion (the slice length itself is unaffected), and byte slice values are +// truncated to at most limit bytes. For slice and map attribute values, the +// limit is applied recursively to contained values. // // No truncation is performed for a negative limit. func Truncate(limit int, attr attribute.KeyValue) attribute.KeyValue { @@ -155,22 +155,20 @@ func needsTruncation(limit int, v attribute.Value) bool { return false } -// truncate returns a truncated version of s such that it contains less than -// the limit number of characters. Truncation is applied by returning the limit -// number of valid characters contained in s. +// truncate returns a version of s truncated according to limit. // // If limit is negative, it returns the original string. // -// UTF-8 is supported. When truncating, all invalid characters are dropped +// UTF-8 is supported. When truncating, all invalid UTF-8 bytes are dropped // before applying truncation. // -// If s already contains less than the limit number of bytes, it is returned -// unchanged. No invalid characters are removed. +// If s already contains at most limit bytes, it is returned unchanged. No +// invalid characters are removed. func truncate(limit int, s string) string { - // This prioritize performance in the following order based on the most - // common expected use-cases. + // This prioritizes performance in the following order based on the most + // common expected use cases. // - // - Short values less than the default limit (128). + // - Values shorter than the default limit (128). // - Strings with valid encodings that exceed the limit. // - No limit. // - Strings with invalid encodings that exceed the limit. diff --git a/vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go b/vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go index e829d17948..67eea20a74 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go +++ b/vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go @@ -34,9 +34,9 @@ func newFeature[T any](suffix []string, parse func(string) (T, bool)) Feature[T] // feature. func (f Feature[T]) Keys() []string { return f.keys } -// Lookup returns the user configured value for the feature and true if the +// Lookup returns the user-configured value for the feature and true if the // user has enabled the feature. Otherwise, if the feature is not enabled, a -// zero-value and false are returned. +// zero value and false are returned. func (f Feature[T]) Lookup() (v T, ok bool) { // https://github.com/open-telemetry/opentelemetry-specification/blob/62effed618589a0bec416a87e559c0a9d96289bb/specification/configuration/sdk-environment-variables.md#parsing-empty-value // diff --git a/vendor/go.opentelemetry.io/otel/sdk/resource/resource.go b/vendor/go.opentelemetry.io/otel/sdk/resource/resource.go index 68ab274d2f..dcd7280ac9 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/resource/resource.go +++ b/vendor/go.opentelemetry.io/otel/sdk/resource/resource.go @@ -120,6 +120,9 @@ func (r *Resource) String() string { // MarshalLog is the marshaling function used by the logging system to represent this Resource. func (r *Resource) MarshalLog() any { + if r == nil { + r = Empty() + } return struct { Attributes attribute.Set SchemaURL string diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/internal/observ/simple_span_processor.go b/vendor/go.opentelemetry.io/otel/sdk/trace/internal/observ/simple_span_processor.go index 89922e4b80..e7ca1a6d97 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/internal/observ/simple_span_processor.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/internal/observ/simple_span_processor.go @@ -6,7 +6,6 @@ package observ import ( "context" "fmt" - "sync" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" @@ -17,22 +16,10 @@ import ( "go.opentelemetry.io/otel/semconv/v1.43.0/otelconv" ) -var measureAttrsPool = sync.Pool{ - New: func() any { - // "component.name" + "component.type" + "error.type" - const n = 1 + 1 + 1 - s := make([]attribute.KeyValue, 0, n) - // Return a pointer to a slice instead of a slice itself - // to avoid allocations on every call. - return &s - }, -} - // SSP is the instrumentation for an OTel SDK SimpleSpanProcessor. type SSP struct { spansProcessedCounter metric.Int64Counter addOpts []metric.AddOption - attrs []attribute.KeyValue } // SSPComponentName returns the component name attribute for a @@ -70,29 +57,12 @@ func NewSSP(id int64) (*SSP, error) { return &SSP{ spansProcessedCounter: spansProcessedCounter.Inst(), addOpts: addOpts, - attrs: attrs, }, err } -// SpanProcessed records that a span has been processed by the SimpleSpanProcessor. -// If err is non-nil, it records the processing error as an attribute. -func (ssp *SSP) SpanProcessed(ctx context.Context, err error) { - ssp.spansProcessedCounter.Add(ctx, 1, ssp.addOption(err)...) -} - -func (ssp *SSP) addOption(err error) []metric.AddOption { - if err == nil { - return ssp.addOpts - } - attrs := measureAttrsPool.Get().(*[]attribute.KeyValue) - defer func() { - clear(*attrs) - *attrs = (*attrs)[:0] // reset the slice for reuse - measureAttrsPool.Put(attrs) - }() - *attrs = append(*attrs, ssp.attrs...) - *attrs = append(*attrs, semconv.ErrorType(err)) - // Do not inefficiently make a copy of attrs by using - // WithAttributes instead of WithAttributeSet. - return []metric.AddOption{metric.WithAttributeSet(attribute.NewSet(*attrs...))} +// SpanProcessed records that a span has been submitted to the exporter by the +// SimpleSpanProcessor. Per the semantic conventions, this count is recorded at +// submission time and MUST NOT be affected by the export outcome. +func (ssp *SSP) SpanProcessed(ctx context.Context) { + ssp.spansProcessedCounter.Add(ctx, 1, ssp.addOpts...) } diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/simple_span_processor.go b/vendor/go.opentelemetry.io/otel/sdk/trace/simple_span_processor.go index e9bec43948..97985c4988 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/simple_span_processor.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/simple_span_processor.go @@ -67,19 +67,19 @@ func (ssp *simpleSpanProcessor) OnEnd(s ReadOnlySpan) { ssp.exporterMu.Lock() defer ssp.exporterMu.Unlock() - var err error - if ssp.exporter != nil && s.SpanContext().TraceFlags().IsSampled() { - err = ssp.exporter.ExportSpans(context.Background(), []ReadOnlySpan{s}) - if err != nil { - otel.Handle(err) - } - } - if ssp.inst != nil { // Add the span to the context to ensure the metric is recorded - // with the correct span context. + // with the correct span context. Record the span as processed before + // invoking the exporter so the count is unaffected by the export + // outcome. ctx := trace.ContextWithSpanContext(context.Background(), s.SpanContext()) - ssp.inst.SpanProcessed(ctx, err) + ssp.inst.SpanProcessed(ctx) + } + + if ssp.exporter != nil && s.SpanContext().TraceFlags().IsSampled() { + if err := ssp.exporter.ExportSpans(context.Background(), []ReadOnlySpan{s}); err != nil { + otel.Handle(err) + } } } diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/span.go b/vendor/go.opentelemetry.io/otel/sdk/trace/span.go index 0aae5f5bb2..aae9773145 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/span.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/span.go @@ -138,6 +138,11 @@ type recordingSpan struct { attributes []attribute.KeyValue droppedAttributes int logDropAttrsOnce sync.Once + // attributesDirty indicates attributes may contain duplicate keys. + attributesDirty bool + // attributesShared indicates the attributes backing array has been exposed + // to a reader and must not be modified. + attributesShared bool // events are stored in FIFO queue capped by configured limit. events evictedQueue[Event] @@ -251,6 +256,11 @@ func (s *recordingSpan) SetAttributes(attributes ...attribute.KeyValue) { s.addDroppedAttr(len(attributes)) return } + maxCap := len(s.attributes) + len(attributes) + if limit > 0 { + maxCap = min(maxCap, limit) + } + s.ensureAttrsWritable(maxCap) // If adding these attributes could exceed the capacity of s perform a // de-duplication and truncation while adding to avoid over allocation. @@ -271,9 +281,23 @@ func (s *recordingSpan) SetAttributes(attributes ...attribute.KeyValue) { a = dedupAttr(a) a = attrnorm.Truncate(s.tracer.provider.spanLimits.AttributeValueLengthLimit, a) s.attributes = append(s.attributes, a) + s.attributesDirty = true } } +// ensureAttrsWritable copies shared attributes into a backing array with at +// least capacity. This method assumes s.mu.Lock is held by the caller. +func (s *recordingSpan) ensureAttrsWritable(capacity int) { + if !s.attributesShared { + return + } + capacity = max(capacity, len(s.attributes)) + attrs := make([]attribute.KeyValue, len(s.attributes), capacity) + copy(attrs, s.attributes) + s.attributes = attrs + s.attributesShared = false +} + // Declared as a var so tests can override. var logDropAttrs = func() { global.Warn("limit reached: dropping trace Span attributes") @@ -592,6 +616,7 @@ func (s *recordingSpan) Attributes() []attribute.KeyValue { s.mu.Lock() defer s.mu.Unlock() s.dedupeAttrs() + s.attributesShared = cap(s.attributes) > 0 return s.attributes } @@ -599,6 +624,10 @@ func (s *recordingSpan) Attributes() []attribute.KeyValue { // // This method assumes s.mu.Lock is held by the caller. func (s *recordingSpan) dedupeAttrs() { + if !s.attributesDirty { + return + } + s.ensureAttrsWritable(len(s.attributes)) // Do not set a capacity when creating this map. Benchmark testing has // showed this to only add unused memory allocations in general use. exists := make(map[attribute.Key]int, len(s.attributes)) @@ -622,6 +651,7 @@ func (s *recordingSpan) dedupeAttrsFromRecord(record map[attribute.Key]int) { } clear(s.attributes[len(unique):]) // Erase unneeded elements to let GC collect objects. s.attributes = unique + s.attributesDirty = false } // Links returns the links of this span. @@ -765,6 +795,7 @@ func (s *recordingSpan) snapshot() ReadOnlySpan { if len(s.attributes) > 0 { s.dedupeAttrs() sd.attributes = s.attributes + s.attributesShared = true } sd.droppedAttributeCount = s.droppedAttributes if len(s.events.queue) > 0 { diff --git a/vendor/go.opentelemetry.io/otel/sdk/version.go b/vendor/go.opentelemetry.io/otel/sdk/version.go index 1619fb3fa1..621d6d7e62 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/version.go +++ b/vendor/go.opentelemetry.io/otel/sdk/version.go @@ -6,5 +6,5 @@ package sdk // Version is the current release version of the OpenTelemetry SDK in use. func Version() string { - return "1.45.0" + return "1.46.0" } diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.41.0/httpconv/metric.go b/vendor/go.opentelemetry.io/otel/semconv/v1.43.0/httpconv/metric.go similarity index 100% rename from vendor/go.opentelemetry.io/otel/semconv/v1.41.0/httpconv/metric.go rename to vendor/go.opentelemetry.io/otel/semconv/v1.43.0/httpconv/metric.go index 734cf24094..1eb8c9e2a9 100644 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.41.0/httpconv/metric.go +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.43.0/httpconv/metric.go @@ -438,13 +438,6 @@ func (m ClientConnectionDuration) RecordSet(ctx context.Context, val float64, se m.Float64Histogram.Record(ctx, val, *o...) } -// AttrNetworkPeerAddress returns an optional attribute for the -// "network.peer.address" semantic convention. It represents the peer address of -// the network connection - IP address or Unix domain socket name. -func (ClientConnectionDuration) AttrNetworkPeerAddress(val string) attribute.KeyValue { - return attribute.String("network.peer.address", val) -} - // AttrNetworkProtocolVersion returns an optional attribute for the // "network.protocol.version" semantic convention. It represents the actual // version of the protocol used for network communication. @@ -452,6 +445,13 @@ func (ClientConnectionDuration) AttrNetworkProtocolVersion(val string) attribute return attribute.String("network.protocol.version", val) } +// AttrNetworkPeerAddress returns an optional attribute for the +// "network.peer.address" semantic convention. It represents the peer address of +// the network connection - IP address or Unix domain socket name. +func (ClientConnectionDuration) AttrNetworkPeerAddress(val string) attribute.KeyValue { + return attribute.String("network.peer.address", val) +} + // AttrURLScheme returns an optional attribute for the "url.scheme" semantic // convention. It represents the [URI scheme] component identifying the used // protocol. @@ -586,13 +586,6 @@ func (m ClientOpenConnections) AddSet(ctx context.Context, incr int64, set attri m.Int64UpDownCounter.Add(ctx, incr, *o...) } -// AttrNetworkPeerAddress returns an optional attribute for the -// "network.peer.address" semantic convention. It represents the peer address of -// the network connection - IP address or Unix domain socket name. -func (ClientOpenConnections) AttrNetworkPeerAddress(val string) attribute.KeyValue { - return attribute.String("network.peer.address", val) -} - // AttrNetworkProtocolVersion returns an optional attribute for the // "network.protocol.version" semantic convention. It represents the actual // version of the protocol used for network communication. @@ -600,6 +593,13 @@ func (ClientOpenConnections) AttrNetworkProtocolVersion(val string) attribute.Ke return attribute.String("network.protocol.version", val) } +// AttrNetworkPeerAddress returns an optional attribute for the +// "network.peer.address" semantic convention. It represents the peer address of +// the network connection - IP address or Unix domain socket name. +func (ClientOpenConnections) AttrNetworkPeerAddress(val string) attribute.KeyValue { + return attribute.String("network.peer.address", val) +} + // AttrURLScheme returns an optional attribute for the "url.scheme" semantic // convention. It represents the [URI scheme] component identifying the used // protocol. @@ -689,13 +689,6 @@ func (ClientOpenConnectionsObservable) AttrServerPort(val int) attribute.KeyValu return attribute.Int("server.port", val) } -// AttrNetworkPeerAddress returns an optional attribute for the -// "network.peer.address" semantic convention. It represents the peer address of -// the network connection - IP address or Unix domain socket name. -func (ClientOpenConnectionsObservable) AttrNetworkPeerAddress(val string) attribute.KeyValue { - return attribute.String("network.peer.address", val) -} - // AttrNetworkProtocolVersion returns an optional attribute for the // "network.protocol.version" semantic convention. It represents the actual // version of the protocol used for network communication. @@ -703,6 +696,13 @@ func (ClientOpenConnectionsObservable) AttrNetworkProtocolVersion(val string) at return attribute.String("network.protocol.version", val) } +// AttrNetworkPeerAddress returns an optional attribute for the +// "network.peer.address" semantic convention. It represents the peer address of +// the network connection - IP address or Unix domain socket name. +func (ClientOpenConnectionsObservable) AttrNetworkPeerAddress(val string) attribute.KeyValue { + return attribute.String("network.peer.address", val) +} + // AttrURLScheme returns an optional attribute for the "url.scheme" semantic // convention. It represents the [URI scheme] component identifying the used // protocol. diff --git a/vendor/go.opentelemetry.io/otel/version.go b/vendor/go.opentelemetry.io/otel/version.go index ea79030969..f599bf285d 100644 --- a/vendor/go.opentelemetry.io/otel/version.go +++ b/vendor/go.opentelemetry.io/otel/version.go @@ -5,5 +5,5 @@ package otel // Version is the current release version of OpenTelemetry in use. func Version() string { - return "1.45.0" + return "1.46.0" } diff --git a/vendor/go.opentelemetry.io/otel/versions.yaml b/vendor/go.opentelemetry.io/otel/versions.yaml index 3b1ad7301a..f329d171d9 100644 --- a/vendor/go.opentelemetry.io/otel/versions.yaml +++ b/vendor/go.opentelemetry.io/otel/versions.yaml @@ -3,7 +3,7 @@ module-sets: stable-v1: - version: v1.45.0 + version: v1.46.0 modules: - go.opentelemetry.io/otel - go.opentelemetry.io/otel/bridge/opencensus @@ -22,12 +22,12 @@ module-sets: - go.opentelemetry.io/otel/sdk/metric - go.opentelemetry.io/otel/trace experimental-metrics: - version: v0.67.0 + version: v0.68.0 modules: - go.opentelemetry.io/otel/exporters/prometheus - go.opentelemetry.io/otel/metric/x experimental-logs: - version: v0.21.0 + version: v0.22.0 modules: - go.opentelemetry.io/otel/log - go.opentelemetry.io/otel/log/logtest @@ -37,7 +37,7 @@ module-sets: - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp - go.opentelemetry.io/otel/exporters/stdout/stdoutlog experimental-schema: - version: v0.0.18 + version: v0.0.19 modules: - go.opentelemetry.io/otel/schema excluded-modules: diff --git a/vendor/go.podman.io/image/v5/docker/docker_client.go b/vendor/go.podman.io/image/v5/docker/docker_client.go index 2501187f98..3490367eb7 100644 --- a/vendor/go.podman.io/image/v5/docker/docker_client.go +++ b/vendor/go.podman.io/image/v5/docker/docker_client.go @@ -1193,19 +1193,17 @@ func isManifestUnknownError(err error) bool { return true } // registry.redhat.io as of October 2022 - var e errcode.Error - if errors.As(err, &e) && e.ErrorCode() == errcode.ErrorCodeUnknown && e.Message == "Not Found" { + if e, ok := errors.AsType[errcode.Error](err); ok && e.ErrorCode() == errcode.ErrorCodeUnknown && e.Message == "Not Found" { return true } // Harbor v2.10.2 - if errors.As(err, &e) && e.ErrorCode() == errcode.ErrorCodeUnknown && strings.Contains(strings.ToLower(e.Message), "not found") { + if e, ok := errors.AsType[errcode.Error](err); ok && e.ErrorCode() == errcode.ErrorCodeUnknown && strings.Contains(strings.ToLower(e.Message), "not found") { return true } // opencontainers/distribution-spec does not require the errcode.Error payloads to be used, // but specifies that the HTTP status must be 404. - var unexpected *unexpectedHTTPResponseError - if errors.As(err, &unexpected) && unexpected.StatusCode == http.StatusNotFound { + if unexpected, ok := errors.AsType[*unexpectedHTTPResponseError](err); ok && unexpected.StatusCode == http.StatusNotFound { return true } return false diff --git a/vendor/go.podman.io/image/v5/docker/docker_image_src.go b/vendor/go.podman.io/image/v5/docker/docker_image_src.go index 4a4a029198..1ba4f7b4e2 100644 --- a/vendor/go.podman.io/image/v5/docker/docker_image_src.go +++ b/vendor/go.podman.io/image/v5/docker/docker_image_src.go @@ -621,15 +621,17 @@ func isMirrorFallbackError(err error) bool { func isMirrorTransientError(err error) bool { // HTTP 5xx: handleErrorResponse returns UnexpectedHTTPStatusError for status // codes outside 400–499. Server-side error, another mirror may succeed. - var httpErr UnexpectedHTTPStatusError - if errors.As(err, &httpErr) && httpErr.StatusCode >= 500 { + if httpErr, ok := errors.AsType[UnexpectedHTTPStatusError](err); ok && httpErr.StatusCode >= 500 { return true } // Network timeout: makeRequest returns net.Error with Timeout() == true. // The mirror is reachable but slow — worth retrying on another. - var netErr net.Error - return errors.As(err, &netErr) && netErr.Timeout() + if netErr, ok := errors.AsType[net.Error](err); ok && netErr.Timeout() { + return true + } + + return false } // retireStaleOverride checks if the current mirrorOverride was set by another @@ -1059,6 +1061,7 @@ type bufferedNetworkReader struct { current *bufferedNetworkReaderBuffer mutex sync.Mutex gotEOF bool + readErr error } // handleBufferedNetworkReader runs in a goroutine @@ -1085,6 +1088,9 @@ func (n *bufferedNetworkReader) Close() error { } func (n *bufferedNetworkReader) read(p []byte) (int, error) { + if len(p) == 0 { + return 0, nil + } if n.current != nil { copied := copy(p, n.current.data[n.current.consumed:n.current.len]) n.current.consumed += copied @@ -1096,6 +1102,10 @@ func (n *bufferedNetworkReader) read(p []byte) (int, error) { return copied, nil } } + // Report the error only once the buffered data has been consumed. + if n.readErr != nil { + return 0, n.readErr + } if n.gotEOF { return 0, io.EOF } @@ -1105,10 +1115,11 @@ func (n *bufferedNetworkReader) read(p []byte) (int, error) { select { case b = <-n.readyBuffer: if b.err != nil { - if b.err != io.EOF { - return b.len, b.err + if b.err == io.EOF { + n.gotEOF = true + } else { + n.readErr = b.err } - n.gotEOF = true } b.consumed = 0 n.current = b diff --git a/vendor/go.podman.io/image/v5/internal/manifest/docker_schema2_list.go b/vendor/go.podman.io/image/v5/internal/manifest/docker_schema2_list.go index 5854a3d121..b301212912 100644 --- a/vendor/go.podman.io/image/v5/internal/manifest/docker_schema2_list.go +++ b/vendor/go.podman.io/image/v5/internal/manifest/docker_schema2_list.go @@ -226,13 +226,12 @@ func Schema2ListPublicClone(list *Schema2ListPublic) *Schema2ListPublic { func (list *Schema2ListPublic) ToOCI1Index() (*OCI1IndexPublic, error) { components := make([]imgspecv1.Descriptor, 0, len(list.Manifests)) for _, manifest := range list.Manifests { - platform := ociPlatformFromSchema2PlatformSpec(manifest.Platform) components = append(components, imgspecv1.Descriptor{ MediaType: manifest.MediaType, Size: manifest.Size, Digest: manifest.Digest, URLs: slices.Clone(manifest.URLs), - Platform: &platform, + Platform: new(ociPlatformFromSchema2PlatformSpec(manifest.Platform)), }) } oci := OCI1IndexPublicFromComponents(components, nil) diff --git a/vendor/go.podman.io/image/v5/pkg/sysregistriesv2/shortnames.go b/vendor/go.podman.io/image/v5/pkg/sysregistriesv2/shortnames.go index 0da7c693b8..b0f9b55f25 100644 --- a/vendor/go.podman.io/image/v5/pkg/sysregistriesv2/shortnames.go +++ b/vendor/go.podman.io/image/v5/pkg/sysregistriesv2/shortnames.go @@ -1,7 +1,9 @@ package sysregistriesv2 import ( + "errors" "fmt" + "io/fs" "maps" "os" "path/filepath" @@ -14,6 +16,7 @@ import ( "go.podman.io/image/v5/internal/multierr" "go.podman.io/image/v5/internal/rootless" "go.podman.io/image/v5/types" + "go.podman.io/storage/pkg/fileutils" "go.podman.io/storage/pkg/homedir" "go.podman.io/storage/pkg/lockfile" ) @@ -98,33 +101,42 @@ func ResolveShortNameAlias(ctx *types.SystemContext, name string) (reference.Nam if err := validateShortName(name); err != nil { return nil, "", err } - confPath, lock, err := shortNameAliasesConfPathAndLock(ctx) + confPath, err := shortNameAliasesConfPath(ctx) if err != nil { return nil, "", err } - - // Acquire the lock as a reader to allow for multiple routines in the - // same process space to read simultaneously. - lock.RLock() - defer lock.Unlock() - - _, aliasCache, err := loadShortNameAliasConf(confPath) - if err != nil { + err = fileutils.Exists(confPath) + if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, "", err } + if err == nil { + lock, err := getShortNameAliasesLock(confPath) + if err != nil { + return nil, "", err + } + // Acquire the lock as a reader to allow for multiple routines in the + // same process space to read simultaneously. + lock.RLock() + defer lock.Unlock() - // First look up the short-name-aliases.conf. Note that a value may be - // nil iff it's set as an empty string in the config. - alias, resolved := aliasCache.namedAliases[name] - if resolved { - return alias.value, alias.configOrigin, nil + _, aliasCache, err := loadShortNameAliasConf(confPath) + if err != nil { + return nil, "", err + } + + // First look up the short-name-aliases.conf. Note that a value may be + // nil iff it's set as an empty string in the config. + alias, resolved := aliasCache.namedAliases[name] + if resolved { + return alias.value, alias.configOrigin, nil + } } config, err := getConfig(ctx) if err != nil { return nil, "", err } - alias, resolved = config.aliasCache.namedAliases[name] + alias, resolved := config.aliasCache.namedAliases[name] if resolved { return alias.value, alias.configOrigin, nil } @@ -144,7 +156,15 @@ func editShortNameAlias(ctx *types.SystemContext, name string, value *string) (r } } - confPath, lock, err := shortNameAliasesConfPathAndLock(ctx) + confPath, err := shortNameAliasesConfPath(ctx) + if err != nil { + return err + } + // Make sure the path to file exists. + if err := os.MkdirAll(filepath.Dir(confPath), 0o700); err != nil { + return err + } + lock, err := getShortNameAliasesLock(confPath) if err != nil { return err } @@ -337,17 +357,6 @@ func loadShortNameAliasConf(confPath string) (*shortNameAliasConf, *shortNameAli return &conf, cache, nil } -func shortNameAliasesConfPathAndLock(ctx *types.SystemContext) (string, *lockfile.LockFile, error) { - shortNameAliasesConfPath, err := shortNameAliasesConfPath(ctx) - if err != nil { - return "", nil, err - } - // Make sure the path to file exists. - if err := os.MkdirAll(filepath.Dir(shortNameAliasesConfPath), 0o700); err != nil { - return "", nil, err - } - - lockPath := shortNameAliasesConfPath + ".lock" - locker, err := lockfile.GetLockFile(lockPath) - return shortNameAliasesConfPath, locker, err +func getShortNameAliasesLock(confPath string) (*lockfile.LockFile, error) { + return lockfile.GetLockFile(confPath + ".lock") } diff --git a/vendor/go.podman.io/image/v5/pkg/sysregistriesv2/system_registries_v2.go b/vendor/go.podman.io/image/v5/pkg/sysregistriesv2/system_registries_v2.go index ef07cbead6..e4278fba8a 100644 --- a/vendor/go.podman.io/image/v5/pkg/sysregistriesv2/system_registries_v2.go +++ b/vendor/go.podman.io/image/v5/pkg/sysregistriesv2/system_registries_v2.go @@ -46,7 +46,7 @@ type Endpoint struct { Insecure bool `toml:"insecure,omitempty"` // PullFromMirror is used for adding restrictions to image pull through the mirror. // Set to "all", "digest-only", or "tag-only". - // If "digest-only", mirrors will only be used for digest pulls. Pulling images by + // If "digest-only", mirrors will only be used for digest pulls. Pulling images by // tag can potentially yield different images, depending on which endpoint // we pull from. Restricting mirrors to pulls by digest avoids that issue. // If "tag-only", mirrors will only be used for tag pulls. For a more up-to-date and expensive mirror diff --git a/vendor/go.podman.io/image/v5/version/version.go b/vendor/go.podman.io/image/v5/version/version.go index 21ca5d3841..feb26b3756 100644 --- a/vendor/go.podman.io/image/v5/version/version.go +++ b/vendor/go.podman.io/image/v5/version/version.go @@ -6,9 +6,9 @@ const ( // VersionMajor is for an API incompatible changes VersionMajor = 5 // VersionMinor is for functionality in a backwards-compatible manner - VersionMinor = 41 + VersionMinor = 42 // VersionPatch is for backwards-compatible bug fixes - VersionPatch = 2 + VersionPatch = 0 // VersionDev indicates development branch. Releases will be empty string. VersionDev = "" diff --git a/vendor/go.podman.io/storage/internal/rootlookupcache/cache.go b/vendor/go.podman.io/storage/internal/rootlookupcache/cache.go new file mode 100644 index 0000000000..76f68e717f --- /dev/null +++ b/vendor/go.podman.io/storage/internal/rootlookupcache/cache.go @@ -0,0 +1,148 @@ +package rootlookupcache + +import ( + "fmt" + "os" + "path" +) + +// Cache attempts to speed up repeated path lookups in an os.Root. +// +// As of Go 1.26, operations on os.Root always open a handle for the parent directory of the target +// path before performing the actual operation. That is currently fairly costly, opening a handle +// for each path component individually (e.g. it does not use openat2 on Linux). +// +// So, try to amortize the cost: if the target path is only a basename, os.Root can just do the +// actual operation as a single system call. +// Even with openat2 this would avoid repeated openat2() lookups of the parent. +// +// This is valuable for code needing to do further I/O on files within a fs.WalkDir handler +// (sadly fs.WalkDir does not give us a parent handle, it needs one internally); or for similar +// code that needs to repeatedly make operations within a single directory. +type Cache struct { + root *os.Root + rootFile *os.File // For root; or nil + + // This is a minimal implementation, ideal for fairly shallow directory hierarchies with several files. + // For a deeper hierarchy, operations on (root/dir/file1, root/dir/subdir1, root/dir/file2, root/dir/subdir2, ...) + // would, e.g. with fs.WalkDir, result in requests for (root/dir, root/dir/subdir1, root/dir, root/dir/subdir2, ...). + // That would be better handled by caching a few of the parent directories (but not caching siblings). + // + // Also, the cache key is a potentially long string. In situations where we receive arbitrary paths, that’s + // the best we can do; but callers that implement tree walks manually could also explicitly manage the lifetime + // / equality of cache values (e.g. while recursing to subdirectories, the caller knows when it returns back to a + // parent, and could perhaps maintain some kind of a direct reference to a cache entry). + cachedDirRoot *os.Root // Or nil + cachedPath string // Valid if cachedDirRoot != nil + cachedDirFile *os.File // For cachedDirRoot, which must be non-nil; or nil +} + +// NewCache creates a cache for operations within root. +// The root must be valid until Close() is called. +func NewCache(root *os.Root) *Cache { + return &Cache{ + root: root, + } +} + +// Close releases any possibly cached handles. +func (c *Cache) Close() error { + if c.rootFile != nil { + _ = c.rootFile.Close() + } + if c.cachedDirRoot != nil { + _ = c.cachedDirRoot.Close() + } + if c.cachedDirFile != nil { + _ = c.cachedDirFile.Close() + } + return nil +} + +// RootForDir returns an *os.Root for a specified directory (a fs.ValidPath) within the cache’s root. +// The returned value can be used only until the next call to RootForDir() or Close(); +// the caller must not close it manually. +func (c *Cache) RootForDir(dir string) (*os.Root, error) { + if dir == "." { + return c.root, nil + } + + if c.cachedDirRoot != nil && c.cachedPath == dir { + return c.cachedDirRoot, nil + } + + dirRoot, err := c.root.OpenRoot(dir) + if err != nil { + return nil, err + } + if c.cachedDirRoot != nil { + _ = c.cachedDirRoot.Close() + } + if c.cachedDirFile != nil { + _ = c.cachedDirFile.Close() + c.cachedDirFile = nil + } + c.cachedDirRoot = dirRoot + c.cachedPath = dir + + return dirRoot, nil +} + +// PreparePath returns a parent-directory *os.Root and a basename for efficiently accessing fsPath (per fs.ValidPath), +// while restricting it to the cache’s root. +// +// The returned root can be used only until the next call to RootForDir() or Close(); +// the caller must not close it manually. +func (c *Cache) PreparePath(fsPath string) (*os.Root, string, error) { + parentPath := path.Dir(fsPath) + parentRoot, err := c.RootForDir(parentPath) + if err != nil { + return nil, "", err + } + // A path per fs.ValidPath should not contain a ".."; reject it so that we can ensure no escape from parentPath and therefore from c.root. + basename := path.Base(fsPath) + if basename == ".." { + return nil, "", fmt.Errorf("internal error: trailing .. in a path that should conform to fs.ValidPath: %q", fsPath) + } + return parentRoot, basename, nil +} + +// FileForRoot returns, or newly opens, an *os.File descriptor for reading root (which must have been the last value obtained by RootForDir or PreparePath). +// The returned value can be used only until the next call to RootForDir(), FileForRoot() or Close(); +// the caller must not close it manually. +func (c *Cache) FileForRoot(root *os.Root) (*os.File, error) { + // Ideally, we should be able to use the file descriptor already existing in *os.Root, without the extra Open(".")/Close(). + + // We should not really _need_ the special case for c.root, we probably only need one cached *os.File + // for accessing all files in a directory, and c.root is not really special WRT expected use patterns. + // + // But we have the RootForDir(".") special case because it is cheap to implement there, and without a + // corresponding File cache for "." we’d need a more complex invalidation logic in RootForDir. + if root == c.root { + if c.rootFile == nil { + fd, err := c.root.Open(".") + if err != nil { + return nil, err + } + c.rootFile = fd + } + return c.rootFile, nil + } + + if c.cachedDirRoot != nil && root == c.cachedDirRoot { + if c.cachedDirFile == nil { + fd, err := c.cachedDirRoot.Open(".") + if err != nil { + return nil, err + } + c.cachedDirFile = fd + } + return c.cachedDirFile, nil + } + + // Otherwise we would need to open a new file descriptor, and then we would need to close it at some point, + // i.e. we would need to be tracking it in the cache. + // That could work under the assumption that the caller is following the cache rules, but under that assumption, + // we should never get here. + return nil, fmt.Errorf("internal error: FileForRoot called with an unexpected root") +} diff --git a/vendor/go.podman.io/storage/pkg/system/stat_common.go b/vendor/go.podman.io/storage/internal/stat/stat_common.go similarity index 94% rename from vendor/go.podman.io/storage/pkg/system/stat_common.go rename to vendor/go.podman.io/storage/internal/stat/stat_common.go index 1d57b7f401..4502a22385 100644 --- a/vendor/go.podman.io/storage/pkg/system/stat_common.go +++ b/vendor/go.podman.io/storage/internal/stat/stat_common.go @@ -1,6 +1,6 @@ //go:build !freebsd -package system +package stat type platformStatT struct{} diff --git a/vendor/go.podman.io/storage/pkg/system/stat_darwin.go b/vendor/go.podman.io/storage/internal/stat/stat_darwin.go similarity index 51% rename from vendor/go.podman.io/storage/pkg/system/stat_darwin.go rename to vendor/go.podman.io/storage/internal/stat/stat_darwin.go index 57850a883f..3412e1aea5 100644 --- a/vendor/go.podman.io/storage/pkg/system/stat_darwin.go +++ b/vendor/go.podman.io/storage/internal/stat/stat_darwin.go @@ -1,9 +1,9 @@ -package system +package stat import "syscall" -// fromStatT converts a syscall.Stat_t type to a system.Stat_t type -func fromStatT(s *syscall.Stat_t) (*StatT, error) { +// FromStatT converts a syscall.Stat_t type to a StatT type +func FromStatT(s *syscall.Stat_t) *StatT { return &StatT{ size: s.Size, mode: uint32(s.Mode), @@ -11,5 +11,5 @@ func fromStatT(s *syscall.Stat_t) (*StatT, error) { gid: s.Gid, rdev: uint64(s.Rdev), mtim: s.Mtimespec, - }, nil + } } diff --git a/vendor/go.podman.io/storage/pkg/system/stat_freebsd.go b/vendor/go.podman.io/storage/internal/stat/stat_freebsd.go similarity index 70% rename from vendor/go.podman.io/storage/pkg/system/stat_freebsd.go rename to vendor/go.podman.io/storage/internal/stat/stat_freebsd.go index 4b95073a3f..251c33924e 100644 --- a/vendor/go.podman.io/storage/pkg/system/stat_freebsd.go +++ b/vendor/go.podman.io/storage/internal/stat/stat_freebsd.go @@ -1,4 +1,4 @@ -package system +package stat import "syscall" @@ -11,8 +11,8 @@ func (s StatT) Flags() uint32 { return s.flags } -// fromStatT converts a syscall.Stat_t type to a system.Stat_t type -func fromStatT(s *syscall.Stat_t) (*StatT, error) { +// FromStatT converts a syscall.Stat_t type to a StatT type +func FromStatT(s *syscall.Stat_t) *StatT { st := &StatT{ size: s.Size, mode: uint32(s.Mode), @@ -24,5 +24,5 @@ func fromStatT(s *syscall.Stat_t) (*StatT, error) { } st.flags = s.Flags st.dev = s.Dev - return st, nil + return st } diff --git a/vendor/go.podman.io/storage/internal/stat/stat_linux.go b/vendor/go.podman.io/storage/internal/stat/stat_linux.go new file mode 100644 index 0000000000..fafd662bd1 --- /dev/null +++ b/vendor/go.podman.io/storage/internal/stat/stat_linux.go @@ -0,0 +1,16 @@ +package stat + +import "syscall" + +// FromStatT converts a syscall.Stat_t type to a StatT type +func FromStatT(s *syscall.Stat_t) *StatT { + return &StatT{ + size: s.Size, + mode: s.Mode, + uid: s.Uid, + gid: s.Gid, + rdev: uint64(s.Rdev), //nolint:unconvert + mtim: s.Mtim, + dev: uint64(s.Dev), //nolint:unconvert + } +} diff --git a/vendor/go.podman.io/storage/pkg/system/stat_netbsd.go b/vendor/go.podman.io/storage/internal/stat/stat_netbsd.go similarity index 51% rename from vendor/go.podman.io/storage/pkg/system/stat_netbsd.go rename to vendor/go.podman.io/storage/internal/stat/stat_netbsd.go index 57850a883f..3412e1aea5 100644 --- a/vendor/go.podman.io/storage/pkg/system/stat_netbsd.go +++ b/vendor/go.podman.io/storage/internal/stat/stat_netbsd.go @@ -1,9 +1,9 @@ -package system +package stat import "syscall" -// fromStatT converts a syscall.Stat_t type to a system.Stat_t type -func fromStatT(s *syscall.Stat_t) (*StatT, error) { +// FromStatT converts a syscall.Stat_t type to a StatT type +func FromStatT(s *syscall.Stat_t) *StatT { return &StatT{ size: s.Size, mode: uint32(s.Mode), @@ -11,5 +11,5 @@ func fromStatT(s *syscall.Stat_t) (*StatT, error) { gid: s.Gid, rdev: uint64(s.Rdev), mtim: s.Mtimespec, - }, nil + } } diff --git a/vendor/go.podman.io/storage/pkg/system/stat_openbsd.go b/vendor/go.podman.io/storage/internal/stat/stat_openbsd.go similarity index 50% rename from vendor/go.podman.io/storage/pkg/system/stat_openbsd.go rename to vendor/go.podman.io/storage/internal/stat/stat_openbsd.go index a413e17148..766b583622 100644 --- a/vendor/go.podman.io/storage/pkg/system/stat_openbsd.go +++ b/vendor/go.podman.io/storage/internal/stat/stat_openbsd.go @@ -1,9 +1,9 @@ -package system +package stat import "syscall" -// fromStatT converts a syscall.Stat_t type to a system.Stat_t type -func fromStatT(s *syscall.Stat_t) (*StatT, error) { +// FromStatT converts a syscall.Stat_t type to a StatT type +func FromStatT(s *syscall.Stat_t) *StatT { return &StatT{ size: s.Size, mode: uint32(s.Mode), @@ -11,5 +11,5 @@ func fromStatT(s *syscall.Stat_t) (*StatT, error) { gid: s.Gid, rdev: uint64(s.Rdev), mtim: s.Mtim, - }, nil + } } diff --git a/vendor/go.podman.io/storage/pkg/system/stat_solaris.go b/vendor/go.podman.io/storage/internal/stat/stat_solaris.go similarity index 50% rename from vendor/go.podman.io/storage/pkg/system/stat_solaris.go rename to vendor/go.podman.io/storage/internal/stat/stat_solaris.go index a413e17148..766b583622 100644 --- a/vendor/go.podman.io/storage/pkg/system/stat_solaris.go +++ b/vendor/go.podman.io/storage/internal/stat/stat_solaris.go @@ -1,9 +1,9 @@ -package system +package stat import "syscall" -// fromStatT converts a syscall.Stat_t type to a system.Stat_t type -func fromStatT(s *syscall.Stat_t) (*StatT, error) { +// FromStatT converts a syscall.Stat_t type to a StatT type +func FromStatT(s *syscall.Stat_t) *StatT { return &StatT{ size: s.Size, mode: uint32(s.Mode), @@ -11,5 +11,5 @@ func fromStatT(s *syscall.Stat_t) (*StatT, error) { gid: s.Gid, rdev: uint64(s.Rdev), mtim: s.Mtim, - }, nil + } } diff --git a/vendor/go.podman.io/storage/internal/stat/stat_unix.go b/vendor/go.podman.io/storage/internal/stat/stat_unix.go new file mode 100644 index 0000000000..2e6dabf423 --- /dev/null +++ b/vendor/go.podman.io/storage/internal/stat/stat_unix.go @@ -0,0 +1,73 @@ +//go:build !windows + +package stat + +import ( + "os" + "syscall" + + "golang.org/x/sys/unix" +) + +// StatT type contains status of a file. It contains metadata +// like permission, owner, group, size, etc about a file. +// +// Note that this is public as pkg/system.StatT. +type StatT struct { + mode uint32 + uid uint32 + gid uint32 + rdev uint64 + size int64 + mtim syscall.Timespec + dev uint64 + platformStatT +} + +// Mode returns file's permission mode. +func (s StatT) Mode() uint32 { + return s.mode +} + +// UID returns file's user id of owner. +func (s StatT) UID() uint32 { + return s.uid +} + +// GID returns file's group id of owner. +func (s StatT) GID() uint32 { + return s.gid +} + +// Rdev returns file's device ID (if it's special file). +func (s StatT) Rdev() uint64 { + return s.rdev +} + +// Size returns file's size. +func (s StatT) Size() int64 { + return s.size +} + +// Mtim returns file's last modification time. +func (s StatT) Mtim() syscall.Timespec { + return s.mtim +} + +// Dev returns a unique identifier for owning filesystem +func (s StatT) Dev() uint64 { + return s.dev +} + +func (s StatT) IsDir() bool { + return (s.mode & unix.S_IFDIR) != 0 +} + +func (s StatT) IsSymlink() bool { + return (s.mode & unix.S_IFMT) == unix.S_IFLNK +} + +// FromFileInfo converts a os.FileInfo type to a StatT type +func FromFileInfo(fi os.FileInfo) *StatT { + return FromStatT(fi.Sys().(*syscall.Stat_t)) +} diff --git a/vendor/go.podman.io/storage/internal/stat/stat_windows.go b/vendor/go.podman.io/storage/internal/stat/stat_windows.go new file mode 100644 index 0000000000..d97a7b5b20 --- /dev/null +++ b/vendor/go.podman.io/storage/internal/stat/stat_windows.go @@ -0,0 +1,68 @@ +package stat + +import ( + "os" + "time" +) + +// StatT type contains status of a file. It contains metadata +// like permission, size, etc about a file. +// +// Note that this is public as pkg/system.StatT. +type StatT struct { + mode os.FileMode + size int64 + mtim time.Time + platformStatT +} + +// Size returns file's size. +func (s StatT) Size() int64 { + return s.size +} + +// Mode returns file's permission mode. +func (s StatT) Mode() os.FileMode { + return os.FileMode(s.mode) +} + +// Mtim returns file's last modification time. +func (s StatT) Mtim() time.Time { + return time.Time(s.mtim) +} + +// UID returns file's user id of owner. +// +// on windows this is always 0 because there is no concept of UID +func (s StatT) UID() uint32 { + return 0 +} + +// GID returns file's group id of owner. +// +// on windows this is always 0 because there is no concept of GID +func (s StatT) GID() uint32 { + return 0 +} + +// Dev returns a unique identifier for owning filesystem +func (s StatT) Dev() uint64 { + return 0 +} + +func (s StatT) IsDir() bool { + return s.Mode().IsDir() +} + +func (s StatT) IsSymlink() bool { + return s.Mode()&os.ModeSymlink != 0 +} + +// FromFileInfo converts a os.FileInfo type to a StatT type +func FromFileInfo(fi os.FileInfo) *StatT { + return &StatT{ + size: fi.Size(), + mode: fi.Mode(), + mtim: fi.ModTime(), + } +} diff --git a/vendor/go.podman.io/storage/internal/xattrs/errors.go b/vendor/go.podman.io/storage/internal/xattrs/errors.go new file mode 100644 index 0000000000..3351ef6503 --- /dev/null +++ b/vendor/go.podman.io/storage/internal/xattrs/errors.go @@ -0,0 +1,8 @@ +package xattrs + +import ( + "errors" +) + +// ErrNotSupportedPlatform means the platform is not supported. +var ErrNotSupportedPlatform = errors.New("platform and architecture is not supported") diff --git a/vendor/go.podman.io/storage/internal/xattrs/xattrs_darwin.go b/vendor/go.podman.io/storage/internal/xattrs/xattrs_darwin.go new file mode 100644 index 0000000000..3934d699e3 --- /dev/null +++ b/vendor/go.podman.io/storage/internal/xattrs/xattrs_darwin.go @@ -0,0 +1,181 @@ +package xattrs + +import ( + "bytes" + "os" + "path/filepath" + + "go.podman.io/storage/internal/rootlookupcache" + "golang.org/x/sys/unix" +) + +const ( + // Not in x/sys/unix as of v0.40.0. + o_RESOLVE_BENEATH = 0x00001000 +) + +// handleForFSPathBeneath creates a Handle for rootFile/fsPath (using errorRoot/fsPath for error reporting). +func handleForFSPathBeneath(rootFile *os.File, fsPath string, errorRoot *os.Root) (*Handle, error) { + fd, err := syscallConnControl(rootFile, func(rootFD uintptr) (int, error) { + // macOS does not have O_PATH, so hope the user has enough permissions. + return unix.Openat(int(rootFD), filepath.FromSlash(fsPath), unix.O_RDONLY|unix.O_CLOEXEC|unix.O_SYMLINK|o_RESOLVE_BENEATH, 0) + }) + if err != nil { + return nil, err + } + + return &Handle{ + fd: fd, + errorRoot: errorRoot, + errorPath: fsPath, + }, nil +} + +// NewLHandle creates a Handle for fsBasename in parentRoot, which was the one last obtained from rootCache. +// If fsBasename is a symbolic link, it refers to the symbolic link, not to the target. +// +// The handle must be closed using .Close(). +func NewLHandle(parentRoot *os.Root, fsBasename string, rootCache *rootlookupcache.Cache) (*Handle, error) { + parentFile, err := rootCache.FileForRoot(parentRoot) + if err != nil { + return nil, err + } + return handleForFSPathBeneath(parentFile, fsBasename, parentRoot) +} + +// getxattr is the logic underlying Lgetxattr and Fgetxattr. +// Returns a []byte slice if the xattr is set and nil otherwise. +func getxattr(syscallName string, pathInError func() string, getSyscall func(dest []byte) (int, error)) ([]byte, error) { + // Start with a 128 length byte array + dest := make([]byte, 128) + sz, errno := getSyscall(dest) + + for errno == unix.ERANGE { + // Buffer too small, use zero-sized buffer to get the actual size + sz, errno = getSyscall([]byte{}) + if errno != nil { + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + dest = make([]byte, sz) + sz, errno = getSyscall(dest) + } + + switch { + case errno == unix.ENOATTR: + return nil, nil + case errno != nil: + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + + return dest[:sz], nil +} + +// Lgetxattr retrieves the value of the extended attribute identified by attr +// and associated with the given path in the file system. +// Returns a []byte slice if the xattr is set and nil otherwise. +func Lgetxattr(path string, attr string) ([]byte, error) { + return getxattr("lgetxattr", func() string { return path }, func(dest []byte) (int, error) { + return unix.Lgetxattr(path, attr, dest) + }) +} + +// Getxattr retrieves the value of the extended attribute identified by attr. +// Returns a []byte slice if the xattr is set and nil otherwise. +func (h *Handle) Getxattr(attr string) ([]byte, error) { + return getxattr("Handle.Getxattr", h.pathInError, func(dest []byte) (int, error) { + return unix.Fgetxattr(h.fd, attr, dest) + }) +} + +// RootLgetxattr retrieves the value of the extended attribute identified by attr +// in fsPath (per fs.ValidPath) under root. +// Returns a []byte slice if the xattr is set and nil otherwise. +func RootLgetxattr(root *os.Root, fsPath string, attr string) ([]byte, error) { + // We can’t use root.Open(fsPath) because it follows trailing symlinks. + rootFD, err := root.Open(".") + if err != nil { + return nil, err + } + defer rootFD.Close() + + handle, err := handleForFSPathBeneath(rootFD, fsPath, root) + if err != nil { + return nil, err + } + defer handle.Close() + + return handle.Getxattr(attr) +} + +// Lsetxattr sets the value of the extended attribute identified by attr +// and associated with the given path in the file system. +func Lsetxattr(path string, attr string, data []byte, flags int) error { + if err := unix.Lsetxattr(path, attr, data, flags); err != nil { + return &os.PathError{Op: "lsetxattr", Path: path, Err: err} + } + + return nil +} + +// listxattr is the logic underlying Llistxattr and RootLlistxattr. +func listxattr(syscallName string, pathInError func() string, listSyscall func(dest []byte) (int, error)) ([]string, error) { + dest := make([]byte, 128) + sz, errno := listSyscall(dest) + + for errno == unix.ERANGE { + // Buffer too small, use zero-sized buffer to get the actual size + sz, errno = listSyscall([]byte{}) + if errno != nil { + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + + dest = make([]byte, sz) + sz, errno = listSyscall(dest) + } + if errno != nil { + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + + var attrs []string + for token := range bytes.SplitSeq(dest[:sz], []byte{0}) { + if len(token) > 0 { + attrs = append(attrs, string(token)) + } + } + + return attrs, nil +} + +// Llistxattr lists extended attributes associated with the given path +// in the file system. +func Llistxattr(path string) ([]string, error) { + return listxattr("llistxattr", func() string { return path }, func(dest []byte) (int, error) { + return unix.Llistxattr(path, dest) + }) +} + +// Listxattr lists extended attributes associated with the given handle. +func (h *Handle) Listxattr() ([]string, error) { + return listxattr("Handle.Listxattr", h.pathInError, func(dest []byte) (int, error) { + return unix.Flistxattr(h.fd, dest) + }) +} + +// RootLlistxattr lists extended attributes associated with +// fsPath (per fs.ValidPath) under root. +func RootLlistxattr(root *os.Root, fsPath string) ([]string, error) { + // We can’t use root.Open(fsPath) because it follows trailing symlinks. + rootFD, err := root.Open(".") + if err != nil { + return nil, err + } + defer rootFD.Close() + + handle, err := handleForFSPathBeneath(rootFD, fsPath, root) + if err != nil { + return nil, err + } + defer handle.Close() + + return handle.Listxattr() +} diff --git a/vendor/go.podman.io/storage/internal/xattrs/xattrs_freebsd.go b/vendor/go.podman.io/storage/internal/xattrs/xattrs_freebsd.go new file mode 100644 index 0000000000..e69ea6b4a5 --- /dev/null +++ b/vendor/go.podman.io/storage/internal/xattrs/xattrs_freebsd.go @@ -0,0 +1,223 @@ +package xattrs + +import ( + "errors" + "fmt" + "os" + "path" + "path/filepath" + + "go.podman.io/storage/internal/rootlookupcache" + "golang.org/x/sys/unix" +) + +// O_PATH value on freebsd. We must define O_PATH ourselves +// until https://github.com/golang/go/issues/54355 is fixed. +const o_PATH = 0x00400000 + +// newLHandle creates a Handle for parentFile/fsBasename (using errorRoot/errorPath for error reporting). +// If fsBasename is a symbolic link, it refers to the symbolic link, not to the target. +func newLHandle(parentFile *os.File, fsBasename string, errorRoot *os.Root, errorPath string) (*Handle, error) { + // A path per fs.ValidPath should not contain a ".."; reject it so that we can ensure no escape from parentFile. + if fsBasename == ".." { + return nil, fmt.Errorf("trailing .. in newLhandle in %q", errorPath) + } + fd, err := syscallConnControl(parentFile, func(parentDir uintptr) (int, error) { + return unix.Openat(int(parentDir), filepath.FromSlash(fsBasename), o_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) + }) + if err != nil { + return nil, err + } + + return &Handle{ + fd: fd, + errorRoot: errorRoot, + errorPath: errorPath, + }, nil +} + +// NewLHandle creates a Handle for fsBasename in parentRoot, which was the one last obtained from rootCache. +// If fsBasename is a symbolic link, it refers to the symbolic link, not to the target. +// +// The handle must be closed using .Close(). +func NewLHandle(parentRoot *os.Root, fsBasename string, rootCache *rootlookupcache.Cache) (*Handle, error) { + parentFile, err := rootCache.FileForRoot(parentRoot) + if err != nil { + return nil, err + } + return newLHandle(parentFile, fsBasename, parentRoot, fsBasename) +} + +var namespaceMap = map[string]int{ + "user": unix.EXTATTR_NAMESPACE_USER, + "system": unix.EXTATTR_NAMESPACE_SYSTEM, +} + +// getxattr is the logic underlying Lgetxattr and RootLgetxattr. +// Returns a []byte slice if the xattr is set and nil otherwise. +func getxattr(syscallName string, pathInError func() string, getSyscall func(dest []byte) (int, error)) ([]byte, error) { + size, errno := getSyscall(nil) + if errno != nil { + if errno == unix.ENOATTR { + return nil, nil + } + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + if size == 0 { + return []byte{}, nil + } + + dest := make([]byte, size) + size, errno = getSyscall(dest) + if errno != nil { + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + + return dest[:size], nil +} + +// Lgetxattr retrieves the value of the extended attribute identified by attr +// and associated with the given path in the file system. +// Returns a []byte slice if the xattr is set and nil otherwise. +func Lgetxattr(path string, attr string) ([]byte, error) { + return getxattr("lgetxattr", func() string { return path }, func(dest []byte) (int, error) { + return unix.Lgetxattr(path, attr, dest) + }) +} + +// Getxattr retrieves the value of the extended attribute identified by attr. +// Returns a []byte slice if the xattr is set and nil otherwise. +func (h *Handle) Getxattr(attr string) ([]byte, error) { + return getxattr("Handle.Getxattr", h.pathInError, func(dest []byte) (int, error) { + return unix.Fgetxattr(h.fd, attr, dest) + }) +} + +// RootLgetxattr retrieves the value of the extended attribute identified by attr +// in fsPath (per fs.ValidPath) under root. +// Returns a []byte slice if the xattr is set and nil otherwise. +func RootLgetxattr(root *os.Root, fsPath string, attr string) ([]byte, error) { + // We can’t use root.Open(fsPath) because it follows trailing symlinks. + parentDir, err := root.Open(path.Dir(fsPath)) + if err != nil { + return nil, err + } + defer parentDir.Close() + + handle, err := newLHandle(parentDir, path.Base(fsPath), root, fsPath) + if err != nil { + return nil, err + } + defer handle.Close() + + return handle.Getxattr(attr) +} + +// Lsetxattr sets the value of the extended attribute identified by attr +// and associated with the given path in the file system. +func Lsetxattr(path string, attr string, value []byte, flags int) error { + if flags != 0 { + // FIXME: Flags are not supported on FreeBSD, but we can implement + // them mimicking the behavior of the Linux implementation. + // See lsetxattr(2) on Linux for more information. + return unix.ENOTSUP + } + + if err := unix.Lsetxattr(path, attr, value, 0); err != nil { + // storage/pkg/archive.extractTarFileEntry expects ENOTSUP for unsupported operations; + // we could extend the check there, but ENOATTR is not available on all systems, so doing + // it here is simpler. + if errors.Is(err, unix.ENOATTR) { + err = unix.ENOTSUP + } + return &os.PathError{Op: "lsetxattr", Path: path, Err: err} + } + + return nil +} + +// listxattrNS lists extended attributes within a single namespace. +func listxattrNS(nsid int, syscallName string, pathInError func() string, listOperation func(nsid int, dest []byte) (int, error)) ([]string, error) { + size, errno := listOperation(nsid, nil) + if errno != nil { + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + if size == 0 { + return []string{}, nil + } + + dest := make([]byte, size) + size, errno = listOperation(nsid, dest) + if errno != nil { + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + + var attrs []string + for i := 0; i < size; { + // Each attribute is preceded by a single byte length + length := int(dest[i]) + i++ + if i+length > size { + break + } + attrs = append(attrs, string(dest[i:i+length])) + i += length + } + + return attrs, nil +} + +// listxattr is the logic underlying Llistxattr and RootLlistxattr. +func listxattr(syscallName string, pathInError func() string, listOperation func(nsid int, dest []byte) (int, error)) ([]string, error) { + // This can’t use unix.Llistxattr etc. because those discard the namespace value: https://github.com/golang/go/issues/54357 . + // + // Instead, x/sys/unix provides *NS operations and we must iterate over namespaces ourselves. + attrs := []string{} + + for namespaceName, namespace := range namespaceMap { + namespaceAttrs, err := listxattrNS(namespace, syscallName, pathInError, listOperation) + if err != nil { + return nil, err + } + + for _, attr := range namespaceAttrs { + attrs = append(attrs, namespaceName+"."+attr) + } + } + + return attrs, nil +} + +// Llistxattr lists extended attributes associated with the given path +// in the file system. +func Llistxattr(path string) ([]string, error) { + return listxattr("LlistxattrNS", func() string { return path }, func(nsid int, dest []byte) (int, error) { + return unix.LlistxattrNS(path, nsid, dest) + }) +} + +// Listxattr lists extended attributes associated with the given handle. +func (h *Handle) Listxattr() ([]string, error) { + return listxattr("Handle.Listxattr", h.pathInError, func(nsid int, dest []byte) (int, error) { + return unix.FlistxattrNS(h.fd, nsid, dest) + }) +} + +// RootLlistxattr lists extended attributes associated with +// fsPath (per fs.ValidPath) under root. +func RootLlistxattr(root *os.Root, fsPath string) ([]string, error) { + // We can’t use root.Open(fsPath) because it follows trailing symlinks. + parentDir, err := root.Open(path.Dir(fsPath)) + if err != nil { + return nil, err + } + defer parentDir.Close() + + handle, err := newLHandle(parentDir, path.Base(fsPath), root, fsPath) + if err != nil { + return nil, err + } + defer handle.Close() + + return handle.Listxattr() +} diff --git a/vendor/go.podman.io/storage/internal/xattrs/xattrs_linux.go b/vendor/go.podman.io/storage/internal/xattrs/xattrs_linux.go new file mode 100644 index 0000000000..05457759e8 --- /dev/null +++ b/vendor/go.podman.io/storage/internal/xattrs/xattrs_linux.go @@ -0,0 +1,184 @@ +package xattrs + +import ( + "bytes" + "fmt" + "os" + "path" + "path/filepath" + + "go.podman.io/storage/internal/rootlookupcache" + "golang.org/x/sys/unix" +) + +// newLHandle creates a Handle for parentFile/fsBasename (using errorRoot/errorPath for error reporting). +// If fsBasename is a symbolic link, it refers to the symbolic link, not to the target. +func newLHandle(parentFile *os.File, fsBasename string, errorRoot *os.Root, errorPath string) (*Handle, error) { + // A path per fs.ValidPath should not contain a ".."; reject it so that we can ensure no escape from parentFile. + if fsBasename == ".." { + return nil, fmt.Errorf("trailing .. in newLhandle in %q", errorPath) + } + fd, err := syscallConnControl(parentFile, func(parentDir uintptr) (int, error) { + return unix.Openat(int(parentDir), filepath.FromSlash(fsBasename), unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) + }) + if err != nil { + return nil, err + } + + return &Handle{ + fd: fd, + errorRoot: errorRoot, + errorPath: errorPath, + }, nil +} + +// NewLHandle creates a Handle for fsBasename in parentRoot, which was the one last obtained from rootCache. +// If fsBasename is a symbolic link, it refers to the symbolic link, not to the target. +// +// The handle must be closed using .Close(). +func NewLHandle(parentRoot *os.Root, fsBasename string, rootCache *rootlookupcache.Cache) (*Handle, error) { + parentFile, err := rootCache.FileForRoot(parentRoot) + if err != nil { + return nil, err + } + return newLHandle(parentFile, fsBasename, parentRoot, fsBasename) +} + +// getxattr is the logic underlying Lgetxattr and RootLgetxattr. +// Returns a []byte slice if the xattr is set and nil otherwise. +func getxattr(syscallName string, pathInError func() string, getSyscall func(dest []byte) (int, error)) ([]byte, error) { + // Start with a 128 length byte array + dest := make([]byte, 128) + sz, errno := getSyscall(dest) + + for errno == unix.ERANGE { + // Buffer too small, use zero-sized buffer to get the actual size + sz, errno = getSyscall([]byte{}) + if errno != nil { + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + dest = make([]byte, sz) + sz, errno = getSyscall(dest) + } + + switch { + case errno == unix.ENODATA: + return nil, nil + case errno != nil: + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + + return dest[:sz], nil +} + +// Lgetxattr retrieves the value of the extended attribute identified by attr +// and associated with the given path in the file system. +// Returns a []byte slice if the xattr is set and nil otherwise. +func Lgetxattr(path string, attr string) ([]byte, error) { + return getxattr("lgetxattr", func() string { return path }, func(dest []byte) (int, error) { + return unix.Lgetxattr(path, attr, dest) + }) +} + +// Getxattr retrieves the value of the extended attribute identified by attr. +// Returns a []byte slice if the xattr is set and nil otherwise. +func (h *Handle) Getxattr(attr string) ([]byte, error) { + // Ideally we would use getxattrat() here, but as of 2026-05 that might be too recent. + return getxattr("Handle.Getxattr", h.pathInError, func(dest []byte) (int, error) { + return unix.Getxattr(fmt.Sprintf("/proc/self/fd/%d", h.fd), attr, dest) + }) +} + +// RootLgetxattr retrieves the value of the extended attribute identified by attr +// in fsPath (per fs.ValidPath) under root. +// Returns a []byte slice if the xattr is set and nil otherwise. +func RootLgetxattr(root *os.Root, fsPath string, attr string) ([]byte, error) { + // We can use neither root.Open nor pathrs.OpenatInRoot to get the target file descriptor because they follow trailing symlinks. + parentDir, err := root.Open(path.Dir(fsPath)) + if err != nil { + return nil, err + } + defer parentDir.Close() + + handle, err := newLHandle(parentDir, path.Base(fsPath), root, fsPath) + if err != nil { + return nil, err + } + defer handle.Close() + + return handle.Getxattr(attr) +} + +// Lsetxattr sets the value of the extended attribute identified by attr +// and associated with the given path in the file system. +func Lsetxattr(path string, attr string, data []byte, flags int) error { + if err := unix.Lsetxattr(path, attr, data, flags); err != nil { + return &os.PathError{Op: "lsetxattr", Path: path, Err: err} + } + + return nil +} + +// listxattr is the logic underlying Llistxattr and RootLlistxattr. +func listxattr(syscallName string, pathInError func() string, listSyscall func(dest []byte) (int, error)) ([]string, error) { + dest := make([]byte, 128) + sz, errno := listSyscall(dest) + + for errno == unix.ERANGE { + // Buffer too small, use zero-sized buffer to get the actual size + sz, errno = listSyscall([]byte{}) + if errno != nil { + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + + dest = make([]byte, sz) + sz, errno = listSyscall(dest) + } + if errno != nil { + return nil, &os.PathError{Op: syscallName, Path: pathInError(), Err: errno} + } + + var attrs []string + for token := range bytes.SplitSeq(dest[:sz], []byte{0}) { + if len(token) > 0 { + attrs = append(attrs, string(token)) + } + } + + return attrs, nil +} + +// Llistxattr lists extended attributes associated with the given path +// in the file system. +func Llistxattr(path string) ([]string, error) { + return listxattr("llistxattr", func() string { return path }, func(dest []byte) (int, error) { + return unix.Llistxattr(path, dest) + }) +} + +// Listxattr lists extended attributes associated with the given handle. +func (h *Handle) Listxattr() ([]string, error) { + // Ideally we would use listxattrat() here, but as of 2026-05 that might be too recent. + return listxattr("Handle.Listxattr", h.pathInError, func(dest []byte) (int, error) { + return unix.Listxattr(fmt.Sprintf("/proc/self/fd/%d", h.fd), dest) + }) +} + +// RootLlistxattr lists extended attributes associated with +// fsPath (per fs.ValidPath) under root. +func RootLlistxattr(root *os.Root, fsPath string) ([]string, error) { + // We can use neither root.Open nor pathrs.OpenatInRoot to get the target file descriptor because they follow trailing symlinks. + parentDir, err := root.Open(path.Dir(fsPath)) + if err != nil { + return nil, err + } + defer parentDir.Close() + + handle, err := newLHandle(parentDir, path.Base(fsPath), root, fsPath) + if err != nil { + return nil, err + } + defer handle.Close() + + return handle.Listxattr() +} diff --git a/vendor/go.podman.io/storage/internal/xattrs/xattrs_unix.go b/vendor/go.podman.io/storage/internal/xattrs/xattrs_unix.go new file mode 100644 index 0000000000..96d24a8e02 --- /dev/null +++ b/vendor/go.podman.io/storage/internal/xattrs/xattrs_unix.go @@ -0,0 +1,48 @@ +//go:build linux || darwin || freebsd + +package xattrs + +import ( + "os" + "path/filepath" + + "golang.org/x/sys/unix" +) + +// XattrHandle allows efficient llistxattr / llistxattr operations on a single file. +type Handle struct { + fd int + + // Only for error reporting + errorRoot *os.Root + errorPath string // Within errorRoot +} + +func (h *Handle) Close() error { + return unix.Close(h.fd) +} + +func (h *Handle) pathInError() string { + return filepath.Join(h.errorRoot.Name(), h.errorPath) +} + +// syscallConnControl calls fn with the file descriptor of fd, +// simplifying the boilerplate of f.SyscallConn().Control(). +func syscallConnControl[T any](fd *os.File, fn func(uintptr) (T, error)) (T, error) { + var zeroRes T + conn, err := fd.SyscallConn() + if err != nil { + return zeroRes, err + } + var res T + var resErr error + if err := conn.Control(func(fd uintptr) { + res, resErr = fn(fd) + }); err != nil { + return zeroRes, err + } + if resErr != nil { + return zeroRes, resErr + } + return res, nil +} diff --git a/vendor/go.podman.io/storage/internal/xattrs/xattrs_unsupported.go b/vendor/go.podman.io/storage/internal/xattrs/xattrs_unsupported.go new file mode 100644 index 0000000000..0dc268f4f7 --- /dev/null +++ b/vendor/go.podman.io/storage/internal/xattrs/xattrs_unsupported.go @@ -0,0 +1,78 @@ +//go:build !linux && !darwin && !freebsd + +package xattrs + +import ( + "os" + "syscall" + + "go.podman.io/storage/internal/rootlookupcache" +) + +const ( + // Value is larger than the maximum size allowed + E2BIG syscall.Errno = syscall.Errno(0) + + // Operation not supported + ENOTSUP syscall.Errno = syscall.Errno(0) + + // Value is too small or too large for maximum size allowed + EOVERFLOW syscall.Errno = syscall.Errno(0) +) + +// XattrHandle allows efficient llistxattr / llistxattr operations on a single file. +type Handle struct { +} + +// NewLHandle creates a Handle for fsBasename in parentRoot, which was the one last obtained from rootCache. +// If fsBasename is a symbolic link, it refers to the symbolic link, not to the target. +// +// The handle must be closed using .Close(). +func NewLHandle(parentRoot *os.Root, fsBasename string, rootCache *rootlookupcache.Cache) (*Handle, error) { + // This is not implemented, but we don’t fail, so that callers don’t need to add an extra ErrNotSupportedPlatform check; + // Those checks need to exist in the individual operations anyway. + return &Handle{}, nil +} + +func (h *Handle) Close() error { + return nil +} + +// Lgetxattr is not supported on platforms other than linux. +func Lgetxattr(path string, attr string) ([]byte, error) { + return nil, ErrNotSupportedPlatform +} + +// Getxattr retrieves the value of the extended attribute identified by attr. +// Returns a []byte slice if the xattr is set and nil otherwise. +func (h *Handle) Getxattr(attr string) ([]byte, error) { + return nil, ErrNotSupportedPlatform +} + +// RootLgetxattr retrieves the value of the extended attribute identified by attr +// in fsPath (per fs.ValidPath) under root. +// Returns a []byte slice if the xattr is set and nil otherwise. +func RootLgetxattr(root *os.Root, fsPath string, attr string) ([]byte, error) { + return nil, ErrNotSupportedPlatform +} + +// Lsetxattr is not supported on platforms other than linux. +func Lsetxattr(path string, attr string, data []byte, flags int) error { + return ErrNotSupportedPlatform +} + +// Llistxattr is not supported on platforms other than linux. +func Llistxattr(path string) ([]string, error) { + return nil, ErrNotSupportedPlatform +} + +// Listxattr lists extended attributes associated with the given handle. +func (h *Handle) Listxattr() ([]string, error) { + return nil, ErrNotSupportedPlatform +} + +// RootLlistxattr lists extended attributes associated with +// fsPath (per fs.ValidPath) under root. +func RootLlistxattr(root *os.Root, fsPath string) ([]string, error) { + return nil, ErrNotSupportedPlatform +} diff --git a/vendor/go.podman.io/storage/pkg/fileutils/fileutils.go b/vendor/go.podman.io/storage/pkg/fileutils/fileutils.go index 10aa0b82ac..7f00499553 100644 --- a/vendor/go.podman.io/storage/pkg/fileutils/fileutils.go +++ b/vendor/go.podman.io/storage/pkg/fileutils/fileutils.go @@ -299,6 +299,50 @@ func Matches(file string, patterns []string) (bool, error) { return pm.IsMatch(file) } +// ShouldDescendExcludedDir checks whether an excluded directory should still be +// descended into because a negation pattern might match files under it. +// It handles literal prefix matches (e.g. !cmd/main.go for dir "cmd") and +// wildcard negations (e.g. !**/*.go, !*/*.go). The wildcard check extracts +// the literal prefix before the first wildcard and may intentionally +// overmatch (descend into directories that won't ultimately contain matches), +// which is safe because actual file-level matching happens later. +func (pm *PatternMatcher) ShouldDescendExcludedDir(dirPath string) bool { + if !pm.exclusions { + return false + } + dir := filepath.ToSlash(strings.Trim(dirPath, string(os.PathSeparator))) + for _, pattern := range pm.patterns { + if !pattern.Exclusion() { + continue + } + slashPattern := filepath.ToSlash(strings.Trim(pattern.String(), string(os.PathSeparator))) + + // Literal-prefix check: the negation spec starts with this + // directory path, for example: !cmd/main.go matches dir "cmd" + if strings.HasPrefix(slashPattern, dir+"/") { + return true + } + + // Wildcard-aware check: extract the literal prefix before + // the first wildcard character (*, ?, [), for example: !cmd/**/*.go matches dir "cmd" + // if the directory is at or under that literal prefix, a file beneath this + // directory could match the negation, so keep descending. + if firstWild := strings.IndexAny(slashPattern, "*?["); firstWild >= 0 { + var literalPrefix string + if idx := strings.LastIndex(slashPattern[:firstWild], "/"); idx >= 0 { + literalPrefix = slashPattern[:idx] + } + if literalPrefix == "" { + return true + } + if dir == literalPrefix || strings.HasPrefix(dir, literalPrefix+"/") { + return true + } + } + } + return false +} + // CopyFile copies from src to dst until either EOF is reached // on src or an error occurs. It verifies src exists and removes // the dst if it exists. diff --git a/vendor/go.podman.io/storage/pkg/idtools/idtools.go b/vendor/go.podman.io/storage/pkg/idtools/idtools.go index de9356517f..debd905e03 100644 --- a/vendor/go.podman.io/storage/pkg/idtools/idtools.go +++ b/vendor/go.podman.io/storage/pkg/idtools/idtools.go @@ -156,23 +156,28 @@ type IDMappings struct { gids []IDMap } -// NewIDMappings takes a requested user and group name and -// using the data from /etc/sub{uid,gid} ranges, creates the -// proper uid and gid remapping ranges for that user/group pair -func NewIDMappings(username, groupname string) (*IDMappings, error) { - subuidRanges, err := readSubuid(username) +// NewIDMappings takes the username (or user ID) for each sub{uid,gid} +// mapping. Note that both files are indexed via username (or user ID), +// and NOT the group name even for the subgid files. +// It reads the data from the /etc/sub{uid,gid} files or +// when using the libsubid build tag it then uses the libsubid functions +// to query the user ranges which resolves them according to the system NSS +// configuration, potentially fetching the ranges from a central network source. +// It returns proper uid and gid remapping ranges for the given names. +func NewIDMappings(usernameForUIDs, usernameForGIDs string) (*IDMappings, error) { + subuidRanges, err := readSubuid(usernameForUIDs) if err != nil { return nil, err } - subgidRanges, err := readSubgid(groupname) + subgidRanges, err := readSubgid(usernameForGIDs) if err != nil { return nil, err } if len(subuidRanges) == 0 { - return nil, fmt.Errorf("no subuid ranges found for user %q in %s", username, subuidFileName) + return nil, fmt.Errorf("no subuid ranges found for user %q in %s", usernameForUIDs, subuidFileName) } if len(subgidRanges) == 0 { - return nil, fmt.Errorf("no subgid ranges found for group %q in %s", groupname, subgidFileName) + return nil, fmt.Errorf("no subgid ranges found for user %q in %s", usernameForGIDs, subgidFileName) } return &IDMappings{ @@ -365,8 +370,7 @@ func parseSubidFile(path, username string) ([]subIDRange, error) { } func checkChownErr(err error, name string, uid, gid int) error { - var e *os.PathError - if errors.As(err, &e) && e.Err == syscall.EINVAL { + if e, ok := errors.AsType[*os.PathError](err); ok && e.Err == syscall.EINVAL { return fmt.Errorf(`potentially insufficient UIDs or GIDs available in user namespace (requested %d:%d for %s): Check /etc/subuid and /etc/subgid if configured locally and run "podman system migrate": %w`, uid, gid, name, err) } return err diff --git a/vendor/go.podman.io/storage/pkg/idtools/idtools_supported.go b/vendor/go.podman.io/storage/pkg/idtools/idtools_supported.go index c1ef5ac331..695890ac29 100644 --- a/vendor/go.podman.io/storage/pkg/idtools/idtools_supported.go +++ b/vendor/go.podman.io/storage/pkg/idtools/idtools_supported.go @@ -5,6 +5,7 @@ package idtools import ( "errors" "os/user" + "runtime" "sync" "unsafe" ) @@ -20,22 +21,30 @@ struct subid_range get_range(struct subid_range *ranges, int i) return ranges[i]; } -// helper for stderr to avoid referencing C.stderr from Go code, -// which breaks cgo on musl due to stderr being declared as FILE *const -static FILE *subid_stderr(void) { - return stderr; -} - #if !defined(SUBID_ABI_MAJOR) || (SUBID_ABI_MAJOR < 4) # define subid_init libsubid_init # define subid_get_uid_ranges get_subuid_ranges # define subid_get_gid_ranges get_subgid_ranges #endif +#if !defined(SUBID_ABI_MAJOR) || (SUBID_ABI_MAJOR < 5) +# define subid_free free +#endif + +// Define our own static init function here instead of calling subid_init +// from the go code so we can have the storage string inlined here. +// static variables cannot be referenced from the go code. +static void containers_storage_subid_init() { + subid_init("storage", stderr); +} + */ import "C" -var onceInit sync.Once +var ( + libsubidLock sync.Mutex + subidInitialized bool +) func readSubid(username string, isUser bool) ([]subIDRange, error) { var ret []subIDRange @@ -49,9 +58,21 @@ func readSubid(username string, isUser bool) ([]subIDRange, error) { uidstr = u.Uid } - onceInit.Do(func() { - C.subid_init(C.CString("storage"), C.subid_stderr()) - }) + // libsubid is not thread safe currently, concurrent calls often fail. + // https://github.com/shadow-maint/shadow/issues/1362 + libsubidLock.Lock() + defer libsubidLock.Unlock() + + // Avoid the goroutine being switched to different threads during our calls. + // While right now the library does not seem to depend on any thread local state + // lets be future proof in case it will be. + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + if !subidInitialized { + C.containers_storage_subid_init() + subidInitialized = true + } cUsername := C.CString(username) defer C.free(unsafe.Pointer(cUsername)) @@ -75,10 +96,10 @@ func readSubid(username string, isUser bool) ([]subIDRange, error) { if nRanges < 0 { return nil, errors.New("cannot read subids") } - defer C.free(unsafe.Pointer(cRanges)) + defer C.subid_free(unsafe.Pointer(cRanges)) - for i := 0; i < int(nRanges); i++ { - r := C.get_range(cRanges, C.int(i)) + for i := C.int(0); i < nRanges; i++ { + r := C.get_range(cRanges, i) newRange := subIDRange{ Start: int(r.start), Length: int(r.count), diff --git a/vendor/go.podman.io/storage/pkg/system/errors.go b/vendor/go.podman.io/storage/pkg/system/errors.go index b87d419b57..0e960c4b0f 100644 --- a/vendor/go.podman.io/storage/pkg/system/errors.go +++ b/vendor/go.podman.io/storage/pkg/system/errors.go @@ -1,8 +1,6 @@ package system -import ( - "errors" -) +import "go.podman.io/storage/internal/xattrs" // ErrNotSupportedPlatform means the platform is not supported. -var ErrNotSupportedPlatform = errors.New("platform and architecture is not supported") +var ErrNotSupportedPlatform = xattrs.ErrNotSupportedPlatform diff --git a/vendor/go.podman.io/storage/pkg/system/extattr_freebsd.go b/vendor/go.podman.io/storage/pkg/system/extattr_freebsd.go index 02dbdad384..901f3b40be 100644 --- a/vendor/go.podman.io/storage/pkg/system/extattr_freebsd.go +++ b/vendor/go.podman.io/storage/pkg/system/extattr_freebsd.go @@ -4,7 +4,6 @@ package system import ( "os" - "strconv" "unsafe" "golang.org/x/sys/unix" @@ -16,51 +15,40 @@ const ( EXTATTR_NAMESPACE_SYSTEM = unix.EXTATTR_NAMESPACE_SYSTEM ) -// extattrGet is the logic underlying ExtattrGetLink and extattrGetFd. +// ExtattrGetLink retrieves the value of the extended attribute identified by attrname +// in the given namespace and associated with the given path in the file system. +// If the path is a symbolic link, the extended attribute is retrieved from the link itself. // Returns a []byte slice if the extattr is set and nil otherwise. -func extattrGet(syscallName string, pathInError string, getSyscall func(dest uintptr, nbytes int) (int, error)) ([]byte, error) { - size, errno := getSyscall(uintptr(unsafe.Pointer(nil)), 0) +// +// Deprecated: This has no known users and the implementation is violating unsafe.Pointer rules. +// Use system.L{get,set,list}xattr instead. +func ExtattrGetLink(path string, attrnamespace int, attrname string) ([]byte, error) { + size, errno := unix.ExtattrGetLink(path, attrnamespace, attrname, uintptr(unsafe.Pointer(nil)), 0) if errno != nil { if errno == unix.ENOATTR { return nil, nil } - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} + return nil, &os.PathError{Op: "extattr_get_link", Path: path, Err: errno} } if size == 0 { return []byte{}, nil } dest := make([]byte, size) - size, errno = getSyscall(uintptr(unsafe.Pointer(&dest[0])), size) + size, errno = unix.ExtattrGetLink(path, attrnamespace, attrname, uintptr(unsafe.Pointer(&dest[0])), size) if errno != nil { - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} + return nil, &os.PathError{Op: "extattr_get_link", Path: path, Err: errno} } return dest[:size], nil } -// ExtattrGetLink retrieves the value of the extended attribute identified by attrname -// in the given namespace and associated with the given path in the file system. -// If the path is a symbolic link, the extended attribute is retrieved from the link itself. -// Returns a []byte slice if the extattr is set and nil otherwise. -func ExtattrGetLink(path string, attrnamespace int, attrname string) ([]byte, error) { - return extattrGet("extattr_get_link", path, func(dest uintptr, nbytes int) (int, error) { - return unix.ExtattrGetLink(path, attrnamespace, attrname, dest, nbytes) - }) -} - -// extattrGetFd retrieves the value of the extended attribute identified by attrname -// in the given namespace and associated with the given file descriptor. -// Returns a []byte slice if the extattr is set and nil otherwise. -func extattrGetFd(fd int, attrnamespace int, attrname string) ([]byte, error) { - return extattrGet("extattr_get_fd", strconv.Itoa(fd), func(dest uintptr, nbytes int) (int, error) { - return unix.ExtattrGetFd(fd, attrnamespace, attrname, dest, nbytes) - }) -} - // ExtattrSetLink sets the value of extended attribute identified by attrname // in the given namespace and associated with the given path in the file system. // If the path is a symbolic link, the extended attribute is set on the link itself. +// +// Deprecated: This has no known users and the implementation is violating unsafe.Pointer rules. +// Use system.L{get,set,list}xattr instead. func ExtattrSetLink(path string, attrnamespace int, attrname string, data []byte) error { if len(data) == 0 { data = []byte{} // ensure non-nil for empty data @@ -73,20 +61,25 @@ func ExtattrSetLink(path string, attrnamespace int, attrname string, data []byte return nil } -// extattrList is the logic underlying ExtattrListLink and extattrListFd. -func extattrList(syscallName string, pathInError string, listSyscall func(dest uintptr, nbytes int) (int, error)) ([]string, error) { - size, errno := listSyscall(uintptr(unsafe.Pointer(nil)), 0) +// ExtattrListLink lists extended attributes associated with the given path +// in the specified namespace. If the path is a symbolic link, the attributes +// are listed from the link itself. +// +// Deprecated: This has no known users and the implementation is violating unsafe.Pointer rules. +// Use system.L{get,set,list}xattr instead. +func ExtattrListLink(path string, attrnamespace int) ([]string, error) { + size, errno := unix.ExtattrListLink(path, attrnamespace, uintptr(unsafe.Pointer(nil)), 0) if errno != nil { - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} + return nil, &os.PathError{Op: "extattr_list_link", Path: path, Err: errno} } if size == 0 { return []string{}, nil } dest := make([]byte, size) - size, errno = listSyscall(uintptr(unsafe.Pointer(&dest[0])), size) + size, errno = unix.ExtattrListLink(path, attrnamespace, uintptr(unsafe.Pointer(&dest[0])), size) if errno != nil { - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} + return nil, &os.PathError{Op: "extattr_list_link", Path: path, Err: errno} } var attrs []string @@ -103,20 +96,3 @@ func extattrList(syscallName string, pathInError string, listSyscall func(dest u return attrs, nil } - -// ExtattrListLink lists extended attributes associated with the given path -// in the specified namespace. If the path is a symbolic link, the attributes -// are listed from the link itself. -func ExtattrListLink(path string, attrnamespace int) ([]string, error) { - return extattrList("extattr_list_link", path, func(dest uintptr, nbytes int) (int, error) { - return unix.ExtattrListLink(path, attrnamespace, dest, nbytes) - }) -} - -// extattrListFd lists extended attributes associated with fd -// in the specified namespace. -func extattrListFd(fd int, attrnamespace int) ([]string, error) { - return extattrList("extattr_list_fd", strconv.Itoa(fd), func(dest uintptr, nbytes int) (int, error) { - return unix.ExtattrListFd(fd, attrnamespace, dest, nbytes) - }) -} diff --git a/vendor/go.podman.io/storage/pkg/system/extattr_unsupported.go b/vendor/go.podman.io/storage/pkg/system/extattr_unsupported.go index 07b67357f3..7f0cb39e4b 100644 --- a/vendor/go.podman.io/storage/pkg/system/extattr_unsupported.go +++ b/vendor/go.podman.io/storage/pkg/system/extattr_unsupported.go @@ -9,16 +9,25 @@ const ( ) // ExtattrGetLink is not supported on platforms other than FreeBSD. +// +// Deprecated: This has no known users and the FreeBSD implementation is violating unsafe.Pointer rules. +// Use system.L{get,set,list}xattr instead. func ExtattrGetLink(path string, attrnamespace int, attrname string) ([]byte, error) { return nil, ErrNotSupportedPlatform } // ExtattrSetLink is not supported on platforms other than FreeBSD. +// +// Deprecated: This has no known users and the FreeBSD implementation is violating unsafe.Pointer rules. +// Use system.L{get,set,list}xattr instead. func ExtattrSetLink(path string, attrnamespace int, attrname string, data []byte) error { return ErrNotSupportedPlatform } // ExtattrListLink is not supported on platforms other than FreeBSD. +// +// Deprecated: This has no known users and the FreeBSD implementation is violating unsafe.Pointer rules. +// Use system.L{get,set,list}xattr instead. func ExtattrListLink(path string, attrnamespace int) ([]string, error) { return nil, ErrNotSupportedPlatform } diff --git a/vendor/go.podman.io/storage/pkg/system/lstat.go b/vendor/go.podman.io/storage/pkg/system/lstat.go new file mode 100644 index 0000000000..ce1af4e32f --- /dev/null +++ b/vendor/go.podman.io/storage/pkg/system/lstat.go @@ -0,0 +1,17 @@ +package system + +import ( + "os" + + "go.podman.io/storage/internal/stat" +) + +// RootLstat takes fsPath within root and returns +// a system.StatT type pertaining to that file. +func RootLstat(root *os.Root, fsPath string) (*StatT, error) { + fi, err := root.Lstat(fsPath) + if err != nil { + return nil, err + } + return stat.FromFileInfo(fi), nil +} diff --git a/vendor/go.podman.io/storage/pkg/system/lstat_unix.go b/vendor/go.podman.io/storage/pkg/system/lstat_unix.go index 42523b101f..ef329ef188 100644 --- a/vendor/go.podman.io/storage/pkg/system/lstat_unix.go +++ b/vendor/go.podman.io/storage/pkg/system/lstat_unix.go @@ -5,6 +5,8 @@ package system import ( "os" "syscall" + + "go.podman.io/storage/internal/stat" ) // Lstat takes a path to a file and returns @@ -16,15 +18,5 @@ func Lstat(path string) (*StatT, error) { if err := syscall.Lstat(path, s); err != nil { return nil, &os.PathError{Op: "Lstat", Path: path, Err: err} } - return fromStatT(s) -} - -// RootLstat takes fsPath within root and returns -// a system.StatT type pertaining to that file. -func RootLstat(root *os.Root, fsPath string) (*StatT, error) { - fi, err := root.Lstat(fsPath) - if err != nil { - return nil, err - } - return fromStatT(fi.Sys().(*syscall.Stat_t)) + return stat.FromStatT(s), nil } diff --git a/vendor/go.podman.io/storage/pkg/system/lstat_windows.go b/vendor/go.podman.io/storage/pkg/system/lstat_windows.go index e0810d942b..600a325a71 100644 --- a/vendor/go.podman.io/storage/pkg/system/lstat_windows.go +++ b/vendor/go.podman.io/storage/pkg/system/lstat_windows.go @@ -1,6 +1,10 @@ package system -import "os" +import ( + "os" + + "go.podman.io/storage/internal/stat" +) // Lstat calls os.Lstat to get a fileinfo interface back. // This is then copied into our own locally defined structure. @@ -10,15 +14,5 @@ func Lstat(path string) (*StatT, error) { return nil, err } - return fromStatT(&fi) -} - -// RootLstat takes fsPath within root and returns -// a system.StatT type pertaining to that file. -func RootLstat(root *os.Root, fsPath string) (*StatT, error) { - fi, err := root.Lstat(fsPath) - if err != nil { - return nil, err - } - return fromStatT(&fi) + return stat.FromFileInfo(fi), nil } diff --git a/vendor/go.podman.io/storage/pkg/system/stat_linux.go b/vendor/go.podman.io/storage/pkg/system/stat_linux.go index 0dee88d1b8..365b744abe 100644 --- a/vendor/go.podman.io/storage/pkg/system/stat_linux.go +++ b/vendor/go.podman.io/storage/pkg/system/stat_linux.go @@ -1,22 +1,13 @@ package system -import "syscall" +import ( + "syscall" -// fromStatT converts a syscall.Stat_t type to a system.Stat_t type -func fromStatT(s *syscall.Stat_t) (*StatT, error) { - return &StatT{ - size: s.Size, - mode: s.Mode, - uid: s.Uid, - gid: s.Gid, - rdev: uint64(s.Rdev), //nolint:unconvert - mtim: s.Mtim, - dev: uint64(s.Dev), //nolint:unconvert - }, nil -} + "go.podman.io/storage/internal/stat" +) // FromStatT converts a syscall.Stat_t type to a system.Stat_t type // This is exposed on Linux as pkg/archive/changes uses it. func FromStatT(s *syscall.Stat_t) (*StatT, error) { - return fromStatT(s) + return stat.FromStatT(s), nil } diff --git a/vendor/go.podman.io/storage/pkg/system/stat_unix.go b/vendor/go.podman.io/storage/pkg/system/stat_unix.go index 67a98fc806..bb413f17bf 100644 --- a/vendor/go.podman.io/storage/pkg/system/stat_unix.go +++ b/vendor/go.podman.io/storage/pkg/system/stat_unix.go @@ -7,64 +7,12 @@ import ( "strconv" "syscall" - "golang.org/x/sys/unix" + "go.podman.io/storage/internal/stat" ) // StatT type contains status of a file. It contains metadata // like permission, owner, group, size, etc about a file. -type StatT struct { - mode uint32 - uid uint32 - gid uint32 - rdev uint64 - size int64 - mtim syscall.Timespec - dev uint64 - platformStatT -} - -// Mode returns file's permission mode. -func (s StatT) Mode() uint32 { - return s.mode -} - -// UID returns file's user id of owner. -func (s StatT) UID() uint32 { - return s.uid -} - -// GID returns file's group id of owner. -func (s StatT) GID() uint32 { - return s.gid -} - -// Rdev returns file's device ID (if it's special file). -func (s StatT) Rdev() uint64 { - return s.rdev -} - -// Size returns file's size. -func (s StatT) Size() int64 { - return s.size -} - -// Mtim returns file's last modification time. -func (s StatT) Mtim() syscall.Timespec { - return s.mtim -} - -// Dev returns a unique identifier for owning filesystem -func (s StatT) Dev() uint64 { - return s.dev -} - -func (s StatT) IsDir() bool { - return (s.mode & unix.S_IFDIR) != 0 -} - -func (s StatT) IsSymlink() bool { - return (s.mode & unix.S_IFMT) == unix.S_IFLNK -} +type StatT = stat.StatT // Stat takes a path to a file and returns // a system.StatT type pertaining to that file. @@ -75,7 +23,7 @@ func Stat(path string) (*StatT, error) { if err := syscall.Stat(path, s); err != nil { return nil, &os.PathError{Op: "Stat", Path: path, Err: err} } - return fromStatT(s) + return stat.FromStatT(s), nil } // Fstat takes an open file descriptor and returns @@ -87,5 +35,5 @@ func Fstat(fd int) (*StatT, error) { if err := syscall.Fstat(fd, s); err != nil { return nil, &os.PathError{Op: "Fstat", Path: strconv.Itoa(fd), Err: err} } - return fromStatT(s) + return stat.FromStatT(s), nil } diff --git a/vendor/go.podman.io/storage/pkg/system/stat_windows.go b/vendor/go.podman.io/storage/pkg/system/stat_windows.go index a0669b5e9c..d3081d5fd6 100644 --- a/vendor/go.podman.io/storage/pkg/system/stat_windows.go +++ b/vendor/go.podman.io/storage/pkg/system/stat_windows.go @@ -2,59 +2,13 @@ package system import ( "os" - "time" + + "go.podman.io/storage/internal/stat" ) // StatT type contains status of a file. It contains metadata // like permission, size, etc about a file. -type StatT struct { - mode os.FileMode - size int64 - mtim time.Time - platformStatT -} - -// Size returns file's size. -func (s StatT) Size() int64 { - return s.size -} - -// Mode returns file's permission mode. -func (s StatT) Mode() os.FileMode { - return os.FileMode(s.mode) -} - -// Mtim returns file's last modification time. -func (s StatT) Mtim() time.Time { - return time.Time(s.mtim) -} - -// UID returns file's user id of owner. -// -// on windows this is always 0 because there is no concept of UID -func (s StatT) UID() uint32 { - return 0 -} - -// GID returns file's group id of owner. -// -// on windows this is always 0 because there is no concept of GID -func (s StatT) GID() uint32 { - return 0 -} - -// Dev returns a unique identifier for owning filesystem -func (s StatT) Dev() uint64 { - return 0 -} - -func (s StatT) IsDir() bool { - return s.Mode().IsDir() -} - -func (s StatT) IsSymlink() bool { - return s.Mode()&os.ModeSymlink != 0 -} +type StatT = stat.StatT // Stat takes a path to a file and returns // a system.StatT type pertaining to that file. @@ -65,14 +19,5 @@ func Stat(path string) (*StatT, error) { if err != nil { return nil, err } - return fromStatT(&fi) -} - -// fromStatT converts a os.FileInfo type to a system.StatT type -func fromStatT(fi *os.FileInfo) (*StatT, error) { - return &StatT{ - size: (*fi).Size(), - mode: (*fi).Mode(), - mtim: (*fi).ModTime(), - }, nil + return stat.FromFileInfo(fi), nil } diff --git a/vendor/go.podman.io/storage/pkg/system/xattrs.go b/vendor/go.podman.io/storage/pkg/system/xattrs.go index 57d3d24cb5..011cc6d767 100644 --- a/vendor/go.podman.io/storage/pkg/system/xattrs.go +++ b/vendor/go.podman.io/storage/pkg/system/xattrs.go @@ -1,24 +1,39 @@ package system -import "os" +import ( + "os" -// syscallConnControl calls fn with the file descriptor of fd, -// simplifying the boilerplate of f.SyscallConn().Control(). -func syscallConnControl[T any](fd *os.File, fn func(uintptr) (T, error)) (T, error) { - var zeroRes T - conn, err := fd.SyscallConn() - if err != nil { - return zeroRes, err - } - var res T - var resErr error - if err := conn.Control(func(fd uintptr) { - res, resErr = fn(fd) - }); err != nil { - return zeroRes, err - } - if resErr != nil { - return zeroRes, resErr - } - return res, nil + "go.podman.io/storage/internal/xattrs" +) + +// Lgetxattr retrieves the value of the extended attribute identified by attr +// and associated with the given path in the file system. +// Returns a []byte slice if the xattr is set and nil otherwise. +func Lgetxattr(path string, attr string) ([]byte, error) { + return xattrs.Lgetxattr(path, attr) +} + +// RootLgetxattr retrieves the value of the extended attribute identified by attr +// in fsPath (per fs.ValidPath) under root. +// Returns a []byte slice if the xattr is set and nil otherwise. +func RootLgetxattr(root *os.Root, fsPath string, attr string) ([]byte, error) { + return xattrs.RootLgetxattr(root, fsPath, attr) +} + +// Lsetxattr sets the value of the extended attribute identified by attr +// and associated with the given path in the file system. +func Lsetxattr(path string, attr string, data []byte, flags int) error { + return xattrs.Lsetxattr(path, attr, data, flags) +} + +// Llistxattr lists extended attributes associated with the given path +// in the file system. +func Llistxattr(path string) ([]string, error) { + return xattrs.Llistxattr(path) +} + +// RootLlistxattr lists extended attributes associated with +// fsPath (per fs.ValidPath) under root. +func RootLlistxattr(root *os.Root, fsPath string) ([]string, error) { + return xattrs.RootLlistxattr(root, fsPath) } diff --git a/vendor/go.podman.io/storage/pkg/system/xattrs_darwin.go b/vendor/go.podman.io/storage/pkg/system/xattrs_darwin.go index 215c96616a..c86291b3de 100644 --- a/vendor/go.podman.io/storage/pkg/system/xattrs_darwin.go +++ b/vendor/go.podman.io/storage/pkg/system/xattrs_darwin.go @@ -1,10 +1,6 @@ package system import ( - "bytes" - "os" - "path/filepath" - "golang.org/x/sys/unix" ) @@ -18,133 +14,3 @@ const ( // Not in x/sys/unix as of v0.40.0. O_RESOLVE_BENEATH = 0x00001000 ) - -// getxattr is the logic underlying Lgetxattr and Fgetxattr. -// Returns a []byte slice if the xattr is set and nil otherwise. -func getxattr(syscallName string, pathInError string, getSyscall func(dest []byte) (int, error)) ([]byte, error) { - // Start with a 128 length byte array - dest := make([]byte, 128) - sz, errno := getSyscall(dest) - - for errno == unix.ERANGE { - // Buffer too small, use zero-sized buffer to get the actual size - sz, errno = getSyscall([]byte{}) - if errno != nil { - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} - } - dest = make([]byte, sz) - sz, errno = getSyscall(dest) - } - - switch { - case errno == unix.ENOATTR: - return nil, nil - case errno != nil: - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} - } - - return dest[:sz], nil -} - -// Lgetxattr retrieves the value of the extended attribute identified by attr -// and associated with the given path in the file system. -// Returns a []byte slice if the xattr is set and nil otherwise. -func Lgetxattr(path string, attr string) ([]byte, error) { - return getxattr("lgetxattr", path, func(dest []byte) (int, error) { - return unix.Lgetxattr(path, attr, dest) - }) -} - -// RootLgetxattr retrieves the value of the extended attribute identified by attr -// in fsPath (per fs.ValidPath) under root. -// Returns a []byte slice if the xattr is set and nil otherwise. -func RootLgetxattr(root *os.Root, fsPath string, attr string) ([]byte, error) { - // We can’t use root.Open(fsPath) because it follows trailing symlinks. - rootFD, err := root.Open(".") - if err != nil { - return nil, err - } - defer rootFD.Close() - fd, err := syscallConnControl(rootFD, func(rootFD uintptr) (int, error) { - // macOS does not have O_PATH, so hope the user has enough permissions. - return unix.Openat(int(rootFD), filepath.FromSlash(fsPath), unix.O_RDONLY|unix.O_CLOEXEC|unix.O_SYMLINK|O_RESOLVE_BENEATH, 0) - }) - if err != nil { - return nil, err - } - defer unix.Close(fd) - - return getxattr("RootLgetxattr", fsPath, func(dest []byte) (int, error) { - return unix.Fgetxattr(fd, attr, dest) - }) -} - -// Lsetxattr sets the value of the extended attribute identified by attr -// and associated with the given path in the file system. -func Lsetxattr(path string, attr string, data []byte, flags int) error { - if err := unix.Lsetxattr(path, attr, data, flags); err != nil { - return &os.PathError{Op: "lsetxattr", Path: path, Err: err} - } - - return nil -} - -// listxattr is the logic underlying Llistxattr and RootLlistxattr. -func listxattr(syscallName string, pathInError string, listSyscall func(dest []byte) (int, error)) ([]string, error) { - dest := make([]byte, 128) - sz, errno := listSyscall(dest) - - for errno == unix.ERANGE { - // Buffer too small, use zero-sized buffer to get the actual size - sz, errno = listSyscall([]byte{}) - if errno != nil { - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} - } - - dest = make([]byte, sz) - sz, errno = listSyscall(dest) - } - if errno != nil { - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} - } - - var attrs []string - for token := range bytes.SplitSeq(dest[:sz], []byte{0}) { - if len(token) > 0 { - attrs = append(attrs, string(token)) - } - } - - return attrs, nil -} - -// Llistxattr lists extended attributes associated with the given path -// in the file system. -func Llistxattr(path string) ([]string, error) { - return listxattr("llistxattr", path, func(dest []byte) (int, error) { - return unix.Llistxattr(path, dest) - }) -} - -// RootLlistxattr lists extended attributes associated with -// fsPath (per fs.ValidPath) under root. -func RootLlistxattr(root *os.Root, fsPath string) ([]string, error) { - // We can’t use root.Open(fsPath) because it follows trailing symlinks. - rootFD, err := root.Open(".") - if err != nil { - return nil, err - } - defer rootFD.Close() - // macOS does not have O_PATH, so hope the user has enough permissions. - fd, err := syscallConnControl(rootFD, func(rootFD uintptr) (int, error) { - return unix.Openat(int(rootFD), filepath.FromSlash(fsPath), unix.O_RDONLY|unix.O_CLOEXEC|unix.O_SYMLINK|O_RESOLVE_BENEATH, 0) - }) - if err != nil { - return nil, err - } - defer unix.Close(fd) - - return listxattr("RootLlistxattr", fsPath, func(dest []byte) (int, error) { - return unix.Flistxattr(fd, dest) - }) -} diff --git a/vendor/go.podman.io/storage/pkg/system/xattrs_freebsd.go b/vendor/go.podman.io/storage/pkg/system/xattrs_freebsd.go index 83dc83f181..0b3f400b7b 100644 --- a/vendor/go.podman.io/storage/pkg/system/xattrs_freebsd.go +++ b/vendor/go.podman.io/storage/pkg/system/xattrs_freebsd.go @@ -1,12 +1,6 @@ package system import ( - "fmt" - "os" - "path" - "path/filepath" - "strings" - "golang.org/x/sys/unix" ) @@ -20,140 +14,3 @@ const ( // Value is too small or too large for maximum size allowed EOVERFLOW unix.Errno = unix.EOVERFLOW ) - -var namespaceMap = map[string]int{ - "user": EXTATTR_NAMESPACE_USER, - "system": EXTATTR_NAMESPACE_SYSTEM, -} - -func xattrToExtattr(xattr string) (namespace int, extattr string, err error) { - namespaceName, extattr, found := strings.Cut(xattr, ".") - if !found { - return -1, "", ENOTSUP - } - - namespace, ok := namespaceMap[namespaceName] - if !ok { - return -1, "", ENOTSUP - } - return namespace, extattr, nil -} - -// Lgetxattr retrieves the value of the extended attribute identified by attr -// and associated with the given path in the file system. -// Returns a []byte slice if the xattr is set and nil otherwise. -func Lgetxattr(path string, attr string) ([]byte, error) { - namespace, extattr, err := xattrToExtattr(attr) - if err != nil { - return nil, err - } - return ExtattrGetLink(path, namespace, extattr) -} - -// RootLgetxattr retrieves the value of the extended attribute identified by attr -// in fsPath (per fs.ValidPath) under root. -// Returns a []byte slice if the xattr is set and nil otherwise. -func RootLgetxattr(root *os.Root, fsPath string, attr string) ([]byte, error) { - // O_PATH value on freebsd. We must define O_PATH ourselves - // until https://github.com/golang/go/issues/54355 is fixed. - const O_PATH = 0x00400000 //nolint:staticcheck // ST1003: should not use ALL_CAPS - - // We can’t use root.Open(fsPath) because it follows trailing symlinks. - parentDir, err := root.Open(path.Dir(fsPath)) - if err != nil { - return nil, err - } - defer parentDir.Close() - // A path per fs.ValidPath should not contain a ".."; reject it so that we can ensure no escape from parentDir. - fsBase := path.Base(fsPath) - if fsBase == ".." { - return nil, fmt.Errorf("trailing .. in RootLgetxattr(%q)", fsPath) - } - fd, err := syscallConnControl(parentDir, func(parentDir uintptr) (int, error) { - return unix.Openat(int(parentDir), filepath.FromSlash(fsBase), O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) - }) - if err != nil { - return nil, err - } - defer unix.Close(fd) - - namespace, extattr, err := xattrToExtattr(attr) - if err != nil { - return nil, err - } - return extattrGetFd(fd, namespace, extattr) -} - -// Lsetxattr sets the value of the extended attribute identified by attr -// and associated with the given path in the file system. -func Lsetxattr(path string, attr string, value []byte, flags int) error { - if flags != 0 { - // FIXME: Flags are not supported on FreeBSD, but we can implement - // them mimicking the behavior of the Linux implementation. - // See lsetxattr(2) on Linux for more information. - return ENOTSUP - } - - namespace, extattr, err := xattrToExtattr(attr) - if err != nil { - return err - } - return ExtattrSetLink(path, namespace, extattr, value) -} - -// listxattr is the logic underlying Llistxattr and RootLlistxattr. -func listxattr(listOperation func(namespace int) ([]string, error)) ([]string, error) { - attrs := []string{} - - for namespaceName, namespace := range namespaceMap { - namespaceAttrs, err := listOperation(namespace) - if err != nil { - return nil, err - } - - for _, attr := range namespaceAttrs { - attrs = append(attrs, namespaceName+"."+attr) - } - } - - return attrs, nil -} - -// Llistxattr lists extended attributes associated with the given path -// in the file system. -func Llistxattr(path string) ([]string, error) { - return listxattr(func(namespace int) ([]string, error) { - return ExtattrListLink(path, namespace) - }) -} - -// RootLlistxattr lists extended attributes associated with -// fsPath (per fs.ValidPath) under root. -func RootLlistxattr(root *os.Root, fsPath string) ([]string, error) { - // O_PATH value on freebsd. We must define O_PATH ourselves - // until https://github.com/golang/go/issues/54355 is fixed. - const O_PATH = 0x00400000 //nolint:staticcheck // ST1003: should not use ALL_CAPS - - // We can’t use root.Open(fsPath) because it follows trailing symlinks. - parentDir, err := root.Open(path.Dir(fsPath)) - if err != nil { - return nil, err - } - defer parentDir.Close() - // A path per fs.ValidPath should not contain a ".."; reject it so that we can ensure no escape from parentDir. - fsBase := path.Base(fsPath) - if fsBase == ".." { - return nil, fmt.Errorf("trailing .. in RootLlistxattr(%q)", fsPath) - } - fd, err := syscallConnControl(parentDir, func(parentDir uintptr) (int, error) { - return unix.Openat(int(parentDir), filepath.FromSlash(fsBase), O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) - }) - if err != nil { - return nil, err - } - defer unix.Close(fd) - - return listxattr(func(namespace int) ([]string, error) { - return extattrListFd(fd, namespace) - }) -} diff --git a/vendor/go.podman.io/storage/pkg/system/xattrs_linux.go b/vendor/go.podman.io/storage/pkg/system/xattrs_linux.go index b73351d773..0b3f400b7b 100644 --- a/vendor/go.podman.io/storage/pkg/system/xattrs_linux.go +++ b/vendor/go.podman.io/storage/pkg/system/xattrs_linux.go @@ -1,12 +1,6 @@ package system import ( - "bytes" - "fmt" - "os" - "path" - "path/filepath" - "golang.org/x/sys/unix" ) @@ -20,143 +14,3 @@ const ( // Value is too small or too large for maximum size allowed EOVERFLOW unix.Errno = unix.EOVERFLOW ) - -// getxattr is the logic underlying Lgetxattr and RootLgetxattr. -// Returns a []byte slice if the xattr is set and nil otherwise. -func getxattr(syscallName string, pathInError string, getSyscall func(dest []byte) (int, error)) ([]byte, error) { - // Start with a 128 length byte array - dest := make([]byte, 128) - sz, errno := getSyscall(dest) - - for errno == unix.ERANGE { - // Buffer too small, use zero-sized buffer to get the actual size - sz, errno = getSyscall([]byte{}) - if errno != nil { - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} - } - dest = make([]byte, sz) - sz, errno = getSyscall(dest) - } - - switch { - case errno == unix.ENODATA: - return nil, nil - case errno != nil: - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} - } - - return dest[:sz], nil -} - -// Lgetxattr retrieves the value of the extended attribute identified by attr -// and associated with the given path in the file system. -// Returns a []byte slice if the xattr is set and nil otherwise. -func Lgetxattr(path string, attr string) ([]byte, error) { - return getxattr("lgetxattr", path, func(dest []byte) (int, error) { - return unix.Lgetxattr(path, attr, dest) - }) -} - -// RootLgetxattr retrieves the value of the extended attribute identified by attr -// in fsPath (per fs.ValidPath) under root. -// Returns a []byte slice if the xattr is set and nil otherwise. -func RootLgetxattr(root *os.Root, fsPath string, attr string) ([]byte, error) { - // We can use neither root.Open nor pathrs.OpenatInRoot to get the target file descriptor because they follow trailing symlinks. - parentDir, err := root.Open(path.Dir(fsPath)) - if err != nil { - return nil, err - } - defer parentDir.Close() - // A path per fs.ValidPath should not contain a ".."; reject it so that we can ensure no escape from parentDir. - fsBase := path.Base(fsPath) - if fsBase == ".." { - return nil, fmt.Errorf("trailing .. in RootLgetxattr(%q)", fsPath) - } - // Ideally we would use getxattrat() here, but as of 2026-05 that might be too recent. - fd, err := syscallConnControl(parentDir, func(parentDir uintptr) (int, error) { - return unix.Openat(int(parentDir), filepath.FromSlash(fsBase), unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) - }) - if err != nil { - return nil, err - } - defer unix.Close(fd) - - return getxattr("RootLgetxattr", fsPath, func(dest []byte) (int, error) { - return unix.Getxattr(fmt.Sprintf("/proc/self/fd/%d", fd), attr, dest) - }) -} - -// Lsetxattr sets the value of the extended attribute identified by attr -// and associated with the given path in the file system. -func Lsetxattr(path string, attr string, data []byte, flags int) error { - if err := unix.Lsetxattr(path, attr, data, flags); err != nil { - return &os.PathError{Op: "lsetxattr", Path: path, Err: err} - } - - return nil -} - -// listxattr is the logic underlying Llistxattr and RootLlistxattr. -func listxattr(syscallName string, pathInError string, listSyscall func(dest []byte) (int, error)) ([]string, error) { - dest := make([]byte, 128) - sz, errno := listSyscall(dest) - - for errno == unix.ERANGE { - // Buffer too small, use zero-sized buffer to get the actual size - sz, errno = listSyscall([]byte{}) - if errno != nil { - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} - } - - dest = make([]byte, sz) - sz, errno = listSyscall(dest) - } - if errno != nil { - return nil, &os.PathError{Op: syscallName, Path: pathInError, Err: errno} - } - - var attrs []string - for token := range bytes.SplitSeq(dest[:sz], []byte{0}) { - if len(token) > 0 { - attrs = append(attrs, string(token)) - } - } - - return attrs, nil -} - -// Llistxattr lists extended attributes associated with the given path -// in the file system. -func Llistxattr(path string) ([]string, error) { - return listxattr("llistxattr", path, func(dest []byte) (int, error) { - return unix.Llistxattr(path, dest) - }) -} - -// RootLlistxattr lists extended attributes associated with -// fsPath (per fs.ValidPath) under root. -func RootLlistxattr(root *os.Root, fsPath string) ([]string, error) { - // We can use neither root.Open nor pathrs.OpenatInRoot to get the target file descriptor because they follow trailing symlinks. - parentDir, err := root.Open(path.Dir(fsPath)) - if err != nil { - return nil, err - } - defer parentDir.Close() - // A path per fs.ValidPath should not contain a ".."; reject it so that we can ensure no escape from parentDir. - fsBase := path.Base(fsPath) - if fsBase == ".." { - return nil, fmt.Errorf("trailing .. in RootLlistxattr(%q)", fsPath) - } - // Ideally we would use listxattrat() here, but as of 2026-05 that might be too recent. - fd, err := syscallConnControl(parentDir, func(parentDir uintptr) (int, error) { - return unix.Openat(int(parentDir), filepath.FromSlash(fsBase), unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) - }) - if err != nil { - return nil, err - } - defer unix.Close(fd) - - return listxattr("RootLlistxattr", fsPath, func(dest []byte) (int, error) { - return unix.Listxattr(fmt.Sprintf("/proc/self/fd/%d", fd), dest) - }) -} diff --git a/vendor/go.podman.io/storage/pkg/system/xattrs_unsupported.go b/vendor/go.podman.io/storage/pkg/system/xattrs_unsupported.go index 2c02a6d530..43f0245818 100644 --- a/vendor/go.podman.io/storage/pkg/system/xattrs_unsupported.go +++ b/vendor/go.podman.io/storage/pkg/system/xattrs_unsupported.go @@ -3,7 +3,6 @@ package system import ( - "os" "syscall" ) @@ -17,31 +16,3 @@ const ( // Value is too small or too large for maximum size allowed EOVERFLOW syscall.Errno = syscall.Errno(0) ) - -// Lgetxattr is not supported on platforms other than linux. -func Lgetxattr(path string, attr string) ([]byte, error) { - return nil, ErrNotSupportedPlatform -} - -// RootLgetxattr retrieves the value of the extended attribute identified by attr -// in fsPath (per fs.ValidPath) under root. -// Returns a []byte slice if the xattr is set and nil otherwise. -func RootLgetxattr(root *os.Root, fsPath string, attr string) ([]byte, error) { - return nil, ErrNotSupportedPlatform -} - -// Lsetxattr is not supported on platforms other than linux. -func Lsetxattr(path string, attr string, data []byte, flags int) error { - return ErrNotSupportedPlatform -} - -// Llistxattr is not supported on platforms other than linux. -func Llistxattr(path string) ([]string, error) { - return nil, ErrNotSupportedPlatform -} - -// RootLlistxattr lists extended attributes associated with -// fsPath (per fs.ValidPath) under root. -func RootLlistxattr(root *os.Root, fsPath string) ([]string, error) { - return nil, ErrNotSupportedPlatform -} diff --git a/vendor/go.podman.io/storage/pkg/unshare/unshare_linux.go b/vendor/go.podman.io/storage/pkg/unshare/unshare_linux.go index 0022b48bff..c74cf7a0bb 100644 --- a/vendor/go.podman.io/storage/pkg/unshare/unshare_linux.go +++ b/vendor/go.podman.io/storage/pkg/unshare/unshare_linux.go @@ -394,17 +394,18 @@ const ( UsernsEnvName = "_CONTAINERS_USERNS_CONFIGURED" ) -// hasFullUsersMappings checks whether the current user namespace has all the IDs mapped. -func hasFullUsersMappings() (bool, error) { - content, err := os.ReadFile("/proc/self/uid_map") - if err != nil { +// inInitUserNamespace checks whether the current process is running in the +// initial user namespace by comparing the inode of /proc/self/ns/user against +// the kernel-defined USER_NS_INIT_INO. +func inInitUserNamespace() (bool, error) { + const userNsInitIno uint64 = 0xEFFF_FFFD + var st syscall.Stat_t + // Stat, not Lstat: /proc/self/ns/user is a magic symlink and we need + // to dereference it to obtain the inode of the actual namespace object. + if err := syscall.Stat("/proc/self/ns/user", &st); err != nil { return false, err } - // The kernel rejects attempts to create mappings where either starting - // point is (u32)-1: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/kernel/user_namespace.c?id=af3e9579ecfb#n1006 . - // So, if the uid_map contains 4294967295, the entire IDs space is available in the - // user namespace, so it is likely the initial user namespace. - return bytes.Contains(content, []byte("4294967295")), nil + return st.Ino == userNsInitIno, nil } var ( @@ -427,11 +428,11 @@ func IsRootless() bool { } } if !isRootless { - hasMappings, err := hasFullUsersMappings() + initNS, err := inInitUserNamespace() if err != nil { - logrus.Warnf("Failed to read current user namespace mappings") + logrus.Warnf("Failed to check initial user namespace") } - if err == nil && !hasMappings { + if err == nil && !initNS { isRootless = true } } @@ -703,11 +704,17 @@ func GetHostIDMappings(pid string) ([]specs.LinuxIDMapping, []specs.LinuxIDMappi return uidmap, gidmap, nil } -// GetSubIDMappings reads mappings from /etc/subuid and /etc/subgid. -func GetSubIDMappings(user, group string) ([]specs.LinuxIDMapping, []specs.LinuxIDMapping, error) { - mappings, err := idtools.NewIDMappings(user, group) +// GetSubIDMappings reads the uid and gid mappings for the given usernames. +// It reads the data from the /etc/sub{uid,gid} files or +// when using the libsubid build tag it then uses the libsubid functions +// to query the user ranges which resolves them according to the system NSS +// configuration, potentially fetching the ranges from a central network source. +// It returns the uid mapping as first return value and the gid mapping as second +// or an error otherwise. +func GetSubIDMappings(usernameForUIDs, usernameForGIDs string) ([]specs.LinuxIDMapping, []specs.LinuxIDMapping, error) { + mappings, err := idtools.NewIDMappings(usernameForUIDs, usernameForGIDs) if err != nil { - return nil, nil, fmt.Errorf("reading subuid mappings for user %q and subgid mappings for group %q: %w", user, group, err) + return nil, nil, err } var uidmap, gidmap []specs.LinuxIDMapping for _, m := range mappings.UIDs() { diff --git a/vendor/modules.txt b/vendor/modules.txt index 794c10513b..7b4129f75c 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -11,8 +11,8 @@ github.com/BurntSushi/toml/internal # github.com/Masterminds/semver/v3 v3.4.0 ## explicit; go 1.21 github.com/Masterminds/semver/v3 -# github.com/Microsoft/go-winio v0.6.2 -## explicit; go 1.21 +# github.com/Microsoft/go-winio v0.6.3-0.20260930231756-f19d9717deb0 +## explicit; go 1.26.0 github.com/Microsoft/go-winio github.com/Microsoft/go-winio/backuptar github.com/Microsoft/go-winio/internal/fs @@ -163,7 +163,7 @@ github.com/davecgh/go-spew/spew # github.com/distribution/reference v0.6.0 ## explicit; go 1.20 github.com/distribution/reference -# github.com/docker/cli v29.7.1+incompatible +# github.com/docker/cli v29.9.0+incompatible ## explicit github.com/docker/cli/cli/config github.com/docker/cli/cli/config/configfile @@ -174,11 +174,11 @@ github.com/docker/cli/cli/config/types ## explicit github.com/docker/distribution/registry/api/errcode github.com/docker/distribution/registry/api/v2 -# github.com/docker/docker-credential-helpers v0.9.8 +# github.com/docker/docker-credential-helpers v0.9.10 ## explicit; go 1.21 github.com/docker/docker-credential-helpers/client github.com/docker/docker-credential-helpers/credentials -# github.com/docker/go-connections v0.8.1 +# github.com/docker/go-connections v0.8.2 ## explicit; go 1.23 github.com/docker/go-connections/tlsconfig # github.com/docker/go-units v0.5.0 @@ -316,9 +316,10 @@ github.com/golang/groupcache/lru # github.com/golang/protobuf v1.5.4 ## explicit; go 1.17 github.com/golang/protobuf/proto -# github.com/google/cel-go v0.29.2 +# github.com/google/cel-go v0.31.0 ## explicit; go 1.23.0 github.com/google/cel-go/cel +github.com/google/cel-go/cel/async github.com/google/cel-go/checker github.com/google/cel-go/checker/decls github.com/google/cel-go/common @@ -403,13 +404,14 @@ github.com/joelanford/ignore # github.com/json-iterator/go v1.1.12 ## explicit; go 1.12 github.com/json-iterator/go -# github.com/klauspost/compress v1.20.1 +# github.com/klauspost/compress v1.20.3 ## explicit; go 1.25 github.com/klauspost/compress github.com/klauspost/compress/fse github.com/klauspost/compress/huff0 github.com/klauspost/compress/internal/cpuinfo github.com/klauspost/compress/internal/le +github.com/klauspost/compress/internal/regmask github.com/klauspost/compress/internal/snapref github.com/klauspost/compress/zstd github.com/klauspost/compress/zstd/internal/xxhash @@ -422,7 +424,7 @@ github.com/mattn/go-colorable # github.com/mattn/go-isatty v0.0.20 ## explicit; go 1.15 github.com/mattn/go-isatty -# github.com/mattn/go-sqlite3 v1.14.49 +# github.com/mattn/go-sqlite3 v1.14.52 ## explicit; go 1.21 github.com/mattn/go-sqlite3 # github.com/maxbrunsfeld/counterfeiter/v6 v6.14.0 @@ -437,7 +439,7 @@ github.com/mitchellh/hashstructure/v2 # github.com/moby/locker v1.0.1 ## explicit; go 1.13 github.com/moby/locker -# github.com/moby/moby/client v0.5.1 +# github.com/moby/moby/client v0.6.2 ## explicit; go 1.24 github.com/moby/moby/client/pkg/versions # github.com/moby/sys/capability v0.4.0 @@ -546,7 +548,7 @@ github.com/openshift/client-go/config/listers/config/v1alpha2 # github.com/openshift/library-go v0.0.0-20261019145849-b3e46fec8a08 ## explicit; go 1.26.0 github.com/openshift/library-go/pkg/crypto -# github.com/operator-framework/api v0.45.0 +# github.com/operator-framework/api v0.46.0 ## explicit; go 1.26.3 github.com/operator-framework/api/crds github.com/operator-framework/api/pkg/constraints @@ -694,12 +696,12 @@ go.opentelemetry.io/auto/sdk/internal/telemetry ## explicit; go 1.25.0 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal -# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 +# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 ## explicit; go 1.25.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv -# go.opentelemetry.io/otel v1.45.0 +# go.opentelemetry.io/otel v1.46.0 ## explicit; go 1.25.0 go.opentelemetry.io/otel go.opentelemetry.io/otel/attribute @@ -718,8 +720,8 @@ go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv go.opentelemetry.io/otel/semconv/v1.40.0 go.opentelemetry.io/otel/semconv/v1.40.0/rpcconv go.opentelemetry.io/otel/semconv/v1.41.0 -go.opentelemetry.io/otel/semconv/v1.41.0/httpconv go.opentelemetry.io/otel/semconv/v1.43.0 +go.opentelemetry.io/otel/semconv/v1.43.0/httpconv go.opentelemetry.io/otel/semconv/v1.43.0/otelconv # go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.45.0 ## explicit; go 1.25.0 @@ -735,12 +737,12 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/observ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/x -# go.opentelemetry.io/otel/metric v1.45.0 +# go.opentelemetry.io/otel/metric v1.46.0 ## explicit; go 1.25.0 go.opentelemetry.io/otel/metric go.opentelemetry.io/otel/metric/embedded go.opentelemetry.io/otel/metric/noop -# go.opentelemetry.io/otel/sdk v1.45.0 +# go.opentelemetry.io/otel/sdk v1.46.0 ## explicit; go 1.25.0 go.opentelemetry.io/otel/sdk go.opentelemetry.io/otel/sdk/instrumentation @@ -750,7 +752,7 @@ go.opentelemetry.io/otel/sdk/resource go.opentelemetry.io/otel/sdk/trace go.opentelemetry.io/otel/sdk/trace/internal/env go.opentelemetry.io/otel/sdk/trace/internal/observ -# go.opentelemetry.io/otel/trace v1.45.0 +# go.opentelemetry.io/otel/trace v1.46.0 ## explicit; go 1.25.0 go.opentelemetry.io/otel/trace go.opentelemetry.io/otel/trace/embedded @@ -768,8 +770,8 @@ go.podman.io/common/pkg/auth go.podman.io/common/pkg/capabilities go.podman.io/common/pkg/completion go.podman.io/common/pkg/password -# go.podman.io/image/v5 v5.41.2 -## explicit; go 1.25.7 +# go.podman.io/image/v5 v5.42.0 +## explicit; go 1.26.0 go.podman.io/image/v5/docker go.podman.io/image/v5/docker/policyconfiguration go.podman.io/image/v5/docker/reference @@ -804,9 +806,12 @@ go.podman.io/image/v5/pkg/tlsclientconfig go.podman.io/image/v5/transports go.podman.io/image/v5/types go.podman.io/image/v5/version -# go.podman.io/storage v1.64.1 -## explicit; go 1.25.0 +# go.podman.io/storage v1.65.0 +## explicit; go 1.26.0 go.podman.io/storage/internal/rawfilelock +go.podman.io/storage/internal/rootlookupcache +go.podman.io/storage/internal/stat +go.podman.io/storage/internal/xattrs go.podman.io/storage/pkg/configfile go.podman.io/storage/pkg/fileutils go.podman.io/storage/pkg/homedir @@ -968,13 +973,13 @@ gomodules.xyz/jsonpatch/v2 # google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 ## explicit; go 1.25.0 google.golang.org/genproto/protobuf/field_mask -# google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d +# google.golang.org/genproto/googleapis/api v0.0.0-20260825221802-da73d73af1c5 ## explicit; go 1.25.0 google.golang.org/genproto/googleapis/api google.golang.org/genproto/googleapis/api/annotations google.golang.org/genproto/googleapis/api/expr/v1alpha1 google.golang.org/genproto/googleapis/api/httpbody -# google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d +# google.golang.org/genproto/googleapis/rpc v0.0.0-20260825221802-da73d73af1c5 ## explicit; go 1.25.0 google.golang.org/genproto/googleapis/rpc/errdetails google.golang.org/genproto/googleapis/rpc/status