From e46099a5040b212dc9f370ac6f93eb77c0f3d5de Mon Sep 17 00:00:00 2001 From: Huamin Chen Date: Tue, 15 Jan 2019 16:20:41 +0000 Subject: [PATCH] reconcile merge Signed-off-by: Huamin Chen --- Gopkg.lock | 215 +- Gopkg.toml | 2 +- pkg/rbd/controllerserver.go | 4 +- pkg/rbd/rbd_util.go | 12 +- vendor/github.com/ghodss/yaml/.travis.yml | 7 - vendor/github.com/google/btree/.travis.yml | 1 + vendor/github.com/google/btree/LICENSE | 202 + vendor/github.com/google/btree/README.md | 12 + vendor/github.com/google/btree/btree.go | 890 ++ vendor/github.com/google/btree/btree_mem.go | 76 + vendor/github.com/google/btree/btree_test.go | 785 ++ .../gregjones/httpcache/.travis.yml | 19 + .../gregjones/httpcache/LICENSE.txt | 7 + .../github.com/gregjones/httpcache/README.md | 25 + .../httpcache/diskcache/diskcache.go | 61 + .../httpcache/diskcache/diskcache_test.go | 42 + .../gregjones/httpcache/httpcache.go | 551 + .../gregjones/httpcache/httpcache_test.go | 1475 ++ .../httpcache/leveldbcache/leveldbcache.go | 51 + .../leveldbcache/leveldbcache_test.go | 46 + .../gregjones/httpcache/memcache/appengine.go | 61 + .../httpcache/memcache/appengine_test.go | 44 + .../gregjones/httpcache/memcache/memcache.go | 60 + .../httpcache/memcache/memcache_test.go | 47 + .../gregjones/httpcache/redis/redis.go | 43 + .../gregjones/httpcache/redis/redis_test.go | 43 + vendor/github.com/howeyc/gopass/.travis.yml | 11 - vendor/github.com/howeyc/gopass/LICENSE.txt | 15 - .../howeyc/gopass/OPENSOLARIS.LICENSE | 384 - vendor/github.com/howeyc/gopass/README.md | 27 - vendor/github.com/howeyc/gopass/pass.go | 110 - vendor/github.com/howeyc/gopass/pass_test.go | 225 - vendor/github.com/howeyc/gopass/terminal.go | 25 - .../howeyc/gopass/terminal_solaris.go | 69 - .../csi-lib-utils/CONTRIBUTING.md | 31 + .../kubernetes-csi/csi-lib-utils/Gopkg.lock | 149 + .../kubernetes-csi/csi-lib-utils/Gopkg.toml | 6 + .../kubernetes-csi/csi-lib-utils/LICENSE | 201 + .../kubernetes-csi/csi-lib-utils/Makefile | 35 + .../kubernetes-csi/csi-lib-utils/OWNERS | 4 + .../kubernetes-csi/csi-lib-utils/README.md | 19 + .../csi-lib-utils/SECURITY_CONTACTS | 13 + .../csi-lib-utils/code-of-conduct.md | 3 + .../protosanitizer/protosanitizer.go | 177 + .../protosanitizer/protosanitizer_test.go | 224 + .../protosanitizer/test/.gitignore | 5 + .../protosanitizer/test/Makefile | 136 + .../protosanitizer/test/README.md | 2 + .../protosanitizer/test/csi.proto | 1203 ++ .../protosanitizer/test/csi03/csi.pb.go | 4991 +++++++ .../protosanitizer/test/csi10/csi.pb.go | 5277 ++++++++ .../protosanitizer/test/csitest.proto | 1217 ++ .../protosanitizer/test/csitest/csitest.pb.go | 5326 ++++++++ .../kubernetes-csi/drivers/Gopkg.lock | 180 +- .../kubernetes-csi/drivers/Gopkg.toml | 7 + .../kubernetes-csi/drivers/SECURITY_CONTACTS | 13 + .../drivers/deploy/hostpath/README.md | 6 + ...ter.yaml => csi-hostpath-snapshotter.yaml} | 0 .../deploy/hostpath/csi-hostpathplugin.yaml | 2 +- .../drivers/pkg/csi-common/utils.go | 5 +- .../drivers/pkg/hostpath/controllerserver.go | 14 +- vendor/github.com/petar/GoLLRB/.gitignore | 23 + vendor/github.com/petar/GoLLRB/AUTHORS | 4 + vendor/github.com/petar/GoLLRB/LICENSE | 27 + vendor/github.com/petar/GoLLRB/README.md | 66 + .../petar/GoLLRB/doc/Sedgewick-LLRB.pdf | 4401 ++++++ .../GoLLRB/doc/Sedgewick-RedBlackBST.java | 475 + .../GoLLRB/doc/Sedgewick-Talk-Penn2008.pdf | Bin 0 -> 11636171 bytes vendor/github.com/petar/GoLLRB/example/ex1.go | 26 + vendor/github.com/petar/GoLLRB/llrb/avgvar.go | 39 + .../github.com/petar/GoLLRB/llrb/iterator.go | 93 + .../petar/GoLLRB/llrb/iterator_test.go | 76 + .../petar/GoLLRB/llrb/llrb-stats.go | 46 + vendor/github.com/petar/GoLLRB/llrb/llrb.go | 456 + .../github.com/petar/GoLLRB/llrb/llrb_test.go | 239 + vendor/github.com/petar/GoLLRB/llrb/util.go | 17 + vendor/github.com/peterbourgon/diskv/LICENSE | 19 + .../github.com/peterbourgon/diskv/README.md | 141 + .../peterbourgon/diskv/basic_test.go | 336 + .../peterbourgon/diskv/compression.go | 64 + .../peterbourgon/diskv/compression_test.go | 72 + vendor/github.com/peterbourgon/diskv/diskv.go | 624 + .../examples/content-addressable-store/cas.go | 63 + .../super-simple-store/super-simple-store.go | 30 + .../peterbourgon/diskv/import_test.go | 76 + vendor/github.com/peterbourgon/diskv/index.go | 115 + .../peterbourgon/diskv/index_test.go | 148 + .../peterbourgon/diskv/issues_test.go | 121 + .../peterbourgon/diskv/keys_test.go | 231 + .../peterbourgon/diskv/speed_test.go | 153 + .../peterbourgon/diskv/stream_test.go | 117 + vendor/github.com/pkg/errors/.travis.yml | 12 +- vendor/github.com/pkg/errors/README.md | 4 +- vendor/github.com/pkg/errors/bench_test.go | 8 +- vendor/github.com/pkg/errors/errors.go | 43 +- vendor/github.com/pkg/errors/errors_test.go | 25 + vendor/github.com/pkg/errors/format_test.go | 2 +- vendor/github.com/pkg/errors/stack.go | 51 +- vendor/github.com/pkg/errors/stack_test.go | 42 +- vendor/golang.org/x/crypto/bn256/gfp12.go | 4 +- vendor/golang.org/x/crypto/sha3/hashes.go | 6 + vendor/golang.org/x/crypto/sha3/sha3_test.go | 6 + vendor/golang.org/x/net/http2/h2c/h2c.go | 3 + vendor/golang.org/x/net/http2/hpack/hpack.go | 10 +- .../x/net/http2/hpack/hpack_test.go | 14 +- .../x/net/internal/nettest/helper_bsd.go | 29 - .../x/net/internal/nettest/helper_nobsd.go | 4 - .../x/net/internal/nettest/helper_stub.go | 4 - .../x/net/internal/nettest/helper_windows.go | 4 - .../x/net/internal/socket/sys_bsdvar.go | 8 +- vendor/golang.org/x/net/ipv4/sys_darwin.go | 52 +- vendor/golang.org/x/net/ipv6/sys_darwin.go | 74 +- vendor/golang.org/x/net/proxy/proxy.go | 9 +- vendor/golang.org/x/net/proxy/proxy_test.go | 2 + vendor/golang.org/x/net/publicsuffix/gen.go | 8 +- vendor/golang.org/x/net/publicsuffix/list.go | 21 +- .../x/net/publicsuffix/list_test.go | 269 +- .../x/net/publicsuffix/table_test.go | 2 + vendor/golang.org/x/net/route/message_test.go | 41 +- vendor/golang.org/x/net/route/route.go | 4 +- .../x/net/route/zsys_freebsd_arm64.go | 123 + vendor/golang.org/x/net/trace/trace.go | 14 +- vendor/golang.org/x/oauth2/.travis.yml | 13 + vendor/golang.org/x/oauth2/AUTHORS | 3 + vendor/golang.org/x/oauth2/CONTRIBUTING.md | 26 + vendor/golang.org/x/oauth2/CONTRIBUTORS | 3 + vendor/golang.org/x/oauth2/LICENSE | 27 + vendor/golang.org/x/oauth2/README.md | 86 + vendor/golang.org/x/oauth2/amazon/amazon.go | 16 + .../x/oauth2/bitbucket/bitbucket.go | 16 + vendor/golang.org/x/oauth2/cern/cern.go | 16 + .../clientcredentials/clientcredentials.go | 112 + .../clientcredentials_test.go | 97 + vendor/golang.org/x/oauth2/example_test.go | 89 + .../golang.org/x/oauth2/facebook/facebook.go | 16 + vendor/golang.org/x/oauth2/fitbit/fitbit.go | 16 + .../x/oauth2/foursquare/foursquare.go | 16 + vendor/golang.org/x/oauth2/github/github.go | 16 + vendor/golang.org/x/oauth2/gitlab/gitlab.go | 16 + vendor/golang.org/x/oauth2/go.mod | 10 + vendor/golang.org/x/oauth2/go.sum | 12 + .../golang.org/x/oauth2/google/appengine.go | 38 + .../x/oauth2/google/appengine_gen1.go | 77 + .../x/oauth2/google/appengine_gen2_flex.go | 27 + vendor/golang.org/x/oauth2/google/default.go | 155 + vendor/golang.org/x/oauth2/google/doc.go | 40 + .../x/oauth2/google/example_test.go | 162 + vendor/golang.org/x/oauth2/google/google.go | 192 + .../golang.org/x/oauth2/google/google_test.go | 116 + vendor/golang.org/x/oauth2/google/jwt.go | 74 + vendor/golang.org/x/oauth2/google/jwt_test.go | 91 + vendor/golang.org/x/oauth2/google/sdk.go | 201 + vendor/golang.org/x/oauth2/google/sdk_test.go | 107 + .../oauth2/google/testdata/gcloud/credentials | 122 + .../oauth2/google/testdata/gcloud/properties | 2 + vendor/golang.org/x/oauth2/heroku/heroku.go | 16 + vendor/golang.org/x/oauth2/hipchat/hipchat.go | 60 + .../x/oauth2/instagram/instagram.go | 16 + .../x/oauth2/internal/client_appengine.go | 13 + vendor/golang.org/x/oauth2/internal/doc.go | 6 + vendor/golang.org/x/oauth2/internal/oauth2.go | 37 + vendor/golang.org/x/oauth2/internal/token.go | 277 + .../x/oauth2/internal/token_test.go | 111 + .../golang.org/x/oauth2/internal/transport.go | 33 + vendor/golang.org/x/oauth2/jira/jira.go | 167 + vendor/golang.org/x/oauth2/jira/jira_test.go | 185 + vendor/golang.org/x/oauth2/jws/jws.go | 182 + vendor/golang.org/x/oauth2/jws/jws_test.go | 46 + .../golang.org/x/oauth2/jwt/example_test.go | 33 + vendor/golang.org/x/oauth2/jwt/jwt.go | 162 + vendor/golang.org/x/oauth2/jwt/jwt_test.go | 221 + vendor/golang.org/x/oauth2/kakao/kakao.go | 16 + .../golang.org/x/oauth2/linkedin/linkedin.go | 16 + .../x/oauth2/mailchimp/mailchimp.go | 17 + vendor/golang.org/x/oauth2/mailru/mailru.go | 16 + .../x/oauth2/mediamath/mediamath.go | 22 + .../x/oauth2/microsoft/microsoft.go | 31 + .../x/oauth2/nokiahealth/nokiahealth.go | 16 + vendor/golang.org/x/oauth2/oauth2.go | 360 + vendor/golang.org/x/oauth2/oauth2_test.go | 550 + .../x/oauth2/odnoklassniki/odnoklassniki.go | 16 + vendor/golang.org/x/oauth2/paypal/paypal.go | 22 + vendor/golang.org/x/oauth2/slack/slack.go | 16 + vendor/golang.org/x/oauth2/spotify/spotify.go | 16 + .../x/oauth2/stackoverflow/stackoverflow.go | 16 + vendor/golang.org/x/oauth2/token.go | 178 + vendor/golang.org/x/oauth2/token_test.go | 76 + vendor/golang.org/x/oauth2/transport.go | 144 + vendor/golang.org/x/oauth2/transport_test.go | 168 + vendor/golang.org/x/oauth2/twitch/twitch.go | 19 + vendor/golang.org/x/oauth2/uber/uber.go | 16 + vendor/golang.org/x/oauth2/vk/vk.go | 16 + vendor/golang.org/x/oauth2/yahoo/yahoo.go | 17 + vendor/golang.org/x/oauth2/yandex/yandex.go | 16 + vendor/golang.org/x/sys/cpu/cpu.go | 49 + vendor/golang.org/x/sys/cpu/cpu_arm.go | 2 + vendor/golang.org/x/sys/cpu/cpu_arm64.go | 60 + vendor/golang.org/x/sys/cpu/cpu_linux.go | 61 + vendor/golang.org/x/sys/cpu/cpu_mips64x.go | 2 + vendor/golang.org/x/sys/cpu/cpu_mipsx.go | 2 + vendor/golang.org/x/sys/cpu/cpu_ppc64x.go | 23 + vendor/golang.org/x/sys/cpu/cpu_s390x.go | 2 + vendor/golang.org/x/sys/cpu/cpu_test.go | 26 + vendor/golang.org/x/sys/plan9/mksyscall.go | 393 + vendor/golang.org/x/sys/plan9/mksyscall.pl | 319 - .../x/sys/plan9/zsyscall_plan9_386.go | 16 +- .../x/sys/plan9/zsyscall_plan9_amd64.go | 16 +- .../x/sys/plan9/zsyscall_plan9_arm.go | 4 +- vendor/golang.org/x/sys/unix/README.md | 4 +- .../golang.org/x/sys/unix/asm_freebsd_arm64.s | 29 + vendor/golang.org/x/sys/unix/darwin_test.go | 210 + .../x/sys/unix/example_exec_test.go | 19 + ...{example_test.go => example_flock_test.go} | 7 +- vendor/golang.org/x/sys/unix/fcntl.go | 2 +- vendor/golang.org/x/sys/unix/fcntl_darwin.go | 18 + vendor/golang.org/x/sys/unix/linux/Dockerfile | 8 +- vendor/golang.org/x/sys/unix/linux/mkall.go | 27 +- .../golang.org/x/sys/unix/linux/mksysnum.go | 143 + .../golang.org/x/sys/unix/linux/mksysnum.pl | 85 - vendor/golang.org/x/sys/unix/linux/types.go | 24 + vendor/golang.org/x/sys/unix/mkall.sh | 52 +- vendor/golang.org/x/sys/unix/mkasm_darwin.go | 61 + vendor/golang.org/x/sys/unix/mkerrors.sh | 23 +- vendor/golang.org/x/sys/unix/mkpost.go | 6 +- vendor/golang.org/x/sys/unix/mksyscall.go | 37 +- .../x/sys/unix/mksyscall_aix_ppc.go | 404 + .../x/sys/unix/mksyscall_aix_ppc.pl | 384 - vendor/golang.org/x/sys/unix/mksysnum.go | 190 + .../golang.org/x/sys/unix/mksysnum_darwin.pl | 39 - .../x/sys/unix/mksysnum_dragonfly.pl | 50 - .../golang.org/x/sys/unix/mksysnum_freebsd.pl | 50 - .../golang.org/x/sys/unix/mksysnum_netbsd.pl | 58 - .../golang.org/x/sys/unix/mksysnum_openbsd.pl | 50 - vendor/golang.org/x/sys/unix/sendfile_test.go | 98 + vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 25 +- vendor/golang.org/x/sys/unix/syscall_aix.go | 16 +- .../golang.org/x/sys/unix/syscall_darwin.go | 62 +- .../x/sys/unix/syscall_darwin_386.go | 23 +- .../x/sys/unix/syscall_darwin_amd64.go | 23 +- .../x/sys/unix/syscall_darwin_arm.go | 26 +- .../x/sys/unix/syscall_darwin_arm64.go | 26 +- .../x/sys/unix/syscall_darwin_libSystem.go | 31 + .../x/sys/unix/syscall_dragonfly.go | 7 + .../golang.org/x/sys/unix/syscall_freebsd.go | 7 + .../x/sys/unix/syscall_freebsd_arm64.go | 52 + vendor/golang.org/x/sys/unix/syscall_linux.go | 25 +- .../x/sys/unix/syscall_linux_amd64.go | 18 +- .../x/sys/unix/syscall_linux_arm.go | 8 + .../x/sys/unix/syscall_linux_mips64x.go | 9 +- .../x/sys/unix/syscall_linux_test.go | 33 + .../golang.org/x/sys/unix/syscall_netbsd.go | 7 + .../golang.org/x/sys/unix/syscall_openbsd.go | 7 + .../golang.org/x/sys/unix/syscall_solaris.go | 7 + vendor/golang.org/x/sys/unix/syscall_unix.go | 15 - .../x/sys/unix/syscall_unix_test.go | 6 + .../x/sys/unix/zerrors_freebsd_arm64.go | 1794 +++ .../x/sys/unix/zerrors_linux_386.go | 22 +- .../x/sys/unix/zerrors_linux_amd64.go | 22 +- .../x/sys/unix/zerrors_linux_arm.go | 22 +- .../x/sys/unix/zerrors_linux_arm64.go | 22 +- .../x/sys/unix/zerrors_linux_mips.go | 22 +- .../x/sys/unix/zerrors_linux_mips64.go | 22 +- .../x/sys/unix/zerrors_linux_mips64le.go | 22 +- .../x/sys/unix/zerrors_linux_mipsle.go | 22 +- .../x/sys/unix/zerrors_linux_ppc64.go | 24 +- .../x/sys/unix/zerrors_linux_ppc64le.go | 24 +- .../x/sys/unix/zerrors_linux_riscv64.go | 22 +- .../x/sys/unix/zerrors_linux_s390x.go | 22 +- .../x/sys/unix/zerrors_linux_sparc64.go | 4214 +++--- .../golang.org/x/sys/unix/zsyscall_aix_ppc.go | 2 +- .../x/sys/unix/zsyscall_darwin_386.1_11.go | 1810 +++ .../x/sys/unix/zsyscall_darwin_386.go | 1180 +- .../x/sys/unix/zsyscall_darwin_386.s | 284 + .../x/sys/unix/zsyscall_darwin_amd64.1_11.go | 1810 +++ .../x/sys/unix/zsyscall_darwin_amd64.go | 1180 +- .../x/sys/unix/zsyscall_darwin_amd64.s | 284 + .../x/sys/unix/zsyscall_darwin_arm.1_11.go | 1793 +++ .../x/sys/unix/zsyscall_darwin_arm.go | 1158 +- .../x/sys/unix/zsyscall_darwin_arm.s | 282 + .../x/sys/unix/zsyscall_darwin_arm64.1_11.go | 1793 +++ .../x/sys/unix/zsyscall_darwin_arm64.go | 1158 +- .../x/sys/unix/zsyscall_darwin_arm64.s | 282 + .../x/sys/unix/zsyscall_freebsd_arm64.go | 2015 +++ .../x/sys/unix/zsyscall_linux_386.go | 17 + .../x/sys/unix/zsyscall_linux_amd64.go | 34 +- .../x/sys/unix/zsyscall_linux_arm.go | 27 + .../x/sys/unix/zsyscall_linux_arm64.go | 17 + .../x/sys/unix/zsyscall_linux_mips.go | 17 + .../x/sys/unix/zsyscall_linux_mips64.go | 47 +- .../x/sys/unix/zsyscall_linux_mips64le.go | 47 +- .../x/sys/unix/zsyscall_linux_mipsle.go | 17 + .../x/sys/unix/zsyscall_linux_ppc64.go | 17 + .../x/sys/unix/zsyscall_linux_ppc64le.go | 17 + .../x/sys/unix/zsyscall_linux_riscv64.go | 17 + .../x/sys/unix/zsyscall_linux_s390x.go | 17 + .../x/sys/unix/zsyscall_linux_sparc64.go | 17 + .../x/sys/unix/zsysnum_darwin_386.go | 2 +- .../x/sys/unix/zsysnum_darwin_amd64.go | 2 +- .../x/sys/unix/zsysnum_darwin_arm.go | 2 +- .../x/sys/unix/zsysnum_darwin_arm64.go | 2 +- .../x/sys/unix/zsysnum_dragonfly_amd64.go | 176 +- .../x/sys/unix/zsysnum_freebsd_386.go | 452 +- .../x/sys/unix/zsysnum_freebsd_amd64.go | 452 +- .../x/sys/unix/zsysnum_freebsd_arm.go | 452 +- .../x/sys/unix/zsysnum_freebsd_arm64.go | 395 + .../x/sys/unix/zsysnum_linux_386.go | 2 +- .../x/sys/unix/zsysnum_linux_amd64.go | 2 +- .../x/sys/unix/zsysnum_linux_arm.go | 2 +- .../x/sys/unix/zsysnum_linux_arm64.go | 2 +- .../x/sys/unix/zsysnum_linux_mips.go | 2 +- .../x/sys/unix/zsysnum_linux_mips64.go | 2 +- .../x/sys/unix/zsysnum_linux_mips64le.go | 2 +- .../x/sys/unix/zsysnum_linux_mipsle.go | 2 +- .../x/sys/unix/zsysnum_linux_ppc64.go | 2 +- .../x/sys/unix/zsysnum_linux_ppc64le.go | 2 +- .../x/sys/unix/zsysnum_linux_riscv64.go | 2 +- .../x/sys/unix/zsysnum_linux_s390x.go | 2 +- .../x/sys/unix/zsysnum_linux_sparc64.go | 6 +- .../x/sys/unix/zsysnum_netbsd_386.go | 4 +- .../x/sys/unix/zsysnum_netbsd_amd64.go | 4 +- .../x/sys/unix/zsysnum_netbsd_arm.go | 4 +- .../x/sys/unix/zsysnum_openbsd_386.go | 216 +- .../x/sys/unix/zsysnum_openbsd_amd64.go | 216 +- .../x/sys/unix/zsysnum_openbsd_arm.go | 216 +- .../x/sys/unix/ztypes_freebsd_arm64.go | 602 + .../golang.org/x/sys/unix/ztypes_linux_386.go | 31 +- .../x/sys/unix/ztypes_linux_amd64.go | 38 +- .../golang.org/x/sys/unix/ztypes_linux_arm.go | 32 +- .../x/sys/unix/ztypes_linux_arm64.go | 38 +- .../x/sys/unix/ztypes_linux_mips.go | 29 +- .../x/sys/unix/ztypes_linux_mips64.go | 38 +- .../x/sys/unix/ztypes_linux_mips64le.go | 38 +- .../x/sys/unix/ztypes_linux_mipsle.go | 29 +- .../x/sys/unix/ztypes_linux_ppc64.go | 38 +- .../x/sys/unix/ztypes_linux_ppc64le.go | 38 +- .../x/sys/unix/ztypes_linux_riscv64.go | 38 +- .../x/sys/unix/ztypes_linux_s390x.go | 43 +- .../x/sys/unix/ztypes_linux_sparc64.go | 1509 ++- .../x/sys/unix/ztypes_openbsd_arm.go | 102 +- .../golang.org/x/sys/windows/svc/svc_test.go | 8 +- .../x/sys/windows/syscall_windows_test.go | 29 +- .../google.golang.org/appengine/.travis.yml | 20 + .../appengine/CONTRIBUTING.md | 90 + vendor/google.golang.org/appengine/LICENSE | 202 + vendor/google.golang.org/appengine/README.md | 73 + .../google.golang.org/appengine/aetest/doc.go | 42 + .../appengine/aetest/instance.go | 61 + .../appengine/aetest/instance_classic.go | 21 + .../appengine/aetest/instance_test.go | 119 + .../appengine/aetest/instance_vm.go | 287 + .../appengine/aetest/user.go | 36 + .../google.golang.org/appengine/appengine.go | 137 + .../appengine/appengine_test.go | 49 + .../appengine/appengine_vm.go | 20 + .../appengine/blobstore/blobstore.go | 306 + .../appengine/blobstore/blobstore_test.go | 289 + .../appengine/blobstore/read.go | 160 + .../appengine/capability/capability.go | 52 + .../appengine/channel/channel.go | 87 + .../appengine/channel/channel_test.go | 21 + .../appengine/cloudsql/cloudsql.go | 62 + .../appengine/cloudsql/cloudsql_classic.go | 17 + .../appengine/cloudsql/cloudsql_vm.go | 16 + .../appengine/cmd/aebundler/aebundler.go | 342 + .../appengine/cmd/aedeploy/aedeploy.go | 72 + .../appengine/cmd/aefix/ae.go | 185 + .../appengine/cmd/aefix/ae_test.go | 144 + .../appengine/cmd/aefix/fix.go | 848 ++ .../appengine/cmd/aefix/main.go | 258 + .../appengine/cmd/aefix/main_test.go | 129 + .../appengine/cmd/aefix/typecheck.go | 673 + .../appengine/datastore/datastore.go | 407 + .../appengine/datastore/datastore_test.go | 1750 +++ .../appengine/datastore/doc.go | 361 + .../appengine/datastore/key.go | 396 + .../appengine/datastore/key_test.go | 204 + .../appengine/datastore/load.go | 429 + .../appengine/datastore/load_test.go | 656 + .../appengine/datastore/metadata.go | 78 + .../appengine/datastore/prop.go | 330 + .../appengine/datastore/prop_test.go | 672 + .../appengine/datastore/query.go | 757 ++ .../appengine/datastore/query_test.go | 584 + .../appengine/datastore/save.go | 333 + .../appengine/datastore/time_test.go | 65 + .../appengine/datastore/transaction.go | 96 + .../appengine/delay/delay.go | 360 + .../appengine/delay/delay_test.go | 541 + .../appengine/demos/guestbook/app.yaml | 14 + .../appengine/demos/guestbook/favicon.ico | Bin 0 -> 1150 bytes .../appengine/demos/guestbook/guestbook.go | 109 + .../appengine/demos/guestbook/index.yaml | 7 + .../demos/guestbook/templates/guestbook.html | 26 + .../appengine/demos/helloworld/app.yaml | 10 + .../appengine/demos/helloworld/favicon.ico | Bin 0 -> 1150 bytes .../appengine/demos/helloworld/helloworld.go | 50 + vendor/google.golang.org/appengine/errors.go | 46 + .../google.golang.org/appengine/file/file.go | 28 + vendor/google.golang.org/appengine/go.mod | 7 + vendor/google.golang.org/appengine/go.sum | 6 + .../google.golang.org/appengine/identity.go | 142 + .../appengine/image/image.go | 67 + .../appengine/internal/aetesting/fake.go | 81 + .../appengine/internal/api.go | 671 + .../appengine/internal/api_classic.go | 169 + .../appengine/internal/api_common.go | 123 + .../appengine/internal/api_race_test.go | 9 + .../appengine/internal/api_test.go | 500 + .../appengine/internal/app_id.go | 28 + .../appengine/internal/app_id_test.go | 34 + .../app_identity/app_identity_service.pb.go | 611 + .../app_identity/app_identity_service.proto | 64 + .../appengine/internal/base/api_base.pb.go | 308 + .../appengine/internal/base/api_base.proto | 33 + .../blobstore/blobstore_service.pb.go | 666 + .../blobstore/blobstore_service.proto | 71 + .../capability/capability_service.pb.go | 203 + .../capability/capability_service.proto | 28 + .../internal/channel/channel_service.pb.go | 273 + .../internal/channel/channel_service.proto | 30 + .../internal/datastore/datastore_v3.pb.go | 4367 ++++++ .../internal/datastore/datastore_v3.proto | 551 + .../appengine/internal/identity.go | 55 + .../appengine/internal/identity_classic.go | 61 + .../appengine/internal/identity_flex.go | 11 + .../appengine/internal/identity_vm.go | 134 + .../internal/image/images_service.pb.go | 1375 ++ .../internal/image/images_service.proto | 162 + .../appengine/internal/internal.go | 110 + .../appengine/internal/internal_vm_test.go | 60 + .../appengine/internal/log/log_service.pb.go | 1313 ++ .../appengine/internal/log/log_service.proto | 150 + .../internal/mail/mail_service.pb.go | 355 + .../internal/mail/mail_service.proto | 45 + .../appengine/internal/main.go | 16 + .../appengine/internal/main_common.go | 7 + .../appengine/internal/main_test.go | 18 + .../appengine/internal/main_vm.go | 69 + .../internal/memcache/memcache_service.pb.go | 1562 +++ .../internal/memcache/memcache_service.proto | 165 + .../appengine/internal/metadata.go | 60 + .../internal/modules/modules_service.pb.go | 786 ++ .../internal/modules/modules_service.proto | 80 + .../appengine/internal/net.go | 56 + .../appengine/internal/net_test.go | 58 + .../appengine/internal/regen.sh | 40 + .../internal/remote_api/remote_api.pb.go | 361 + .../internal/remote_api/remote_api.proto | 44 + .../appengine/internal/search/search.pb.go | 3459 +++++ .../appengine/internal/search/search.proto | 394 + .../internal/socket/socket_service.pb.go | 2822 ++++ .../internal/socket/socket_service.proto | 460 + .../internal/system/system_service.pb.go | 362 + .../internal/system/system_service.proto | 49 + .../taskqueue/taskqueue_service.pb.go | 3149 +++++ .../taskqueue/taskqueue_service.proto | 342 + .../appengine/internal/transaction.go | 115 + .../internal/urlfetch/urlfetch_service.pb.go | 527 + .../internal/urlfetch/urlfetch_service.proto | 64 + .../internal/user/user_service.pb.go | 531 + .../internal/user/user_service.proto | 58 + .../internal/xmpp/xmpp_service.pb.go | 726 + .../internal/xmpp/xmpp_service.proto | 83 + vendor/google.golang.org/appengine/log/api.go | 40 + vendor/google.golang.org/appengine/log/log.go | 323 + .../appengine/log/log_test.go | 112 + .../google.golang.org/appengine/mail/mail.go | 123 + .../appengine/mail/mail_test.go | 65 + .../appengine/memcache/memcache.go | 526 + .../appengine/memcache/memcache_test.go | 263 + .../appengine/module/module.go | 113 + .../appengine/module/module_test.go | 124 + .../google.golang.org/appengine/namespace.go | 25 + .../appengine/namespace_test.go | 39 + .../appengine/remote_api/client.go | 194 + .../appengine/remote_api/client_test.go | 43 + .../appengine/remote_api/remote_api.go | 152 + .../appengine/runtime/runtime.go | 148 + .../appengine/runtime/runtime_test.go | 101 + .../google.golang.org/appengine/search/doc.go | 209 + .../appengine/search/field.go | 82 + .../appengine/search/search.go | 1189 ++ .../appengine/search/search_test.go | 1270 ++ .../appengine/search/struct.go | 251 + .../appengine/search/struct_test.go | 213 + .../google.golang.org/appengine/socket/doc.go | 10 + .../appengine/socket/socket_classic.go | 290 + .../appengine/socket/socket_vm.go | 64 + .../appengine/taskqueue/taskqueue.go | 541 + .../appengine/taskqueue/taskqueue_test.go | 173 + vendor/google.golang.org/appengine/timeout.go | 20 + .../appengine/travis_install.sh | 18 + .../appengine/travis_test.sh | 12 + .../appengine/urlfetch/urlfetch.go | 210 + .../google.golang.org/appengine/user/oauth.go | 52 + .../google.golang.org/appengine/user/user.go | 84 + .../appengine/user/user_classic.go | 44 + .../appengine/user/user_test.go | 99 + .../appengine/user/user_vm.go | 38 + .../google.golang.org/appengine/xmpp/xmpp.go | 253 + .../appengine/xmpp/xmpp_test.go | 173 + vendor/google.golang.org/genproto/.travis.yml | 12 - vendor/google.golang.org/genproto/README.md | 5 +- .../googleads/v0/common/ad_type_infos.pb.go | 1205 ++ .../ads/googleads/v0/common/bidding.pb.go | 725 + .../ads/googleads/v0/common/criteria.pb.go | 2575 ++++ .../criterion_category_availability.pb.go | 257 + .../v0/common/custom_parameter.pb.go | 99 + .../ads/googleads/v0/common/dates.pb.go | 98 + .../explorer_auto_optimizer_setting.pb.go | 92 + .../ads/googleads/v0/common/feed_common.pb.go | 100 + .../googleads/v0/common/frequency_cap.pb.go | 181 + .../v0/common/keyword_plan_common.pb.go | 105 + .../v0/common/matching_function.pb.go | 106 + .../ads/googleads/v0/common/metrics.pb.go | 707 + .../ads/googleads/v0/common/policy.pb.go | 1098 ++ .../v0/common/real_time_bidding_setting.pb.go | 90 + .../ads/googleads/v0/common/tag_snippet.pb.go | 128 + .../ads/googleads/v0/common/user_lists.pb.go | 172 + .../ads/googleads/v0/common/value.pb.go | 277 + .../googleads/v0/enums/access_reason.pb.go | 128 + .../account_budget_proposal_status.pb.go | 133 + .../enums/account_budget_proposal_type.pb.go | 124 + .../v0/enums/account_budget_status.pb.go | 119 + .../ad_customizer_placeholder_field.pb.go | 124 + .../v0/enums/ad_group_ad_rotation_mode.pb.go | 118 + .../v0/enums/ad_group_ad_status.pb.go | 121 + .../v0/enums/ad_group_criterion_status.pb.go | 121 + .../googleads/v0/enums/ad_group_status.pb.go | 120 + .../googleads/v0/enums/ad_group_type.pb.go | 158 + .../googleads/v0/enums/ad_network_type.pb.go | 133 + .../ad_serving_optimization_status.pb.go | 135 + .../ads/googleads/v0/enums/ad_type.pb.go | 164 + .../enums/advertising_channel_sub_type.pb.go | 145 + .../v0/enums/advertising_channel_type.pb.go | 130 + ...iate_location_feed_relationship_type.pb.go | 115 + .../googleads/v0/enums/age_range_type.pb.go | 138 + .../v0/enums/app_placeholder_field.pb.go | 150 + .../v0/enums/attribution_model.pb.go | 150 + .../v0/enums/bid_modifier_source.pb.go | 115 + .../googleads/v0/enums/bidding_source.pb.go | 120 + .../v0/enums/bidding_strategy_type.pb.go | 176 + .../v0/enums/billing_setup_status.pb.go | 126 + .../v0/enums/budget_delivery_method.pb.go | 118 + .../googleads/v0/enums/budget_status.pb.go | 113 + .../call_conversion_reporting_state.pb.go | 125 + .../v0/enums/call_placeholder_field.pb.go | 137 + .../v0/enums/callout_placeholder_field.pb.go | 110 + .../v0/enums/campaign_group_status.pb.go | 114 + .../v0/enums/campaign_serving_status.pb.go | 130 + .../v0/enums/campaign_shared_set_status.pb.go | 115 + .../googleads/v0/enums/campaign_status.pb.go | 118 + .../v0/enums/change_status_operation.pb.go | 120 + .../enums/change_status_resource_type.pb.go | 131 + .../v0/enums/content_label_type.pb.go | 177 + .../v0/enums/conversion_action_category.pb.go | 135 + .../conversion_action_counting_type.pb.go | 118 + .../v0/enums/conversion_action_status.pb.go | 120 + .../v0/enums/conversion_action_type.pb.go | 149 + ...n_category_channel_availability_mode.pb.go | 131 + ...on_category_locale_availability_mode.pb.go | 136 + .../googleads/v0/enums/criterion_type.pb.go | 203 + .../v0/enums/custom_placeholder_field.pb.go | 225 + .../customer_match_upload_key_type.pb.go | 123 + .../v0/enums/data_driven_model_status.pb.go | 131 + .../ads/googleads/v0/enums/day_of_week.pb.go | 136 + .../ads/googleads/v0/enums/device.pb.go | 118 + .../v0/enums/display_ad_format_setting.pb.go | 121 + .../enums/education_placeholder_field.pb.go | 203 + .../v0/enums/feed_attribute_type.pb.go | 165 + .../googleads/v0/enums/feed_item_status.pb.go | 114 + .../googleads/v0/enums/feed_link_status.pb.go | 114 + .../enums/feed_mapping_criterion_type.pb.go | 117 + .../v0/enums/feed_mapping_status.pb.go | 114 + .../ads/googleads/v0/enums/feed_origin.pb.go | 116 + .../ads/googleads/v0/enums/feed_status.pb.go | 113 + .../v0/enums/flight_placeholder_field.pb.go | 209 + .../v0/enums/frequency_cap_event_type.pb.go | 115 + .../v0/enums/frequency_cap_level.pb.go | 120 + .../v0/enums/frequency_cap_time_unit.pb.go | 119 + .../ads/googleads/v0/enums/gender_type.pb.go | 118 + .../v0/enums/geo_target_constant_status.pb.go | 117 + .../v0/enums/geo_targeting_restriction.pb.go | 113 + .../v0/enums/google_ads_field_category.pb.go | 129 + .../v0/enums/google_ads_field_data_type.pb.go | 175 + .../v0/enums/hotel_date_selection_type.pb.go | 116 + .../v0/enums/hotel_placeholder_field.pb.go | 220 + .../v0/enums/income_range_type.pb.go | 139 + .../googleads/v0/enums/interaction_type.pb.go | 109 + .../v0/enums/job_placeholder_field.pb.go | 206 + .../v0/enums/keyword_match_type.pb.go | 119 + .../keyword_plan_competition_level.pb.go | 124 + .../keyword_plan_forecast_interval.pb.go | 123 + .../v0/enums/keyword_plan_network.pb.go | 115 + .../listing_custom_attribute_index.pb.go | 129 + .../v0/enums/listing_group_type.pb.go | 116 + .../v0/enums/local_placeholder_field.pb.go | 213 + .../v0/enums/manager_link_status.pb.go | 130 + .../ads/googleads/v0/enums/media_type.pb.go | 134 + .../v0/enums/message_placeholder_field.pb.go | 132 + .../ads/googleads/v0/enums/mime_type.pb.go | 162 + .../googleads/v0/enums/minute_of_hour.pb.go | 123 + .../googleads/v0/enums/month_of_year.pb.go | 159 + .../page_one_promoted_strategy_goal.pb.go | 117 + .../v0/enums/parental_status_type.pb.go | 120 + .../googleads/v0/enums/placeholder_type.pb.go | 194 + .../v0/enums/policy_approval_status.pb.go | 130 + .../v0/enums/policy_review_status.pb.go | 123 + .../v0/enums/policy_topic_entry_type.pb.go | 133 + ...idence_destination_mismatch_url_type.pb.go | 138 + .../v0/enums/preferred_content_type.pb.go | 111 + .../v0/enums/price_placeholder_field.pb.go | 382 + .../googleads/v0/enums/product_channel.pb.go | 114 + .../enums/product_channel_exclusivity.pb.go | 117 + .../v0/enums/product_condition.pb.go | 119 + .../v0/enums/product_type_level.pb.go | 127 + .../enums/promotion_placeholder_field.pb.go | 182 + .../v0/enums/proximity_radius_units.pb.go | 115 + .../v0/enums/quality_score_bucket.pb.go | 119 + .../enums/real_estate_placeholder_field.pb.go | 208 + .../v0/enums/recommendation_type.pb.go | 154 + .../v0/enums/search_term_match_type.pb.go | 128 + .../enums/search_term_targeting_status.pb.go | 126 + .../v0/enums/shared_set_status.pb.go | 114 + .../googleads/v0/enums/shared_set_type.pb.go | 115 + .../v0/enums/sitelink_placeholder_field.pb.go | 143 + .../ads/googleads/v0/enums/slot.pb.go | 137 + .../v0/enums/spending_limit_type.pb.go | 111 + ...structured_snippet_placeholder_field.pb.go | 122 + ...arget_cpa_opt_in_recommendation_goal.pb.go | 127 + .../v0/enums/targeting_dimension.pb.go | 149 + .../ads/googleads/v0/enums/time_type.pb.go | 114 + .../v0/enums/tracking_code_page_format.pb.go | 117 + .../v0/enums/tracking_code_type.pb.go | 123 + .../v0/enums/travel_placeholder_field.pb.go | 224 + .../enums/user_interest_taxonomy_type.pb.go | 131 + .../v0/enums/user_list_access_status.pb.go | 114 + .../v0/enums/user_list_closing_reason.pb.go | 111 + .../user_list_crm_data_source_type.pb.go | 122 + .../enums/user_list_membership_status.pb.go | 117 + .../v0/enums/user_list_size_range.pb.go | 183 + .../googleads/v0/enums/user_list_type.pb.go | 135 + .../account_budget_proposal_error.pb.go | 222 + .../v0/errors/ad_customizer_error.pb.go | 131 + .../ads/googleads/v0/errors/ad_error.pb.go | 754 ++ .../v0/errors/ad_group_ad_error.pb.go | 149 + .../errors/ad_group_bid_modifier_error.pb.go | 119 + .../v0/errors/ad_group_criterion_error.pb.go | 306 + .../googleads/v0/errors/ad_group_error.pb.go | 173 + .../v0/errors/ad_group_feed_error.pb.go | 145 + .../v0/errors/ad_sharing_error.pb.go | 123 + .../ads/googleads/v0/errors/adx_error.pb.go | 109 + .../v0/errors/authentication_error.pb.go | 199 + .../v0/errors/authorization_error.pb.go | 144 + .../googleads/v0/errors/bidding_error.pb.go | 215 + .../v0/errors/bidding_strategy_error.pb.go | 128 + .../v0/errors/billing_setup_error.pb.go | 195 + .../v0/errors/campaign_budget_error.pb.go | 188 + .../v0/errors/campaign_criterion_error.pb.go | 168 + .../googleads/v0/errors/campaign_error.pb.go | 304 + .../v0/errors/campaign_feed_error.pb.go | 138 + .../v0/errors/campaign_group_error.pb.go | 123 + .../v0/errors/campaign_shared_set_error.pb.go | 111 + .../v0/errors/change_status_error.pb.go | 110 + .../v0/errors/collection_size_error.pb.go | 114 + .../googleads/v0/errors/context_error.pb.go | 116 + .../v0/errors/conversion_action_error.pb.go | 154 + .../googleads/v0/errors/criterion_error.pb.go | 544 + .../errors/customer_client_link_error.pb.go | 144 + .../googleads/v0/errors/customer_error.pb.go | 118 + .../v0/errors/customer_feed_error.pb.go | 144 + .../errors/customer_manager_link_error.pb.go | 153 + .../googleads/v0/errors/database_error.pb.go | 111 + .../ads/googleads/v0/errors/date_error.pb.go | 150 + .../v0/errors/date_range_error.pb.go | 132 + .../googleads/v0/errors/distinct_error.pb.go | 114 + .../ads/googleads/v0/errors/enum_error.pb.go | 110 + .../ads/googleads/v0/errors/errors.pb.go | 2962 +++++ .../feed_attribute_reference_error.pb.go | 122 + .../ads/googleads/v0/errors/feed_error.pb.go | 202 + .../googleads/v0/errors/feed_item_error.pb.go | 153 + .../v0/errors/feed_mapping_error.pb.go | 191 + .../ads/googleads/v0/errors/field_error.pb.go | 135 + .../v0/errors/field_mask_error.pb.go | 127 + .../googleads/v0/errors/function_error.pb.go | 186 + .../v0/errors/function_parsing_error.pb.go | 162 + ...geo_target_constant_suggestion_error.pb.go | 129 + .../googleads/v0/errors/header_error.pb.go | 115 + .../ads/googleads/v0/errors/id_error.pb.go | 109 + .../ads/googleads/v0/errors/image_error.pb.go | 285 + .../googleads/v0/errors/internal_error.pb.go | 122 + .../errors/keyword_plan_ad_group_error.pb.go | 119 + .../errors/keyword_plan_campaign_error.pb.go | 133 + .../v0/errors/keyword_plan_error.pb.go | 178 + .../v0/errors/keyword_plan_idea_error.pb.go | 116 + .../errors/keyword_plan_keyword_error.pb.go | 138 + .../keyword_plan_negative_keyword_error.pb.go | 108 + .../v0/errors/list_operation_error.pb.go | 116 + .../v0/errors/media_bundle_error.pb.go | 215 + .../v0/errors/media_file_error.pb.go | 221 + .../v0/errors/multiplier_error.pb.go | 169 + .../googleads/v0/errors/mutate_error.pb.go | 127 + .../errors/new_resource_creation_error.pb.go | 123 + .../googleads/v0/errors/not_empty_error.pb.go | 109 + .../ads/googleads/v0/errors/null_error.pb.go | 109 + .../operation_access_denied_error.pb.go | 155 + .../googleads/v0/errors/operator_error.pb.go | 110 + .../v0/errors/policy_finding_error.pb.go | 116 + .../ads/googleads/v0/errors/query_error.pb.go | 353 + .../ads/googleads/v0/errors/quota_error.pb.go | 120 + .../ads/googleads/v0/errors/range_error.pb.go | 113 + .../v0/errors/recommendation_error.pb.go | 174 + .../v0/errors/region_code_error.pb.go | 110 + .../googleads/v0/errors/request_error.pb.go | 188 + .../errors/resource_access_denied_error.pb.go | 111 + .../resource_count_limit_exceeded_error.pb.go | 167 + .../googleads/v0/errors/setting_error.pb.go | 208 + .../v0/errors/shared_criterion_error.pb.go | 112 + .../v0/errors/shared_set_error.pb.go | 126 + .../v0/errors/string_format_error.pb.go | 115 + .../v0/errors/string_length_error.pb.go | 114 + .../googleads/v0/errors/url_field_error.pb.go | 359 + .../googleads/v0/errors/user_list_error.pb.go | 227 + .../v0/resources/account_budget.pb.go | 1051 ++ .../resources/account_budget_proposal.pb.go | 710 + .../ads/googleads/v0/resources/ad.pb.go | 635 + .../ads/googleads/v0/resources/ad_group.pb.go | 295 + .../googleads/v0/resources/ad_group_ad.pb.go | 206 + .../v0/resources/ad_group_audience_view.pb.go | 92 + .../v0/resources/ad_group_bid_modifier.pb.go | 420 + .../v0/resources/ad_group_criterion.pb.go | 960 ++ .../v0/resources/ad_group_feed.pb.go | 155 + .../v0/resources/age_range_view.pb.go | 89 + .../v0/resources/bidding_strategy.pb.go | 397 + .../v0/resources/billing_setup.pb.go | 460 + .../ads/googleads/v0/resources/campaign.pb.go | 1039 ++ .../v0/resources/campaign_audience_view.pb.go | 94 + .../v0/resources/campaign_bid_modifier.pb.go | 215 + .../v0/resources/campaign_budget.pb.go | 217 + .../v0/resources/campaign_criterion.pb.go | 895 ++ .../v0/resources/campaign_feed.pb.go | 155 + .../v0/resources/campaign_group.pb.go | 133 + .../v0/resources/campaign_shared_set.pb.go | 131 + .../v0/resources/carrier_constant.pb.go | 124 + .../v0/resources/change_status.pb.go | 181 + .../v0/resources/conversion_action.pb.go | 401 + .../ads/googleads/v0/resources/customer.pb.go | 258 + .../v0/resources/customer_client.pb.go | 123 + .../v0/resources/customer_client_link.pb.go | 139 + .../v0/resources/customer_feed.pb.go | 145 + .../v0/resources/customer_manager_link.pb.go | 127 + .../v0/resources/display_keyword_view.pb.go | 89 + .../ads/googleads/v0/resources/feed.pb.go | 679 + .../googleads/v0/resources/feed_item.pb.go | 343 + .../googleads/v0/resources/feed_mapping.pb.go | 867 ++ .../googleads/v0/resources/gender_view.pb.go | 88 + .../v0/resources/geo_target_constant.pb.go | 146 + .../v0/resources/google_ads_field.pb.go | 246 + .../v0/resources/hotel_group_view.pb.go | 89 + .../v0/resources/hotel_performance_view.pb.go | 89 + .../googleads/v0/resources/keyword_plan.pb.go | 280 + .../v0/resources/keyword_plan_ad_group.pb.go | 139 + .../v0/resources/keyword_plan_campaign.pb.go | 222 + .../v0/resources/keyword_plan_keyword.pb.go | 149 + .../keyword_plan_negative_keyword.pb.go | 138 + .../googleads/v0/resources/keyword_view.pb.go | 88 + .../v0/resources/language_constant.pb.go | 123 + .../v0/resources/managed_placement_view.pb.go | 90 + .../googleads/v0/resources/media_file.pb.go | 363 + .../v0/resources/parental_status_view.pb.go | 89 + .../v0/resources/payments_account.pb.go | 148 + .../v0/resources/product_group_view.pb.go | 89 + .../v0/resources/recommendation.pb.go | 1267 ++ .../v0/resources/search_term_view.pb.go | 129 + .../v0/resources/shared_criterion.pb.go | 323 + .../googleads/v0/resources/shared_set.pb.go | 163 + .../v0/resources/topic_constant.pb.go | 132 + .../googleads/v0/resources/topic_view.pb.go | 88 + .../v0/resources/user_interest.pb.go | 162 + .../googleads/v0/resources/user_list.pb.go | 438 + .../ads/googleads/v0/resources/video.pb.go | 132 + .../account_budget_proposal_service.pb.go | 521 + .../v0/services/account_budget_service.pb.go | 175 + .../v0/services/ad_group_ad_service.pb.go | 558 + .../ad_group_audience_view_service.pb.go | 175 + .../ad_group_bid_modifier_service.pb.go | 547 + .../services/ad_group_criterion_service.pb.go | 545 + .../v0/services/ad_group_feed_service.pb.go | 547 + .../v0/services/ad_group_service.pb.go | 544 + .../v0/services/age_range_view_service.pb.go | 174 + .../services/bidding_strategy_service.pb.go | 547 + .../v0/services/billing_setup_service.pb.go | 500 + .../campaign_audience_view_service.pb.go | 175 + .../campaign_bid_modifier_service.pb.go | 548 + .../v0/services/campaign_budget_service.pb.go | 547 + .../services/campaign_criterion_service.pb.go | 545 + .../v0/services/campaign_feed_service.pb.go | 547 + .../v0/services/campaign_group_service.pb.go | 547 + .../v0/services/campaign_service.pb.go | 544 + .../campaign_shared_set_service.pb.go | 498 + .../services/carrier_constant_service.pb.go | 173 + .../v0/services/change_status_service.pb.go | 174 + .../services/conversion_action_service.pb.go | 547 + .../customer_client_link_service.pb.go | 174 + .../v0/services/customer_client_service.pb.go | 174 + .../v0/services/customer_feed_service.pb.go | 546 + .../customer_manager_link_service.pb.go | 174 + .../v0/services/customer_service.pb.go | 653 + .../display_keyword_view_service.pb.go | 175 + .../v0/services/feed_item_service.pb.go | 546 + .../v0/services/feed_mapping_service.pb.go | 500 + .../googleads/v0/services/feed_service.pb.go | 546 + .../v0/services/gender_view_service.pb.go | 174 + .../geo_target_constant_service.pb.go | 615 + .../services/google_ads_field_service.pb.go | 344 + .../v0/services/google_ads_service.pb.go | 2504 ++++ .../services/hotel_group_view_service.pb.go | 174 + .../hotel_performance_view_service.pb.go | 175 + .../keyword_plan_ad_group_service.pb.go | 549 + .../keyword_plan_campaign_service.pb.go | 550 + .../services/keyword_plan_idea_service.pb.go | 604 + .../keyword_plan_keyword_service.pb.go | 548 + ...eyword_plan_negative_keyword_service.pb.go | 559 + .../v0/services/keyword_plan_service.pb.go | 1129 ++ .../v0/services/keyword_view_service.pb.go | 174 + .../services/language_constant_service.pb.go | 173 + .../managed_placement_view_service.pb.go | 175 + .../v0/services/media_file_service.pb.go | 468 + .../parental_status_view_service.pb.go | 175 + .../services/payments_account_service.pb.go | 221 + .../services/product_group_view_service.pb.go | 174 + .../v0/services/recommendation_service.pb.go | 1094 ++ .../services/search_term_view_service.pb.go | 174 + .../services/shared_criterion_service.pb.go | 498 + .../v0/services/shared_set_service.pb.go | 544 + .../v0/services/topic_constant_service.pb.go | 173 + .../v0/services/topic_view_service.pb.go | 174 + .../v0/services/user_interest_service.pb.go | 174 + .../v0/services/user_list_service.pb.go | 544 + .../googleads/v0/services/video_service.pb.go | 173 + .../api/servicecontrol/v1/check_error.pb.go | 77 +- .../automl/v1beta1/annotation_payload.pb.go | 47 +- .../cloud/automl/v1beta1/classification.pb.go | 93 +- .../cloud/automl/v1beta1/data_items.pb.go | 62 +- .../cloud/automl/v1beta1/dataset.pb.go | 64 +- .../cloud/automl/v1beta1/image.pb.go | 55 +- .../googleapis/cloud/automl/v1beta1/io.pb.go | 54 +- .../cloud/automl/v1beta1/model.pb.go | 75 +- .../automl/v1beta1/model_evaluation.pb.go | 59 +- .../cloud/automl/v1beta1/operations.pb.go | 60 +- .../automl/v1beta1/prediction_service.pb.go | 68 +- .../cloud/automl/v1beta1/service.pb.go | 177 +- .../cloud/automl/v1beta1/text.pb.go | 42 +- .../cloud/automl/v1beta1/translation.pb.go | 63 +- .../cloud/dataproc/v1/clusters.pb.go | 310 +- .../cloud/dataproc/v1beta2/clusters.pb.go | 309 +- .../scheduler/v1beta1/cloudscheduler.pb.go | 113 +- .../cloud/securitycenter/v1beta1/asset.pb.go | 14 +- .../securitycenter/v1beta1/finding.pb.go | 14 +- .../v1beta1/securitycenter_service.pb.go | 54 +- .../cloud/securitycenter/v1beta1/source.pb.go | 14 +- .../cloud/speech/v1/cloud_speech.pb.go | 287 +- .../container/v1beta1/cluster_service.pb.go | 4551 ++++++- .../googleapis/firestore/admin/v1/field.pb.go | 213 + .../firestore/admin/v1/firestore_admin.pb.go | 1120 ++ .../googleapis/firestore/admin/v1/index.pb.go | 446 + .../firestore/admin/v1/location.pb.go | 79 + .../firestore/admin/v1/operation.pb.go | 698 + .../admin/v1beta1/firestore_admin.pb.go | 32 +- .../firestore/admin/v1beta1/index.pb.go | 12 +- .../firestore/admin/v1beta1/location.pb.go | 78 + .../firestore/admin/v1beta2/field.pb.go | 8 +- .../admin/v1beta2/firestore_admin.pb.go | 747 +- .../firestore/admin/v1beta2/index.pb.go | 16 +- .../firestore/admin/v1beta2/operation.pb.go | 438 +- .../googleapis/firestore/v1/common.pb.go | 562 + .../googleapis/firestore/v1/document.pb.go | 684 + .../googleapis/firestore/v1/firestore.pb.go | 3721 ++++++ .../googleapis/firestore/v1/query.pb.go | 1016 ++ .../googleapis/firestore/v1/write.pb.go | 973 ++ .../googleapis/firestore/v1beta1/common.pb.go | 14 +- .../firestore/v1beta1/document.pb.go | 12 +- .../firestore/v1beta1/firestore.pb.go | 56 +- .../googleapis/firestore/v1beta1/query.pb.go | 32 +- .../googleapis/firestore/v1beta1/write.pb.go | 231 +- .../googleapis/home/graph/v1/homegraph.pb.go | 38 +- .../iam/credentials/v1/common.pb.go | 97 +- .../iam/credentials/v1/iamcredentials.pb.go | 61 +- .../googleapis/pubsub/v1/pubsub.pb.go | 605 +- .../internal/kokoro/check_incompat_changes.sh | 41 + .../genproto/internal/kokoro/test.sh | 31 + .../genproto/internal/kokoro/trampoline.sh | 24 + .../genproto/internal/kokoro/vet.sh | 37 + vendor/google.golang.org/grpc/.travis.yml | 2 - .../server-reflection-tutorial.md | 1 - vendor/google.golang.org/grpc/README.md | 2 +- vendor/google.golang.org/grpc/balancer.go | 2 +- .../grpc/balancer/balancer.go | 5 +- .../grpc/balancer/base/balancer.go | 8 +- .../grpc/balancer/base/base.go | 12 + .../grpc/balancer/grpclb/grpclb.go | 2 +- .../grpc/balancer/grpclb/grpclb_picker.go | 2 +- .../balancer/grpclb/grpclb_remote_balancer.go | 2 +- .../grpc/balancer/grpclb/grpclb_test.go | 2 +- .../grpc/balancer/roundrobin/roundrobin.go | 4 +- .../balancer/roundrobin/roundrobin_test.go | 2 +- .../grpc/balancer_conn_wrappers.go | 7 +- .../grpc/balancer_switching_test.go | 2 +- .../google.golang.org/grpc/balancer_test.go | 2 +- .../grpc/balancer_v1_wrapper.go | 2 +- .../grpc/benchmark/benchmain/main.go | 2 +- .../grpc/benchmark/benchmark.go | 2 +- .../grpc/benchmark/benchmark16_test.go | 112 - ...{benchmark17_test.go => benchmark_test.go} | 2 - .../grpc/benchmark/client/main.go | 2 +- .../grpc/benchmark/latency/latency.go | 3 +- .../grpc/benchmark/primitives/context_test.go | 3 +- .../benchmark/primitives/primitives_test.go | 2 - .../grpc/benchmark/worker/benchmark_client.go | 2 +- .../grpc/benchmark/worker/main.go | 2 +- vendor/google.golang.org/grpc/call.go | 2 +- vendor/google.golang.org/grpc/call_test.go | 2 +- .../channelz/grpc_channelz_v1/channelz.pb.go | 588 +- .../grpc/channelz/service/func_linux.go | 2 +- .../grpc/channelz/service/func_nonlinux.go | 2 +- .../grpc/channelz/service/service.go | 8 +- .../channelz/service/service_sktopt_test.go | 4 +- .../grpc/channelz/service/service_test.go | 30 +- .../channelz/service/util_sktopt_386_test.go | 2 +- .../service/util_sktopt_amd64_test.go | 2 +- vendor/google.golang.org/grpc/clientconn.go | 194 +- .../grpc/clientconn_state_transition_test.go | 2 +- .../google.golang.org/grpc/clientconn_test.go | 328 +- .../grpc/connectivity/connectivity.go | 3 +- .../grpc/credentials/alts/alts.go | 2 +- .../grpc/credentials/alts/internal/common.go | 2 +- .../alts/internal/handshaker/handshaker.go | 2 +- .../internal/handshaker/handshaker_test.go | 2 +- .../grpc/credentials/alts/utils.go | 2 +- .../grpc/credentials/alts/utils_test.go | 2 +- .../grpc/credentials/credentials.go | 36 +- .../grpc/credentials/credentials_test.go | 2 +- .../grpc/credentials/go16.go | 57 - .../grpc/credentials/go17.go | 59 - .../grpc/credentials/go18.go | 46 - .../grpc/credentials/go19.go | 35 - .../grpc/credentials/google/google.go | 2 +- .../grpc/credentials/internal/syscallconn.go | 61 + .../internal/syscallconn_appengine.go} | 11 +- .../credentials/internal/syscallconn_test.go | 64 + .../grpc/credentials/oauth/oauth.go | 2 +- vendor/google.golang.org/grpc/dialoptions.go | 23 +- .../encoding/proto/proto_benchmark_test.go | 2 - .../helloworld/greeter_client/main.go | 2 +- .../helloworld/greeter_server/main.go | 2 +- .../mock_helloworld/hw_mock_test.go | 2 +- .../grpc/examples/oauth/client/main.go | 2 +- .../grpc/examples/oauth/server/main.go | 2 +- .../examples/route_guide/client/client.go | 2 +- .../mock_routeguide/rg_mock_test.go | 2 +- .../examples/route_guide/server/server.go | 2 +- .../grpc/examples/rpc_errors/client/main.go | 2 +- .../grpc/examples/rpc_errors/server/main.go | 2 +- vendor/google.golang.org/grpc/go.mod | 3 +- vendor/google.golang.org/grpc/go.sum | 6 +- vendor/google.golang.org/grpc/go16.go | 71 - vendor/google.golang.org/grpc/go17.go | 72 - .../google.golang.org/grpc/health/client.go | 107 + .../grpc/health/client_test.go | 57 + .../grpc/health/{health.go => server.go} | 24 +- .../health/{health_test.go => server_test.go} | 5 +- vendor/google.golang.org/grpc/interceptor.go | 2 +- .../grpc/internal/binarylog/binarylog.go | 36 +- .../binarylog/binarylog_end2end_test.go | 1044 ++ .../grpc/internal/binarylog/binarylog_test.go | 8 +- .../internal/binarylog/binarylog_testutil.go | 42 + .../grpc/internal/binarylog/env_config.go | 8 +- .../internal/binarylog/env_config_test.go | 4 +- .../grpc/internal/binarylog/method_logger.go | 10 +- .../internal/binarylog/method_logger_test.go | 4 +- .../grpc/internal/binarylog/sink.go | 110 +- .../grpc/internal/channelz/funcs.go | 12 +- .../grpc/internal/channelz/types_linux.go | 2 +- .../grpc/internal/channelz/types_nonlinux.go | 2 +- .../{util_linux_go19.go => util_linux.go} | 2 +- ..._nonlinux_pre_go19.go => util_nonlinux.go} | 2 +- .../grpc/internal/envconfig/envconfig.go | 38 +- .../grpc/internal/grpcsync/event.go | 18 +- .../grpc/internal/internal.go | 2 +- .../grpc/internal/syscall/syscall_linux.go | 49 +- .../grpc/internal/syscall/syscall_nonlinux.go | 20 +- .../grpc/internal/testutils/pipe_listener.go | 1 + .../grpc/internal/transport/bdp_estimator.go | 7 +- .../grpc/internal/transport/go16.go | 52 - .../grpc/internal/transport/go17.go | 53 - .../grpc/internal/transport/handler_server.go | 4 +- .../internal/transport/handler_server_test.go | 2 +- .../grpc/internal/transport/http2_client.go | 35 +- .../grpc/internal/transport/http2_server.go | 4 +- .../grpc/internal/transport/transport.go | 36 +- .../grpc/internal/transport/transport_test.go | 66 +- .../grpc/interop/alts/client/client.go | 2 +- .../interop/http2/negative_http2_client.go | 2 +- .../grpc/interop/test_utils.go | 2 +- .../grpc/metadata/metadata.go | 3 +- .../grpc/metadata/metadata_test.go | 3 +- .../grpc/naming/dns_resolver.go | 5 +- .../grpc/naming/dns_resolver_test.go | 16 + vendor/google.golang.org/grpc/naming/go17.go | 34 - .../grpc/naming/go17_test.go | 42 - vendor/google.golang.org/grpc/naming/go18.go | 28 - .../grpc/naming/go18_test.go | 41 - vendor/google.golang.org/grpc/peer/peer.go | 2 +- .../google.golang.org/grpc/picker_wrapper.go | 2 +- .../grpc/picker_wrapper_test.go | 2 +- vendor/google.golang.org/grpc/pickfirst.go | 3 +- .../google.golang.org/grpc/pickfirst_test.go | 2 +- vendor/google.golang.org/grpc/proxy.go | 52 +- vendor/google.golang.org/grpc/proxy_test.go | 67 +- .../grpc/reflection/serverreflection_test.go | 2 +- .../grpc/resolver/dns/dns_resolver.go | 34 +- .../resolver/dns/dns_resolver_go19_test.go | 135 - .../grpc/resolver/dns/dns_resolver_test.go | 108 +- .../grpc/resolver/dns/go18_test.go | 27 - .../grpc/resolver/dns/go19.go | 54 - .../grpc/resolver/dns/pre_go19.go | 51 - .../grpc/resolver_conn_wrapper.go | 56 +- vendor/google.golang.org/grpc/rpc_util.go | 52 +- vendor/google.golang.org/grpc/server.go | 136 +- vendor/google.golang.org/grpc/server_test.go | 2 +- .../google.golang.org/grpc/service_config.go | 17 +- .../google.golang.org/grpc/stats/handlers.go | 3 +- vendor/google.golang.org/grpc/stats/stats.go | 3 +- .../grpc/stats/stats_test.go | 4 +- vendor/google.golang.org/grpc/status/go16.go | 42 - vendor/google.golang.org/grpc/status/go17.go | 44 - .../grpc/status/go17_test.go | 44 - .../google.golang.org/grpc/status/status.go | 17 + .../grpc/status/status_test.go | 2 +- vendor/google.golang.org/grpc/stream.go | 500 +- .../grpc/stress/client/main.go | 2 +- .../grpc/stress/metrics_client/main.go | 2 +- vendor/google.golang.org/grpc/tap/tap.go | 2 +- .../grpc/test/balancer_test.go | 4 +- .../grpc/test/channelz_test.go | 82 +- .../google.golang.org/grpc/test/creds_test.go | 2 +- .../grpc/test/end2end_test.go | 100 +- .../google.golang.org/grpc/test/go_vet/vet.go | 10 +- .../grpc/test/gracefulstop_test.go | 2 +- .../grpc/test/healthcheck_test.go | 995 ++ .../google.golang.org/grpc/test/retry_test.go | 2 +- .../grpc/test/tools/tools.go | 2 +- vendor/google.golang.org/grpc/version.go | 2 +- vendor/google.golang.org/grpc/vet.sh | 63 +- vendor/k8s.io/api/Godeps/Godeps.json | 420 +- vendor/k8s.io/api/OWNERS | 56 +- vendor/k8s.io/api/SECURITY_CONTACTS | 17 + vendor/k8s.io/api/admission/v1beta1/BUILD | 43 - vendor/k8s.io/api/admission/v1beta1/doc.go | 1 + .../api/admission/v1beta1/generated.pb.go | 320 +- .../api/admission/v1beta1/generated.proto | 15 +- vendor/k8s.io/api/admission/v1beta1/types.go | 11 + .../v1beta1/types_swagger_doc_generated.go | 18 +- .../v1beta1/zz_generated.deepcopy.go | 44 +- .../api/admissionregistration/v1alpha1/BUILD | 44 - .../api/admissionregistration/v1alpha1/doc.go | 2 +- .../v1alpha1/generated.pb.go | 94 +- .../v1alpha1/generated.proto | 9 +- .../v1alpha1/types_swagger_doc_generated.go | 4 +- .../v1alpha1/zz_generated.deepcopy.go | 2 +- .../api/admissionregistration/v1beta1/BUILD | 44 - .../api/admissionregistration/v1beta1/doc.go | 2 +- .../v1beta1/generated.pb.go | 181 +- .../v1beta1/generated.proto | 62 +- .../admissionregistration/v1beta1/types.go | 45 +- .../v1beta1/types_swagger_doc_generated.go | 13 +- .../v1beta1/zz_generated.deepcopy.go | 47 +- vendor/k8s.io/api/apps/v1/BUILD | 43 - vendor/k8s.io/api/apps/v1/generated.pb.go | 279 +- vendor/k8s.io/api/apps/v1/generated.proto | 14 +- vendor/k8s.io/api/apps/v1/types.go | 25 +- .../apps/v1/types_swagger_doc_generated.go | 10 +- .../api/apps/v1/zz_generated.deepcopy.go | 176 +- vendor/k8s.io/api/apps/v1beta1/BUILD | 47 - .../k8s.io/api/apps/v1beta1/generated.pb.go | 532 +- .../k8s.io/api/apps/v1beta1/generated.proto | 14 +- vendor/k8s.io/api/apps/v1beta1/types.go | 21 +- .../v1beta1/types_swagger_doc_generated.go | 8 +- .../api/apps/v1beta1/zz_generated.deepcopy.go | 134 +- vendor/k8s.io/api/apps/v1beta2/BUILD | 47 - .../k8s.io/api/apps/v1beta2/generated.pb.go | 425 +- .../k8s.io/api/apps/v1beta2/generated.proto | 14 +- vendor/k8s.io/api/apps/v1beta2/types.go | 21 +- .../v1beta2/types_swagger_doc_generated.go | 10 +- .../api/apps/v1beta2/zz_generated.deepcopy.go | 174 +- vendor/k8s.io/api/auditregistration/OWNERS | 6 + .../auditregistration/v1alpha1}/doc.go | 12 +- .../v1alpha1/generated.pb.go | 1685 +++ .../v1alpha1/generated.proto | 158 + .../auditregistration/v1alpha1/register.go | 56 + .../api/auditregistration/v1alpha1/types.go | 194 + .../v1alpha1/types_swagger_doc_generated.go | 110 + .../v1alpha1/zz_generated.deepcopy.go | 224 + vendor/k8s.io/api/authentication/OWNERS | 13 +- vendor/k8s.io/api/authentication/v1/BUILD | 46 - vendor/k8s.io/api/authentication/v1/doc.go | 1 + .../api/authentication/v1/generated.pb.go | 387 +- .../api/authentication/v1/generated.proto | 23 +- vendor/k8s.io/api/authentication/v1/types.go | 18 + .../v1/types_swagger_doc_generated.go | 10 +- .../v1/zz_generated.deepcopy.go | 37 +- .../k8s.io/api/authentication/v1beta1/BUILD | 45 - .../k8s.io/api/authentication/v1beta1/doc.go | 1 + .../authentication/v1beta1/generated.pb.go | 356 +- .../authentication/v1beta1/generated.proto | 23 +- .../api/authentication/v1beta1/types.go | 18 + .../v1beta1/types_swagger_doc_generated.go | 10 +- .../v1beta1/zz_generated.deepcopy.go | 21 +- vendor/k8s.io/api/authorization/OWNERS | 22 +- vendor/k8s.io/api/authorization/v1/BUILD | 45 - vendor/k8s.io/api/authorization/v1/doc.go | 1 + .../api/authorization/v1/generated.pb.go | 315 +- .../api/authorization/v1/generated.proto | 3 +- .../v1/types_swagger_doc_generated.go | 4 +- .../authorization/v1/zz_generated.deepcopy.go | 41 +- vendor/k8s.io/api/authorization/v1beta1/BUILD | 45 - .../k8s.io/api/authorization/v1beta1/doc.go | 1 + .../api/authorization/v1beta1/generated.pb.go | 316 +- .../api/authorization/v1beta1/generated.proto | 3 +- .../v1beta1/types_swagger_doc_generated.go | 4 +- .../v1beta1/zz_generated.deepcopy.go | 41 +- vendor/k8s.io/api/autoscaling/v1/BUILD | 46 - .../k8s.io/api/autoscaling/v1/generated.pb.go | 537 +- .../k8s.io/api/autoscaling/v1/generated.proto | 37 +- vendor/k8s.io/api/autoscaling/v1/types.go | 32 + .../v1/types_swagger_doc_generated.go | 26 +- .../autoscaling/v1/zz_generated.deepcopy.go | 200 +- vendor/k8s.io/api/autoscaling/v2beta1/BUILD | 46 - .../api/autoscaling/v2beta1/generated.pb.go | 521 +- .../api/autoscaling/v2beta1/generated.proto | 38 +- .../k8s.io/api/autoscaling/v2beta1/types.go | 33 + .../v2beta1/types_swagger_doc_generated.go | 26 +- .../v2beta1/zz_generated.deepcopy.go | 182 +- vendor/k8s.io/api/autoscaling/v2beta2/doc.go | 20 + .../api/autoscaling/v2beta2/generated.pb.go | 4419 ++++++ .../api/autoscaling/v2beta2/generated.proto | 369 + .../api/autoscaling/v2beta2/register.go | 50 + .../k8s.io/api/autoscaling/v2beta2/types.go | 393 + .../v2beta2/types_swagger_doc_generated.go | 240 + .../v2beta2/zz_generated.deepcopy.go | 487 + vendor/k8s.io/api/batch/v1/BUILD | 45 - vendor/k8s.io/api/batch/v1/generated.pb.go | 170 +- vendor/k8s.io/api/batch/v1/generated.proto | 15 +- vendor/k8s.io/api/batch/v1/types.go | 12 + .../batch/v1/types_swagger_doc_generated.go | 21 +- .../api/batch/v1/zz_generated.deepcopy.go | 69 +- vendor/k8s.io/api/batch/v1beta1/BUILD | 46 - .../k8s.io/api/batch/v1beta1/generated.pb.go | 119 +- .../k8s.io/api/batch/v1beta1/generated.proto | 3 +- .../v1beta1/types_swagger_doc_generated.go | 4 +- .../batch/v1beta1/zz_generated.deepcopy.go | 40 +- vendor/k8s.io/api/batch/v2alpha1/BUILD | 46 - .../k8s.io/api/batch/v2alpha1/generated.pb.go | 124 +- .../k8s.io/api/batch/v2alpha1/generated.proto | 3 +- .../v2alpha1/types_swagger_doc_generated.go | 4 +- .../batch/v2alpha1/zz_generated.deepcopy.go | 40 +- vendor/k8s.io/api/certificates/v1beta1/BUILD | 45 - vendor/k8s.io/api/certificates/v1beta1/doc.go | 1 + .../api/certificates/v1beta1/generated.pb.go | 273 +- .../api/certificates/v1beta1/generated.proto | 3 +- .../v1beta1/types_swagger_doc_generated.go | 4 +- .../v1beta1/zz_generated.deepcopy.go | 9 +- vendor/k8s.io/api/coordination/v1beta1/doc.go | 22 + .../api/coordination/v1beta1/generated.pb.go | 864 ++ .../api/coordination/v1beta1/generated.proto | 80 + .../api/coordination/v1beta1/register.go | 53 + .../k8s.io/api/coordination/v1beta1/types.go | 74 + .../v1beta1/types_swagger_doc_generated.go | 63 + .../v1beta1/zz_generated.deepcopy.go | 124 + vendor/k8s.io/api/core/v1/BUILD | 64 - .../api/core/v1/annotation_key_constants.go | 40 +- vendor/k8s.io/api/core/v1/generated.pb.go | 11097 +++++++++------- vendor/k8s.io/api/core/v1/generated.proto | 679 +- vendor/k8s.io/api/core/v1/meta.go | 108 - vendor/k8s.io/api/core/v1/register.go | 1 - vendor/k8s.io/api/core/v1/resource.go | 7 - vendor/k8s.io/api/core/v1/types.go | 770 +- .../core/v1/types_swagger_doc_generated.go | 308 +- .../api/core/v1/zz_generated.deepcopy.go | 1818 +-- vendor/k8s.io/api/events/v1beta1/BUILD | 42 - vendor/k8s.io/api/events/v1beta1/doc.go | 1 + .../k8s.io/api/events/v1beta1/generated.pb.go | 125 +- .../k8s.io/api/events/v1beta1/generated.proto | 3 +- .../v1beta1/types_swagger_doc_generated.go | 4 +- .../events/v1beta1/zz_generated.deepcopy.go | 18 +- vendor/k8s.io/api/extensions/v1beta1/BUILD | 49 - .../api/extensions/v1beta1/generated.pb.go | 2203 ++- .../api/extensions/v1beta1/generated.proto | 199 +- vendor/k8s.io/api/extensions/v1beta1/types.go | 242 +- .../v1beta1/types_swagger_doc_generated.go | 120 +- .../v1beta1/zz_generated.deepcopy.go | 339 +- vendor/k8s.io/api/imagepolicy/OWNERS | 9 +- vendor/k8s.io/api/imagepolicy/v1alpha1/BUILD | 45 - vendor/k8s.io/api/imagepolicy/v1alpha1/doc.go | 1 + .../api/imagepolicy/v1alpha1/generated.pb.go | 394 +- .../api/imagepolicy/v1alpha1/generated.proto | 12 +- .../k8s.io/api/imagepolicy/v1alpha1/types.go | 8 +- .../v1alpha1/types_swagger_doc_generated.go | 11 +- .../v1alpha1/zz_generated.deepcopy.go | 11 +- vendor/k8s.io/api/networking/v1/BUILD | 46 - vendor/k8s.io/api/networking/v1/doc.go | 1 + .../k8s.io/api/networking/v1/generated.pb.go | 128 +- .../k8s.io/api/networking/v1/generated.proto | 31 +- vendor/k8s.io/api/networking/v1/types.go | 27 +- .../v1/types_swagger_doc_generated.go | 14 +- .../networking/v1/zz_generated.deepcopy.go | 46 +- vendor/k8s.io/api/policy/OWNERS | 12 +- vendor/k8s.io/api/policy/v1beta1/BUILD | 47 - vendor/k8s.io/api/policy/v1beta1/doc.go | 2 +- .../k8s.io/api/policy/v1beta1/generated.pb.go | 808 +- .../k8s.io/api/policy/v1beta1/generated.proto | 142 +- vendor/k8s.io/api/policy/v1beta1/types.go | 186 +- .../v1beta1/types_swagger_doc_generated.go | 81 +- .../policy/v1beta1/zz_generated.deepcopy.go | 107 +- vendor/k8s.io/api/rbac/OWNERS | 22 +- vendor/k8s.io/api/rbac/v1/BUILD | 44 - vendor/k8s.io/api/rbac/v1/doc.go | 1 + vendor/k8s.io/api/rbac/v1/generated.pb.go | 128 +- vendor/k8s.io/api/rbac/v1/generated.proto | 6 +- vendor/k8s.io/api/rbac/v1/types.go | 6 +- .../rbac/v1/types_swagger_doc_generated.go | 6 +- .../api/rbac/v1/zz_generated.deepcopy.go | 14 +- vendor/k8s.io/api/rbac/v1alpha1/BUILD | 44 - vendor/k8s.io/api/rbac/v1alpha1/doc.go | 1 + .../k8s.io/api/rbac/v1alpha1/generated.pb.go | 128 +- .../k8s.io/api/rbac/v1alpha1/generated.proto | 5 +- vendor/k8s.io/api/rbac/v1alpha1/types.go | 6 +- .../v1alpha1/types_swagger_doc_generated.go | 6 +- .../rbac/v1alpha1/zz_generated.deepcopy.go | 10 +- vendor/k8s.io/api/rbac/v1beta1/BUILD | 44 - vendor/k8s.io/api/rbac/v1beta1/doc.go | 1 + .../k8s.io/api/rbac/v1beta1/generated.pb.go | 129 +- .../k8s.io/api/rbac/v1beta1/generated.proto | 6 +- vendor/k8s.io/api/rbac/v1beta1/types.go | 6 +- .../v1beta1/types_swagger_doc_generated.go | 6 +- .../api/rbac/v1beta1/zz_generated.deepcopy.go | 10 +- vendor/k8s.io/api/roundtrip_test.go | 151 + vendor/k8s.io/api/scheduling/v1alpha1/BUILD | 44 - vendor/k8s.io/api/scheduling/v1alpha1/doc.go | 1 + .../api/scheduling/v1alpha1/generated.pb.go | 78 +- .../api/scheduling/v1alpha1/generated.proto | 3 +- .../v1alpha1/types_swagger_doc_generated.go | 4 +- .../v1alpha1/zz_generated.deepcopy.go | 2 +- vendor/k8s.io/api/scheduling/v1beta1/doc.go | 22 + .../api/scheduling/v1beta1/generated.pb.go | 621 + .../api/scheduling/v1beta1/generated.proto | 67 + .../k8s.io/api/scheduling/v1beta1/register.go | 52 + vendor/k8s.io/api/scheduling/v1beta1/types.go | 66 + .../v1beta1/types_swagger_doc_generated.go | 52 + .../v1beta1/zz_generated.deepcopy.go | 84 + vendor/k8s.io/api/settings/v1alpha1/BUILD | 45 - vendor/k8s.io/api/settings/v1alpha1/doc.go | 1 + .../api/settings/v1alpha1/generated.pb.go | 94 +- .../api/settings/v1alpha1/generated.proto | 3 +- .../v1alpha1/types_swagger_doc_generated.go | 4 +- .../v1alpha1/zz_generated.deepcopy.go | 2 +- vendor/k8s.io/api/storage/v1/BUILD | 43 - vendor/k8s.io/api/storage/v1/doc.go | 1 + vendor/k8s.io/api/storage/v1/generated.pb.go | 1572 ++- vendor/k8s.io/api/storage/v1/generated.proto | 113 +- vendor/k8s.io/api/storage/v1/register.go | 3 + vendor/k8s.io/api/storage/v1/types.go | 117 +- .../storage/v1/types_swagger_doc_generated.go | 70 +- .../api/storage/v1/zz_generated.deepcopy.go | 182 +- vendor/k8s.io/api/storage/v1alpha1/BUILD | 42 - vendor/k8s.io/api/storage/v1alpha1/doc.go | 1 + .../api/storage/v1alpha1/generated.pb.go | 252 +- .../api/storage/v1alpha1/generated.proto | 6 +- .../v1alpha1/types_swagger_doc_generated.go | 6 +- .../storage/v1alpha1/zz_generated.deepcopy.go | 26 +- vendor/k8s.io/api/storage/v1beta1/BUILD | 43 - vendor/k8s.io/api/storage/v1beta1/doc.go | 1 + .../api/storage/v1beta1/generated.pb.go | 471 +- .../api/storage/v1beta1/generated.proto | 18 +- vendor/k8s.io/api/storage/v1beta1/types.go | 10 +- .../v1beta1/types_swagger_doc_generated.go | 9 +- .../storage/v1beta1/zz_generated.deepcopy.go | 55 +- .../.github/PULL_REQUEST_TEMPLATE.md | 5 +- vendor/k8s.io/client-go/.travis.yml | 6 +- vendor/k8s.io/client-go/CHANGELOG.md | 466 +- vendor/k8s.io/client-go/CONTRIBUTING.md | 4 +- vendor/k8s.io/client-go/Godeps/Godeps.json | 326 +- vendor/k8s.io/client-go/INSTALL.md | 6 +- vendor/k8s.io/client-go/OWNERS | 41 +- vendor/k8s.io/client-go/README.md | 35 +- vendor/k8s.io/client-go/SECURITY_CONTACTS | 17 + .../client-go/deprecated-dynamic/bad_debt.go | 79 + .../client-go/deprecated-dynamic/client.go | 131 + .../client_pool.go | 4 +- .../deprecated-dynamic/client_test.go | 623 + vendor/k8s.io/client-go/discovery/BUILD | 75 - .../k8s.io/client-go/discovery/cached/BUILD | 44 - .../client-go/discovery/cached/memcache.go | 26 +- .../client-go/discovery/cached_discovery.go | 295 + .../discovery/cached_discovery_test.go | 169 + .../client-go/discovery/discovery_client.go | 148 +- .../discovery/discovery_client_test.go | 80 +- vendor/k8s.io/client-go/discovery/doc.go | 19 + vendor/k8s.io/client-go/discovery/fake/BUILD | 45 - .../client-go/discovery/fake/discovery.go | 13 + vendor/k8s.io/client-go/discovery/helper.go | 8 +- .../client-go/discovery/round_tripper.go | 62 + .../client-go/discovery/round_tripper_test.go | 95 + .../client-go/discovery/unstructured.go | 95 - vendor/k8s.io/client-go/dynamic/BUILD | 68 - vendor/k8s.io/client-go/dynamic/client.go | 379 - .../k8s.io/client-go/dynamic/client_test.go | 297 +- .../k8s.io/client-go/dynamic/dynamic_util.go | 96 - .../client-go/dynamic/dynamic_util_test.go | 79 - .../dynamic/dynamicinformer/informer.go | 155 + .../dynamic/dynamicinformer/informer_test.go | 160 + .../dynamic/dynamicinformer/interface.go | 34 + .../dynamic/dynamiclister/interface.go | 40 + .../client-go/dynamic/dynamiclister/lister.go | 91 + .../dynamic/dynamiclister/lister_test.go | 257 + .../client-go/dynamic/dynamiclister/shim.go | 87 + vendor/k8s.io/client-go/dynamic/fake/BUILD | 40 - .../k8s.io/client-go/dynamic/fake/client.go | 163 - .../client-go/dynamic/fake/client_pool.go | 48 - .../k8s.io/client-go/dynamic/fake/simple.go | 369 + .../client-go/dynamic/fake/simple_test.go | 197 + vendor/k8s.io/client-go/dynamic/interface.go | 59 + vendor/k8s.io/client-go/dynamic/scheme.go | 98 + vendor/k8s.io/client-go/dynamic/simple.go | 326 + vendor/k8s.io/client-go/examples/README.md | 4 + .../create-update-delete-deployment/BUILD | 40 - .../create-update-delete-deployment/README.md | 2 +- .../create-update-delete-deployment/main.go | 34 +- .../client-go/examples/fake-client/README.md | 14 + .../client-go/examples/fake-client/doc.go | 20 + .../examples/fake-client/main_test.go | 77 + .../in-cluster-client-configuration/BUILD | 37 - .../in-cluster-client-configuration/README.md | 8 +- .../out-of-cluster-client-configuration/BUILD | 37 - .../k8s.io/client-go/examples/workqueue/BUILD | 43 - .../client-go/examples/workqueue/main.go | 16 +- vendor/k8s.io/client-go/informers/BUILD | 91 - .../informers/admissionregistration/BUILD | 34 - .../admissionregistration/interface.go | 2 +- .../admissionregistration/v1alpha1/BUILD | 35 - .../v1alpha1/initializerconfiguration.go | 8 +- .../v1alpha1/interface.go | 2 +- .../admissionregistration/v1beta1/BUILD | 36 - .../v1beta1/interface.go | 2 +- .../v1beta1/mutatingwebhookconfiguration.go | 8 +- .../v1beta1/validatingwebhookconfiguration.go | 8 +- vendor/k8s.io/client-go/informers/apps/BUILD | 36 - .../client-go/informers/apps/interface.go | 2 +- .../k8s.io/client-go/informers/apps/v1/BUILD | 39 - .../informers/apps/v1/controllerrevision.go | 14 +- .../client-go/informers/apps/v1/daemonset.go | 14 +- .../client-go/informers/apps/v1/deployment.go | 14 +- .../client-go/informers/apps/v1/interface.go | 2 +- .../client-go/informers/apps/v1/replicaset.go | 14 +- .../informers/apps/v1/statefulset.go | 14 +- .../client-go/informers/apps/v1beta1/BUILD | 40 - .../apps/v1beta1/controllerrevision.go | 8 +- .../informers/apps/v1beta1/deployment.go | 8 +- .../informers/apps/v1beta1/interface.go | 2 +- .../informers/apps/v1beta1/statefulset.go | 8 +- .../client-go/informers/apps/v1beta2/BUILD | 42 - .../apps/v1beta2/controllerrevision.go | 8 +- .../informers/apps/v1beta2/daemonset.go | 8 +- .../informers/apps/v1beta2/deployment.go | 8 +- .../informers/apps/v1beta2/interface.go | 2 +- .../informers/apps/v1beta2/replicaset.go | 8 +- .../informers/apps/v1beta2/statefulset.go | 8 +- .../informers/auditregistration/interface.go | 46 + .../auditregistration/v1alpha1/auditsink.go | 88 + .../auditregistration/v1alpha1/interface.go | 45 + .../client-go/informers/autoscaling/BUILD | 31 - .../informers/autoscaling/interface.go | 10 +- .../client-go/informers/autoscaling/v1/BUILD | 35 - .../autoscaling/v1/horizontalpodautoscaler.go | 14 +- .../informers/autoscaling/v1/interface.go | 2 +- .../informers/autoscaling/v2beta1/BUILD | 35 - .../v2beta1/horizontalpodautoscaler.go | 8 +- .../autoscaling/v2beta1/interface.go | 2 +- .../v2beta2/horizontalpodautoscaler.go | 89 + .../autoscaling/v2beta2/interface.go | 45 + vendor/k8s.io/client-go/informers/batch/BUILD | 36 - .../client-go/informers/batch/interface.go | 2 +- .../k8s.io/client-go/informers/batch/v1/BUILD | 38 - .../client-go/informers/batch/v1/interface.go | 2 +- .../client-go/informers/batch/v1/job.go | 14 +- .../client-go/informers/batch/v1beta1/BUILD | 38 - .../informers/batch/v1beta1/cronjob.go | 8 +- .../informers/batch/v1beta1/interface.go | 2 +- .../client-go/informers/batch/v2alpha1/BUILD | 38 - .../informers/batch/v2alpha1/cronjob.go | 8 +- .../informers/batch/v2alpha1/interface.go | 2 +- .../client-go/informers/certificates/BUILD | 32 - .../informers/certificates/interface.go | 2 +- .../informers/certificates/v1beta1/BUILD | 38 - .../v1beta1/certificatesigningrequest.go | 8 +- .../certificates/v1beta1/interface.go | 2 +- .../informers/coordination/interface.go | 46 + .../coordination/v1beta1/interface.go | 45 + .../informers/coordination/v1beta1/lease.go | 89 + vendor/k8s.io/client-go/informers/core/BUILD | 32 - .../client-go/informers/core/interface.go | 2 +- .../k8s.io/client-go/informers/core/v1/BUILD | 53 - .../informers/core/v1/componentstatus.go | 14 +- .../client-go/informers/core/v1/configmap.go | 14 +- .../client-go/informers/core/v1/endpoints.go | 14 +- .../client-go/informers/core/v1/event.go | 14 +- .../client-go/informers/core/v1/interface.go | 2 +- .../client-go/informers/core/v1/limitrange.go | 14 +- .../client-go/informers/core/v1/namespace.go | 14 +- .../client-go/informers/core/v1/node.go | 14 +- .../informers/core/v1/persistentvolume.go | 14 +- .../core/v1/persistentvolumeclaim.go | 14 +- .../k8s.io/client-go/informers/core/v1/pod.go | 14 +- .../informers/core/v1/podtemplate.go | 14 +- .../core/v1/replicationcontroller.go | 14 +- .../informers/core/v1/resourcequota.go | 14 +- .../client-go/informers/core/v1/secret.go | 14 +- .../client-go/informers/core/v1/service.go | 14 +- .../informers/core/v1/serviceaccount.go | 14 +- .../k8s.io/client-go/informers/events/BUILD | 29 - .../client-go/informers/events/interface.go | 2 +- .../client-go/informers/events/v1beta1/BUILD | 35 - .../informers/events/v1beta1/event.go | 8 +- .../informers/events/v1beta1/interface.go | 2 +- .../client-go/informers/extensions/BUILD | 32 - .../informers/extensions/interface.go | 2 +- .../informers/extensions/v1beta1/BUILD | 42 - .../informers/extensions/v1beta1/daemonset.go | 8 +- .../extensions/v1beta1/deployment.go | 8 +- .../informers/extensions/v1beta1/ingress.go | 8 +- .../informers/extensions/v1beta1/interface.go | 2 +- .../extensions/v1beta1/podsecuritypolicy.go | 8 +- .../extensions/v1beta1/replicaset.go | 8 +- vendor/k8s.io/client-go/informers/factory.go | 75 +- vendor/k8s.io/client-go/informers/generic.go | 160 +- .../informers/internalinterfaces/BUILD | 31 - .../internalinterfaces/factory_interfaces.go | 4 +- .../client-go/informers/networking/BUILD | 32 - .../informers/networking/interface.go | 2 +- .../client-go/informers/networking/v1/BUILD | 38 - .../informers/networking/v1/interface.go | 2 +- .../informers/networking/v1/networkpolicy.go | 14 +- .../k8s.io/client-go/informers/policy/BUILD | 32 - .../client-go/informers/policy/interface.go | 2 +- .../client-go/informers/policy/v1beta1/BUILD | 39 - .../informers/policy/v1beta1/interface.go | 2 +- .../policy/v1beta1/poddisruptionbudget.go | 8 +- .../policy/v1beta1/podsecuritypolicy.go | 8 +- vendor/k8s.io/client-go/informers/rbac/BUILD | 36 - .../client-go/informers/rbac/interface.go | 2 +- .../k8s.io/client-go/informers/rbac/v1/BUILD | 41 - .../informers/rbac/v1/clusterrole.go | 14 +- .../informers/rbac/v1/clusterrolebinding.go | 14 +- .../client-go/informers/rbac/v1/interface.go | 2 +- .../client-go/informers/rbac/v1/role.go | 14 +- .../informers/rbac/v1/rolebinding.go | 14 +- .../client-go/informers/rbac/v1alpha1/BUILD | 41 - .../informers/rbac/v1alpha1/clusterrole.go | 8 +- .../rbac/v1alpha1/clusterrolebinding.go | 8 +- .../informers/rbac/v1alpha1/interface.go | 2 +- .../client-go/informers/rbac/v1alpha1/role.go | 8 +- .../informers/rbac/v1alpha1/rolebinding.go | 8 +- .../client-go/informers/rbac/v1beta1/BUILD | 41 - .../informers/rbac/v1beta1/clusterrole.go | 8 +- .../rbac/v1beta1/clusterrolebinding.go | 8 +- .../informers/rbac/v1beta1/interface.go | 2 +- .../client-go/informers/rbac/v1beta1/role.go | 8 +- .../informers/rbac/v1beta1/rolebinding.go | 8 +- .../client-go/informers/scheduling/BUILD | 32 - .../informers/scheduling/interface.go | 10 +- .../informers/scheduling/v1alpha1/BUILD | 38 - .../scheduling/v1alpha1/interface.go | 2 +- .../scheduling/v1alpha1/priorityclass.go | 8 +- .../informers/scheduling/v1beta1/interface.go | 45 + .../scheduling/v1beta1/priorityclass.go | 88 + .../k8s.io/client-go/informers/settings/BUILD | 32 - .../client-go/informers/settings/interface.go | 2 +- .../informers/settings/v1alpha1/BUILD | 38 - .../informers/settings/v1alpha1/interface.go | 2 +- .../informers/settings/v1alpha1/podpreset.go | 8 +- .../k8s.io/client-go/informers/storage/BUILD | 36 - .../client-go/informers/storage/interface.go | 2 +- .../client-go/informers/storage/v1/BUILD | 38 - .../informers/storage/v1/interface.go | 9 +- .../informers/storage/v1/storageclass.go | 14 +- .../informers/storage/v1/volumeattachment.go | 88 + .../informers/storage/v1alpha1/BUILD | 35 - .../informers/storage/v1alpha1/interface.go | 2 +- .../storage/v1alpha1/volumeattachment.go | 8 +- .../client-go/informers/storage/v1beta1/BUILD | 39 - .../informers/storage/v1beta1/interface.go | 2 +- .../informers/storage/v1beta1/storageclass.go | 8 +- .../storage/v1beta1/volumeattachment.go | 8 +- vendor/k8s.io/client-go/kubernetes/BUILD | 95 - .../k8s.io/client-go/kubernetes/clientset.go | 82 +- vendor/k8s.io/client-go/kubernetes/doc.go | 2 +- vendor/k8s.io/client-go/kubernetes/fake/BUILD | 124 - .../kubernetes/fake/clientset_generated.go | 55 +- .../k8s.io/client-go/kubernetes/fake/doc.go | 2 +- .../client-go/kubernetes/fake/register.go | 80 +- .../k8s.io/client-go/kubernetes/scheme/BUILD | 62 - .../k8s.io/client-go/kubernetes/scheme/doc.go | 2 +- .../client-go/kubernetes/scheme/register.go | 80 +- .../admissionregistration/v1alpha1/BUILD | 39 - .../v1alpha1/admissionregistration_client.go | 2 +- .../admissionregistration/v1alpha1/doc.go | 2 +- .../admissionregistration/v1alpha1/fake/BUILD | 37 - .../v1alpha1/fake/doc.go | 2 +- .../fake/fake_admissionregistration_client.go | 2 +- .../fake/fake_initializerconfiguration.go | 6 +- .../v1alpha1/generated_expansion.go | 2 +- .../v1alpha1/initializerconfiguration.go | 19 +- .../typed/admissionregistration/v1beta1/BUILD | 40 - .../v1beta1/admissionregistration_client.go | 2 +- .../admissionregistration/v1beta1/doc.go | 2 +- .../admissionregistration/v1beta1/fake/BUILD | 38 - .../admissionregistration/v1beta1/fake/doc.go | 2 +- .../fake/fake_admissionregistration_client.go | 2 +- .../fake/fake_mutatingwebhookconfiguration.go | 6 +- .../fake_validatingwebhookconfiguration.go | 6 +- .../v1beta1/generated_expansion.go | 2 +- .../v1beta1/mutatingwebhookconfiguration.go | 19 +- .../v1beta1/validatingwebhookconfiguration.go | 19 +- .../client-go/kubernetes/typed/apps/v1/BUILD | 43 - .../kubernetes/typed/apps/v1/apps_client.go | 2 +- .../typed/apps/v1/controllerrevision.go | 41 +- .../kubernetes/typed/apps/v1/daemonset.go | 41 +- .../kubernetes/typed/apps/v1/deployment.go | 73 +- .../client-go/kubernetes/typed/apps/v1/doc.go | 2 +- .../kubernetes/typed/apps/v1/fake/BUILD | 41 - .../kubernetes/typed/apps/v1/fake/doc.go | 2 +- .../typed/apps/v1/fake/fake_apps_client.go | 2 +- .../apps/v1/fake/fake_controllerrevision.go | 40 +- .../typed/apps/v1/fake/fake_daemonset.go | 46 +- .../typed/apps/v1/fake/fake_deployment.go | 69 +- .../typed/apps/v1/fake/fake_replicaset.go | 69 +- .../typed/apps/v1/fake/fake_statefulset.go | 69 +- .../typed/apps/v1/generated_expansion.go | 2 +- .../kubernetes/typed/apps/v1/replicaset.go | 73 +- .../kubernetes/typed/apps/v1/statefulset.go | 73 +- .../kubernetes/typed/apps/v1beta1/BUILD | 45 - .../typed/apps/v1beta1/apps_client.go | 7 +- .../typed/apps/v1beta1/controllerrevision.go | 19 +- .../typed/apps/v1beta1/deployment.go | 19 +- .../kubernetes/typed/apps/v1beta1/doc.go | 2 +- .../kubernetes/typed/apps/v1beta1/fake/BUILD | 43 - .../kubernetes/typed/apps/v1beta1/fake/doc.go | 2 +- .../apps/v1beta1/fake/fake_apps_client.go | 6 +- .../v1beta1/fake/fake_controllerrevision.go | 6 +- .../apps/v1beta1/fake/fake_deployment.go | 6 +- .../apps/v1beta1/fake/fake_statefulset.go | 6 +- .../typed/apps/v1beta1/generated_expansion.go | 4 +- .../typed/apps/v1beta1/statefulset.go | 19 +- .../kubernetes/typed/apps/v1beta2/BUILD | 47 - .../typed/apps/v1beta2/apps_client.go | 7 +- .../typed/apps/v1beta2/controllerrevision.go | 19 +- .../typed/apps/v1beta2/daemonset.go | 19 +- .../typed/apps/v1beta2/deployment.go | 19 +- .../kubernetes/typed/apps/v1beta2/doc.go | 2 +- .../kubernetes/typed/apps/v1beta2/fake/BUILD | 45 - .../kubernetes/typed/apps/v1beta2/fake/doc.go | 2 +- .../apps/v1beta2/fake/fake_apps_client.go | 6 +- .../v1beta2/fake/fake_controllerrevision.go | 6 +- .../typed/apps/v1beta2/fake/fake_daemonset.go | 6 +- .../apps/v1beta2/fake/fake_deployment.go | 6 +- .../apps/v1beta2/fake/fake_replicaset.go | 6 +- .../apps/v1beta2/fake/fake_statefulset.go | 6 +- .../typed/apps/v1beta2/generated_expansion.go | 4 +- .../typed/apps/v1beta2/replicaset.go | 19 +- .../typed/apps/v1beta2/statefulset.go | 19 +- .../v1alpha1/auditregistration_client.go | 90 + .../auditregistration/v1alpha1/auditsink.go | 164 + .../typed/auditregistration/v1alpha1/doc.go | 20 + .../v1alpha1/fake/doc.go} | 9 +- .../fake/fake_auditregistration_client.go} | 34 +- .../v1alpha1/fake/fake_auditsink.go | 120 + .../v1alpha1/generated_expansion.go | 21 + .../kubernetes/typed/authentication/OWNERS | 7 + .../kubernetes/typed/authentication/v1/BUILD | 40 - .../v1/authentication_client.go | 2 +- .../kubernetes/typed/authentication/v1/doc.go | 2 +- .../typed/authentication/v1/fake/BUILD | 36 - .../typed/authentication/v1/fake/doc.go | 2 +- .../v1/fake/fake_authentication_client.go | 2 +- .../v1/fake/fake_tokenreview.go | 2 +- .../authentication/v1/generated_expansion.go | 2 +- .../typed/authentication/v1/tokenreview.go | 2 +- .../typed/authentication/v1beta1/BUILD | 40 - .../v1beta1/authentication_client.go | 2 +- .../typed/authentication/v1beta1/doc.go | 2 +- .../typed/authentication/v1beta1/fake/BUILD | 36 - .../typed/authentication/v1beta1/fake/doc.go | 2 +- .../fake/fake_authentication_client.go | 2 +- .../v1beta1/fake/fake_tokenreview.go | 2 +- .../v1beta1/generated_expansion.go | 2 +- .../authentication/v1beta1/tokenreview.go | 2 +- .../kubernetes/typed/authorization/OWNERS | 7 + .../kubernetes/typed/authorization/v1/BUILD | 46 - .../authorization/v1/authorization_client.go | 2 +- .../kubernetes/typed/authorization/v1/doc.go | 2 +- .../typed/authorization/v1/fake/BUILD | 42 - .../typed/authorization/v1/fake/doc.go | 2 +- .../v1/fake/fake_authorization_client.go | 2 +- .../v1/fake/fake_localsubjectaccessreview.go | 2 +- .../v1/fake/fake_selfsubjectaccessreview.go | 2 +- .../v1/fake/fake_selfsubjectrulesreview.go | 2 +- .../v1/fake/fake_subjectaccessreview.go | 2 +- .../fake_subjectaccessreview_expansion.go | 3 + .../authorization/v1/generated_expansion.go | 2 +- .../v1/localsubjectaccessreview.go | 2 +- .../v1/selfsubjectaccessreview.go | 2 +- .../v1/selfsubjectrulesreview.go | 2 +- .../authorization/v1/subjectaccessreview.go | 2 +- .../typed/authorization/v1beta1/BUILD | 46 - .../v1beta1/authorization_client.go | 2 +- .../typed/authorization/v1beta1/doc.go | 2 +- .../typed/authorization/v1beta1/fake/BUILD | 43 - .../typed/authorization/v1beta1/fake/doc.go | 2 +- .../v1beta1/fake/fake_authorization_client.go | 2 +- .../fake/fake_localsubjectaccessreview.go | 2 +- .../fake/fake_selfsubjectaccessreview.go | 2 +- .../fake/fake_selfsubjectrulesreview.go | 2 +- .../v1beta1/fake/fake_subjectaccessreview.go | 2 +- .../v1beta1/generated_expansion.go | 2 +- .../v1beta1/localsubjectaccessreview.go | 2 +- .../v1beta1/selfsubjectaccessreview.go | 2 +- .../v1beta1/selfsubjectrulesreview.go | 2 +- .../v1beta1/subjectaccessreview.go | 2 +- .../kubernetes/typed/autoscaling/v1/BUILD | 42 - .../autoscaling/v1/autoscaling_client.go | 2 +- .../kubernetes/typed/autoscaling/v1/doc.go | 2 +- .../typed/autoscaling/v1/fake/BUILD | 40 - .../typed/autoscaling/v1/fake/doc.go | 2 +- .../v1/fake/fake_autoscaling_client.go | 2 +- .../v1/fake/fake_horizontalpodautoscaler.go | 46 +- .../autoscaling/v1/generated_expansion.go | 2 +- .../autoscaling/v1/horizontalpodautoscaler.go | 41 +- .../typed/autoscaling/v2beta1/BUILD | 39 - .../autoscaling/v2beta1/autoscaling_client.go | 2 +- .../typed/autoscaling/v2beta1/doc.go | 2 +- .../typed/autoscaling/v2beta1/fake/BUILD | 37 - .../typed/autoscaling/v2beta1/fake/doc.go | 2 +- .../v2beta1/fake/fake_autoscaling_client.go | 2 +- .../fake/fake_horizontalpodautoscaler.go | 6 +- .../v2beta1/generated_expansion.go | 2 +- .../v2beta1/horizontalpodautoscaler.go | 19 +- .../autoscaling/v2beta2/autoscaling_client.go | 90 + .../typed/autoscaling/v2beta2/doc.go | 20 + .../v2beta2/fake/doc.go} | 9 +- .../v2beta2/fake/fake_autoscaling_client.go} | 34 +- .../fake/fake_horizontalpodautoscaler.go | 140 + .../v2beta2/generated_expansion.go | 21 + .../v2beta2/horizontalpodautoscaler.go | 191 + .../client-go/kubernetes/typed/batch/v1/BUILD | 42 - .../kubernetes/typed/batch/v1/batch_client.go | 2 +- .../kubernetes/typed/batch/v1/doc.go | 2 +- .../kubernetes/typed/batch/v1/fake/BUILD | 40 - .../kubernetes/typed/batch/v1/fake/doc.go | 2 +- .../typed/batch/v1/fake/fake_batch_client.go | 2 +- .../typed/batch/v1/fake/fake_job.go | 46 +- .../typed/batch/v1/generated_expansion.go | 2 +- .../kubernetes/typed/batch/v1/job.go | 41 +- .../kubernetes/typed/batch/v1beta1/BUILD | 42 - .../typed/batch/v1beta1/batch_client.go | 2 +- .../kubernetes/typed/batch/v1beta1/cronjob.go | 19 +- .../kubernetes/typed/batch/v1beta1/doc.go | 2 +- .../kubernetes/typed/batch/v1beta1/fake/BUILD | 40 - .../typed/batch/v1beta1/fake/doc.go | 2 +- .../batch/v1beta1/fake/fake_batch_client.go | 2 +- .../typed/batch/v1beta1/fake/fake_cronjob.go | 6 +- .../batch/v1beta1/generated_expansion.go | 2 +- .../kubernetes/typed/batch/v2alpha1/BUILD | 42 - .../typed/batch/v2alpha1/batch_client.go | 2 +- .../typed/batch/v2alpha1/cronjob.go | 19 +- .../kubernetes/typed/batch/v2alpha1/doc.go | 2 +- .../typed/batch/v2alpha1/fake/BUILD | 40 - .../typed/batch/v2alpha1/fake/doc.go | 2 +- .../batch/v2alpha1/fake/fake_batch_client.go | 2 +- .../typed/batch/v2alpha1/fake/fake_cronjob.go | 6 +- .../batch/v2alpha1/generated_expansion.go | 2 +- .../typed/certificates/v1beta1/BUILD | 43 - .../v1beta1/certificates_client.go | 2 +- .../v1beta1/certificatesigningrequest.go | 19 +- .../typed/certificates/v1beta1/doc.go | 2 +- .../typed/certificates/v1beta1/fake/BUILD | 41 - .../typed/certificates/v1beta1/fake/doc.go | 2 +- .../v1beta1/fake/fake_certificates_client.go | 2 +- .../fake/fake_certificatesigningrequest.go | 6 +- .../v1beta1/generated_expansion.go | 2 +- .../v1beta1/coordination_client.go | 90 + .../typed/coordination/v1beta1/doc.go | 20 + .../v1beta1/fake/doc.go} | 9 +- .../v1beta1/fake/fake_coordination_client.go | 40 + .../coordination/v1beta1/fake/fake_lease.go | 128 + .../v1beta1/generated_expansion.go | 21 + .../typed/coordination/v1beta1/lease.go | 174 + .../client-go/kubernetes/typed/core/v1/BUILD | 70 - .../typed/core/v1/componentstatus.go | 41 +- .../kubernetes/typed/core/v1/configmap.go | 41 +- .../kubernetes/typed/core/v1/core_client.go | 2 +- .../client-go/kubernetes/typed/core/v1/doc.go | 2 +- .../kubernetes/typed/core/v1/endpoints.go | 41 +- .../kubernetes/typed/core/v1/event.go | 41 +- .../kubernetes/typed/core/v1/fake/BUILD | 66 - .../kubernetes/typed/core/v1/fake/doc.go | 2 +- .../core/v1/fake/fake_componentstatus.go | 40 +- .../typed/core/v1/fake/fake_configmap.go | 40 +- .../typed/core/v1/fake/fake_core_client.go | 2 +- .../typed/core/v1/fake/fake_endpoints.go | 40 +- .../typed/core/v1/fake/fake_event.go | 40 +- .../core/v1/fake/fake_event_expansion.go | 8 +- .../typed/core/v1/fake/fake_limitrange.go | 40 +- .../typed/core/v1/fake/fake_namespace.go | 52 +- .../typed/core/v1/fake/fake_node.go | 46 +- .../typed/core/v1/fake/fake_node_expansion.go | 6 +- .../core/v1/fake/fake_persistentvolume.go | 46 +- .../v1/fake/fake_persistentvolumeclaim.go | 46 +- .../kubernetes/typed/core/v1/fake/fake_pod.go | 46 +- .../typed/core/v1/fake/fake_pod_expansion.go | 15 +- .../typed/core/v1/fake/fake_podtemplate.go | 40 +- .../v1/fake/fake_replicationcontroller.go | 60 +- .../typed/core/v1/fake/fake_resourcequota.go | 46 +- .../typed/core/v1/fake/fake_secret.go | 40 +- .../typed/core/v1/fake/fake_service.go | 52 +- .../typed/core/v1/fake/fake_serviceaccount.go | 40 +- .../typed/core/v1/generated_expansion.go | 2 +- .../kubernetes/typed/core/v1/limitrange.go | 41 +- .../kubernetes/typed/core/v1/namespace.go | 43 +- .../kubernetes/typed/core/v1/node.go | 41 +- .../typed/core/v1/persistentvolume.go | 41 +- .../typed/core/v1/persistentvolumeclaim.go | 41 +- .../client-go/kubernetes/typed/core/v1/pod.go | 41 +- .../kubernetes/typed/core/v1/podtemplate.go | 41 +- .../typed/core/v1/replicationcontroller.go | 57 +- .../kubernetes/typed/core/v1/resourcequota.go | 41 +- .../kubernetes/typed/core/v1/secret.go | 41 +- .../kubernetes/typed/core/v1/service.go | 44 +- .../typed/core/v1/serviceaccount.go | 41 +- .../kubernetes/typed/events/v1beta1/BUILD | 39 - .../kubernetes/typed/events/v1beta1/doc.go | 2 +- .../kubernetes/typed/events/v1beta1/event.go | 19 +- .../typed/events/v1beta1/events_client.go | 2 +- .../typed/events/v1beta1/fake/BUILD | 37 - .../typed/events/v1beta1/fake/doc.go | 2 +- .../typed/events/v1beta1/fake/fake_event.go | 6 +- .../events/v1beta1/fake/fake_events_client.go | 2 +- .../events/v1beta1/generated_expansion.go | 2 +- .../kubernetes/typed/extensions/v1beta1/BUILD | 51 - .../typed/extensions/v1beta1/daemonset.go | 19 +- .../typed/extensions/v1beta1/deployment.go | 19 +- .../typed/extensions/v1beta1/doc.go | 2 +- .../extensions/v1beta1/extensions_client.go | 7 +- .../typed/extensions/v1beta1/fake/BUILD | 47 - .../typed/extensions/v1beta1/fake/doc.go | 2 +- .../extensions/v1beta1/fake/fake_daemonset.go | 6 +- .../v1beta1/fake/fake_deployment.go | 6 +- .../v1beta1/fake/fake_extensions_client.go | 6 +- .../extensions/v1beta1/fake/fake_ingress.go | 6 +- .../v1beta1/fake/fake_podsecuritypolicy.go | 6 +- .../v1beta1/fake/fake_replicaset.go | 6 +- .../v1beta1/fake/fake_scale_expansion.go | 47 - .../extensions/v1beta1/generated_expansion.go | 2 +- .../typed/extensions/v1beta1/ingress.go | 19 +- .../extensions/v1beta1/podsecuritypolicy.go | 19 +- .../typed/extensions/v1beta1/replicaset.go | 19 +- .../typed/extensions/v1beta1/scale.go | 48 - .../extensions/v1beta1/scale_expansion.go | 65 - .../kubernetes/typed/networking/v1/BUILD | 42 - .../kubernetes/typed/networking/v1/doc.go | 2 +- .../kubernetes/typed/networking/v1/fake/BUILD | 40 - .../typed/networking/v1/fake/doc.go | 2 +- .../v1/fake/fake_networking_client.go | 2 +- .../networking/v1/fake/fake_networkpolicy.go | 40 +- .../networking/v1/generated_expansion.go | 2 +- .../typed/networking/v1/networking_client.go | 2 +- .../typed/networking/v1/networkpolicy.go | 41 +- .../kubernetes/typed/policy/v1beta1/BUILD | 45 - .../kubernetes/typed/policy/v1beta1/doc.go | 2 +- .../typed/policy/v1beta1/eviction.go | 2 +- .../typed/policy/v1beta1/fake/BUILD | 43 - .../typed/policy/v1beta1/fake/doc.go | 2 +- .../policy/v1beta1/fake/fake_eviction.go | 2 +- .../v1beta1/fake/fake_eviction_expansion.go | 3 +- .../v1beta1/fake/fake_poddisruptionbudget.go | 6 +- .../v1beta1/fake/fake_podsecuritypolicy.go | 6 +- .../policy/v1beta1/fake/fake_policy_client.go | 2 +- .../policy/v1beta1/generated_expansion.go | 2 +- .../policy/v1beta1/poddisruptionbudget.go | 19 +- .../typed/policy/v1beta1/podsecuritypolicy.go | 19 +- .../typed/policy/v1beta1/policy_client.go | 2 +- .../client-go/kubernetes/typed/rbac/OWNERS | 7 + .../client-go/kubernetes/typed/rbac/v1/BUILD | 45 - .../kubernetes/typed/rbac/v1/clusterrole.go | 41 +- .../typed/rbac/v1/clusterrolebinding.go | 41 +- .../client-go/kubernetes/typed/rbac/v1/doc.go | 2 +- .../kubernetes/typed/rbac/v1/fake/BUILD | 43 - .../kubernetes/typed/rbac/v1/fake/doc.go | 2 +- .../typed/rbac/v1/fake/fake_clusterrole.go | 40 +- .../rbac/v1/fake/fake_clusterrolebinding.go | 40 +- .../typed/rbac/v1/fake/fake_rbac_client.go | 2 +- .../typed/rbac/v1/fake/fake_role.go | 40 +- .../typed/rbac/v1/fake/fake_rolebinding.go | 40 +- .../typed/rbac/v1/generated_expansion.go | 2 +- .../kubernetes/typed/rbac/v1/rbac_client.go | 2 +- .../kubernetes/typed/rbac/v1/role.go | 41 +- .../kubernetes/typed/rbac/v1/rolebinding.go | 41 +- .../kubernetes/typed/rbac/v1alpha1/BUILD | 45 - .../typed/rbac/v1alpha1/clusterrole.go | 19 +- .../typed/rbac/v1alpha1/clusterrolebinding.go | 19 +- .../kubernetes/typed/rbac/v1alpha1/doc.go | 2 +- .../kubernetes/typed/rbac/v1alpha1/fake/BUILD | 43 - .../typed/rbac/v1alpha1/fake/doc.go | 2 +- .../rbac/v1alpha1/fake/fake_clusterrole.go | 6 +- .../v1alpha1/fake/fake_clusterrolebinding.go | 6 +- .../rbac/v1alpha1/fake/fake_rbac_client.go | 2 +- .../typed/rbac/v1alpha1/fake/fake_role.go | 6 +- .../rbac/v1alpha1/fake/fake_rolebinding.go | 6 +- .../rbac/v1alpha1/generated_expansion.go | 2 +- .../typed/rbac/v1alpha1/rbac_client.go | 2 +- .../kubernetes/typed/rbac/v1alpha1/role.go | 19 +- .../typed/rbac/v1alpha1/rolebinding.go | 19 +- .../kubernetes/typed/rbac/v1beta1/BUILD | 45 - .../typed/rbac/v1beta1/clusterrole.go | 19 +- .../typed/rbac/v1beta1/clusterrolebinding.go | 19 +- .../kubernetes/typed/rbac/v1beta1/doc.go | 2 +- .../kubernetes/typed/rbac/v1beta1/fake/BUILD | 43 - .../kubernetes/typed/rbac/v1beta1/fake/doc.go | 2 +- .../rbac/v1beta1/fake/fake_clusterrole.go | 6 +- .../v1beta1/fake/fake_clusterrolebinding.go | 6 +- .../rbac/v1beta1/fake/fake_rbac_client.go | 2 +- .../typed/rbac/v1beta1/fake/fake_role.go | 6 +- .../rbac/v1beta1/fake/fake_rolebinding.go | 6 +- .../typed/rbac/v1beta1/generated_expansion.go | 2 +- .../typed/rbac/v1beta1/rbac_client.go | 2 +- .../kubernetes/typed/rbac/v1beta1/role.go | 19 +- .../typed/rbac/v1beta1/rolebinding.go | 19 +- .../typed/scheduling/v1alpha1/BUILD | 42 - .../typed/scheduling/v1alpha1/doc.go | 2 +- .../typed/scheduling/v1alpha1/fake/BUILD | 40 - .../typed/scheduling/v1alpha1/fake/doc.go | 2 +- .../v1alpha1/fake/fake_priorityclass.go | 6 +- .../v1alpha1/fake/fake_scheduling_client.go | 2 +- .../v1alpha1/generated_expansion.go | 2 +- .../scheduling/v1alpha1/priorityclass.go | 19 +- .../scheduling/v1alpha1/scheduling_client.go | 2 +- .../typed/scheduling/v1beta1/doc.go | 20 + .../typed/scheduling/v1beta1/fake/doc.go | 20 + .../v1beta1/fake/fake_priorityclass.go | 120 + .../v1beta1/fake/fake_scheduling_client.go | 40 + .../scheduling/v1beta1/generated_expansion.go | 21 + .../typed/scheduling/v1beta1/priorityclass.go | 164 + .../scheduling/v1beta1/scheduling_client.go | 90 + .../kubernetes/typed/settings/v1alpha1/BUILD | 42 - .../kubernetes/typed/settings/v1alpha1/doc.go | 2 +- .../typed/settings/v1alpha1/fake/BUILD | 40 - .../typed/settings/v1alpha1/fake/doc.go | 2 +- .../settings/v1alpha1/fake/fake_podpreset.go | 6 +- .../v1alpha1/fake/fake_settings_client.go | 2 +- .../settings/v1alpha1/generated_expansion.go | 2 +- .../typed/settings/v1alpha1/podpreset.go | 19 +- .../settings/v1alpha1/settings_client.go | 2 +- .../kubernetes/typed/storage/v1/BUILD | 42 - .../kubernetes/typed/storage/v1/doc.go | 2 +- .../kubernetes/typed/storage/v1/fake/BUILD | 40 - .../kubernetes/typed/storage/v1/fake/doc.go | 2 +- .../storage/v1/fake/fake_storage_client.go | 6 +- .../storage/v1/fake/fake_storageclass.go | 40 +- .../storage/v1/fake/fake_volumeattachment.go | 131 + .../typed/storage/v1/generated_expansion.go | 4 +- .../typed/storage/v1/storage_client.go | 7 +- .../typed/storage/v1/storageclass.go | 41 +- .../typed/storage/v1/volumeattachment.go | 180 + .../kubernetes/typed/storage/v1alpha1/BUILD | 39 - .../kubernetes/typed/storage/v1alpha1/doc.go | 2 +- .../typed/storage/v1alpha1/fake/BUILD | 37 - .../typed/storage/v1alpha1/fake/doc.go | 2 +- .../v1alpha1/fake/fake_storage_client.go | 2 +- .../v1alpha1/fake/fake_volumeattachment.go | 6 +- .../storage/v1alpha1/generated_expansion.go | 2 +- .../typed/storage/v1alpha1/storage_client.go | 2 +- .../storage/v1alpha1/volumeattachment.go | 19 +- .../kubernetes/typed/storage/v1beta1/BUILD | 43 - .../kubernetes/typed/storage/v1beta1/doc.go | 2 +- .../typed/storage/v1beta1/fake/BUILD | 41 - .../typed/storage/v1beta1/fake/doc.go | 2 +- .../v1beta1/fake/fake_storage_client.go | 2 +- .../storage/v1beta1/fake/fake_storageclass.go | 6 +- .../v1beta1/fake/fake_volumeattachment.go | 6 +- .../storage/v1beta1/generated_expansion.go | 2 +- .../typed/storage/v1beta1/storage_client.go | 2 +- .../typed/storage/v1beta1/storageclass.go | 19 +- .../typed/storage/v1beta1/volumeattachment.go | 19 +- .../client-go/kubernetes_test/timeout_test.go | 60 + .../admissionregistration/v1alpha1/BUILD | 31 - .../v1alpha1/expansion_generated.go | 2 +- .../v1alpha1/initializerconfiguration.go | 2 +- .../admissionregistration/v1beta1/BUILD | 32 - .../v1beta1/expansion_generated.go | 2 +- .../v1beta1/mutatingwebhookconfiguration.go | 2 +- .../v1beta1/validatingwebhookconfiguration.go | 2 +- vendor/k8s.io/client-go/listers/apps/v1/BUILD | 41 - .../listers/apps/v1/controllerrevision.go | 2 +- .../client-go/listers/apps/v1/daemonset.go | 2 +- .../client-go/listers/apps/v1/deployment.go | 2 +- .../listers/apps/v1/expansion_generated.go | 2 +- .../client-go/listers/apps/v1/replicaset.go | 2 +- .../client-go/listers/apps/v1/statefulset.go | 2 +- .../client-go/listers/apps/v1beta1/BUILD | 40 - .../apps/v1beta1/controllerrevision.go | 2 +- .../listers/apps/v1beta1/deployment.go | 2 +- .../apps/v1beta1/expansion_generated.go | 10 +- .../client-go/listers/apps/v1beta1/scale.go | 94 - .../listers/apps/v1beta1/statefulset.go | 2 +- .../client-go/listers/apps/v1beta2/BUILD | 45 - .../apps/v1beta2/controllerrevision.go | 2 +- .../listers/apps/v1beta2/daemonset.go | 2 +- .../listers/apps/v1beta2/deployment.go | 2 +- .../apps/v1beta2/expansion_generated.go | 10 +- .../listers/apps/v1beta2/replicaset.go | 2 +- .../client-go/listers/apps/v1beta2/scale.go | 94 - .../listers/apps/v1beta2/statefulset.go | 2 +- .../auditregistration/v1alpha1/auditsink.go | 65 + .../v1alpha1/expansion_generated.go | 23 + .../client-go/listers/authentication/OWNERS | 7 + .../client-go/listers/authentication/v1/BUILD | 34 - .../authentication/v1/expansion_generated.go | 2 +- .../listers/authentication/v1/tokenreview.go | 2 +- .../listers/authentication/v1beta1/BUILD | 34 - .../v1beta1/expansion_generated.go | 2 +- .../authentication/v1beta1/tokenreview.go | 2 +- .../client-go/listers/authorization/OWNERS | 7 + .../client-go/listers/authorization/v1/BUILD | 37 - .../authorization/v1/expansion_generated.go | 2 +- .../v1/localsubjectaccessreview.go | 2 +- .../v1/selfsubjectaccessreview.go | 2 +- .../v1/selfsubjectrulesreview.go | 2 +- .../authorization/v1/subjectaccessreview.go | 2 +- .../listers/authorization/v1beta1/BUILD | 37 - .../v1beta1/expansion_generated.go | 2 +- .../v1beta1/localsubjectaccessreview.go | 2 +- .../v1beta1/selfsubjectaccessreview.go | 2 +- .../v1beta1/selfsubjectrulesreview.go | 2 +- .../v1beta1/subjectaccessreview.go | 2 +- .../client-go/listers/autoscaling/v1/BUILD | 31 - .../autoscaling/v1/expansion_generated.go | 2 +- .../autoscaling/v1/horizontalpodautoscaler.go | 2 +- .../listers/autoscaling/v2beta1/BUILD | 31 - .../v2beta1/expansion_generated.go | 2 +- .../v2beta1/horizontalpodautoscaler.go | 2 +- .../v2beta2/expansion_generated.go | 27 + .../v2beta2/horizontalpodautoscaler.go | 94 + .../k8s.io/client-go/listers/batch/v1/BUILD | 37 - .../listers/batch/v1/expansion_generated.go | 2 +- .../k8s.io/client-go/listers/batch/v1/job.go | 2 +- .../client-go/listers/batch/v1beta1/BUILD | 34 - .../listers/batch/v1beta1/cronjob.go | 2 +- .../batch/v1beta1/expansion_generated.go | 2 +- .../client-go/listers/batch/v2alpha1/BUILD | 34 - .../listers/batch/v2alpha1/cronjob.go | 2 +- .../batch/v2alpha1/expansion_generated.go | 2 +- .../listers/certificates/v1beta1/BUILD | 34 - .../v1beta1/certificatesigningrequest.go | 2 +- .../v1beta1/expansion_generated.go | 2 +- .../v1beta1/expansion_generated.go | 27 + .../listers/coordination/v1beta1/lease.go | 94 + vendor/k8s.io/client-go/listers/core/v1/BUILD | 52 - .../listers/core/v1/componentstatus.go | 2 +- .../client-go/listers/core/v1/configmap.go | 2 +- .../client-go/listers/core/v1/endpoints.go | 2 +- .../k8s.io/client-go/listers/core/v1/event.go | 2 +- .../listers/core/v1/expansion_generated.go | 2 +- .../client-go/listers/core/v1/limitrange.go | 2 +- .../client-go/listers/core/v1/namespace.go | 2 +- .../k8s.io/client-go/listers/core/v1/node.go | 2 +- .../listers/core/v1/persistentvolume.go | 2 +- .../listers/core/v1/persistentvolumeclaim.go | 2 +- .../k8s.io/client-go/listers/core/v1/pod.go | 2 +- .../client-go/listers/core/v1/podtemplate.go | 2 +- .../listers/core/v1/replicationcontroller.go | 2 +- .../listers/core/v1/resourcequota.go | 2 +- .../client-go/listers/core/v1/secret.go | 2 +- .../client-go/listers/core/v1/service.go | 2 +- .../listers/core/v1/serviceaccount.go | 2 +- .../client-go/listers/events/v1beta1/BUILD | 31 - .../client-go/listers/events/v1beta1/event.go | 2 +- .../events/v1beta1/expansion_generated.go | 2 +- .../listers/extensions/v1beta1/BUILD | 60 - .../listers/extensions/v1beta1/daemonset.go | 2 +- .../listers/extensions/v1beta1/deployment.go | 2 +- .../extensions/v1beta1/expansion_generated.go | 10 +- .../listers/extensions/v1beta1/ingress.go | 2 +- .../extensions/v1beta1/podsecuritypolicy.go | 2 +- .../listers/extensions/v1beta1/replicaset.go | 2 +- .../listers/extensions/v1beta1/scale.go | 94 - .../listers/imagepolicy/v1alpha1/BUILD | 34 - .../v1alpha1/expansion_generated.go | 2 +- .../imagepolicy/v1alpha1/imagereview.go | 2 +- .../client-go/listers/networking/v1/BUILD | 34 - .../networking/v1/expansion_generated.go | 2 +- .../listers/networking/v1/networkpolicy.go | 2 +- .../client-go/listers/policy/v1beta1/BUILD | 40 - .../listers/policy/v1beta1/eviction.go | 2 +- .../policy/v1beta1/expansion_generated.go | 2 +- .../policy/v1beta1/poddisruptionbudget.go | 2 +- .../v1beta1/poddisruptionbudget_expansion.go | 4 +- .../policy/v1beta1/podsecuritypolicy.go | 2 +- vendor/k8s.io/client-go/listers/rbac/OWNERS | 7 + vendor/k8s.io/client-go/listers/rbac/v1/BUILD | 37 - .../client-go/listers/rbac/v1/clusterrole.go | 2 +- .../listers/rbac/v1/clusterrolebinding.go | 2 +- .../listers/rbac/v1/expansion_generated.go | 2 +- .../k8s.io/client-go/listers/rbac/v1/role.go | 2 +- .../client-go/listers/rbac/v1/rolebinding.go | 2 +- .../client-go/listers/rbac/v1alpha1/BUILD | 37 - .../listers/rbac/v1alpha1/clusterrole.go | 2 +- .../rbac/v1alpha1/clusterrolebinding.go | 2 +- .../rbac/v1alpha1/expansion_generated.go | 2 +- .../client-go/listers/rbac/v1alpha1/role.go | 2 +- .../listers/rbac/v1alpha1/rolebinding.go | 2 +- .../client-go/listers/rbac/v1beta1/BUILD | 37 - .../listers/rbac/v1beta1/clusterrole.go | 2 +- .../rbac/v1beta1/clusterrolebinding.go | 2 +- .../rbac/v1beta1/expansion_generated.go | 2 +- .../client-go/listers/rbac/v1beta1/role.go | 2 +- .../listers/rbac/v1beta1/rolebinding.go | 2 +- .../listers/scheduling/v1alpha1/BUILD | 34 - .../v1alpha1/expansion_generated.go | 2 +- .../scheduling/v1alpha1/priorityclass.go | 2 +- .../scheduling/v1beta1/expansion_generated.go | 23 + .../scheduling/v1beta1/priorityclass.go | 65 + .../client-go/listers/settings/v1alpha1/BUILD | 34 - .../settings/v1alpha1/expansion_generated.go | 2 +- .../listers/settings/v1alpha1/podpreset.go | 2 +- .../k8s.io/client-go/listers/storage/v1/BUILD | 34 - .../listers/storage/v1/expansion_generated.go | 6 +- .../listers/storage/v1/storageclass.go | 2 +- .../listers/storage/v1/volumeattachment.go | 65 + .../client-go/listers/storage/v1alpha1/BUILD | 31 - .../storage/v1alpha1/expansion_generated.go | 2 +- .../storage/v1alpha1/volumeattachment.go | 2 +- .../client-go/listers/storage/v1beta1/BUILD | 35 - .../storage/v1beta1/expansion_generated.go | 2 +- .../listers/storage/v1beta1/storageclass.go | 2 +- .../storage/v1beta1/volumeattachment.go | 2 +- .../pkg/apis/clientauthentication/OWNERS | 7 + .../pkg/apis/clientauthentication/doc.go | 20 + .../clientauthentication/install/install.go | 33 + .../pkg/apis/clientauthentication/register.go | 50 + .../pkg/apis/clientauthentication/types.go | 77 + .../apis/clientauthentication/v1alpha1/doc.go | 24 + .../clientauthentication/v1alpha1/register.go | 55 + .../clientauthentication/v1alpha1/types.go | 78 + .../v1alpha1/zz_generated.conversion.go | 176 + .../v1alpha1/zz_generated.deepcopy.go | 128 + .../v1alpha1/zz_generated.defaults.go | 32 + .../v1beta1/conversion.go | 26 + .../apis/clientauthentication/v1beta1/doc.go | 24 + .../clientauthentication/v1beta1/register.go | 55 + .../clientauthentication/v1beta1/types.go | 59 + .../v1beta1/zz_generated.conversion.go | 142 + .../v1beta1/zz_generated.deepcopy.go | 92 + .../v1beta1/zz_generated.defaults.go | 32 + .../zz_generated.deepcopy.go | 128 + vendor/k8s.io/client-go/pkg/version/BUILD | 30 - vendor/k8s.io/client-go/pkg/version/base.go | 2 +- vendor/k8s.io/client-go/pkg/version/doc.go | 3 +- .../client-go/plugin/pkg/client/auth/BUILD | 37 - .../client-go/plugin/pkg/client/auth/OWNERS | 7 + .../plugin/pkg/client/auth/azure/BUILD | 41 - .../plugin/pkg/client/auth/azure/README.md | 18 +- .../plugin/pkg/client/auth/azure/azure.go | 19 +- .../pkg/client/auth/azure/azure_test.go | 9 +- .../plugin/pkg/client/auth/exec/exec.go | 361 + .../plugin/pkg/client/auth/exec/exec_test.go | 748 ++ .../client/auth/exec/testdata/test-plugin.sh | 18 + .../plugin/pkg/client/auth/gcp/BUILD | 43 - .../plugin/pkg/client/auth/gcp/gcp.go | 37 +- .../plugin/pkg/client/auth/gcp/gcp_test.go | 70 +- .../plugin/pkg/client/auth/oidc/BUILD | 38 - .../plugin/pkg/client/auth/oidc/OWNERS | 1 + .../plugin/pkg/client/auth/oidc/oidc.go | 8 +- .../plugin/pkg/client/auth/openstack/BUILD | 38 - .../pkg/client/auth/openstack/openstack.go | 55 +- .../client/auth/openstack/openstack_test.go | 57 + vendor/k8s.io/client-go/rest/BUILD | 98 - vendor/k8s.io/client-go/rest/config.go | 38 +- vendor/k8s.io/client-go/rest/config_test.go | 26 +- vendor/k8s.io/client-go/rest/fake/BUILD | 32 - vendor/k8s.io/client-go/rest/fake/fake.go | 6 +- vendor/k8s.io/client-go/rest/plugin.go | 4 +- vendor/k8s.io/client-go/rest/request.go | 134 +- vendor/k8s.io/client-go/rest/request_test.go | 186 +- .../client-go/rest/token_source.go | 0 .../client-go/rest/token_source_test.go | 0 vendor/k8s.io/client-go/rest/transport.go | 52 +- vendor/k8s.io/client-go/rest/urlbackoff.go | 8 +- vendor/k8s.io/client-go/rest/watch/BUILD | 56 - .../client-go/rest/zz_generated.deepcopy.go | 2 +- .../restmapper/category_expansion.go | 119 + .../restmapper/category_expansion_test.go | 145 + .../restmapper.go => restmapper/discovery.go} | 52 +- .../discovery_test.go} | 6 +- .../k8s.io/client-go/restmapper/shortcut.go | 172 + .../client-go/restmapper/shortcut_test.go | 289 + vendor/k8s.io/client-go/scale/BUILD | 76 - vendor/k8s.io/client-go/scale/client.go | 14 +- vendor/k8s.io/client-go/scale/client_test.go | 7 +- vendor/k8s.io/client-go/scale/fake/BUILD | 28 - vendor/k8s.io/client-go/scale/interfaces.go | 2 +- .../k8s.io/client-go/scale/roundtrip_test.go | 2 +- vendor/k8s.io/client-go/scale/scheme/BUILD | 41 - .../client-go/scale/scheme/appsint/BUILD | 31 - .../client-go/scale/scheme/appsv1beta1/BUILD | 35 - .../appsv1beta1/zz_generated.conversion.go | 53 +- .../client-go/scale/scheme/appsv1beta2/BUILD | 35 - .../appsv1beta2/zz_generated.conversion.go | 53 +- .../scale/scheme/autoscalingv1/BUILD | 35 - .../autoscalingv1/zz_generated.conversion.go | 53 +- .../scale/scheme/extensionsint/BUILD | 31 - .../scale/scheme/extensionsv1beta1/BUILD | 35 - .../zz_generated.conversion.go | 53 +- .../scale/scheme/zz_generated.deepcopy.go | 10 +- vendor/k8s.io/client-go/scale/util.go | 25 +- vendor/k8s.io/client-go/testing/BUILD | 60 - vendor/k8s.io/client-go/testing/actions.go | 185 +- vendor/k8s.io/client-go/testing/fake.go | 58 +- vendor/k8s.io/client-go/testing/fixture.go | 74 +- .../k8s.io/client-go/testing/fixture_test.go | 43 + .../third_party/forked/golang/template/BUILD | 28 - vendor/k8s.io/client-go/tools/auth/BUILD | 33 - vendor/k8s.io/client-go/tools/auth/OWNERS | 7 + .../client-go/tools/bootstrap/token/api/BUILD | 26 - .../tools/bootstrap/token/api/OWNERS | 5 - .../tools/bootstrap/token/api/types.go | 100 - .../tools/bootstrap/token/util/BUILD | 32 - .../tools/bootstrap/token/util/helpers.go | 52 - .../bootstrap/token/util/helpers_test.go | 76 - vendor/k8s.io/client-go/tools/cache/BUILD | 103 - .../client-go/tools/cache/delta_fifo.go | 30 +- .../client-go/tools/cache/expiration_cache.go | 6 +- vendor/k8s.io/client-go/tools/cache/fifo.go | 2 +- vendor/k8s.io/client-go/tools/cache/heap.go | 2 +- .../client-go/tools/cache/index_test.go | 75 +- .../k8s.io/client-go/tools/cache/listers.go | 4 +- .../k8s.io/client-go/tools/cache/listwatch.go | 86 +- .../client-go/tools/cache/mutation_cache.go | 4 +- .../tools/cache/mutation_detector.go | 3 + .../k8s.io/client-go/tools/cache/reflector.go | 91 +- .../client-go/tools/cache/shared_informer.go | 18 +- vendor/k8s.io/client-go/tools/cache/store.go | 2 +- .../client-go/tools/cache/testing/BUILD | 45 - vendor/k8s.io/client-go/tools/clientcmd/BUILD | 78 - .../client-go/tools/clientcmd/api/BUILD | 50 - .../client-go/tools/clientcmd/api/doc.go | 1 + .../client-go/tools/clientcmd/api/helpers.go | 9 +- .../tools/clientcmd/api/helpers_test.go | 9 +- .../tools/clientcmd/api/latest/BUILD | 33 - .../tools/clientcmd/api/latest/latest.go | 11 +- .../client-go/tools/clientcmd/api/types.go | 32 + .../tools/clientcmd/api/types_test.go | 2 +- .../client-go/tools/clientcmd/api/v1/BUILD | 37 - .../tools/clientcmd/api/v1/conversion.go | 25 +- .../client-go/tools/clientcmd/api/v1/doc.go | 1 + .../client-go/tools/clientcmd/api/v1/types.go | 32 + .../clientcmd/api/v1/zz_generated.deepcopy.go | 64 +- .../clientcmd/api/zz_generated.deepcopy.go | 85 +- .../client-go/tools/clientcmd/auth_loaders.go | 11 +- .../tools/clientcmd/client_config.go | 69 +- .../tools/clientcmd/client_config_test.go | 199 +- .../client-go/tools/clientcmd/config.go | 38 +- .../client-go/tools/clientcmd/loader.go | 37 +- .../client-go/tools/clientcmd/loader_test.go | 216 +- .../tools/clientcmd/merged_client_builder.go | 9 +- .../client-go/tools/clientcmd/validation.go | 19 + .../tools/clientcmd/validation_test.go | 100 + .../client-go/tools/leaderelection/BUILD | 53 - .../tools/leaderelection/healthzadaptor.go | 69 + .../leaderelection/healthzadaptor_test.go | 175 + .../tools/leaderelection/leaderelection.go | 156 +- .../leaderelection/leaderelection_test.go | 2 + .../tools/leaderelection/resourcelock/BUILD | 35 - .../resourcelock/configmaplock.go | 2 +- vendor/k8s.io/client-go/tools/metrics/BUILD | 25 - vendor/k8s.io/client-go/tools/pager/BUILD | 49 - vendor/k8s.io/client-go/tools/pager/pager.go | 3 +- .../client-go/tools/pager/pager_test.go | 2 +- .../k8s.io/client-go/tools/portforward/BUILD | 41 - .../tools/portforward/portforward.go | 107 +- .../tools/portforward/portforward_test.go | 114 +- vendor/k8s.io/client-go/tools/record/BUILD | 68 - vendor/k8s.io/client-go/tools/record/event.go | 44 +- .../client-go/tools/record/events_cache.go | 5 - .../tools/record/events_cache_test.go | 8 - vendor/k8s.io/client-go/tools/record/fake.go | 4 + vendor/k8s.io/client-go/tools/reference/BUILD | 31 - .../k8s.io/client-go/tools/reference/ref.go | 8 +- .../client-go/tools/reference/ref_test.go | 72 + .../client-go/tools/remotecommand/BUILD | 60 - .../client-go/tools/remotecommand/reader.go | 41 + .../tools/remotecommand/remotecommand.go | 8 +- .../client-go/tools/remotecommand/v1.go | 10 +- .../client-go/tools/remotecommand/v2.go | 2 +- .../client-go/tools/watch/informerwatcher.go | 114 + .../tools/watch/informerwatcher_test.go | 236 + vendor/k8s.io/client-go/tools/watch/until.go | 225 + .../client-go/tools/watch/until_test.go | 303 + vendor/k8s.io/client-go/transport/BUILD | 48 - vendor/k8s.io/client-go/transport/cache.go | 12 +- .../k8s.io/client-go/transport/cache_test.go | 39 +- vendor/k8s.io/client-go/transport/config.go | 13 +- .../client-go/transport/round_trippers.go | 151 +- .../transport/round_trippers_test.go | 119 +- vendor/k8s.io/client-go/transport/spdy/BUILD | 30 - .../k8s.io/client-go/transport/spdy/spdy.go | 2 +- .../k8s.io/client-go/transport/transport.go | 34 +- .../client-go/transport/transport_test.go | 168 +- vendor/k8s.io/client-go/util/buffer/BUILD | 29 - .../util/buffer/ring_growing_test.go | 2 +- vendor/k8s.io/client-go/util/cert/BUILD | 47 - vendor/k8s.io/client-go/util/cert/OWNERS | 7 + vendor/k8s.io/client-go/util/cert/cert.go | 94 +- vendor/k8s.io/client-go/util/cert/io.go | 37 +- .../k8s.io/client-go/util/cert/triple/BUILD | 26 - .../client-go/util/cert/triple/triple.go | 116 - .../k8s.io/client-go/util/certificate/BUILD | 66 - .../k8s.io/client-go/util/certificate/OWNERS | 13 +- .../util/certificate/certificate_manager.go | 167 +- .../certificate/certificate_manager_test.go | 175 +- .../util/certificate/certificate_store.go | 49 +- .../certificate/certificate_store_test.go | 136 +- .../client-go/util/certificate/csr/BUILD | 53 - .../client-go/util/certificate/csr/csr.go | 106 +- .../util/certificate/csr/csr_test.go | 135 - .../util/connrotation/connrotation.go | 105 + .../util/connrotation/connrotation_test.go | 61 + vendor/k8s.io/client-go/util/exec/BUILD | 25 - .../k8s.io/client-go/util/flowcontrol/BUILD | 44 - .../util/flowcontrol/backoff_test.go | 2 +- vendor/k8s.io/client-go/util/homedir/BUILD | 25 - vendor/k8s.io/client-go/util/integer/BUILD | 32 - vendor/k8s.io/client-go/util/jsonpath/BUILD | 41 - vendor/k8s.io/client-go/util/jsonpath/node.go | 8 +- .../k8s.io/client-go/util/jsonpath/parser.go | 6 +- vendor/k8s.io/client-go/util/retry/BUILD | 41 - vendor/k8s.io/client-go/util/testing/BUILD | 35 - vendor/k8s.io/client-go/util/workqueue/BUILD | 59 - .../util/workqueue/delaying_queue.go | 10 +- .../client-go/util/workqueue/metrics.go | 113 +- .../client-go/util/workqueue/metrics_test.go | 293 + .../client-go/util/workqueue/parallelizer.go | 23 +- .../k8s.io/client-go/util/workqueue/queue.go | 52 +- .../util/workqueue/rate_limitting_queue.go | 6 +- .../workqueue/rate_limitting_queue_test.go | 2 +- vendor/k8s.io/kubernetes/CHANGELOG-1.13.md | 697 +- vendor/k8s.io/kubernetes/Godeps/Godeps.json | 23 +- vendor/k8s.io/kubernetes/Godeps/LICENSES | 140 + .../kubernetes/api/openapi-spec/swagger.json | 2 +- .../build/build-image/cross/Dockerfile | 4 +- .../build/build-image/cross/VERSION | 2 +- vendor/k8s.io/kubernetes/build/root/WORKSPACE | 6 +- .../bgpconfigurations-crd.yaml | 15 + .../dashboard/dashboard-controller.yaml | 2 +- .../cluster/gce/gci/configure-helper.sh | 12 +- .../kubernetes/cluster/gce/gci/configure.sh | 4 +- .../gce/manifests/cluster-autoscaler.manifest | 2 +- .../cmd/kube-scheduler/app/options/options.go | 1 + .../kubernetes/cmd/kubeadm/app/cmd/join.go | 8 +- .../kubeadm/app/cmd/phases/bootstraptoken.go | 9 +- .../cmd/kubeadm/app/util/etcd/etcd.go | 3 +- vendor/k8s.io/kubernetes/hack/godep-save.sh | 1 + .../hack/jenkins/benchmark-dockerized.sh | 8 +- .../k8s.io/kubernetes/hack/jenkins/gotest.sh | 6 +- .../hack/jenkins/test-dockerized.sh | 9 +- .../hack/jenkins/verify-dockerized.sh | 8 +- vendor/k8s.io/kubernetes/hack/lib/etcd.sh | 4 +- .../k8s.io/kubernetes/hack/make-rules/test.sh | 4 + .../kubernetes/hack/make-rules/verify.sh | 5 + .../hack/testdata/diff/configmap.yaml | 4 + .../hack/testdata/diff/deployment.yaml | 17 + .../kubernetes/hack/testdata/diff/pod.yaml | 8 + .../kubernetes/hack/testdata/diff/secret.yaml | 4 + .../k8s.io/kubernetes/hack/verify-godeps.sh | 8 +- .../k8s.io/kubernetes/hack/verify-golint.sh | 14 +- .../pkg/apis/autoscaling/v2beta1/BUILD | 6 +- .../apis/autoscaling/v2beta1/conversion.go | 12 +- .../autoscaling/v2beta1/conversion_test.go | 84 + .../azure/azure_controller_standard.go | 2 + .../providers/azure/azure_controller_vmss.go | 29 +- .../providers/azure/azure_instances.go | 13 +- .../providers/azure/azure_instances_test.go | 121 + .../cloudprovider/providers/gce/cloud/gen.go | 2 +- .../providers/gce/cloud/gen_test.go | 2 +- .../pkg/controller/cronjob/injection.go | 3 +- .../controller/podautoscaler/horizontal.go | 24 +- .../podautoscaler/horizontal_test.go | 55 +- .../podautoscaler/legacy_horizontal_test.go | 12 +- .../kubernetes/pkg/kubectl/cmd/apply/apply.go | 13 +- .../kubernetes/pkg/kubectl/cmd/diff/diff.go | 12 +- .../kubernetes/pkg/kubectl/cmd/get/get.go | 6 +- .../kubernetes/pkg/kubectl/cmd/get/sorter.go | 25 +- .../pkg/kubectl/cmd/get/sorter_test.go | 82 +- .../versioned/secret_for_docker_registry.go | 14 +- .../secret_for_docker_registry_test.go | 2 +- vendor/k8s.io/kubernetes/pkg/kubelet/BUILD | 1 + .../kubernetes/pkg/kubelet/config/defaults.go | 1 + .../kubernetes/pkg/kubelet/kubelet_getters.go | 22 +- .../kubernetes/pkg/kubelet/kubelet_volumes.go | 16 +- .../pkg/kubelet/kubelet_volumes_linux_test.go | 156 + .../kuberuntime/kuberuntime_sandbox.go | 3 + .../kubernetes/pkg/kubelet/server/stats/BUILD | 1 + .../pkg/kubelet/server/stats/summary.go | 24 +- .../server/stats/summary_sys_containers.go | 29 +- .../pkg/kubelet/server/stats/summary_test.go | 8 +- .../k8s.io/kubernetes/pkg/kubelet/util/BUILD | 2 + .../pkg/kubelet/util/boottime_util_darwin.go | 44 + .../pkg/kubelet/util/boottime_util_linux.go | 36 + .../pkg/kubelet/util/util_unsupported.go | 5 + .../pkg/kubelet/util/util_windows.go | 13 + .../cache/desired_state_of_world.go | 13 +- .../cache/desired_state_of_world_test.go | 162 + .../volumemanager/reconciler/reconciler.go | 8 +- .../pkg/proxy/ipvs/graceful_termination.go | 12 +- .../kubernetes/pkg/proxy/ipvs/proxier.go | 84 +- .../kubernetes/pkg/proxy/ipvs/proxier_test.go | 108 +- .../k8s.io/kubernetes/pkg/proxy/util/utils.go | 47 + .../kubernetes/pkg/proxy/util/utils_test.go | 69 + .../kubernetes/pkg/registry/core/node/BUILD | 1 + .../pkg/registry/core/node/strategy.go | 5 + .../kubernetes/pkg/registry/core/pod/BUILD | 1 + .../pkg/registry/core/pod/strategy.go | 5 + .../scheduling/rest/storage_scheduling.go | 2 +- .../kubernetes/pkg/scheduler/algorithm/BUILD | 1 - .../pkg/scheduler/algorithm/types.go | 6 +- .../pkg/scheduler/core/generic_scheduler.go | 56 +- .../kubernetes/pkg/scheduler/factory/BUILD | 1 + .../pkg/scheduler/factory/factory.go | 56 +- .../pkg/scheduler/factory/factory_test.go | 144 + .../pkg/scheduler/internal/cache/BUILD | 1 + .../pkg/scheduler/internal/cache/cache.go | 3 +- .../pkg/scheduler/internal/cache/fake/BUILD | 1 + .../internal/cache/fake/fake_cache.go | 3 +- .../pkg/scheduler/internal/cache/interface.go | 6 +- .../pkg/scheduler/internal/queue/BUILD | 3 + .../internal/queue/scheduling_queue.go | 213 +- .../internal/queue/scheduling_queue_test.go | 189 +- .../kubernetes/pkg/scheduler/scheduler.go | 8 + .../kubernetes/pkg/scheduler/testing/BUILD | 1 - .../pkg/scheduler/testing/fake_lister.go | 3 +- .../kubernetes/pkg/util/ipvs/ipvs_linux.go | 23 + vendor/k8s.io/kubernetes/pkg/util/mount/BUILD | 2 + .../k8s.io/kubernetes/pkg/util/mount/fake.go | 10 +- .../kubernetes/pkg/util/mount/mount_helper.go | 124 + .../pkg/util/mount/mount_helper_test.go | 152 + .../kubernetes/pkg/util/mount/mount_linux.go | 40 +- .../pkg/util/mount/mount_linux_test.go | 38 - .../pkg/volume/azure_dd/azure_common.go | 2 +- .../pkg/volume/azure_dd/azure_dd.go | 2 +- .../pkg/volume/portworx/portworx.go | 15 +- .../pkg/volume/portworx/portworx_util.go | 170 +- .../kubernetes/pkg/volume/testing/testing.go | 88 + .../k8s.io/kubernetes/pkg/volume/util/BUILD | 9 +- .../operationexecutor/operation_executor.go | 2 +- .../operation_executor_test.go | 4 +- .../operationexecutor/operation_generator.go | 110 +- .../k8s.io/kubernetes/pkg/volume/util/util.go | 97 +- .../kubernetes/pkg/volume/util/util_test.go | 43 +- .../k8s.io/apiserver/pkg/server/options/BUILD | 1 + .../pkg/server/options/authentication.go | 16 +- .../pkg/server/options/authentication_test.go | 133 + .../options/deprecated_insecure_serving.go | 6 +- .../pkg/util/webhook/authentication.go | 1 + .../staging/src/k8s.io/client-go/rest/BUILD | 4 - .../src/k8s.io/client-go/rest/config.go | 26 +- .../src/k8s.io/client-go/rest/config_test.go | 1 + .../tools/clientcmd/client_config.go | 7 +- .../tools/clientcmd/client_config_test.go | 15 +- .../src/k8s.io/client-go/transport/BUILD | 4 + .../src/k8s.io/client-go/transport/config.go | 7 +- .../client-go/transport/round_trippers.go | 39 +- .../client-go/transport/token_source.go | 140 + .../client-go/transport/token_source_test.go | 156 + vendor/k8s.io/kubernetes/test/cmd/core.sh | 2 +- vendor/k8s.io/kubernetes/test/cmd/diff.sh | 17 + .../kubernetes/test/cmd/legacy-script.sh | 1 + .../kubernetes/test/e2e/apps/cronjob.go | 22 +- .../test/e2e/framework/test_context.go | 3 +- .../test/e2e/storage/drivers/base.go | 22 +- .../test/e2e/storage/drivers/csi.go | 28 +- .../test/e2e/storage/drivers/in_tree.go | 101 +- .../test/e2e/storage/testsuites/BUILD | 1 - .../e2e/storage/testsuites/provisioning.go | 2 +- .../test/e2e/storage/testsuites/subpath.go | 84 +- .../test/e2e/storage/testsuites/volume_io.go | 2 +- .../test/e2e/storage/testsuites/volumemode.go | 4 +- .../test/e2e/storage/testsuites/volumes.go | 100 +- .../e2e_node/node_problem_detector_linux.go | 25 +- vendor/k8s.io/kubernetes/test/images/Makefile | 2 +- .../test/integration/scheduler/BUILD | 1 + .../integration/scheduler/preemption_test.go | 150 +- .../test/integration/scheduler/util.go | 13 +- vendor/k8s.io/utils/SECURITY_CONTACTS | 13 + .../ghodss => sigs.k8s.io}/yaml/.gitignore | 0 vendor/sigs.k8s.io/yaml/.travis.yml | 14 + vendor/sigs.k8s.io/yaml/CONTRIBUTING.md | 31 + .../ghodss => sigs.k8s.io}/yaml/LICENSE | 0 vendor/sigs.k8s.io/yaml/OWNERS | 25 + .../ghodss => sigs.k8s.io}/yaml/README.md | 0 vendor/sigs.k8s.io/yaml/RELEASE.md | 9 + vendor/sigs.k8s.io/yaml/SECURITY_CONTACTS | 17 + vendor/sigs.k8s.io/yaml/code-of-conduct.md | 3 + .../ghodss => sigs.k8s.io}/yaml/fields.go | 1 + .../ghodss => sigs.k8s.io}/yaml/yaml.go | 68 +- vendor/sigs.k8s.io/yaml/yaml_go110.go | 14 + vendor/sigs.k8s.io/yaml/yaml_go110_test.go | 46 + .../ghodss => sigs.k8s.io}/yaml/yaml_test.go | 140 +- 2425 files changed, 271763 insertions(+), 40453 deletions(-) delete mode 100644 vendor/github.com/ghodss/yaml/.travis.yml create mode 100644 vendor/github.com/google/btree/.travis.yml create mode 100644 vendor/github.com/google/btree/LICENSE create mode 100644 vendor/github.com/google/btree/README.md create mode 100644 vendor/github.com/google/btree/btree.go create mode 100644 vendor/github.com/google/btree/btree_mem.go create mode 100644 vendor/github.com/google/btree/btree_test.go create mode 100644 vendor/github.com/gregjones/httpcache/.travis.yml create mode 100644 vendor/github.com/gregjones/httpcache/LICENSE.txt create mode 100644 vendor/github.com/gregjones/httpcache/README.md create mode 100644 vendor/github.com/gregjones/httpcache/diskcache/diskcache.go create mode 100644 vendor/github.com/gregjones/httpcache/diskcache/diskcache_test.go create mode 100644 vendor/github.com/gregjones/httpcache/httpcache.go create mode 100644 vendor/github.com/gregjones/httpcache/httpcache_test.go create mode 100644 vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache.go create mode 100644 vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache_test.go create mode 100644 vendor/github.com/gregjones/httpcache/memcache/appengine.go create mode 100644 vendor/github.com/gregjones/httpcache/memcache/appengine_test.go create mode 100644 vendor/github.com/gregjones/httpcache/memcache/memcache.go create mode 100644 vendor/github.com/gregjones/httpcache/memcache/memcache_test.go create mode 100644 vendor/github.com/gregjones/httpcache/redis/redis.go create mode 100644 vendor/github.com/gregjones/httpcache/redis/redis_test.go delete mode 100644 vendor/github.com/howeyc/gopass/.travis.yml delete mode 100644 vendor/github.com/howeyc/gopass/LICENSE.txt delete mode 100644 vendor/github.com/howeyc/gopass/OPENSOLARIS.LICENSE delete mode 100644 vendor/github.com/howeyc/gopass/README.md delete mode 100644 vendor/github.com/howeyc/gopass/pass.go delete mode 100644 vendor/github.com/howeyc/gopass/pass_test.go delete mode 100644 vendor/github.com/howeyc/gopass/terminal.go delete mode 100644 vendor/github.com/howeyc/gopass/terminal_solaris.go create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/CONTRIBUTING.md create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/Gopkg.lock create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/Gopkg.toml create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/LICENSE create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/Makefile create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/OWNERS create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/README.md create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/SECURITY_CONTACTS create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/code-of-conduct.md create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/protosanitizer.go create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/protosanitizer_test.go create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/.gitignore create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/Makefile create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/README.md create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi.proto create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi03/csi.pb.go create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi10/csi.pb.go create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest.proto create mode 100644 vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest/csitest.pb.go create mode 100644 vendor/github.com/kubernetes-csi/drivers/SECURITY_CONTACTS create mode 100644 vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/README.md rename vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/{csi-hostpath-snpshotter.yaml => csi-hostpath-snapshotter.yaml} (100%) create mode 100644 vendor/github.com/petar/GoLLRB/.gitignore create mode 100644 vendor/github.com/petar/GoLLRB/AUTHORS create mode 100644 vendor/github.com/petar/GoLLRB/LICENSE create mode 100644 vendor/github.com/petar/GoLLRB/README.md create mode 100644 vendor/github.com/petar/GoLLRB/doc/Sedgewick-LLRB.pdf create mode 100644 vendor/github.com/petar/GoLLRB/doc/Sedgewick-RedBlackBST.java create mode 100644 vendor/github.com/petar/GoLLRB/doc/Sedgewick-Talk-Penn2008.pdf create mode 100644 vendor/github.com/petar/GoLLRB/example/ex1.go create mode 100644 vendor/github.com/petar/GoLLRB/llrb/avgvar.go create mode 100644 vendor/github.com/petar/GoLLRB/llrb/iterator.go create mode 100644 vendor/github.com/petar/GoLLRB/llrb/iterator_test.go create mode 100644 vendor/github.com/petar/GoLLRB/llrb/llrb-stats.go create mode 100644 vendor/github.com/petar/GoLLRB/llrb/llrb.go create mode 100644 vendor/github.com/petar/GoLLRB/llrb/llrb_test.go create mode 100644 vendor/github.com/petar/GoLLRB/llrb/util.go create mode 100644 vendor/github.com/peterbourgon/diskv/LICENSE create mode 100644 vendor/github.com/peterbourgon/diskv/README.md create mode 100644 vendor/github.com/peterbourgon/diskv/basic_test.go create mode 100644 vendor/github.com/peterbourgon/diskv/compression.go create mode 100644 vendor/github.com/peterbourgon/diskv/compression_test.go create mode 100644 vendor/github.com/peterbourgon/diskv/diskv.go create mode 100644 vendor/github.com/peterbourgon/diskv/examples/content-addressable-store/cas.go create mode 100644 vendor/github.com/peterbourgon/diskv/examples/super-simple-store/super-simple-store.go create mode 100644 vendor/github.com/peterbourgon/diskv/import_test.go create mode 100644 vendor/github.com/peterbourgon/diskv/index.go create mode 100644 vendor/github.com/peterbourgon/diskv/index_test.go create mode 100644 vendor/github.com/peterbourgon/diskv/issues_test.go create mode 100644 vendor/github.com/peterbourgon/diskv/keys_test.go create mode 100644 vendor/github.com/peterbourgon/diskv/speed_test.go create mode 100644 vendor/github.com/peterbourgon/diskv/stream_test.go create mode 100644 vendor/golang.org/x/net/route/zsys_freebsd_arm64.go create mode 100644 vendor/golang.org/x/oauth2/.travis.yml create mode 100644 vendor/golang.org/x/oauth2/AUTHORS create mode 100644 vendor/golang.org/x/oauth2/CONTRIBUTING.md create mode 100644 vendor/golang.org/x/oauth2/CONTRIBUTORS create mode 100644 vendor/golang.org/x/oauth2/LICENSE create mode 100644 vendor/golang.org/x/oauth2/README.md create mode 100644 vendor/golang.org/x/oauth2/amazon/amazon.go create mode 100644 vendor/golang.org/x/oauth2/bitbucket/bitbucket.go create mode 100644 vendor/golang.org/x/oauth2/cern/cern.go create mode 100644 vendor/golang.org/x/oauth2/clientcredentials/clientcredentials.go create mode 100644 vendor/golang.org/x/oauth2/clientcredentials/clientcredentials_test.go create mode 100644 vendor/golang.org/x/oauth2/example_test.go create mode 100644 vendor/golang.org/x/oauth2/facebook/facebook.go create mode 100644 vendor/golang.org/x/oauth2/fitbit/fitbit.go create mode 100644 vendor/golang.org/x/oauth2/foursquare/foursquare.go create mode 100644 vendor/golang.org/x/oauth2/github/github.go create mode 100644 vendor/golang.org/x/oauth2/gitlab/gitlab.go create mode 100644 vendor/golang.org/x/oauth2/go.mod create mode 100644 vendor/golang.org/x/oauth2/go.sum create mode 100644 vendor/golang.org/x/oauth2/google/appengine.go create mode 100644 vendor/golang.org/x/oauth2/google/appengine_gen1.go create mode 100644 vendor/golang.org/x/oauth2/google/appengine_gen2_flex.go create mode 100644 vendor/golang.org/x/oauth2/google/default.go create mode 100644 vendor/golang.org/x/oauth2/google/doc.go create mode 100644 vendor/golang.org/x/oauth2/google/example_test.go create mode 100644 vendor/golang.org/x/oauth2/google/google.go create mode 100644 vendor/golang.org/x/oauth2/google/google_test.go create mode 100644 vendor/golang.org/x/oauth2/google/jwt.go create mode 100644 vendor/golang.org/x/oauth2/google/jwt_test.go create mode 100644 vendor/golang.org/x/oauth2/google/sdk.go create mode 100644 vendor/golang.org/x/oauth2/google/sdk_test.go create mode 100644 vendor/golang.org/x/oauth2/google/testdata/gcloud/credentials create mode 100644 vendor/golang.org/x/oauth2/google/testdata/gcloud/properties create mode 100644 vendor/golang.org/x/oauth2/heroku/heroku.go create mode 100644 vendor/golang.org/x/oauth2/hipchat/hipchat.go create mode 100644 vendor/golang.org/x/oauth2/instagram/instagram.go create mode 100644 vendor/golang.org/x/oauth2/internal/client_appengine.go create mode 100644 vendor/golang.org/x/oauth2/internal/doc.go create mode 100644 vendor/golang.org/x/oauth2/internal/oauth2.go create mode 100644 vendor/golang.org/x/oauth2/internal/token.go create mode 100644 vendor/golang.org/x/oauth2/internal/token_test.go create mode 100644 vendor/golang.org/x/oauth2/internal/transport.go create mode 100644 vendor/golang.org/x/oauth2/jira/jira.go create mode 100644 vendor/golang.org/x/oauth2/jira/jira_test.go create mode 100644 vendor/golang.org/x/oauth2/jws/jws.go create mode 100644 vendor/golang.org/x/oauth2/jws/jws_test.go create mode 100644 vendor/golang.org/x/oauth2/jwt/example_test.go create mode 100644 vendor/golang.org/x/oauth2/jwt/jwt.go create mode 100644 vendor/golang.org/x/oauth2/jwt/jwt_test.go create mode 100644 vendor/golang.org/x/oauth2/kakao/kakao.go create mode 100644 vendor/golang.org/x/oauth2/linkedin/linkedin.go create mode 100644 vendor/golang.org/x/oauth2/mailchimp/mailchimp.go create mode 100644 vendor/golang.org/x/oauth2/mailru/mailru.go create mode 100644 vendor/golang.org/x/oauth2/mediamath/mediamath.go create mode 100644 vendor/golang.org/x/oauth2/microsoft/microsoft.go create mode 100644 vendor/golang.org/x/oauth2/nokiahealth/nokiahealth.go create mode 100644 vendor/golang.org/x/oauth2/oauth2.go create mode 100644 vendor/golang.org/x/oauth2/oauth2_test.go create mode 100644 vendor/golang.org/x/oauth2/odnoklassniki/odnoklassniki.go create mode 100644 vendor/golang.org/x/oauth2/paypal/paypal.go create mode 100644 vendor/golang.org/x/oauth2/slack/slack.go create mode 100644 vendor/golang.org/x/oauth2/spotify/spotify.go create mode 100644 vendor/golang.org/x/oauth2/stackoverflow/stackoverflow.go create mode 100644 vendor/golang.org/x/oauth2/token.go create mode 100644 vendor/golang.org/x/oauth2/token_test.go create mode 100644 vendor/golang.org/x/oauth2/transport.go create mode 100644 vendor/golang.org/x/oauth2/transport_test.go create mode 100644 vendor/golang.org/x/oauth2/twitch/twitch.go create mode 100644 vendor/golang.org/x/oauth2/uber/uber.go create mode 100644 vendor/golang.org/x/oauth2/vk/vk.go create mode 100644 vendor/golang.org/x/oauth2/yahoo/yahoo.go create mode 100644 vendor/golang.org/x/oauth2/yandex/yandex.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_linux.go create mode 100644 vendor/golang.org/x/sys/plan9/mksyscall.go delete mode 100755 vendor/golang.org/x/sys/plan9/mksyscall.pl create mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s create mode 100644 vendor/golang.org/x/sys/unix/darwin_test.go create mode 100644 vendor/golang.org/x/sys/unix/example_exec_test.go rename vendor/golang.org/x/sys/unix/{example_test.go => example_flock_test.go} (75%) create mode 100644 vendor/golang.org/x/sys/unix/fcntl_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/linux/mksysnum.go delete mode 100755 vendor/golang.org/x/sys/unix/linux/mksysnum.pl create mode 100644 vendor/golang.org/x/sys/unix/mkasm_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go delete mode 100755 vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.pl create mode 100644 vendor/golang.org/x/sys/unix/mksysnum.go delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_darwin.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl create mode 100644 vendor/golang.org/x/sys/unix/sendfile_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go create mode 100644 vendor/google.golang.org/appengine/.travis.yml create mode 100644 vendor/google.golang.org/appengine/CONTRIBUTING.md create mode 100644 vendor/google.golang.org/appengine/LICENSE create mode 100644 vendor/google.golang.org/appengine/README.md create mode 100644 vendor/google.golang.org/appengine/aetest/doc.go create mode 100644 vendor/google.golang.org/appengine/aetest/instance.go create mode 100644 vendor/google.golang.org/appengine/aetest/instance_classic.go create mode 100644 vendor/google.golang.org/appengine/aetest/instance_test.go create mode 100644 vendor/google.golang.org/appengine/aetest/instance_vm.go create mode 100644 vendor/google.golang.org/appengine/aetest/user.go create mode 100644 vendor/google.golang.org/appengine/appengine.go create mode 100644 vendor/google.golang.org/appengine/appengine_test.go create mode 100644 vendor/google.golang.org/appengine/appengine_vm.go create mode 100644 vendor/google.golang.org/appengine/blobstore/blobstore.go create mode 100644 vendor/google.golang.org/appengine/blobstore/blobstore_test.go create mode 100644 vendor/google.golang.org/appengine/blobstore/read.go create mode 100644 vendor/google.golang.org/appengine/capability/capability.go create mode 100644 vendor/google.golang.org/appengine/channel/channel.go create mode 100644 vendor/google.golang.org/appengine/channel/channel_test.go create mode 100644 vendor/google.golang.org/appengine/cloudsql/cloudsql.go create mode 100644 vendor/google.golang.org/appengine/cloudsql/cloudsql_classic.go create mode 100644 vendor/google.golang.org/appengine/cloudsql/cloudsql_vm.go create mode 100644 vendor/google.golang.org/appengine/cmd/aebundler/aebundler.go create mode 100644 vendor/google.golang.org/appengine/cmd/aedeploy/aedeploy.go create mode 100644 vendor/google.golang.org/appengine/cmd/aefix/ae.go create mode 100644 vendor/google.golang.org/appengine/cmd/aefix/ae_test.go create mode 100644 vendor/google.golang.org/appengine/cmd/aefix/fix.go create mode 100644 vendor/google.golang.org/appengine/cmd/aefix/main.go create mode 100644 vendor/google.golang.org/appengine/cmd/aefix/main_test.go create mode 100644 vendor/google.golang.org/appengine/cmd/aefix/typecheck.go create mode 100644 vendor/google.golang.org/appengine/datastore/datastore.go create mode 100644 vendor/google.golang.org/appengine/datastore/datastore_test.go create mode 100644 vendor/google.golang.org/appengine/datastore/doc.go create mode 100644 vendor/google.golang.org/appengine/datastore/key.go create mode 100644 vendor/google.golang.org/appengine/datastore/key_test.go create mode 100644 vendor/google.golang.org/appengine/datastore/load.go create mode 100644 vendor/google.golang.org/appengine/datastore/load_test.go create mode 100644 vendor/google.golang.org/appengine/datastore/metadata.go create mode 100644 vendor/google.golang.org/appengine/datastore/prop.go create mode 100644 vendor/google.golang.org/appengine/datastore/prop_test.go create mode 100644 vendor/google.golang.org/appengine/datastore/query.go create mode 100644 vendor/google.golang.org/appengine/datastore/query_test.go create mode 100644 vendor/google.golang.org/appengine/datastore/save.go create mode 100644 vendor/google.golang.org/appengine/datastore/time_test.go create mode 100644 vendor/google.golang.org/appengine/datastore/transaction.go create mode 100644 vendor/google.golang.org/appengine/delay/delay.go create mode 100644 vendor/google.golang.org/appengine/delay/delay_test.go create mode 100644 vendor/google.golang.org/appengine/demos/guestbook/app.yaml create mode 100644 vendor/google.golang.org/appengine/demos/guestbook/favicon.ico create mode 100644 vendor/google.golang.org/appengine/demos/guestbook/guestbook.go create mode 100644 vendor/google.golang.org/appengine/demos/guestbook/index.yaml create mode 100644 vendor/google.golang.org/appengine/demos/guestbook/templates/guestbook.html create mode 100644 vendor/google.golang.org/appengine/demos/helloworld/app.yaml create mode 100644 vendor/google.golang.org/appengine/demos/helloworld/favicon.ico create mode 100644 vendor/google.golang.org/appengine/demos/helloworld/helloworld.go create mode 100644 vendor/google.golang.org/appengine/errors.go create mode 100644 vendor/google.golang.org/appengine/file/file.go create mode 100644 vendor/google.golang.org/appengine/go.mod create mode 100644 vendor/google.golang.org/appengine/go.sum create mode 100644 vendor/google.golang.org/appengine/identity.go create mode 100644 vendor/google.golang.org/appengine/image/image.go create mode 100644 vendor/google.golang.org/appengine/internal/aetesting/fake.go create mode 100644 vendor/google.golang.org/appengine/internal/api.go create mode 100644 vendor/google.golang.org/appengine/internal/api_classic.go create mode 100644 vendor/google.golang.org/appengine/internal/api_common.go create mode 100644 vendor/google.golang.org/appengine/internal/api_race_test.go create mode 100644 vendor/google.golang.org/appengine/internal/api_test.go create mode 100644 vendor/google.golang.org/appengine/internal/app_id.go create mode 100644 vendor/google.golang.org/appengine/internal/app_id_test.go create mode 100644 vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/base/api_base.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/base/api_base.proto create mode 100644 vendor/google.golang.org/appengine/internal/blobstore/blobstore_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/blobstore/blobstore_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/capability/capability_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/capability/capability_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/channel/channel_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/channel/channel_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go create mode 100755 vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto create mode 100644 vendor/google.golang.org/appengine/internal/identity.go create mode 100644 vendor/google.golang.org/appengine/internal/identity_classic.go create mode 100644 vendor/google.golang.org/appengine/internal/identity_flex.go create mode 100644 vendor/google.golang.org/appengine/internal/identity_vm.go create mode 100644 vendor/google.golang.org/appengine/internal/image/images_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/image/images_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/internal.go create mode 100644 vendor/google.golang.org/appengine/internal/internal_vm_test.go create mode 100644 vendor/google.golang.org/appengine/internal/log/log_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/log/log_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/mail/mail_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/mail/mail_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/main.go create mode 100644 vendor/google.golang.org/appengine/internal/main_common.go create mode 100644 vendor/google.golang.org/appengine/internal/main_test.go create mode 100644 vendor/google.golang.org/appengine/internal/main_vm.go create mode 100644 vendor/google.golang.org/appengine/internal/memcache/memcache_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/memcache/memcache_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/metadata.go create mode 100644 vendor/google.golang.org/appengine/internal/modules/modules_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/modules/modules_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/net.go create mode 100644 vendor/google.golang.org/appengine/internal/net_test.go create mode 100755 vendor/google.golang.org/appengine/internal/regen.sh create mode 100644 vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto create mode 100644 vendor/google.golang.org/appengine/internal/search/search.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/search/search.proto create mode 100644 vendor/google.golang.org/appengine/internal/socket/socket_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/socket/socket_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/system/system_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/system/system_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/taskqueue/taskqueue_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/taskqueue/taskqueue_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/transaction.go create mode 100644 vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/user/user_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/user/user_service.proto create mode 100644 vendor/google.golang.org/appengine/internal/xmpp/xmpp_service.pb.go create mode 100644 vendor/google.golang.org/appengine/internal/xmpp/xmpp_service.proto create mode 100644 vendor/google.golang.org/appengine/log/api.go create mode 100644 vendor/google.golang.org/appengine/log/log.go create mode 100644 vendor/google.golang.org/appengine/log/log_test.go create mode 100644 vendor/google.golang.org/appengine/mail/mail.go create mode 100644 vendor/google.golang.org/appengine/mail/mail_test.go create mode 100644 vendor/google.golang.org/appengine/memcache/memcache.go create mode 100644 vendor/google.golang.org/appengine/memcache/memcache_test.go create mode 100644 vendor/google.golang.org/appengine/module/module.go create mode 100644 vendor/google.golang.org/appengine/module/module_test.go create mode 100644 vendor/google.golang.org/appengine/namespace.go create mode 100644 vendor/google.golang.org/appengine/namespace_test.go create mode 100644 vendor/google.golang.org/appengine/remote_api/client.go create mode 100644 vendor/google.golang.org/appengine/remote_api/client_test.go create mode 100644 vendor/google.golang.org/appengine/remote_api/remote_api.go create mode 100644 vendor/google.golang.org/appengine/runtime/runtime.go create mode 100644 vendor/google.golang.org/appengine/runtime/runtime_test.go create mode 100644 vendor/google.golang.org/appengine/search/doc.go create mode 100644 vendor/google.golang.org/appengine/search/field.go create mode 100644 vendor/google.golang.org/appengine/search/search.go create mode 100644 vendor/google.golang.org/appengine/search/search_test.go create mode 100644 vendor/google.golang.org/appengine/search/struct.go create mode 100644 vendor/google.golang.org/appengine/search/struct_test.go create mode 100644 vendor/google.golang.org/appengine/socket/doc.go create mode 100644 vendor/google.golang.org/appengine/socket/socket_classic.go create mode 100644 vendor/google.golang.org/appengine/socket/socket_vm.go create mode 100644 vendor/google.golang.org/appengine/taskqueue/taskqueue.go create mode 100644 vendor/google.golang.org/appengine/taskqueue/taskqueue_test.go create mode 100644 vendor/google.golang.org/appengine/timeout.go create mode 100755 vendor/google.golang.org/appengine/travis_install.sh create mode 100755 vendor/google.golang.org/appengine/travis_test.sh create mode 100644 vendor/google.golang.org/appengine/urlfetch/urlfetch.go create mode 100644 vendor/google.golang.org/appengine/user/oauth.go create mode 100644 vendor/google.golang.org/appengine/user/user.go create mode 100644 vendor/google.golang.org/appengine/user/user_classic.go create mode 100644 vendor/google.golang.org/appengine/user/user_test.go create mode 100644 vendor/google.golang.org/appengine/user/user_vm.go create mode 100644 vendor/google.golang.org/appengine/xmpp/xmpp.go create mode 100644 vendor/google.golang.org/appengine/xmpp/xmpp_test.go delete mode 100644 vendor/google.golang.org/genproto/.travis.yml create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/ad_type_infos.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/bidding.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/criteria.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/criterion_category_availability.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/custom_parameter.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/dates.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/explorer_auto_optimizer_setting.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/feed_common.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/frequency_cap.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/keyword_plan_common.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/matching_function.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/metrics.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/policy.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/real_time_bidding_setting.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/tag_snippet.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/user_lists.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/common/value.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/access_reason.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/account_budget_proposal_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/account_budget_proposal_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/account_budget_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/ad_customizer_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/ad_group_ad_rotation_mode.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/ad_group_ad_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/ad_group_criterion_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/ad_group_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/ad_group_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/ad_network_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/ad_serving_optimization_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/ad_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/advertising_channel_sub_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/advertising_channel_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/affiliate_location_feed_relationship_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/age_range_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/app_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/attribution_model.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/bid_modifier_source.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/bidding_source.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/bidding_strategy_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/billing_setup_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/budget_delivery_method.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/budget_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/call_conversion_reporting_state.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/call_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/callout_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/campaign_group_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/campaign_serving_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/campaign_shared_set_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/campaign_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/change_status_operation.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/change_status_resource_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/content_label_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/conversion_action_category.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/conversion_action_counting_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/conversion_action_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/conversion_action_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/criterion_category_channel_availability_mode.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/criterion_category_locale_availability_mode.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/criterion_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/custom_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/customer_match_upload_key_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/data_driven_model_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/day_of_week.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/device.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/display_ad_format_setting.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/education_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/feed_attribute_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/feed_item_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/feed_link_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/feed_mapping_criterion_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/feed_mapping_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/feed_origin.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/feed_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/flight_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/frequency_cap_event_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/frequency_cap_level.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/frequency_cap_time_unit.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/gender_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/geo_target_constant_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/geo_targeting_restriction.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/google_ads_field_category.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/google_ads_field_data_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/hotel_date_selection_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/hotel_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/income_range_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/interaction_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/job_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/keyword_match_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/keyword_plan_competition_level.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/keyword_plan_forecast_interval.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/keyword_plan_network.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/listing_custom_attribute_index.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/listing_group_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/local_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/manager_link_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/media_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/message_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/mime_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/minute_of_hour.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/month_of_year.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/page_one_promoted_strategy_goal.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/parental_status_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/placeholder_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/policy_approval_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/policy_review_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/policy_topic_entry_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/policy_topic_evidence_destination_mismatch_url_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/preferred_content_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/price_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/product_channel.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/product_channel_exclusivity.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/product_condition.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/product_type_level.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/promotion_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/proximity_radius_units.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/quality_score_bucket.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/real_estate_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/recommendation_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/search_term_match_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/search_term_targeting_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/shared_set_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/shared_set_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/sitelink_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/slot.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/spending_limit_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/structured_snippet_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/target_cpa_opt_in_recommendation_goal.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/targeting_dimension.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/time_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/tracking_code_page_format.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/tracking_code_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/travel_placeholder_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/user_interest_taxonomy_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/user_list_access_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/user_list_closing_reason.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/user_list_crm_data_source_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/user_list_membership_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/user_list_size_range.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/enums/user_list_type.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/account_budget_proposal_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/ad_customizer_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/ad_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/ad_group_ad_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/ad_group_bid_modifier_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/ad_group_criterion_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/ad_group_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/ad_group_feed_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/ad_sharing_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/adx_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/authentication_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/authorization_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/bidding_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/bidding_strategy_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/billing_setup_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/campaign_budget_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/campaign_criterion_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/campaign_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/campaign_feed_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/campaign_group_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/campaign_shared_set_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/change_status_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/collection_size_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/context_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/conversion_action_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/criterion_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/customer_client_link_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/customer_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/customer_feed_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/customer_manager_link_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/database_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/date_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/date_range_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/distinct_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/enum_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/errors.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/feed_attribute_reference_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/feed_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/feed_item_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/feed_mapping_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/field_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/field_mask_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/function_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/function_parsing_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/geo_target_constant_suggestion_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/header_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/id_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/image_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/internal_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/keyword_plan_ad_group_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/keyword_plan_campaign_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/keyword_plan_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/keyword_plan_idea_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/keyword_plan_keyword_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/keyword_plan_negative_keyword_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/list_operation_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/media_bundle_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/media_file_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/multiplier_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/mutate_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/new_resource_creation_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/not_empty_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/null_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/operation_access_denied_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/operator_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/policy_finding_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/query_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/quota_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/range_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/recommendation_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/region_code_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/request_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/resource_access_denied_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/resource_count_limit_exceeded_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/setting_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/shared_criterion_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/shared_set_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/string_format_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/string_length_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/url_field_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/errors/user_list_error.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/account_budget.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/account_budget_proposal.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/ad.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/ad_group.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/ad_group_ad.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/ad_group_audience_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/ad_group_bid_modifier.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/ad_group_criterion.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/ad_group_feed.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/age_range_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/bidding_strategy.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/billing_setup.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/campaign.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/campaign_audience_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/campaign_bid_modifier.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/campaign_budget.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/campaign_criterion.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/campaign_feed.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/campaign_group.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/campaign_shared_set.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/carrier_constant.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/change_status.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/conversion_action.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/customer.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/customer_client.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/customer_client_link.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/customer_feed.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/customer_manager_link.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/display_keyword_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/feed.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/feed_item.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/feed_mapping.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/gender_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/geo_target_constant.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/google_ads_field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/hotel_group_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/hotel_performance_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/keyword_plan.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/keyword_plan_ad_group.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/keyword_plan_campaign.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/keyword_plan_keyword.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/keyword_plan_negative_keyword.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/keyword_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/language_constant.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/managed_placement_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/media_file.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/parental_status_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/payments_account.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/product_group_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/recommendation.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/search_term_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/shared_criterion.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/shared_set.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/topic_constant.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/topic_view.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/user_interest.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/user_list.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/resources/video.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/account_budget_proposal_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/account_budget_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/ad_group_ad_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/ad_group_audience_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/ad_group_bid_modifier_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/ad_group_criterion_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/ad_group_feed_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/ad_group_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/age_range_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/bidding_strategy_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/billing_setup_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/campaign_audience_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/campaign_bid_modifier_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/campaign_budget_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/campaign_criterion_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/campaign_feed_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/campaign_group_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/campaign_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/campaign_shared_set_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/carrier_constant_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/change_status_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/conversion_action_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/customer_client_link_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/customer_client_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/customer_feed_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/customer_manager_link_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/customer_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/display_keyword_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/feed_item_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/feed_mapping_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/feed_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/gender_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/geo_target_constant_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/google_ads_field_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/google_ads_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/hotel_group_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/hotel_performance_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/keyword_plan_ad_group_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/keyword_plan_campaign_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/keyword_plan_idea_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/keyword_plan_keyword_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/keyword_plan_negative_keyword_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/keyword_plan_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/keyword_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/language_constant_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/managed_placement_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/media_file_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/parental_status_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/payments_account_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/product_group_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/recommendation_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/search_term_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/shared_criterion_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/shared_set_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/topic_constant_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/topic_view_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/user_interest_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/user_list_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/ads/googleads/v0/services/video_service.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/admin/v1/field.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/admin/v1/firestore_admin.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/admin/v1/index.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/admin/v1/location.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/admin/v1/operation.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/admin/v1beta1/location.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/v1/common.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/v1/document.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/v1/firestore.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/v1/query.pb.go create mode 100644 vendor/google.golang.org/genproto/googleapis/firestore/v1/write.pb.go create mode 100755 vendor/google.golang.org/genproto/internal/kokoro/check_incompat_changes.sh create mode 100755 vendor/google.golang.org/genproto/internal/kokoro/test.sh create mode 100644 vendor/google.golang.org/genproto/internal/kokoro/trampoline.sh create mode 100755 vendor/google.golang.org/genproto/internal/kokoro/vet.sh delete mode 100644 vendor/google.golang.org/grpc/benchmark/benchmark16_test.go rename vendor/google.golang.org/grpc/benchmark/{benchmark17_test.go => benchmark_test.go} (99%) delete mode 100644 vendor/google.golang.org/grpc/credentials/go16.go delete mode 100644 vendor/google.golang.org/grpc/credentials/go17.go delete mode 100644 vendor/google.golang.org/grpc/credentials/go18.go delete mode 100644 vendor/google.golang.org/grpc/credentials/go19.go create mode 100644 vendor/google.golang.org/grpc/credentials/internal/syscallconn.go rename vendor/google.golang.org/grpc/{resolver/dns/pre_go18_test.go => credentials/internal/syscallconn_appengine.go} (76%) create mode 100644 vendor/google.golang.org/grpc/credentials/internal/syscallconn_test.go delete mode 100644 vendor/google.golang.org/grpc/go16.go delete mode 100644 vendor/google.golang.org/grpc/go17.go create mode 100644 vendor/google.golang.org/grpc/health/client.go create mode 100644 vendor/google.golang.org/grpc/health/client_test.go rename vendor/google.golang.org/grpc/health/{health.go => server.go} (81%) rename vendor/google.golang.org/grpc/health/{health_test.go => server_test.go} (88%) create mode 100644 vendor/google.golang.org/grpc/internal/binarylog/binarylog_end2end_test.go create mode 100644 vendor/google.golang.org/grpc/internal/binarylog/binarylog_testutil.go rename vendor/google.golang.org/grpc/internal/channelz/{util_linux_go19.go => util_linux.go} (96%) rename vendor/google.golang.org/grpc/internal/channelz/{util_nonlinux_pre_go19.go => util_nonlinux.go} (95%) delete mode 100644 vendor/google.golang.org/grpc/internal/transport/go16.go delete mode 100644 vendor/google.golang.org/grpc/internal/transport/go17.go delete mode 100644 vendor/google.golang.org/grpc/naming/go17.go delete mode 100644 vendor/google.golang.org/grpc/naming/go17_test.go delete mode 100644 vendor/google.golang.org/grpc/naming/go18.go delete mode 100644 vendor/google.golang.org/grpc/naming/go18_test.go delete mode 100644 vendor/google.golang.org/grpc/resolver/dns/dns_resolver_go19_test.go delete mode 100644 vendor/google.golang.org/grpc/resolver/dns/go18_test.go delete mode 100644 vendor/google.golang.org/grpc/resolver/dns/go19.go delete mode 100644 vendor/google.golang.org/grpc/resolver/dns/pre_go19.go delete mode 100644 vendor/google.golang.org/grpc/status/go16.go delete mode 100644 vendor/google.golang.org/grpc/status/go17.go delete mode 100644 vendor/google.golang.org/grpc/status/go17_test.go create mode 100644 vendor/google.golang.org/grpc/test/healthcheck_test.go create mode 100644 vendor/k8s.io/api/SECURITY_CONTACTS delete mode 100644 vendor/k8s.io/api/admission/v1beta1/BUILD delete mode 100644 vendor/k8s.io/api/admissionregistration/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/api/admissionregistration/v1beta1/BUILD delete mode 100644 vendor/k8s.io/api/apps/v1/BUILD delete mode 100644 vendor/k8s.io/api/apps/v1beta1/BUILD delete mode 100644 vendor/k8s.io/api/apps/v1beta2/BUILD create mode 100644 vendor/k8s.io/api/auditregistration/OWNERS rename vendor/k8s.io/{client-go/tools/bootstrap/token/api => api/auditregistration/v1alpha1}/doc.go (63%) create mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/generated.pb.go create mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/generated.proto create mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/register.go create mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/types.go create mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/api/authentication/v1/BUILD delete mode 100644 vendor/k8s.io/api/authentication/v1beta1/BUILD delete mode 100644 vendor/k8s.io/api/authorization/v1/BUILD delete mode 100644 vendor/k8s.io/api/authorization/v1beta1/BUILD delete mode 100644 vendor/k8s.io/api/autoscaling/v1/BUILD delete mode 100644 vendor/k8s.io/api/autoscaling/v2beta1/BUILD create mode 100644 vendor/k8s.io/api/autoscaling/v2beta2/doc.go create mode 100644 vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go create mode 100644 vendor/k8s.io/api/autoscaling/v2beta2/generated.proto create mode 100644 vendor/k8s.io/api/autoscaling/v2beta2/register.go create mode 100644 vendor/k8s.io/api/autoscaling/v2beta2/types.go create mode 100644 vendor/k8s.io/api/autoscaling/v2beta2/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/api/batch/v1/BUILD delete mode 100644 vendor/k8s.io/api/batch/v1beta1/BUILD delete mode 100644 vendor/k8s.io/api/batch/v2alpha1/BUILD delete mode 100644 vendor/k8s.io/api/certificates/v1beta1/BUILD create mode 100644 vendor/k8s.io/api/coordination/v1beta1/doc.go create mode 100644 vendor/k8s.io/api/coordination/v1beta1/generated.pb.go create mode 100644 vendor/k8s.io/api/coordination/v1beta1/generated.proto create mode 100644 vendor/k8s.io/api/coordination/v1beta1/register.go create mode 100644 vendor/k8s.io/api/coordination/v1beta1/types.go create mode 100644 vendor/k8s.io/api/coordination/v1beta1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/api/core/v1/BUILD delete mode 100644 vendor/k8s.io/api/core/v1/meta.go delete mode 100644 vendor/k8s.io/api/events/v1beta1/BUILD delete mode 100644 vendor/k8s.io/api/extensions/v1beta1/BUILD delete mode 100644 vendor/k8s.io/api/imagepolicy/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/api/networking/v1/BUILD delete mode 100644 vendor/k8s.io/api/policy/v1beta1/BUILD delete mode 100644 vendor/k8s.io/api/rbac/v1/BUILD delete mode 100644 vendor/k8s.io/api/rbac/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/api/rbac/v1beta1/BUILD create mode 100644 vendor/k8s.io/api/roundtrip_test.go delete mode 100644 vendor/k8s.io/api/scheduling/v1alpha1/BUILD create mode 100644 vendor/k8s.io/api/scheduling/v1beta1/doc.go create mode 100644 vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go create mode 100644 vendor/k8s.io/api/scheduling/v1beta1/generated.proto create mode 100644 vendor/k8s.io/api/scheduling/v1beta1/register.go create mode 100644 vendor/k8s.io/api/scheduling/v1beta1/types.go create mode 100644 vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/scheduling/v1beta1/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/api/settings/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/api/storage/v1/BUILD delete mode 100644 vendor/k8s.io/api/storage/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/api/storage/v1beta1/BUILD create mode 100644 vendor/k8s.io/client-go/SECURITY_CONTACTS create mode 100644 vendor/k8s.io/client-go/deprecated-dynamic/bad_debt.go create mode 100644 vendor/k8s.io/client-go/deprecated-dynamic/client.go rename vendor/k8s.io/client-go/{dynamic => deprecated-dynamic}/client_pool.go (98%) create mode 100644 vendor/k8s.io/client-go/deprecated-dynamic/client_test.go delete mode 100644 vendor/k8s.io/client-go/discovery/BUILD delete mode 100644 vendor/k8s.io/client-go/discovery/cached/BUILD create mode 100644 vendor/k8s.io/client-go/discovery/cached_discovery.go create mode 100644 vendor/k8s.io/client-go/discovery/cached_discovery_test.go create mode 100644 vendor/k8s.io/client-go/discovery/doc.go delete mode 100644 vendor/k8s.io/client-go/discovery/fake/BUILD create mode 100644 vendor/k8s.io/client-go/discovery/round_tripper.go create mode 100644 vendor/k8s.io/client-go/discovery/round_tripper_test.go delete mode 100644 vendor/k8s.io/client-go/discovery/unstructured.go delete mode 100644 vendor/k8s.io/client-go/dynamic/BUILD delete mode 100644 vendor/k8s.io/client-go/dynamic/client.go delete mode 100644 vendor/k8s.io/client-go/dynamic/dynamic_util.go delete mode 100644 vendor/k8s.io/client-go/dynamic/dynamic_util_test.go create mode 100644 vendor/k8s.io/client-go/dynamic/dynamicinformer/informer.go create mode 100644 vendor/k8s.io/client-go/dynamic/dynamicinformer/informer_test.go create mode 100644 vendor/k8s.io/client-go/dynamic/dynamicinformer/interface.go create mode 100644 vendor/k8s.io/client-go/dynamic/dynamiclister/interface.go create mode 100644 vendor/k8s.io/client-go/dynamic/dynamiclister/lister.go create mode 100644 vendor/k8s.io/client-go/dynamic/dynamiclister/lister_test.go create mode 100644 vendor/k8s.io/client-go/dynamic/dynamiclister/shim.go delete mode 100644 vendor/k8s.io/client-go/dynamic/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/dynamic/fake/client.go delete mode 100644 vendor/k8s.io/client-go/dynamic/fake/client_pool.go create mode 100644 vendor/k8s.io/client-go/dynamic/fake/simple.go create mode 100644 vendor/k8s.io/client-go/dynamic/fake/simple_test.go create mode 100644 vendor/k8s.io/client-go/dynamic/interface.go create mode 100644 vendor/k8s.io/client-go/dynamic/scheme.go create mode 100644 vendor/k8s.io/client-go/dynamic/simple.go delete mode 100644 vendor/k8s.io/client-go/examples/create-update-delete-deployment/BUILD create mode 100644 vendor/k8s.io/client-go/examples/fake-client/README.md create mode 100644 vendor/k8s.io/client-go/examples/fake-client/doc.go create mode 100644 vendor/k8s.io/client-go/examples/fake-client/main_test.go delete mode 100644 vendor/k8s.io/client-go/examples/in-cluster-client-configuration/BUILD delete mode 100644 vendor/k8s.io/client-go/examples/out-of-cluster-client-configuration/BUILD delete mode 100644 vendor/k8s.io/client-go/examples/workqueue/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/admissionregistration/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/admissionregistration/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/admissionregistration/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/apps/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/apps/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/apps/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/apps/v1beta2/BUILD create mode 100644 vendor/k8s.io/client-go/informers/auditregistration/interface.go create mode 100644 vendor/k8s.io/client-go/informers/auditregistration/v1alpha1/auditsink.go create mode 100644 vendor/k8s.io/client-go/informers/auditregistration/v1alpha1/interface.go delete mode 100644 vendor/k8s.io/client-go/informers/autoscaling/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/autoscaling/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/autoscaling/v2beta1/BUILD create mode 100644 vendor/k8s.io/client-go/informers/autoscaling/v2beta2/horizontalpodautoscaler.go create mode 100644 vendor/k8s.io/client-go/informers/autoscaling/v2beta2/interface.go delete mode 100644 vendor/k8s.io/client-go/informers/batch/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/batch/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/batch/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/batch/v2alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/certificates/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/certificates/v1beta1/BUILD create mode 100644 vendor/k8s.io/client-go/informers/coordination/interface.go create mode 100644 vendor/k8s.io/client-go/informers/coordination/v1beta1/interface.go create mode 100644 vendor/k8s.io/client-go/informers/coordination/v1beta1/lease.go delete mode 100644 vendor/k8s.io/client-go/informers/core/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/core/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/events/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/events/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/extensions/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/extensions/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/internalinterfaces/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/networking/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/networking/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/policy/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/policy/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/rbac/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/rbac/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/rbac/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/rbac/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/scheduling/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/scheduling/v1alpha1/BUILD create mode 100644 vendor/k8s.io/client-go/informers/scheduling/v1beta1/interface.go create mode 100644 vendor/k8s.io/client-go/informers/scheduling/v1beta1/priorityclass.go delete mode 100644 vendor/k8s.io/client-go/informers/settings/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/settings/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/storage/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/storage/v1/BUILD create mode 100644 vendor/k8s.io/client-go/informers/storage/v1/volumeattachment.go delete mode 100644 vendor/k8s.io/client-go/informers/storage/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/informers/storage/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/scheme/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake/BUILD create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditregistration_client.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditsink.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/doc.go rename vendor/k8s.io/client-go/kubernetes/typed/{apps/v1beta2/fake/fake_scale.go => auditregistration/v1alpha1/fake/doc.go} (80%) rename vendor/k8s.io/client-go/kubernetes/typed/{apps/v1beta1/scale.go => auditregistration/v1alpha1/fake/fake_auditregistration_client.go} (51%) create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/fake/fake_auditsink.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/generated_expansion.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/authentication/OWNERS delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/BUILD create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/authorization/OWNERS delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake/BUILD create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/doc.go rename vendor/k8s.io/client-go/kubernetes/typed/{apps/v1beta1/fake/fake_scale.go => autoscaling/v2beta2/fake/doc.go} (80%) rename vendor/k8s.io/client-go/kubernetes/typed/{apps/v1beta2/scale.go => autoscaling/v2beta2/fake/fake_autoscaling_client.go} (51%) create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/fake/fake_horizontalpodautoscaler.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/generated_expansion.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/horizontalpodautoscaler.go delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/batch/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/batch/v1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/BUILD create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go rename vendor/k8s.io/client-go/kubernetes/typed/{extensions/v1beta1/fake/fake_scale.go => coordination/v1beta1/fake/doc.go} (79%) create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/fake/fake_coordination_client.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/fake/fake_lease.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/core/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_scale_expansion.go delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale.go delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale_expansion.go delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/BUILD create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/rbac/OWNERS delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake/BUILD create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/doc.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/fake/doc.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/fake/fake_priorityclass.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/fake/fake_scheduling_client.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/generated_expansion.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/priorityclass.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/BUILD create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/fake/fake_volumeattachment.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/storage/v1/volumeattachment.go delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/BUILD create mode 100644 vendor/k8s.io/client-go/kubernetes_test/timeout_test.go delete mode 100644 vendor/k8s.io/client-go/listers/admissionregistration/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/admissionregistration/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/apps/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/apps/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/apps/v1beta1/scale.go delete mode 100644 vendor/k8s.io/client-go/listers/apps/v1beta2/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/apps/v1beta2/scale.go create mode 100644 vendor/k8s.io/client-go/listers/auditregistration/v1alpha1/auditsink.go create mode 100644 vendor/k8s.io/client-go/listers/auditregistration/v1alpha1/expansion_generated.go create mode 100644 vendor/k8s.io/client-go/listers/authentication/OWNERS delete mode 100644 vendor/k8s.io/client-go/listers/authentication/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/authentication/v1beta1/BUILD create mode 100644 vendor/k8s.io/client-go/listers/authorization/OWNERS delete mode 100644 vendor/k8s.io/client-go/listers/authorization/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/authorization/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/autoscaling/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/autoscaling/v2beta1/BUILD create mode 100644 vendor/k8s.io/client-go/listers/autoscaling/v2beta2/expansion_generated.go create mode 100644 vendor/k8s.io/client-go/listers/autoscaling/v2beta2/horizontalpodautoscaler.go delete mode 100644 vendor/k8s.io/client-go/listers/batch/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/batch/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/batch/v2alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/certificates/v1beta1/BUILD create mode 100644 vendor/k8s.io/client-go/listers/coordination/v1beta1/expansion_generated.go create mode 100644 vendor/k8s.io/client-go/listers/coordination/v1beta1/lease.go delete mode 100644 vendor/k8s.io/client-go/listers/core/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/events/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/extensions/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/extensions/v1beta1/scale.go delete mode 100644 vendor/k8s.io/client-go/listers/imagepolicy/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/networking/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/policy/v1beta1/BUILD create mode 100644 vendor/k8s.io/client-go/listers/rbac/OWNERS delete mode 100644 vendor/k8s.io/client-go/listers/rbac/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/rbac/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/rbac/v1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/scheduling/v1alpha1/BUILD create mode 100644 vendor/k8s.io/client-go/listers/scheduling/v1beta1/expansion_generated.go create mode 100644 vendor/k8s.io/client-go/listers/scheduling/v1beta1/priorityclass.go delete mode 100644 vendor/k8s.io/client-go/listers/settings/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/storage/v1/BUILD create mode 100644 vendor/k8s.io/client-go/listers/storage/v1/volumeattachment.go delete mode 100644 vendor/k8s.io/client-go/listers/storage/v1alpha1/BUILD delete mode 100644 vendor/k8s.io/client-go/listers/storage/v1beta1/BUILD create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/install/install.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/conversion.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/doc.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/register.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/types.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.conversion.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.defaults.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/client-go/pkg/version/BUILD delete mode 100644 vendor/k8s.io/client-go/plugin/pkg/client/auth/BUILD create mode 100644 vendor/k8s.io/client-go/plugin/pkg/client/auth/OWNERS delete mode 100644 vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/BUILD create mode 100644 vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go create mode 100644 vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec_test.go create mode 100755 vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/testdata/test-plugin.sh delete mode 100644 vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/BUILD delete mode 100644 vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/BUILD delete mode 100644 vendor/k8s.io/client-go/plugin/pkg/client/auth/openstack/BUILD delete mode 100644 vendor/k8s.io/client-go/rest/BUILD delete mode 100644 vendor/k8s.io/client-go/rest/fake/BUILD rename vendor/k8s.io/{kubernetes/staging/src/k8s.io => }/client-go/rest/token_source.go (100%) rename vendor/k8s.io/{kubernetes/staging/src/k8s.io => }/client-go/rest/token_source_test.go (100%) delete mode 100644 vendor/k8s.io/client-go/rest/watch/BUILD create mode 100644 vendor/k8s.io/client-go/restmapper/category_expansion.go create mode 100644 vendor/k8s.io/client-go/restmapper/category_expansion_test.go rename vendor/k8s.io/client-go/{discovery/restmapper.go => restmapper/discovery.go} (89%) rename vendor/k8s.io/client-go/{discovery/restmapper_test.go => restmapper/discovery_test.go} (98%) create mode 100644 vendor/k8s.io/client-go/restmapper/shortcut.go create mode 100644 vendor/k8s.io/client-go/restmapper/shortcut_test.go delete mode 100644 vendor/k8s.io/client-go/scale/BUILD delete mode 100644 vendor/k8s.io/client-go/scale/fake/BUILD delete mode 100644 vendor/k8s.io/client-go/scale/scheme/BUILD delete mode 100644 vendor/k8s.io/client-go/scale/scheme/appsint/BUILD delete mode 100644 vendor/k8s.io/client-go/scale/scheme/appsv1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/scale/scheme/appsv1beta2/BUILD delete mode 100644 vendor/k8s.io/client-go/scale/scheme/autoscalingv1/BUILD delete mode 100644 vendor/k8s.io/client-go/scale/scheme/extensionsint/BUILD delete mode 100644 vendor/k8s.io/client-go/scale/scheme/extensionsv1beta1/BUILD delete mode 100644 vendor/k8s.io/client-go/testing/BUILD delete mode 100644 vendor/k8s.io/client-go/third_party/forked/golang/template/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/auth/BUILD create mode 100644 vendor/k8s.io/client-go/tools/auth/OWNERS delete mode 100644 vendor/k8s.io/client-go/tools/bootstrap/token/api/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/bootstrap/token/api/OWNERS delete mode 100644 vendor/k8s.io/client-go/tools/bootstrap/token/api/types.go delete mode 100644 vendor/k8s.io/client-go/tools/bootstrap/token/util/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/bootstrap/token/util/helpers.go delete mode 100644 vendor/k8s.io/client-go/tools/bootstrap/token/util/helpers_test.go delete mode 100644 vendor/k8s.io/client-go/tools/cache/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/cache/testing/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/clientcmd/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/clientcmd/api/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/clientcmd/api/latest/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/clientcmd/api/v1/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/leaderelection/BUILD create mode 100644 vendor/k8s.io/client-go/tools/leaderelection/healthzadaptor.go create mode 100644 vendor/k8s.io/client-go/tools/leaderelection/healthzadaptor_test.go delete mode 100644 vendor/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/metrics/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/pager/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/portforward/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/record/BUILD delete mode 100644 vendor/k8s.io/client-go/tools/reference/BUILD create mode 100644 vendor/k8s.io/client-go/tools/reference/ref_test.go delete mode 100644 vendor/k8s.io/client-go/tools/remotecommand/BUILD create mode 100644 vendor/k8s.io/client-go/tools/remotecommand/reader.go create mode 100644 vendor/k8s.io/client-go/tools/watch/informerwatcher.go create mode 100644 vendor/k8s.io/client-go/tools/watch/informerwatcher_test.go create mode 100644 vendor/k8s.io/client-go/tools/watch/until.go create mode 100644 vendor/k8s.io/client-go/tools/watch/until_test.go delete mode 100644 vendor/k8s.io/client-go/transport/BUILD delete mode 100644 vendor/k8s.io/client-go/transport/spdy/BUILD delete mode 100644 vendor/k8s.io/client-go/util/buffer/BUILD delete mode 100644 vendor/k8s.io/client-go/util/cert/BUILD create mode 100644 vendor/k8s.io/client-go/util/cert/OWNERS delete mode 100644 vendor/k8s.io/client-go/util/cert/triple/BUILD delete mode 100644 vendor/k8s.io/client-go/util/cert/triple/triple.go delete mode 100644 vendor/k8s.io/client-go/util/certificate/BUILD delete mode 100644 vendor/k8s.io/client-go/util/certificate/csr/BUILD delete mode 100644 vendor/k8s.io/client-go/util/certificate/csr/csr_test.go create mode 100644 vendor/k8s.io/client-go/util/connrotation/connrotation.go create mode 100644 vendor/k8s.io/client-go/util/connrotation/connrotation_test.go delete mode 100644 vendor/k8s.io/client-go/util/exec/BUILD delete mode 100644 vendor/k8s.io/client-go/util/flowcontrol/BUILD delete mode 100644 vendor/k8s.io/client-go/util/homedir/BUILD delete mode 100644 vendor/k8s.io/client-go/util/integer/BUILD delete mode 100644 vendor/k8s.io/client-go/util/jsonpath/BUILD delete mode 100644 vendor/k8s.io/client-go/util/retry/BUILD delete mode 100644 vendor/k8s.io/client-go/util/testing/BUILD delete mode 100644 vendor/k8s.io/client-go/util/workqueue/BUILD create mode 100644 vendor/k8s.io/client-go/util/workqueue/metrics_test.go create mode 100644 vendor/k8s.io/kubernetes/cluster/addons/calico-policy-controller/bgpconfigurations-crd.yaml create mode 100644 vendor/k8s.io/kubernetes/hack/testdata/diff/configmap.yaml create mode 100644 vendor/k8s.io/kubernetes/hack/testdata/diff/deployment.yaml create mode 100644 vendor/k8s.io/kubernetes/hack/testdata/diff/pod.yaml create mode 100644 vendor/k8s.io/kubernetes/hack/testdata/diff/secret.yaml create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2beta1/conversion_test.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_volumes_linux_test.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/util/boottime_util_darwin.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/util/boottime_util_linux.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_test.go create mode 100644 vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/transport/token_source.go create mode 100644 vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/transport/token_source_test.go create mode 100644 vendor/k8s.io/utils/SECURITY_CONTACTS rename vendor/{github.com/ghodss => sigs.k8s.io}/yaml/.gitignore (100%) create mode 100644 vendor/sigs.k8s.io/yaml/.travis.yml create mode 100644 vendor/sigs.k8s.io/yaml/CONTRIBUTING.md rename vendor/{github.com/ghodss => sigs.k8s.io}/yaml/LICENSE (100%) create mode 100644 vendor/sigs.k8s.io/yaml/OWNERS rename vendor/{github.com/ghodss => sigs.k8s.io}/yaml/README.md (100%) create mode 100644 vendor/sigs.k8s.io/yaml/RELEASE.md create mode 100644 vendor/sigs.k8s.io/yaml/SECURITY_CONTACTS create mode 100644 vendor/sigs.k8s.io/yaml/code-of-conduct.md rename vendor/{github.com/ghodss => sigs.k8s.io}/yaml/fields.go (99%) rename vendor/{github.com/ghodss => sigs.k8s.io}/yaml/yaml.go (77%) create mode 100644 vendor/sigs.k8s.io/yaml/yaml_go110.go create mode 100644 vendor/sigs.k8s.io/yaml/yaml_go110_test.go rename vendor/{github.com/ghodss => sigs.k8s.io}/yaml/yaml_test.go (62%) diff --git a/Gopkg.lock b/Gopkg.lock index 0c063d49d..154515d23 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -9,14 +9,6 @@ revision = "ed0bb0e1557548aa028307f48728767cfe8f6345" version = "v1.0.0" -[[projects]] - digest = "1:b13707423743d41665fd23f0c36b2f37bb49c30e94adb813319c44188a51ba22" - name = "github.com/ghodss/yaml" - packages = ["."] - pruneopts = "" - revision = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7" - version = "v1.0.0" - [[projects]] digest = "1:527e1e468c5586ef2645d143e9f5fbd50b4fe5abc8b1e25d9f1c416d22d24895" name = "github.com/gogo/protobuf" @@ -40,6 +32,7 @@ digest = "1:3dd078fda7500c341bc26cfbc6c6a34614f295a2457149fc1045cab767cbcf18" name = "github.com/golang/protobuf" packages = [ + "descriptor", "proto", "protoc-gen-go/descriptor", "ptypes", @@ -52,6 +45,22 @@ revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" version = "v1.2.0" +[[projects]] + branch = "master" + digest = "1:1e5b1e14524ed08301977b7b8e10c719ed853cbf3f24ecb66fae783a46f207a6" + name = "github.com/google/btree" + packages = ["."] + pruneopts = "" + revision = "4030bb1f1f0c35b30ca7009e9ebd06849dd45306" + +[[projects]] + branch = "master" + digest = "1:754f77e9c839b24778a4b64422236d38515301d2baeb63113aa3edc42e6af692" + name = "github.com/google/gofuzz" + packages = ["."] + pruneopts = "" + revision = "24818f796faf91cd76ec7bddd72458fbced7a6c1" + [[projects]] digest = "1:a25a2c5ae694b01713fb6cd03c3b1ac1ccc1902b9f0a922680a88ec254f968e1" name = "github.com/google/uuid" @@ -60,15 +69,6 @@ revision = "9b3b1e0f5f99ae461456d768e7d301a7acdaa2d8" version = "v1.1.0" -[[projects]] - branch = "master" - digest = "1:01f6264649510cce626f907688df44f80c8ba788d064756701d85c51f21eb0d6" - digest = "1:754f77e9c839b24778a4b64422236d38515301d2baeb63113aa3edc42e6af692" - name = "github.com/google/gofuzz" - packages = ["."] - pruneopts = "" - revision = "24818f796faf91cd76ec7bddd72458fbced7a6c1" - [[projects]] digest = "1:16b2837c8b3cf045fa2cdc82af0cf78b19582701394484ae76b2c3bc3c99ad73" name = "github.com/googleapis/gnostic" @@ -83,11 +83,14 @@ [[projects]] branch = "master" - digest = "1:f81c8d7354cc0c6340f2f7a48724ee6c2b3db3e918ecd441c985b4d2d97dd3e7" - name = "github.com/howeyc/gopass" - packages = ["."] + digest = "1:5e345eb75d8bfb2b91cfbfe02a82a79c0b2ea55cf06c5a4d180a9321f36973b4" + name = "github.com/gregjones/httpcache" + packages = [ + ".", + "diskcache", + ] pruneopts = "" - revision = "bf9dde6d0d2c004a008c27aaee91170c786f6db8" + revision = "c63ab54fda8f77302f8d414e19933f2b6026a089" [[projects]] digest = "1:7ab38c15bd21e056e3115c8b526d201eaf74e0308da9370997c6b3c187115d36" @@ -105,19 +108,23 @@ revision = "1624edc4454b8682399def8740d46db5e4362ba4" version = "v1.1.5" +[[projects]] + digest = "1:d1f1992c09d7b77bc5102cd8c369025d31d28dd5e6ca2a3a1a4ec9434724a4f5" + name = "github.com/kubernetes-csi/csi-lib-utils" + packages = ["protosanitizer"] + pruneopts = "" + revision = "5853414e1d4771302e0df10d1870c444c2135799" + version = "v0.2.0" + [[projects]] branch = "master" - digest = "1:941f9605aec45f9e849500c1d315662401982efe492277d1a3bbf5488567321d" ->>>>>>> master + digest = "1:5031afaa62ff480905e90bed2d2fd74f07b12f4c0c30304bc4ab9472b55439d1" name = "github.com/kubernetes-csi/drivers" packages = ["pkg/csi-common"] pruneopts = "" - revision = "8a7f2d3a4057ddcff31b7898bd4413dfdf3a3b67" + revision = "05e1ea84df03b90296869812fa42f4244bd5ab53" [[projects]] -<<<<<<< HEAD - digest = "1:a5484d4fa43127138ae6e7b2299a6a52ae006c7f803d98d717f60abf3e97192e" -======= digest = "1:0c0ff2a89c1bb0d01887e1dac043ad7efbf3ec77482ef058ac423d13497e16fd" name = "github.com/modern-go/concurrent" packages = ["."] @@ -134,8 +141,7 @@ version = "1.0.1" [[projects]] - digest = "1:63e142fc50307bcb3c57494913cfc9c12f6061160bdf97a678f78c71615f939b" ->>>>>>> master + digest = "1:a5484d4fa43127138ae6e7b2299a6a52ae006c7f803d98d717f60abf3e97192e" name = "github.com/pborman/uuid" packages = ["."] pruneopts = "" @@ -143,12 +149,28 @@ version = "v1.2" [[projects]] - digest = "1:7365acd48986e205ccb8652cc746f09c8b7876030d53710ea6ef7d0bd0dcd7ca" + branch = "master" + digest = "1:c24598ffeadd2762552269271b3b1510df2d83ee6696c1e543a0ff653af494bc" + name = "github.com/petar/GoLLRB" + packages = ["llrb"] + pruneopts = "" + revision = "53be0d36a84c2a886ca057d34b6aa4468df9ccb4" + +[[projects]] + digest = "1:b46305723171710475f2dd37547edd57b67b9de9f2a6267cafdd98331fd6897f" + name = "github.com/peterbourgon/diskv" + packages = ["."] + pruneopts = "" + revision = "5f041e8faa004a95c88a202771f4cc3e991971e6" + version = "v2.0.1" + +[[projects]] + digest = "1:1d7e1867c49a6dd9856598ef7c3123604ea3daabf5b83f303ff457bcbc410b1d" name = "github.com/pkg/errors" packages = ["."] pruneopts = "" - revision = "645ef00459ed84a119197bfb8d8205042c6df63d" - version = "v0.8.0" + revision = "ba968bfe8b2f7e042a574c888954fccecfa385b4" + version = "v0.8.1" [[projects]] digest = "1:cbaf13cdbfef0e4734ed8a7504f57fe893d471d62a35b982bf6fb3f036449a66" @@ -160,18 +182,19 @@ [[projects]] branch = "master" - digest = "1:887074c37fcefc2f49b5ae9c6f9f36107341aec23185613d0e9f1ee81db7f94a" + digest = "1:59b49c47c11a48f1054529207f65907c014ecf5f9a7c0d9c0f1616dec7b062ed" name = "golang.org/x/crypto" packages = ["ssh/terminal"] pruneopts = "" - revision = "505ab145d0a99da450461ae2c1a9f6cd10d1f447" + revision = "ff983b9c42bc9fbf91556e191cc8efb585c16908" [[projects]] branch = "master" - digest = "1:ea539c13b066dac72a940b62f37600a20ab8e88057397c78f3197c1a48475425" + digest = "1:7ec13687f85b25087fe05f6ea8dd116013a8263f8eb7e057da7664bc7599d2d4" name = "golang.org/x/net" packages = [ "context", + "context/ctxhttp", "http/httpguts", "http2", "http2/hpack", @@ -180,18 +203,29 @@ "trace", ] pruneopts = "" - revision = "351d144fa1fc0bd934e2408202be0c29f25e35a0" + revision = "915654e7eabcea33ae277abbecf52f0d8b7a9fdc" [[projects]] branch = "master" - digest = "1:f358024b019f87eecaadcb098113a40852c94fe58ea670ef3c3e2d2c7bd93db1" + digest = "1:790c83515921619a461cf47449bbdd5f58e35f689edc8164262cce7db4ae29ca" + name = "golang.org/x/oauth2" + packages = [ + ".", + "internal", + ] + pruneopts = "" + revision = "36a7019397c4c86cf59eeab3bc0d188bac444277" + +[[projects]] + branch = "master" + digest = "1:69b7ecfaddca30f8e8d97798822ff2b8ddfa7634ed16661561b54f30c63c2a42" name = "golang.org/x/sys" packages = [ "unix", "windows", ] pruneopts = "" - revision = "4ed8d59d0b35e1e29334a206d1b3f38b1e5dfb31" + revision = "a457fd036447854c0c02e89ea439481bdcf941a2" [[projects]] digest = "1:5acd3512b047305d49e8763eef7ba423901e85d5dd2fd1e71778a0ea8de10bd4" @@ -218,43 +252,60 @@ [[projects]] branch = "master" -<<<<<<< HEAD - digest = "1:5fc6c317675b746d0c641b29aa0aab5fcb403c0d07afdbf0de86b0d447a0502a" -======= digest = "1:14cb1d4240bcbbf1386ae763957e04e2765ec4e4ce7bb2769d05fa6faccd774e" name = "golang.org/x/time" packages = ["rate"] pruneopts = "" revision = "85acf8d2951cb2a3bde7632f9ff273ef0379bcbd" +[[projects]] + digest = "1:bc09e719c4e2a15d17163f5272d9a3131c45d77542b7fdc53ff518815bc19ab3" + name = "google.golang.org/appengine" + packages = [ + "internal", + "internal/base", + "internal/datastore", + "internal/log", + "internal/remote_api", + "internal/urlfetch", + "urlfetch", + ] + pruneopts = "" + revision = "e9657d882bb81064595ca3b56cbe2546bbabf7b1" + version = "v1.4.0" + [[projects]] branch = "master" - digest = "1:282b4a7158a161508e442b0a1c24fcf771c66ada2c93921f4b8ddc6b0a5e0c9b" ->>>>>>> master + digest = "1:1aa609a0033ef2927e083f2e5e07203ca35fe21c4a24b563de9fea16ddaae9ba" name = "google.golang.org/genproto" packages = ["googleapis/rpc/status"] pruneopts = "" - revision = "bd91e49a0898e27abb88c339b432fa53d7497ac0" + revision = "db91494dd46c1fdcbbde05e5ff5eb56df8f7d79a" [[projects]] - digest = "1:1293087271e314cfa2b3decededba2ecba0ff327e7b7809e00f73f616449191c" + digest = "1:d141efe4aaad714e3059c340901aab3147b6253e58c85dafbcca3dd8b0e88ad6" name = "google.golang.org/grpc" packages = [ ".", "balancer", "balancer/base", "balancer/roundrobin", + "binarylog/grpc_binarylog_v1", "codes", "connectivity", "credentials", + "credentials/internal", "encoding", "encoding/proto", "grpclog", "internal", "internal/backoff", + "internal/binarylog", "internal/channelz", "internal/envconfig", "internal/grpcrand", + "internal/grpcsync", + "internal/syscall", "internal/transport", "keepalive", "metadata", @@ -268,13 +319,10 @@ "tap", ] pruneopts = "" - revision = "2e463a05d100327ca47ac218281906921038fd95" - version = "v1.16.0" + revision = "df014850f6dee74ba2fc94874043a9f3f75fbfd8" + version = "v1.17.0" [[projects]] -<<<<<<< HEAD - digest = "1:66b0292f815d508d11ed5fe94fdeb0bcc5a988703a08e73bf3cb3a415de676cf" -======= digest = "1:75fb3fcfc73a8c723efde7777b40e8e8ff9babf30d8c56160d01beffea8a95a6" name = "gopkg.in/inf.v0" packages = ["."] @@ -291,7 +339,7 @@ version = "v2.2.2" [[projects]] - digest = "1:2412b59688d0e4d359397d277a7fc68703c47666dd2498b43cc79acef84a64d7" + digest = "1:be67264067c68b1f601bfc4a6c102b1380ed0743147381de81ed11da88d2e246" name = "k8s.io/api" packages = [ "admissionregistration/v1alpha1", @@ -299,16 +347,19 @@ "apps/v1", "apps/v1beta1", "apps/v1beta2", + "auditregistration/v1alpha1", "authentication/v1", "authentication/v1beta1", "authorization/v1", "authorization/v1beta1", "autoscaling/v1", "autoscaling/v2beta1", + "autoscaling/v2beta2", "batch/v1", "batch/v1beta1", "batch/v2alpha1", "certificates/v1beta1", + "coordination/v1beta1", "core/v1", "events/v1beta1", "extensions/v1beta1", @@ -318,18 +369,18 @@ "rbac/v1alpha1", "rbac/v1beta1", "scheduling/v1alpha1", + "scheduling/v1beta1", "settings/v1alpha1", "storage/v1", "storage/v1alpha1", "storage/v1beta1", ] pruneopts = "" - revision = "7aac3e00a1b32fa476b83078cebaaca606b2fb48" - version = "kubernetes-1.10.0-beta.1" + revision = "89a74a8d264df0e993299876a8cde88379b940ee" + version = "kubernetes-1.13.0" [[projects]] - digest = "1:9b07c796baf391a2dfa8c64bd5ddc28cbeb00723389f2f3da2e3d09b961f2e31" ->>>>>>> master + digest = "1:66b0292f815d508d11ed5fe94fdeb0bcc5a988703a08e73bf3cb3a415de676cf" name = "k8s.io/apimachinery" packages = [ "pkg/api/errors", @@ -357,6 +408,7 @@ "pkg/util/framer", "pkg/util/intstr", "pkg/util/json", + "pkg/util/naming", "pkg/util/net", "pkg/util/runtime", "pkg/util/sets", @@ -373,18 +425,7 @@ version = "kubernetes-1.13.0" [[projects]] -<<<<<<< HEAD - digest = "1:4f5eb833037cc0ba0bf8fe9cae6be9df62c19dd1c869415275c708daa8ccfda5" - name = "k8s.io/klog" - packages = ["."] - pruneopts = "" - revision = "a5bc97fbc634d635061f3146511332c7e313a55a" - version = "v0.1.0" - -[[projects]] - digest = "1:a53c39a815a31aceb509f9987d7d8c65e74fcb1fcd5077eaf723a8defec1af90" -======= - digest = "1:4e43ae063c506514708f015c8ebf145456174116dd04c7fd3eab89ebb22def35" + digest = "1:96ab89894f66b77a0137bba12e607c6a9be992acadfb075b5602939e8519a157" name = "k8s.io/client-go" packages = [ "discovery", @@ -395,16 +436,19 @@ "kubernetes/typed/apps/v1", "kubernetes/typed/apps/v1beta1", "kubernetes/typed/apps/v1beta2", + "kubernetes/typed/auditregistration/v1alpha1", "kubernetes/typed/authentication/v1", "kubernetes/typed/authentication/v1beta1", "kubernetes/typed/authorization/v1", "kubernetes/typed/authorization/v1beta1", "kubernetes/typed/autoscaling/v1", "kubernetes/typed/autoscaling/v2beta1", + "kubernetes/typed/autoscaling/v2beta2", "kubernetes/typed/batch/v1", "kubernetes/typed/batch/v1beta1", "kubernetes/typed/batch/v2alpha1", "kubernetes/typed/certificates/v1beta1", + "kubernetes/typed/coordination/v1beta1", "kubernetes/typed/core/v1", "kubernetes/typed/events/v1beta1", "kubernetes/typed/extensions/v1beta1", @@ -414,11 +458,16 @@ "kubernetes/typed/rbac/v1alpha1", "kubernetes/typed/rbac/v1beta1", "kubernetes/typed/scheduling/v1alpha1", + "kubernetes/typed/scheduling/v1beta1", "kubernetes/typed/settings/v1alpha1", "kubernetes/typed/storage/v1", "kubernetes/typed/storage/v1alpha1", "kubernetes/typed/storage/v1beta1", + "pkg/apis/clientauthentication", + "pkg/apis/clientauthentication/v1alpha1", + "pkg/apis/clientauthentication/v1beta1", "pkg/version", + "plugin/pkg/client/auth/exec", "rest", "rest/watch", "tools/auth", @@ -430,17 +479,25 @@ "tools/reference", "transport", "util/cert", + "util/connrotation", "util/flowcontrol", "util/homedir", "util/integer", ] pruneopts = "" - revision = "82eadfdc39007c2eb47e3ddeb7ed7d96365e409d" - version = "kubernetes-1.10.0-beta.1" + revision = "e64494209f554a6723674bd494d69445fb76a1d4" + version = "kubernetes-1.13.0" [[projects]] - digest = "1:7107d2e83c67ac0dbd9b62e8e2bfe1a75b194864ea4fe30778f4842151cd356d" ->>>>>>> master + digest = "1:4f5eb833037cc0ba0bf8fe9cae6be9df62c19dd1c869415275c708daa8ccfda5" + name = "k8s.io/klog" + packages = ["."] + pruneopts = "" + revision = "a5bc97fbc634d635061f3146511332c7e313a55a" + version = "v0.1.0" + +[[projects]] + digest = "1:9ac53939e57f04ea4886ed3c7b23612c65258de122c028a6c5ee8f9bdc0c51dd" name = "k8s.io/kubernetes" packages = [ "pkg/util/file", @@ -450,16 +507,24 @@ "pkg/util/nsenter", ] pruneopts = "" - revision = "ddf47ac13c1a9483ea035a79cd7c10005ff21a6d" - version = "v1.13.0" + revision = "cff46ab41ff0bb44d8584413b598ad8360ec1def" + version = "v1.13.2" [[projects]] branch = "master" - digest = "1:bea542e853f98bfcc80ecbe8fe0f32bc52c97664102aacdd7dca676354ef2faa" + digest = "1:8b4b9c29be72c176988b04d5acc665c093b1efac228835f0a4716531c1f7563e" name = "k8s.io/utils" packages = ["exec"] pruneopts = "" - revision = "0d26856f57b32ec3398579285e5c8a2bfe8c5243" + revision = "8a16e7dd8fb6d97d1331b0c79a16722f934b00b1" + +[[projects]] + digest = "1:321081b4a44256715f2b68411d8eda9a17f17ebfe6f0cc61d2cc52d11c08acfa" + name = "sigs.k8s.io/yaml" + packages = ["."] + pruneopts = "" + revision = "fd68e9863619f6ec2fdd8625fe1f02e7c877e480" + version = "v1.1.0" [solve-meta] analyzer-name = "dep" diff --git a/Gopkg.toml b/Gopkg.toml index fd5c3a075..86f3aedaa 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -36,4 +36,4 @@ [[constraint]] name = "k8s.io/client-go" - version = "kubernetes-1.10.0-beta.1" + version = "kubernetes-1.13.0" diff --git a/pkg/rbd/controllerserver.go b/pkg/rbd/controllerserver.go index 7b323bc79..e0a9fe119 100644 --- a/pkg/rbd/controllerserver.go +++ b/pkg/rbd/controllerserver.go @@ -23,8 +23,8 @@ import ( "syscall" "time" - "github.com/container-storage-interface/spec/lib/go/csi" "github.com/ceph/ceph-csi/pkg/util" + "github.com/container-storage-interface/spec/lib/go/csi" "github.com/golang/glog" "github.com/golang/protobuf/ptypes/timestamp" "github.com/kubernetes-csi/drivers/pkg/csi-common" @@ -170,7 +170,7 @@ func (cs *controllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol } if err := cs.MetadataStore.Create(volumeID, rbdVol); err != nil { glog.Warningf("failed to store volume metadata with error: %v", err) - if err := deleteRBDImage(rbdVol, rbdVol.AdminId, req.GetControllerCreateSecrets()); err != nil { + if err := deleteRBDImage(rbdVol, rbdVol.AdminId, req.GetSecrets()); err != nil { glog.V(3).Infof("failed to delete rbd image: %s/%s with error: %v", rbdVol.Pool, rbdVol.VolName, err) return nil, err } diff --git a/pkg/rbd/rbd_util.go b/pkg/rbd/rbd_util.go index b2e4e88ef..96efb80f9 100644 --- a/pkg/rbd/rbd_util.go +++ b/pkg/rbd/rbd_util.go @@ -73,17 +73,17 @@ type rbdSnapshot struct { var ( // serializes operations based on "/" as key - attachdetachMutex = keymutex.NewKeyMutex() + attachdetachMutex = keymutex.NewHashed(0) // serializes operations based on "volume name" as key - volumeNameMutex = keymutex.NewKeyMutex() + volumeNameMutex = keymutex.NewHashed(0) // serializes operations based on "volume id" as key - volumeIDMutex = keymutex.NewKeyMutex() + volumeIDMutex = keymutex.NewHashed(0) // serializes operations based on "snapshot name" as key - snapshotNameMutex = keymutex.NewKeyMutex() + snapshotNameMutex = keymutex.NewHashed(0) // serializes operations based on "snapshot id" as key - snapshotIDMutex = keymutex.NewKeyMutex() + snapshotIDMutex = keymutex.NewHashed(0) // serializes operations based on "mount target path" as key - targetPathMutex = keymutex.NewKeyMutex() + targetPathMutex = keymutex.NewHashed(0) supportedFeatures = sets.NewString("layering") ) diff --git a/vendor/github.com/ghodss/yaml/.travis.yml b/vendor/github.com/ghodss/yaml/.travis.yml deleted file mode 100644 index 0e9d6edc0..000000000 --- a/vendor/github.com/ghodss/yaml/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: go -go: - - 1.3 - - 1.4 -script: - - go test - - go build diff --git a/vendor/github.com/google/btree/.travis.yml b/vendor/github.com/google/btree/.travis.yml new file mode 100644 index 000000000..4f2ee4d97 --- /dev/null +++ b/vendor/github.com/google/btree/.travis.yml @@ -0,0 +1 @@ +language: go diff --git a/vendor/github.com/google/btree/LICENSE b/vendor/github.com/google/btree/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/vendor/github.com/google/btree/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/vendor/github.com/google/btree/README.md b/vendor/github.com/google/btree/README.md new file mode 100644 index 000000000..6062a4dac --- /dev/null +++ b/vendor/github.com/google/btree/README.md @@ -0,0 +1,12 @@ +# BTree implementation for Go + +![Travis CI Build Status](https://api.travis-ci.org/google/btree.svg?branch=master) + +This package provides an in-memory B-Tree implementation for Go, useful as +an ordered, mutable data structure. + +The API is based off of the wonderful +http://godoc.org/github.com/petar/GoLLRB/llrb, and is meant to allow btree to +act as a drop-in replacement for gollrb trees. + +See http://godoc.org/github.com/google/btree for documentation. diff --git a/vendor/github.com/google/btree/btree.go b/vendor/github.com/google/btree/btree.go new file mode 100644 index 000000000..6ff062f9b --- /dev/null +++ b/vendor/github.com/google/btree/btree.go @@ -0,0 +1,890 @@ +// Copyright 2014 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package btree implements in-memory B-Trees of arbitrary degree. +// +// btree implements an in-memory B-Tree for use as an ordered data structure. +// It is not meant for persistent storage solutions. +// +// It has a flatter structure than an equivalent red-black or other binary tree, +// which in some cases yields better memory usage and/or performance. +// See some discussion on the matter here: +// http://google-opensource.blogspot.com/2013/01/c-containers-that-save-memory-and-time.html +// Note, though, that this project is in no way related to the C++ B-Tree +// implementation written about there. +// +// Within this tree, each node contains a slice of items and a (possibly nil) +// slice of children. For basic numeric values or raw structs, this can cause +// efficiency differences when compared to equivalent C++ template code that +// stores values in arrays within the node: +// * Due to the overhead of storing values as interfaces (each +// value needs to be stored as the value itself, then 2 words for the +// interface pointing to that value and its type), resulting in higher +// memory use. +// * Since interfaces can point to values anywhere in memory, values are +// most likely not stored in contiguous blocks, resulting in a higher +// number of cache misses. +// These issues don't tend to matter, though, when working with strings or other +// heap-allocated structures, since C++-equivalent structures also must store +// pointers and also distribute their values across the heap. +// +// This implementation is designed to be a drop-in replacement to gollrb.LLRB +// trees, (http://github.com/petar/gollrb), an excellent and probably the most +// widely used ordered tree implementation in the Go ecosystem currently. +// Its functions, therefore, exactly mirror those of +// llrb.LLRB where possible. Unlike gollrb, though, we currently don't +// support storing multiple equivalent values. +package btree + +import ( + "fmt" + "io" + "sort" + "strings" + "sync" +) + +// Item represents a single object in the tree. +type Item interface { + // Less tests whether the current item is less than the given argument. + // + // This must provide a strict weak ordering. + // If !a.Less(b) && !b.Less(a), we treat this to mean a == b (i.e. we can only + // hold one of either a or b in the tree). + Less(than Item) bool +} + +const ( + DefaultFreeListSize = 32 +) + +var ( + nilItems = make(items, 16) + nilChildren = make(children, 16) +) + +// FreeList represents a free list of btree nodes. By default each +// BTree has its own FreeList, but multiple BTrees can share the same +// FreeList. +// Two Btrees using the same freelist are safe for concurrent write access. +type FreeList struct { + mu sync.Mutex + freelist []*node +} + +// NewFreeList creates a new free list. +// size is the maximum size of the returned free list. +func NewFreeList(size int) *FreeList { + return &FreeList{freelist: make([]*node, 0, size)} +} + +func (f *FreeList) newNode() (n *node) { + f.mu.Lock() + index := len(f.freelist) - 1 + if index < 0 { + f.mu.Unlock() + return new(node) + } + n = f.freelist[index] + f.freelist[index] = nil + f.freelist = f.freelist[:index] + f.mu.Unlock() + return +} + +// freeNode adds the given node to the list, returning true if it was added +// and false if it was discarded. +func (f *FreeList) freeNode(n *node) (out bool) { + f.mu.Lock() + if len(f.freelist) < cap(f.freelist) { + f.freelist = append(f.freelist, n) + out = true + } + f.mu.Unlock() + return +} + +// ItemIterator allows callers of Ascend* to iterate in-order over portions of +// the tree. When this function returns false, iteration will stop and the +// associated Ascend* function will immediately return. +type ItemIterator func(i Item) bool + +// New creates a new B-Tree with the given degree. +// +// New(2), for example, will create a 2-3-4 tree (each node contains 1-3 items +// and 2-4 children). +func New(degree int) *BTree { + return NewWithFreeList(degree, NewFreeList(DefaultFreeListSize)) +} + +// NewWithFreeList creates a new B-Tree that uses the given node free list. +func NewWithFreeList(degree int, f *FreeList) *BTree { + if degree <= 1 { + panic("bad degree") + } + return &BTree{ + degree: degree, + cow: ©OnWriteContext{freelist: f}, + } +} + +// items stores items in a node. +type items []Item + +// insertAt inserts a value into the given index, pushing all subsequent values +// forward. +func (s *items) insertAt(index int, item Item) { + *s = append(*s, nil) + if index < len(*s) { + copy((*s)[index+1:], (*s)[index:]) + } + (*s)[index] = item +} + +// removeAt removes a value at a given index, pulling all subsequent values +// back. +func (s *items) removeAt(index int) Item { + item := (*s)[index] + copy((*s)[index:], (*s)[index+1:]) + (*s)[len(*s)-1] = nil + *s = (*s)[:len(*s)-1] + return item +} + +// pop removes and returns the last element in the list. +func (s *items) pop() (out Item) { + index := len(*s) - 1 + out = (*s)[index] + (*s)[index] = nil + *s = (*s)[:index] + return +} + +// truncate truncates this instance at index so that it contains only the +// first index items. index must be less than or equal to length. +func (s *items) truncate(index int) { + var toClear items + *s, toClear = (*s)[:index], (*s)[index:] + for len(toClear) > 0 { + toClear = toClear[copy(toClear, nilItems):] + } +} + +// find returns the index where the given item should be inserted into this +// list. 'found' is true if the item already exists in the list at the given +// index. +func (s items) find(item Item) (index int, found bool) { + i := sort.Search(len(s), func(i int) bool { + return item.Less(s[i]) + }) + if i > 0 && !s[i-1].Less(item) { + return i - 1, true + } + return i, false +} + +// children stores child nodes in a node. +type children []*node + +// insertAt inserts a value into the given index, pushing all subsequent values +// forward. +func (s *children) insertAt(index int, n *node) { + *s = append(*s, nil) + if index < len(*s) { + copy((*s)[index+1:], (*s)[index:]) + } + (*s)[index] = n +} + +// removeAt removes a value at a given index, pulling all subsequent values +// back. +func (s *children) removeAt(index int) *node { + n := (*s)[index] + copy((*s)[index:], (*s)[index+1:]) + (*s)[len(*s)-1] = nil + *s = (*s)[:len(*s)-1] + return n +} + +// pop removes and returns the last element in the list. +func (s *children) pop() (out *node) { + index := len(*s) - 1 + out = (*s)[index] + (*s)[index] = nil + *s = (*s)[:index] + return +} + +// truncate truncates this instance at index so that it contains only the +// first index children. index must be less than or equal to length. +func (s *children) truncate(index int) { + var toClear children + *s, toClear = (*s)[:index], (*s)[index:] + for len(toClear) > 0 { + toClear = toClear[copy(toClear, nilChildren):] + } +} + +// node is an internal node in a tree. +// +// It must at all times maintain the invariant that either +// * len(children) == 0, len(items) unconstrained +// * len(children) == len(items) + 1 +type node struct { + items items + children children + cow *copyOnWriteContext +} + +func (n *node) mutableFor(cow *copyOnWriteContext) *node { + if n.cow == cow { + return n + } + out := cow.newNode() + if cap(out.items) >= len(n.items) { + out.items = out.items[:len(n.items)] + } else { + out.items = make(items, len(n.items), cap(n.items)) + } + copy(out.items, n.items) + // Copy children + if cap(out.children) >= len(n.children) { + out.children = out.children[:len(n.children)] + } else { + out.children = make(children, len(n.children), cap(n.children)) + } + copy(out.children, n.children) + return out +} + +func (n *node) mutableChild(i int) *node { + c := n.children[i].mutableFor(n.cow) + n.children[i] = c + return c +} + +// split splits the given node at the given index. The current node shrinks, +// and this function returns the item that existed at that index and a new node +// containing all items/children after it. +func (n *node) split(i int) (Item, *node) { + item := n.items[i] + next := n.cow.newNode() + next.items = append(next.items, n.items[i+1:]...) + n.items.truncate(i) + if len(n.children) > 0 { + next.children = append(next.children, n.children[i+1:]...) + n.children.truncate(i + 1) + } + return item, next +} + +// maybeSplitChild checks if a child should be split, and if so splits it. +// Returns whether or not a split occurred. +func (n *node) maybeSplitChild(i, maxItems int) bool { + if len(n.children[i].items) < maxItems { + return false + } + first := n.mutableChild(i) + item, second := first.split(maxItems / 2) + n.items.insertAt(i, item) + n.children.insertAt(i+1, second) + return true +} + +// insert inserts an item into the subtree rooted at this node, making sure +// no nodes in the subtree exceed maxItems items. Should an equivalent item be +// be found/replaced by insert, it will be returned. +func (n *node) insert(item Item, maxItems int) Item { + i, found := n.items.find(item) + if found { + out := n.items[i] + n.items[i] = item + return out + } + if len(n.children) == 0 { + n.items.insertAt(i, item) + return nil + } + if n.maybeSplitChild(i, maxItems) { + inTree := n.items[i] + switch { + case item.Less(inTree): + // no change, we want first split node + case inTree.Less(item): + i++ // we want second split node + default: + out := n.items[i] + n.items[i] = item + return out + } + } + return n.mutableChild(i).insert(item, maxItems) +} + +// get finds the given key in the subtree and returns it. +func (n *node) get(key Item) Item { + i, found := n.items.find(key) + if found { + return n.items[i] + } else if len(n.children) > 0 { + return n.children[i].get(key) + } + return nil +} + +// min returns the first item in the subtree. +func min(n *node) Item { + if n == nil { + return nil + } + for len(n.children) > 0 { + n = n.children[0] + } + if len(n.items) == 0 { + return nil + } + return n.items[0] +} + +// max returns the last item in the subtree. +func max(n *node) Item { + if n == nil { + return nil + } + for len(n.children) > 0 { + n = n.children[len(n.children)-1] + } + if len(n.items) == 0 { + return nil + } + return n.items[len(n.items)-1] +} + +// toRemove details what item to remove in a node.remove call. +type toRemove int + +const ( + removeItem toRemove = iota // removes the given item + removeMin // removes smallest item in the subtree + removeMax // removes largest item in the subtree +) + +// remove removes an item from the subtree rooted at this node. +func (n *node) remove(item Item, minItems int, typ toRemove) Item { + var i int + var found bool + switch typ { + case removeMax: + if len(n.children) == 0 { + return n.items.pop() + } + i = len(n.items) + case removeMin: + if len(n.children) == 0 { + return n.items.removeAt(0) + } + i = 0 + case removeItem: + i, found = n.items.find(item) + if len(n.children) == 0 { + if found { + return n.items.removeAt(i) + } + return nil + } + default: + panic("invalid type") + } + // If we get to here, we have children. + if len(n.children[i].items) <= minItems { + return n.growChildAndRemove(i, item, minItems, typ) + } + child := n.mutableChild(i) + // Either we had enough items to begin with, or we've done some + // merging/stealing, because we've got enough now and we're ready to return + // stuff. + if found { + // The item exists at index 'i', and the child we've selected can give us a + // predecessor, since if we've gotten here it's got > minItems items in it. + out := n.items[i] + // We use our special-case 'remove' call with typ=maxItem to pull the + // predecessor of item i (the rightmost leaf of our immediate left child) + // and set it into where we pulled the item from. + n.items[i] = child.remove(nil, minItems, removeMax) + return out + } + // Final recursive call. Once we're here, we know that the item isn't in this + // node and that the child is big enough to remove from. + return child.remove(item, minItems, typ) +} + +// growChildAndRemove grows child 'i' to make sure it's possible to remove an +// item from it while keeping it at minItems, then calls remove to actually +// remove it. +// +// Most documentation says we have to do two sets of special casing: +// 1) item is in this node +// 2) item is in child +// In both cases, we need to handle the two subcases: +// A) node has enough values that it can spare one +// B) node doesn't have enough values +// For the latter, we have to check: +// a) left sibling has node to spare +// b) right sibling has node to spare +// c) we must merge +// To simplify our code here, we handle cases #1 and #2 the same: +// If a node doesn't have enough items, we make sure it does (using a,b,c). +// We then simply redo our remove call, and the second time (regardless of +// whether we're in case 1 or 2), we'll have enough items and can guarantee +// that we hit case A. +func (n *node) growChildAndRemove(i int, item Item, minItems int, typ toRemove) Item { + if i > 0 && len(n.children[i-1].items) > minItems { + // Steal from left child + child := n.mutableChild(i) + stealFrom := n.mutableChild(i - 1) + stolenItem := stealFrom.items.pop() + child.items.insertAt(0, n.items[i-1]) + n.items[i-1] = stolenItem + if len(stealFrom.children) > 0 { + child.children.insertAt(0, stealFrom.children.pop()) + } + } else if i < len(n.items) && len(n.children[i+1].items) > minItems { + // steal from right child + child := n.mutableChild(i) + stealFrom := n.mutableChild(i + 1) + stolenItem := stealFrom.items.removeAt(0) + child.items = append(child.items, n.items[i]) + n.items[i] = stolenItem + if len(stealFrom.children) > 0 { + child.children = append(child.children, stealFrom.children.removeAt(0)) + } + } else { + if i >= len(n.items) { + i-- + } + child := n.mutableChild(i) + // merge with right child + mergeItem := n.items.removeAt(i) + mergeChild := n.children.removeAt(i + 1) + child.items = append(child.items, mergeItem) + child.items = append(child.items, mergeChild.items...) + child.children = append(child.children, mergeChild.children...) + n.cow.freeNode(mergeChild) + } + return n.remove(item, minItems, typ) +} + +type direction int + +const ( + descend = direction(-1) + ascend = direction(+1) +) + +// iterate provides a simple method for iterating over elements in the tree. +// +// When ascending, the 'start' should be less than 'stop' and when descending, +// the 'start' should be greater than 'stop'. Setting 'includeStart' to true +// will force the iterator to include the first item when it equals 'start', +// thus creating a "greaterOrEqual" or "lessThanEqual" rather than just a +// "greaterThan" or "lessThan" queries. +func (n *node) iterate(dir direction, start, stop Item, includeStart bool, hit bool, iter ItemIterator) (bool, bool) { + var ok, found bool + var index int + switch dir { + case ascend: + if start != nil { + index, _ = n.items.find(start) + } + for i := index; i < len(n.items); i++ { + if len(n.children) > 0 { + if hit, ok = n.children[i].iterate(dir, start, stop, includeStart, hit, iter); !ok { + return hit, false + } + } + if !includeStart && !hit && start != nil && !start.Less(n.items[i]) { + hit = true + continue + } + hit = true + if stop != nil && !n.items[i].Less(stop) { + return hit, false + } + if !iter(n.items[i]) { + return hit, false + } + } + if len(n.children) > 0 { + if hit, ok = n.children[len(n.children)-1].iterate(dir, start, stop, includeStart, hit, iter); !ok { + return hit, false + } + } + case descend: + if start != nil { + index, found = n.items.find(start) + if !found { + index = index - 1 + } + } else { + index = len(n.items) - 1 + } + for i := index; i >= 0; i-- { + if start != nil && !n.items[i].Less(start) { + if !includeStart || hit || start.Less(n.items[i]) { + continue + } + } + if len(n.children) > 0 { + if hit, ok = n.children[i+1].iterate(dir, start, stop, includeStart, hit, iter); !ok { + return hit, false + } + } + if stop != nil && !stop.Less(n.items[i]) { + return hit, false // continue + } + hit = true + if !iter(n.items[i]) { + return hit, false + } + } + if len(n.children) > 0 { + if hit, ok = n.children[0].iterate(dir, start, stop, includeStart, hit, iter); !ok { + return hit, false + } + } + } + return hit, true +} + +// Used for testing/debugging purposes. +func (n *node) print(w io.Writer, level int) { + fmt.Fprintf(w, "%sNODE:%v\n", strings.Repeat(" ", level), n.items) + for _, c := range n.children { + c.print(w, level+1) + } +} + +// BTree is an implementation of a B-Tree. +// +// BTree stores Item instances in an ordered structure, allowing easy insertion, +// removal, and iteration. +// +// Write operations are not safe for concurrent mutation by multiple +// goroutines, but Read operations are. +type BTree struct { + degree int + length int + root *node + cow *copyOnWriteContext +} + +// copyOnWriteContext pointers determine node ownership... a tree with a write +// context equivalent to a node's write context is allowed to modify that node. +// A tree whose write context does not match a node's is not allowed to modify +// it, and must create a new, writable copy (IE: it's a Clone). +// +// When doing any write operation, we maintain the invariant that the current +// node's context is equal to the context of the tree that requested the write. +// We do this by, before we descend into any node, creating a copy with the +// correct context if the contexts don't match. +// +// Since the node we're currently visiting on any write has the requesting +// tree's context, that node is modifiable in place. Children of that node may +// not share context, but before we descend into them, we'll make a mutable +// copy. +type copyOnWriteContext struct { + freelist *FreeList +} + +// Clone clones the btree, lazily. Clone should not be called concurrently, +// but the original tree (t) and the new tree (t2) can be used concurrently +// once the Clone call completes. +// +// The internal tree structure of b is marked read-only and shared between t and +// t2. Writes to both t and t2 use copy-on-write logic, creating new nodes +// whenever one of b's original nodes would have been modified. Read operations +// should have no performance degredation. Write operations for both t and t2 +// will initially experience minor slow-downs caused by additional allocs and +// copies due to the aforementioned copy-on-write logic, but should converge to +// the original performance characteristics of the original tree. +func (t *BTree) Clone() (t2 *BTree) { + // Create two entirely new copy-on-write contexts. + // This operation effectively creates three trees: + // the original, shared nodes (old b.cow) + // the new b.cow nodes + // the new out.cow nodes + cow1, cow2 := *t.cow, *t.cow + out := *t + t.cow = &cow1 + out.cow = &cow2 + return &out +} + +// maxItems returns the max number of items to allow per node. +func (t *BTree) maxItems() int { + return t.degree*2 - 1 +} + +// minItems returns the min number of items to allow per node (ignored for the +// root node). +func (t *BTree) minItems() int { + return t.degree - 1 +} + +func (c *copyOnWriteContext) newNode() (n *node) { + n = c.freelist.newNode() + n.cow = c + return +} + +type freeType int + +const ( + ftFreelistFull freeType = iota // node was freed (available for GC, not stored in freelist) + ftStored // node was stored in the freelist for later use + ftNotOwned // node was ignored by COW, since it's owned by another one +) + +// freeNode frees a node within a given COW context, if it's owned by that +// context. It returns what happened to the node (see freeType const +// documentation). +func (c *copyOnWriteContext) freeNode(n *node) freeType { + if n.cow == c { + // clear to allow GC + n.items.truncate(0) + n.children.truncate(0) + n.cow = nil + if c.freelist.freeNode(n) { + return ftStored + } else { + return ftFreelistFull + } + } else { + return ftNotOwned + } +} + +// ReplaceOrInsert adds the given item to the tree. If an item in the tree +// already equals the given one, it is removed from the tree and returned. +// Otherwise, nil is returned. +// +// nil cannot be added to the tree (will panic). +func (t *BTree) ReplaceOrInsert(item Item) Item { + if item == nil { + panic("nil item being added to BTree") + } + if t.root == nil { + t.root = t.cow.newNode() + t.root.items = append(t.root.items, item) + t.length++ + return nil + } else { + t.root = t.root.mutableFor(t.cow) + if len(t.root.items) >= t.maxItems() { + item2, second := t.root.split(t.maxItems() / 2) + oldroot := t.root + t.root = t.cow.newNode() + t.root.items = append(t.root.items, item2) + t.root.children = append(t.root.children, oldroot, second) + } + } + out := t.root.insert(item, t.maxItems()) + if out == nil { + t.length++ + } + return out +} + +// Delete removes an item equal to the passed in item from the tree, returning +// it. If no such item exists, returns nil. +func (t *BTree) Delete(item Item) Item { + return t.deleteItem(item, removeItem) +} + +// DeleteMin removes the smallest item in the tree and returns it. +// If no such item exists, returns nil. +func (t *BTree) DeleteMin() Item { + return t.deleteItem(nil, removeMin) +} + +// DeleteMax removes the largest item in the tree and returns it. +// If no such item exists, returns nil. +func (t *BTree) DeleteMax() Item { + return t.deleteItem(nil, removeMax) +} + +func (t *BTree) deleteItem(item Item, typ toRemove) Item { + if t.root == nil || len(t.root.items) == 0 { + return nil + } + t.root = t.root.mutableFor(t.cow) + out := t.root.remove(item, t.minItems(), typ) + if len(t.root.items) == 0 && len(t.root.children) > 0 { + oldroot := t.root + t.root = t.root.children[0] + t.cow.freeNode(oldroot) + } + if out != nil { + t.length-- + } + return out +} + +// AscendRange calls the iterator for every value in the tree within the range +// [greaterOrEqual, lessThan), until iterator returns false. +func (t *BTree) AscendRange(greaterOrEqual, lessThan Item, iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(ascend, greaterOrEqual, lessThan, true, false, iterator) +} + +// AscendLessThan calls the iterator for every value in the tree within the range +// [first, pivot), until iterator returns false. +func (t *BTree) AscendLessThan(pivot Item, iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(ascend, nil, pivot, false, false, iterator) +} + +// AscendGreaterOrEqual calls the iterator for every value in the tree within +// the range [pivot, last], until iterator returns false. +func (t *BTree) AscendGreaterOrEqual(pivot Item, iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(ascend, pivot, nil, true, false, iterator) +} + +// Ascend calls the iterator for every value in the tree within the range +// [first, last], until iterator returns false. +func (t *BTree) Ascend(iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(ascend, nil, nil, false, false, iterator) +} + +// DescendRange calls the iterator for every value in the tree within the range +// [lessOrEqual, greaterThan), until iterator returns false. +func (t *BTree) DescendRange(lessOrEqual, greaterThan Item, iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(descend, lessOrEqual, greaterThan, true, false, iterator) +} + +// DescendLessOrEqual calls the iterator for every value in the tree within the range +// [pivot, first], until iterator returns false. +func (t *BTree) DescendLessOrEqual(pivot Item, iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(descend, pivot, nil, true, false, iterator) +} + +// DescendGreaterThan calls the iterator for every value in the tree within +// the range (pivot, last], until iterator returns false. +func (t *BTree) DescendGreaterThan(pivot Item, iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(descend, nil, pivot, false, false, iterator) +} + +// Descend calls the iterator for every value in the tree within the range +// [last, first], until iterator returns false. +func (t *BTree) Descend(iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(descend, nil, nil, false, false, iterator) +} + +// Get looks for the key item in the tree, returning it. It returns nil if +// unable to find that item. +func (t *BTree) Get(key Item) Item { + if t.root == nil { + return nil + } + return t.root.get(key) +} + +// Min returns the smallest item in the tree, or nil if the tree is empty. +func (t *BTree) Min() Item { + return min(t.root) +} + +// Max returns the largest item in the tree, or nil if the tree is empty. +func (t *BTree) Max() Item { + return max(t.root) +} + +// Has returns true if the given key is in the tree. +func (t *BTree) Has(key Item) bool { + return t.Get(key) != nil +} + +// Len returns the number of items currently in the tree. +func (t *BTree) Len() int { + return t.length +} + +// Clear removes all items from the btree. If addNodesToFreelist is true, +// t's nodes are added to its freelist as part of this call, until the freelist +// is full. Otherwise, the root node is simply dereferenced and the subtree +// left to Go's normal GC processes. +// +// This can be much faster +// than calling Delete on all elements, because that requires finding/removing +// each element in the tree and updating the tree accordingly. It also is +// somewhat faster than creating a new tree to replace the old one, because +// nodes from the old tree are reclaimed into the freelist for use by the new +// one, instead of being lost to the garbage collector. +// +// This call takes: +// O(1): when addNodesToFreelist is false, this is a single operation. +// O(1): when the freelist is already full, it breaks out immediately +// O(freelist size): when the freelist is empty and the nodes are all owned +// by this tree, nodes are added to the freelist until full. +// O(tree size): when all nodes are owned by another tree, all nodes are +// iterated over looking for nodes to add to the freelist, and due to +// ownership, none are. +func (t *BTree) Clear(addNodesToFreelist bool) { + if t.root != nil && addNodesToFreelist { + t.root.reset(t.cow) + } + t.root, t.length = nil, 0 +} + +// reset returns a subtree to the freelist. It breaks out immediately if the +// freelist is full, since the only benefit of iterating is to fill that +// freelist up. Returns true if parent reset call should continue. +func (n *node) reset(c *copyOnWriteContext) bool { + for _, child := range n.children { + if !child.reset(c) { + return false + } + } + return c.freeNode(n) != ftFreelistFull +} + +// Int implements the Item interface for integers. +type Int int + +// Less returns true if int(a) < int(b). +func (a Int) Less(b Item) bool { + return a < b.(Int) +} diff --git a/vendor/github.com/google/btree/btree_mem.go b/vendor/github.com/google/btree/btree_mem.go new file mode 100644 index 000000000..cb95b7fa1 --- /dev/null +++ b/vendor/github.com/google/btree/btree_mem.go @@ -0,0 +1,76 @@ +// Copyright 2014 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build ignore + +// This binary compares memory usage between btree and gollrb. +package main + +import ( + "flag" + "fmt" + "math/rand" + "runtime" + "time" + + "github.com/google/btree" + "github.com/petar/GoLLRB/llrb" +) + +var ( + size = flag.Int("size", 1000000, "size of the tree to build") + degree = flag.Int("degree", 8, "degree of btree") + gollrb = flag.Bool("llrb", false, "use llrb instead of btree") +) + +func main() { + flag.Parse() + vals := rand.Perm(*size) + var t, v interface{} + v = vals + var stats runtime.MemStats + for i := 0; i < 10; i++ { + runtime.GC() + } + fmt.Println("-------- BEFORE ----------") + runtime.ReadMemStats(&stats) + fmt.Printf("%+v\n", stats) + start := time.Now() + if *gollrb { + tr := llrb.New() + for _, v := range vals { + tr.ReplaceOrInsert(llrb.Int(v)) + } + t = tr // keep it around + } else { + tr := btree.New(*degree) + for _, v := range vals { + tr.ReplaceOrInsert(btree.Int(v)) + } + t = tr // keep it around + } + fmt.Printf("%v inserts in %v\n", *size, time.Since(start)) + fmt.Println("-------- AFTER ----------") + runtime.ReadMemStats(&stats) + fmt.Printf("%+v\n", stats) + for i := 0; i < 10; i++ { + runtime.GC() + } + fmt.Println("-------- AFTER GC ----------") + runtime.ReadMemStats(&stats) + fmt.Printf("%+v\n", stats) + if t == v { + fmt.Println("to make sure vals and tree aren't GC'd") + } +} diff --git a/vendor/github.com/google/btree/btree_test.go b/vendor/github.com/google/btree/btree_test.go new file mode 100644 index 000000000..78a90cd8a --- /dev/null +++ b/vendor/github.com/google/btree/btree_test.go @@ -0,0 +1,785 @@ +// Copyright 2014 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package btree + +import ( + "flag" + "fmt" + "math/rand" + "reflect" + "sort" + "sync" + "testing" + "time" +) + +func init() { + seed := time.Now().Unix() + fmt.Println(seed) + rand.Seed(seed) +} + +// perm returns a random permutation of n Int items in the range [0, n). +func perm(n int) (out []Item) { + for _, v := range rand.Perm(n) { + out = append(out, Int(v)) + } + return +} + +// rang returns an ordered list of Int items in the range [0, n). +func rang(n int) (out []Item) { + for i := 0; i < n; i++ { + out = append(out, Int(i)) + } + return +} + +// all extracts all items from a tree in order as a slice. +func all(t *BTree) (out []Item) { + t.Ascend(func(a Item) bool { + out = append(out, a) + return true + }) + return +} + +// rangerev returns a reversed ordered list of Int items in the range [0, n). +func rangrev(n int) (out []Item) { + for i := n - 1; i >= 0; i-- { + out = append(out, Int(i)) + } + return +} + +// allrev extracts all items from a tree in reverse order as a slice. +func allrev(t *BTree) (out []Item) { + t.Descend(func(a Item) bool { + out = append(out, a) + return true + }) + return +} + +var btreeDegree = flag.Int("degree", 32, "B-Tree degree") + +func TestBTree(t *testing.T) { + tr := New(*btreeDegree) + const treeSize = 10000 + for i := 0; i < 10; i++ { + if min := tr.Min(); min != nil { + t.Fatalf("empty min, got %+v", min) + } + if max := tr.Max(); max != nil { + t.Fatalf("empty max, got %+v", max) + } + for _, item := range perm(treeSize) { + if x := tr.ReplaceOrInsert(item); x != nil { + t.Fatal("insert found item", item) + } + } + for _, item := range perm(treeSize) { + if x := tr.ReplaceOrInsert(item); x == nil { + t.Fatal("insert didn't find item", item) + } + } + if min, want := tr.Min(), Item(Int(0)); min != want { + t.Fatalf("min: want %+v, got %+v", want, min) + } + if max, want := tr.Max(), Item(Int(treeSize-1)); max != want { + t.Fatalf("max: want %+v, got %+v", want, max) + } + got := all(tr) + want := rang(treeSize) + if !reflect.DeepEqual(got, want) { + t.Fatalf("mismatch:\n got: %v\nwant: %v", got, want) + } + + gotrev := allrev(tr) + wantrev := rangrev(treeSize) + if !reflect.DeepEqual(gotrev, wantrev) { + t.Fatalf("mismatch:\n got: %v\nwant: %v", got, want) + } + + for _, item := range perm(treeSize) { + if x := tr.Delete(item); x == nil { + t.Fatalf("didn't find %v", item) + } + } + if got = all(tr); len(got) > 0 { + t.Fatalf("some left!: %v", got) + } + } +} + +func ExampleBTree() { + tr := New(*btreeDegree) + for i := Int(0); i < 10; i++ { + tr.ReplaceOrInsert(i) + } + fmt.Println("len: ", tr.Len()) + fmt.Println("get3: ", tr.Get(Int(3))) + fmt.Println("get100: ", tr.Get(Int(100))) + fmt.Println("del4: ", tr.Delete(Int(4))) + fmt.Println("del100: ", tr.Delete(Int(100))) + fmt.Println("replace5: ", tr.ReplaceOrInsert(Int(5))) + fmt.Println("replace100:", tr.ReplaceOrInsert(Int(100))) + fmt.Println("min: ", tr.Min()) + fmt.Println("delmin: ", tr.DeleteMin()) + fmt.Println("max: ", tr.Max()) + fmt.Println("delmax: ", tr.DeleteMax()) + fmt.Println("len: ", tr.Len()) + // Output: + // len: 10 + // get3: 3 + // get100: + // del4: 4 + // del100: + // replace5: 5 + // replace100: + // min: 0 + // delmin: 0 + // max: 100 + // delmax: 100 + // len: 8 +} + +func TestDeleteMin(t *testing.T) { + tr := New(3) + for _, v := range perm(100) { + tr.ReplaceOrInsert(v) + } + var got []Item + for v := tr.DeleteMin(); v != nil; v = tr.DeleteMin() { + got = append(got, v) + } + if want := rang(100); !reflect.DeepEqual(got, want) { + t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) + } +} + +func TestDeleteMax(t *testing.T) { + tr := New(3) + for _, v := range perm(100) { + tr.ReplaceOrInsert(v) + } + var got []Item + for v := tr.DeleteMax(); v != nil; v = tr.DeleteMax() { + got = append(got, v) + } + // Reverse our list. + for i := 0; i < len(got)/2; i++ { + got[i], got[len(got)-i-1] = got[len(got)-i-1], got[i] + } + if want := rang(100); !reflect.DeepEqual(got, want) { + t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) + } +} + +func TestAscendRange(t *testing.T) { + tr := New(2) + for _, v := range perm(100) { + tr.ReplaceOrInsert(v) + } + var got []Item + tr.AscendRange(Int(40), Int(60), func(a Item) bool { + got = append(got, a) + return true + }) + if want := rang(100)[40:60]; !reflect.DeepEqual(got, want) { + t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) + } + got = got[:0] + tr.AscendRange(Int(40), Int(60), func(a Item) bool { + if a.(Int) > 50 { + return false + } + got = append(got, a) + return true + }) + if want := rang(100)[40:51]; !reflect.DeepEqual(got, want) { + t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) + } +} + +func TestDescendRange(t *testing.T) { + tr := New(2) + for _, v := range perm(100) { + tr.ReplaceOrInsert(v) + } + var got []Item + tr.DescendRange(Int(60), Int(40), func(a Item) bool { + got = append(got, a) + return true + }) + if want := rangrev(100)[39:59]; !reflect.DeepEqual(got, want) { + t.Fatalf("descendrange:\n got: %v\nwant: %v", got, want) + } + got = got[:0] + tr.DescendRange(Int(60), Int(40), func(a Item) bool { + if a.(Int) < 50 { + return false + } + got = append(got, a) + return true + }) + if want := rangrev(100)[39:50]; !reflect.DeepEqual(got, want) { + t.Fatalf("descendrange:\n got: %v\nwant: %v", got, want) + } +} +func TestAscendLessThan(t *testing.T) { + tr := New(*btreeDegree) + for _, v := range perm(100) { + tr.ReplaceOrInsert(v) + } + var got []Item + tr.AscendLessThan(Int(60), func(a Item) bool { + got = append(got, a) + return true + }) + if want := rang(100)[:60]; !reflect.DeepEqual(got, want) { + t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) + } + got = got[:0] + tr.AscendLessThan(Int(60), func(a Item) bool { + if a.(Int) > 50 { + return false + } + got = append(got, a) + return true + }) + if want := rang(100)[:51]; !reflect.DeepEqual(got, want) { + t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) + } +} + +func TestDescendLessOrEqual(t *testing.T) { + tr := New(*btreeDegree) + for _, v := range perm(100) { + tr.ReplaceOrInsert(v) + } + var got []Item + tr.DescendLessOrEqual(Int(40), func(a Item) bool { + got = append(got, a) + return true + }) + if want := rangrev(100)[59:]; !reflect.DeepEqual(got, want) { + t.Fatalf("descendlessorequal:\n got: %v\nwant: %v", got, want) + } + got = got[:0] + tr.DescendLessOrEqual(Int(60), func(a Item) bool { + if a.(Int) < 50 { + return false + } + got = append(got, a) + return true + }) + if want := rangrev(100)[39:50]; !reflect.DeepEqual(got, want) { + t.Fatalf("descendlessorequal:\n got: %v\nwant: %v", got, want) + } +} +func TestAscendGreaterOrEqual(t *testing.T) { + tr := New(*btreeDegree) + for _, v := range perm(100) { + tr.ReplaceOrInsert(v) + } + var got []Item + tr.AscendGreaterOrEqual(Int(40), func(a Item) bool { + got = append(got, a) + return true + }) + if want := rang(100)[40:]; !reflect.DeepEqual(got, want) { + t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) + } + got = got[:0] + tr.AscendGreaterOrEqual(Int(40), func(a Item) bool { + if a.(Int) > 50 { + return false + } + got = append(got, a) + return true + }) + if want := rang(100)[40:51]; !reflect.DeepEqual(got, want) { + t.Fatalf("ascendrange:\n got: %v\nwant: %v", got, want) + } +} + +func TestDescendGreaterThan(t *testing.T) { + tr := New(*btreeDegree) + for _, v := range perm(100) { + tr.ReplaceOrInsert(v) + } + var got []Item + tr.DescendGreaterThan(Int(40), func(a Item) bool { + got = append(got, a) + return true + }) + if want := rangrev(100)[:59]; !reflect.DeepEqual(got, want) { + t.Fatalf("descendgreaterthan:\n got: %v\nwant: %v", got, want) + } + got = got[:0] + tr.DescendGreaterThan(Int(40), func(a Item) bool { + if a.(Int) < 50 { + return false + } + got = append(got, a) + return true + }) + if want := rangrev(100)[:50]; !reflect.DeepEqual(got, want) { + t.Fatalf("descendgreaterthan:\n got: %v\nwant: %v", got, want) + } +} + +const benchmarkTreeSize = 10000 + +func BenchmarkInsert(b *testing.B) { + b.StopTimer() + insertP := perm(benchmarkTreeSize) + b.StartTimer() + i := 0 + for i < b.N { + tr := New(*btreeDegree) + for _, item := range insertP { + tr.ReplaceOrInsert(item) + i++ + if i >= b.N { + return + } + } + } +} + +func BenchmarkSeek(b *testing.B) { + b.StopTimer() + size := 100000 + insertP := perm(size) + tr := New(*btreeDegree) + for _, item := range insertP { + tr.ReplaceOrInsert(item) + } + b.StartTimer() + + for i := 0; i < b.N; i++ { + tr.AscendGreaterOrEqual(Int(i%size), func(i Item) bool { return false }) + } +} + +func BenchmarkDeleteInsert(b *testing.B) { + b.StopTimer() + insertP := perm(benchmarkTreeSize) + tr := New(*btreeDegree) + for _, item := range insertP { + tr.ReplaceOrInsert(item) + } + b.StartTimer() + for i := 0; i < b.N; i++ { + tr.Delete(insertP[i%benchmarkTreeSize]) + tr.ReplaceOrInsert(insertP[i%benchmarkTreeSize]) + } +} + +func BenchmarkDeleteInsertCloneOnce(b *testing.B) { + b.StopTimer() + insertP := perm(benchmarkTreeSize) + tr := New(*btreeDegree) + for _, item := range insertP { + tr.ReplaceOrInsert(item) + } + tr = tr.Clone() + b.StartTimer() + for i := 0; i < b.N; i++ { + tr.Delete(insertP[i%benchmarkTreeSize]) + tr.ReplaceOrInsert(insertP[i%benchmarkTreeSize]) + } +} + +func BenchmarkDeleteInsertCloneEachTime(b *testing.B) { + b.StopTimer() + insertP := perm(benchmarkTreeSize) + tr := New(*btreeDegree) + for _, item := range insertP { + tr.ReplaceOrInsert(item) + } + b.StartTimer() + for i := 0; i < b.N; i++ { + tr = tr.Clone() + tr.Delete(insertP[i%benchmarkTreeSize]) + tr.ReplaceOrInsert(insertP[i%benchmarkTreeSize]) + } +} + +func BenchmarkDelete(b *testing.B) { + b.StopTimer() + insertP := perm(benchmarkTreeSize) + removeP := perm(benchmarkTreeSize) + b.StartTimer() + i := 0 + for i < b.N { + b.StopTimer() + tr := New(*btreeDegree) + for _, v := range insertP { + tr.ReplaceOrInsert(v) + } + b.StartTimer() + for _, item := range removeP { + tr.Delete(item) + i++ + if i >= b.N { + return + } + } + if tr.Len() > 0 { + panic(tr.Len()) + } + } +} + +func BenchmarkGet(b *testing.B) { + b.StopTimer() + insertP := perm(benchmarkTreeSize) + removeP := perm(benchmarkTreeSize) + b.StartTimer() + i := 0 + for i < b.N { + b.StopTimer() + tr := New(*btreeDegree) + for _, v := range insertP { + tr.ReplaceOrInsert(v) + } + b.StartTimer() + for _, item := range removeP { + tr.Get(item) + i++ + if i >= b.N { + return + } + } + } +} + +func BenchmarkGetCloneEachTime(b *testing.B) { + b.StopTimer() + insertP := perm(benchmarkTreeSize) + removeP := perm(benchmarkTreeSize) + b.StartTimer() + i := 0 + for i < b.N { + b.StopTimer() + tr := New(*btreeDegree) + for _, v := range insertP { + tr.ReplaceOrInsert(v) + } + b.StartTimer() + for _, item := range removeP { + tr = tr.Clone() + tr.Get(item) + i++ + if i >= b.N { + return + } + } + } +} + +type byInts []Item + +func (a byInts) Len() int { + return len(a) +} + +func (a byInts) Less(i, j int) bool { + return a[i].(Int) < a[j].(Int) +} + +func (a byInts) Swap(i, j int) { + a[i], a[j] = a[j], a[i] +} + +func BenchmarkAscend(b *testing.B) { + arr := perm(benchmarkTreeSize) + tr := New(*btreeDegree) + for _, v := range arr { + tr.ReplaceOrInsert(v) + } + sort.Sort(byInts(arr)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + j := 0 + tr.Ascend(func(item Item) bool { + if item.(Int) != arr[j].(Int) { + b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) + } + j++ + return true + }) + } +} + +func BenchmarkDescend(b *testing.B) { + arr := perm(benchmarkTreeSize) + tr := New(*btreeDegree) + for _, v := range arr { + tr.ReplaceOrInsert(v) + } + sort.Sort(byInts(arr)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + j := len(arr) - 1 + tr.Descend(func(item Item) bool { + if item.(Int) != arr[j].(Int) { + b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) + } + j-- + return true + }) + } +} +func BenchmarkAscendRange(b *testing.B) { + arr := perm(benchmarkTreeSize) + tr := New(*btreeDegree) + for _, v := range arr { + tr.ReplaceOrInsert(v) + } + sort.Sort(byInts(arr)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + j := 100 + tr.AscendRange(Int(100), arr[len(arr)-100], func(item Item) bool { + if item.(Int) != arr[j].(Int) { + b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) + } + j++ + return true + }) + if j != len(arr)-100 { + b.Fatalf("expected: %v, got %v", len(arr)-100, j) + } + } +} + +func BenchmarkDescendRange(b *testing.B) { + arr := perm(benchmarkTreeSize) + tr := New(*btreeDegree) + for _, v := range arr { + tr.ReplaceOrInsert(v) + } + sort.Sort(byInts(arr)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + j := len(arr) - 100 + tr.DescendRange(arr[len(arr)-100], Int(100), func(item Item) bool { + if item.(Int) != arr[j].(Int) { + b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) + } + j-- + return true + }) + if j != 100 { + b.Fatalf("expected: %v, got %v", len(arr)-100, j) + } + } +} +func BenchmarkAscendGreaterOrEqual(b *testing.B) { + arr := perm(benchmarkTreeSize) + tr := New(*btreeDegree) + for _, v := range arr { + tr.ReplaceOrInsert(v) + } + sort.Sort(byInts(arr)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + j := 100 + k := 0 + tr.AscendGreaterOrEqual(Int(100), func(item Item) bool { + if item.(Int) != arr[j].(Int) { + b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) + } + j++ + k++ + return true + }) + if j != len(arr) { + b.Fatalf("expected: %v, got %v", len(arr), j) + } + if k != len(arr)-100 { + b.Fatalf("expected: %v, got %v", len(arr)-100, k) + } + } +} +func BenchmarkDescendLessOrEqual(b *testing.B) { + arr := perm(benchmarkTreeSize) + tr := New(*btreeDegree) + for _, v := range arr { + tr.ReplaceOrInsert(v) + } + sort.Sort(byInts(arr)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + j := len(arr) - 100 + k := len(arr) + tr.DescendLessOrEqual(arr[len(arr)-100], func(item Item) bool { + if item.(Int) != arr[j].(Int) { + b.Fatalf("mismatch: expected: %v, got %v", arr[j].(Int), item.(Int)) + } + j-- + k-- + return true + }) + if j != -1 { + b.Fatalf("expected: %v, got %v", -1, j) + } + if k != 99 { + b.Fatalf("expected: %v, got %v", 99, k) + } + } +} + +const cloneTestSize = 10000 + +func cloneTest(t *testing.T, b *BTree, start int, p []Item, wg *sync.WaitGroup, trees *[]*BTree) { + t.Logf("Starting new clone at %v", start) + *trees = append(*trees, b) + for i := start; i < cloneTestSize; i++ { + b.ReplaceOrInsert(p[i]) + if i%(cloneTestSize/5) == 0 { + wg.Add(1) + go cloneTest(t, b.Clone(), i+1, p, wg, trees) + } + } + wg.Done() +} + +func TestCloneConcurrentOperations(t *testing.T) { + b := New(*btreeDegree) + trees := []*BTree{} + p := perm(cloneTestSize) + var wg sync.WaitGroup + wg.Add(1) + go cloneTest(t, b, 0, p, &wg, &trees) + wg.Wait() + want := rang(cloneTestSize) + t.Logf("Starting equality checks on %d trees", len(trees)) + for i, tree := range trees { + if !reflect.DeepEqual(want, all(tree)) { + t.Errorf("tree %v mismatch", i) + } + } + t.Log("Removing half from first half") + toRemove := rang(cloneTestSize)[cloneTestSize/2:] + for i := 0; i < len(trees)/2; i++ { + tree := trees[i] + wg.Add(1) + go func() { + for _, item := range toRemove { + tree.Delete(item) + } + wg.Done() + }() + } + wg.Wait() + t.Log("Checking all values again") + for i, tree := range trees { + var wantpart []Item + if i < len(trees)/2 { + wantpart = want[:cloneTestSize/2] + } else { + wantpart = want + } + if got := all(tree); !reflect.DeepEqual(wantpart, got) { + t.Errorf("tree %v mismatch, want %v got %v", i, len(want), len(got)) + } + } +} + +func BenchmarkDeleteAndRestore(b *testing.B) { + items := perm(16392) + b.ResetTimer() + b.Run(`CopyBigFreeList`, func(b *testing.B) { + fl := NewFreeList(16392) + tr := NewWithFreeList(*btreeDegree, fl) + for _, v := range items { + tr.ReplaceOrInsert(v) + } + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + dels := make([]Item, 0, tr.Len()) + tr.Ascend(ItemIterator(func(b Item) bool { + dels = append(dels, b) + return true + })) + for _, del := range dels { + tr.Delete(del) + } + // tr is now empty, we make a new empty copy of it. + tr = NewWithFreeList(*btreeDegree, fl) + for _, v := range items { + tr.ReplaceOrInsert(v) + } + } + }) + b.Run(`Copy`, func(b *testing.B) { + tr := New(*btreeDegree) + for _, v := range items { + tr.ReplaceOrInsert(v) + } + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + dels := make([]Item, 0, tr.Len()) + tr.Ascend(ItemIterator(func(b Item) bool { + dels = append(dels, b) + return true + })) + for _, del := range dels { + tr.Delete(del) + } + // tr is now empty, we make a new empty copy of it. + tr = New(*btreeDegree) + for _, v := range items { + tr.ReplaceOrInsert(v) + } + } + }) + b.Run(`ClearBigFreelist`, func(b *testing.B) { + fl := NewFreeList(16392) + tr := NewWithFreeList(*btreeDegree, fl) + for _, v := range items { + tr.ReplaceOrInsert(v) + } + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + tr.Clear(true) + for _, v := range items { + tr.ReplaceOrInsert(v) + } + } + }) + b.Run(`Clear`, func(b *testing.B) { + tr := New(*btreeDegree) + for _, v := range items { + tr.ReplaceOrInsert(v) + } + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + tr.Clear(true) + for _, v := range items { + tr.ReplaceOrInsert(v) + } + } + }) +} diff --git a/vendor/github.com/gregjones/httpcache/.travis.yml b/vendor/github.com/gregjones/httpcache/.travis.yml new file mode 100644 index 000000000..b5ffbe03d --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/.travis.yml @@ -0,0 +1,19 @@ +sudo: false +language: go +go: + - 1.6.x + - 1.7.x + - 1.8.x + - 1.9.x + - master +matrix: + allow_failures: + - go: master + fast_finish: true +install: + - # Do nothing. This is needed to prevent default install action "go get -t -v ./..." from happening here (we want it to happen inside script step). +script: + - go get -t -v ./... + - diff -u <(echo -n) <(gofmt -d .) + - go tool vet . + - go test -v -race ./... diff --git a/vendor/github.com/gregjones/httpcache/LICENSE.txt b/vendor/github.com/gregjones/httpcache/LICENSE.txt new file mode 100644 index 000000000..81316beb0 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/LICENSE.txt @@ -0,0 +1,7 @@ +Copyright © 2012 Greg Jones (greg.jones@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Softwareâ€), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS ISâ€, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/gregjones/httpcache/README.md b/vendor/github.com/gregjones/httpcache/README.md new file mode 100644 index 000000000..09c9e7c17 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/README.md @@ -0,0 +1,25 @@ +httpcache +========= + +[![Build Status](https://travis-ci.org/gregjones/httpcache.svg?branch=master)](https://travis-ci.org/gregjones/httpcache) [![GoDoc](https://godoc.org/github.com/gregjones/httpcache?status.svg)](https://godoc.org/github.com/gregjones/httpcache) + +Package httpcache provides a http.RoundTripper implementation that works as a mostly [RFC 7234](https://tools.ietf.org/html/rfc7234) compliant cache for http responses. + +It is only suitable for use as a 'private' cache (i.e. for a web-browser or an API-client and not for a shared proxy). + +Cache Backends +-------------- + +- The built-in 'memory' cache stores responses in an in-memory map. +- [`github.com/gregjones/httpcache/diskcache`](https://github.com/gregjones/httpcache/tree/master/diskcache) provides a filesystem-backed cache using the [diskv](https://github.com/peterbourgon/diskv) library. +- [`github.com/gregjones/httpcache/memcache`](https://github.com/gregjones/httpcache/tree/master/memcache) provides memcache implementations, for both App Engine and 'normal' memcache servers. +- [`sourcegraph.com/sourcegraph/s3cache`](https://sourcegraph.com/github.com/sourcegraph/s3cache) uses Amazon S3 for storage. +- [`github.com/gregjones/httpcache/leveldbcache`](https://github.com/gregjones/httpcache/tree/master/leveldbcache) provides a filesystem-backed cache using [leveldb](https://github.com/syndtr/goleveldb/leveldb). +- [`github.com/die-net/lrucache`](https://github.com/die-net/lrucache) provides an in-memory cache that will evict least-recently used entries. +- [`github.com/die-net/lrucache/twotier`](https://github.com/die-net/lrucache/tree/master/twotier) allows caches to be combined, for example to use lrucache above with a persistent disk-cache. +- [`github.com/birkelund/boltdbcache`](https://github.com/birkelund/boltdbcache) provides a BoltDB implementation (based on the [bbolt](https://github.com/coreos/bbolt) fork). + +License +------- + +- [MIT License](LICENSE.txt) diff --git a/vendor/github.com/gregjones/httpcache/diskcache/diskcache.go b/vendor/github.com/gregjones/httpcache/diskcache/diskcache.go new file mode 100644 index 000000000..42e3129d8 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/diskcache/diskcache.go @@ -0,0 +1,61 @@ +// Package diskcache provides an implementation of httpcache.Cache that uses the diskv package +// to supplement an in-memory map with persistent storage +// +package diskcache + +import ( + "bytes" + "crypto/md5" + "encoding/hex" + "github.com/peterbourgon/diskv" + "io" +) + +// Cache is an implementation of httpcache.Cache that supplements the in-memory map with persistent storage +type Cache struct { + d *diskv.Diskv +} + +// Get returns the response corresponding to key if present +func (c *Cache) Get(key string) (resp []byte, ok bool) { + key = keyToFilename(key) + resp, err := c.d.Read(key) + if err != nil { + return []byte{}, false + } + return resp, true +} + +// Set saves a response to the cache as key +func (c *Cache) Set(key string, resp []byte) { + key = keyToFilename(key) + c.d.WriteStream(key, bytes.NewReader(resp), true) +} + +// Delete removes the response with key from the cache +func (c *Cache) Delete(key string) { + key = keyToFilename(key) + c.d.Erase(key) +} + +func keyToFilename(key string) string { + h := md5.New() + io.WriteString(h, key) + return hex.EncodeToString(h.Sum(nil)) +} + +// New returns a new Cache that will store files in basePath +func New(basePath string) *Cache { + return &Cache{ + d: diskv.New(diskv.Options{ + BasePath: basePath, + CacheSizeMax: 100 * 1024 * 1024, // 100MB + }), + } +} + +// NewWithDiskv returns a new Cache using the provided Diskv as underlying +// storage. +func NewWithDiskv(d *diskv.Diskv) *Cache { + return &Cache{d} +} diff --git a/vendor/github.com/gregjones/httpcache/diskcache/diskcache_test.go b/vendor/github.com/gregjones/httpcache/diskcache/diskcache_test.go new file mode 100644 index 000000000..35c76cbd1 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/diskcache/diskcache_test.go @@ -0,0 +1,42 @@ +package diskcache + +import ( + "bytes" + "io/ioutil" + "os" + "testing" +) + +func TestDiskCache(t *testing.T) { + tempDir, err := ioutil.TempDir("", "httpcache") + if err != nil { + t.Fatalf("TempDir: %v", err) + } + defer os.RemoveAll(tempDir) + + cache := New(tempDir) + + key := "testKey" + _, ok := cache.Get(key) + if ok { + t.Fatal("retrieved key before adding it") + } + + val := []byte("some bytes") + cache.Set(key, val) + + retVal, ok := cache.Get(key) + if !ok { + t.Fatal("could not retrieve an element we just added") + } + if !bytes.Equal(retVal, val) { + t.Fatal("retrieved a different value than what we put in") + } + + cache.Delete(key) + + _, ok = cache.Get(key) + if ok { + t.Fatal("deleted key still present") + } +} diff --git a/vendor/github.com/gregjones/httpcache/httpcache.go b/vendor/github.com/gregjones/httpcache/httpcache.go new file mode 100644 index 000000000..f6a2ec4a5 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/httpcache.go @@ -0,0 +1,551 @@ +// Package httpcache provides a http.RoundTripper implementation that works as a +// mostly RFC-compliant cache for http responses. +// +// It is only suitable for use as a 'private' cache (i.e. for a web-browser or an API-client +// and not for a shared proxy). +// +package httpcache + +import ( + "bufio" + "bytes" + "errors" + "io" + "io/ioutil" + "net/http" + "net/http/httputil" + "strings" + "sync" + "time" +) + +const ( + stale = iota + fresh + transparent + // XFromCache is the header added to responses that are returned from the cache + XFromCache = "X-From-Cache" +) + +// A Cache interface is used by the Transport to store and retrieve responses. +type Cache interface { + // Get returns the []byte representation of a cached response and a bool + // set to true if the value isn't empty + Get(key string) (responseBytes []byte, ok bool) + // Set stores the []byte representation of a response against a key + Set(key string, responseBytes []byte) + // Delete removes the value associated with the key + Delete(key string) +} + +// cacheKey returns the cache key for req. +func cacheKey(req *http.Request) string { + if req.Method == http.MethodGet { + return req.URL.String() + } else { + return req.Method + " " + req.URL.String() + } +} + +// CachedResponse returns the cached http.Response for req if present, and nil +// otherwise. +func CachedResponse(c Cache, req *http.Request) (resp *http.Response, err error) { + cachedVal, ok := c.Get(cacheKey(req)) + if !ok { + return + } + + b := bytes.NewBuffer(cachedVal) + return http.ReadResponse(bufio.NewReader(b), req) +} + +// MemoryCache is an implemtation of Cache that stores responses in an in-memory map. +type MemoryCache struct { + mu sync.RWMutex + items map[string][]byte +} + +// Get returns the []byte representation of the response and true if present, false if not +func (c *MemoryCache) Get(key string) (resp []byte, ok bool) { + c.mu.RLock() + resp, ok = c.items[key] + c.mu.RUnlock() + return resp, ok +} + +// Set saves response resp to the cache with key +func (c *MemoryCache) Set(key string, resp []byte) { + c.mu.Lock() + c.items[key] = resp + c.mu.Unlock() +} + +// Delete removes key from the cache +func (c *MemoryCache) Delete(key string) { + c.mu.Lock() + delete(c.items, key) + c.mu.Unlock() +} + +// NewMemoryCache returns a new Cache that will store items in an in-memory map +func NewMemoryCache() *MemoryCache { + c := &MemoryCache{items: map[string][]byte{}} + return c +} + +// Transport is an implementation of http.RoundTripper that will return values from a cache +// where possible (avoiding a network request) and will additionally add validators (etag/if-modified-since) +// to repeated requests allowing servers to return 304 / Not Modified +type Transport struct { + // The RoundTripper interface actually used to make requests + // If nil, http.DefaultTransport is used + Transport http.RoundTripper + Cache Cache + // If true, responses returned from the cache will be given an extra header, X-From-Cache + MarkCachedResponses bool +} + +// NewTransport returns a new Transport with the +// provided Cache implementation and MarkCachedResponses set to true +func NewTransport(c Cache) *Transport { + return &Transport{Cache: c, MarkCachedResponses: true} +} + +// Client returns an *http.Client that caches responses. +func (t *Transport) Client() *http.Client { + return &http.Client{Transport: t} +} + +// varyMatches will return false unless all of the cached values for the headers listed in Vary +// match the new request +func varyMatches(cachedResp *http.Response, req *http.Request) bool { + for _, header := range headerAllCommaSepValues(cachedResp.Header, "vary") { + header = http.CanonicalHeaderKey(header) + if header != "" && req.Header.Get(header) != cachedResp.Header.Get("X-Varied-"+header) { + return false + } + } + return true +} + +// RoundTrip takes a Request and returns a Response +// +// If there is a fresh Response already in cache, then it will be returned without connecting to +// the server. +// +// If there is a stale Response, then any validators it contains will be set on the new request +// to give the server a chance to respond with NotModified. If this happens, then the cached Response +// will be returned. +func (t *Transport) RoundTrip(req *http.Request) (resp *http.Response, err error) { + cacheKey := cacheKey(req) + cacheable := (req.Method == "GET" || req.Method == "HEAD") && req.Header.Get("range") == "" + var cachedResp *http.Response + if cacheable { + cachedResp, err = CachedResponse(t.Cache, req) + } else { + // Need to invalidate an existing value + t.Cache.Delete(cacheKey) + } + + transport := t.Transport + if transport == nil { + transport = http.DefaultTransport + } + + if cacheable && cachedResp != nil && err == nil { + if t.MarkCachedResponses { + cachedResp.Header.Set(XFromCache, "1") + } + + if varyMatches(cachedResp, req) { + // Can only use cached value if the new request doesn't Vary significantly + freshness := getFreshness(cachedResp.Header, req.Header) + if freshness == fresh { + return cachedResp, nil + } + + if freshness == stale { + var req2 *http.Request + // Add validators if caller hasn't already done so + etag := cachedResp.Header.Get("etag") + if etag != "" && req.Header.Get("etag") == "" { + req2 = cloneRequest(req) + req2.Header.Set("if-none-match", etag) + } + lastModified := cachedResp.Header.Get("last-modified") + if lastModified != "" && req.Header.Get("last-modified") == "" { + if req2 == nil { + req2 = cloneRequest(req) + } + req2.Header.Set("if-modified-since", lastModified) + } + if req2 != nil { + req = req2 + } + } + } + + resp, err = transport.RoundTrip(req) + if err == nil && req.Method == "GET" && resp.StatusCode == http.StatusNotModified { + // Replace the 304 response with the one from cache, but update with some new headers + endToEndHeaders := getEndToEndHeaders(resp.Header) + for _, header := range endToEndHeaders { + cachedResp.Header[header] = resp.Header[header] + } + resp = cachedResp + } else if (err != nil || (cachedResp != nil && resp.StatusCode >= 500)) && + req.Method == "GET" && canStaleOnError(cachedResp.Header, req.Header) { + // In case of transport failure and stale-if-error activated, returns cached content + // when available + return cachedResp, nil + } else { + if err != nil || resp.StatusCode != http.StatusOK { + t.Cache.Delete(cacheKey) + } + if err != nil { + return nil, err + } + } + } else { + reqCacheControl := parseCacheControl(req.Header) + if _, ok := reqCacheControl["only-if-cached"]; ok { + resp = newGatewayTimeoutResponse(req) + } else { + resp, err = transport.RoundTrip(req) + if err != nil { + return nil, err + } + } + } + + if cacheable && canStore(parseCacheControl(req.Header), parseCacheControl(resp.Header)) { + for _, varyKey := range headerAllCommaSepValues(resp.Header, "vary") { + varyKey = http.CanonicalHeaderKey(varyKey) + fakeHeader := "X-Varied-" + varyKey + reqValue := req.Header.Get(varyKey) + if reqValue != "" { + resp.Header.Set(fakeHeader, reqValue) + } + } + switch req.Method { + case "GET": + // Delay caching until EOF is reached. + resp.Body = &cachingReadCloser{ + R: resp.Body, + OnEOF: func(r io.Reader) { + resp := *resp + resp.Body = ioutil.NopCloser(r) + respBytes, err := httputil.DumpResponse(&resp, true) + if err == nil { + t.Cache.Set(cacheKey, respBytes) + } + }, + } + default: + respBytes, err := httputil.DumpResponse(resp, true) + if err == nil { + t.Cache.Set(cacheKey, respBytes) + } + } + } else { + t.Cache.Delete(cacheKey) + } + return resp, nil +} + +// ErrNoDateHeader indicates that the HTTP headers contained no Date header. +var ErrNoDateHeader = errors.New("no Date header") + +// Date parses and returns the value of the Date header. +func Date(respHeaders http.Header) (date time.Time, err error) { + dateHeader := respHeaders.Get("date") + if dateHeader == "" { + err = ErrNoDateHeader + return + } + + return time.Parse(time.RFC1123, dateHeader) +} + +type realClock struct{} + +func (c *realClock) since(d time.Time) time.Duration { + return time.Since(d) +} + +type timer interface { + since(d time.Time) time.Duration +} + +var clock timer = &realClock{} + +// getFreshness will return one of fresh/stale/transparent based on the cache-control +// values of the request and the response +// +// fresh indicates the response can be returned +// stale indicates that the response needs validating before it is returned +// transparent indicates the response should not be used to fulfil the request +// +// Because this is only a private cache, 'public' and 'private' in cache-control aren't +// signficant. Similarly, smax-age isn't used. +func getFreshness(respHeaders, reqHeaders http.Header) (freshness int) { + respCacheControl := parseCacheControl(respHeaders) + reqCacheControl := parseCacheControl(reqHeaders) + if _, ok := reqCacheControl["no-cache"]; ok { + return transparent + } + if _, ok := respCacheControl["no-cache"]; ok { + return stale + } + if _, ok := reqCacheControl["only-if-cached"]; ok { + return fresh + } + + date, err := Date(respHeaders) + if err != nil { + return stale + } + currentAge := clock.since(date) + + var lifetime time.Duration + var zeroDuration time.Duration + + // If a response includes both an Expires header and a max-age directive, + // the max-age directive overrides the Expires header, even if the Expires header is more restrictive. + if maxAge, ok := respCacheControl["max-age"]; ok { + lifetime, err = time.ParseDuration(maxAge + "s") + if err != nil { + lifetime = zeroDuration + } + } else { + expiresHeader := respHeaders.Get("Expires") + if expiresHeader != "" { + expires, err := time.Parse(time.RFC1123, expiresHeader) + if err != nil { + lifetime = zeroDuration + } else { + lifetime = expires.Sub(date) + } + } + } + + if maxAge, ok := reqCacheControl["max-age"]; ok { + // the client is willing to accept a response whose age is no greater than the specified time in seconds + lifetime, err = time.ParseDuration(maxAge + "s") + if err != nil { + lifetime = zeroDuration + } + } + if minfresh, ok := reqCacheControl["min-fresh"]; ok { + // the client wants a response that will still be fresh for at least the specified number of seconds. + minfreshDuration, err := time.ParseDuration(minfresh + "s") + if err == nil { + currentAge = time.Duration(currentAge + minfreshDuration) + } + } + + if maxstale, ok := reqCacheControl["max-stale"]; ok { + // Indicates that the client is willing to accept a response that has exceeded its expiration time. + // If max-stale is assigned a value, then the client is willing to accept a response that has exceeded + // its expiration time by no more than the specified number of seconds. + // If no value is assigned to max-stale, then the client is willing to accept a stale response of any age. + // + // Responses served only because of a max-stale value are supposed to have a Warning header added to them, + // but that seems like a hassle, and is it actually useful? If so, then there needs to be a different + // return-value available here. + if maxstale == "" { + return fresh + } + maxstaleDuration, err := time.ParseDuration(maxstale + "s") + if err == nil { + currentAge = time.Duration(currentAge - maxstaleDuration) + } + } + + if lifetime > currentAge { + return fresh + } + + return stale +} + +// Returns true if either the request or the response includes the stale-if-error +// cache control extension: https://tools.ietf.org/html/rfc5861 +func canStaleOnError(respHeaders, reqHeaders http.Header) bool { + respCacheControl := parseCacheControl(respHeaders) + reqCacheControl := parseCacheControl(reqHeaders) + + var err error + lifetime := time.Duration(-1) + + if staleMaxAge, ok := respCacheControl["stale-if-error"]; ok { + if staleMaxAge != "" { + lifetime, err = time.ParseDuration(staleMaxAge + "s") + if err != nil { + return false + } + } else { + return true + } + } + if staleMaxAge, ok := reqCacheControl["stale-if-error"]; ok { + if staleMaxAge != "" { + lifetime, err = time.ParseDuration(staleMaxAge + "s") + if err != nil { + return false + } + } else { + return true + } + } + + if lifetime >= 0 { + date, err := Date(respHeaders) + if err != nil { + return false + } + currentAge := clock.since(date) + if lifetime > currentAge { + return true + } + } + + return false +} + +func getEndToEndHeaders(respHeaders http.Header) []string { + // These headers are always hop-by-hop + hopByHopHeaders := map[string]struct{}{ + "Connection": struct{}{}, + "Keep-Alive": struct{}{}, + "Proxy-Authenticate": struct{}{}, + "Proxy-Authorization": struct{}{}, + "Te": struct{}{}, + "Trailers": struct{}{}, + "Transfer-Encoding": struct{}{}, + "Upgrade": struct{}{}, + } + + for _, extra := range strings.Split(respHeaders.Get("connection"), ",") { + // any header listed in connection, if present, is also considered hop-by-hop + if strings.Trim(extra, " ") != "" { + hopByHopHeaders[http.CanonicalHeaderKey(extra)] = struct{}{} + } + } + endToEndHeaders := []string{} + for respHeader, _ := range respHeaders { + if _, ok := hopByHopHeaders[respHeader]; !ok { + endToEndHeaders = append(endToEndHeaders, respHeader) + } + } + return endToEndHeaders +} + +func canStore(reqCacheControl, respCacheControl cacheControl) (canStore bool) { + if _, ok := respCacheControl["no-store"]; ok { + return false + } + if _, ok := reqCacheControl["no-store"]; ok { + return false + } + return true +} + +func newGatewayTimeoutResponse(req *http.Request) *http.Response { + var braw bytes.Buffer + braw.WriteString("HTTP/1.1 504 Gateway Timeout\r\n\r\n") + resp, err := http.ReadResponse(bufio.NewReader(&braw), req) + if err != nil { + panic(err) + } + return resp +} + +// cloneRequest returns a clone of the provided *http.Request. +// The clone is a shallow copy of the struct and its Header map. +// (This function copyright goauth2 authors: https://code.google.com/p/goauth2) +func cloneRequest(r *http.Request) *http.Request { + // shallow copy of the struct + r2 := new(http.Request) + *r2 = *r + // deep copy of the Header + r2.Header = make(http.Header) + for k, s := range r.Header { + r2.Header[k] = s + } + return r2 +} + +type cacheControl map[string]string + +func parseCacheControl(headers http.Header) cacheControl { + cc := cacheControl{} + ccHeader := headers.Get("Cache-Control") + for _, part := range strings.Split(ccHeader, ",") { + part = strings.Trim(part, " ") + if part == "" { + continue + } + if strings.ContainsRune(part, '=') { + keyval := strings.Split(part, "=") + cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",") + } else { + cc[part] = "" + } + } + return cc +} + +// headerAllCommaSepValues returns all comma-separated values (each +// with whitespace trimmed) for header name in headers. According to +// Section 4.2 of the HTTP/1.1 spec +// (http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2), +// values from multiple occurrences of a header should be concatenated, if +// the header's value is a comma-separated list. +func headerAllCommaSepValues(headers http.Header, name string) []string { + var vals []string + for _, val := range headers[http.CanonicalHeaderKey(name)] { + fields := strings.Split(val, ",") + for i, f := range fields { + fields[i] = strings.TrimSpace(f) + } + vals = append(vals, fields...) + } + return vals +} + +// cachingReadCloser is a wrapper around ReadCloser R that calls OnEOF +// handler with a full copy of the content read from R when EOF is +// reached. +type cachingReadCloser struct { + // Underlying ReadCloser. + R io.ReadCloser + // OnEOF is called with a copy of the content of R when EOF is reached. + OnEOF func(io.Reader) + + buf bytes.Buffer // buf stores a copy of the content of R. +} + +// Read reads the next len(p) bytes from R or until R is drained. The +// return value n is the number of bytes read. If R has no data to +// return, err is io.EOF and OnEOF is called with a full copy of what +// has been read so far. +func (r *cachingReadCloser) Read(p []byte) (n int, err error) { + n, err = r.R.Read(p) + r.buf.Write(p[:n]) + if err == io.EOF { + r.OnEOF(bytes.NewReader(r.buf.Bytes())) + } + return n, err +} + +func (r *cachingReadCloser) Close() error { + return r.R.Close() +} + +// NewMemoryCacheTransport returns a new Transport using the in-memory cache implementation +func NewMemoryCacheTransport() *Transport { + c := NewMemoryCache() + t := NewTransport(c) + return t +} diff --git a/vendor/github.com/gregjones/httpcache/httpcache_test.go b/vendor/github.com/gregjones/httpcache/httpcache_test.go new file mode 100644 index 000000000..a50464180 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/httpcache_test.go @@ -0,0 +1,1475 @@ +package httpcache + +import ( + "bytes" + "errors" + "flag" + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "strconv" + "testing" + "time" +) + +var s struct { + server *httptest.Server + client http.Client + transport *Transport + done chan struct{} // Closed to unlock infinite handlers. +} + +type fakeClock struct { + elapsed time.Duration +} + +func (c *fakeClock) since(t time.Time) time.Duration { + return c.elapsed +} + +func TestMain(m *testing.M) { + flag.Parse() + setup() + code := m.Run() + teardown() + os.Exit(code) +} + +func setup() { + tp := NewMemoryCacheTransport() + client := http.Client{Transport: tp} + s.transport = tp + s.client = client + s.done = make(chan struct{}) + + mux := http.NewServeMux() + s.server = httptest.NewServer(mux) + + mux.HandleFunc("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "max-age=3600") + })) + + mux.HandleFunc("/method", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "max-age=3600") + w.Write([]byte(r.Method)) + })) + + mux.HandleFunc("/range", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + lm := "Fri, 14 Dec 2010 01:01:50 GMT" + if r.Header.Get("if-modified-since") == lm { + w.WriteHeader(http.StatusNotModified) + return + } + w.Header().Set("last-modified", lm) + if r.Header.Get("range") == "bytes=4-9" { + w.WriteHeader(http.StatusPartialContent) + w.Write([]byte(" text ")) + return + } + w.Write([]byte("Some text content")) + })) + + mux.HandleFunc("/nostore", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "no-store") + })) + + mux.HandleFunc("/etag", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + etag := "124567" + if r.Header.Get("if-none-match") == etag { + w.WriteHeader(http.StatusNotModified) + return + } + w.Header().Set("etag", etag) + })) + + mux.HandleFunc("/lastmodified", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + lm := "Fri, 14 Dec 2010 01:01:50 GMT" + if r.Header.Get("if-modified-since") == lm { + w.WriteHeader(http.StatusNotModified) + return + } + w.Header().Set("last-modified", lm) + })) + + mux.HandleFunc("/varyaccept", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "max-age=3600") + w.Header().Set("Content-Type", "text/plain") + w.Header().Set("Vary", "Accept") + w.Write([]byte("Some text content")) + })) + + mux.HandleFunc("/doublevary", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "max-age=3600") + w.Header().Set("Content-Type", "text/plain") + w.Header().Set("Vary", "Accept, Accept-Language") + w.Write([]byte("Some text content")) + })) + mux.HandleFunc("/2varyheaders", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "max-age=3600") + w.Header().Set("Content-Type", "text/plain") + w.Header().Add("Vary", "Accept") + w.Header().Add("Vary", "Accept-Language") + w.Write([]byte("Some text content")) + })) + mux.HandleFunc("/varyunused", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "max-age=3600") + w.Header().Set("Content-Type", "text/plain") + w.Header().Set("Vary", "X-Madeup-Header") + w.Write([]byte("Some text content")) + })) + + mux.HandleFunc("/cachederror", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + etag := "abc" + if r.Header.Get("if-none-match") == etag { + w.WriteHeader(http.StatusNotModified) + return + } + w.Header().Set("etag", etag) + w.WriteHeader(http.StatusNotFound) + w.Write([]byte("Not found")) + })) + + updateFieldsCounter := 0 + mux.HandleFunc("/updatefields", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("X-Counter", strconv.Itoa(updateFieldsCounter)) + w.Header().Set("Etag", `"e"`) + updateFieldsCounter++ + if r.Header.Get("if-none-match") != "" { + w.WriteHeader(http.StatusNotModified) + return + } + w.Write([]byte("Some text content")) + })) + + // Take 3 seconds to return 200 OK (for testing client timeouts). + mux.HandleFunc("/3seconds", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + time.Sleep(3 * time.Second) + })) + + mux.HandleFunc("/infinite", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + for { + select { + case <-s.done: + return + default: + w.Write([]byte{0}) + } + } + })) +} + +func teardown() { + close(s.done) + s.server.Close() +} + +func resetTest() { + s.transport.Cache = NewMemoryCache() + clock = &realClock{} +} + +// TestCacheableMethod ensures that uncacheable method does not get stored +// in cache and get incorrectly used for a following cacheable method request. +func TestCacheableMethod(t *testing.T) { + resetTest() + { + req, err := http.NewRequest("POST", s.server.URL+"/method", nil) + if err != nil { + t.Fatal(err) + } + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + var buf bytes.Buffer + _, err = io.Copy(&buf, resp.Body) + if err != nil { + t.Fatal(err) + } + err = resp.Body.Close() + if err != nil { + t.Fatal(err) + } + if got, want := buf.String(), "POST"; got != want { + t.Errorf("got %q, want %q", got, want) + } + if resp.StatusCode != http.StatusOK { + t.Errorf("response status code isn't 200 OK: %v", resp.StatusCode) + } + } + { + req, err := http.NewRequest("GET", s.server.URL+"/method", nil) + if err != nil { + t.Fatal(err) + } + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + var buf bytes.Buffer + _, err = io.Copy(&buf, resp.Body) + if err != nil { + t.Fatal(err) + } + err = resp.Body.Close() + if err != nil { + t.Fatal(err) + } + if got, want := buf.String(), "GET"; got != want { + t.Errorf("got wrong body %q, want %q", got, want) + } + if resp.StatusCode != http.StatusOK { + t.Errorf("response status code isn't 200 OK: %v", resp.StatusCode) + } + if resp.Header.Get(XFromCache) != "" { + t.Errorf("XFromCache header isn't blank") + } + } +} + +func TestDontServeHeadResponseToGetRequest(t *testing.T) { + resetTest() + url := s.server.URL + "/" + req, err := http.NewRequest(http.MethodHead, url, nil) + if err != nil { + t.Fatal(err) + } + _, err = s.client.Do(req) + if err != nil { + t.Fatal(err) + } + req, err = http.NewRequest(http.MethodGet, url, nil) + if err != nil { + t.Fatal(err) + } + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + if resp.Header.Get(XFromCache) != "" { + t.Errorf("Cache should not match") + } +} + +func TestDontStorePartialRangeInCache(t *testing.T) { + resetTest() + { + req, err := http.NewRequest("GET", s.server.URL+"/range", nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("range", "bytes=4-9") + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + var buf bytes.Buffer + _, err = io.Copy(&buf, resp.Body) + if err != nil { + t.Fatal(err) + } + err = resp.Body.Close() + if err != nil { + t.Fatal(err) + } + if got, want := buf.String(), " text "; got != want { + t.Errorf("got %q, want %q", got, want) + } + if resp.StatusCode != http.StatusPartialContent { + t.Errorf("response status code isn't 206 Partial Content: %v", resp.StatusCode) + } + } + { + req, err := http.NewRequest("GET", s.server.URL+"/range", nil) + if err != nil { + t.Fatal(err) + } + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + var buf bytes.Buffer + _, err = io.Copy(&buf, resp.Body) + if err != nil { + t.Fatal(err) + } + err = resp.Body.Close() + if err != nil { + t.Fatal(err) + } + if got, want := buf.String(), "Some text content"; got != want { + t.Errorf("got %q, want %q", got, want) + } + if resp.StatusCode != http.StatusOK { + t.Errorf("response status code isn't 200 OK: %v", resp.StatusCode) + } + if resp.Header.Get(XFromCache) != "" { + t.Error("XFromCache header isn't blank") + } + } + { + req, err := http.NewRequest("GET", s.server.URL+"/range", nil) + if err != nil { + t.Fatal(err) + } + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + var buf bytes.Buffer + _, err = io.Copy(&buf, resp.Body) + if err != nil { + t.Fatal(err) + } + err = resp.Body.Close() + if err != nil { + t.Fatal(err) + } + if got, want := buf.String(), "Some text content"; got != want { + t.Errorf("got %q, want %q", got, want) + } + if resp.StatusCode != http.StatusOK { + t.Errorf("response status code isn't 200 OK: %v", resp.StatusCode) + } + if resp.Header.Get(XFromCache) != "1" { + t.Errorf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) + } + } + { + req, err := http.NewRequest("GET", s.server.URL+"/range", nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("range", "bytes=4-9") + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + var buf bytes.Buffer + _, err = io.Copy(&buf, resp.Body) + if err != nil { + t.Fatal(err) + } + err = resp.Body.Close() + if err != nil { + t.Fatal(err) + } + if got, want := buf.String(), " text "; got != want { + t.Errorf("got %q, want %q", got, want) + } + if resp.StatusCode != http.StatusPartialContent { + t.Errorf("response status code isn't 206 Partial Content: %v", resp.StatusCode) + } + } +} + +func TestCacheOnlyIfBodyRead(t *testing.T) { + resetTest() + { + req, err := http.NewRequest("GET", s.server.URL, nil) + if err != nil { + t.Fatal(err) + } + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + // We do not read the body + resp.Body.Close() + } + { + req, err := http.NewRequest("GET", s.server.URL, nil) + if err != nil { + t.Fatal(err) + } + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatalf("XFromCache header isn't blank") + } + } +} + +func TestOnlyReadBodyOnDemand(t *testing.T) { + resetTest() + + req, err := http.NewRequest("GET", s.server.URL+"/infinite", nil) + if err != nil { + t.Fatal(err) + } + resp, err := s.client.Do(req) // This shouldn't hang forever. + if err != nil { + t.Fatal(err) + } + buf := make([]byte, 10) // Only partially read the body. + _, err = resp.Body.Read(buf) + if err != nil { + t.Fatal(err) + } + resp.Body.Close() +} + +func TestGetOnlyIfCachedHit(t *testing.T) { + resetTest() + { + req, err := http.NewRequest("GET", s.server.URL, nil) + if err != nil { + t.Fatal(err) + } + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + } + { + req, err := http.NewRequest("GET", s.server.URL, nil) + if err != nil { + t.Fatal(err) + } + req.Header.Add("cache-control", "only-if-cached") + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "1" { + t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) + } + if resp.StatusCode != http.StatusOK { + t.Fatalf("response status code isn't 200 OK: %v", resp.StatusCode) + } + } +} + +func TestGetOnlyIfCachedMiss(t *testing.T) { + resetTest() + req, err := http.NewRequest("GET", s.server.URL, nil) + if err != nil { + t.Fatal(err) + } + req.Header.Add("cache-control", "only-if-cached") + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + if resp.StatusCode != http.StatusGatewayTimeout { + t.Fatalf("response status code isn't 504 GatewayTimeout: %v", resp.StatusCode) + } +} + +func TestGetNoStoreRequest(t *testing.T) { + resetTest() + req, err := http.NewRequest("GET", s.server.URL, nil) + if err != nil { + t.Fatal(err) + } + req.Header.Add("Cache-Control", "no-store") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } +} + +func TestGetNoStoreResponse(t *testing.T) { + resetTest() + req, err := http.NewRequest("GET", s.server.URL+"/nostore", nil) + if err != nil { + t.Fatal(err) + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } +} + +func TestGetWithEtag(t *testing.T) { + resetTest() + req, err := http.NewRequest("GET", s.server.URL+"/etag", nil) + if err != nil { + t.Fatal(err) + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "1" { + t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) + } + // additional assertions to verify that 304 response is converted properly + if resp.StatusCode != http.StatusOK { + t.Fatalf("response status code isn't 200 OK: %v", resp.StatusCode) + } + if _, ok := resp.Header["Connection"]; ok { + t.Fatalf("Connection header isn't absent") + } + } +} + +func TestGetWithLastModified(t *testing.T) { + resetTest() + req, err := http.NewRequest("GET", s.server.URL+"/lastmodified", nil) + if err != nil { + t.Fatal(err) + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "1" { + t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) + } + } +} + +func TestGetWithVary(t *testing.T) { + resetTest() + req, err := http.NewRequest("GET", s.server.URL+"/varyaccept", nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Accept", "text/plain") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get("Vary") != "Accept" { + t.Fatalf(`Vary header isn't "Accept": %v`, resp.Header.Get("Vary")) + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "1" { + t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) + } + } + req.Header.Set("Accept", "text/html") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } + req.Header.Set("Accept", "") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } +} + +func TestGetWithDoubleVary(t *testing.T) { + resetTest() + req, err := http.NewRequest("GET", s.server.URL+"/doublevary", nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Accept", "text/plain") + req.Header.Set("Accept-Language", "da, en-gb;q=0.8, en;q=0.7") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get("Vary") == "" { + t.Fatalf(`Vary header is blank`) + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "1" { + t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) + } + } + req.Header.Set("Accept-Language", "") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } + req.Header.Set("Accept-Language", "da") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } +} + +func TestGetWith2VaryHeaders(t *testing.T) { + resetTest() + // Tests that multiple Vary headers' comma-separated lists are + // merged. See https://github.com/gregjones/httpcache/issues/27. + const ( + accept = "text/plain" + acceptLanguage = "da, en-gb;q=0.8, en;q=0.7" + ) + req, err := http.NewRequest("GET", s.server.URL+"/2varyheaders", nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Accept", accept) + req.Header.Set("Accept-Language", acceptLanguage) + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get("Vary") == "" { + t.Fatalf(`Vary header is blank`) + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "1" { + t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) + } + } + req.Header.Set("Accept-Language", "") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } + req.Header.Set("Accept-Language", "da") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } + req.Header.Set("Accept-Language", acceptLanguage) + req.Header.Set("Accept", "") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + } + req.Header.Set("Accept", "image/png") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "" { + t.Fatal("XFromCache header isn't blank") + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "1" { + t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) + } + } +} + +func TestGetVaryUnused(t *testing.T) { + resetTest() + req, err := http.NewRequest("GET", s.server.URL+"/varyunused", nil) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Accept", "text/plain") + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get("Vary") == "" { + t.Fatalf(`Vary header is blank`) + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "1" { + t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) + } + } +} + +func TestUpdateFields(t *testing.T) { + resetTest() + req, err := http.NewRequest("GET", s.server.URL+"/updatefields", nil) + if err != nil { + t.Fatal(err) + } + var counter, counter2 string + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + counter = resp.Header.Get("x-counter") + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.Header.Get(XFromCache) != "1" { + t.Fatalf(`XFromCache header isn't "1": %v`, resp.Header.Get(XFromCache)) + } + counter2 = resp.Header.Get("x-counter") + } + if counter == counter2 { + t.Fatalf(`both "x-counter" values are equal: %v %v`, counter, counter2) + } +} + +// This tests the fix for https://github.com/gregjones/httpcache/issues/74. +// Previously, after validating a cached response, its StatusCode +// was incorrectly being replaced. +func TestCachedErrorsKeepStatus(t *testing.T) { + resetTest() + req, err := http.NewRequest("GET", s.server.URL+"/cachederror", nil) + if err != nil { + t.Fatal(err) + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + io.Copy(ioutil.Discard, resp.Body) + } + { + resp, err := s.client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusNotFound { + t.Fatalf("Status code isn't 404: %d", resp.StatusCode) + } + } +} + +func TestParseCacheControl(t *testing.T) { + resetTest() + h := http.Header{} + for range parseCacheControl(h) { + t.Fatal("cacheControl should be empty") + } + + h.Set("cache-control", "no-cache") + { + cc := parseCacheControl(h) + if _, ok := cc["foo"]; ok { + t.Error(`Value "foo" shouldn't exist`) + } + noCache, ok := cc["no-cache"] + if !ok { + t.Fatalf(`"no-cache" value isn't set`) + } + if noCache != "" { + t.Fatalf(`"no-cache" value isn't blank: %v`, noCache) + } + } + h.Set("cache-control", "no-cache, max-age=3600") + { + cc := parseCacheControl(h) + noCache, ok := cc["no-cache"] + if !ok { + t.Fatalf(`"no-cache" value isn't set`) + } + if noCache != "" { + t.Fatalf(`"no-cache" value isn't blank: %v`, noCache) + } + if cc["max-age"] != "3600" { + t.Fatalf(`"max-age" value isn't "3600": %v`, cc["max-age"]) + } + } +} + +func TestNoCacheRequestExpiration(t *testing.T) { + resetTest() + respHeaders := http.Header{} + respHeaders.Set("Cache-Control", "max-age=7200") + + reqHeaders := http.Header{} + reqHeaders.Set("Cache-Control", "no-cache") + if getFreshness(respHeaders, reqHeaders) != transparent { + t.Fatal("freshness isn't transparent") + } +} + +func TestNoCacheResponseExpiration(t *testing.T) { + resetTest() + respHeaders := http.Header{} + respHeaders.Set("Cache-Control", "no-cache") + respHeaders.Set("Expires", "Wed, 19 Apr 3000 11:43:00 GMT") + + reqHeaders := http.Header{} + if getFreshness(respHeaders, reqHeaders) != stale { + t.Fatal("freshness isn't stale") + } +} + +func TestReqMustRevalidate(t *testing.T) { + resetTest() + // not paying attention to request setting max-stale means never returning stale + // responses, so always acting as if must-revalidate is set + respHeaders := http.Header{} + + reqHeaders := http.Header{} + reqHeaders.Set("Cache-Control", "must-revalidate") + if getFreshness(respHeaders, reqHeaders) != stale { + t.Fatal("freshness isn't stale") + } +} + +func TestRespMustRevalidate(t *testing.T) { + resetTest() + respHeaders := http.Header{} + respHeaders.Set("Cache-Control", "must-revalidate") + + reqHeaders := http.Header{} + if getFreshness(respHeaders, reqHeaders) != stale { + t.Fatal("freshness isn't stale") + } +} + +func TestFreshExpiration(t *testing.T) { + resetTest() + now := time.Now() + respHeaders := http.Header{} + respHeaders.Set("date", now.Format(time.RFC1123)) + respHeaders.Set("expires", now.Add(time.Duration(2)*time.Second).Format(time.RFC1123)) + + reqHeaders := http.Header{} + if getFreshness(respHeaders, reqHeaders) != fresh { + t.Fatal("freshness isn't fresh") + } + + clock = &fakeClock{elapsed: 3 * time.Second} + if getFreshness(respHeaders, reqHeaders) != stale { + t.Fatal("freshness isn't stale") + } +} + +func TestMaxAge(t *testing.T) { + resetTest() + now := time.Now() + respHeaders := http.Header{} + respHeaders.Set("date", now.Format(time.RFC1123)) + respHeaders.Set("cache-control", "max-age=2") + + reqHeaders := http.Header{} + if getFreshness(respHeaders, reqHeaders) != fresh { + t.Fatal("freshness isn't fresh") + } + + clock = &fakeClock{elapsed: 3 * time.Second} + if getFreshness(respHeaders, reqHeaders) != stale { + t.Fatal("freshness isn't stale") + } +} + +func TestMaxAgeZero(t *testing.T) { + resetTest() + now := time.Now() + respHeaders := http.Header{} + respHeaders.Set("date", now.Format(time.RFC1123)) + respHeaders.Set("cache-control", "max-age=0") + + reqHeaders := http.Header{} + if getFreshness(respHeaders, reqHeaders) != stale { + t.Fatal("freshness isn't stale") + } +} + +func TestBothMaxAge(t *testing.T) { + resetTest() + now := time.Now() + respHeaders := http.Header{} + respHeaders.Set("date", now.Format(time.RFC1123)) + respHeaders.Set("cache-control", "max-age=2") + + reqHeaders := http.Header{} + reqHeaders.Set("cache-control", "max-age=0") + if getFreshness(respHeaders, reqHeaders) != stale { + t.Fatal("freshness isn't stale") + } +} + +func TestMinFreshWithExpires(t *testing.T) { + resetTest() + now := time.Now() + respHeaders := http.Header{} + respHeaders.Set("date", now.Format(time.RFC1123)) + respHeaders.Set("expires", now.Add(time.Duration(2)*time.Second).Format(time.RFC1123)) + + reqHeaders := http.Header{} + reqHeaders.Set("cache-control", "min-fresh=1") + if getFreshness(respHeaders, reqHeaders) != fresh { + t.Fatal("freshness isn't fresh") + } + + reqHeaders = http.Header{} + reqHeaders.Set("cache-control", "min-fresh=2") + if getFreshness(respHeaders, reqHeaders) != stale { + t.Fatal("freshness isn't stale") + } +} + +func TestEmptyMaxStale(t *testing.T) { + resetTest() + now := time.Now() + respHeaders := http.Header{} + respHeaders.Set("date", now.Format(time.RFC1123)) + respHeaders.Set("cache-control", "max-age=20") + + reqHeaders := http.Header{} + reqHeaders.Set("cache-control", "max-stale") + clock = &fakeClock{elapsed: 10 * time.Second} + if getFreshness(respHeaders, reqHeaders) != fresh { + t.Fatal("freshness isn't fresh") + } + + clock = &fakeClock{elapsed: 60 * time.Second} + if getFreshness(respHeaders, reqHeaders) != fresh { + t.Fatal("freshness isn't fresh") + } +} + +func TestMaxStaleValue(t *testing.T) { + resetTest() + now := time.Now() + respHeaders := http.Header{} + respHeaders.Set("date", now.Format(time.RFC1123)) + respHeaders.Set("cache-control", "max-age=10") + + reqHeaders := http.Header{} + reqHeaders.Set("cache-control", "max-stale=20") + clock = &fakeClock{elapsed: 5 * time.Second} + if getFreshness(respHeaders, reqHeaders) != fresh { + t.Fatal("freshness isn't fresh") + } + + clock = &fakeClock{elapsed: 15 * time.Second} + if getFreshness(respHeaders, reqHeaders) != fresh { + t.Fatal("freshness isn't fresh") + } + + clock = &fakeClock{elapsed: 30 * time.Second} + if getFreshness(respHeaders, reqHeaders) != stale { + t.Fatal("freshness isn't stale") + } +} + +func containsHeader(headers []string, header string) bool { + for _, v := range headers { + if http.CanonicalHeaderKey(v) == http.CanonicalHeaderKey(header) { + return true + } + } + return false +} + +func TestGetEndToEndHeaders(t *testing.T) { + resetTest() + var ( + headers http.Header + end2end []string + ) + + headers = http.Header{} + headers.Set("content-type", "text/html") + headers.Set("te", "deflate") + + end2end = getEndToEndHeaders(headers) + if !containsHeader(end2end, "content-type") { + t.Fatal(`doesn't contain "content-type" header`) + } + if containsHeader(end2end, "te") { + t.Fatal(`doesn't contain "te" header`) + } + + headers = http.Header{} + headers.Set("connection", "content-type") + headers.Set("content-type", "text/csv") + headers.Set("te", "deflate") + end2end = getEndToEndHeaders(headers) + if containsHeader(end2end, "connection") { + t.Fatal(`doesn't contain "connection" header`) + } + if containsHeader(end2end, "content-type") { + t.Fatal(`doesn't contain "content-type" header`) + } + if containsHeader(end2end, "te") { + t.Fatal(`doesn't contain "te" header`) + } + + headers = http.Header{} + end2end = getEndToEndHeaders(headers) + if len(end2end) != 0 { + t.Fatal(`non-zero end2end headers`) + } + + headers = http.Header{} + headers.Set("connection", "content-type") + end2end = getEndToEndHeaders(headers) + if len(end2end) != 0 { + t.Fatal(`non-zero end2end headers`) + } +} + +type transportMock struct { + response *http.Response + err error +} + +func (t transportMock) RoundTrip(req *http.Request) (resp *http.Response, err error) { + return t.response, t.err +} + +func TestStaleIfErrorRequest(t *testing.T) { + resetTest() + now := time.Now() + tmock := transportMock{ + response: &http.Response{ + Status: http.StatusText(http.StatusOK), + StatusCode: http.StatusOK, + Header: http.Header{ + "Date": []string{now.Format(time.RFC1123)}, + "Cache-Control": []string{"no-cache"}, + }, + Body: ioutil.NopCloser(bytes.NewBuffer([]byte("some data"))), + }, + err: nil, + } + tp := NewMemoryCacheTransport() + tp.Transport = &tmock + + // First time, response is cached on success + r, _ := http.NewRequest("GET", "http://somewhere.com/", nil) + r.Header.Set("Cache-Control", "stale-if-error") + resp, err := tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + + // On failure, response is returned from the cache + tmock.response = nil + tmock.err = errors.New("some error") + resp, err = tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } +} + +func TestStaleIfErrorRequestLifetime(t *testing.T) { + resetTest() + now := time.Now() + tmock := transportMock{ + response: &http.Response{ + Status: http.StatusText(http.StatusOK), + StatusCode: http.StatusOK, + Header: http.Header{ + "Date": []string{now.Format(time.RFC1123)}, + "Cache-Control": []string{"no-cache"}, + }, + Body: ioutil.NopCloser(bytes.NewBuffer([]byte("some data"))), + }, + err: nil, + } + tp := NewMemoryCacheTransport() + tp.Transport = &tmock + + // First time, response is cached on success + r, _ := http.NewRequest("GET", "http://somewhere.com/", nil) + r.Header.Set("Cache-Control", "stale-if-error=100") + resp, err := tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + + // On failure, response is returned from the cache + tmock.response = nil + tmock.err = errors.New("some error") + resp, err = tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } + + // Same for http errors + tmock.response = &http.Response{StatusCode: http.StatusInternalServerError} + tmock.err = nil + resp, err = tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } + + // If failure last more than max stale, error is returned + clock = &fakeClock{elapsed: 200 * time.Second} + _, err = tp.RoundTrip(r) + if err != tmock.err { + t.Fatalf("got err %v, want %v", err, tmock.err) + } +} + +func TestStaleIfErrorResponse(t *testing.T) { + resetTest() + now := time.Now() + tmock := transportMock{ + response: &http.Response{ + Status: http.StatusText(http.StatusOK), + StatusCode: http.StatusOK, + Header: http.Header{ + "Date": []string{now.Format(time.RFC1123)}, + "Cache-Control": []string{"no-cache, stale-if-error"}, + }, + Body: ioutil.NopCloser(bytes.NewBuffer([]byte("some data"))), + }, + err: nil, + } + tp := NewMemoryCacheTransport() + tp.Transport = &tmock + + // First time, response is cached on success + r, _ := http.NewRequest("GET", "http://somewhere.com/", nil) + resp, err := tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + + // On failure, response is returned from the cache + tmock.response = nil + tmock.err = errors.New("some error") + resp, err = tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } +} + +func TestStaleIfErrorResponseLifetime(t *testing.T) { + resetTest() + now := time.Now() + tmock := transportMock{ + response: &http.Response{ + Status: http.StatusText(http.StatusOK), + StatusCode: http.StatusOK, + Header: http.Header{ + "Date": []string{now.Format(time.RFC1123)}, + "Cache-Control": []string{"no-cache, stale-if-error=100"}, + }, + Body: ioutil.NopCloser(bytes.NewBuffer([]byte("some data"))), + }, + err: nil, + } + tp := NewMemoryCacheTransport() + tp.Transport = &tmock + + // First time, response is cached on success + r, _ := http.NewRequest("GET", "http://somewhere.com/", nil) + resp, err := tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + + // On failure, response is returned from the cache + tmock.response = nil + tmock.err = errors.New("some error") + resp, err = tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } + + // If failure last more than max stale, error is returned + clock = &fakeClock{elapsed: 200 * time.Second} + _, err = tp.RoundTrip(r) + if err != tmock.err { + t.Fatalf("got err %v, want %v", err, tmock.err) + } +} + +// This tests the fix for https://github.com/gregjones/httpcache/issues/74. +// Previously, after a stale response was used after encountering an error, +// its StatusCode was being incorrectly replaced. +func TestStaleIfErrorKeepsStatus(t *testing.T) { + resetTest() + now := time.Now() + tmock := transportMock{ + response: &http.Response{ + Status: http.StatusText(http.StatusNotFound), + StatusCode: http.StatusNotFound, + Header: http.Header{ + "Date": []string{now.Format(time.RFC1123)}, + "Cache-Control": []string{"no-cache"}, + }, + Body: ioutil.NopCloser(bytes.NewBuffer([]byte("some data"))), + }, + err: nil, + } + tp := NewMemoryCacheTransport() + tp.Transport = &tmock + + // First time, response is cached on success + r, _ := http.NewRequest("GET", "http://somewhere.com/", nil) + r.Header.Set("Cache-Control", "stale-if-error") + resp, err := tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } + _, err = ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + + // On failure, response is returned from the cache + tmock.response = nil + tmock.err = errors.New("some error") + resp, err = tp.RoundTrip(r) + if err != nil { + t.Fatal(err) + } + if resp == nil { + t.Fatal("resp is nil") + } + if resp.StatusCode != http.StatusNotFound { + t.Fatalf("Status wasn't 404: %d", resp.StatusCode) + } +} + +// Test that http.Client.Timeout is respected when cache transport is used. +// That is so as long as request cancellation is propagated correctly. +// In the past, that required CancelRequest to be implemented correctly, +// but modern http.Client uses Request.Cancel (or request context) instead, +// so we don't have to do anything. +func TestClientTimeout(t *testing.T) { + if testing.Short() { + t.Skip("skipping timeout test in short mode") // Because it takes at least 3 seconds to run. + } + resetTest() + client := &http.Client{ + Transport: NewMemoryCacheTransport(), + Timeout: time.Second, + } + started := time.Now() + resp, err := client.Get(s.server.URL + "/3seconds") + taken := time.Since(started) + if err == nil { + t.Error("got nil error, want timeout error") + } + if resp != nil { + t.Error("got non-nil resp, want nil resp") + } + if taken >= 2*time.Second { + t.Error("client.Do took 2+ seconds, want < 2 seconds") + } +} diff --git a/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache.go b/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache.go new file mode 100644 index 000000000..9bcb7e277 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache.go @@ -0,0 +1,51 @@ +// Package leveldbcache provides an implementation of httpcache.Cache that +// uses github.com/syndtr/goleveldb/leveldb +package leveldbcache + +import ( + "github.com/syndtr/goleveldb/leveldb" +) + +// Cache is an implementation of httpcache.Cache with leveldb storage +type Cache struct { + db *leveldb.DB +} + +// Get returns the response corresponding to key if present +func (c *Cache) Get(key string) (resp []byte, ok bool) { + var err error + resp, err = c.db.Get([]byte(key), nil) + if err != nil { + return []byte{}, false + } + return resp, true +} + +// Set saves a response to the cache as key +func (c *Cache) Set(key string, resp []byte) { + c.db.Put([]byte(key), resp, nil) +} + +// Delete removes the response with key from the cache +func (c *Cache) Delete(key string) { + c.db.Delete([]byte(key), nil) +} + +// New returns a new Cache that will store leveldb in path +func New(path string) (*Cache, error) { + cache := &Cache{} + + var err error + cache.db, err = leveldb.OpenFile(path, nil) + + if err != nil { + return nil, err + } + return cache, nil +} + +// NewWithDB returns a new Cache using the provided leveldb as underlying +// storage. +func NewWithDB(db *leveldb.DB) *Cache { + return &Cache{db} +} diff --git a/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache_test.go b/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache_test.go new file mode 100644 index 000000000..b885c0169 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/leveldbcache/leveldbcache_test.go @@ -0,0 +1,46 @@ +package leveldbcache + +import ( + "bytes" + "io/ioutil" + "os" + "path/filepath" + "testing" +) + +func TestDiskCache(t *testing.T) { + tempDir, err := ioutil.TempDir("", "httpcache") + if err != nil { + t.Fatalf("TempDir: %v", err) + } + defer os.RemoveAll(tempDir) + + cache, err := New(filepath.Join(tempDir, "db")) + if err != nil { + t.Fatalf("New leveldb,: %v", err) + } + + key := "testKey" + _, ok := cache.Get(key) + if ok { + t.Fatal("retrieved key before adding it") + } + + val := []byte("some bytes") + cache.Set(key, val) + + retVal, ok := cache.Get(key) + if !ok { + t.Fatal("could not retrieve an element we just added") + } + if !bytes.Equal(retVal, val) { + t.Fatal("retrieved a different value than what we put in") + } + + cache.Delete(key) + + _, ok = cache.Get(key) + if ok { + t.Fatal("deleted key still present") + } +} diff --git a/vendor/github.com/gregjones/httpcache/memcache/appengine.go b/vendor/github.com/gregjones/httpcache/memcache/appengine.go new file mode 100644 index 000000000..e68d9bc09 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/memcache/appengine.go @@ -0,0 +1,61 @@ +// +build appengine + +// Package memcache provides an implementation of httpcache.Cache that uses App +// Engine's memcache package to store cached responses. +// +// When not built for Google App Engine, this package will provide an +// implementation that connects to a specified memcached server. See the +// memcache.go file in this package for details. +package memcache + +import ( + "appengine" + "appengine/memcache" +) + +// Cache is an implementation of httpcache.Cache that caches responses in App +// Engine's memcache. +type Cache struct { + appengine.Context +} + +// cacheKey modifies an httpcache key for use in memcache. Specifically, it +// prefixes keys to avoid collision with other data stored in memcache. +func cacheKey(key string) string { + return "httpcache:" + key +} + +// Get returns the response corresponding to key if present. +func (c *Cache) Get(key string) (resp []byte, ok bool) { + item, err := memcache.Get(c.Context, cacheKey(key)) + if err != nil { + if err != memcache.ErrCacheMiss { + c.Context.Errorf("error getting cached response: %v", err) + } + return nil, false + } + return item.Value, true +} + +// Set saves a response to the cache as key. +func (c *Cache) Set(key string, resp []byte) { + item := &memcache.Item{ + Key: cacheKey(key), + Value: resp, + } + if err := memcache.Set(c.Context, item); err != nil { + c.Context.Errorf("error caching response: %v", err) + } +} + +// Delete removes the response with key from the cache. +func (c *Cache) Delete(key string) { + if err := memcache.Delete(c.Context, cacheKey(key)); err != nil { + c.Context.Errorf("error deleting cached response: %v", err) + } +} + +// New returns a new Cache for the given context. +func New(ctx appengine.Context) *Cache { + return &Cache{ctx} +} diff --git a/vendor/github.com/gregjones/httpcache/memcache/appengine_test.go b/vendor/github.com/gregjones/httpcache/memcache/appengine_test.go new file mode 100644 index 000000000..818b2776e --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/memcache/appengine_test.go @@ -0,0 +1,44 @@ +// +build appengine + +package memcache + +import ( + "bytes" + "testing" + + "appengine/aetest" +) + +func TestAppEngine(t *testing.T) { + ctx, err := aetest.NewContext(nil) + if err != nil { + t.Fatal(err) + } + defer ctx.Close() + + cache := New(ctx) + + key := "testKey" + _, ok := cache.Get(key) + if ok { + t.Fatal("retrieved key before adding it") + } + + val := []byte("some bytes") + cache.Set(key, val) + + retVal, ok := cache.Get(key) + if !ok { + t.Fatal("could not retrieve an element we just added") + } + if !bytes.Equal(retVal, val) { + t.Fatal("retrieved a different value than what we put in") + } + + cache.Delete(key) + + _, ok = cache.Get(key) + if ok { + t.Fatal("deleted key still present") + } +} diff --git a/vendor/github.com/gregjones/httpcache/memcache/memcache.go b/vendor/github.com/gregjones/httpcache/memcache/memcache.go new file mode 100644 index 000000000..462f0e541 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/memcache/memcache.go @@ -0,0 +1,60 @@ +// +build !appengine + +// Package memcache provides an implementation of httpcache.Cache that uses +// gomemcache to store cached responses. +// +// When built for Google App Engine, this package will provide an +// implementation that uses App Engine's memcache service. See the +// appengine.go file in this package for details. +package memcache + +import ( + "github.com/bradfitz/gomemcache/memcache" +) + +// Cache is an implementation of httpcache.Cache that caches responses in a +// memcache server. +type Cache struct { + *memcache.Client +} + +// cacheKey modifies an httpcache key for use in memcache. Specifically, it +// prefixes keys to avoid collision with other data stored in memcache. +func cacheKey(key string) string { + return "httpcache:" + key +} + +// Get returns the response corresponding to key if present. +func (c *Cache) Get(key string) (resp []byte, ok bool) { + item, err := c.Client.Get(cacheKey(key)) + if err != nil { + return nil, false + } + return item.Value, true +} + +// Set saves a response to the cache as key. +func (c *Cache) Set(key string, resp []byte) { + item := &memcache.Item{ + Key: cacheKey(key), + Value: resp, + } + c.Client.Set(item) +} + +// Delete removes the response with key from the cache. +func (c *Cache) Delete(key string) { + c.Client.Delete(cacheKey(key)) +} + +// New returns a new Cache using the provided memcache server(s) with equal +// weight. If a server is listed multiple times, it gets a proportional amount +// of weight. +func New(server ...string) *Cache { + return NewWithClient(memcache.New(server...)) +} + +// NewWithClient returns a new Cache with the given memcache client. +func NewWithClient(client *memcache.Client) *Cache { + return &Cache{client} +} diff --git a/vendor/github.com/gregjones/httpcache/memcache/memcache_test.go b/vendor/github.com/gregjones/httpcache/memcache/memcache_test.go new file mode 100644 index 000000000..4dcc547c6 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/memcache/memcache_test.go @@ -0,0 +1,47 @@ +// +build !appengine + +package memcache + +import ( + "bytes" + "net" + "testing" +) + +const testServer = "localhost:11211" + +func TestMemCache(t *testing.T) { + conn, err := net.Dial("tcp", testServer) + if err != nil { + // TODO: rather than skip the test, fall back to a faked memcached server + t.Skipf("skipping test; no server running at %s", testServer) + } + conn.Write([]byte("flush_all\r\n")) // flush memcache + conn.Close() + + cache := New(testServer) + + key := "testKey" + _, ok := cache.Get(key) + if ok { + t.Fatal("retrieved key before adding it") + } + + val := []byte("some bytes") + cache.Set(key, val) + + retVal, ok := cache.Get(key) + if !ok { + t.Fatal("could not retrieve an element we just added") + } + if !bytes.Equal(retVal, val) { + t.Fatal("retrieved a different value than what we put in") + } + + cache.Delete(key) + + _, ok = cache.Get(key) + if ok { + t.Fatal("deleted key still present") + } +} diff --git a/vendor/github.com/gregjones/httpcache/redis/redis.go b/vendor/github.com/gregjones/httpcache/redis/redis.go new file mode 100644 index 000000000..3d69c6c7b --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/redis/redis.go @@ -0,0 +1,43 @@ +// Package redis provides a redis interface for http caching. +package redis + +import ( + "github.com/gomodule/redigo/redis" + "github.com/gregjones/httpcache" +) + +// cache is an implementation of httpcache.Cache that caches responses in a +// redis server. +type cache struct { + redis.Conn +} + +// cacheKey modifies an httpcache key for use in redis. Specifically, it +// prefixes keys to avoid collision with other data stored in redis. +func cacheKey(key string) string { + return "rediscache:" + key +} + +// Get returns the response corresponding to key if present. +func (c cache) Get(key string) (resp []byte, ok bool) { + item, err := redis.Bytes(c.Do("GET", cacheKey(key))) + if err != nil { + return nil, false + } + return item, true +} + +// Set saves a response to the cache as key. +func (c cache) Set(key string, resp []byte) { + c.Do("SET", cacheKey(key), resp) +} + +// Delete removes the response with key from the cache. +func (c cache) Delete(key string) { + c.Do("DEL", cacheKey(key)) +} + +// NewWithClient returns a new Cache with the given redis connection. +func NewWithClient(client redis.Conn) httpcache.Cache { + return cache{client} +} diff --git a/vendor/github.com/gregjones/httpcache/redis/redis_test.go b/vendor/github.com/gregjones/httpcache/redis/redis_test.go new file mode 100644 index 000000000..56f7dd520 --- /dev/null +++ b/vendor/github.com/gregjones/httpcache/redis/redis_test.go @@ -0,0 +1,43 @@ +package redis + +import ( + "bytes" + "testing" + + "github.com/gomodule/redigo/redis" +) + +func TestRedisCache(t *testing.T) { + conn, err := redis.Dial("tcp", "localhost:6379") + if err != nil { + // TODO: rather than skip the test, fall back to a faked redis server + t.Skipf("skipping test; no server running at localhost:6379") + } + conn.Do("FLUSHALL") + + cache := NewWithClient(conn) + + key := "testKey" + _, ok := cache.Get(key) + if ok { + t.Fatal("retrieved key before adding it") + } + + val := []byte("some bytes") + cache.Set(key, val) + + retVal, ok := cache.Get(key) + if !ok { + t.Fatal("could not retrieve an element we just added") + } + if !bytes.Equal(retVal, val) { + t.Fatal("retrieved a different value than what we put in") + } + + cache.Delete(key) + + _, ok = cache.Get(key) + if ok { + t.Fatal("deleted key still present") + } +} diff --git a/vendor/github.com/howeyc/gopass/.travis.yml b/vendor/github.com/howeyc/gopass/.travis.yml deleted file mode 100644 index cc5d509fd..000000000 --- a/vendor/github.com/howeyc/gopass/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -language: go - -os: - - linux - - osx - -go: - - 1.3 - - 1.4 - - 1.5 - - tip diff --git a/vendor/github.com/howeyc/gopass/LICENSE.txt b/vendor/github.com/howeyc/gopass/LICENSE.txt deleted file mode 100644 index 14f74708a..000000000 --- a/vendor/github.com/howeyc/gopass/LICENSE.txt +++ /dev/null @@ -1,15 +0,0 @@ -ISC License - -Copyright (c) 2012 Chris Howey - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/vendor/github.com/howeyc/gopass/OPENSOLARIS.LICENSE b/vendor/github.com/howeyc/gopass/OPENSOLARIS.LICENSE deleted file mode 100644 index da23621dc..000000000 --- a/vendor/github.com/howeyc/gopass/OPENSOLARIS.LICENSE +++ /dev/null @@ -1,384 +0,0 @@ -Unless otherwise noted, all files in this distribution are released -under the Common Development and Distribution License (CDDL). -Exceptions are noted within the associated source files. - --------------------------------------------------------------------- - - -COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0 - -1. Definitions. - - 1.1. "Contributor" means each individual or entity that creates - or contributes to the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original - Software, prior Modifications used by a Contributor (if any), - and the Modifications made by that particular Contributor. - - 1.3. "Covered Software" means (a) the Original Software, or (b) - Modifications, or (c) the combination of files containing - Original Software with files containing Modifications, in - each case including portions thereof. - - 1.4. "Executable" means the Covered Software in any form other - than Source Code. - - 1.5. "Initial Developer" means the individual or entity that first - makes Original Software available under this License. - - 1.6. "Larger Work" means a work which combines Covered Software or - portions thereof with code not governed by the terms of this - License. - - 1.7. "License" means this document. - - 1.8. "Licensable" means having the right to grant, to the maximum - extent possible, whether at the time of the initial grant or - subsequently acquired, any and all of the rights conveyed - herein. - - 1.9. "Modifications" means the Source Code and Executable form of - any of the following: - - A. Any file that results from an addition to, deletion from or - modification of the contents of a file containing Original - Software or previous Modifications; - - B. Any new file that contains any part of the Original - Software or previous Modifications; or - - C. Any new file that is contributed or otherwise made - available under the terms of this License. - - 1.10. "Original Software" means the Source Code and Executable - form of computer software code that is originally released - under this License. - - 1.11. "Patent Claims" means any patent claim(s), now owned or - hereafter acquired, including without limitation, method, - process, and apparatus claims, in any patent Licensable by - grantor. - - 1.12. "Source Code" means (a) the common form of computer software - code in which modifications are made and (b) associated - documentation included in or with such code. - - 1.13. "You" (or "Your") means an individual or a legal entity - exercising rights under, and complying with all of the terms - of, this License. For legal entities, "You" includes any - entity which controls, is controlled by, or is under common - control with You. For purposes of this definition, - "control" means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by - contract or otherwise, or (b) ownership of more than fifty - percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants. - - 2.1. The Initial Developer Grant. - - Conditioned upon Your compliance with Section 3.1 below and - subject to third party intellectual property claims, the Initial - Developer hereby grants You a world-wide, royalty-free, - non-exclusive license: - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Initial Developer, to use, - reproduce, modify, display, perform, sublicense and - distribute the Original Software (or portions thereof), - with or without Modifications, and/or as part of a Larger - Work; and - - (b) under Patent Claims infringed by the making, using or - selling of Original Software, to make, have made, use, - practice, sell, and offer for sale, and/or otherwise - dispose of the Original Software (or portions thereof). - - (c) The licenses granted in Sections 2.1(a) and (b) are - effective on the date Initial Developer first distributes - or otherwise makes the Original Software available to a - third party under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is - granted: (1) for code that You delete from the Original - Software, or (2) for infringements caused by: (i) the - modification of the Original Software, or (ii) the - combination of the Original Software with other software - or devices. - - 2.2. Contributor Grant. - - Conditioned upon Your compliance with Section 3.1 below and - subject to third party intellectual property claims, each - Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Contributor to use, reproduce, - modify, display, perform, sublicense and distribute the - Modifications created by such Contributor (or portions - thereof), either on an unmodified basis, with other - Modifications, as Covered Software and/or as part of a - Larger Work; and - - (b) under Patent Claims infringed by the making, using, or - selling of Modifications made by that Contributor either - alone and/or in combination with its Contributor Version - (or portions of such combination), to make, use, sell, - offer for sale, have made, and/or otherwise dispose of: - (1) Modifications made by that Contributor (or portions - thereof); and (2) the combination of Modifications made by - that Contributor with its Contributor Version (or portions - of such combination). - - (c) The licenses granted in Sections 2.2(a) and 2.2(b) are - effective on the date Contributor first distributes or - otherwise makes the Modifications available to a third - party. - - (d) Notwithstanding Section 2.2(b) above, no patent license is - granted: (1) for any code that Contributor has deleted - from the Contributor Version; (2) for infringements caused - by: (i) third party modifications of Contributor Version, - or (ii) the combination of Modifications made by that - Contributor with other software (except as part of the - Contributor Version) or other devices; or (3) under Patent - Claims infringed by Covered Software in the absence of - Modifications made by that Contributor. - -3. Distribution Obligations. - - 3.1. Availability of Source Code. - - Any Covered Software that You distribute or otherwise make - available in Executable form must also be made available in Source - Code form and that Source Code form must be distributed only under - the terms of this License. You must include a copy of this - License with every copy of the Source Code form of the Covered - Software You distribute or otherwise make available. You must - inform recipients of any such Covered Software in Executable form - as to how they can obtain such Covered Software in Source Code - form in a reasonable manner on or through a medium customarily - used for software exchange. - - 3.2. Modifications. - - The Modifications that You create or to which You contribute are - governed by the terms of this License. You represent that You - believe Your Modifications are Your original creation(s) and/or - You have sufficient rights to grant the rights conveyed by this - License. - - 3.3. Required Notices. - - You must include a notice in each of Your Modifications that - identifies You as the Contributor of the Modification. You may - not remove or alter any copyright, patent or trademark notices - contained within the Covered Software, or any notices of licensing - or any descriptive text giving attribution to any Contributor or - the Initial Developer. - - 3.4. Application of Additional Terms. - - You may not offer or impose any terms on any Covered Software in - Source Code form that alters or restricts the applicable version - of this License or the recipients' rights hereunder. You may - choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of - Covered Software. However, you may do so only on Your own behalf, - and not on behalf of the Initial Developer or any Contributor. - You must make it absolutely clear that any such warranty, support, - indemnity or liability obligation is offered by You alone, and You - hereby agree to indemnify the Initial Developer and every - Contributor for any liability incurred by the Initial Developer or - such Contributor as a result of warranty, support, indemnity or - liability terms You offer. - - 3.5. Distribution of Executable Versions. - - You may distribute the Executable form of the Covered Software - under the terms of this License or under the terms of a license of - Your choice, which may contain terms different from this License, - provided that You are in compliance with the terms of this License - and that the license for the Executable form does not attempt to - limit or alter the recipient's rights in the Source Code form from - the rights set forth in this License. If You distribute the - Covered Software in Executable form under a different license, You - must make it absolutely clear that any terms which differ from - this License are offered by You alone, not by the Initial - Developer or Contributor. You hereby agree to indemnify the - Initial Developer and every Contributor for any liability incurred - by the Initial Developer or such Contributor as a result of any - such terms You offer. - - 3.6. Larger Works. - - You may create a Larger Work by combining Covered Software with - other code not governed by the terms of this License and - distribute the Larger Work as a single product. In such a case, - You must make sure the requirements of this License are fulfilled - for the Covered Software. - -4. Versions of the License. - - 4.1. New Versions. - - Sun Microsystems, Inc. is the initial license steward and may - publish revised and/or new versions of this License from time to - time. Each version will be given a distinguishing version number. - Except as provided in Section 4.3, no one other than the license - steward has the right to modify this License. - - 4.2. Effect of New Versions. - - You may always continue to use, distribute or otherwise make the - Covered Software available under the terms of the version of the - License under which You originally received the Covered Software. - If the Initial Developer includes a notice in the Original - Software prohibiting it from being distributed or otherwise made - available under any subsequent version of the License, You must - distribute and make the Covered Software available under the terms - of the version of the License under which You originally received - the Covered Software. Otherwise, You may also choose to use, - distribute or otherwise make the Covered Software available under - the terms of any subsequent version of the License published by - the license steward. - - 4.3. Modified Versions. - - When You are an Initial Developer and You want to create a new - license for Your Original Software, You may create and use a - modified version of this License if You: (a) rename the license - and remove any references to the name of the license steward - (except to note that the license differs from this License); and - (b) otherwise make it clear that the license contains terms which - differ from this License. - -5. DISCLAIMER OF WARRANTY. - - COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" - BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, - INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED - SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR - PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND - PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY - COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE - INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY - NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF - WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF - ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS - DISCLAIMER. - -6. TERMINATION. - - 6.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to - cure such breach within 30 days of becoming aware of the breach. - Provisions which, by their nature, must remain in effect beyond - the termination of this License shall survive. - - 6.2. If You assert a patent infringement claim (excluding - declaratory judgment actions) against Initial Developer or a - Contributor (the Initial Developer or Contributor against whom You - assert such claim is referred to as "Participant") alleging that - the Participant Software (meaning the Contributor Version where - the Participant is a Contributor or the Original Software where - the Participant is the Initial Developer) directly or indirectly - infringes any patent, then any and all rights granted directly or - indirectly to You by such Participant, the Initial Developer (if - the Initial Developer is not the Participant) and all Contributors - under Sections 2.1 and/or 2.2 of this License shall, upon 60 days - notice from Participant terminate prospectively and automatically - at the expiration of such 60 day notice period, unless if within - such 60 day period You withdraw Your claim with respect to the - Participant Software against such Participant either unilaterally - or pursuant to a written agreement with Participant. - - 6.3. In the event of termination under Sections 6.1 or 6.2 above, - all end user licenses that have been validly granted by You or any - distributor hereunder prior to termination (excluding licenses - granted to You by any distributor) shall survive termination. - -7. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT - (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE - INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF - COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE - LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR - CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT - LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK - STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER - COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN - INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF - LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL - INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT - APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO - NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR - CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT - APPLY TO YOU. - -8. U.S. GOVERNMENT END USERS. - - The Covered Software is a "commercial item," as that term is - defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial - computer software" (as that term is defined at 48 - C.F.R. 252.227-7014(a)(1)) and "commercial computer software - documentation" as such terms are used in 48 C.F.R. 12.212 - (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 - C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all - U.S. Government End Users acquire Covered Software with only those - rights set forth herein. This U.S. Government Rights clause is in - lieu of, and supersedes, any other FAR, DFAR, or other clause or - provision that addresses Government rights in computer software - under this License. - -9. MISCELLANEOUS. - - This License represents the complete agreement concerning subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. This License shall be governed - by the law of the jurisdiction specified in a notice contained - within the Original Software (except to the extent applicable law, - if any, provides otherwise), excluding such jurisdiction's - conflict-of-law provisions. Any litigation relating to this - License shall be subject to the jurisdiction of the courts located - in the jurisdiction and venue specified in a notice contained - within the Original Software, with the losing party responsible - for costs, including, without limitation, court costs and - reasonable attorneys' fees and expenses. The application of the - United Nations Convention on Contracts for the International Sale - of Goods is expressly excluded. Any law or regulation which - provides that the language of a contract shall be construed - against the drafter shall not apply to this License. You agree - that You alone are responsible for compliance with the United - States export administration regulations (and the export control - laws and regulation of any other countries) when You use, - distribute or otherwise make available any Covered Software. - -10. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is - responsible for claims and damages arising, directly or - indirectly, out of its utilization of rights under this License - and You agree to work with Initial Developer and Contributors to - distribute such responsibility on an equitable basis. Nothing - herein is intended or shall be deemed to constitute any admission - of liability. - --------------------------------------------------------------------- - -NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND -DISTRIBUTION LICENSE (CDDL) - -For Covered Software in this distribution, this License shall -be governed by the laws of the State of California (excluding -conflict-of-law provisions). - -Any litigation relating to this License shall be subject to the -jurisdiction of the Federal Courts of the Northern District of -California and the state courts of the State of California, with -venue lying in Santa Clara County, California. diff --git a/vendor/github.com/howeyc/gopass/README.md b/vendor/github.com/howeyc/gopass/README.md deleted file mode 100644 index 2d6a4e72c..000000000 --- a/vendor/github.com/howeyc/gopass/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# getpasswd in Go [![GoDoc](https://godoc.org/github.com/howeyc/gopass?status.svg)](https://godoc.org/github.com/howeyc/gopass) [![Build Status](https://secure.travis-ci.org/howeyc/gopass.png?branch=master)](http://travis-ci.org/howeyc/gopass) - -Retrieve password from user terminal or piped input without echo. - -Verified on BSD, Linux, and Windows. - -Example: -```go -package main - -import "fmt" -import "github.com/howeyc/gopass" - -func main() { - fmt.Printf("Password: ") - - // Silent. For printing *'s use gopass.GetPasswdMasked() - pass, err := gopass.GetPasswd() - if err != nil { - // Handle gopass.ErrInterrupted or getch() read error - } - - // Do something with pass -} -``` - -Caution: Multi-byte characters not supported! diff --git a/vendor/github.com/howeyc/gopass/pass.go b/vendor/github.com/howeyc/gopass/pass.go deleted file mode 100644 index f5bd5a51a..000000000 --- a/vendor/github.com/howeyc/gopass/pass.go +++ /dev/null @@ -1,110 +0,0 @@ -package gopass - -import ( - "errors" - "fmt" - "io" - "os" -) - -type FdReader interface { - io.Reader - Fd() uintptr -} - -var defaultGetCh = func(r io.Reader) (byte, error) { - buf := make([]byte, 1) - if n, err := r.Read(buf); n == 0 || err != nil { - if err != nil { - return 0, err - } - return 0, io.EOF - } - return buf[0], nil -} - -var ( - maxLength = 512 - ErrInterrupted = errors.New("interrupted") - ErrMaxLengthExceeded = fmt.Errorf("maximum byte limit (%v) exceeded", maxLength) - - // Provide variable so that tests can provide a mock implementation. - getch = defaultGetCh -) - -// getPasswd returns the input read from terminal. -// If prompt is not empty, it will be output as a prompt to the user -// If masked is true, typing will be matched by asterisks on the screen. -// Otherwise, typing will echo nothing. -func getPasswd(prompt string, masked bool, r FdReader, w io.Writer) ([]byte, error) { - var err error - var pass, bs, mask []byte - if masked { - bs = []byte("\b \b") - mask = []byte("*") - } - - if isTerminal(r.Fd()) { - if oldState, err := makeRaw(r.Fd()); err != nil { - return pass, err - } else { - defer func() { - restore(r.Fd(), oldState) - fmt.Fprintln(w) - }() - } - } - - if prompt != "" { - fmt.Fprint(w, prompt) - } - - // Track total bytes read, not just bytes in the password. This ensures any - // errors that might flood the console with nil or -1 bytes infinitely are - // capped. - var counter int - for counter = 0; counter <= maxLength; counter++ { - if v, e := getch(r); e != nil { - err = e - break - } else if v == 127 || v == 8 { - if l := len(pass); l > 0 { - pass = pass[:l-1] - fmt.Fprint(w, string(bs)) - } - } else if v == 13 || v == 10 { - break - } else if v == 3 { - err = ErrInterrupted - break - } else if v != 0 { - pass = append(pass, v) - fmt.Fprint(w, string(mask)) - } - } - - if counter > maxLength { - err = ErrMaxLengthExceeded - } - - return pass, err -} - -// GetPasswd returns the password read from the terminal without echoing input. -// The returned byte array does not include end-of-line characters. -func GetPasswd() ([]byte, error) { - return getPasswd("", false, os.Stdin, os.Stdout) -} - -// GetPasswdMasked returns the password read from the terminal, echoing asterisks. -// The returned byte array does not include end-of-line characters. -func GetPasswdMasked() ([]byte, error) { - return getPasswd("", true, os.Stdin, os.Stdout) -} - -// GetPasswdPrompt prompts the user and returns the password read from the terminal. -// If mask is true, then asterisks are echoed. -// The returned byte array does not include end-of-line characters. -func GetPasswdPrompt(prompt string, mask bool, r FdReader, w io.Writer) ([]byte, error) { - return getPasswd(prompt, mask, r, w) -} diff --git a/vendor/github.com/howeyc/gopass/pass_test.go b/vendor/github.com/howeyc/gopass/pass_test.go deleted file mode 100644 index 7ac315135..000000000 --- a/vendor/github.com/howeyc/gopass/pass_test.go +++ /dev/null @@ -1,225 +0,0 @@ -package gopass - -import ( - "bufio" - "bytes" - "fmt" - "io" - "io/ioutil" - "os" - "testing" - "time" -) - -// TestGetPasswd tests the password creation and output based on a byte buffer -// as input to mock the underlying getch() methods. -func TestGetPasswd(t *testing.T) { - type testData struct { - input []byte - - // Due to how backspaces are written, it is easier to manually write - // each expected output for the masked cases. - masked string - password string - byesLeft int - reason string - } - - ds := []testData{ - testData{[]byte("abc\n"), "***", "abc", 0, "Password parsing should stop at \\n"}, - testData{[]byte("abc\r"), "***", "abc", 0, "Password parsing should stop at \\r"}, - testData{[]byte("a\nbc\n"), "*", "a", 3, "Password parsing should stop at \\n"}, - testData{[]byte("*!]|\n"), "****", "*!]|", 0, "Special characters shouldn't affect the password."}, - - testData{[]byte("abc\r\n"), "***", "abc", 1, - "Password parsing should stop at \\r; Windows LINE_MODE should be unset so \\r is not converted to \\r\\n."}, - - testData{[]byte{'a', 'b', 'c', 8, '\n'}, "***\b \b", "ab", 0, "Backspace byte should remove the last read byte."}, - testData{[]byte{'a', 'b', 127, 'c', '\n'}, "**\b \b*", "ac", 0, "Delete byte should remove the last read byte."}, - testData{[]byte{'a', 'b', 127, 'c', 8, 127, '\n'}, "**\b \b*\b \b\b \b", "", 0, "Successive deletes continue to delete."}, - testData{[]byte{8, 8, 8, '\n'}, "", "", 0, "Deletes before characters are noops."}, - testData{[]byte{8, 8, 8, 'a', 'b', 'c', '\n'}, "***", "abc", 0, "Deletes before characters are noops."}, - - testData{[]byte{'a', 'b', 0, 'c', '\n'}, "***", "abc", 0, - "Nil byte should be ignored due; may get unintended nil bytes from syscalls on Windows."}, - } - - // Redirecting output for tests as they print to os.Stdout but we want to - // capture and test the output. - for _, masked := range []bool{true, false} { - for _, d := range ds { - pipeBytesToStdin(d.input) - - r, w, err := os.Pipe() - if err != nil { - t.Fatal(err.Error()) - } - - result, err := getPasswd("", masked, os.Stdin, w) - if err != nil { - t.Errorf("Error getting password: %s", err.Error()) - } - leftOnBuffer := flushStdin() - - // Test output (masked and unmasked). Delete/backspace actually - // deletes, overwrites and deletes again. As a result, we need to - // remove those from the pipe afterwards to mimic the console's - // interpretation of those bytes. - w.Close() - output, err := ioutil.ReadAll(r) - if err != nil { - t.Fatal(err.Error()) - } - var expectedOutput []byte - if masked { - expectedOutput = []byte(d.masked) - } else { - expectedOutput = []byte("") - } - if bytes.Compare(expectedOutput, output) != 0 { - t.Errorf("Expected output to equal %v (%q) but got %v (%q) instead when masked=%v. %s", expectedOutput, string(expectedOutput), output, string(output), masked, d.reason) - } - - if string(result) != d.password { - t.Errorf("Expected %q but got %q instead when masked=%v. %s", d.password, result, masked, d.reason) - } - - if leftOnBuffer != d.byesLeft { - t.Errorf("Expected %v bytes left on buffer but instead got %v when masked=%v. %s", d.byesLeft, leftOnBuffer, masked, d.reason) - } - } - } -} - -// TestPipe ensures we get our expected pipe behavior. -func TestPipe(t *testing.T) { - type testData struct { - input string - password string - expError error - } - ds := []testData{ - testData{"abc", "abc", io.EOF}, - testData{"abc\n", "abc", nil}, - testData{"abc\r", "abc", nil}, - testData{"abc\r\n", "abc", nil}, - } - - for _, d := range ds { - _, err := pipeToStdin(d.input) - if err != nil { - t.Log("Error writing input to stdin:", err) - t.FailNow() - } - pass, err := GetPasswd() - if string(pass) != d.password { - t.Errorf("Expected %q but got %q instead.", d.password, string(pass)) - } - if err != d.expError { - t.Errorf("Expected %v but got %q instead.", d.expError, err) - } - } -} - -// flushStdin reads from stdin for .5 seconds to ensure no bytes are left on -// the buffer. Returns the number of bytes read. -func flushStdin() int { - ch := make(chan byte) - go func(ch chan byte) { - reader := bufio.NewReader(os.Stdin) - for { - b, err := reader.ReadByte() - if err != nil { // Maybe log non io.EOF errors, if you want - close(ch) - return - } - ch <- b - } - close(ch) - }(ch) - - numBytes := 0 - for { - select { - case _, ok := <-ch: - if !ok { - return numBytes - } - numBytes++ - case <-time.After(500 * time.Millisecond): - return numBytes - } - } - return numBytes -} - -// pipeToStdin pipes the given string onto os.Stdin by replacing it with an -// os.Pipe. The write end of the pipe is closed so that EOF is read after the -// final byte. -func pipeToStdin(s string) (int, error) { - pipeReader, pipeWriter, err := os.Pipe() - if err != nil { - fmt.Println("Error getting os pipes:", err) - os.Exit(1) - } - os.Stdin = pipeReader - w, err := pipeWriter.WriteString(s) - pipeWriter.Close() - return w, err -} - -func pipeBytesToStdin(b []byte) (int, error) { - return pipeToStdin(string(b)) -} - -// TestGetPasswd_Err tests errors are properly handled from getch() -func TestGetPasswd_Err(t *testing.T) { - var inBuffer *bytes.Buffer - getch = func(io.Reader) (byte, error) { - b, err := inBuffer.ReadByte() - if err != nil { - return 13, err - } - if b == 'z' { - return 'z', fmt.Errorf("Forced error; byte returned should not be considered accurate.") - } - return b, nil - } - defer func() { getch = defaultGetCh }() - - for input, expectedPassword := range map[string]string{"abc": "abc", "abzc": "ab"} { - inBuffer = bytes.NewBufferString(input) - p, err := GetPasswdMasked() - if string(p) != expectedPassword { - t.Errorf("Expected %q but got %q instead.", expectedPassword, p) - } - if err == nil { - t.Errorf("Expected error to be returned.") - } - } -} - -func TestMaxPasswordLength(t *testing.T) { - type testData struct { - input []byte - expectedErr error - - // Helper field to output in case of failure; rather than hundreds of - // bytes. - inputDesc string - } - - ds := []testData{ - testData{append(bytes.Repeat([]byte{'a'}, maxLength), '\n'), nil, fmt.Sprintf("%v 'a' bytes followed by a newline", maxLength)}, - testData{append(bytes.Repeat([]byte{'a'}, maxLength+1), '\n'), ErrMaxLengthExceeded, fmt.Sprintf("%v 'a' bytes followed by a newline", maxLength+1)}, - testData{append(bytes.Repeat([]byte{0x00}, maxLength+1), '\n'), ErrMaxLengthExceeded, fmt.Sprintf("%v 0x00 bytes followed by a newline", maxLength+1)}, - } - - for _, d := range ds { - pipeBytesToStdin(d.input) - _, err := GetPasswd() - if err != d.expectedErr { - t.Errorf("Expected error to be %v; isntead got %v from %v", d.expectedErr, err, d.inputDesc) - } - } -} diff --git a/vendor/github.com/howeyc/gopass/terminal.go b/vendor/github.com/howeyc/gopass/terminal.go deleted file mode 100644 index 083564146..000000000 --- a/vendor/github.com/howeyc/gopass/terminal.go +++ /dev/null @@ -1,25 +0,0 @@ -// +build !solaris - -package gopass - -import "golang.org/x/crypto/ssh/terminal" - -type terminalState struct { - state *terminal.State -} - -func isTerminal(fd uintptr) bool { - return terminal.IsTerminal(int(fd)) -} - -func makeRaw(fd uintptr) (*terminalState, error) { - state, err := terminal.MakeRaw(int(fd)) - - return &terminalState{ - state: state, - }, err -} - -func restore(fd uintptr, oldState *terminalState) error { - return terminal.Restore(int(fd), oldState.state) -} diff --git a/vendor/github.com/howeyc/gopass/terminal_solaris.go b/vendor/github.com/howeyc/gopass/terminal_solaris.go deleted file mode 100644 index 257e1b4e8..000000000 --- a/vendor/github.com/howeyc/gopass/terminal_solaris.go +++ /dev/null @@ -1,69 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -// Below is derived from Solaris source, so CDDL license is included. - -package gopass - -import ( - "syscall" - - "golang.org/x/sys/unix" -) - -type terminalState struct { - state *unix.Termios -} - -// isTerminal returns true if there is a terminal attached to the given -// file descriptor. -// Source: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c -func isTerminal(fd uintptr) bool { - var termio unix.Termio - err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio) - return err == nil -} - -// makeRaw puts the terminal connected to the given file descriptor into raw -// mode and returns the previous state of the terminal so that it can be -// restored. -// Source: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libast/common/uwin/getpass.c -func makeRaw(fd uintptr) (*terminalState, error) { - oldTermiosPtr, err := unix.IoctlGetTermios(int(fd), unix.TCGETS) - if err != nil { - return nil, err - } - oldTermios := *oldTermiosPtr - - newTermios := oldTermios - newTermios.Lflag &^= syscall.ECHO | syscall.ECHOE | syscall.ECHOK | syscall.ECHONL - if err := unix.IoctlSetTermios(int(fd), unix.TCSETS, &newTermios); err != nil { - return nil, err - } - - return &terminalState{ - state: oldTermiosPtr, - }, nil -} - -func restore(fd uintptr, oldState *terminalState) error { - return unix.IoctlSetTermios(int(fd), unix.TCSETS, oldState.state) -} diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/CONTRIBUTING.md b/vendor/github.com/kubernetes-csi/csi-lib-utils/CONTRIBUTING.md new file mode 100644 index 000000000..de4711513 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing Guidelines + +Welcome to Kubernetes. We are excited about the prospect of you joining our [community](https://github.com/kubernetes/community)! The Kubernetes community abides by the CNCF [code of conduct](code-of-conduct.md). Here is an excerpt: + +_As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities._ + +## Getting Started + +We have full documentation on how to get started contributing here: + + + +- [Contributor License Agreement](https://git.k8s.io/community/CLA.md) Kubernetes projects require that you sign a Contributor License Agreement (CLA) before we can accept your pull requests +- [Kubernetes Contributor Guide](http://git.k8s.io/community/contributors/guide) - Main contributor documentation, or you can just jump directly to the [contributing section](http://git.k8s.io/community/contributors/guide#contributing) +- [Contributor Cheat Sheet](https://git.k8s.io/community/contributors/guide/contributor-cheatsheet.md) - Common resources for existing developers + +## Mentorship + +- [Mentoring Initiatives](https://git.k8s.io/community/mentoring) - We have a diverse set of mentorship programs available that are always looking for volunteers! + + diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/Gopkg.lock b/vendor/github.com/kubernetes-csi/csi-lib-utils/Gopkg.lock new file mode 100644 index 000000000..8d4120d88 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/Gopkg.lock @@ -0,0 +1,149 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + digest = "1:ffe9824d294da03b391f44e1ae8281281b4afc1bdaa9588c9097785e3af10cec" + name = "github.com/davecgh/go-spew" + packages = ["spew"] + pruneopts = "UT" + revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73" + version = "v1.1.1" + +[[projects]] + digest = "1:9cab16c200148edbdc9f314f69bf71987085f618ec107385bd6634be21d1aae8" + name = "github.com/golang/protobuf" + packages = [ + "descriptor", + "proto", + "protoc-gen-go/descriptor", + "ptypes", + "ptypes/any", + "ptypes/duration", + "ptypes/timestamp", + "ptypes/wrappers", + ] + pruneopts = "UT" + revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" + version = "v1.2.0" + +[[projects]] + digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe" + name = "github.com/pmezard/go-difflib" + packages = ["difflib"] + pruneopts = "UT" + revision = "792786c7400a136282c1664665ae0a8db921c6c2" + version = "v1.0.0" + +[[projects]] + digest = "1:18752d0b95816a1b777505a97f71c7467a8445b8ffb55631a7bf779f6ba4fa83" + name = "github.com/stretchr/testify" + packages = ["assert"] + pruneopts = "UT" + revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686" + version = "v1.2.2" + +[[projects]] + branch = "master" + digest = "1:6ca51c5d8a610b3da56856df7a8f8f3e075eba8d5f7a4acbadd79b2d2a368054" + name = "golang.org/x/net" + packages = [ + "context", + "http/httpguts", + "http2", + "http2/hpack", + "idna", + "internal/timeseries", + "trace", + ] + pruneopts = "UT" + revision = "fae4c4e3ad76c295c3d6d259f898136b4bf833a8" + +[[projects]] + branch = "master" + digest = "1:8775d8a768d9e65e8b659172804aac5db1fc8d563ba766470a6c2698c57c61a7" + name = "golang.org/x/sys" + packages = ["unix"] + pruneopts = "UT" + revision = "4ed8d59d0b35e1e29334a206d1b3f38b1e5dfb31" + +[[projects]] + digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18" + name = "golang.org/x/text" + packages = [ + "collate", + "collate/build", + "internal/colltab", + "internal/gen", + "internal/tag", + "internal/triegen", + "internal/ucd", + "language", + "secure/bidirule", + "transform", + "unicode/bidi", + "unicode/cldr", + "unicode/norm", + "unicode/rangetable", + ] + pruneopts = "UT" + revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" + version = "v0.3.0" + +[[projects]] + branch = "master" + digest = "1:56b0bca90b7e5d1facf5fbdacba23e4e0ce069d25381b8e2f70ef1e7ebfb9c1a" + name = "google.golang.org/genproto" + packages = ["googleapis/rpc/status"] + pruneopts = "UT" + revision = "31ac5d88444a9e7ad18077db9a165d793ad06a2e" + +[[projects]] + digest = "1:c3ad9841823db6da420a5625b367913b4ff54bbe60e8e3c98bd20e243e62e2d2" + name = "google.golang.org/grpc" + packages = [ + ".", + "balancer", + "balancer/base", + "balancer/roundrobin", + "codes", + "connectivity", + "credentials", + "encoding", + "encoding/proto", + "grpclog", + "internal", + "internal/backoff", + "internal/channelz", + "internal/envconfig", + "internal/grpcrand", + "internal/transport", + "keepalive", + "metadata", + "naming", + "peer", + "resolver", + "resolver/dns", + "resolver/passthrough", + "stats", + "status", + "tap", + ] + pruneopts = "UT" + revision = "2e463a05d100327ca47ac218281906921038fd95" + version = "v1.16.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + input-imports = [ + "github.com/golang/protobuf/descriptor", + "github.com/golang/protobuf/proto", + "github.com/golang/protobuf/protoc-gen-go/descriptor", + "github.com/golang/protobuf/ptypes/timestamp", + "github.com/golang/protobuf/ptypes/wrappers", + "github.com/stretchr/testify/assert", + "golang.org/x/net/context", + "google.golang.org/grpc", + ] + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/Gopkg.toml b/vendor/github.com/kubernetes-csi/csi-lib-utils/Gopkg.toml new file mode 100644 index 000000000..2922e60b6 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/Gopkg.toml @@ -0,0 +1,6 @@ +# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html +# for detailed Gopkg.toml documentation. + +[prune] + go-tests = true + unused-packages = true diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/LICENSE b/vendor/github.com/kubernetes-csi/csi-lib-utils/LICENSE new file mode 100644 index 000000000..8dada3eda --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/Makefile b/vendor/github.com/kubernetes-csi/csi-lib-utils/Makefile new file mode 100644 index 000000000..8bfef97e8 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/Makefile @@ -0,0 +1,35 @@ +# Copyright 2018 The Kubernetes Authors. +# +# 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. + +.PHONY: all clean test + +ifdef V +TESTARGS = -v +else +TESTARGS = +endif + +all: + go build `go list ./... | grep -v 'vendor'` + +clean: + true + +test: + go test `go list ./... | grep -v ^vendor` $(TESTARGS) + go vet `go list ./... | grep -v ^vendor` + diff="$$(gofmt -d $$(find . -name '*.go' | grep -v ^./vendor))" && \ + ( [ -z "$$diff" ] || ( \ + echo "\nvvvvvv formatting errors, fix with patch -p1 vvvvvvvvvv\n$$diff\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"; \ + false ) ) diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/OWNERS b/vendor/github.com/kubernetes-csi/csi-lib-utils/OWNERS new file mode 100644 index 000000000..2a442eb60 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md + +approvers: + - saad-ali diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/README.md b/vendor/github.com/kubernetes-csi/csi-lib-utils/README.md new file mode 100644 index 000000000..86b84d335 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/README.md @@ -0,0 +1,19 @@ +# csi-lib-utils + +TBD + +## Community, discussion, contribution, and support + +Learn how to engage with the Kubernetes community on the [community page](http://kubernetes.io/community/). + +You can reach the maintainers of this project at: + +- [Slack](http://slack.k8s.io/) +- [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-dev) + +### Code of conduct + +Participation in the Kubernetes community is governed by the [Kubernetes Code of Conduct](code-of-conduct.md). + +[owners]: https://git.k8s.io/community/contributors/guide/owners.md +[Creative Commons 4.0]: https://git.k8s.io/website/LICENSE diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/SECURITY_CONTACTS b/vendor/github.com/kubernetes-csi/csi-lib-utils/SECURITY_CONTACTS new file mode 100644 index 000000000..585f480fe --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/SECURITY_CONTACTS @@ -0,0 +1,13 @@ +# Defined below are the security contacts for this repo. +# +# They are the contact point for the Product Security Team to reach out +# to for triaging and handling of incoming issues. +# +# The below names agree to abide by the +# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# and will be removed and replaced if they violate that agreement. +# +# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE +# INSTRUCTIONS AT https://kubernetes.io/security/ + +saad-ali diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/code-of-conduct.md b/vendor/github.com/kubernetes-csi/csi-lib-utils/code-of-conduct.md new file mode 100644 index 000000000..0d15c00cf --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/code-of-conduct.md @@ -0,0 +1,3 @@ +# Kubernetes Community Code of Conduct + +Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md) diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/protosanitizer.go b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/protosanitizer.go new file mode 100644 index 000000000..af64a7b27 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/protosanitizer.go @@ -0,0 +1,177 @@ +/* +Copyright 2018 The Kubernetes Authors. + +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 protosanitizer supports logging of gRPC messages without +// accidentally revealing sensitive fields. +package protosanitizer + +import ( + "encoding/json" + "fmt" + "reflect" + "strings" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor" + protobufdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" +) + +// StripSecrets returns a wrapper around the original CSI gRPC message +// which has a Stringer implementation that serializes the message +// as one-line JSON, but without including secret information. +// Instead of the secret value(s), the string "***stripped***" is +// included in the result. +// +// StripSecrets relies on an extension in CSI 1.0 and thus can only +// be used for messages based on that or a more recent spec! +// +// StripSecrets itself is fast and therefore it is cheap to pass the +// result to logging functions which may or may not end up serializing +// the parameter depending on the current log level. +func StripSecrets(msg interface{}) fmt.Stringer { + return &stripSecrets{msg, isCSI1Secret} +} + +// StripSecretsCSI03 is like StripSecrets, except that it works +// for messages based on CSI 0.3 and older. It does not work +// for CSI 1.0, use StripSecrets for that. +func StripSecretsCSI03(msg interface{}) fmt.Stringer { + return &stripSecrets{msg, isCSI03Secret} +} + +type stripSecrets struct { + msg interface{} + + isSecretField func(field *protobuf.FieldDescriptorProto) bool +} + +func (s *stripSecrets) String() string { + // First convert to a generic representation. That's less efficient + // than using reflect directly, but easier to work with. + var parsed interface{} + b, err := json.Marshal(s.msg) + if err != nil { + return fmt.Sprintf("<>", s.msg, err) + } + if err := json.Unmarshal(b, &parsed); err != nil { + return fmt.Sprintf("<>", s.msg, err) + } + + // Now remove secrets from the generic representation of the message. + s.strip(parsed, s.msg) + + // Re-encoded the stripped representation and return that. + b, err = json.Marshal(parsed) + if err != nil { + return fmt.Sprintf("<>", s.msg, err) + } + return string(b) +} + +func (s *stripSecrets) strip(parsed interface{}, msg interface{}) { + protobufMsg, ok := msg.(descriptor.Message) + if !ok { + // Not a protobuf message, so we are done. + return + } + + // The corresponding map in the parsed JSON representation. + parsedFields, ok := parsed.(map[string]interface{}) + if !ok { + // Probably nil. + return + } + + // Walk through all fields and replace those with ***stripped*** that + // are marked as secret. This relies on protobuf adding "json:" tags + // on each field where the name matches the field name in the protobuf + // spec (like volume_capabilities). The field.GetJsonName() method returns + // a different name (volumeCapabilities) which we don't use. + _, md := descriptor.ForMessage(protobufMsg) + fields := md.GetField() + if fields != nil { + for _, field := range fields { + if s.isSecretField(field) { + // Overwrite only if already set. + if _, ok := parsedFields[field.GetName()]; ok { + parsedFields[field.GetName()] = "***stripped***" + } + } else if field.GetType() == protobuf.FieldDescriptorProto_TYPE_MESSAGE { + // When we get here, + // the type name is something like ".csi.v1.CapacityRange" (leading dot!) + // and looking up "csi.v1.CapacityRange" + // returns the type of a pointer to a pointer + // to CapacityRange. We need a pointer to such + // a value for recursive stripping. + typeName := field.GetTypeName() + if strings.HasPrefix(typeName, ".") { + typeName = typeName[1:] + } + t := proto.MessageType(typeName) + if t == nil || t.Kind() != reflect.Ptr { + // Shouldn't happen, but + // better check anyway instead + // of panicking. + continue + } + v := reflect.New(t.Elem()) + + // Recursively strip the message(s) that + // the field contains. + i := v.Interface() + entry := parsedFields[field.GetName()] + if slice, ok := entry.([]interface{}); ok { + // Array of values, like VolumeCapabilities in CreateVolumeRequest. + for _, entry := range slice { + s.strip(entry, i) + } + } else { + // Single value. + s.strip(entry, i) + } + } + } + } +} + +// isCSI1Secret uses the csi.E_CsiSecret extension from CSI 1.0 to +// determine whether a field contains secrets. +func isCSI1Secret(field *protobuf.FieldDescriptorProto) bool { + ex, err := proto.GetExtension(field.Options, e_CsiSecret) + return err == nil && ex != nil && *ex.(*bool) +} + +// Copied from the CSI 1.0 spec (https://github.com/container-storage-interface/spec/blob/37e74064635d27c8e33537c863b37ccb1182d4f8/lib/go/csi/csi.pb.go#L4520-L4527) +// to avoid a package dependency that would prevent usage of this package +// in repos using an older version of the spec. +// +// Future revision of the CSI spec must not change this extensions, otherwise +// they will break filtering in binaries based on the 1.0 version of the spec. +var e_CsiSecret = &proto.ExtensionDesc{ + ExtendedType: (*protobufdescriptor.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 1059, + Name: "csi.v1.csi_secret", + Tag: "varint,1059,opt,name=csi_secret,json=csiSecret", + Filename: "github.com/container-storage-interface/spec/csi.proto", +} + +// isCSI03Secret relies on the naming convention in CSI <= 0.3 +// to determine whether a field contains secrets. +func isCSI03Secret(field *protobuf.FieldDescriptorProto) bool { + return strings.HasSuffix(field.GetName(), "_secrets") +} diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/protosanitizer_test.go b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/protosanitizer_test.go new file mode 100644 index 000000000..944943c07 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/protosanitizer_test.go @@ -0,0 +1,224 @@ +/* +Copyright 2018 The Kubernetes Authors. + +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 protosanitizer + +import ( + "fmt" + "testing" + + "github.com/golang/protobuf/proto" + csi03 "github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi03" + csi "github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi10" + "github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest" + "github.com/stretchr/testify/assert" +) + +func TestStripSecrets(t *testing.T) { + secretName := "secret-abc" + secretValue := "123" + + // CSI 0.3.0. + createVolumeCSI03 := &csi03.CreateVolumeRequest{ + AccessibilityRequirements: &csi03.TopologyRequirement{ + Requisite: []*csi03.Topology{ + &csi03.Topology{ + Segments: map[string]string{ + "foo": "bar", + "x": "y", + }, + }, + &csi03.Topology{ + Segments: map[string]string{ + "a": "b", + }, + }, + }, + }, + Name: "foo", + VolumeCapabilities: []*csi03.VolumeCapability{ + &csi03.VolumeCapability{ + AccessType: &csi03.VolumeCapability_Mount{ + Mount: &csi03.VolumeCapability_MountVolume{ + FsType: "ext4", + }, + }, + }, + }, + CapacityRange: &csi03.CapacityRange{ + RequiredBytes: 1024, + }, + ControllerCreateSecrets: map[string]string{ + secretName: secretValue, + "secret-xyz": "987", + }, + } + + // Current spec. + createVolume := &csi.CreateVolumeRequest{ + AccessibilityRequirements: &csi.TopologyRequirement{ + Requisite: []*csi.Topology{ + &csi.Topology{ + Segments: map[string]string{ + "foo": "bar", + "x": "y", + }, + }, + &csi.Topology{ + Segments: map[string]string{ + "a": "b", + }, + }, + }, + }, + Name: "foo", + VolumeCapabilities: []*csi.VolumeCapability{ + &csi.VolumeCapability{ + AccessType: &csi.VolumeCapability_Mount{ + Mount: &csi.VolumeCapability_MountVolume{ + FsType: "ext4", + }, + }, + }, + }, + CapacityRange: &csi.CapacityRange{ + RequiredBytes: 1024, + }, + Secrets: map[string]string{ + secretName: secretValue, + "secret-xyz": "987", + }, + } + + // Revised spec with more secret fields. + createVolumeFuture := &csitest.CreateVolumeRequest{ + CapacityRange: &csitest.CapacityRange{ + RequiredBytes: 1024, + }, + MaybeSecretMap: map[int64]*csitest.VolumeCapability{ + 1: &csitest.VolumeCapability{ArraySecret: "aaa"}, + 2: &csitest.VolumeCapability{ArraySecret: "bbb"}, + }, + Name: "foo", + NewSecretInt: 42, + Seecreets: map[string]string{ + secretName: secretValue, + "secret-xyz": "987", + }, + VolumeCapabilities: []*csitest.VolumeCapability{ + &csitest.VolumeCapability{ + AccessType: &csitest.VolumeCapability_Mount{ + Mount: &csitest.VolumeCapability_MountVolume{ + FsType: "ext4", + }, + }, + ArraySecret: "knock knock", + }, + &csitest.VolumeCapability{ + ArraySecret: "Who's there?", + }, + }, + VolumeContentSource: &csitest.VolumeContentSource{ + Type: &csitest.VolumeContentSource_Volume{ + Volume: &csitest.VolumeContentSource_VolumeSource{ + VolumeId: "abc", + OneofSecretField: "hello", + }, + }, + NestedSecretField: "world", + }, + } + + type testcase struct { + original, stripped interface{} + } + + cases := []testcase{ + {nil, "null"}, + {1, "1"}, + {"hello world", `"hello world"`}, + {true, "true"}, + {false, "false"}, + {&csi.CreateVolumeRequest{}, `{}`}, + // Test case from https://github.com/kubernetes-csi/csi-lib-utils/pull/1#pullrequestreview-180126394. + {&csi.CreateVolumeRequest{ + Name: "test-volume", + CapacityRange: &csi.CapacityRange{ + RequiredBytes: int64(1024), + LimitBytes: int64(1024), + }, + VolumeCapabilities: []*csi.VolumeCapability{ + &csi.VolumeCapability{ + AccessType: &csi.VolumeCapability_Mount{ + Mount: &csi.VolumeCapability_MountVolume{ + FsType: "ext4", + MountFlags: []string{"flag1", "flag2", "flag3"}, + }, + }, + AccessMode: &csi.VolumeCapability_AccessMode{ + Mode: csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER, + }, + }, + }, + Secrets: map[string]string{"secret1": "secret1", "secret2": "secret2"}, + Parameters: map[string]string{"param1": "param1", "param2": "param2"}, + VolumeContentSource: &csi.VolumeContentSource{}, + AccessibilityRequirements: &csi.TopologyRequirement{}, + }, `{"accessibility_requirements":{},"capacity_range":{"limit_bytes":1024,"required_bytes":1024},"name":"test-volume","parameters":{"param1":"param1","param2":"param2"},"secrets":"***stripped***","volume_capabilities":[{"AccessType":{"Mount":{"fs_type":"ext4","mount_flags":["flag1","flag2","flag3"]}},"access_mode":{"mode":5}}],"volume_content_source":{"Type":null}}`}, + {createVolume, `{"accessibility_requirements":{"requisite":[{"segments":{"foo":"bar","x":"y"}},{"segments":{"a":"b"}}]},"capacity_range":{"required_bytes":1024},"name":"foo","secrets":"***stripped***","volume_capabilities":[{"AccessType":{"Mount":{"fs_type":"ext4"}}}]}`}, + {createVolumeCSI03, `{"accessibility_requirements":{"requisite":[{"segments":{"foo":"bar","x":"y"}},{"segments":{"a":"b"}}]},"capacity_range":{"required_bytes":1024},"controller_create_secrets":"***stripped***","name":"foo","volume_capabilities":[{"AccessType":{"Mount":{"fs_type":"ext4"}}}]}`}, + {&csitest.CreateVolumeRequest{}, `{}`}, + {createVolumeFuture, + // Secrets are *not* removed from all fields yet. This will have to be fixed one way or another + // before the CSI spec can start using secrets there (currently it doesn't). + // The test is still useful because it shows that also complicated fields get serialized. + // `{"capacity_range":{"required_bytes":1024},"maybe_secret_map":{"1":{"AccessType":null,"array_secret":"***stripped***"},"2":{"AccessType":null,"array_secret":"***stripped***"}},"name":"foo","new_secret_int":"***stripped***","seecreets":"***stripped***","volume_capabilities":[{"AccessType":{"Mount":{"fs_type":"ext4"}},"array_secret":"***stripped***"},{"AccessType":null,"array_secret":"***stripped***"}],"volume_content_source":{"Type":{"Volume":{"oneof_secret_field":"***stripped***","volume_id":"abc"}},"nested_secret_field":"***stripped***"}}`, + `{"capacity_range":{"required_bytes":1024},"maybe_secret_map":{"1":{"AccessType":null,"array_secret":"aaa"},"2":{"AccessType":null,"array_secret":"bbb"}},"name":"foo","new_secret_int":"***stripped***","seecreets":"***stripped***","volume_capabilities":[{"AccessType":{"Mount":{"fs_type":"ext4"}},"array_secret":"***stripped***"},{"AccessType":null,"array_secret":"***stripped***"}],"volume_content_source":{"Type":{"Volume":{"oneof_secret_field":"hello","volume_id":"abc"}},"nested_secret_field":"***stripped***"}}`, + }, + } + + // Message from revised spec as received by a sidecar based on the current spec. + // The XXX_unrecognized field contains secrets and must not get logged. + unknownFields := &csi.CreateVolumeRequest{} + data, err := proto.Marshal(createVolumeFuture) + if assert.NoError(t, err, "marshall future message") && + assert.NoError(t, proto.Unmarshal(data, unknownFields), "unmarshal with unknown fields") { + cases = append(cases, testcase{unknownFields, + `{"capacity_range":{"required_bytes":1024},"name":"foo","secrets":"***stripped***","volume_capabilities":[{"AccessType":{"Mount":{"fs_type":"ext4"}}},{"AccessType":null}],"volume_content_source":{"Type":{"Volume":{"volume_id":"abc"}}}}`, + }) + } + + for _, c := range cases { + before := fmt.Sprint(c.original) + var stripped fmt.Stringer + if _, ok := c.original.(*csi03.CreateVolumeRequest); ok { + stripped = StripSecretsCSI03(c.original) + } else { + stripped = StripSecrets(c.original) + } + if assert.Equal(t, c.stripped, fmt.Sprintf("%s", stripped), "unexpected result for fmt s of %s", c.original) { + if assert.Equal(t, c.stripped, fmt.Sprintf("%v", stripped), "unexpected result for fmt v of %s", c.original) { + assert.Equal(t, c.stripped, fmt.Sprintf("%+v", stripped), "unexpected result for fmt +v of %s", c.original) + } + } + assert.Equal(t, before, fmt.Sprint(c.original), "original value modified") + } + + // The secret is hidden because StripSecrets is a struct referencing it. + dump := fmt.Sprintf("%#v", StripSecrets(createVolume)) + assert.NotContains(t, dump, secretName) + assert.NotContains(t, dump, secretValue) +} diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/.gitignore b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/.gitignore new file mode 100644 index 000000000..77d72bc23 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/.gitignore @@ -0,0 +1,5 @@ +/protoc +/protoc-gen-go +/csi.a +/.protoc +.build diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/Makefile b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/Makefile new file mode 100644 index 000000000..a2a87fede --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/Makefile @@ -0,0 +1,136 @@ +all: build + +######################################################################## +## GOLANG ## +######################################################################## + +# If GOPATH isn't defined then set its default location. +ifeq (,$(strip $(GOPATH))) +GOPATH := $(HOME)/go +else +# If GOPATH is already set then update GOPATH to be its own +# first element. +GOPATH := $(word 1,$(subst :, ,$(GOPATH))) +endif +export GOPATH + + +######################################################################## +## PROTOC ## +######################################################################## + +# Only set PROTOC_VER if it has an empty value. +ifeq (,$(strip $(PROTOC_VER))) +PROTOC_VER := 3.5.1 +endif + +PROTOC_OS := $(shell uname -s) +ifeq (Darwin,$(PROTOC_OS)) +PROTOC_OS := osx +endif + +PROTOC_ARCH := $(shell uname -m) +ifeq (i386,$(PROTOC_ARCH)) +PROTOC_ARCH := x86_32 +endif + +PROTOC := ./protoc +PROTOC_ZIP := protoc-$(PROTOC_VER)-$(PROTOC_OS)-$(PROTOC_ARCH).zip +PROTOC_URL := https://github.com/google/protobuf/releases/download/v$(PROTOC_VER)/$(PROTOC_ZIP) +PROTOC_TMP_DIR := .protoc +PROTOC_TMP_BIN := $(PROTOC_TMP_DIR)/bin/protoc + +$(PROTOC): + -mkdir -p "$(PROTOC_TMP_DIR)" && \ + curl -L $(PROTOC_URL) -o "$(PROTOC_TMP_DIR)/$(PROTOC_ZIP)" && \ + unzip "$(PROTOC_TMP_DIR)/$(PROTOC_ZIP)" -d "$(PROTOC_TMP_DIR)" && \ + chmod 0755 "$(PROTOC_TMP_BIN)" && \ + cp -f "$(PROTOC_TMP_BIN)" "$@" + stat "$@" > /dev/null 2>&1 + + +######################################################################## +## PROTOC-GEN-GO ## +######################################################################## + +# This is the recipe for getting and installing the go plug-in +# for protoc +PROTOC_GEN_GO_PKG := github.com/golang/protobuf/protoc-gen-go +PROTOC_GEN_GO := protoc-gen-go +$(PROTOC_GEN_GO): PROTOBUF_PKG := $(dir $(PROTOC_GEN_GO_PKG)) +$(PROTOC_GEN_GO): PROTOBUF_VERSION := v1.2.0 +$(PROTOC_GEN_GO): + mkdir -p $(dir $(GOPATH)/src/$(PROTOBUF_PKG)) + test -d $(GOPATH)/src/$(PROTOBUF_PKG)/.git || git clone https://$(PROTOBUF_PKG) $(GOPATH)/src/$(PROTOBUF_PKG) + (cd $(GOPATH)/src/$(PROTOBUF_PKG) && \ + (test "$$(git describe --tags | head -1)" = "$(PROTOBUF_VERSION)" || \ + (git fetch && git checkout tags/$(PROTOBUF_VERSION)))) + (cd $(GOPATH)/src/$(PROTOBUF_PKG) && go get -v -d $$(go list -f '{{ .ImportPath }}' ./...)) && \ + go build -o "$@" $(PROTOC_GEN_GO_PKG) + + +######################################################################## +## PATH ## +######################################################################## + +# Update PATH with the current directory. This enables the protoc +# binary to discover the protoc-gen-go binary, built inside this +# directory. +export PATH := $(shell pwd):$(PATH) + + +######################################################################## +## BUILD ## +######################################################################## +CSI_PROTO := ./csitest.proto +CSI_PKG_ROOT := github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test +CSI_PKG_SUB := $(shell cat $(CSI_PROTO) | sed -n -e 's/^package.\([^;]*\).v[0-9]\+;$$/\1/p'|tr '.' '/') +CSI_BUILD := $(CSI_PKG_SUB)/.build +CSI_GO := $(CSI_PKG_SUB)/csitest.pb.go +CSI_A := csi.a +CSI_GO_TMP := $(CSI_BUILD)/$(CSI_PKG_ROOT)/csitest.pb.go + +# This recipe generates the go language bindings to a temp area. +$(CSI_GO_TMP): HERE := $(shell pwd) +$(CSI_GO_TMP): PTYPES_PKG := github.com/golang/protobuf/ptypes +$(CSI_GO_TMP): GO_OUT := plugins=grpc +$(CSI_GO_TMP): GO_OUT := $(GO_OUT),Mgoogle/protobuf/descriptor.proto=github.com/golang/protobuf/protoc-gen-go/descriptor +$(CSI_GO_TMP): GO_OUT := $(GO_OUT),Mgoogle/protobuf/wrappers.proto=$(PTYPES_PKG)/wrappers +$(CSI_GO_TMP): GO_OUT := $(GO_OUT):"$(HERE)/$(CSI_BUILD)" +$(CSI_GO_TMP): INCLUDE := -I$(GOPATH)/src -I$(HERE)/$(PROTOC_TMP_DIR)/include +$(CSI_GO_TMP): $(CSI_PROTO) | $(PROTOC) $(PROTOC_GEN_GO) + @mkdir -p "$(@D)" + (cd "$(GOPATH)/src" && \ + $(HERE)/$(PROTOC) $(INCLUDE) --go_out=$(GO_OUT) "$(CSI_PKG_ROOT)/$( /dev/null 2>&1 || cp -f "$?" "$@" +endif + +# This recipe builds the Go archive from the sources in three steps: +# +# 1. Go get any missing dependencies. +# 2. Cache the packages. +# 3. Build the archive file. +$(CSI_A): $(CSI_GO) + go get -v -d ./... + go install ./$(CSI_PKG_SUB) + go build -o "$@" ./$(CSI_PKG_SUB) + +build: $(CSI_A) + +clean: + go clean -i ./... + rm -rf "$(CSI_A)" "$(CSI_GO)" "$(CSI_BUILD)" + +clobber: clean + rm -fr "$(PROTOC)" "$(PROTOC_GEN_GO)" "$(CSI_PKG_SUB)" "$(PROTOC_TMP_DIR)" + +.PHONY: clean clobber diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/README.md b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/README.md new file mode 100644 index 000000000..259214e1c --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/README.md @@ -0,0 +1,2 @@ +This is a *modified* version of the CSI 1.0.0 spec. It's only purpose is +to test the stripping of secret fields. diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi.proto b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi.proto new file mode 100644 index 000000000..5a6dddbc6 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi.proto @@ -0,0 +1,1203 @@ +// Code generated by make; DO NOT EDIT. +syntax = "proto3"; +package csi.v1; + +import "google/protobuf/descriptor.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; + +option go_package = "csi"; + +extend google.protobuf.FieldOptions { + // Indicates that a field MAY contain information that is sensitive + // and MUST be treated as such (e.g. not logged). + bool csi_secret = 1059; +} +service Identity { + rpc GetPluginInfo(GetPluginInfoRequest) + returns (GetPluginInfoResponse) {} + + rpc GetPluginCapabilities(GetPluginCapabilitiesRequest) + returns (GetPluginCapabilitiesResponse) {} + + rpc Probe (ProbeRequest) + returns (ProbeResponse) {} +} + +service Controller { + rpc CreateVolume (CreateVolumeRequest) + returns (CreateVolumeResponse) {} + + rpc DeleteVolume (DeleteVolumeRequest) + returns (DeleteVolumeResponse) {} + + rpc ControllerPublishVolume (ControllerPublishVolumeRequest) + returns (ControllerPublishVolumeResponse) {} + + rpc ControllerUnpublishVolume (ControllerUnpublishVolumeRequest) + returns (ControllerUnpublishVolumeResponse) {} + + rpc ValidateVolumeCapabilities (ValidateVolumeCapabilitiesRequest) + returns (ValidateVolumeCapabilitiesResponse) {} + + rpc ListVolumes (ListVolumesRequest) + returns (ListVolumesResponse) {} + + rpc GetCapacity (GetCapacityRequest) + returns (GetCapacityResponse) {} + + rpc ControllerGetCapabilities (ControllerGetCapabilitiesRequest) + returns (ControllerGetCapabilitiesResponse) {} + + rpc CreateSnapshot (CreateSnapshotRequest) + returns (CreateSnapshotResponse) {} + + rpc DeleteSnapshot (DeleteSnapshotRequest) + returns (DeleteSnapshotResponse) {} + + rpc ListSnapshots (ListSnapshotsRequest) + returns (ListSnapshotsResponse) {} +} + +service Node { + rpc NodeStageVolume (NodeStageVolumeRequest) + returns (NodeStageVolumeResponse) {} + + rpc NodeUnstageVolume (NodeUnstageVolumeRequest) + returns (NodeUnstageVolumeResponse) {} + + rpc NodePublishVolume (NodePublishVolumeRequest) + returns (NodePublishVolumeResponse) {} + + rpc NodeUnpublishVolume (NodeUnpublishVolumeRequest) + returns (NodeUnpublishVolumeResponse) {} + + rpc NodeGetVolumeStats (NodeGetVolumeStatsRequest) + returns (NodeGetVolumeStatsResponse) {} + + rpc NodeGetCapabilities (NodeGetCapabilitiesRequest) + returns (NodeGetCapabilitiesResponse) {} + + rpc NodeGetInfo (NodeGetInfoRequest) + returns (NodeGetInfoResponse) {} +} +message GetPluginInfoRequest { + // Intentionally empty. +} + +message GetPluginInfoResponse { + // The name MUST follow domain name notation format + // (https://tools.ietf.org/html/rfc1035#section-2.3.1). It SHOULD + // include the plugin's host company name and the plugin name, + // to minimize the possibility of collisions. It MUST be 63 + // characters or less, beginning and ending with an alphanumeric + // character ([a-z0-9A-Z]) with dashes (-), dots (.), and + // alphanumerics between. This field is REQUIRED. + string name = 1; + + // This field is REQUIRED. Value of this field is opaque to the CO. + string vendor_version = 2; + + // This field is OPTIONAL. Values are opaque to the CO. + map manifest = 3; +} +message GetPluginCapabilitiesRequest { + // Intentionally empty. +} + +message GetPluginCapabilitiesResponse { + // All the capabilities that the controller service supports. This + // field is OPTIONAL. + repeated PluginCapability capabilities = 1; +} + +// Specifies a capability of the plugin. +message PluginCapability { + message Service { + enum Type { + UNKNOWN = 0; + + // CONTROLLER_SERVICE indicates that the Plugin provides RPCs for + // the ControllerService. Plugins SHOULD provide this capability. + // In rare cases certain plugins MAY wish to omit the + // ControllerService entirely from their implementation, but such + // SHOULD NOT be the common case. + // The presence of this capability determines whether the CO will + // attempt to invoke the REQUIRED ControllerService RPCs, as well + // as specific RPCs as indicated by ControllerGetCapabilities. + CONTROLLER_SERVICE = 1; + + // VOLUME_ACCESSIBILITY_CONSTRAINTS indicates that the volumes for + // this plugin MAY NOT be equally accessible by all nodes in the + // cluster. The CO MUST use the topology information returned by + // CreateVolumeRequest along with the topology information + // returned by NodeGetInfo to ensure that a given volume is + // accessible from a given node when scheduling workloads. + VOLUME_ACCESSIBILITY_CONSTRAINTS = 2; + } + Type type = 1; + } + + oneof type { + // Service that the plugin supports. + Service service = 1; + } +} +message ProbeRequest { + // Intentionally empty. +} + +message ProbeResponse { + // Readiness allows a plugin to report its initialization status back + // to the CO. Initialization for some plugins MAY be time consuming + // and it is important for a CO to distinguish between the following + // cases: + // + // 1) The plugin is in an unhealthy state and MAY need restarting. In + // this case a gRPC error code SHALL be returned. + // 2) The plugin is still initializing, but is otherwise perfectly + // healthy. In this case a successful response SHALL be returned + // with a readiness value of `false`. Calls to the plugin's + // Controller and/or Node services MAY fail due to an incomplete + // initialization state. + // 3) The plugin has finished initializing and is ready to service + // calls to its Controller and/or Node services. A successful + // response is returned with a readiness value of `true`. + // + // This field is OPTIONAL. If not present, the caller SHALL assume + // that the plugin is in a ready state and is accepting calls to its + // Controller and/or Node services (according to the plugin's reported + // capabilities). + .google.protobuf.BoolValue ready = 1; +} +message CreateVolumeRequest { + // The suggested name for the storage space. This field is REQUIRED. + // It serves two purposes: + // 1) Idempotency - This name is generated by the CO to achieve + // idempotency. The Plugin SHOULD ensure that multiple + // `CreateVolume` calls for the same name do not result in more + // than one piece of storage provisioned corresponding to that + // name. If a Plugin is unable to enforce idempotency, the CO's + // error recovery logic could result in multiple (unused) volumes + // being provisioned. + // In the case of error, the CO MUST handle the gRPC error codes + // per the recovery behavior defined in the "CreateVolume Errors" + // section below. + // The CO is responsible for cleaning up volumes it provisioned + // that it no longer needs. If the CO is uncertain whether a volume + // was provisioned or not when a `CreateVolume` call fails, the CO + // MAY call `CreateVolume` again, with the same name, to ensure the + // volume exists and to retrieve the volume's `volume_id` (unless + // otherwise prohibited by "CreateVolume Errors"). + // 2) Suggested name - Some storage systems allow callers to specify + // an identifier by which to refer to the newly provisioned + // storage. If a storage system supports this, it can optionally + // use this name as the identifier for the new volume. + // Any Unicode string that conforms to the length limit is allowed + // except those containing the following banned characters: + // U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F. + // (These are control characters other than commonly used whitespace.) + string name = 1; + + // This field is OPTIONAL. This allows the CO to specify the capacity + // requirement of the volume to be provisioned. If not specified, the + // Plugin MAY choose an implementation-defined capacity range. If + // specified it MUST always be honored, even when creating volumes + // from a source; which MAY force some backends to internally extend + // the volume after creating it. + CapacityRange capacity_range = 2; + + // The capabilities that the provisioned volume MUST have. SP MUST + // provision a volume that will satisfy ALL of the capabilities + // specified in this list. Otherwise SP MUST return the appropriate + // gRPC error code. + // The Plugin MUST assume that the CO MAY use the provisioned volume + // with ANY of the capabilities specified in this list. + // For example, a CO MAY specify two volume capabilities: one with + // access mode SINGLE_NODE_WRITER and another with access mode + // MULTI_NODE_READER_ONLY. In this case, the SP MUST verify that the + // provisioned volume can be used in either mode. + // This also enables the CO to do early validation: If ANY of the + // specified volume capabilities are not supported by the SP, the call + // MUST return the appropriate gRPC error code. + // This field is REQUIRED. + repeated VolumeCapability volume_capabilities = 3; + + // Plugin specific parameters passed in as opaque key-value pairs. + // This field is OPTIONAL. The Plugin is responsible for parsing and + // validating these parameters. COs will treat these as opaque. + map parameters = 4; + + // Secrets required by plugin to complete volume creation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 5 [(csi_secret) = true]; + + // If specified, the new volume will be pre-populated with data from + // this source. This field is OPTIONAL. + VolumeContentSource volume_content_source = 6; + + // Specifies where (regions, zones, racks, etc.) the provisioned + // volume MUST be accessible from. + // An SP SHALL advertise the requirements for topological + // accessibility information in documentation. COs SHALL only specify + // topological accessibility information supported by the SP. + // This field is OPTIONAL. + // This field SHALL NOT be specified unless the SP has the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // If this field is not specified and the SP has the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability, the SP MAY + // choose where the provisioned volume is accessible from. + TopologyRequirement accessibility_requirements = 7; +} + +// Specifies what source the volume will be created from. One of the +// type fields MUST be specified. +message VolumeContentSource { + message SnapshotSource { + // Contains identity information for the existing source snapshot. + // This field is REQUIRED. Plugin is REQUIRED to support creating + // volume from snapshot if it supports the capability + // CREATE_DELETE_SNAPSHOT. + string snapshot_id = 1; + } + + message VolumeSource { + // Contains identity information for the existing source volume. + // This field is REQUIRED. Plugins reporting CLONE_VOLUME + // capability MUST support creating a volume from another volume. + string volume_id = 1; + } + + oneof type { + SnapshotSource snapshot = 1; + VolumeSource volume = 2; + } +} + +message CreateVolumeResponse { + // Contains all attributes of the newly created volume that are + // relevant to the CO along with information required by the Plugin + // to uniquely identify the volume. This field is REQUIRED. + Volume volume = 1; +} + +// Specify a capability of a volume. +message VolumeCapability { + // Indicate that the volume will be accessed via the block device API. + message BlockVolume { + // Intentionally empty, for now. + } + + // Indicate that the volume will be accessed via the filesystem API. + message MountVolume { + // The filesystem type. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + string fs_type = 1; + + // The mount options that can be used for the volume. This field is + // OPTIONAL. `mount_flags` MAY contain sensitive information. + // Therefore, the CO and the Plugin MUST NOT leak this information + // to untrusted entities. The total size of this repeated field + // SHALL NOT exceed 4 KiB. + repeated string mount_flags = 2; + } + + // Specify how a volume can be accessed. + message AccessMode { + enum Mode { + UNKNOWN = 0; + + // Can only be published once as read/write on a single node, at + // any given time. + SINGLE_NODE_WRITER = 1; + + // Can only be published once as readonly on a single node, at + // any given time. + SINGLE_NODE_READER_ONLY = 2; + + // Can be published as readonly at multiple nodes simultaneously. + MULTI_NODE_READER_ONLY = 3; + + // Can be published at multiple nodes simultaneously. Only one of + // the node can be used as read/write. The rest will be readonly. + MULTI_NODE_SINGLE_WRITER = 4; + + // Can be published as read/write at multiple nodes + // simultaneously. + MULTI_NODE_MULTI_WRITER = 5; + } + + // This field is REQUIRED. + Mode mode = 1; + } + + // Specifies what API the volume will be accessed using. One of the + // following fields MUST be specified. + oneof access_type { + BlockVolume block = 1; + MountVolume mount = 2; + } + + // This is a REQUIRED field. + AccessMode access_mode = 3; +} + +// The capacity of the storage space in bytes. To specify an exact size, +// `required_bytes` and `limit_bytes` SHALL be set to the same value. At +// least one of the these fields MUST be specified. +message CapacityRange { + // Volume MUST be at least this big. This field is OPTIONAL. + // A value of 0 is equal to an unspecified field value. + // The value of this field MUST NOT be negative. + int64 required_bytes = 1; + + // Volume MUST not be bigger than this. This field is OPTIONAL. + // A value of 0 is equal to an unspecified field value. + // The value of this field MUST NOT be negative. + int64 limit_bytes = 2; +} + +// Information about a specific volume. +message Volume { + // The capacity of the volume in bytes. This field is OPTIONAL. If not + // set (value of 0), it indicates that the capacity of the volume is + // unknown (e.g., NFS share). + // The value of this field MUST NOT be negative. + int64 capacity_bytes = 1; + + // The identifier for this volume, generated by the plugin. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific volume vs all other volumes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this volume. + // The SP is NOT responsible for global uniqueness of volume_id across + // multiple SPs. + string volume_id = 2; + + // Opaque static properties of the volume. SP MAY use this field to + // ensure subsequent volume validation and publishing calls have + // contextual information. + // The contents of this field SHALL be opaque to a CO. + // The contents of this field SHALL NOT be mutable. + // The contents of this field SHALL be safe for the CO to cache. + // The contents of this field SHOULD NOT contain sensitive + // information. + // The contents of this field SHOULD NOT be used for uniquely + // identifying a volume. The `volume_id` alone SHOULD be sufficient to + // identify the volume. + // A volume uniquely identified by `volume_id` SHALL always report the + // same volume_context. + // This field is OPTIONAL and when present MUST be passed to volume + // validation and publishing calls. + map volume_context = 3; + + // If specified, indicates that the volume is not empty and is + // pre-populated with data from the specified source. + // This field is OPTIONAL. + VolumeContentSource content_source = 4; + + // Specifies where (regions, zones, racks, etc.) the provisioned + // volume is accessible from. + // A plugin that returns this field MUST also set the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // An SP MAY specify multiple topologies to indicate the volume is + // accessible from multiple locations. + // COs MAY use this information along with the topology information + // returned by NodeGetInfo to ensure that a given volume is accessible + // from a given node when scheduling workloads. + // This field is OPTIONAL. If it is not specified, the CO MAY assume + // the volume is equally accessible from all nodes in the cluster and + // MAY schedule workloads referencing the volume on any available + // node. + // + // Example 1: + // accessible_topology = {"region": "R1", "zone": "Z2"} + // Indicates a volume accessible only from the "region" "R1" and the + // "zone" "Z2". + // + // Example 2: + // accessible_topology = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3" + // in the "region" "R1". + repeated Topology accessible_topology = 5; +} + +message TopologyRequirement { + // Specifies the list of topologies the provisioned volume MUST be + // accessible from. + // This field is OPTIONAL. If TopologyRequirement is specified either + // requisite or preferred or both MUST be specified. + // + // If requisite is specified, the provisioned volume MUST be + // accessible from at least one of the requisite topologies. + // + // Given + // x = number of topologies provisioned volume is accessible from + // n = number of requisite topologies + // The CO MUST ensure n >= 1. The SP MUST ensure x >= 1 + // If x==n, then the SP MUST make the provisioned volume available to + // all topologies from the list of requisite topologies. If it is + // unable to do so, the SP MUST fail the CreateVolume call. + // For example, if a volume should be accessible from a single zone, + // and requisite = + // {"region": "R1", "zone": "Z2"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and the "zone" "Z2". + // Similarly, if a volume should be accessible from two zones, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and both "zone" "Z2" and "zone" "Z3". + // + // If xn, then the SP MUST make the provisioned volume available from + // all topologies from the list of requisite topologies and MAY choose + // the remaining x-n unique topologies from the list of all possible + // topologies. If it is unable to do so, the SP MUST fail the + // CreateVolume call. + // For example, if a volume should be accessible from two zones, and + // requisite = + // {"region": "R1", "zone": "Z2"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and the "zone" "Z2" and the SP may select the second zone + // independently, e.g. "R1/Z4". + repeated Topology requisite = 1; + + // Specifies the list of topologies the CO would prefer the volume to + // be provisioned in. + // + // This field is OPTIONAL. If TopologyRequirement is specified either + // requisite or preferred or both MUST be specified. + // + // An SP MUST attempt to make the provisioned volume available using + // the preferred topologies in order from first to last. + // + // If requisite is specified, all topologies in preferred list MUST + // also be present in the list of requisite topologies. + // + // If the SP is unable to to make the provisioned volume available + // from any of the preferred topologies, the SP MAY choose a topology + // from the list of requisite topologies. + // If the list of requisite topologies is not specified, then the SP + // MAY choose from the list of all possible topologies. + // If the list of requisite topologies is specified and the SP is + // unable to to make the provisioned volume available from any of the + // requisite topologies it MUST fail the CreateVolume call. + // + // Example 1: + // Given a volume should be accessible from a single zone, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // preferred = + // {"region": "R1", "zone": "Z3"} + // then the the SP SHOULD first attempt to make the provisioned volume + // available from "zone" "Z3" in the "region" "R1" and fall back to + // "zone" "Z2" in the "region" "R1" if that is not possible. + // + // Example 2: + // Given a volume should be accessible from a single zone, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"}, + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z5"} + // preferred = + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z2"} + // then the the SP SHOULD first attempt to make the provisioned volume + // accessible from "zone" "Z4" in the "region" "R1" and fall back to + // "zone" "Z2" in the "region" "R1" if that is not possible. If that + // is not possible, the SP may choose between either the "zone" + // "Z3" or "Z5" in the "region" "R1". + // + // Example 3: + // Given a volume should be accessible from TWO zones (because an + // opaque parameter in CreateVolumeRequest, for example, specifies + // the volume is accessible from two zones, aka synchronously + // replicated), and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"}, + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z5"} + // preferred = + // {"region": "R1", "zone": "Z5"}, + // {"region": "R1", "zone": "Z3"} + // then the the SP SHOULD first attempt to make the provisioned volume + // accessible from the combination of the two "zones" "Z5" and "Z3" in + // the "region" "R1". If that's not possible, it should fall back to + // a combination of "Z5" and other possibilities from the list of + // requisite. If that's not possible, it should fall back to a + // combination of "Z3" and other possibilities from the list of + // requisite. If that's not possible, it should fall back to a + // combination of other possibilities from the list of requisite. + repeated Topology preferred = 2; +} + +// Topology is a map of topological domains to topological segments. +// A topological domain is a sub-division of a cluster, like "region", +// "zone", "rack", etc. +// A topological segment is a specific instance of a topological domain, +// like "zone3", "rack3", etc. +// For example {"com.company/zone": "Z1", "com.company/rack": "R3"} +// Valid keys have two segments: an OPTIONAL prefix and name, separated +// by a slash (/), for example: "com.company.example/zone". +// The key name segment is REQUIRED. The prefix is OPTIONAL. +// The key name MUST be 63 characters or less, begin and end with an +// alphanumeric character ([a-z0-9A-Z]), and contain only dashes (-), +// underscores (_), dots (.), or alphanumerics in between, for example +// "zone". +// The key prefix MUST be 63 characters or less, begin and end with a +// lower-case alphanumeric character ([a-z0-9]), contain only +// dashes (-), dots (.), or lower-case alphanumerics in between, and +// follow domain name notation format +// (https://tools.ietf.org/html/rfc1035#section-2.3.1). +// The key prefix SHOULD include the plugin's host company name and/or +// the plugin name, to minimize the possibility of collisions with keys +// from other plugins. +// If a key prefix is specified, it MUST be identical across all +// topology keys returned by the SP (across all RPCs). +// Keys MUST be case-insensitive. Meaning the keys "Zone" and "zone" +// MUST not both exist. +// Each value (topological segment) MUST contain 1 or more strings. +// Each string MUST be 63 characters or less and begin and end with an +// alphanumeric character with '-', '_', '.', or alphanumerics in +// between. +message Topology { + map segments = 1; +} +message DeleteVolumeRequest { + // The ID of the volume to be deprovisioned. + // This field is REQUIRED. + string volume_id = 1; + + // Secrets required by plugin to complete volume deletion request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 2 [(csi_secret) = true]; +} + +message DeleteVolumeResponse { + // Intentionally empty. +} +message ControllerPublishVolumeRequest { + // The ID of the volume to be used on a node. + // This field is REQUIRED. + string volume_id = 1; + + // The ID of the node. This field is REQUIRED. The CO SHALL set this + // field to match the node ID returned by `NodeGetInfo`. + string node_id = 2; + + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the published volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability volume_capability = 3; + + // Indicates SP MUST publish the volume in readonly mode. + // CO MUST set this field to false if SP does not have the + // PUBLISH_READONLY controller capability. + // This is a REQUIRED field. + bool readonly = 4; + + // Secrets required by plugin to complete controller publish volume + // request. This field is OPTIONAL. Refer to the + // `Secrets Requirements` section on how to use this field. + map secrets = 5 [(csi_secret) = true]; + + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + map volume_context = 6; +} + +message ControllerPublishVolumeResponse { + // Opaque static publish properties of the volume. SP MAY use this + // field to ensure subsequent `NodeStageVolume` or `NodePublishVolume` + // calls calls have contextual information. + // The contents of this field SHALL be opaque to a CO. + // The contents of this field SHALL NOT be mutable. + // The contents of this field SHALL be safe for the CO to cache. + // The contents of this field SHOULD NOT contain sensitive + // information. + // The contents of this field SHOULD NOT be used for uniquely + // identifying a volume. The `volume_id` alone SHOULD be sufficient to + // identify the volume. + // This field is OPTIONAL and when present MUST be passed to + // subsequent `NodeStageVolume` or `NodePublishVolume` calls + map publish_context = 1; +} +message ControllerUnpublishVolumeRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // The ID of the node. This field is OPTIONAL. The CO SHOULD set this + // field to match the node ID returned by `NodeGetInfo` or leave it + // unset. If the value is set, the SP MUST unpublish the volume from + // the specified node. If the value is unset, the SP MUST unpublish + // the volume from all nodes it is published to. + string node_id = 2; + + // Secrets required by plugin to complete controller unpublish volume + // request. This SHOULD be the same secrets passed to the + // ControllerPublishVolume call for the specified volume. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 3 [(csi_secret) = true]; +} + +message ControllerUnpublishVolumeResponse { + // Intentionally empty. +} +message ValidateVolumeCapabilitiesRequest { + // The ID of the volume to check. This field is REQUIRED. + string volume_id = 1; + + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + map volume_context = 2; + + // The capabilities that the CO wants to check for the volume. This + // call SHALL return "confirmed" only if all the volume capabilities + // specified below are supported. This field is REQUIRED. + repeated VolumeCapability volume_capabilities = 3; + + // See CreateVolumeRequest.parameters. + // This field is OPTIONAL. + map parameters = 4; + + // Secrets required by plugin to complete volume validation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 5 [(csi_secret) = true]; +} + +message ValidateVolumeCapabilitiesResponse { + message Confirmed { + // Volume context validated by the plugin. + // This field is OPTIONAL. + map volume_context = 1; + + // Volume capabilities supported by the plugin. + // This field is REQUIRED. + repeated VolumeCapability volume_capabilities = 2; + + // The volume creation parameters validated by the plugin. + // This field is OPTIONAL. + map parameters = 3; + } + + // Confirmed indicates to the CO the set of capabilities that the + // plugin has validated. This field SHALL only be set to a non-empty + // value for successful validation responses. + // For successful validation responses, the CO SHALL compare the + // fields of this message to the originally requested capabilities in + // order to guard against an older plugin reporting "valid" for newer + // capability fields that it does not yet understand. + // This field is OPTIONAL. + Confirmed confirmed = 1; + + // Message to the CO if `confirmed` above is empty. This field is + // OPTIONAL. + // An empty string is equal to an unspecified field value. + string message = 2; +} +message ListVolumesRequest { + // If specified (non-zero value), the Plugin MUST NOT return more + // entries than this number in the response. If the actual number of + // entries is more than this number, the Plugin MUST set `next_token` + // in the response which can be used to get the next page of entries + // in the subsequent `ListVolumes` call. This field is OPTIONAL. If + // not specified (zero value), it means there is no restriction on the + // number of entries that can be returned. + // The value of this field MUST NOT be negative. + int32 max_entries = 1; + + // A token to specify where to start paginating. Set this field to + // `next_token` returned by a previous `ListVolumes` call to get the + // next page of entries. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + string starting_token = 2; +} + +message ListVolumesResponse { + message Entry { + Volume volume = 1; + } + + repeated Entry entries = 1; + + // This token allows you to get the next page of entries for + // `ListVolumes` request. If the number of entries is larger than + // `max_entries`, use the `next_token` as a value for the + // `starting_token` field in the next `ListVolumes` request. This + // field is OPTIONAL. + // An empty string is equal to an unspecified field value. + string next_token = 2; +} +message GetCapacityRequest { + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes that satisfy ALL of the + // specified `volume_capabilities`. These are the same + // `volume_capabilities` the CO will use in `CreateVolumeRequest`. + // This field is OPTIONAL. + repeated VolumeCapability volume_capabilities = 1; + + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes with the given Plugin + // specific `parameters`. These are the same `parameters` the CO will + // use in `CreateVolumeRequest`. This field is OPTIONAL. + map parameters = 2; + + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes that in the specified + // `accessible_topology`. This is the same as the + // `accessible_topology` the CO returns in a `CreateVolumeResponse`. + // This field is OPTIONAL. This field SHALL NOT be set unless the + // plugin advertises the VOLUME_ACCESSIBILITY_CONSTRAINTS capability. + Topology accessible_topology = 3; +} + +message GetCapacityResponse { + // The available capacity, in bytes, of the storage that can be used + // to provision volumes. If `volume_capabilities` or `parameters` is + // specified in the request, the Plugin SHALL take those into + // consideration when calculating the available capacity of the + // storage. This field is REQUIRED. + // The value of this field MUST NOT be negative. + int64 available_capacity = 1; +} +message ControllerGetCapabilitiesRequest { + // Intentionally empty. +} + +message ControllerGetCapabilitiesResponse { + // All the capabilities that the controller service supports. This + // field is OPTIONAL. + repeated ControllerServiceCapability capabilities = 1; +} + +// Specifies a capability of the controller service. +message ControllerServiceCapability { + message RPC { + enum Type { + UNKNOWN = 0; + CREATE_DELETE_VOLUME = 1; + PUBLISH_UNPUBLISH_VOLUME = 2; + LIST_VOLUMES = 3; + GET_CAPACITY = 4; + // Currently the only way to consume a snapshot is to create + // a volume from it. Therefore plugins supporting + // CREATE_DELETE_SNAPSHOT MUST support creating volume from + // snapshot. + CREATE_DELETE_SNAPSHOT = 5; + LIST_SNAPSHOTS = 6; + // Plugins supporting volume cloning at the storage level MAY + // report this capability. The source volume MUST be managed by + // the same plugin. Not all volume sources and parameters + // combinations MAY work. + CLONE_VOLUME = 7; + // Indicates the SP supports ControllerPublishVolume.readonly + // field. + PUBLISH_READONLY = 8; + } + + Type type = 1; + } + + oneof type { + // RPC that the controller supports. + RPC rpc = 1; + } +} +message CreateSnapshotRequest { + // The ID of the source volume to be snapshotted. + // This field is REQUIRED. + string source_volume_id = 1; + + // The suggested name for the snapshot. This field is REQUIRED for + // idempotency. + // Any Unicode string that conforms to the length limit is allowed + // except those containing the following banned characters: + // U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F. + // (These are control characters other than commonly used whitespace.) + string name = 2; + + // Secrets required by plugin to complete snapshot creation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 3 [(csi_secret) = true]; + + // Plugin specific parameters passed in as opaque key-value pairs. + // This field is OPTIONAL. The Plugin is responsible for parsing and + // validating these parameters. COs will treat these as opaque. + // Use cases for opaque parameters: + // - Specify a policy to automatically clean up the snapshot. + // - Specify an expiration date for the snapshot. + // - Specify whether the snapshot is readonly or read/write. + // - Specify if the snapshot should be replicated to some place. + // - Specify primary or secondary for replication systems that + // support snapshotting only on primary. + map parameters = 4; +} + +message CreateSnapshotResponse { + // Contains all attributes of the newly created snapshot that are + // relevant to the CO along with information required by the Plugin + // to uniquely identify the snapshot. This field is REQUIRED. + Snapshot snapshot = 1; +} + +// Information about a specific snapshot. +message Snapshot { + // This is the complete size of the snapshot in bytes. The purpose of + // this field is to give CO guidance on how much space is needed to + // create a volume from this snapshot. The size of the volume MUST NOT + // be less than the size of the source snapshot. This field is + // OPTIONAL. If this field is not set, it indicates that this size is + // unknown. The value of this field MUST NOT be negative and a size of + // zero means it is unspecified. + int64 size_bytes = 1; + + // The identifier for this snapshot, generated by the plugin. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific snapshot vs all other snapshots supported by this + // plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this snapshot. + // The SP is NOT responsible for global uniqueness of snapshot_id + // across multiple SPs. + string snapshot_id = 2; + + // Identity information for the source volume. Note that creating a + // snapshot from a snapshot is not supported here so the source has to + // be a volume. This field is REQUIRED. + string source_volume_id = 3; + + // Timestamp when the point-in-time snapshot is taken on the storage + // system. This field is REQUIRED. + .google.protobuf.Timestamp creation_time = 4; + + // Indicates if a snapshot is ready to use as a + // `volume_content_source` in a `CreateVolumeRequest`. The default + // value is false. This field is REQUIRED. + bool ready_to_use = 5; +} +message DeleteSnapshotRequest { + // The ID of the snapshot to be deleted. + // This field is REQUIRED. + string snapshot_id = 1; + + // Secrets required by plugin to complete snapshot deletion request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 2 [(csi_secret) = true]; +} + +message DeleteSnapshotResponse {} +// List all snapshots on the storage system regardless of how they were +// created. +message ListSnapshotsRequest { + // If specified (non-zero value), the Plugin MUST NOT return more + // entries than this number in the response. If the actual number of + // entries is more than this number, the Plugin MUST set `next_token` + // in the response which can be used to get the next page of entries + // in the subsequent `ListSnapshots` call. This field is OPTIONAL. If + // not specified (zero value), it means there is no restriction on the + // number of entries that can be returned. + // The value of this field MUST NOT be negative. + int32 max_entries = 1; + + // A token to specify where to start paginating. Set this field to + // `next_token` returned by a previous `ListSnapshots` call to get the + // next page of entries. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + string starting_token = 2; + + // Identity information for the source volume. This field is OPTIONAL. + // It can be used to list snapshots by volume. + string source_volume_id = 3; + + // Identity information for a specific snapshot. This field is + // OPTIONAL. It can be used to list only a specific snapshot. + // ListSnapshots will return with current snapshot information + // and will not block if the snapshot is being processed after + // it is cut. + string snapshot_id = 4; +} + +message ListSnapshotsResponse { + message Entry { + Snapshot snapshot = 1; + } + + repeated Entry entries = 1; + + // This token allows you to get the next page of entries for + // `ListSnapshots` request. If the number of entries is larger than + // `max_entries`, use the `next_token` as a value for the + // `starting_token` field in the next `ListSnapshots` request. This + // field is OPTIONAL. + // An empty string is equal to an unspecified field value. + string next_token = 2; +} +message NodeStageVolumeRequest { + // The ID of the volume to publish. This field is REQUIRED. + string volume_id = 1; + + // The CO SHALL set this field to the value returned by + // `ControllerPublishVolume` if the corresponding Controller Plugin + // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be + // left unset if the corresponding Controller Plugin does not have + // this capability. This is an OPTIONAL field. + map publish_context = 2; + + // The path to which the volume MAY be staged. It MUST be an + // absolute path in the root filesystem of the process serving this + // request, and MUST be a directory. The CO SHALL ensure that there + // is only one `staging_target_path` per volume. The CO SHALL ensure + // that the path is directory and that the process serving the + // request has `read` and `write` permission to that directory. The + // CO SHALL be responsible for creating the directory if it does not + // exist. + // This is a REQUIRED field. + string staging_target_path = 3; + + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the staged volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability volume_capability = 4; + + // Secrets required by plugin to complete node stage volume request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 5 [(csi_secret) = true]; + + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + map volume_context = 6; +} + +message NodeStageVolumeResponse { + // Intentionally empty. +} +message NodeUnstageVolumeRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // The path at which the volume was staged. It MUST be an absolute + // path in the root filesystem of the process serving this request. + // This is a REQUIRED field. + string staging_target_path = 2; +} + +message NodeUnstageVolumeResponse { + // Intentionally empty. +} +message NodePublishVolumeRequest { + // The ID of the volume to publish. This field is REQUIRED. + string volume_id = 1; + + // The CO SHALL set this field to the value returned by + // `ControllerPublishVolume` if the corresponding Controller Plugin + // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be + // left unset if the corresponding Controller Plugin does not have + // this capability. This is an OPTIONAL field. + map publish_context = 2; + + // The path to which the volume was staged by `NodeStageVolume`. + // It MUST be an absolute path in the root filesystem of the process + // serving this request. + // It MUST be set if the Node Plugin implements the + // `STAGE_UNSTAGE_VOLUME` node capability. + // This is an OPTIONAL field. + string staging_target_path = 3; + + // The path to which the volume will be published. It MUST be an + // absolute path in the root filesystem of the process serving this + // request. The CO SHALL ensure uniqueness of target_path per volume. + // The CO SHALL ensure that the parent directory of this path exists + // and that the process serving the request has `read` and `write` + // permissions to that parent directory. + // For volumes with an access type of block, the SP SHALL place the + // block device at target_path. + // For volumes with an access type of mount, the SP SHALL place the + // mounted directory at target_path. + // Creation of target_path is the responsibility of the SP. + // This is a REQUIRED field. + string target_path = 4; + + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the published volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability volume_capability = 5; + + // Indicates SP MUST publish the volume in readonly mode. + // This field is REQUIRED. + bool readonly = 6; + + // Secrets required by plugin to complete node publish volume request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 7 [(csi_secret) = true]; + + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + map volume_context = 8; +} + +message NodePublishVolumeResponse { + // Intentionally empty. +} +message NodeUnpublishVolumeRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // The path at which the volume was published. It MUST be an absolute + // path in the root filesystem of the process serving this request. + // The SP MUST delete the file or directory it created at this path. + // This is a REQUIRED field. + string target_path = 2; +} + +message NodeUnpublishVolumeResponse { + // Intentionally empty. +} +message NodeGetVolumeStatsRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // It can be any valid path where volume was previously + // staged or published. + // It MUST be an absolute path in the root filesystem of + // the process serving this request. + // This is a REQUIRED field. + string volume_path = 2; +} + +message NodeGetVolumeStatsResponse { + // This field is OPTIONAL. + repeated VolumeUsage usage = 1; +} + +message VolumeUsage { + enum Unit { + UNKNOWN = 0; + BYTES = 1; + INODES = 2; + } + // The available capacity in specified Unit. This field is OPTIONAL. + // The value of this field MUST NOT be negative. + int64 available = 1; + + // The total capacity in specified Unit. This field is REQUIRED. + // The value of this field MUST NOT be negative. + int64 total = 2; + + // The used capacity in specified Unit. This field is OPTIONAL. + // The value of this field MUST NOT be negative. + int64 used = 3; + + // Units by which values are measured. This field is REQUIRED. + Unit unit = 4; +} +message NodeGetCapabilitiesRequest { + // Intentionally empty. +} + +message NodeGetCapabilitiesResponse { + // All the capabilities that the node service supports. This field + // is OPTIONAL. + repeated NodeServiceCapability capabilities = 1; +} + +// Specifies a capability of the node service. +message NodeServiceCapability { + message RPC { + enum Type { + UNKNOWN = 0; + STAGE_UNSTAGE_VOLUME = 1; + // If Plugin implements GET_VOLUME_STATS capability + // then it MUST implement NodeGetVolumeStats RPC + // call for fetching volume statistics. + GET_VOLUME_STATS = 2; + } + + Type type = 1; + } + + oneof type { + // RPC that the controller supports. + RPC rpc = 1; + } +} +message NodeGetInfoRequest { +} + +message NodeGetInfoResponse { + // The identifier of the node as understood by the SP. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific node vs all other nodes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls, including + // `ControllerPublishVolume`, to refer to this node. + // The SP is NOT responsible for global uniqueness of node_id across + // multiple SPs. + string node_id = 1; + + // Maximum number of volumes that controller can publish to the node. + // If value is not set or zero CO SHALL decide how many volumes of + // this type can be published by the controller to the node. The + // plugin MUST NOT set negative values here. + // This field is OPTIONAL. + int64 max_volumes_per_node = 2; + + // Specifies where (regions, zones, racks, etc.) the node is + // accessible from. + // A plugin that returns this field MUST also set the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // COs MAY use this information along with the topology information + // returned in CreateVolumeResponse to ensure that a given volume is + // accessible from a given node when scheduling workloads. + // This field is OPTIONAL. If it is not specified, the CO MAY assume + // the node is not subject to any topological constraint, and MAY + // schedule workloads that reference any volume V, such that there are + // no topological constraints declared for V. + // + // Example 1: + // accessible_topology = + // {"region": "R1", "zone": "R2"} + // Indicates the node exists within the "region" "R1" and the "zone" + // "Z2". + Topology accessible_topology = 3; +} diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi03/csi.pb.go b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi03/csi.pb.go new file mode 100644 index 000000000..612cfdd71 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi03/csi.pb.go @@ -0,0 +1,4991 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: csi.proto + +package csi + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type PluginCapability_Service_Type int32 + +const ( + PluginCapability_Service_UNKNOWN PluginCapability_Service_Type = 0 + // CONTROLLER_SERVICE indicates that the Plugin provides RPCs for + // the ControllerService. Plugins SHOULD provide this capability. + // In rare cases certain plugins may wish to omit the + // ControllerService entirely from their implementation, but such + // SHOULD NOT be the common case. + // The presence of this capability determines whether the CO will + // attempt to invoke the REQUIRED ControllerService RPCs, as well + // as specific RPCs as indicated by ControllerGetCapabilities. + PluginCapability_Service_CONTROLLER_SERVICE PluginCapability_Service_Type = 1 + // ACCESSIBILITY_CONSTRAINTS indicates that the volumes for this + // plugin may not be equally accessible by all nodes in the + // cluster. The CO MUST use the topology information returned by + // CreateVolumeRequest along with the topology information + // returned by NodeGetInfo to ensure that a given volume is + // accessible from a given node when scheduling workloads. + PluginCapability_Service_ACCESSIBILITY_CONSTRAINTS PluginCapability_Service_Type = 2 +) + +var PluginCapability_Service_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CONTROLLER_SERVICE", + 2: "ACCESSIBILITY_CONSTRAINTS", +} +var PluginCapability_Service_Type_value = map[string]int32{ + "UNKNOWN": 0, + "CONTROLLER_SERVICE": 1, + "ACCESSIBILITY_CONSTRAINTS": 2, +} + +func (x PluginCapability_Service_Type) String() string { + return proto.EnumName(PluginCapability_Service_Type_name, int32(x)) +} +func (PluginCapability_Service_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{4, 0, 0} +} + +type VolumeCapability_AccessMode_Mode int32 + +const ( + VolumeCapability_AccessMode_UNKNOWN VolumeCapability_AccessMode_Mode = 0 + // Can only be published once as read/write on a single node, at + // any given time. + VolumeCapability_AccessMode_SINGLE_NODE_WRITER VolumeCapability_AccessMode_Mode = 1 + // Can only be published once as readonly on a single node, at + // any given time. + VolumeCapability_AccessMode_SINGLE_NODE_READER_ONLY VolumeCapability_AccessMode_Mode = 2 + // Can be published as readonly at multiple nodes simultaneously. + VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY VolumeCapability_AccessMode_Mode = 3 + // Can be published at multiple nodes simultaneously. Only one of + // the node can be used as read/write. The rest will be readonly. + VolumeCapability_AccessMode_MULTI_NODE_SINGLE_WRITER VolumeCapability_AccessMode_Mode = 4 + // Can be published as read/write at multiple nodes + // simultaneously. + VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER VolumeCapability_AccessMode_Mode = 5 +) + +var VolumeCapability_AccessMode_Mode_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SINGLE_NODE_WRITER", + 2: "SINGLE_NODE_READER_ONLY", + 3: "MULTI_NODE_READER_ONLY", + 4: "MULTI_NODE_SINGLE_WRITER", + 5: "MULTI_NODE_MULTI_WRITER", +} +var VolumeCapability_AccessMode_Mode_value = map[string]int32{ + "UNKNOWN": 0, + "SINGLE_NODE_WRITER": 1, + "SINGLE_NODE_READER_ONLY": 2, + "MULTI_NODE_READER_ONLY": 3, + "MULTI_NODE_SINGLE_WRITER": 4, + "MULTI_NODE_MULTI_WRITER": 5, +} + +func (x VolumeCapability_AccessMode_Mode) String() string { + return proto.EnumName(VolumeCapability_AccessMode_Mode_name, int32(x)) +} +func (VolumeCapability_AccessMode_Mode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{10, 2, 0} +} + +type ControllerServiceCapability_RPC_Type int32 + +const ( + ControllerServiceCapability_RPC_UNKNOWN ControllerServiceCapability_RPC_Type = 0 + ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME ControllerServiceCapability_RPC_Type = 1 + ControllerServiceCapability_RPC_PUBLISH_UNPUBLISH_VOLUME ControllerServiceCapability_RPC_Type = 2 + ControllerServiceCapability_RPC_LIST_VOLUMES ControllerServiceCapability_RPC_Type = 3 + ControllerServiceCapability_RPC_GET_CAPACITY ControllerServiceCapability_RPC_Type = 4 + // Currently the only way to consume a snapshot is to create + // a volume from it. Therefore plugins supporting + // CREATE_DELETE_SNAPSHOT MUST support creating volume from + // snapshot. + ControllerServiceCapability_RPC_CREATE_DELETE_SNAPSHOT ControllerServiceCapability_RPC_Type = 5 + // LIST_SNAPSHOTS is NOT REQUIRED. For plugins that need to upload + // a snapshot after it is being cut, LIST_SNAPSHOTS COULD be used + // with the snapshot_id as the filter to query whether the + // uploading process is complete or not. + ControllerServiceCapability_RPC_LIST_SNAPSHOTS ControllerServiceCapability_RPC_Type = 6 +) + +var ControllerServiceCapability_RPC_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CREATE_DELETE_VOLUME", + 2: "PUBLISH_UNPUBLISH_VOLUME", + 3: "LIST_VOLUMES", + 4: "GET_CAPACITY", + 5: "CREATE_DELETE_SNAPSHOT", + 6: "LIST_SNAPSHOTS", +} +var ControllerServiceCapability_RPC_Type_value = map[string]int32{ + "UNKNOWN": 0, + "CREATE_DELETE_VOLUME": 1, + "PUBLISH_UNPUBLISH_VOLUME": 2, + "LIST_VOLUMES": 3, + "GET_CAPACITY": 4, + "CREATE_DELETE_SNAPSHOT": 5, + "LIST_SNAPSHOTS": 6, +} + +func (x ControllerServiceCapability_RPC_Type) String() string { + return proto.EnumName(ControllerServiceCapability_RPC_Type_name, int32(x)) +} +func (ControllerServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{29, 0, 0} +} + +type SnapshotStatus_Type int32 + +const ( + SnapshotStatus_UNKNOWN SnapshotStatus_Type = 0 + // A snapshot is ready for use. + SnapshotStatus_READY SnapshotStatus_Type = 1 + // A snapshot is cut and is now being uploaded. + // Some cloud providers and storage systems uploads the snapshot + // to the cloud after the snapshot is cut. During this phase, + // `thaw` can be done so the application can be running again if + // `freeze` was done before taking the snapshot. + SnapshotStatus_UPLOADING SnapshotStatus_Type = 2 + // An error occurred during the snapshot uploading process. + // This error status is specific for uploading because + // `CreateSnaphot` is a blocking call before the snapshot is + // cut and therefore it SHOULD NOT come back with an error + // status when an error occurs. Instead a gRPC error code SHALL + // be returned by `CreateSnapshot` when an error occurs before + // a snapshot is cut. + SnapshotStatus_ERROR_UPLOADING SnapshotStatus_Type = 3 +) + +var SnapshotStatus_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "READY", + 2: "UPLOADING", + 3: "ERROR_UPLOADING", +} +var SnapshotStatus_Type_value = map[string]int32{ + "UNKNOWN": 0, + "READY": 1, + "UPLOADING": 2, + "ERROR_UPLOADING": 3, +} + +func (x SnapshotStatus_Type) String() string { + return proto.EnumName(SnapshotStatus_Type_name, int32(x)) +} +func (SnapshotStatus_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{33, 0} +} + +type NodeServiceCapability_RPC_Type int32 + +const ( + NodeServiceCapability_RPC_UNKNOWN NodeServiceCapability_RPC_Type = 0 + NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME NodeServiceCapability_RPC_Type = 1 +) + +var NodeServiceCapability_RPC_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "STAGE_UNSTAGE_VOLUME", +} +var NodeServiceCapability_RPC_Type_value = map[string]int32{ + "UNKNOWN": 0, + "STAGE_UNSTAGE_VOLUME": 1, +} + +func (x NodeServiceCapability_RPC_Type) String() string { + return proto.EnumName(NodeServiceCapability_RPC_Type_name, int32(x)) +} +func (NodeServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{50, 0, 0} +} + +type GetPluginInfoRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginInfoRequest) Reset() { *m = GetPluginInfoRequest{} } +func (m *GetPluginInfoRequest) String() string { return proto.CompactTextString(m) } +func (*GetPluginInfoRequest) ProtoMessage() {} +func (*GetPluginInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{0} +} +func (m *GetPluginInfoRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginInfoRequest.Unmarshal(m, b) +} +func (m *GetPluginInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginInfoRequest.Marshal(b, m, deterministic) +} +func (dst *GetPluginInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginInfoRequest.Merge(dst, src) +} +func (m *GetPluginInfoRequest) XXX_Size() int { + return xxx_messageInfo_GetPluginInfoRequest.Size(m) +} +func (m *GetPluginInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginInfoRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginInfoRequest proto.InternalMessageInfo + +type GetPluginInfoResponse struct { + // The name MUST follow reverse domain name notation format + // (https://en.wikipedia.org/wiki/Reverse_domain_name_notation). + // It SHOULD include the plugin's host company name and the plugin + // name, to minimize the possibility of collisions. It MUST be 63 + // characters or less, beginning and ending with an alphanumeric + // character ([a-z0-9A-Z]) with dashes (-), underscores (_), + // dots (.), and alphanumerics between. This field is REQUIRED. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // This field is REQUIRED. Value of this field is opaque to the CO. + VendorVersion string `protobuf:"bytes,2,opt,name=vendor_version,json=vendorVersion" json:"vendor_version,omitempty"` + // This field is OPTIONAL. Values are opaque to the CO. + Manifest map[string]string `protobuf:"bytes,3,rep,name=manifest" json:"manifest,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginInfoResponse) Reset() { *m = GetPluginInfoResponse{} } +func (m *GetPluginInfoResponse) String() string { return proto.CompactTextString(m) } +func (*GetPluginInfoResponse) ProtoMessage() {} +func (*GetPluginInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{1} +} +func (m *GetPluginInfoResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginInfoResponse.Unmarshal(m, b) +} +func (m *GetPluginInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginInfoResponse.Marshal(b, m, deterministic) +} +func (dst *GetPluginInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginInfoResponse.Merge(dst, src) +} +func (m *GetPluginInfoResponse) XXX_Size() int { + return xxx_messageInfo_GetPluginInfoResponse.Size(m) +} +func (m *GetPluginInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginInfoResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginInfoResponse proto.InternalMessageInfo + +func (m *GetPluginInfoResponse) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetPluginInfoResponse) GetVendorVersion() string { + if m != nil { + return m.VendorVersion + } + return "" +} + +func (m *GetPluginInfoResponse) GetManifest() map[string]string { + if m != nil { + return m.Manifest + } + return nil +} + +type GetPluginCapabilitiesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginCapabilitiesRequest) Reset() { *m = GetPluginCapabilitiesRequest{} } +func (m *GetPluginCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*GetPluginCapabilitiesRequest) ProtoMessage() {} +func (*GetPluginCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{2} +} +func (m *GetPluginCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginCapabilitiesRequest.Unmarshal(m, b) +} +func (m *GetPluginCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *GetPluginCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginCapabilitiesRequest.Merge(dst, src) +} +func (m *GetPluginCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_GetPluginCapabilitiesRequest.Size(m) +} +func (m *GetPluginCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginCapabilitiesRequest proto.InternalMessageInfo + +type GetPluginCapabilitiesResponse struct { + // All the capabilities that the controller service supports. This + // field is OPTIONAL. + Capabilities []*PluginCapability `protobuf:"bytes,2,rep,name=capabilities" json:"capabilities,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginCapabilitiesResponse) Reset() { *m = GetPluginCapabilitiesResponse{} } +func (m *GetPluginCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*GetPluginCapabilitiesResponse) ProtoMessage() {} +func (*GetPluginCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{3} +} +func (m *GetPluginCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginCapabilitiesResponse.Unmarshal(m, b) +} +func (m *GetPluginCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *GetPluginCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginCapabilitiesResponse.Merge(dst, src) +} +func (m *GetPluginCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_GetPluginCapabilitiesResponse.Size(m) +} +func (m *GetPluginCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginCapabilitiesResponse proto.InternalMessageInfo + +func (m *GetPluginCapabilitiesResponse) GetCapabilities() []*PluginCapability { + if m != nil { + return m.Capabilities + } + return nil +} + +// Specifies a capability of the plugin. +type PluginCapability struct { + // Types that are valid to be assigned to Type: + // *PluginCapability_Service_ + Type isPluginCapability_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginCapability) Reset() { *m = PluginCapability{} } +func (m *PluginCapability) String() string { return proto.CompactTextString(m) } +func (*PluginCapability) ProtoMessage() {} +func (*PluginCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{4} +} +func (m *PluginCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PluginCapability.Unmarshal(m, b) +} +func (m *PluginCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PluginCapability.Marshal(b, m, deterministic) +} +func (dst *PluginCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginCapability.Merge(dst, src) +} +func (m *PluginCapability) XXX_Size() int { + return xxx_messageInfo_PluginCapability.Size(m) +} +func (m *PluginCapability) XXX_DiscardUnknown() { + xxx_messageInfo_PluginCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginCapability proto.InternalMessageInfo + +type isPluginCapability_Type interface { + isPluginCapability_Type() +} + +type PluginCapability_Service_ struct { + Service *PluginCapability_Service `protobuf:"bytes,1,opt,name=service,oneof"` +} + +func (*PluginCapability_Service_) isPluginCapability_Type() {} + +func (m *PluginCapability) GetType() isPluginCapability_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *PluginCapability) GetService() *PluginCapability_Service { + if x, ok := m.GetType().(*PluginCapability_Service_); ok { + return x.Service + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PluginCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PluginCapability_OneofMarshaler, _PluginCapability_OneofUnmarshaler, _PluginCapability_OneofSizer, []interface{}{ + (*PluginCapability_Service_)(nil), + } +} + +func _PluginCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PluginCapability) + // type + switch x := m.Type.(type) { + case *PluginCapability_Service_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Service); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PluginCapability.Type has unexpected type %T", x) + } + return nil +} + +func _PluginCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PluginCapability) + switch tag { + case 1: // type.service + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PluginCapability_Service) + err := b.DecodeMessage(msg) + m.Type = &PluginCapability_Service_{msg} + return true, err + default: + return false, nil + } +} + +func _PluginCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PluginCapability) + // type + switch x := m.Type.(type) { + case *PluginCapability_Service_: + s := proto.Size(x.Service) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type PluginCapability_Service struct { + Type PluginCapability_Service_Type `protobuf:"varint,1,opt,name=type,enum=csi.v0.PluginCapability_Service_Type" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginCapability_Service) Reset() { *m = PluginCapability_Service{} } +func (m *PluginCapability_Service) String() string { return proto.CompactTextString(m) } +func (*PluginCapability_Service) ProtoMessage() {} +func (*PluginCapability_Service) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{4, 0} +} +func (m *PluginCapability_Service) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PluginCapability_Service.Unmarshal(m, b) +} +func (m *PluginCapability_Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PluginCapability_Service.Marshal(b, m, deterministic) +} +func (dst *PluginCapability_Service) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginCapability_Service.Merge(dst, src) +} +func (m *PluginCapability_Service) XXX_Size() int { + return xxx_messageInfo_PluginCapability_Service.Size(m) +} +func (m *PluginCapability_Service) XXX_DiscardUnknown() { + xxx_messageInfo_PluginCapability_Service.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginCapability_Service proto.InternalMessageInfo + +func (m *PluginCapability_Service) GetType() PluginCapability_Service_Type { + if m != nil { + return m.Type + } + return PluginCapability_Service_UNKNOWN +} + +type ProbeRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ProbeRequest) Reset() { *m = ProbeRequest{} } +func (m *ProbeRequest) String() string { return proto.CompactTextString(m) } +func (*ProbeRequest) ProtoMessage() {} +func (*ProbeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{5} +} +func (m *ProbeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ProbeRequest.Unmarshal(m, b) +} +func (m *ProbeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ProbeRequest.Marshal(b, m, deterministic) +} +func (dst *ProbeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProbeRequest.Merge(dst, src) +} +func (m *ProbeRequest) XXX_Size() int { + return xxx_messageInfo_ProbeRequest.Size(m) +} +func (m *ProbeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ProbeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ProbeRequest proto.InternalMessageInfo + +type ProbeResponse struct { + // Readiness allows a plugin to report its initialization status back + // to the CO. Initialization for some plugins MAY be time consuming + // and it is important for a CO to distinguish between the following + // cases: + // + // 1) The plugin is in an unhealthy state and MAY need restarting. In + // this case a gRPC error code SHALL be returned. + // 2) The plugin is still initializing, but is otherwise perfectly + // healthy. In this case a successful response SHALL be returned + // with a readiness value of `false`. Calls to the plugin's + // Controller and/or Node services MAY fail due to an incomplete + // initialization state. + // 3) The plugin has finished initializing and is ready to service + // calls to its Controller and/or Node services. A successful + // response is returned with a readiness value of `true`. + // + // This field is OPTIONAL. If not present, the caller SHALL assume + // that the plugin is in a ready state and is accepting calls to its + // Controller and/or Node services (according to the plugin's reported + // capabilities). + Ready *wrappers.BoolValue `protobuf:"bytes,1,opt,name=ready" json:"ready,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ProbeResponse) Reset() { *m = ProbeResponse{} } +func (m *ProbeResponse) String() string { return proto.CompactTextString(m) } +func (*ProbeResponse) ProtoMessage() {} +func (*ProbeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{6} +} +func (m *ProbeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ProbeResponse.Unmarshal(m, b) +} +func (m *ProbeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ProbeResponse.Marshal(b, m, deterministic) +} +func (dst *ProbeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProbeResponse.Merge(dst, src) +} +func (m *ProbeResponse) XXX_Size() int { + return xxx_messageInfo_ProbeResponse.Size(m) +} +func (m *ProbeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ProbeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ProbeResponse proto.InternalMessageInfo + +func (m *ProbeResponse) GetReady() *wrappers.BoolValue { + if m != nil { + return m.Ready + } + return nil +} + +type CreateVolumeRequest struct { + // The suggested name for the storage space. This field is REQUIRED. + // It serves two purposes: + // 1) Idempotency - This name is generated by the CO to achieve + // idempotency. If `CreateVolume` fails, the volume may or may not + // be provisioned. In this case, the CO may call `CreateVolume` + // again, with the same name, to ensure the volume exists. The + // Plugin should ensure that multiple `CreateVolume` calls for the + // same name do not result in more than one piece of storage + // provisioned corresponding to that name. If a Plugin is unable to + // enforce idempotency, the CO's error recovery logic could result + // in multiple (unused) volumes being provisioned. + // 2) Suggested name - Some storage systems allow callers to specify + // an identifier by which to refer to the newly provisioned + // storage. If a storage system supports this, it can optionally + // use this name as the identifier for the new volume. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + CapacityRange *CapacityRange `protobuf:"bytes,2,opt,name=capacity_range,json=capacityRange" json:"capacity_range,omitempty"` + // The capabilities that the provisioned volume MUST have: the Plugin + // MUST provision a volume that could satisfy ALL of the + // capabilities specified in this list. The Plugin MUST assume that + // the CO MAY use the provisioned volume later with ANY of the + // capabilities specified in this list. This also enables the CO to do + // early validation: if ANY of the specified volume capabilities are + // not supported by the Plugin, the call SHALL fail. This field is + // REQUIRED. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,3,rep,name=volume_capabilities,json=volumeCapabilities" json:"volume_capabilities,omitempty"` + // Plugin specific parameters passed in as opaque key-value pairs. + // This field is OPTIONAL. The Plugin is responsible for parsing and + // validating these parameters. COs will treat these as opaque. + Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Secrets required by plugin to complete volume creation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + ControllerCreateSecrets map[string]string `protobuf:"bytes,5,rep,name=controller_create_secrets,json=controllerCreateSecrets" json:"controller_create_secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // If specified, the new volume will be pre-populated with data from + // this source. This field is OPTIONAL. + VolumeContentSource *VolumeContentSource `protobuf:"bytes,6,opt,name=volume_content_source,json=volumeContentSource" json:"volume_content_source,omitempty"` + // Specifies where (regions, zones, racks, etc.) the provisioned + // volume MUST be accessible from. + // An SP SHALL advertise the requirements for topological + // accessibility information in documentation. COs SHALL only specify + // topological accessibility information supported by the SP. + // This field is OPTIONAL. + // This field SHALL NOT be specified unless the SP has the + // ACCESSIBILITY_CONSTRAINTS plugin capability. + // If this field is not specified and the SP has the + // ACCESSIBILITY_CONSTRAINTS plugin capability, the SP MAY choose + // where the provisioned volume is accessible from. + AccessibilityRequirements *TopologyRequirement `protobuf:"bytes,7,opt,name=accessibility_requirements,json=accessibilityRequirements" json:"accessibility_requirements,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateVolumeRequest) Reset() { *m = CreateVolumeRequest{} } +func (m *CreateVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*CreateVolumeRequest) ProtoMessage() {} +func (*CreateVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{7} +} +func (m *CreateVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateVolumeRequest.Unmarshal(m, b) +} +func (m *CreateVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *CreateVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateVolumeRequest.Merge(dst, src) +} +func (m *CreateVolumeRequest) XXX_Size() int { + return xxx_messageInfo_CreateVolumeRequest.Size(m) +} +func (m *CreateVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CreateVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateVolumeRequest proto.InternalMessageInfo + +func (m *CreateVolumeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateVolumeRequest) GetCapacityRange() *CapacityRange { + if m != nil { + return m.CapacityRange + } + return nil +} + +func (m *CreateVolumeRequest) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *CreateVolumeRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *CreateVolumeRequest) GetControllerCreateSecrets() map[string]string { + if m != nil { + return m.ControllerCreateSecrets + } + return nil +} + +func (m *CreateVolumeRequest) GetVolumeContentSource() *VolumeContentSource { + if m != nil { + return m.VolumeContentSource + } + return nil +} + +func (m *CreateVolumeRequest) GetAccessibilityRequirements() *TopologyRequirement { + if m != nil { + return m.AccessibilityRequirements + } + return nil +} + +// Specifies what source the volume will be created from. One of the +// type fields MUST be specified. +type VolumeContentSource struct { + // Types that are valid to be assigned to Type: + // *VolumeContentSource_Snapshot + Type isVolumeContentSource_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeContentSource) Reset() { *m = VolumeContentSource{} } +func (m *VolumeContentSource) String() string { return proto.CompactTextString(m) } +func (*VolumeContentSource) ProtoMessage() {} +func (*VolumeContentSource) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{8} +} +func (m *VolumeContentSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeContentSource.Unmarshal(m, b) +} +func (m *VolumeContentSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeContentSource.Marshal(b, m, deterministic) +} +func (dst *VolumeContentSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeContentSource.Merge(dst, src) +} +func (m *VolumeContentSource) XXX_Size() int { + return xxx_messageInfo_VolumeContentSource.Size(m) +} +func (m *VolumeContentSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeContentSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeContentSource proto.InternalMessageInfo + +type isVolumeContentSource_Type interface { + isVolumeContentSource_Type() +} + +type VolumeContentSource_Snapshot struct { + Snapshot *VolumeContentSource_SnapshotSource `protobuf:"bytes,1,opt,name=snapshot,oneof"` +} + +func (*VolumeContentSource_Snapshot) isVolumeContentSource_Type() {} + +func (m *VolumeContentSource) GetType() isVolumeContentSource_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *VolumeContentSource) GetSnapshot() *VolumeContentSource_SnapshotSource { + if x, ok := m.GetType().(*VolumeContentSource_Snapshot); ok { + return x.Snapshot + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*VolumeContentSource) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _VolumeContentSource_OneofMarshaler, _VolumeContentSource_OneofUnmarshaler, _VolumeContentSource_OneofSizer, []interface{}{ + (*VolumeContentSource_Snapshot)(nil), + } +} + +func _VolumeContentSource_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*VolumeContentSource) + // type + switch x := m.Type.(type) { + case *VolumeContentSource_Snapshot: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Snapshot); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("VolumeContentSource.Type has unexpected type %T", x) + } + return nil +} + +func _VolumeContentSource_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*VolumeContentSource) + switch tag { + case 1: // type.snapshot + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeContentSource_SnapshotSource) + err := b.DecodeMessage(msg) + m.Type = &VolumeContentSource_Snapshot{msg} + return true, err + default: + return false, nil + } +} + +func _VolumeContentSource_OneofSizer(msg proto.Message) (n int) { + m := msg.(*VolumeContentSource) + // type + switch x := m.Type.(type) { + case *VolumeContentSource_Snapshot: + s := proto.Size(x.Snapshot) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type VolumeContentSource_SnapshotSource struct { + // Contains identity information for the existing source snapshot. + // This field is REQUIRED. Plugin is REQUIRED to support creating + // volume from snapshot if it supports the capability + // CREATE_DELETE_SNAPSHOT. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeContentSource_SnapshotSource) Reset() { *m = VolumeContentSource_SnapshotSource{} } +func (m *VolumeContentSource_SnapshotSource) String() string { return proto.CompactTextString(m) } +func (*VolumeContentSource_SnapshotSource) ProtoMessage() {} +func (*VolumeContentSource_SnapshotSource) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{8, 0} +} +func (m *VolumeContentSource_SnapshotSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeContentSource_SnapshotSource.Unmarshal(m, b) +} +func (m *VolumeContentSource_SnapshotSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeContentSource_SnapshotSource.Marshal(b, m, deterministic) +} +func (dst *VolumeContentSource_SnapshotSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeContentSource_SnapshotSource.Merge(dst, src) +} +func (m *VolumeContentSource_SnapshotSource) XXX_Size() int { + return xxx_messageInfo_VolumeContentSource_SnapshotSource.Size(m) +} +func (m *VolumeContentSource_SnapshotSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeContentSource_SnapshotSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeContentSource_SnapshotSource proto.InternalMessageInfo + +func (m *VolumeContentSource_SnapshotSource) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +type CreateVolumeResponse struct { + // Contains all attributes of the newly created volume that are + // relevant to the CO along with information required by the Plugin + // to uniquely identify the volume. This field is REQUIRED. + Volume *Volume `protobuf:"bytes,1,opt,name=volume" json:"volume,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateVolumeResponse) Reset() { *m = CreateVolumeResponse{} } +func (m *CreateVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*CreateVolumeResponse) ProtoMessage() {} +func (*CreateVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{9} +} +func (m *CreateVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateVolumeResponse.Unmarshal(m, b) +} +func (m *CreateVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *CreateVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateVolumeResponse.Merge(dst, src) +} +func (m *CreateVolumeResponse) XXX_Size() int { + return xxx_messageInfo_CreateVolumeResponse.Size(m) +} +func (m *CreateVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_CreateVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateVolumeResponse proto.InternalMessageInfo + +func (m *CreateVolumeResponse) GetVolume() *Volume { + if m != nil { + return m.Volume + } + return nil +} + +// Specify a capability of a volume. +type VolumeCapability struct { + // Specifies what API the volume will be accessed using. One of the + // following fields MUST be specified. + // + // Types that are valid to be assigned to AccessType: + // *VolumeCapability_Block + // *VolumeCapability_Mount + AccessType isVolumeCapability_AccessType `protobuf_oneof:"access_type"` + // This is a REQUIRED field. + AccessMode *VolumeCapability_AccessMode `protobuf:"bytes,3,opt,name=access_mode,json=accessMode" json:"access_mode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability) Reset() { *m = VolumeCapability{} } +func (m *VolumeCapability) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability) ProtoMessage() {} +func (*VolumeCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{10} +} +func (m *VolumeCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability.Unmarshal(m, b) +} +func (m *VolumeCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability.Merge(dst, src) +} +func (m *VolumeCapability) XXX_Size() int { + return xxx_messageInfo_VolumeCapability.Size(m) +} +func (m *VolumeCapability) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability proto.InternalMessageInfo + +type isVolumeCapability_AccessType interface { + isVolumeCapability_AccessType() +} + +type VolumeCapability_Block struct { + Block *VolumeCapability_BlockVolume `protobuf:"bytes,1,opt,name=block,oneof"` +} +type VolumeCapability_Mount struct { + Mount *VolumeCapability_MountVolume `protobuf:"bytes,2,opt,name=mount,oneof"` +} + +func (*VolumeCapability_Block) isVolumeCapability_AccessType() {} +func (*VolumeCapability_Mount) isVolumeCapability_AccessType() {} + +func (m *VolumeCapability) GetAccessType() isVolumeCapability_AccessType { + if m != nil { + return m.AccessType + } + return nil +} + +func (m *VolumeCapability) GetBlock() *VolumeCapability_BlockVolume { + if x, ok := m.GetAccessType().(*VolumeCapability_Block); ok { + return x.Block + } + return nil +} + +func (m *VolumeCapability) GetMount() *VolumeCapability_MountVolume { + if x, ok := m.GetAccessType().(*VolumeCapability_Mount); ok { + return x.Mount + } + return nil +} + +func (m *VolumeCapability) GetAccessMode() *VolumeCapability_AccessMode { + if m != nil { + return m.AccessMode + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*VolumeCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _VolumeCapability_OneofMarshaler, _VolumeCapability_OneofUnmarshaler, _VolumeCapability_OneofSizer, []interface{}{ + (*VolumeCapability_Block)(nil), + (*VolumeCapability_Mount)(nil), + } +} + +func _VolumeCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*VolumeCapability) + // access_type + switch x := m.AccessType.(type) { + case *VolumeCapability_Block: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Block); err != nil { + return err + } + case *VolumeCapability_Mount: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Mount); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("VolumeCapability.AccessType has unexpected type %T", x) + } + return nil +} + +func _VolumeCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*VolumeCapability) + switch tag { + case 1: // access_type.block + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeCapability_BlockVolume) + err := b.DecodeMessage(msg) + m.AccessType = &VolumeCapability_Block{msg} + return true, err + case 2: // access_type.mount + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeCapability_MountVolume) + err := b.DecodeMessage(msg) + m.AccessType = &VolumeCapability_Mount{msg} + return true, err + default: + return false, nil + } +} + +func _VolumeCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*VolumeCapability) + // access_type + switch x := m.AccessType.(type) { + case *VolumeCapability_Block: + s := proto.Size(x.Block) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *VolumeCapability_Mount: + s := proto.Size(x.Mount) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Indicate that the volume will be accessed via the block device API. +type VolumeCapability_BlockVolume struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability_BlockVolume) Reset() { *m = VolumeCapability_BlockVolume{} } +func (m *VolumeCapability_BlockVolume) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_BlockVolume) ProtoMessage() {} +func (*VolumeCapability_BlockVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{10, 0} +} +func (m *VolumeCapability_BlockVolume) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability_BlockVolume.Unmarshal(m, b) +} +func (m *VolumeCapability_BlockVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability_BlockVolume.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability_BlockVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability_BlockVolume.Merge(dst, src) +} +func (m *VolumeCapability_BlockVolume) XXX_Size() int { + return xxx_messageInfo_VolumeCapability_BlockVolume.Size(m) +} +func (m *VolumeCapability_BlockVolume) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability_BlockVolume.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability_BlockVolume proto.InternalMessageInfo + +// Indicate that the volume will be accessed via the filesystem API. +type VolumeCapability_MountVolume struct { + // The filesystem type. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + FsType string `protobuf:"bytes,1,opt,name=fs_type,json=fsType" json:"fs_type,omitempty"` + // The mount options that can be used for the volume. This field is + // OPTIONAL. `mount_flags` MAY contain sensitive information. + // Therefore, the CO and the Plugin MUST NOT leak this information + // to untrusted entities. The total size of this repeated field + // SHALL NOT exceed 4 KiB. + MountFlags []string `protobuf:"bytes,2,rep,name=mount_flags,json=mountFlags" json:"mount_flags,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability_MountVolume) Reset() { *m = VolumeCapability_MountVolume{} } +func (m *VolumeCapability_MountVolume) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_MountVolume) ProtoMessage() {} +func (*VolumeCapability_MountVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{10, 1} +} +func (m *VolumeCapability_MountVolume) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability_MountVolume.Unmarshal(m, b) +} +func (m *VolumeCapability_MountVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability_MountVolume.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability_MountVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability_MountVolume.Merge(dst, src) +} +func (m *VolumeCapability_MountVolume) XXX_Size() int { + return xxx_messageInfo_VolumeCapability_MountVolume.Size(m) +} +func (m *VolumeCapability_MountVolume) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability_MountVolume.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability_MountVolume proto.InternalMessageInfo + +func (m *VolumeCapability_MountVolume) GetFsType() string { + if m != nil { + return m.FsType + } + return "" +} + +func (m *VolumeCapability_MountVolume) GetMountFlags() []string { + if m != nil { + return m.MountFlags + } + return nil +} + +// Specify how a volume can be accessed. +type VolumeCapability_AccessMode struct { + // This field is REQUIRED. + Mode VolumeCapability_AccessMode_Mode `protobuf:"varint,1,opt,name=mode,enum=csi.v0.VolumeCapability_AccessMode_Mode" json:"mode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability_AccessMode) Reset() { *m = VolumeCapability_AccessMode{} } +func (m *VolumeCapability_AccessMode) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_AccessMode) ProtoMessage() {} +func (*VolumeCapability_AccessMode) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{10, 2} +} +func (m *VolumeCapability_AccessMode) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability_AccessMode.Unmarshal(m, b) +} +func (m *VolumeCapability_AccessMode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability_AccessMode.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability_AccessMode) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability_AccessMode.Merge(dst, src) +} +func (m *VolumeCapability_AccessMode) XXX_Size() int { + return xxx_messageInfo_VolumeCapability_AccessMode.Size(m) +} +func (m *VolumeCapability_AccessMode) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability_AccessMode.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability_AccessMode proto.InternalMessageInfo + +func (m *VolumeCapability_AccessMode) GetMode() VolumeCapability_AccessMode_Mode { + if m != nil { + return m.Mode + } + return VolumeCapability_AccessMode_UNKNOWN +} + +// The capacity of the storage space in bytes. To specify an exact size, +// `required_bytes` and `limit_bytes` SHALL be set to the same value. At +// least one of the these fields MUST be specified. +type CapacityRange struct { + // Volume MUST be at least this big. This field is OPTIONAL. + // A value of 0 is equal to an unspecified field value. + // The value of this field MUST NOT be negative. + RequiredBytes int64 `protobuf:"varint,1,opt,name=required_bytes,json=requiredBytes" json:"required_bytes,omitempty"` + // Volume MUST not be bigger than this. This field is OPTIONAL. + // A value of 0 is equal to an unspecified field value. + // The value of this field MUST NOT be negative. + LimitBytes int64 `protobuf:"varint,2,opt,name=limit_bytes,json=limitBytes" json:"limit_bytes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CapacityRange) Reset() { *m = CapacityRange{} } +func (m *CapacityRange) String() string { return proto.CompactTextString(m) } +func (*CapacityRange) ProtoMessage() {} +func (*CapacityRange) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{11} +} +func (m *CapacityRange) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CapacityRange.Unmarshal(m, b) +} +func (m *CapacityRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CapacityRange.Marshal(b, m, deterministic) +} +func (dst *CapacityRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_CapacityRange.Merge(dst, src) +} +func (m *CapacityRange) XXX_Size() int { + return xxx_messageInfo_CapacityRange.Size(m) +} +func (m *CapacityRange) XXX_DiscardUnknown() { + xxx_messageInfo_CapacityRange.DiscardUnknown(m) +} + +var xxx_messageInfo_CapacityRange proto.InternalMessageInfo + +func (m *CapacityRange) GetRequiredBytes() int64 { + if m != nil { + return m.RequiredBytes + } + return 0 +} + +func (m *CapacityRange) GetLimitBytes() int64 { + if m != nil { + return m.LimitBytes + } + return 0 +} + +// The information about a provisioned volume. +type Volume struct { + // The capacity of the volume in bytes. This field is OPTIONAL. If not + // set (value of 0), it indicates that the capacity of the volume is + // unknown (e.g., NFS share). + // The value of this field MUST NOT be negative. + CapacityBytes int64 `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes" json:"capacity_bytes,omitempty"` + // Contains identity information for the created volume. This field is + // REQUIRED. The identity information will be used by the CO in + // subsequent calls to refer to the provisioned volume. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // Attributes reflect static properties of a volume and MUST be passed + // to volume validation and publishing calls. + // Attributes SHALL be opaque to a CO. Attributes SHALL NOT be mutable + // and SHALL be safe for the CO to cache. Attributes SHOULD NOT + // contain sensitive information. Attributes MAY NOT uniquely identify + // a volume. A volume uniquely identified by `id` SHALL always report + // the same attributes. This field is OPTIONAL and when present MUST + // be passed to volume validation and publishing calls. + Attributes map[string]string `protobuf:"bytes,3,rep,name=attributes" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // If specified, indicates that the volume is not empty and is + // pre-populated with data from the specified source. + // This field is OPTIONAL. + ContentSource *VolumeContentSource `protobuf:"bytes,4,opt,name=content_source,json=contentSource" json:"content_source,omitempty"` + // Specifies where (regions, zones, racks, etc.) the provisioned + // volume is accessible from. + // A plugin that returns this field MUST also set the + // ACCESSIBILITY_CONSTRAINTS plugin capability. + // An SP MAY specify multiple topologies to indicate the volume is + // accessible from multiple locations. + // COs MAY use this information along with the topology information + // returned by NodeGetInfo to ensure that a given volume is accessible + // from a given node when scheduling workloads. + // This field is OPTIONAL. If it is not specified, the CO MAY assume + // the volume is equally accessible from all nodes in the cluster and + // may schedule workloads referencing the volume on any available + // node. + // + // Example 1: + // accessible_topology = {"region": "R1", "zone": "Z2"} + // Indicates a volume accessible only from the "region" "R1" and the + // "zone" "Z2". + // + // Example 2: + // accessible_topology = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3" + // in the "region" "R1". + AccessibleTopology []*Topology `protobuf:"bytes,5,rep,name=accessible_topology,json=accessibleTopology" json:"accessible_topology,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Volume) Reset() { *m = Volume{} } +func (m *Volume) String() string { return proto.CompactTextString(m) } +func (*Volume) ProtoMessage() {} +func (*Volume) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{12} +} +func (m *Volume) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Volume.Unmarshal(m, b) +} +func (m *Volume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Volume.Marshal(b, m, deterministic) +} +func (dst *Volume) XXX_Merge(src proto.Message) { + xxx_messageInfo_Volume.Merge(dst, src) +} +func (m *Volume) XXX_Size() int { + return xxx_messageInfo_Volume.Size(m) +} +func (m *Volume) XXX_DiscardUnknown() { + xxx_messageInfo_Volume.DiscardUnknown(m) +} + +var xxx_messageInfo_Volume proto.InternalMessageInfo + +func (m *Volume) GetCapacityBytes() int64 { + if m != nil { + return m.CapacityBytes + } + return 0 +} + +func (m *Volume) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Volume) GetAttributes() map[string]string { + if m != nil { + return m.Attributes + } + return nil +} + +func (m *Volume) GetContentSource() *VolumeContentSource { + if m != nil { + return m.ContentSource + } + return nil +} + +func (m *Volume) GetAccessibleTopology() []*Topology { + if m != nil { + return m.AccessibleTopology + } + return nil +} + +type TopologyRequirement struct { + // Specifies the list of topologies the provisioned volume MUST be + // accessible from. + // This field is OPTIONAL. If TopologyRequirement is specified either + // requisite or preferred or both MUST be specified. + // + // If requisite is specified, the provisioned volume MUST be + // accessible from at least one of the requisite topologies. + // + // Given + // x = number of topologies provisioned volume is accessible from + // n = number of requisite topologies + // The CO MUST ensure n >= 1. The SP MUST ensure x >= 1 + // If x==n, than the SP MUST make the provisioned volume available to + // all topologies from the list of requisite topologies. If it is + // unable to do so, the SP MUST fail the CreateVolume call. + // For example, if a volume should be accessible from a single zone, + // and requisite = + // {"region": "R1", "zone": "Z2"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and the "zone" "Z2". + // Similarly, if a volume should be accessible from two zones, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and both "zone" "Z2" and "zone" "Z3". + // + // If xn, than the SP MUST make the provisioned volume available from + // all topologies from the list of requisite topologies and MAY choose + // the remaining x-n unique topologies from the list of all possible + // topologies. If it is unable to do so, the SP MUST fail the + // CreateVolume call. + // For example, if a volume should be accessible from two zones, and + // requisite = + // {"region": "R1", "zone": "Z2"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and the "zone" "Z2" and the SP may select the second zone + // independently, e.g. "R1/Z4". + Requisite []*Topology `protobuf:"bytes,1,rep,name=requisite" json:"requisite,omitempty"` + // Specifies the list of topologies the CO would prefer the volume to + // be provisioned in. + // + // This field is OPTIONAL. If TopologyRequirement is specified either + // requisite or preferred or both MUST be specified. + // + // An SP MUST attempt to make the provisioned volume available using + // the preferred topologies in order from first to last. + // + // If requisite is specified, all topologies in preferred list MUST + // also be present in the list of requisite topologies. + // + // If the SP is unable to to make the provisioned volume available + // from any of the preferred topologies, the SP MAY choose a topology + // from the list of requisite topologies. + // If the list of requisite topologies is not specified, then the SP + // MAY choose from the list of all possible topologies. + // If the list of requisite topologies is specified and the SP is + // unable to to make the provisioned volume available from any of the + // requisite topologies it MUST fail the CreateVolume call. + // + // Example 1: + // Given a volume should be accessible from a single zone, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // preferred = + // {"region": "R1", "zone": "Z3"} + // then the the SP SHOULD first attempt to make the provisioned volume + // available from "zone" "Z3" in the "region" "R1" and fall back to + // "zone" "Z2" in the "region" "R1" if that is not possible. + // + // Example 2: + // Given a volume should be accessible from a single zone, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"}, + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z5"} + // preferred = + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z2"} + // then the the SP SHOULD first attempt to make the provisioned volume + // accessible from "zone" "Z4" in the "region" "R1" and fall back to + // "zone" "Z2" in the "region" "R1" if that is not possible. If that + // is not possible, the SP may choose between either the "zone" + // "Z3" or "Z5" in the "region" "R1". + // + // Example 3: + // Given a volume should be accessible from TWO zones (because an + // opaque parameter in CreateVolumeRequest, for example, specifies + // the volume is accessible from two zones, aka synchronously + // replicated), and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"}, + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z5"} + // preferred = + // {"region": "R1", "zone": "Z5"}, + // {"region": "R1", "zone": "Z3"} + // then the the SP SHOULD first attempt to make the provisioned volume + // accessible from the combination of the two "zones" "Z5" and "Z3" in + // the "region" "R1". If that's not possible, it should fall back to + // a combination of "Z5" and other possibilities from the list of + // requisite. If that's not possible, it should fall back to a + // combination of "Z3" and other possibilities from the list of + // requisite. If that's not possible, it should fall back to a + // combination of other possibilities from the list of requisite. + Preferred []*Topology `protobuf:"bytes,2,rep,name=preferred" json:"preferred,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TopologyRequirement) Reset() { *m = TopologyRequirement{} } +func (m *TopologyRequirement) String() string { return proto.CompactTextString(m) } +func (*TopologyRequirement) ProtoMessage() {} +func (*TopologyRequirement) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{13} +} +func (m *TopologyRequirement) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_TopologyRequirement.Unmarshal(m, b) +} +func (m *TopologyRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_TopologyRequirement.Marshal(b, m, deterministic) +} +func (dst *TopologyRequirement) XXX_Merge(src proto.Message) { + xxx_messageInfo_TopologyRequirement.Merge(dst, src) +} +func (m *TopologyRequirement) XXX_Size() int { + return xxx_messageInfo_TopologyRequirement.Size(m) +} +func (m *TopologyRequirement) XXX_DiscardUnknown() { + xxx_messageInfo_TopologyRequirement.DiscardUnknown(m) +} + +var xxx_messageInfo_TopologyRequirement proto.InternalMessageInfo + +func (m *TopologyRequirement) GetRequisite() []*Topology { + if m != nil { + return m.Requisite + } + return nil +} + +func (m *TopologyRequirement) GetPreferred() []*Topology { + if m != nil { + return m.Preferred + } + return nil +} + +// Topology is a map of topological domains to topological segments. +// A topological domain is a sub-division of a cluster, like "region", +// "zone", "rack", etc. +// A topological segment is a specific instance of a topological domain, +// like "zone3", "rack3", etc. +// For example {"com.company/zone": "Z1", "com.company/rack": "R3"} +// Valid keys have two segments: an optional prefix and name, separated +// by a slash (/), for example: "com.company.example/zone". +// The key name segment is required. The prefix is optional. +// Both the key name and the prefix MUST each be 63 characters or less, +// begin and end with an alphanumeric character ([a-z0-9A-Z]) and +// contain only dashes (-), underscores (_), dots (.), or alphanumerics +// in between, for example "zone". +// The key prefix MUST follow reverse domain name notation format +// (https://en.wikipedia.org/wiki/Reverse_domain_name_notation). +// The key prefix SHOULD include the plugin's host company name and/or +// the plugin name, to minimize the possibility of collisions with keys +// from other plugins. +// If a key prefix is specified, it MUST be identical across all +// topology keys returned by the SP (across all RPCs). +// Keys MUST be case-insensitive. Meaning the keys "Zone" and "zone" +// MUST not both exist. +// Each value (topological segment) MUST contain 1 or more strings. +// Each string MUST be 63 characters or less and begin and end with an +// alphanumeric character with '-', '_', '.', or alphanumerics in +// between. +type Topology struct { + Segments map[string]string `protobuf:"bytes,1,rep,name=segments" json:"segments,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Topology) Reset() { *m = Topology{} } +func (m *Topology) String() string { return proto.CompactTextString(m) } +func (*Topology) ProtoMessage() {} +func (*Topology) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{14} +} +func (m *Topology) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Topology.Unmarshal(m, b) +} +func (m *Topology) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Topology.Marshal(b, m, deterministic) +} +func (dst *Topology) XXX_Merge(src proto.Message) { + xxx_messageInfo_Topology.Merge(dst, src) +} +func (m *Topology) XXX_Size() int { + return xxx_messageInfo_Topology.Size(m) +} +func (m *Topology) XXX_DiscardUnknown() { + xxx_messageInfo_Topology.DiscardUnknown(m) +} + +var xxx_messageInfo_Topology proto.InternalMessageInfo + +func (m *Topology) GetSegments() map[string]string { + if m != nil { + return m.Segments + } + return nil +} + +type DeleteVolumeRequest struct { + // The ID of the volume to be deprovisioned. + // This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + // Secrets required by plugin to complete volume deletion request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + ControllerDeleteSecrets map[string]string `protobuf:"bytes,2,rep,name=controller_delete_secrets,json=controllerDeleteSecrets" json:"controller_delete_secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteVolumeRequest) Reset() { *m = DeleteVolumeRequest{} } +func (m *DeleteVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteVolumeRequest) ProtoMessage() {} +func (*DeleteVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{15} +} +func (m *DeleteVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteVolumeRequest.Unmarshal(m, b) +} +func (m *DeleteVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *DeleteVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteVolumeRequest.Merge(dst, src) +} +func (m *DeleteVolumeRequest) XXX_Size() int { + return xxx_messageInfo_DeleteVolumeRequest.Size(m) +} +func (m *DeleteVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteVolumeRequest proto.InternalMessageInfo + +func (m *DeleteVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *DeleteVolumeRequest) GetControllerDeleteSecrets() map[string]string { + if m != nil { + return m.ControllerDeleteSecrets + } + return nil +} + +type DeleteVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteVolumeResponse) Reset() { *m = DeleteVolumeResponse{} } +func (m *DeleteVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteVolumeResponse) ProtoMessage() {} +func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{16} +} +func (m *DeleteVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteVolumeResponse.Unmarshal(m, b) +} +func (m *DeleteVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *DeleteVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteVolumeResponse.Merge(dst, src) +} +func (m *DeleteVolumeResponse) XXX_Size() int { + return xxx_messageInfo_DeleteVolumeResponse.Size(m) +} +func (m *DeleteVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteVolumeResponse proto.InternalMessageInfo + +type ControllerPublishVolumeRequest struct { + // The ID of the volume to be used on a node. + // This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + // The ID of the node. This field is REQUIRED. The CO SHALL set this + // field to match the node ID returned by `NodeGetInfo`. + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` + // The capability of the volume the CO expects the volume to have. + // This is a REQUIRED field. + VolumeCapability *VolumeCapability `protobuf:"bytes,3,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` + // Whether to publish the volume in readonly mode. This field is + // REQUIRED. + Readonly bool `protobuf:"varint,4,opt,name=readonly" json:"readonly,omitempty"` + // Secrets required by plugin to complete controller publish volume + // request. This field is OPTIONAL. Refer to the + // `Secrets Requirements` section on how to use this field. + ControllerPublishSecrets map[string]string `protobuf:"bytes,5,rep,name=controller_publish_secrets,json=controllerPublishSecrets" json:"controller_publish_secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Attributes of the volume to be used on a node. This field is + // OPTIONAL and MUST match the attributes of the Volume identified + // by `volume_id`. + VolumeAttributes map[string]string `protobuf:"bytes,6,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerPublishVolumeRequest) Reset() { *m = ControllerPublishVolumeRequest{} } +func (m *ControllerPublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*ControllerPublishVolumeRequest) ProtoMessage() {} +func (*ControllerPublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{17} +} +func (m *ControllerPublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerPublishVolumeRequest.Unmarshal(m, b) +} +func (m *ControllerPublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerPublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *ControllerPublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerPublishVolumeRequest.Merge(dst, src) +} +func (m *ControllerPublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_ControllerPublishVolumeRequest.Size(m) +} +func (m *ControllerPublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerPublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerPublishVolumeRequest proto.InternalMessageInfo + +func (m *ControllerPublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *ControllerPublishVolumeRequest) GetNodeId() string { + if m != nil { + return m.NodeId + } + return "" +} + +func (m *ControllerPublishVolumeRequest) GetVolumeCapability() *VolumeCapability { + if m != nil { + return m.VolumeCapability + } + return nil +} + +func (m *ControllerPublishVolumeRequest) GetReadonly() bool { + if m != nil { + return m.Readonly + } + return false +} + +func (m *ControllerPublishVolumeRequest) GetControllerPublishSecrets() map[string]string { + if m != nil { + return m.ControllerPublishSecrets + } + return nil +} + +func (m *ControllerPublishVolumeRequest) GetVolumeAttributes() map[string]string { + if m != nil { + return m.VolumeAttributes + } + return nil +} + +type ControllerPublishVolumeResponse struct { + // The SP specific information that will be passed to the Plugin in + // the subsequent `NodeStageVolume` or `NodePublishVolume` calls + // for the given volume. + // This information is opaque to the CO. This field is OPTIONAL. + PublishInfo map[string]string `protobuf:"bytes,1,rep,name=publish_info,json=publishInfo" json:"publish_info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerPublishVolumeResponse) Reset() { *m = ControllerPublishVolumeResponse{} } +func (m *ControllerPublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*ControllerPublishVolumeResponse) ProtoMessage() {} +func (*ControllerPublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{18} +} +func (m *ControllerPublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerPublishVolumeResponse.Unmarshal(m, b) +} +func (m *ControllerPublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerPublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *ControllerPublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerPublishVolumeResponse.Merge(dst, src) +} +func (m *ControllerPublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_ControllerPublishVolumeResponse.Size(m) +} +func (m *ControllerPublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerPublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerPublishVolumeResponse proto.InternalMessageInfo + +func (m *ControllerPublishVolumeResponse) GetPublishInfo() map[string]string { + if m != nil { + return m.PublishInfo + } + return nil +} + +type ControllerUnpublishVolumeRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + // The ID of the node. This field is OPTIONAL. The CO SHOULD set this + // field to match the node ID returned by `NodeGetInfo` or leave it + // unset. If the value is set, the SP MUST unpublish the volume from + // the specified node. If the value is unset, the SP MUST unpublish + // the volume from all nodes it is published to. + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` + // Secrets required by plugin to complete controller unpublish volume + // request. This SHOULD be the same secrets passed to the + // ControllerPublishVolume call for the specified volume. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + ControllerUnpublishSecrets map[string]string `protobuf:"bytes,3,rep,name=controller_unpublish_secrets,json=controllerUnpublishSecrets" json:"controller_unpublish_secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerUnpublishVolumeRequest) Reset() { *m = ControllerUnpublishVolumeRequest{} } +func (m *ControllerUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*ControllerUnpublishVolumeRequest) ProtoMessage() {} +func (*ControllerUnpublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{19} +} +func (m *ControllerUnpublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerUnpublishVolumeRequest.Unmarshal(m, b) +} +func (m *ControllerUnpublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerUnpublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *ControllerUnpublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerUnpublishVolumeRequest.Merge(dst, src) +} +func (m *ControllerUnpublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_ControllerUnpublishVolumeRequest.Size(m) +} +func (m *ControllerUnpublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerUnpublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerUnpublishVolumeRequest proto.InternalMessageInfo + +func (m *ControllerUnpublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *ControllerUnpublishVolumeRequest) GetNodeId() string { + if m != nil { + return m.NodeId + } + return "" +} + +func (m *ControllerUnpublishVolumeRequest) GetControllerUnpublishSecrets() map[string]string { + if m != nil { + return m.ControllerUnpublishSecrets + } + return nil +} + +type ControllerUnpublishVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerUnpublishVolumeResponse) Reset() { *m = ControllerUnpublishVolumeResponse{} } +func (m *ControllerUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*ControllerUnpublishVolumeResponse) ProtoMessage() {} +func (*ControllerUnpublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{20} +} +func (m *ControllerUnpublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerUnpublishVolumeResponse.Unmarshal(m, b) +} +func (m *ControllerUnpublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerUnpublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *ControllerUnpublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerUnpublishVolumeResponse.Merge(dst, src) +} +func (m *ControllerUnpublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_ControllerUnpublishVolumeResponse.Size(m) +} +func (m *ControllerUnpublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerUnpublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerUnpublishVolumeResponse proto.InternalMessageInfo + +type ValidateVolumeCapabilitiesRequest struct { + // The ID of the volume to check. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + // The capabilities that the CO wants to check for the volume. This + // call SHALL return "supported" only if all the volume capabilities + // specified below are supported. This field is REQUIRED. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,2,rep,name=volume_capabilities,json=volumeCapabilities" json:"volume_capabilities,omitempty"` + // Attributes of the volume to check. This field is OPTIONAL and MUST + // match the attributes of the Volume identified by `volume_id`. + VolumeAttributes map[string]string `protobuf:"bytes,3,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Specifies where (regions, zones, racks, etc.) the caller believes + // the volume is accessible from. + // A caller MAY specify multiple topologies to indicate they believe + // the volume to be accessible from multiple locations. + // This field is OPTIONAL. This field SHALL NOT be set unless the + // plugin advertises the ACCESSIBILITY_CONSTRAINTS capability. + AccessibleTopology []*Topology `protobuf:"bytes,4,rep,name=accessible_topology,json=accessibleTopology" json:"accessible_topology,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValidateVolumeCapabilitiesRequest) Reset() { *m = ValidateVolumeCapabilitiesRequest{} } +func (m *ValidateVolumeCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*ValidateVolumeCapabilitiesRequest) ProtoMessage() {} +func (*ValidateVolumeCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{21} +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Unmarshal(m, b) +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *ValidateVolumeCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Merge(dst, src) +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Size(m) +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ValidateVolumeCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidateVolumeCapabilitiesRequest proto.InternalMessageInfo + +func (m *ValidateVolumeCapabilitiesRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *ValidateVolumeCapabilitiesRequest) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *ValidateVolumeCapabilitiesRequest) GetVolumeAttributes() map[string]string { + if m != nil { + return m.VolumeAttributes + } + return nil +} + +func (m *ValidateVolumeCapabilitiesRequest) GetAccessibleTopology() []*Topology { + if m != nil { + return m.AccessibleTopology + } + return nil +} + +type ValidateVolumeCapabilitiesResponse struct { + // True if the Plugin supports the specified capabilities for the + // given volume. This field is REQUIRED. + Supported bool `protobuf:"varint,1,opt,name=supported" json:"supported,omitempty"` + // Message to the CO if `supported` above is false. This field is + // OPTIONAL. + // An empty string is equal to an unspecified field value. + Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValidateVolumeCapabilitiesResponse) Reset() { *m = ValidateVolumeCapabilitiesResponse{} } +func (m *ValidateVolumeCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*ValidateVolumeCapabilitiesResponse) ProtoMessage() {} +func (*ValidateVolumeCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{22} +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Unmarshal(m, b) +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *ValidateVolumeCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Merge(dst, src) +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Size(m) +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ValidateVolumeCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidateVolumeCapabilitiesResponse proto.InternalMessageInfo + +func (m *ValidateVolumeCapabilitiesResponse) GetSupported() bool { + if m != nil { + return m.Supported + } + return false +} + +func (m *ValidateVolumeCapabilitiesResponse) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +type ListVolumesRequest struct { + // If specified (non-zero value), the Plugin MUST NOT return more + // entries than this number in the response. If the actual number of + // entries is more than this number, the Plugin MUST set `next_token` + // in the response which can be used to get the next page of entries + // in the subsequent `ListVolumes` call. This field is OPTIONAL. If + // not specified (zero value), it means there is no restriction on the + // number of entries that can be returned. + // The value of this field MUST NOT be negative. + MaxEntries int32 `protobuf:"varint,1,opt,name=max_entries,json=maxEntries" json:"max_entries,omitempty"` + // A token to specify where to start paginating. Set this field to + // `next_token` returned by a previous `ListVolumes` call to get the + // next page of entries. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + StartingToken string `protobuf:"bytes,2,opt,name=starting_token,json=startingToken" json:"starting_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListVolumesRequest) Reset() { *m = ListVolumesRequest{} } +func (m *ListVolumesRequest) String() string { return proto.CompactTextString(m) } +func (*ListVolumesRequest) ProtoMessage() {} +func (*ListVolumesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{23} +} +func (m *ListVolumesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListVolumesRequest.Unmarshal(m, b) +} +func (m *ListVolumesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListVolumesRequest.Marshal(b, m, deterministic) +} +func (dst *ListVolumesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListVolumesRequest.Merge(dst, src) +} +func (m *ListVolumesRequest) XXX_Size() int { + return xxx_messageInfo_ListVolumesRequest.Size(m) +} +func (m *ListVolumesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListVolumesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListVolumesRequest proto.InternalMessageInfo + +func (m *ListVolumesRequest) GetMaxEntries() int32 { + if m != nil { + return m.MaxEntries + } + return 0 +} + +func (m *ListVolumesRequest) GetStartingToken() string { + if m != nil { + return m.StartingToken + } + return "" +} + +type ListVolumesResponse struct { + Entries []*ListVolumesResponse_Entry `protobuf:"bytes,1,rep,name=entries" json:"entries,omitempty"` + // This token allows you to get the next page of entries for + // `ListVolumes` request. If the number of entries is larger than + // `max_entries`, use the `next_token` as a value for the + // `starting_token` field in the next `ListVolumes` request. This + // field is OPTIONAL. + // An empty string is equal to an unspecified field value. + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken" json:"next_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListVolumesResponse) Reset() { *m = ListVolumesResponse{} } +func (m *ListVolumesResponse) String() string { return proto.CompactTextString(m) } +func (*ListVolumesResponse) ProtoMessage() {} +func (*ListVolumesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{24} +} +func (m *ListVolumesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListVolumesResponse.Unmarshal(m, b) +} +func (m *ListVolumesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListVolumesResponse.Marshal(b, m, deterministic) +} +func (dst *ListVolumesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListVolumesResponse.Merge(dst, src) +} +func (m *ListVolumesResponse) XXX_Size() int { + return xxx_messageInfo_ListVolumesResponse.Size(m) +} +func (m *ListVolumesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ListVolumesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ListVolumesResponse proto.InternalMessageInfo + +func (m *ListVolumesResponse) GetEntries() []*ListVolumesResponse_Entry { + if m != nil { + return m.Entries + } + return nil +} + +func (m *ListVolumesResponse) GetNextToken() string { + if m != nil { + return m.NextToken + } + return "" +} + +type ListVolumesResponse_Entry struct { + Volume *Volume `protobuf:"bytes,1,opt,name=volume" json:"volume,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListVolumesResponse_Entry) Reset() { *m = ListVolumesResponse_Entry{} } +func (m *ListVolumesResponse_Entry) String() string { return proto.CompactTextString(m) } +func (*ListVolumesResponse_Entry) ProtoMessage() {} +func (*ListVolumesResponse_Entry) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{24, 0} +} +func (m *ListVolumesResponse_Entry) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListVolumesResponse_Entry.Unmarshal(m, b) +} +func (m *ListVolumesResponse_Entry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListVolumesResponse_Entry.Marshal(b, m, deterministic) +} +func (dst *ListVolumesResponse_Entry) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListVolumesResponse_Entry.Merge(dst, src) +} +func (m *ListVolumesResponse_Entry) XXX_Size() int { + return xxx_messageInfo_ListVolumesResponse_Entry.Size(m) +} +func (m *ListVolumesResponse_Entry) XXX_DiscardUnknown() { + xxx_messageInfo_ListVolumesResponse_Entry.DiscardUnknown(m) +} + +var xxx_messageInfo_ListVolumesResponse_Entry proto.InternalMessageInfo + +func (m *ListVolumesResponse_Entry) GetVolume() *Volume { + if m != nil { + return m.Volume + } + return nil +} + +type GetCapacityRequest struct { + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes that satisfy ALL of the + // specified `volume_capabilities`. These are the same + // `volume_capabilities` the CO will use in `CreateVolumeRequest`. + // This field is OPTIONAL. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,1,rep,name=volume_capabilities,json=volumeCapabilities" json:"volume_capabilities,omitempty"` + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes with the given Plugin + // specific `parameters`. These are the same `parameters` the CO will + // use in `CreateVolumeRequest`. This field is OPTIONAL. + Parameters map[string]string `protobuf:"bytes,2,rep,name=parameters" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes that in the specified + // `accessible_topology`. This is the same as the + // `accessible_topology` the CO returns in a `CreateVolumeResponse`. + // This field is OPTIONAL. This field SHALL NOT be set unless the + // plugin advertises the ACCESSIBILITY_CONSTRAINTS capability. + AccessibleTopology *Topology `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology" json:"accessible_topology,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetCapacityRequest) Reset() { *m = GetCapacityRequest{} } +func (m *GetCapacityRequest) String() string { return proto.CompactTextString(m) } +func (*GetCapacityRequest) ProtoMessage() {} +func (*GetCapacityRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{25} +} +func (m *GetCapacityRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetCapacityRequest.Unmarshal(m, b) +} +func (m *GetCapacityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetCapacityRequest.Marshal(b, m, deterministic) +} +func (dst *GetCapacityRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetCapacityRequest.Merge(dst, src) +} +func (m *GetCapacityRequest) XXX_Size() int { + return xxx_messageInfo_GetCapacityRequest.Size(m) +} +func (m *GetCapacityRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetCapacityRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetCapacityRequest proto.InternalMessageInfo + +func (m *GetCapacityRequest) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *GetCapacityRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *GetCapacityRequest) GetAccessibleTopology() *Topology { + if m != nil { + return m.AccessibleTopology + } + return nil +} + +type GetCapacityResponse struct { + // The available capacity, in bytes, of the storage that can be used + // to provision volumes. If `volume_capabilities` or `parameters` is + // specified in the request, the Plugin SHALL take those into + // consideration when calculating the available capacity of the + // storage. This field is REQUIRED. + // The value of this field MUST NOT be negative. + AvailableCapacity int64 `protobuf:"varint,1,opt,name=available_capacity,json=availableCapacity" json:"available_capacity,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetCapacityResponse) Reset() { *m = GetCapacityResponse{} } +func (m *GetCapacityResponse) String() string { return proto.CompactTextString(m) } +func (*GetCapacityResponse) ProtoMessage() {} +func (*GetCapacityResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{26} +} +func (m *GetCapacityResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetCapacityResponse.Unmarshal(m, b) +} +func (m *GetCapacityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetCapacityResponse.Marshal(b, m, deterministic) +} +func (dst *GetCapacityResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetCapacityResponse.Merge(dst, src) +} +func (m *GetCapacityResponse) XXX_Size() int { + return xxx_messageInfo_GetCapacityResponse.Size(m) +} +func (m *GetCapacityResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetCapacityResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetCapacityResponse proto.InternalMessageInfo + +func (m *GetCapacityResponse) GetAvailableCapacity() int64 { + if m != nil { + return m.AvailableCapacity + } + return 0 +} + +type ControllerGetCapabilitiesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerGetCapabilitiesRequest) Reset() { *m = ControllerGetCapabilitiesRequest{} } +func (m *ControllerGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*ControllerGetCapabilitiesRequest) ProtoMessage() {} +func (*ControllerGetCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{27} +} +func (m *ControllerGetCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerGetCapabilitiesRequest.Unmarshal(m, b) +} +func (m *ControllerGetCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerGetCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *ControllerGetCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerGetCapabilitiesRequest.Merge(dst, src) +} +func (m *ControllerGetCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_ControllerGetCapabilitiesRequest.Size(m) +} +func (m *ControllerGetCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerGetCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerGetCapabilitiesRequest proto.InternalMessageInfo + +type ControllerGetCapabilitiesResponse struct { + // All the capabilities that the controller service supports. This + // field is OPTIONAL. + Capabilities []*ControllerServiceCapability `protobuf:"bytes,2,rep,name=capabilities" json:"capabilities,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerGetCapabilitiesResponse) Reset() { *m = ControllerGetCapabilitiesResponse{} } +func (m *ControllerGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*ControllerGetCapabilitiesResponse) ProtoMessage() {} +func (*ControllerGetCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{28} +} +func (m *ControllerGetCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerGetCapabilitiesResponse.Unmarshal(m, b) +} +func (m *ControllerGetCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerGetCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *ControllerGetCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerGetCapabilitiesResponse.Merge(dst, src) +} +func (m *ControllerGetCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_ControllerGetCapabilitiesResponse.Size(m) +} +func (m *ControllerGetCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerGetCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerGetCapabilitiesResponse proto.InternalMessageInfo + +func (m *ControllerGetCapabilitiesResponse) GetCapabilities() []*ControllerServiceCapability { + if m != nil { + return m.Capabilities + } + return nil +} + +// Specifies a capability of the controller service. +type ControllerServiceCapability struct { + // Types that are valid to be assigned to Type: + // *ControllerServiceCapability_Rpc + Type isControllerServiceCapability_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerServiceCapability) Reset() { *m = ControllerServiceCapability{} } +func (m *ControllerServiceCapability) String() string { return proto.CompactTextString(m) } +func (*ControllerServiceCapability) ProtoMessage() {} +func (*ControllerServiceCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{29} +} +func (m *ControllerServiceCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerServiceCapability.Unmarshal(m, b) +} +func (m *ControllerServiceCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerServiceCapability.Marshal(b, m, deterministic) +} +func (dst *ControllerServiceCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerServiceCapability.Merge(dst, src) +} +func (m *ControllerServiceCapability) XXX_Size() int { + return xxx_messageInfo_ControllerServiceCapability.Size(m) +} +func (m *ControllerServiceCapability) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerServiceCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerServiceCapability proto.InternalMessageInfo + +type isControllerServiceCapability_Type interface { + isControllerServiceCapability_Type() +} + +type ControllerServiceCapability_Rpc struct { + Rpc *ControllerServiceCapability_RPC `protobuf:"bytes,1,opt,name=rpc,oneof"` +} + +func (*ControllerServiceCapability_Rpc) isControllerServiceCapability_Type() {} + +func (m *ControllerServiceCapability) GetType() isControllerServiceCapability_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *ControllerServiceCapability) GetRpc() *ControllerServiceCapability_RPC { + if x, ok := m.GetType().(*ControllerServiceCapability_Rpc); ok { + return x.Rpc + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ControllerServiceCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ControllerServiceCapability_OneofMarshaler, _ControllerServiceCapability_OneofUnmarshaler, _ControllerServiceCapability_OneofSizer, []interface{}{ + (*ControllerServiceCapability_Rpc)(nil), + } +} + +func _ControllerServiceCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ControllerServiceCapability) + // type + switch x := m.Type.(type) { + case *ControllerServiceCapability_Rpc: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Rpc); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ControllerServiceCapability.Type has unexpected type %T", x) + } + return nil +} + +func _ControllerServiceCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ControllerServiceCapability) + switch tag { + case 1: // type.rpc + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ControllerServiceCapability_RPC) + err := b.DecodeMessage(msg) + m.Type = &ControllerServiceCapability_Rpc{msg} + return true, err + default: + return false, nil + } +} + +func _ControllerServiceCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ControllerServiceCapability) + // type + switch x := m.Type.(type) { + case *ControllerServiceCapability_Rpc: + s := proto.Size(x.Rpc) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type ControllerServiceCapability_RPC struct { + Type ControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,enum=csi.v0.ControllerServiceCapability_RPC_Type" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerServiceCapability_RPC) Reset() { *m = ControllerServiceCapability_RPC{} } +func (m *ControllerServiceCapability_RPC) String() string { return proto.CompactTextString(m) } +func (*ControllerServiceCapability_RPC) ProtoMessage() {} +func (*ControllerServiceCapability_RPC) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{29, 0} +} +func (m *ControllerServiceCapability_RPC) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerServiceCapability_RPC.Unmarshal(m, b) +} +func (m *ControllerServiceCapability_RPC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerServiceCapability_RPC.Marshal(b, m, deterministic) +} +func (dst *ControllerServiceCapability_RPC) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerServiceCapability_RPC.Merge(dst, src) +} +func (m *ControllerServiceCapability_RPC) XXX_Size() int { + return xxx_messageInfo_ControllerServiceCapability_RPC.Size(m) +} +func (m *ControllerServiceCapability_RPC) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerServiceCapability_RPC.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerServiceCapability_RPC proto.InternalMessageInfo + +func (m *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_RPC_Type { + if m != nil { + return m.Type + } + return ControllerServiceCapability_RPC_UNKNOWN +} + +type CreateSnapshotRequest struct { + // The ID of the source volume to be snapshotted. + // This field is REQUIRED. + SourceVolumeId string `protobuf:"bytes,1,opt,name=source_volume_id,json=sourceVolumeId" json:"source_volume_id,omitempty"` + // The suggested name for the snapshot. This field is REQUIRED for + // idempotency. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + // Secrets required by plugin to complete snapshot creation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + CreateSnapshotSecrets map[string]string `protobuf:"bytes,3,rep,name=create_snapshot_secrets,json=createSnapshotSecrets" json:"create_snapshot_secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Plugin specific parameters passed in as opaque key-value pairs. + // This field is OPTIONAL. The Plugin is responsible for parsing and + // validating these parameters. COs will treat these as opaque. + // Use cases for opaque parameters: + // - Specify a policy to automatically clean up the snapshot. + // - Specify an expiration date for the snapshot. + // - Specify whether the snapshot is readonly or read/write. + // - Specify if the snapshot should be replicated to some place. + // - Specify primary or secondary for replication systems that + // support snapshotting only on primary. + Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateSnapshotRequest) Reset() { *m = CreateSnapshotRequest{} } +func (m *CreateSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*CreateSnapshotRequest) ProtoMessage() {} +func (*CreateSnapshotRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{30} +} +func (m *CreateSnapshotRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateSnapshotRequest.Unmarshal(m, b) +} +func (m *CreateSnapshotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateSnapshotRequest.Marshal(b, m, deterministic) +} +func (dst *CreateSnapshotRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateSnapshotRequest.Merge(dst, src) +} +func (m *CreateSnapshotRequest) XXX_Size() int { + return xxx_messageInfo_CreateSnapshotRequest.Size(m) +} +func (m *CreateSnapshotRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CreateSnapshotRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateSnapshotRequest proto.InternalMessageInfo + +func (m *CreateSnapshotRequest) GetSourceVolumeId() string { + if m != nil { + return m.SourceVolumeId + } + return "" +} + +func (m *CreateSnapshotRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateSnapshotRequest) GetCreateSnapshotSecrets() map[string]string { + if m != nil { + return m.CreateSnapshotSecrets + } + return nil +} + +func (m *CreateSnapshotRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +type CreateSnapshotResponse struct { + // Contains all attributes of the newly created snapshot that are + // relevant to the CO along with information required by the Plugin + // to uniquely identify the snapshot. This field is REQUIRED. + Snapshot *Snapshot `protobuf:"bytes,1,opt,name=snapshot" json:"snapshot,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateSnapshotResponse) Reset() { *m = CreateSnapshotResponse{} } +func (m *CreateSnapshotResponse) String() string { return proto.CompactTextString(m) } +func (*CreateSnapshotResponse) ProtoMessage() {} +func (*CreateSnapshotResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{31} +} +func (m *CreateSnapshotResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateSnapshotResponse.Unmarshal(m, b) +} +func (m *CreateSnapshotResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateSnapshotResponse.Marshal(b, m, deterministic) +} +func (dst *CreateSnapshotResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateSnapshotResponse.Merge(dst, src) +} +func (m *CreateSnapshotResponse) XXX_Size() int { + return xxx_messageInfo_CreateSnapshotResponse.Size(m) +} +func (m *CreateSnapshotResponse) XXX_DiscardUnknown() { + xxx_messageInfo_CreateSnapshotResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateSnapshotResponse proto.InternalMessageInfo + +func (m *CreateSnapshotResponse) GetSnapshot() *Snapshot { + if m != nil { + return m.Snapshot + } + return nil +} + +// The information about a provisioned snapshot. +type Snapshot struct { + // This is the complete size of the snapshot in bytes. The purpose of + // this field is to give CO guidance on how much space is needed to + // create a volume from this snapshot. The size of the volume MUST NOT + // be less than the size of the source snapshot. This field is + // OPTIONAL. If this field is not set, it indicates that this size is + // unknown. The value of this field MUST NOT be negative and a size of + // zero means it is unspecified. + SizeBytes int64 `protobuf:"varint,1,opt,name=size_bytes,json=sizeBytes" json:"size_bytes,omitempty"` + // Uniquely identifies a snapshot and is generated by the plugin. It + // will not change over time. This field is REQUIRED. The identity + // information will be used by the CO in subsequent calls to refer to + // the provisioned snapshot. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // Identity information for the source volume. Note that creating a + // snapshot from a snapshot is not supported here so the source has to + // be a volume. This field is REQUIRED. + SourceVolumeId string `protobuf:"bytes,3,opt,name=source_volume_id,json=sourceVolumeId" json:"source_volume_id,omitempty"` + // Timestamp when the point-in-time snapshot is taken on the storage + // system. The format of this field should be a Unix nanoseconds time + // encoded as an int64. On Unix, the command `date +%s%N` returns the + // current time in nanoseconds since 1970-01-01 00:00:00 UTC. This + // field is REQUIRED. + CreatedAt int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt" json:"created_at,omitempty"` + // The status of a snapshot. + Status *SnapshotStatus `protobuf:"bytes,5,opt,name=status" json:"status,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Snapshot) Reset() { *m = Snapshot{} } +func (m *Snapshot) String() string { return proto.CompactTextString(m) } +func (*Snapshot) ProtoMessage() {} +func (*Snapshot) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{32} +} +func (m *Snapshot) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Snapshot.Unmarshal(m, b) +} +func (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Snapshot.Marshal(b, m, deterministic) +} +func (dst *Snapshot) XXX_Merge(src proto.Message) { + xxx_messageInfo_Snapshot.Merge(dst, src) +} +func (m *Snapshot) XXX_Size() int { + return xxx_messageInfo_Snapshot.Size(m) +} +func (m *Snapshot) XXX_DiscardUnknown() { + xxx_messageInfo_Snapshot.DiscardUnknown(m) +} + +var xxx_messageInfo_Snapshot proto.InternalMessageInfo + +func (m *Snapshot) GetSizeBytes() int64 { + if m != nil { + return m.SizeBytes + } + return 0 +} + +func (m *Snapshot) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Snapshot) GetSourceVolumeId() string { + if m != nil { + return m.SourceVolumeId + } + return "" +} + +func (m *Snapshot) GetCreatedAt() int64 { + if m != nil { + return m.CreatedAt + } + return 0 +} + +func (m *Snapshot) GetStatus() *SnapshotStatus { + if m != nil { + return m.Status + } + return nil +} + +// The status of a snapshot. +type SnapshotStatus struct { + // This field is REQUIRED. + Type SnapshotStatus_Type `protobuf:"varint,1,opt,name=type,enum=csi.v0.SnapshotStatus_Type" json:"type,omitempty"` + // Additional information to describe why a snapshot ended up in the + // `ERROR_UPLOADING` status. This field is OPTIONAL. + Details string `protobuf:"bytes,2,opt,name=details" json:"details,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SnapshotStatus) Reset() { *m = SnapshotStatus{} } +func (m *SnapshotStatus) String() string { return proto.CompactTextString(m) } +func (*SnapshotStatus) ProtoMessage() {} +func (*SnapshotStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{33} +} +func (m *SnapshotStatus) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SnapshotStatus.Unmarshal(m, b) +} +func (m *SnapshotStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SnapshotStatus.Marshal(b, m, deterministic) +} +func (dst *SnapshotStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_SnapshotStatus.Merge(dst, src) +} +func (m *SnapshotStatus) XXX_Size() int { + return xxx_messageInfo_SnapshotStatus.Size(m) +} +func (m *SnapshotStatus) XXX_DiscardUnknown() { + xxx_messageInfo_SnapshotStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_SnapshotStatus proto.InternalMessageInfo + +func (m *SnapshotStatus) GetType() SnapshotStatus_Type { + if m != nil { + return m.Type + } + return SnapshotStatus_UNKNOWN +} + +func (m *SnapshotStatus) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +type DeleteSnapshotRequest struct { + // The ID of the snapshot to be deleted. + // This field is REQUIRED. + SnapshotId string `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId" json:"snapshot_id,omitempty"` + // Secrets required by plugin to complete snapshot deletion request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + DeleteSnapshotSecrets map[string]string `protobuf:"bytes,2,rep,name=delete_snapshot_secrets,json=deleteSnapshotSecrets" json:"delete_snapshot_secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteSnapshotRequest) Reset() { *m = DeleteSnapshotRequest{} } +func (m *DeleteSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSnapshotRequest) ProtoMessage() {} +func (*DeleteSnapshotRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{34} +} +func (m *DeleteSnapshotRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteSnapshotRequest.Unmarshal(m, b) +} +func (m *DeleteSnapshotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteSnapshotRequest.Marshal(b, m, deterministic) +} +func (dst *DeleteSnapshotRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteSnapshotRequest.Merge(dst, src) +} +func (m *DeleteSnapshotRequest) XXX_Size() int { + return xxx_messageInfo_DeleteSnapshotRequest.Size(m) +} +func (m *DeleteSnapshotRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteSnapshotRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteSnapshotRequest proto.InternalMessageInfo + +func (m *DeleteSnapshotRequest) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +func (m *DeleteSnapshotRequest) GetDeleteSnapshotSecrets() map[string]string { + if m != nil { + return m.DeleteSnapshotSecrets + } + return nil +} + +type DeleteSnapshotResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteSnapshotResponse) Reset() { *m = DeleteSnapshotResponse{} } +func (m *DeleteSnapshotResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteSnapshotResponse) ProtoMessage() {} +func (*DeleteSnapshotResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{35} +} +func (m *DeleteSnapshotResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteSnapshotResponse.Unmarshal(m, b) +} +func (m *DeleteSnapshotResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteSnapshotResponse.Marshal(b, m, deterministic) +} +func (dst *DeleteSnapshotResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteSnapshotResponse.Merge(dst, src) +} +func (m *DeleteSnapshotResponse) XXX_Size() int { + return xxx_messageInfo_DeleteSnapshotResponse.Size(m) +} +func (m *DeleteSnapshotResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteSnapshotResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteSnapshotResponse proto.InternalMessageInfo + +// List all snapshots on the storage system regardless of how they were +// created. +type ListSnapshotsRequest struct { + // If specified (non-zero value), the Plugin MUST NOT return more + // entries than this number in the response. If the actual number of + // entries is more than this number, the Plugin MUST set `next_token` + // in the response which can be used to get the next page of entries + // in the subsequent `ListSnapshots` call. This field is OPTIONAL. If + // not specified (zero value), it means there is no restriction on the + // number of entries that can be returned. + // The value of this field MUST NOT be negative. + MaxEntries int32 `protobuf:"varint,1,opt,name=max_entries,json=maxEntries" json:"max_entries,omitempty"` + // A token to specify where to start paginating. Set this field to + // `next_token` returned by a previous `ListSnapshots` call to get the + // next page of entries. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + StartingToken string `protobuf:"bytes,2,opt,name=starting_token,json=startingToken" json:"starting_token,omitempty"` + // Identity information for the source volume. This field is OPTIONAL. + // It can be used to list snapshots by volume. + SourceVolumeId string `protobuf:"bytes,3,opt,name=source_volume_id,json=sourceVolumeId" json:"source_volume_id,omitempty"` + // Identity information for a specific snapshot. This field is + // OPTIONAL. It can be used to list only a specific snapshot. + // ListSnapshots will return with current snapshot information + // and will not block if the snapshot is being uploaded. + SnapshotId string `protobuf:"bytes,4,opt,name=snapshot_id,json=snapshotId" json:"snapshot_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSnapshotsRequest) Reset() { *m = ListSnapshotsRequest{} } +func (m *ListSnapshotsRequest) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsRequest) ProtoMessage() {} +func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{36} +} +func (m *ListSnapshotsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSnapshotsRequest.Unmarshal(m, b) +} +func (m *ListSnapshotsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSnapshotsRequest.Marshal(b, m, deterministic) +} +func (dst *ListSnapshotsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSnapshotsRequest.Merge(dst, src) +} +func (m *ListSnapshotsRequest) XXX_Size() int { + return xxx_messageInfo_ListSnapshotsRequest.Size(m) +} +func (m *ListSnapshotsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListSnapshotsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSnapshotsRequest proto.InternalMessageInfo + +func (m *ListSnapshotsRequest) GetMaxEntries() int32 { + if m != nil { + return m.MaxEntries + } + return 0 +} + +func (m *ListSnapshotsRequest) GetStartingToken() string { + if m != nil { + return m.StartingToken + } + return "" +} + +func (m *ListSnapshotsRequest) GetSourceVolumeId() string { + if m != nil { + return m.SourceVolumeId + } + return "" +} + +func (m *ListSnapshotsRequest) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +type ListSnapshotsResponse struct { + Entries []*ListSnapshotsResponse_Entry `protobuf:"bytes,1,rep,name=entries" json:"entries,omitempty"` + // This token allows you to get the next page of entries for + // `ListSnapshots` request. If the number of entries is larger than + // `max_entries`, use the `next_token` as a value for the + // `starting_token` field in the next `ListSnapshots` request. This + // field is OPTIONAL. + // An empty string is equal to an unspecified field value. + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken" json:"next_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSnapshotsResponse) Reset() { *m = ListSnapshotsResponse{} } +func (m *ListSnapshotsResponse) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsResponse) ProtoMessage() {} +func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{37} +} +func (m *ListSnapshotsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSnapshotsResponse.Unmarshal(m, b) +} +func (m *ListSnapshotsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSnapshotsResponse.Marshal(b, m, deterministic) +} +func (dst *ListSnapshotsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSnapshotsResponse.Merge(dst, src) +} +func (m *ListSnapshotsResponse) XXX_Size() int { + return xxx_messageInfo_ListSnapshotsResponse.Size(m) +} +func (m *ListSnapshotsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ListSnapshotsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSnapshotsResponse proto.InternalMessageInfo + +func (m *ListSnapshotsResponse) GetEntries() []*ListSnapshotsResponse_Entry { + if m != nil { + return m.Entries + } + return nil +} + +func (m *ListSnapshotsResponse) GetNextToken() string { + if m != nil { + return m.NextToken + } + return "" +} + +type ListSnapshotsResponse_Entry struct { + Snapshot *Snapshot `protobuf:"bytes,1,opt,name=snapshot" json:"snapshot,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSnapshotsResponse_Entry) Reset() { *m = ListSnapshotsResponse_Entry{} } +func (m *ListSnapshotsResponse_Entry) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsResponse_Entry) ProtoMessage() {} +func (*ListSnapshotsResponse_Entry) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{37, 0} +} +func (m *ListSnapshotsResponse_Entry) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSnapshotsResponse_Entry.Unmarshal(m, b) +} +func (m *ListSnapshotsResponse_Entry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSnapshotsResponse_Entry.Marshal(b, m, deterministic) +} +func (dst *ListSnapshotsResponse_Entry) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSnapshotsResponse_Entry.Merge(dst, src) +} +func (m *ListSnapshotsResponse_Entry) XXX_Size() int { + return xxx_messageInfo_ListSnapshotsResponse_Entry.Size(m) +} +func (m *ListSnapshotsResponse_Entry) XXX_DiscardUnknown() { + xxx_messageInfo_ListSnapshotsResponse_Entry.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSnapshotsResponse_Entry proto.InternalMessageInfo + +func (m *ListSnapshotsResponse_Entry) GetSnapshot() *Snapshot { + if m != nil { + return m.Snapshot + } + return nil +} + +type NodeStageVolumeRequest struct { + // The ID of the volume to publish. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + // The CO SHALL set this field to the value returned by + // `ControllerPublishVolume` if the corresponding Controller Plugin + // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be + // left unset if the corresponding Controller Plugin does not have + // this capability. This is an OPTIONAL field. + PublishInfo map[string]string `protobuf:"bytes,2,rep,name=publish_info,json=publishInfo" json:"publish_info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The path to which the volume will be published. It MUST be an + // absolute path in the root filesystem of the process serving this + // request. The CO SHALL ensure that there is only one + // staging_target_path per volume. + // This is a REQUIRED field. + StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath" json:"staging_target_path,omitempty"` + // The capability of the volume the CO expects the volume to have. + // This is a REQUIRED field. + VolumeCapability *VolumeCapability `protobuf:"bytes,4,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` + // Secrets required by plugin to complete node stage volume request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + NodeStageSecrets map[string]string `protobuf:"bytes,5,rep,name=node_stage_secrets,json=nodeStageSecrets" json:"node_stage_secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Attributes of the volume to publish. This field is OPTIONAL and + // MUST match the attributes of the `Volume` identified by + // `volume_id`. + VolumeAttributes map[string]string `protobuf:"bytes,6,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeStageVolumeRequest) Reset() { *m = NodeStageVolumeRequest{} } +func (m *NodeStageVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodeStageVolumeRequest) ProtoMessage() {} +func (*NodeStageVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{38} +} +func (m *NodeStageVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeStageVolumeRequest.Unmarshal(m, b) +} +func (m *NodeStageVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeStageVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodeStageVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeStageVolumeRequest.Merge(dst, src) +} +func (m *NodeStageVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodeStageVolumeRequest.Size(m) +} +func (m *NodeStageVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeStageVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeStageVolumeRequest proto.InternalMessageInfo + +func (m *NodeStageVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeStageVolumeRequest) GetPublishInfo() map[string]string { + if m != nil { + return m.PublishInfo + } + return nil +} + +func (m *NodeStageVolumeRequest) GetStagingTargetPath() string { + if m != nil { + return m.StagingTargetPath + } + return "" +} + +func (m *NodeStageVolumeRequest) GetVolumeCapability() *VolumeCapability { + if m != nil { + return m.VolumeCapability + } + return nil +} + +func (m *NodeStageVolumeRequest) GetNodeStageSecrets() map[string]string { + if m != nil { + return m.NodeStageSecrets + } + return nil +} + +func (m *NodeStageVolumeRequest) GetVolumeAttributes() map[string]string { + if m != nil { + return m.VolumeAttributes + } + return nil +} + +type NodeStageVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeStageVolumeResponse) Reset() { *m = NodeStageVolumeResponse{} } +func (m *NodeStageVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodeStageVolumeResponse) ProtoMessage() {} +func (*NodeStageVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{39} +} +func (m *NodeStageVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeStageVolumeResponse.Unmarshal(m, b) +} +func (m *NodeStageVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeStageVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodeStageVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeStageVolumeResponse.Merge(dst, src) +} +func (m *NodeStageVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodeStageVolumeResponse.Size(m) +} +func (m *NodeStageVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeStageVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeStageVolumeResponse proto.InternalMessageInfo + +type NodeUnstageVolumeRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + // The path at which the volume was published. It MUST be an absolute + // path in the root filesystem of the process serving this request. + // This is a REQUIRED field. + StagingTargetPath string `protobuf:"bytes,2,opt,name=staging_target_path,json=stagingTargetPath" json:"staging_target_path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnstageVolumeRequest) Reset() { *m = NodeUnstageVolumeRequest{} } +func (m *NodeUnstageVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodeUnstageVolumeRequest) ProtoMessage() {} +func (*NodeUnstageVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{40} +} +func (m *NodeUnstageVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnstageVolumeRequest.Unmarshal(m, b) +} +func (m *NodeUnstageVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnstageVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodeUnstageVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnstageVolumeRequest.Merge(dst, src) +} +func (m *NodeUnstageVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodeUnstageVolumeRequest.Size(m) +} +func (m *NodeUnstageVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnstageVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnstageVolumeRequest proto.InternalMessageInfo + +func (m *NodeUnstageVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeUnstageVolumeRequest) GetStagingTargetPath() string { + if m != nil { + return m.StagingTargetPath + } + return "" +} + +type NodeUnstageVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnstageVolumeResponse) Reset() { *m = NodeUnstageVolumeResponse{} } +func (m *NodeUnstageVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodeUnstageVolumeResponse) ProtoMessage() {} +func (*NodeUnstageVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{41} +} +func (m *NodeUnstageVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnstageVolumeResponse.Unmarshal(m, b) +} +func (m *NodeUnstageVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnstageVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodeUnstageVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnstageVolumeResponse.Merge(dst, src) +} +func (m *NodeUnstageVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodeUnstageVolumeResponse.Size(m) +} +func (m *NodeUnstageVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnstageVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnstageVolumeResponse proto.InternalMessageInfo + +type NodePublishVolumeRequest struct { + // The ID of the volume to publish. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + // The CO SHALL set this field to the value returned by + // `ControllerPublishVolume` if the corresponding Controller Plugin + // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be + // left unset if the corresponding Controller Plugin does not have + // this capability. This is an OPTIONAL field. + PublishInfo map[string]string `protobuf:"bytes,2,rep,name=publish_info,json=publishInfo" json:"publish_info,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The path to which the device was mounted by `NodeStageVolume`. + // It MUST be an absolute path in the root filesystem of the process + // serving this request. + // It MUST be set if the Node Plugin implements the + // `STAGE_UNSTAGE_VOLUME` node capability. + // This is an OPTIONAL field. + StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath" json:"staging_target_path,omitempty"` + // The path to which the volume will be published. It MUST be an + // absolute path in the root filesystem of the process serving this + // request. The CO SHALL ensure uniqueness of target_path per volume. + // The CO SHALL ensure that the path exists, and that the process + // serving the request has `read` and `write` permissions to the path. + // This is a REQUIRED field. + TargetPath string `protobuf:"bytes,4,opt,name=target_path,json=targetPath" json:"target_path,omitempty"` + // The capability of the volume the CO expects the volume to have. + // This is a REQUIRED field. + VolumeCapability *VolumeCapability `protobuf:"bytes,5,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` + // Whether to publish the volume in readonly mode. This field is + // REQUIRED. + Readonly bool `protobuf:"varint,6,opt,name=readonly" json:"readonly,omitempty"` + // Secrets required by plugin to complete node publish volume request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + NodePublishSecrets map[string]string `protobuf:"bytes,7,rep,name=node_publish_secrets,json=nodePublishSecrets" json:"node_publish_secrets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Attributes of the volume to publish. This field is OPTIONAL and + // MUST match the attributes of the Volume identified by + // `volume_id`. + VolumeAttributes map[string]string `protobuf:"bytes,8,rep,name=volume_attributes,json=volumeAttributes" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodePublishVolumeRequest) Reset() { *m = NodePublishVolumeRequest{} } +func (m *NodePublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodePublishVolumeRequest) ProtoMessage() {} +func (*NodePublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{42} +} +func (m *NodePublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodePublishVolumeRequest.Unmarshal(m, b) +} +func (m *NodePublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodePublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodePublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodePublishVolumeRequest.Merge(dst, src) +} +func (m *NodePublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodePublishVolumeRequest.Size(m) +} +func (m *NodePublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodePublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodePublishVolumeRequest proto.InternalMessageInfo + +func (m *NodePublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodePublishVolumeRequest) GetPublishInfo() map[string]string { + if m != nil { + return m.PublishInfo + } + return nil +} + +func (m *NodePublishVolumeRequest) GetStagingTargetPath() string { + if m != nil { + return m.StagingTargetPath + } + return "" +} + +func (m *NodePublishVolumeRequest) GetTargetPath() string { + if m != nil { + return m.TargetPath + } + return "" +} + +func (m *NodePublishVolumeRequest) GetVolumeCapability() *VolumeCapability { + if m != nil { + return m.VolumeCapability + } + return nil +} + +func (m *NodePublishVolumeRequest) GetReadonly() bool { + if m != nil { + return m.Readonly + } + return false +} + +func (m *NodePublishVolumeRequest) GetNodePublishSecrets() map[string]string { + if m != nil { + return m.NodePublishSecrets + } + return nil +} + +func (m *NodePublishVolumeRequest) GetVolumeAttributes() map[string]string { + if m != nil { + return m.VolumeAttributes + } + return nil +} + +type NodePublishVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodePublishVolumeResponse) Reset() { *m = NodePublishVolumeResponse{} } +func (m *NodePublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodePublishVolumeResponse) ProtoMessage() {} +func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{43} +} +func (m *NodePublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodePublishVolumeResponse.Unmarshal(m, b) +} +func (m *NodePublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodePublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodePublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodePublishVolumeResponse.Merge(dst, src) +} +func (m *NodePublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodePublishVolumeResponse.Size(m) +} +func (m *NodePublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodePublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodePublishVolumeResponse proto.InternalMessageInfo + +type NodeUnpublishVolumeRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + // The path at which the volume was published. It MUST be an absolute + // path in the root filesystem of the process serving this request. + // This is a REQUIRED field. + TargetPath string `protobuf:"bytes,2,opt,name=target_path,json=targetPath" json:"target_path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnpublishVolumeRequest) Reset() { *m = NodeUnpublishVolumeRequest{} } +func (m *NodeUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodeUnpublishVolumeRequest) ProtoMessage() {} +func (*NodeUnpublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{44} +} +func (m *NodeUnpublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnpublishVolumeRequest.Unmarshal(m, b) +} +func (m *NodeUnpublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnpublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodeUnpublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnpublishVolumeRequest.Merge(dst, src) +} +func (m *NodeUnpublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodeUnpublishVolumeRequest.Size(m) +} +func (m *NodeUnpublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnpublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnpublishVolumeRequest proto.InternalMessageInfo + +func (m *NodeUnpublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeUnpublishVolumeRequest) GetTargetPath() string { + if m != nil { + return m.TargetPath + } + return "" +} + +type NodeUnpublishVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnpublishVolumeResponse) Reset() { *m = NodeUnpublishVolumeResponse{} } +func (m *NodeUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodeUnpublishVolumeResponse) ProtoMessage() {} +func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{45} +} +func (m *NodeUnpublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnpublishVolumeResponse.Unmarshal(m, b) +} +func (m *NodeUnpublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnpublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodeUnpublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnpublishVolumeResponse.Merge(dst, src) +} +func (m *NodeUnpublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodeUnpublishVolumeResponse.Size(m) +} +func (m *NodeUnpublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnpublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnpublishVolumeResponse proto.InternalMessageInfo + +type NodeGetIdRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetIdRequest) Reset() { *m = NodeGetIdRequest{} } +func (m *NodeGetIdRequest) String() string { return proto.CompactTextString(m) } +func (*NodeGetIdRequest) ProtoMessage() {} +func (*NodeGetIdRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{46} +} +func (m *NodeGetIdRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetIdRequest.Unmarshal(m, b) +} +func (m *NodeGetIdRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetIdRequest.Marshal(b, m, deterministic) +} +func (dst *NodeGetIdRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetIdRequest.Merge(dst, src) +} +func (m *NodeGetIdRequest) XXX_Size() int { + return xxx_messageInfo_NodeGetIdRequest.Size(m) +} +func (m *NodeGetIdRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetIdRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetIdRequest proto.InternalMessageInfo + +type NodeGetIdResponse struct { + // The ID of the node as understood by the SP which SHALL be used by + // CO in subsequent `ControllerPublishVolume`. + // This is a REQUIRED field. + NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetIdResponse) Reset() { *m = NodeGetIdResponse{} } +func (m *NodeGetIdResponse) String() string { return proto.CompactTextString(m) } +func (*NodeGetIdResponse) ProtoMessage() {} +func (*NodeGetIdResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{47} +} +func (m *NodeGetIdResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetIdResponse.Unmarshal(m, b) +} +func (m *NodeGetIdResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetIdResponse.Marshal(b, m, deterministic) +} +func (dst *NodeGetIdResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetIdResponse.Merge(dst, src) +} +func (m *NodeGetIdResponse) XXX_Size() int { + return xxx_messageInfo_NodeGetIdResponse.Size(m) +} +func (m *NodeGetIdResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetIdResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetIdResponse proto.InternalMessageInfo + +func (m *NodeGetIdResponse) GetNodeId() string { + if m != nil { + return m.NodeId + } + return "" +} + +type NodeGetCapabilitiesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetCapabilitiesRequest) Reset() { *m = NodeGetCapabilitiesRequest{} } +func (m *NodeGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*NodeGetCapabilitiesRequest) ProtoMessage() {} +func (*NodeGetCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{48} +} +func (m *NodeGetCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetCapabilitiesRequest.Unmarshal(m, b) +} +func (m *NodeGetCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *NodeGetCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetCapabilitiesRequest.Merge(dst, src) +} +func (m *NodeGetCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_NodeGetCapabilitiesRequest.Size(m) +} +func (m *NodeGetCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetCapabilitiesRequest proto.InternalMessageInfo + +type NodeGetCapabilitiesResponse struct { + // All the capabilities that the node service supports. This field + // is OPTIONAL. + Capabilities []*NodeServiceCapability `protobuf:"bytes,1,rep,name=capabilities" json:"capabilities,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetCapabilitiesResponse) Reset() { *m = NodeGetCapabilitiesResponse{} } +func (m *NodeGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*NodeGetCapabilitiesResponse) ProtoMessage() {} +func (*NodeGetCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{49} +} +func (m *NodeGetCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetCapabilitiesResponse.Unmarshal(m, b) +} +func (m *NodeGetCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *NodeGetCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetCapabilitiesResponse.Merge(dst, src) +} +func (m *NodeGetCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_NodeGetCapabilitiesResponse.Size(m) +} +func (m *NodeGetCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetCapabilitiesResponse proto.InternalMessageInfo + +func (m *NodeGetCapabilitiesResponse) GetCapabilities() []*NodeServiceCapability { + if m != nil { + return m.Capabilities + } + return nil +} + +// Specifies a capability of the node service. +type NodeServiceCapability struct { + // Types that are valid to be assigned to Type: + // *NodeServiceCapability_Rpc + Type isNodeServiceCapability_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeServiceCapability) Reset() { *m = NodeServiceCapability{} } +func (m *NodeServiceCapability) String() string { return proto.CompactTextString(m) } +func (*NodeServiceCapability) ProtoMessage() {} +func (*NodeServiceCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{50} +} +func (m *NodeServiceCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeServiceCapability.Unmarshal(m, b) +} +func (m *NodeServiceCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeServiceCapability.Marshal(b, m, deterministic) +} +func (dst *NodeServiceCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeServiceCapability.Merge(dst, src) +} +func (m *NodeServiceCapability) XXX_Size() int { + return xxx_messageInfo_NodeServiceCapability.Size(m) +} +func (m *NodeServiceCapability) XXX_DiscardUnknown() { + xxx_messageInfo_NodeServiceCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeServiceCapability proto.InternalMessageInfo + +type isNodeServiceCapability_Type interface { + isNodeServiceCapability_Type() +} + +type NodeServiceCapability_Rpc struct { + Rpc *NodeServiceCapability_RPC `protobuf:"bytes,1,opt,name=rpc,oneof"` +} + +func (*NodeServiceCapability_Rpc) isNodeServiceCapability_Type() {} + +func (m *NodeServiceCapability) GetType() isNodeServiceCapability_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *NodeServiceCapability) GetRpc() *NodeServiceCapability_RPC { + if x, ok := m.GetType().(*NodeServiceCapability_Rpc); ok { + return x.Rpc + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*NodeServiceCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _NodeServiceCapability_OneofMarshaler, _NodeServiceCapability_OneofUnmarshaler, _NodeServiceCapability_OneofSizer, []interface{}{ + (*NodeServiceCapability_Rpc)(nil), + } +} + +func _NodeServiceCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*NodeServiceCapability) + // type + switch x := m.Type.(type) { + case *NodeServiceCapability_Rpc: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Rpc); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("NodeServiceCapability.Type has unexpected type %T", x) + } + return nil +} + +func _NodeServiceCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*NodeServiceCapability) + switch tag { + case 1: // type.rpc + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(NodeServiceCapability_RPC) + err := b.DecodeMessage(msg) + m.Type = &NodeServiceCapability_Rpc{msg} + return true, err + default: + return false, nil + } +} + +func _NodeServiceCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*NodeServiceCapability) + // type + switch x := m.Type.(type) { + case *NodeServiceCapability_Rpc: + s := proto.Size(x.Rpc) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type NodeServiceCapability_RPC struct { + Type NodeServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,enum=csi.v0.NodeServiceCapability_RPC_Type" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeServiceCapability_RPC) Reset() { *m = NodeServiceCapability_RPC{} } +func (m *NodeServiceCapability_RPC) String() string { return proto.CompactTextString(m) } +func (*NodeServiceCapability_RPC) ProtoMessage() {} +func (*NodeServiceCapability_RPC) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{50, 0} +} +func (m *NodeServiceCapability_RPC) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeServiceCapability_RPC.Unmarshal(m, b) +} +func (m *NodeServiceCapability_RPC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeServiceCapability_RPC.Marshal(b, m, deterministic) +} +func (dst *NodeServiceCapability_RPC) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeServiceCapability_RPC.Merge(dst, src) +} +func (m *NodeServiceCapability_RPC) XXX_Size() int { + return xxx_messageInfo_NodeServiceCapability_RPC.Size(m) +} +func (m *NodeServiceCapability_RPC) XXX_DiscardUnknown() { + xxx_messageInfo_NodeServiceCapability_RPC.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeServiceCapability_RPC proto.InternalMessageInfo + +func (m *NodeServiceCapability_RPC) GetType() NodeServiceCapability_RPC_Type { + if m != nil { + return m.Type + } + return NodeServiceCapability_RPC_UNKNOWN +} + +type NodeGetInfoRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetInfoRequest) Reset() { *m = NodeGetInfoRequest{} } +func (m *NodeGetInfoRequest) String() string { return proto.CompactTextString(m) } +func (*NodeGetInfoRequest) ProtoMessage() {} +func (*NodeGetInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{51} +} +func (m *NodeGetInfoRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetInfoRequest.Unmarshal(m, b) +} +func (m *NodeGetInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetInfoRequest.Marshal(b, m, deterministic) +} +func (dst *NodeGetInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetInfoRequest.Merge(dst, src) +} +func (m *NodeGetInfoRequest) XXX_Size() int { + return xxx_messageInfo_NodeGetInfoRequest.Size(m) +} +func (m *NodeGetInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetInfoRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetInfoRequest proto.InternalMessageInfo + +type NodeGetInfoResponse struct { + // The ID of the node as understood by the SP which SHALL be used by + // CO in subsequent calls to `ControllerPublishVolume`. + // This is a REQUIRED field. + NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` + // Maximum number of volumes that controller can publish to the node. + // If value is not set or zero CO SHALL decide how many volumes of + // this type can be published by the controller to the node. The + // plugin MUST NOT set negative values here. + // This field is OPTIONAL. + MaxVolumesPerNode int64 `protobuf:"varint,2,opt,name=max_volumes_per_node,json=maxVolumesPerNode" json:"max_volumes_per_node,omitempty"` + // Specifies where (regions, zones, racks, etc.) the node is + // accessible from. + // A plugin that returns this field MUST also set the + // ACCESSIBILITY_CONSTRAINTS plugin capability. + // COs MAY use this information along with the topology information + // returned in CreateVolumeResponse to ensure that a given volume is + // accessible from a given node when scheduling workloads. + // This field is OPTIONAL. If it is not specified, the CO MAY assume + // the node is not subject to any topological constraint, and MAY + // schedule workloads that reference any volume V, such that there are + // no topological constraints declared for V. + // + // Example 1: + // accessible_topology = + // {"region": "R1", "zone": "R2"} + // Indicates the node exists within the "region" "R1" and the "zone" + // "Z2". + AccessibleTopology *Topology `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology" json:"accessible_topology,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetInfoResponse) Reset() { *m = NodeGetInfoResponse{} } +func (m *NodeGetInfoResponse) String() string { return proto.CompactTextString(m) } +func (*NodeGetInfoResponse) ProtoMessage() {} +func (*NodeGetInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_31237507707d37ec, []int{52} +} +func (m *NodeGetInfoResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetInfoResponse.Unmarshal(m, b) +} +func (m *NodeGetInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetInfoResponse.Marshal(b, m, deterministic) +} +func (dst *NodeGetInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetInfoResponse.Merge(dst, src) +} +func (m *NodeGetInfoResponse) XXX_Size() int { + return xxx_messageInfo_NodeGetInfoResponse.Size(m) +} +func (m *NodeGetInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetInfoResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetInfoResponse proto.InternalMessageInfo + +func (m *NodeGetInfoResponse) GetNodeId() string { + if m != nil { + return m.NodeId + } + return "" +} + +func (m *NodeGetInfoResponse) GetMaxVolumesPerNode() int64 { + if m != nil { + return m.MaxVolumesPerNode + } + return 0 +} + +func (m *NodeGetInfoResponse) GetAccessibleTopology() *Topology { + if m != nil { + return m.AccessibleTopology + } + return nil +} + +func init() { + proto.RegisterType((*GetPluginInfoRequest)(nil), "csi.v0.GetPluginInfoRequest") + proto.RegisterType((*GetPluginInfoResponse)(nil), "csi.v0.GetPluginInfoResponse") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.GetPluginInfoResponse.ManifestEntry") + proto.RegisterType((*GetPluginCapabilitiesRequest)(nil), "csi.v0.GetPluginCapabilitiesRequest") + proto.RegisterType((*GetPluginCapabilitiesResponse)(nil), "csi.v0.GetPluginCapabilitiesResponse") + proto.RegisterType((*PluginCapability)(nil), "csi.v0.PluginCapability") + proto.RegisterType((*PluginCapability_Service)(nil), "csi.v0.PluginCapability.Service") + proto.RegisterType((*ProbeRequest)(nil), "csi.v0.ProbeRequest") + proto.RegisterType((*ProbeResponse)(nil), "csi.v0.ProbeResponse") + proto.RegisterType((*CreateVolumeRequest)(nil), "csi.v0.CreateVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.CreateVolumeRequest.ControllerCreateSecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.CreateVolumeRequest.ParametersEntry") + proto.RegisterType((*VolumeContentSource)(nil), "csi.v0.VolumeContentSource") + proto.RegisterType((*VolumeContentSource_SnapshotSource)(nil), "csi.v0.VolumeContentSource.SnapshotSource") + proto.RegisterType((*CreateVolumeResponse)(nil), "csi.v0.CreateVolumeResponse") + proto.RegisterType((*VolumeCapability)(nil), "csi.v0.VolumeCapability") + proto.RegisterType((*VolumeCapability_BlockVolume)(nil), "csi.v0.VolumeCapability.BlockVolume") + proto.RegisterType((*VolumeCapability_MountVolume)(nil), "csi.v0.VolumeCapability.MountVolume") + proto.RegisterType((*VolumeCapability_AccessMode)(nil), "csi.v0.VolumeCapability.AccessMode") + proto.RegisterType((*CapacityRange)(nil), "csi.v0.CapacityRange") + proto.RegisterType((*Volume)(nil), "csi.v0.Volume") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.Volume.AttributesEntry") + proto.RegisterType((*TopologyRequirement)(nil), "csi.v0.TopologyRequirement") + proto.RegisterType((*Topology)(nil), "csi.v0.Topology") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.Topology.SegmentsEntry") + proto.RegisterType((*DeleteVolumeRequest)(nil), "csi.v0.DeleteVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.DeleteVolumeRequest.ControllerDeleteSecretsEntry") + proto.RegisterType((*DeleteVolumeResponse)(nil), "csi.v0.DeleteVolumeResponse") + proto.RegisterType((*ControllerPublishVolumeRequest)(nil), "csi.v0.ControllerPublishVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.ControllerPublishVolumeRequest.ControllerPublishSecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.ControllerPublishVolumeRequest.VolumeAttributesEntry") + proto.RegisterType((*ControllerPublishVolumeResponse)(nil), "csi.v0.ControllerPublishVolumeResponse") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.ControllerPublishVolumeResponse.PublishInfoEntry") + proto.RegisterType((*ControllerUnpublishVolumeRequest)(nil), "csi.v0.ControllerUnpublishVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.ControllerUnpublishVolumeRequest.ControllerUnpublishSecretsEntry") + proto.RegisterType((*ControllerUnpublishVolumeResponse)(nil), "csi.v0.ControllerUnpublishVolumeResponse") + proto.RegisterType((*ValidateVolumeCapabilitiesRequest)(nil), "csi.v0.ValidateVolumeCapabilitiesRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.ValidateVolumeCapabilitiesRequest.VolumeAttributesEntry") + proto.RegisterType((*ValidateVolumeCapabilitiesResponse)(nil), "csi.v0.ValidateVolumeCapabilitiesResponse") + proto.RegisterType((*ListVolumesRequest)(nil), "csi.v0.ListVolumesRequest") + proto.RegisterType((*ListVolumesResponse)(nil), "csi.v0.ListVolumesResponse") + proto.RegisterType((*ListVolumesResponse_Entry)(nil), "csi.v0.ListVolumesResponse.Entry") + proto.RegisterType((*GetCapacityRequest)(nil), "csi.v0.GetCapacityRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.GetCapacityRequest.ParametersEntry") + proto.RegisterType((*GetCapacityResponse)(nil), "csi.v0.GetCapacityResponse") + proto.RegisterType((*ControllerGetCapabilitiesRequest)(nil), "csi.v0.ControllerGetCapabilitiesRequest") + proto.RegisterType((*ControllerGetCapabilitiesResponse)(nil), "csi.v0.ControllerGetCapabilitiesResponse") + proto.RegisterType((*ControllerServiceCapability)(nil), "csi.v0.ControllerServiceCapability") + proto.RegisterType((*ControllerServiceCapability_RPC)(nil), "csi.v0.ControllerServiceCapability.RPC") + proto.RegisterType((*CreateSnapshotRequest)(nil), "csi.v0.CreateSnapshotRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.CreateSnapshotRequest.CreateSnapshotSecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.CreateSnapshotRequest.ParametersEntry") + proto.RegisterType((*CreateSnapshotResponse)(nil), "csi.v0.CreateSnapshotResponse") + proto.RegisterType((*Snapshot)(nil), "csi.v0.Snapshot") + proto.RegisterType((*SnapshotStatus)(nil), "csi.v0.SnapshotStatus") + proto.RegisterType((*DeleteSnapshotRequest)(nil), "csi.v0.DeleteSnapshotRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.DeleteSnapshotRequest.DeleteSnapshotSecretsEntry") + proto.RegisterType((*DeleteSnapshotResponse)(nil), "csi.v0.DeleteSnapshotResponse") + proto.RegisterType((*ListSnapshotsRequest)(nil), "csi.v0.ListSnapshotsRequest") + proto.RegisterType((*ListSnapshotsResponse)(nil), "csi.v0.ListSnapshotsResponse") + proto.RegisterType((*ListSnapshotsResponse_Entry)(nil), "csi.v0.ListSnapshotsResponse.Entry") + proto.RegisterType((*NodeStageVolumeRequest)(nil), "csi.v0.NodeStageVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.NodeStageVolumeRequest.NodeStageSecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.NodeStageVolumeRequest.PublishInfoEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.NodeStageVolumeRequest.VolumeAttributesEntry") + proto.RegisterType((*NodeStageVolumeResponse)(nil), "csi.v0.NodeStageVolumeResponse") + proto.RegisterType((*NodeUnstageVolumeRequest)(nil), "csi.v0.NodeUnstageVolumeRequest") + proto.RegisterType((*NodeUnstageVolumeResponse)(nil), "csi.v0.NodeUnstageVolumeResponse") + proto.RegisterType((*NodePublishVolumeRequest)(nil), "csi.v0.NodePublishVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.NodePublishVolumeRequest.NodePublishSecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.NodePublishVolumeRequest.PublishInfoEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v0.NodePublishVolumeRequest.VolumeAttributesEntry") + proto.RegisterType((*NodePublishVolumeResponse)(nil), "csi.v0.NodePublishVolumeResponse") + proto.RegisterType((*NodeUnpublishVolumeRequest)(nil), "csi.v0.NodeUnpublishVolumeRequest") + proto.RegisterType((*NodeUnpublishVolumeResponse)(nil), "csi.v0.NodeUnpublishVolumeResponse") + proto.RegisterType((*NodeGetIdRequest)(nil), "csi.v0.NodeGetIdRequest") + proto.RegisterType((*NodeGetIdResponse)(nil), "csi.v0.NodeGetIdResponse") + proto.RegisterType((*NodeGetCapabilitiesRequest)(nil), "csi.v0.NodeGetCapabilitiesRequest") + proto.RegisterType((*NodeGetCapabilitiesResponse)(nil), "csi.v0.NodeGetCapabilitiesResponse") + proto.RegisterType((*NodeServiceCapability)(nil), "csi.v0.NodeServiceCapability") + proto.RegisterType((*NodeServiceCapability_RPC)(nil), "csi.v0.NodeServiceCapability.RPC") + proto.RegisterType((*NodeGetInfoRequest)(nil), "csi.v0.NodeGetInfoRequest") + proto.RegisterType((*NodeGetInfoResponse)(nil), "csi.v0.NodeGetInfoResponse") + proto.RegisterEnum("csi.v0.PluginCapability_Service_Type", PluginCapability_Service_Type_name, PluginCapability_Service_Type_value) + proto.RegisterEnum("csi.v0.VolumeCapability_AccessMode_Mode", VolumeCapability_AccessMode_Mode_name, VolumeCapability_AccessMode_Mode_value) + proto.RegisterEnum("csi.v0.ControllerServiceCapability_RPC_Type", ControllerServiceCapability_RPC_Type_name, ControllerServiceCapability_RPC_Type_value) + proto.RegisterEnum("csi.v0.SnapshotStatus_Type", SnapshotStatus_Type_name, SnapshotStatus_Type_value) + proto.RegisterEnum("csi.v0.NodeServiceCapability_RPC_Type", NodeServiceCapability_RPC_Type_name, NodeServiceCapability_RPC_Type_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Identity service + +type IdentityClient interface { + GetPluginInfo(ctx context.Context, in *GetPluginInfoRequest, opts ...grpc.CallOption) (*GetPluginInfoResponse, error) + GetPluginCapabilities(ctx context.Context, in *GetPluginCapabilitiesRequest, opts ...grpc.CallOption) (*GetPluginCapabilitiesResponse, error) + Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (*ProbeResponse, error) +} + +type identityClient struct { + cc *grpc.ClientConn +} + +func NewIdentityClient(cc *grpc.ClientConn) IdentityClient { + return &identityClient{cc} +} + +func (c *identityClient) GetPluginInfo(ctx context.Context, in *GetPluginInfoRequest, opts ...grpc.CallOption) (*GetPluginInfoResponse, error) { + out := new(GetPluginInfoResponse) + err := grpc.Invoke(ctx, "/csi.v0.Identity/GetPluginInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identityClient) GetPluginCapabilities(ctx context.Context, in *GetPluginCapabilitiesRequest, opts ...grpc.CallOption) (*GetPluginCapabilitiesResponse, error) { + out := new(GetPluginCapabilitiesResponse) + err := grpc.Invoke(ctx, "/csi.v0.Identity/GetPluginCapabilities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identityClient) Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (*ProbeResponse, error) { + out := new(ProbeResponse) + err := grpc.Invoke(ctx, "/csi.v0.Identity/Probe", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Identity service + +type IdentityServer interface { + GetPluginInfo(context.Context, *GetPluginInfoRequest) (*GetPluginInfoResponse, error) + GetPluginCapabilities(context.Context, *GetPluginCapabilitiesRequest) (*GetPluginCapabilitiesResponse, error) + Probe(context.Context, *ProbeRequest) (*ProbeResponse, error) +} + +func RegisterIdentityServer(s *grpc.Server, srv IdentityServer) { + s.RegisterService(&_Identity_serviceDesc, srv) +} + +func _Identity_GetPluginInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPluginInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityServer).GetPluginInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Identity/GetPluginInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityServer).GetPluginInfo(ctx, req.(*GetPluginInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identity_GetPluginCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPluginCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityServer).GetPluginCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Identity/GetPluginCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityServer).GetPluginCapabilities(ctx, req.(*GetPluginCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identity_Probe_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ProbeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityServer).Probe(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Identity/Probe", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityServer).Probe(ctx, req.(*ProbeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Identity_serviceDesc = grpc.ServiceDesc{ + ServiceName: "csi.v0.Identity", + HandlerType: (*IdentityServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetPluginInfo", + Handler: _Identity_GetPluginInfo_Handler, + }, + { + MethodName: "GetPluginCapabilities", + Handler: _Identity_GetPluginCapabilities_Handler, + }, + { + MethodName: "Probe", + Handler: _Identity_Probe_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "csi.proto", +} + +// Client API for Controller service + +type ControllerClient interface { + CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) + DeleteVolume(ctx context.Context, in *DeleteVolumeRequest, opts ...grpc.CallOption) (*DeleteVolumeResponse, error) + ControllerPublishVolume(ctx context.Context, in *ControllerPublishVolumeRequest, opts ...grpc.CallOption) (*ControllerPublishVolumeResponse, error) + ControllerUnpublishVolume(ctx context.Context, in *ControllerUnpublishVolumeRequest, opts ...grpc.CallOption) (*ControllerUnpublishVolumeResponse, error) + ValidateVolumeCapabilities(ctx context.Context, in *ValidateVolumeCapabilitiesRequest, opts ...grpc.CallOption) (*ValidateVolumeCapabilitiesResponse, error) + ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) + GetCapacity(ctx context.Context, in *GetCapacityRequest, opts ...grpc.CallOption) (*GetCapacityResponse, error) + ControllerGetCapabilities(ctx context.Context, in *ControllerGetCapabilitiesRequest, opts ...grpc.CallOption) (*ControllerGetCapabilitiesResponse, error) + CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*CreateSnapshotResponse, error) + DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*DeleteSnapshotResponse, error) + ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) +} + +type controllerClient struct { + cc *grpc.ClientConn +} + +func NewControllerClient(cc *grpc.ClientConn) ControllerClient { + return &controllerClient{cc} +} + +func (c *controllerClient) CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) { + out := new(CreateVolumeResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/CreateVolume", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) DeleteVolume(ctx context.Context, in *DeleteVolumeRequest, opts ...grpc.CallOption) (*DeleteVolumeResponse, error) { + out := new(DeleteVolumeResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/DeleteVolume", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ControllerPublishVolume(ctx context.Context, in *ControllerPublishVolumeRequest, opts ...grpc.CallOption) (*ControllerPublishVolumeResponse, error) { + out := new(ControllerPublishVolumeResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/ControllerPublishVolume", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ControllerUnpublishVolume(ctx context.Context, in *ControllerUnpublishVolumeRequest, opts ...grpc.CallOption) (*ControllerUnpublishVolumeResponse, error) { + out := new(ControllerUnpublishVolumeResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/ControllerUnpublishVolume", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ValidateVolumeCapabilities(ctx context.Context, in *ValidateVolumeCapabilitiesRequest, opts ...grpc.CallOption) (*ValidateVolumeCapabilitiesResponse, error) { + out := new(ValidateVolumeCapabilitiesResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/ValidateVolumeCapabilities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) { + out := new(ListVolumesResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/ListVolumes", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) GetCapacity(ctx context.Context, in *GetCapacityRequest, opts ...grpc.CallOption) (*GetCapacityResponse, error) { + out := new(GetCapacityResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/GetCapacity", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ControllerGetCapabilities(ctx context.Context, in *ControllerGetCapabilitiesRequest, opts ...grpc.CallOption) (*ControllerGetCapabilitiesResponse, error) { + out := new(ControllerGetCapabilitiesResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/ControllerGetCapabilities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*CreateSnapshotResponse, error) { + out := new(CreateSnapshotResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/CreateSnapshot", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*DeleteSnapshotResponse, error) { + out := new(DeleteSnapshotResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/DeleteSnapshot", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) { + out := new(ListSnapshotsResponse) + err := grpc.Invoke(ctx, "/csi.v0.Controller/ListSnapshots", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Controller service + +type ControllerServer interface { + CreateVolume(context.Context, *CreateVolumeRequest) (*CreateVolumeResponse, error) + DeleteVolume(context.Context, *DeleteVolumeRequest) (*DeleteVolumeResponse, error) + ControllerPublishVolume(context.Context, *ControllerPublishVolumeRequest) (*ControllerPublishVolumeResponse, error) + ControllerUnpublishVolume(context.Context, *ControllerUnpublishVolumeRequest) (*ControllerUnpublishVolumeResponse, error) + ValidateVolumeCapabilities(context.Context, *ValidateVolumeCapabilitiesRequest) (*ValidateVolumeCapabilitiesResponse, error) + ListVolumes(context.Context, *ListVolumesRequest) (*ListVolumesResponse, error) + GetCapacity(context.Context, *GetCapacityRequest) (*GetCapacityResponse, error) + ControllerGetCapabilities(context.Context, *ControllerGetCapabilitiesRequest) (*ControllerGetCapabilitiesResponse, error) + CreateSnapshot(context.Context, *CreateSnapshotRequest) (*CreateSnapshotResponse, error) + DeleteSnapshot(context.Context, *DeleteSnapshotRequest) (*DeleteSnapshotResponse, error) + ListSnapshots(context.Context, *ListSnapshotsRequest) (*ListSnapshotsResponse, error) +} + +func RegisterControllerServer(s *grpc.Server, srv ControllerServer) { + s.RegisterService(&_Controller_serviceDesc, srv) +} + +func _Controller_CreateVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).CreateVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/CreateVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).CreateVolume(ctx, req.(*CreateVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_DeleteVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).DeleteVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/DeleteVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).DeleteVolume(ctx, req.(*DeleteVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ControllerPublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerPublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ControllerPublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/ControllerPublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ControllerPublishVolume(ctx, req.(*ControllerPublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ControllerUnpublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerUnpublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ControllerUnpublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/ControllerUnpublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ControllerUnpublishVolume(ctx, req.(*ControllerUnpublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ValidateVolumeCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ValidateVolumeCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ValidateVolumeCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/ValidateVolumeCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ValidateVolumeCapabilities(ctx, req.(*ValidateVolumeCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ListVolumes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListVolumesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ListVolumes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/ListVolumes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ListVolumes(ctx, req.(*ListVolumesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_GetCapacity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetCapacityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).GetCapacity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/GetCapacity", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).GetCapacity(ctx, req.(*GetCapacityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ControllerGetCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerGetCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ControllerGetCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/ControllerGetCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ControllerGetCapabilities(ctx, req.(*ControllerGetCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_CreateSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).CreateSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/CreateSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).CreateSnapshot(ctx, req.(*CreateSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_DeleteSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).DeleteSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/DeleteSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).DeleteSnapshot(ctx, req.(*DeleteSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ListSnapshots_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSnapshotsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ListSnapshots(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Controller/ListSnapshots", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ListSnapshots(ctx, req.(*ListSnapshotsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Controller_serviceDesc = grpc.ServiceDesc{ + ServiceName: "csi.v0.Controller", + HandlerType: (*ControllerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateVolume", + Handler: _Controller_CreateVolume_Handler, + }, + { + MethodName: "DeleteVolume", + Handler: _Controller_DeleteVolume_Handler, + }, + { + MethodName: "ControllerPublishVolume", + Handler: _Controller_ControllerPublishVolume_Handler, + }, + { + MethodName: "ControllerUnpublishVolume", + Handler: _Controller_ControllerUnpublishVolume_Handler, + }, + { + MethodName: "ValidateVolumeCapabilities", + Handler: _Controller_ValidateVolumeCapabilities_Handler, + }, + { + MethodName: "ListVolumes", + Handler: _Controller_ListVolumes_Handler, + }, + { + MethodName: "GetCapacity", + Handler: _Controller_GetCapacity_Handler, + }, + { + MethodName: "ControllerGetCapabilities", + Handler: _Controller_ControllerGetCapabilities_Handler, + }, + { + MethodName: "CreateSnapshot", + Handler: _Controller_CreateSnapshot_Handler, + }, + { + MethodName: "DeleteSnapshot", + Handler: _Controller_DeleteSnapshot_Handler, + }, + { + MethodName: "ListSnapshots", + Handler: _Controller_ListSnapshots_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "csi.proto", +} + +// Client API for Node service + +type NodeClient interface { + NodeStageVolume(ctx context.Context, in *NodeStageVolumeRequest, opts ...grpc.CallOption) (*NodeStageVolumeResponse, error) + NodeUnstageVolume(ctx context.Context, in *NodeUnstageVolumeRequest, opts ...grpc.CallOption) (*NodeUnstageVolumeResponse, error) + NodePublishVolume(ctx context.Context, in *NodePublishVolumeRequest, opts ...grpc.CallOption) (*NodePublishVolumeResponse, error) + NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishVolumeRequest, opts ...grpc.CallOption) (*NodeUnpublishVolumeResponse, error) + // NodeGetId is being deprecated in favor of NodeGetInfo and will be + // removed in CSI 1.0. Existing drivers, however, may depend on this + // RPC call and hence this RPC call MUST be implemented by the CSI + // plugin prior to v1.0. + NodeGetId(ctx context.Context, in *NodeGetIdRequest, opts ...grpc.CallOption) (*NodeGetIdResponse, error) + NodeGetCapabilities(ctx context.Context, in *NodeGetCapabilitiesRequest, opts ...grpc.CallOption) (*NodeGetCapabilitiesResponse, error) + // Prior to CSI 1.0 - CSI plugins MUST implement both NodeGetId and + // NodeGetInfo RPC calls. + NodeGetInfo(ctx context.Context, in *NodeGetInfoRequest, opts ...grpc.CallOption) (*NodeGetInfoResponse, error) +} + +type nodeClient struct { + cc *grpc.ClientConn +} + +func NewNodeClient(cc *grpc.ClientConn) NodeClient { + return &nodeClient{cc} +} + +func (c *nodeClient) NodeStageVolume(ctx context.Context, in *NodeStageVolumeRequest, opts ...grpc.CallOption) (*NodeStageVolumeResponse, error) { + out := new(NodeStageVolumeResponse) + err := grpc.Invoke(ctx, "/csi.v0.Node/NodeStageVolume", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeUnstageVolume(ctx context.Context, in *NodeUnstageVolumeRequest, opts ...grpc.CallOption) (*NodeUnstageVolumeResponse, error) { + out := new(NodeUnstageVolumeResponse) + err := grpc.Invoke(ctx, "/csi.v0.Node/NodeUnstageVolume", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodePublishVolume(ctx context.Context, in *NodePublishVolumeRequest, opts ...grpc.CallOption) (*NodePublishVolumeResponse, error) { + out := new(NodePublishVolumeResponse) + err := grpc.Invoke(ctx, "/csi.v0.Node/NodePublishVolume", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishVolumeRequest, opts ...grpc.CallOption) (*NodeUnpublishVolumeResponse, error) { + out := new(NodeUnpublishVolumeResponse) + err := grpc.Invoke(ctx, "/csi.v0.Node/NodeUnpublishVolume", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Deprecated: Do not use. +func (c *nodeClient) NodeGetId(ctx context.Context, in *NodeGetIdRequest, opts ...grpc.CallOption) (*NodeGetIdResponse, error) { + out := new(NodeGetIdResponse) + err := grpc.Invoke(ctx, "/csi.v0.Node/NodeGetId", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeGetCapabilities(ctx context.Context, in *NodeGetCapabilitiesRequest, opts ...grpc.CallOption) (*NodeGetCapabilitiesResponse, error) { + out := new(NodeGetCapabilitiesResponse) + err := grpc.Invoke(ctx, "/csi.v0.Node/NodeGetCapabilities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeGetInfo(ctx context.Context, in *NodeGetInfoRequest, opts ...grpc.CallOption) (*NodeGetInfoResponse, error) { + out := new(NodeGetInfoResponse) + err := grpc.Invoke(ctx, "/csi.v0.Node/NodeGetInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Node service + +type NodeServer interface { + NodeStageVolume(context.Context, *NodeStageVolumeRequest) (*NodeStageVolumeResponse, error) + NodeUnstageVolume(context.Context, *NodeUnstageVolumeRequest) (*NodeUnstageVolumeResponse, error) + NodePublishVolume(context.Context, *NodePublishVolumeRequest) (*NodePublishVolumeResponse, error) + NodeUnpublishVolume(context.Context, *NodeUnpublishVolumeRequest) (*NodeUnpublishVolumeResponse, error) + // NodeGetId is being deprecated in favor of NodeGetInfo and will be + // removed in CSI 1.0. Existing drivers, however, may depend on this + // RPC call and hence this RPC call MUST be implemented by the CSI + // plugin prior to v1.0. + NodeGetId(context.Context, *NodeGetIdRequest) (*NodeGetIdResponse, error) + NodeGetCapabilities(context.Context, *NodeGetCapabilitiesRequest) (*NodeGetCapabilitiesResponse, error) + // Prior to CSI 1.0 - CSI plugins MUST implement both NodeGetId and + // NodeGetInfo RPC calls. + NodeGetInfo(context.Context, *NodeGetInfoRequest) (*NodeGetInfoResponse, error) +} + +func RegisterNodeServer(s *grpc.Server, srv NodeServer) { + s.RegisterService(&_Node_serviceDesc, srv) +} + +func _Node_NodeStageVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeStageVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeStageVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Node/NodeStageVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeStageVolume(ctx, req.(*NodeStageVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeUnstageVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeUnstageVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeUnstageVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Node/NodeUnstageVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeUnstageVolume(ctx, req.(*NodeUnstageVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodePublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodePublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodePublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Node/NodePublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodePublishVolume(ctx, req.(*NodePublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeUnpublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeUnpublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeUnpublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Node/NodeUnpublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeUnpublishVolume(ctx, req.(*NodeUnpublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeGetId_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeGetIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeGetId(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Node/NodeGetId", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeGetId(ctx, req.(*NodeGetIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeGetCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeGetCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeGetCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Node/NodeGetCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeGetCapabilities(ctx, req.(*NodeGetCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeGetInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeGetInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeGetInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v0.Node/NodeGetInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeGetInfo(ctx, req.(*NodeGetInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Node_serviceDesc = grpc.ServiceDesc{ + ServiceName: "csi.v0.Node", + HandlerType: (*NodeServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "NodeStageVolume", + Handler: _Node_NodeStageVolume_Handler, + }, + { + MethodName: "NodeUnstageVolume", + Handler: _Node_NodeUnstageVolume_Handler, + }, + { + MethodName: "NodePublishVolume", + Handler: _Node_NodePublishVolume_Handler, + }, + { + MethodName: "NodeUnpublishVolume", + Handler: _Node_NodeUnpublishVolume_Handler, + }, + { + MethodName: "NodeGetId", + Handler: _Node_NodeGetId_Handler, + }, + { + MethodName: "NodeGetCapabilities", + Handler: _Node_NodeGetCapabilities_Handler, + }, + { + MethodName: "NodeGetInfo", + Handler: _Node_NodeGetInfo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "csi.proto", +} + +func init() { proto.RegisterFile("csi.proto", fileDescriptor_csi_31237507707d37ec) } + +var fileDescriptor_csi_31237507707d37ec = []byte{ + // 2932 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x1a, 0x4d, 0x73, 0x23, 0x47, + 0xd5, 0xa3, 0x0f, 0xdb, 0x7a, 0x5e, 0x3b, 0xda, 0xf6, 0x97, 0x3c, 0xb6, 0x77, 0xbd, 0xb3, 0xd9, + 0x64, 0x13, 0x12, 0x6d, 0x30, 0x24, 0x15, 0x92, 0x4d, 0x40, 0x96, 0x15, 0x5b, 0x59, 0x5b, 0x36, + 0x23, 0xd9, 0xa9, 0x5d, 0x42, 0x4d, 0xc6, 0x52, 0x5b, 0x3b, 0xac, 0x3c, 0xa3, 0xcc, 0x8c, 0xcc, + 0x9a, 0x1b, 0x70, 0x01, 0x4e, 0xf0, 0x0b, 0x52, 0x95, 0x1b, 0x14, 0xb9, 0x50, 0xdc, 0xa8, 0xe2, + 0x46, 0x15, 0x27, 0xce, 0x9c, 0xb8, 0xa7, 0xe0, 0xc8, 0x89, 0x2a, 0xaa, 0xa8, 0x9e, 0xee, 0x19, + 0x4d, 0xb7, 0x7a, 0xf4, 0x91, 0xdd, 0x4a, 0x71, 0x92, 0xe6, 0x7d, 0xf5, 0xeb, 0xd7, 0xef, 0xbd, + 0x7e, 0xef, 0xcd, 0x40, 0xae, 0xe9, 0x59, 0xc5, 0xae, 0xeb, 0xf8, 0x0e, 0x9a, 0x26, 0x7f, 0x2f, + 0xdf, 0x50, 0x6f, 0xb4, 0x1d, 0xa7, 0xdd, 0xc1, 0xf7, 0x02, 0xe8, 0x59, 0xef, 0xfc, 0xde, 0x8f, + 0x5d, 0xb3, 0xdb, 0xc5, 0xae, 0x47, 0xe9, 0xb4, 0x15, 0x58, 0xda, 0xc3, 0xfe, 0x71, 0xa7, 0xd7, + 0xb6, 0xec, 0xaa, 0x7d, 0xee, 0xe8, 0xf8, 0xd3, 0x1e, 0xf6, 0x7c, 0xed, 0xef, 0x0a, 0x2c, 0x0b, + 0x08, 0xaf, 0xeb, 0xd8, 0x1e, 0x46, 0x08, 0x32, 0xb6, 0x79, 0x81, 0x0b, 0xca, 0x96, 0x72, 0x37, + 0xa7, 0x07, 0xff, 0xd1, 0x1d, 0x58, 0xb8, 0xc4, 0x76, 0xcb, 0x71, 0x8d, 0x4b, 0xec, 0x7a, 0x96, + 0x63, 0x17, 0x52, 0x01, 0x76, 0x9e, 0x42, 0x4f, 0x29, 0x10, 0xed, 0xc1, 0xec, 0x85, 0x69, 0x5b, + 0xe7, 0xd8, 0xf3, 0x0b, 0xe9, 0xad, 0xf4, 0xdd, 0xb9, 0xed, 0x6f, 0x14, 0xa9, 0x9e, 0x45, 0xe9, + 0x5a, 0xc5, 0x43, 0x46, 0x5d, 0xb1, 0x7d, 0xf7, 0x4a, 0x8f, 0x98, 0xd5, 0x77, 0x61, 0x9e, 0x43, + 0xa1, 0x3c, 0xa4, 0x9f, 0xe0, 0x2b, 0xa6, 0x13, 0xf9, 0x8b, 0x96, 0x20, 0x7b, 0x69, 0x76, 0x7a, + 0x98, 0x69, 0x42, 0x1f, 0xde, 0x49, 0xbd, 0xad, 0x68, 0x37, 0x60, 0x23, 0x5a, 0xad, 0x6c, 0x76, + 0xcd, 0x33, 0xab, 0x63, 0xf9, 0x16, 0xf6, 0xc2, 0xad, 0xff, 0x10, 0x36, 0x13, 0xf0, 0xcc, 0x02, + 0xf7, 0xe1, 0x5a, 0x33, 0x06, 0x2f, 0xa4, 0x82, 0xad, 0x14, 0xc2, 0xad, 0x08, 0x9c, 0x57, 0x3a, + 0x47, 0xad, 0xfd, 0x53, 0x81, 0xbc, 0x48, 0x82, 0xee, 0xc3, 0x8c, 0x87, 0xdd, 0x4b, 0xab, 0x49, + 0xed, 0x3a, 0xb7, 0xbd, 0x95, 0x24, 0xad, 0x58, 0xa7, 0x74, 0xfb, 0x53, 0x7a, 0xc8, 0xa2, 0xfe, + 0x5a, 0x81, 0x19, 0x06, 0x46, 0xdf, 0x81, 0x8c, 0x7f, 0xd5, 0xa5, 0x62, 0x16, 0xb6, 0xef, 0x8c, + 0x12, 0x53, 0x6c, 0x5c, 0x75, 0xb1, 0x1e, 0xb0, 0x68, 0x1f, 0x42, 0x86, 0x3c, 0xa1, 0x39, 0x98, + 0x39, 0xa9, 0x3d, 0xa8, 0x1d, 0x7d, 0x54, 0xcb, 0x4f, 0xa1, 0x15, 0x40, 0xe5, 0xa3, 0x5a, 0x43, + 0x3f, 0x3a, 0x38, 0xa8, 0xe8, 0x46, 0xbd, 0xa2, 0x9f, 0x56, 0xcb, 0x95, 0xbc, 0x82, 0x36, 0x61, + 0xad, 0x54, 0x2e, 0x57, 0xea, 0xf5, 0xea, 0x4e, 0xf5, 0xa0, 0xda, 0x78, 0x68, 0x94, 0x8f, 0x6a, + 0xf5, 0x86, 0x5e, 0xaa, 0xd6, 0x1a, 0xf5, 0x7c, 0x6a, 0x67, 0x9a, 0xaa, 0xa1, 0x2d, 0xc0, 0xb5, + 0x63, 0xd7, 0x39, 0xc3, 0xa1, 0x71, 0x4b, 0x30, 0xcf, 0x9e, 0x99, 0x31, 0xdf, 0x80, 0xac, 0x8b, + 0xcd, 0xd6, 0x15, 0xdb, 0xb7, 0x5a, 0xa4, 0x0e, 0x5b, 0x0c, 0x1d, 0xb6, 0xb8, 0xe3, 0x38, 0x9d, + 0x53, 0x72, 0x78, 0x3a, 0x25, 0xd4, 0xbe, 0xc8, 0xc2, 0x62, 0xd9, 0xc5, 0xa6, 0x8f, 0x4f, 0x9d, + 0x4e, 0xef, 0x22, 0x14, 0x2d, 0x75, 0xcc, 0xfb, 0xb0, 0x40, 0x8c, 0xdf, 0xb4, 0xfc, 0x2b, 0xc3, + 0x35, 0xed, 0x36, 0x75, 0x87, 0xb9, 0xed, 0xe5, 0xd0, 0x2e, 0x65, 0x86, 0xd5, 0x09, 0x52, 0x9f, + 0x6f, 0xc6, 0x1f, 0x51, 0x15, 0x16, 0x2f, 0x83, 0x25, 0x0c, 0xee, 0xbc, 0xd3, 0xfc, 0x79, 0x53, + 0x2d, 0x62, 0xe7, 0x8d, 0x2e, 0x79, 0x88, 0x85, 0x3d, 0xf4, 0x00, 0xa0, 0x6b, 0xba, 0xe6, 0x05, + 0xf6, 0xb1, 0xeb, 0x15, 0x32, 0xbc, 0xf3, 0x4b, 0x76, 0x53, 0x3c, 0x8e, 0xa8, 0xa9, 0xf3, 0xc7, + 0xd8, 0x91, 0x0f, 0x6b, 0x4d, 0xc7, 0xf6, 0x5d, 0xa7, 0xd3, 0xc1, 0xae, 0xd1, 0x0c, 0xb8, 0x0d, + 0x0f, 0x37, 0x5d, 0xec, 0x7b, 0x85, 0x6c, 0x20, 0xfb, 0xed, 0x61, 0xb2, 0xcb, 0x11, 0x33, 0xc5, + 0xd6, 0x29, 0x2b, 0x5d, 0x68, 0xb5, 0x29, 0xc7, 0xa2, 0x23, 0x58, 0x0e, 0xad, 0xe1, 0xd8, 0x3e, + 0xb6, 0x7d, 0xc3, 0x73, 0x7a, 0x6e, 0x13, 0x17, 0xa6, 0x03, 0x93, 0xae, 0x0b, 0xf6, 0xa0, 0x34, + 0xf5, 0x80, 0x44, 0x67, 0x76, 0xe4, 0x80, 0xe8, 0x11, 0xa8, 0x66, 0xb3, 0x89, 0x3d, 0xcf, 0xa2, + 0x86, 0x33, 0x5c, 0xfc, 0x69, 0xcf, 0x72, 0xf1, 0x05, 0xb6, 0x7d, 0xaf, 0x30, 0xc3, 0x4b, 0x6d, + 0x38, 0x5d, 0xa7, 0xe3, 0xb4, 0xaf, 0xf4, 0x3e, 0x8d, 0xbe, 0xc6, 0xb1, 0xc7, 0x30, 0x9e, 0xfa, + 0x1e, 0xbc, 0x20, 0x58, 0x70, 0x92, 0x1c, 0xa1, 0x7e, 0x08, 0x1b, 0xc3, 0x8c, 0x34, 0x51, 0xbe, + 0xf9, 0xa5, 0x02, 0x8b, 0x12, 0x9b, 0xa0, 0x7d, 0x98, 0xf5, 0x6c, 0xb3, 0xeb, 0x3d, 0x76, 0x7c, + 0xe6, 0xfc, 0xaf, 0x0e, 0x31, 0x61, 0xb1, 0xce, 0x68, 0xe9, 0xe3, 0xfe, 0x94, 0x1e, 0x71, 0xab, + 0x5b, 0xb0, 0xc0, 0x63, 0xd1, 0x02, 0xa4, 0xac, 0x16, 0x53, 0x2f, 0x65, 0xb5, 0xa2, 0x70, 0x7c, + 0x1f, 0x96, 0x78, 0x87, 0x60, 0x51, 0xf8, 0x12, 0x4c, 0xd3, 0x13, 0x62, 0x9a, 0x2c, 0xf0, 0x9a, + 0xe8, 0x0c, 0xab, 0xfd, 0x2e, 0x03, 0x79, 0xd1, 0xdf, 0xd1, 0x7d, 0xc8, 0x9e, 0x75, 0x9c, 0xe6, + 0x13, 0xc6, 0xfb, 0x62, 0x52, 0x60, 0x14, 0x77, 0x08, 0x15, 0x85, 0xee, 0x4f, 0xe9, 0x94, 0x89, + 0x70, 0x5f, 0x38, 0x3d, 0xdb, 0x67, 0x91, 0x99, 0xcc, 0x7d, 0x48, 0xa8, 0xfa, 0xdc, 0x01, 0x13, + 0xda, 0x85, 0x39, 0xea, 0x04, 0xc6, 0x85, 0xd3, 0xc2, 0x85, 0x74, 0x20, 0xe3, 0x76, 0xa2, 0x8c, + 0x52, 0x40, 0x7b, 0xe8, 0xb4, 0xb0, 0x0e, 0x66, 0xf4, 0x5f, 0x9d, 0x87, 0xb9, 0x98, 0x6e, 0xea, + 0x1e, 0xcc, 0xc5, 0x16, 0x43, 0xab, 0x30, 0x73, 0xee, 0x19, 0x51, 0x56, 0xcd, 0xe9, 0xd3, 0xe7, + 0x5e, 0x90, 0x28, 0x6f, 0xc2, 0x5c, 0xa0, 0x85, 0x71, 0xde, 0x31, 0xdb, 0xf4, 0x1e, 0xc8, 0xe9, + 0x10, 0x80, 0x3e, 0x20, 0x10, 0xf5, 0x5f, 0x0a, 0x40, 0x7f, 0x49, 0x74, 0x1f, 0x32, 0x81, 0x96, + 0x34, 0x37, 0xdf, 0x1d, 0x43, 0xcb, 0x62, 0xa0, 0x6a, 0xc0, 0xa5, 0x7d, 0xa6, 0x40, 0x26, 0x10, + 0x23, 0xe6, 0xe7, 0x7a, 0xb5, 0xb6, 0x77, 0x50, 0x31, 0x6a, 0x47, 0xbb, 0x15, 0xe3, 0x23, 0xbd, + 0xda, 0xa8, 0xe8, 0x79, 0x05, 0xad, 0xc3, 0x6a, 0x1c, 0xae, 0x57, 0x4a, 0xbb, 0x15, 0xdd, 0x38, + 0xaa, 0x1d, 0x3c, 0xcc, 0xa7, 0x90, 0x0a, 0x2b, 0x87, 0x27, 0x07, 0x8d, 0xea, 0x20, 0x2e, 0x8d, + 0x36, 0xa0, 0x10, 0xc3, 0x31, 0x19, 0x4c, 0x6c, 0x86, 0x88, 0x8d, 0x61, 0xe9, 0x5f, 0x86, 0xcc, + 0xee, 0xcc, 0x47, 0x87, 0x11, 0x38, 0xdb, 0x47, 0x30, 0xcf, 0xa5, 0x57, 0x52, 0x26, 0xb0, 0x10, + 0x6f, 0x19, 0x67, 0x57, 0x3e, 0xf6, 0x02, 0x4b, 0xa4, 0xf5, 0xf9, 0x10, 0xba, 0x43, 0x80, 0xc4, + 0xac, 0x1d, 0xeb, 0xc2, 0xf2, 0x19, 0x4d, 0x2a, 0xa0, 0x81, 0x00, 0x14, 0x10, 0x68, 0x7f, 0x49, + 0xc1, 0x34, 0x3b, 0x9b, 0x3b, 0xb1, 0x04, 0xcf, 0x89, 0x0c, 0xa1, 0x54, 0x24, 0x8d, 0x87, 0x54, + 0x18, 0x0f, 0xe8, 0x7d, 0x00, 0xd3, 0xf7, 0x5d, 0xeb, 0xac, 0xe7, 0x47, 0x09, 0xfd, 0x06, 0x7f, + 0x1e, 0xc5, 0x52, 0x44, 0xc0, 0x32, 0x70, 0x9f, 0x03, 0xed, 0xc0, 0x82, 0x90, 0x04, 0x33, 0xa3, + 0x93, 0xe0, 0x7c, 0x93, 0x8b, 0xff, 0x12, 0x2c, 0x86, 0xf9, 0xab, 0x83, 0x0d, 0x9f, 0xe5, 0x37, + 0x96, 0xbf, 0xf3, 0x03, 0x79, 0x0f, 0xf5, 0x89, 0x43, 0x18, 0xc9, 0x72, 0x82, 0x96, 0x13, 0x65, + 0xa6, 0x1e, 0x2c, 0x4a, 0xd2, 0x2a, 0x2a, 0x42, 0x2e, 0x38, 0x10, 0xcf, 0xf2, 0x89, 0xaf, 0xca, + 0xd5, 0xe9, 0x93, 0x10, 0xfa, 0xae, 0x8b, 0xcf, 0xb1, 0xeb, 0xe2, 0x16, 0x2b, 0x86, 0x24, 0xf4, + 0x11, 0x89, 0xf6, 0x73, 0x05, 0x66, 0x43, 0x38, 0x7a, 0x07, 0x66, 0x3d, 0xdc, 0xa6, 0x29, 0x5f, + 0xe1, 0xcf, 0x21, 0xa4, 0x29, 0xd6, 0x19, 0x01, 0x2b, 0x03, 0x43, 0x7a, 0x52, 0x06, 0x72, 0xa8, + 0x89, 0x36, 0xff, 0x6f, 0x05, 0x16, 0x77, 0x71, 0x07, 0x8b, 0x65, 0xc4, 0x3a, 0xe4, 0xd8, 0x35, + 0x17, 0x65, 0xd0, 0x59, 0x0a, 0xa8, 0xb6, 0x84, 0x9b, 0xb7, 0x15, 0xb0, 0x47, 0x37, 0x6f, 0x8a, + 0xbf, 0x79, 0x25, 0xc2, 0x63, 0x37, 0x2f, 0xc5, 0x26, 0xdd, 0xbc, 0x1c, 0x96, 0xbf, 0x8d, 0x06, + 0x19, 0x27, 0xda, 0xf6, 0x0a, 0x2c, 0xf1, 0x8a, 0xd1, 0x1b, 0x40, 0xfb, 0x53, 0x06, 0x6e, 0xf4, + 0x17, 0x39, 0xee, 0x9d, 0x75, 0x2c, 0xef, 0xf1, 0x04, 0x96, 0x59, 0x85, 0x19, 0xdb, 0x69, 0x05, + 0x28, 0xba, 0xe6, 0x34, 0x79, 0xac, 0xb6, 0x50, 0x05, 0xae, 0x8b, 0x45, 0xd4, 0x15, 0xcb, 0xd3, + 0xc9, 0x25, 0x54, 0xfe, 0x52, 0xbc, 0x64, 0x54, 0x98, 0x25, 0xe5, 0x9f, 0x63, 0x77, 0xae, 0x82, + 0x58, 0x9b, 0xd5, 0xa3, 0x67, 0xf4, 0x33, 0x05, 0xd4, 0xd8, 0xb1, 0x74, 0xa9, 0xf2, 0x42, 0x45, + 0xb4, 0x1b, 0x55, 0x44, 0x43, 0x77, 0x39, 0x88, 0xe6, 0xce, 0xa8, 0xd0, 0x4c, 0x40, 0x23, 0x2b, + 0xda, 0x67, 0x2c, 0xb3, 0x4c, 0x07, 0x4b, 0xdf, 0x1f, 0x73, 0x69, 0xfa, 0x24, 0xe6, 0x1d, 0x66, + 0x8b, 0x3e, 0x58, 0x7d, 0x00, 0x9b, 0x43, 0xb5, 0x9c, 0xa8, 0xd4, 0x29, 0xc3, 0xb2, 0x74, 0xdd, + 0x89, 0xbc, 0xea, 0xcf, 0x0a, 0xdc, 0x4c, 0xdc, 0x1c, 0xab, 0x31, 0x7e, 0x00, 0xd7, 0xc2, 0x93, + 0xb1, 0xec, 0x73, 0x87, 0x45, 0xfb, 0xdb, 0x23, 0x6d, 0xc3, 0x7a, 0x41, 0x06, 0x25, 0xfd, 0x21, + 0xb5, 0xcb, 0x5c, 0xb7, 0x0f, 0x51, 0xdf, 0x87, 0xbc, 0x48, 0x30, 0xd1, 0x06, 0xfe, 0x98, 0x82, + 0xad, 0xbe, 0x06, 0x27, 0x76, 0xf7, 0xf9, 0x05, 0xc0, 0xaf, 0x14, 0xd8, 0x88, 0x79, 0x67, 0xcf, + 0x16, 0xfd, 0x93, 0x5e, 0x3f, 0xfb, 0x83, 0x86, 0x90, 0xab, 0x21, 0x23, 0xe0, 0x7c, 0x34, 0x16, + 0x0b, 0x22, 0x81, 0x7a, 0x18, 0x3f, 0x27, 0x29, 0xfb, 0x44, 0x66, 0xbb, 0x0d, 0xb7, 0x86, 0xa8, + 0xcb, 0x52, 0xcb, 0x4f, 0xd3, 0x70, 0xeb, 0xd4, 0xec, 0x58, 0xad, 0xa8, 0xee, 0x94, 0xb4, 0xdd, + 0xc3, 0x8d, 0x9b, 0xd0, 0x89, 0xa5, 0xbe, 0x42, 0x27, 0xd6, 0x91, 0xc5, 0x29, 0x3d, 0x82, 0xef, + 0x46, 0x82, 0x46, 0x69, 0x3b, 0x6e, 0xa8, 0x26, 0x5d, 0xf2, 0x99, 0x09, 0x2e, 0xf9, 0xe7, 0x12, + 0xa0, 0x1f, 0x83, 0x36, 0x6c, 0x53, 0x2c, 0x44, 0x37, 0x20, 0xe7, 0xf5, 0xba, 0x5d, 0xc7, 0xf5, + 0x31, 0x3d, 0x83, 0x59, 0xbd, 0x0f, 0x40, 0x05, 0x98, 0xb9, 0xc0, 0x9e, 0x67, 0xb6, 0x43, 0xf9, + 0xe1, 0xa3, 0xf6, 0x31, 0xa0, 0x03, 0xcb, 0x63, 0xf5, 0x72, 0x74, 0xa2, 0xa4, 0x3c, 0x36, 0x9f, + 0x1a, 0xd8, 0xf6, 0x5d, 0x8b, 0x15, 0x66, 0x59, 0x1d, 0x2e, 0xcc, 0xa7, 0x15, 0x0a, 0x21, 0xc5, + 0x9b, 0xe7, 0x9b, 0xae, 0x6f, 0xd9, 0x6d, 0xc3, 0x77, 0x9e, 0xe0, 0x68, 0x6c, 0x14, 0x42, 0x1b, + 0x04, 0xa8, 0x7d, 0xae, 0xc0, 0x22, 0x27, 0x9e, 0x69, 0xfb, 0x2e, 0xcc, 0xf4, 0x65, 0x13, 0x7b, + 0xde, 0x0a, 0xed, 0x29, 0xa1, 0x2e, 0xd2, 0x13, 0x0a, 0x39, 0xd0, 0x26, 0x80, 0x8d, 0x9f, 0xfa, + 0xdc, 0xba, 0x39, 0x02, 0x09, 0xd6, 0x54, 0xef, 0x41, 0x96, 0x1a, 0x79, 0xdc, 0xce, 0xe8, 0x8b, + 0x14, 0xa0, 0x3d, 0xec, 0x47, 0x05, 0x2f, 0xb3, 0x41, 0x82, 0xe3, 0x2a, 0x5f, 0xc1, 0x71, 0x3f, + 0xe4, 0x46, 0x08, 0xd4, 0xf5, 0x5f, 0x8d, 0xcd, 0xcf, 0x84, 0xa5, 0x87, 0x4e, 0x10, 0x12, 0xdc, + 0x92, 0x5e, 0xcb, 0x63, 0xd7, 0x9e, 0xcf, 0xd0, 0x61, 0x6b, 0xbb, 0xb0, 0xc8, 0xe9, 0xcc, 0xce, + 0xf4, 0x75, 0x40, 0xe6, 0xa5, 0x69, 0x75, 0x4c, 0xa2, 0x57, 0x58, 0xc3, 0xb3, 0x9a, 0xfe, 0x7a, + 0x84, 0x09, 0xd9, 0x34, 0x2d, 0x9e, 0xb5, 0x99, 0x3c, 0x71, 0x9e, 0xd7, 0x89, 0xe7, 0xa8, 0x01, + 0x1a, 0xb6, 0xee, 0x9e, 0x74, 0xa6, 0x77, 0x7b, 0x30, 0x27, 0xb3, 0xb9, 0x59, 0xe2, 0x78, 0xef, + 0x6f, 0x29, 0x58, 0x1f, 0x42, 0x8d, 0xde, 0x85, 0xb4, 0xdb, 0x6d, 0x32, 0x67, 0x7a, 0x79, 0x0c, + 0xf9, 0x45, 0xfd, 0xb8, 0xbc, 0x3f, 0xa5, 0x13, 0x2e, 0xf5, 0x4b, 0x05, 0xd2, 0xfa, 0x71, 0x19, + 0x7d, 0x8f, 0x1b, 0xf2, 0xbd, 0x36, 0xa6, 0x94, 0xf8, 0xac, 0x8f, 0x34, 0x93, 0x83, 0xc3, 0xbe, + 0x02, 0x2c, 0x95, 0xf5, 0x4a, 0xa9, 0x51, 0x31, 0x76, 0x2b, 0x07, 0x95, 0x46, 0xc5, 0x38, 0x3d, + 0x3a, 0x38, 0x39, 0xac, 0xe4, 0x15, 0xd2, 0x15, 0x1e, 0x9f, 0xec, 0x1c, 0x54, 0xeb, 0xfb, 0xc6, + 0x49, 0x2d, 0xfc, 0xc7, 0xb0, 0x29, 0x94, 0x87, 0x6b, 0x07, 0xd5, 0x7a, 0x83, 0x01, 0xea, 0xf9, + 0x34, 0x81, 0xec, 0x55, 0x1a, 0x46, 0xb9, 0x74, 0x5c, 0x2a, 0x57, 0x1b, 0x0f, 0xf3, 0x19, 0xd2, + 0x73, 0xf2, 0xb2, 0xeb, 0xb5, 0xd2, 0x71, 0x7d, 0xff, 0xa8, 0x91, 0xcf, 0x22, 0x04, 0x0b, 0x01, + 0x7f, 0x08, 0xaa, 0xe7, 0xa7, 0xa3, 0x91, 0xc5, 0x67, 0x69, 0x58, 0x66, 0x13, 0x18, 0x36, 0xe3, + 0x08, 0x63, 0xeb, 0x2e, 0xe4, 0x69, 0xf3, 0x65, 0x88, 0x17, 0xc7, 0x02, 0x85, 0x9f, 0x86, 0xd7, + 0x47, 0x38, 0x1a, 0x4c, 0xc5, 0x46, 0x83, 0x5d, 0x58, 0x0d, 0x27, 0x67, 0x4c, 0xae, 0x70, 0x21, + 0x0b, 0x23, 0x34, 0x61, 0x75, 0x01, 0xca, 0x5d, 0xc0, 0xcb, 0x4d, 0x19, 0x0e, 0x1d, 0x4a, 0x66, + 0x80, 0xaf, 0x0f, 0x5f, 0x64, 0x48, 0x0c, 0xab, 0xfb, 0xa0, 0x26, 0xeb, 0x30, 0x51, 0x09, 0xf8, + 0x8c, 0xa1, 0xfc, 0x01, 0xac, 0x88, 0xda, 0xb3, 0xa8, 0x7a, 0x6d, 0x60, 0xc4, 0x15, 0xe5, 0x96, + 0x88, 0x36, 0xa2, 0xd0, 0xfe, 0xa0, 0xc0, 0x6c, 0x08, 0x26, 0xf9, 0xd9, 0xb3, 0x7e, 0x82, 0xb9, + 0xa6, 0x3e, 0x47, 0x20, 0xf2, 0x86, 0x5e, 0xe6, 0x0b, 0x69, 0xa9, 0x2f, 0x6c, 0x02, 0xd0, 0xe3, + 0x69, 0x19, 0xa6, 0x1f, 0xb4, 0x12, 0x69, 0x3d, 0xc7, 0x20, 0x25, 0xd2, 0xfc, 0x4e, 0x7b, 0xbe, + 0xe9, 0xf7, 0x48, 0xdb, 0x40, 0x14, 0x5e, 0x11, 0x15, 0xae, 0x07, 0x58, 0x9d, 0x51, 0x91, 0x40, + 0x5a, 0xe0, 0x51, 0xe8, 0x1e, 0x17, 0x9d, 0xeb, 0x72, 0x01, 0xb1, 0x60, 0x24, 0x17, 0x6b, 0x0b, + 0xfb, 0xa6, 0xd5, 0xf1, 0xc2, 0x8b, 0x95, 0x3d, 0x6a, 0x3b, 0xb2, 0x28, 0xcd, 0x41, 0x56, 0xaf, + 0x94, 0x76, 0x1f, 0xe6, 0x15, 0x34, 0x0f, 0xb9, 0x93, 0xe3, 0x83, 0xa3, 0xd2, 0x6e, 0xb5, 0xb6, + 0x97, 0x4f, 0xa1, 0x45, 0x78, 0xa1, 0xa2, 0xeb, 0x47, 0xba, 0xd1, 0x07, 0xa6, 0x49, 0xa3, 0xbb, + 0xcc, 0x9a, 0x46, 0x21, 0x80, 0x6e, 0xc2, 0x5c, 0xe4, 0xfb, 0x51, 0xec, 0x40, 0x08, 0xaa, 0xb6, + 0x48, 0x8c, 0x84, 0x3d, 0xae, 0x18, 0x23, 0xd2, 0x66, 0x57, 0x74, 0x5f, 0x1e, 0xca, 0xc7, 0x48, + 0x4b, 0x86, 0x23, 0x4e, 0x9d, 0xcc, 0x34, 0x91, 0x57, 0x16, 0x60, 0x45, 0x54, 0x8a, 0xd5, 0xa3, + 0xbf, 0x55, 0x60, 0x89, 0x54, 0x08, 0x21, 0xe2, 0x79, 0x17, 0x2c, 0x13, 0x38, 0xa3, 0x70, 0x02, + 0x19, 0xf1, 0x04, 0xb4, 0xdf, 0x2b, 0xb0, 0x2c, 0xe8, 0xca, 0x62, 0xeb, 0x3d, 0xb1, 0xfa, 0xb9, + 0x1d, 0xaf, 0x7e, 0x06, 0xe8, 0x27, 0xac, 0x7f, 0xde, 0x0c, 0xeb, 0x9f, 0xc9, 0x42, 0xf8, 0x37, + 0x59, 0x58, 0xa9, 0x39, 0x2d, 0x5c, 0xf7, 0xcd, 0xf6, 0x24, 0x73, 0x15, 0x5d, 0xe8, 0x0d, 0xa9, + 0x77, 0xdd, 0x0b, 0x57, 0x92, 0x8b, 0x1c, 0xde, 0x12, 0xa2, 0x22, 0x2c, 0x7a, 0xbe, 0xd9, 0x0e, + 0xce, 0xca, 0x74, 0xdb, 0xd8, 0x37, 0xba, 0xa6, 0xff, 0x98, 0x1d, 0xc4, 0x75, 0x86, 0x6a, 0x04, + 0x98, 0x63, 0xd3, 0x7f, 0x2c, 0x1f, 0x54, 0x64, 0x26, 0x1e, 0x54, 0x9c, 0x01, 0x0a, 0xfa, 0x40, + 0xb2, 0x80, 0xf8, 0x56, 0xe6, 0xdb, 0x23, 0x36, 0x14, 0x81, 0xb9, 0x50, 0xc9, 0xdb, 0x02, 0x18, + 0x99, 0xc9, 0xb3, 0x86, 0x51, 0x4b, 0x8c, 0x3b, 0x63, 0x78, 0xc6, 0x86, 0x9a, 0x74, 0x2d, 0xd2, + 0xdd, 0x7c, 0xfd, 0xb3, 0x89, 0x35, 0x58, 0x1d, 0xb0, 0x05, 0xcb, 0x04, 0x6d, 0x28, 0x10, 0xd4, + 0x89, 0xed, 0x4d, 0xe8, 0xaf, 0x09, 0xbe, 0x95, 0x4a, 0xf0, 0x2d, 0x6d, 0x1d, 0xd6, 0x24, 0x0b, + 0x31, 0x2d, 0xfe, 0x91, 0xa5, 0x6a, 0x4c, 0x3e, 0x74, 0x6b, 0x48, 0xc3, 0xe6, 0x9b, 0x71, 0x17, + 0x90, 0x0e, 0x9a, 0x9e, 0x6f, 0xe0, 0xdc, 0x84, 0xb9, 0x38, 0x1d, 0x4b, 0x62, 0xfe, 0x88, 0xc8, + 0xca, 0x3e, 0xd3, 0x08, 0x70, 0x5a, 0x18, 0x01, 0xfe, 0x08, 0x96, 0x82, 0xa8, 0x13, 0x67, 0x2b, + 0x33, 0xfc, 0x35, 0x95, 0x68, 0x91, 0x18, 0x82, 0x8b, 0xbd, 0x20, 0x96, 0x85, 0x49, 0x5f, 0x53, + 0x16, 0x7d, 0xb3, 0xc1, 0x42, 0x6f, 0x8d, 0x5c, 0xe8, 0xeb, 0x8a, 0xbf, 0x0a, 0xf5, 0xfa, 0xff, + 0x8b, 0xe9, 0x20, 0xf3, 0x7e, 0xe9, 0x5c, 0x4f, 0x7b, 0x04, 0x2a, 0x0d, 0x8d, 0xc9, 0x47, 0x6e, + 0x82, 0xe3, 0xa5, 0x44, 0xc7, 0xd3, 0x36, 0x61, 0x5d, 0x2a, 0x9b, 0x2d, 0x8d, 0x20, 0x4f, 0xd0, + 0x7b, 0xd8, 0xaf, 0xb6, 0xc2, 0x6e, 0xf1, 0x35, 0xb8, 0x1e, 0x83, 0xb1, 0xbb, 0x36, 0x36, 0xdb, + 0x53, 0xe2, 0xb3, 0x3d, 0x6d, 0x83, 0x2a, 0x9f, 0xd0, 0x79, 0x7e, 0x42, 0x97, 0x4f, 0xea, 0x39, + 0x4b, 0x42, 0xcf, 0x49, 0xaf, 0xf1, 0x4d, 0x2e, 0x81, 0x8f, 0xe8, 0x36, 0xff, 0xaa, 0xb0, 0x34, + 0x3b, 0xd0, 0x67, 0xbe, 0x19, 0xef, 0x33, 0x6f, 0x0d, 0x95, 0x19, 0xef, 0x30, 0xbb, 0xb4, 0xc1, + 0x7c, 0x87, 0x2b, 0x61, 0x5f, 0x1a, 0xc9, 0x1e, 0x6f, 0x2d, 0x5f, 0x4f, 0xe8, 0x2c, 0xeb, 0x8d, + 0xd2, 0x5e, 0xc5, 0x38, 0xa9, 0xd1, 0xdf, 0xb0, 0xb3, 0x8c, 0xfa, 0xbc, 0x25, 0x40, 0xa1, 0xe1, + 0x63, 0xdf, 0x21, 0x7d, 0xae, 0xc0, 0x22, 0x07, 0x1e, 0x71, 0x22, 0xe8, 0x1e, 0x2c, 0x91, 0x1a, + 0x8e, 0xfa, 0x88, 0x67, 0x74, 0xb1, 0x6b, 0x10, 0x0c, 0x7b, 0x8b, 0x78, 0xfd, 0xc2, 0x7c, 0xca, + 0x06, 0x43, 0xc7, 0xd8, 0x25, 0x82, 0x9f, 0xc3, 0x28, 0x64, 0xfb, 0x3f, 0x0a, 0xcc, 0x56, 0x5b, + 0xd8, 0xf6, 0x89, 0xe1, 0x6b, 0x30, 0xcf, 0x7d, 0xcc, 0x84, 0x36, 0x12, 0xbe, 0x71, 0x0a, 0x36, + 0xa8, 0x6e, 0x0e, 0xfd, 0x02, 0x4a, 0x9b, 0x42, 0xe7, 0xb1, 0x0f, 0xb1, 0xb8, 0x79, 0xd0, 0x8b, + 0x03, 0x9c, 0x12, 0x1f, 0x54, 0xef, 0x8c, 0xa0, 0x8a, 0xd6, 0x79, 0x0b, 0xb2, 0xc1, 0x97, 0x39, + 0x68, 0x29, 0xfa, 0x66, 0x28, 0xf6, 0xe1, 0x8e, 0xba, 0x2c, 0x40, 0x43, 0xbe, 0xed, 0xff, 0xce, + 0x00, 0xf4, 0x07, 0x0f, 0xe8, 0x01, 0x5c, 0x8b, 0x7f, 0x61, 0x80, 0xd6, 0x87, 0x7c, 0x88, 0xa2, + 0x6e, 0xc8, 0x91, 0x91, 0x4e, 0x0f, 0xe0, 0x5a, 0xfc, 0x65, 0x55, 0x5f, 0x98, 0xe4, 0xdd, 0x5a, + 0x5f, 0x98, 0xf4, 0xfd, 0xd6, 0x14, 0xea, 0xc0, 0x6a, 0xc2, 0x3b, 0x06, 0xf4, 0xd2, 0x78, 0x2f, + 0x68, 0xd4, 0x97, 0xc7, 0x7c, 0x59, 0xa1, 0x4d, 0x21, 0x17, 0xd6, 0x12, 0x27, 0xe3, 0xe8, 0xee, + 0xb8, 0xb3, 0x7e, 0xf5, 0x95, 0x31, 0x28, 0xa3, 0x35, 0x7b, 0xa0, 0x26, 0x0f, 0x79, 0xd1, 0x2b, + 0x63, 0x4f, 0xb7, 0xd5, 0x57, 0xc7, 0x21, 0x8d, 0x96, 0xdd, 0x87, 0xb9, 0xd8, 0xc0, 0x15, 0xa9, + 0xd2, 0x29, 0x2c, 0x15, 0xbc, 0x3e, 0x64, 0x42, 0x4b, 0x25, 0xc5, 0x86, 0x82, 0x7d, 0x49, 0x83, + 0xd3, 0xcd, 0xbe, 0x24, 0xc9, 0x14, 0x51, 0x34, 0xbf, 0x90, 0x80, 0x65, 0xe6, 0x97, 0x67, 0x70, + 0x99, 0xf9, 0x13, 0xb2, 0xb9, 0x36, 0x85, 0xbe, 0x0f, 0x0b, 0xfc, 0x1c, 0x04, 0x6d, 0x0e, 0x9d, + 0xee, 0xa8, 0x37, 0x92, 0xd0, 0x71, 0x91, 0x7c, 0x13, 0xdb, 0x17, 0x29, 0xed, 0xb8, 0xfb, 0x22, + 0x13, 0x7a, 0xdf, 0x29, 0x92, 0x9f, 0xb8, 0x06, 0xb1, 0x9f, 0x9f, 0x64, 0x3d, 0x71, 0x3f, 0x3f, + 0x49, 0xbb, 0x4a, 0x6d, 0x6a, 0xfb, 0xcb, 0x0c, 0x64, 0x82, 0x44, 0xda, 0x80, 0x17, 0x84, 0x3a, + 0x1b, 0xdd, 0x18, 0xde, 0x8c, 0xa8, 0x37, 0x13, 0xf1, 0x91, 0xba, 0x8f, 0xe8, 0x7d, 0xcc, 0x55, + 0xce, 0x68, 0x2b, 0xce, 0x27, 0xab, 0xde, 0xd5, 0x5b, 0x43, 0x28, 0x44, 0xd9, 0x7c, 0x2e, 0xd8, + 0x1a, 0x55, 0xc2, 0xf1, 0xb2, 0x93, 0xe2, 0xff, 0x13, 0x7a, 0x6f, 0x89, 0x91, 0xaf, 0xf1, 0x7a, + 0x49, 0x63, 0xfe, 0xf6, 0x50, 0x9a, 0x68, 0x85, 0x0a, 0xe4, 0xa2, 0x4a, 0x05, 0x15, 0xe2, 0x3c, + 0xf1, 0x82, 0x46, 0x5d, 0x93, 0x60, 0x98, 0x8c, 0xf4, 0x2f, 0x52, 0x4a, 0xa8, 0xa8, 0x18, 0x23, + 0x9a, 0xc0, 0x26, 0x8b, 0x8e, 0xdb, 0x43, 0x69, 0xe2, 0x51, 0x1d, 0xbb, 0xc2, 0xfb, 0x51, 0x3d, + 0x78, 0xdd, 0xf7, 0xa3, 0x5a, 0x72, 0xe7, 0x6b, 0x53, 0x3b, 0xd9, 0x47, 0xe9, 0xa6, 0x67, 0x9d, + 0x4d, 0x07, 0x1f, 0x87, 0x7e, 0xeb, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x3b, 0x5a, 0x51, + 0xf0, 0x2c, 0x00, 0x00, +} diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi10/csi.pb.go b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi10/csi.pb.go new file mode 100644 index 000000000..0652b822f --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi10/csi.pb.go @@ -0,0 +1,5277 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: github.com/container-storage-interface/spec/csi.proto + +package csi + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" +import timestamp "github.com/golang/protobuf/ptypes/timestamp" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type PluginCapability_Service_Type int32 + +const ( + PluginCapability_Service_UNKNOWN PluginCapability_Service_Type = 0 + // CONTROLLER_SERVICE indicates that the Plugin provides RPCs for + // the ControllerService. Plugins SHOULD provide this capability. + // In rare cases certain plugins MAY wish to omit the + // ControllerService entirely from their implementation, but such + // SHOULD NOT be the common case. + // The presence of this capability determines whether the CO will + // attempt to invoke the REQUIRED ControllerService RPCs, as well + // as specific RPCs as indicated by ControllerGetCapabilities. + PluginCapability_Service_CONTROLLER_SERVICE PluginCapability_Service_Type = 1 + // VOLUME_ACCESSIBILITY_CONSTRAINTS indicates that the volumes for + // this plugin MAY NOT be equally accessible by all nodes in the + // cluster. The CO MUST use the topology information returned by + // CreateVolumeRequest along with the topology information + // returned by NodeGetInfo to ensure that a given volume is + // accessible from a given node when scheduling workloads. + PluginCapability_Service_VOLUME_ACCESSIBILITY_CONSTRAINTS PluginCapability_Service_Type = 2 +) + +var PluginCapability_Service_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CONTROLLER_SERVICE", + 2: "VOLUME_ACCESSIBILITY_CONSTRAINTS", +} +var PluginCapability_Service_Type_value = map[string]int32{ + "UNKNOWN": 0, + "CONTROLLER_SERVICE": 1, + "VOLUME_ACCESSIBILITY_CONSTRAINTS": 2, +} + +func (x PluginCapability_Service_Type) String() string { + return proto.EnumName(PluginCapability_Service_Type_name, int32(x)) +} +func (PluginCapability_Service_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{4, 0, 0} +} + +type VolumeCapability_AccessMode_Mode int32 + +const ( + VolumeCapability_AccessMode_UNKNOWN VolumeCapability_AccessMode_Mode = 0 + // Can only be published once as read/write on a single node, at + // any given time. + VolumeCapability_AccessMode_SINGLE_NODE_WRITER VolumeCapability_AccessMode_Mode = 1 + // Can only be published once as readonly on a single node, at + // any given time. + VolumeCapability_AccessMode_SINGLE_NODE_READER_ONLY VolumeCapability_AccessMode_Mode = 2 + // Can be published as readonly at multiple nodes simultaneously. + VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY VolumeCapability_AccessMode_Mode = 3 + // Can be published at multiple nodes simultaneously. Only one of + // the node can be used as read/write. The rest will be readonly. + VolumeCapability_AccessMode_MULTI_NODE_SINGLE_WRITER VolumeCapability_AccessMode_Mode = 4 + // Can be published as read/write at multiple nodes + // simultaneously. + VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER VolumeCapability_AccessMode_Mode = 5 +) + +var VolumeCapability_AccessMode_Mode_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SINGLE_NODE_WRITER", + 2: "SINGLE_NODE_READER_ONLY", + 3: "MULTI_NODE_READER_ONLY", + 4: "MULTI_NODE_SINGLE_WRITER", + 5: "MULTI_NODE_MULTI_WRITER", +} +var VolumeCapability_AccessMode_Mode_value = map[string]int32{ + "UNKNOWN": 0, + "SINGLE_NODE_WRITER": 1, + "SINGLE_NODE_READER_ONLY": 2, + "MULTI_NODE_READER_ONLY": 3, + "MULTI_NODE_SINGLE_WRITER": 4, + "MULTI_NODE_MULTI_WRITER": 5, +} + +func (x VolumeCapability_AccessMode_Mode) String() string { + return proto.EnumName(VolumeCapability_AccessMode_Mode_name, int32(x)) +} +func (VolumeCapability_AccessMode_Mode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{10, 2, 0} +} + +type ControllerServiceCapability_RPC_Type int32 + +const ( + ControllerServiceCapability_RPC_UNKNOWN ControllerServiceCapability_RPC_Type = 0 + ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME ControllerServiceCapability_RPC_Type = 1 + ControllerServiceCapability_RPC_PUBLISH_UNPUBLISH_VOLUME ControllerServiceCapability_RPC_Type = 2 + ControllerServiceCapability_RPC_LIST_VOLUMES ControllerServiceCapability_RPC_Type = 3 + ControllerServiceCapability_RPC_GET_CAPACITY ControllerServiceCapability_RPC_Type = 4 + // Currently the only way to consume a snapshot is to create + // a volume from it. Therefore plugins supporting + // CREATE_DELETE_SNAPSHOT MUST support creating volume from + // snapshot. + ControllerServiceCapability_RPC_CREATE_DELETE_SNAPSHOT ControllerServiceCapability_RPC_Type = 5 + ControllerServiceCapability_RPC_LIST_SNAPSHOTS ControllerServiceCapability_RPC_Type = 6 + // Plugins supporting volume cloning at the storage level MAY + // report this capability. The source volume MUST be managed by + // the same plugin. Not all volume sources and parameters + // combinations MAY work. + ControllerServiceCapability_RPC_CLONE_VOLUME ControllerServiceCapability_RPC_Type = 7 + // Indicates the SP supports ControllerPublishVolume.readonly + // field. + ControllerServiceCapability_RPC_PUBLISH_READONLY ControllerServiceCapability_RPC_Type = 8 +) + +var ControllerServiceCapability_RPC_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CREATE_DELETE_VOLUME", + 2: "PUBLISH_UNPUBLISH_VOLUME", + 3: "LIST_VOLUMES", + 4: "GET_CAPACITY", + 5: "CREATE_DELETE_SNAPSHOT", + 6: "LIST_SNAPSHOTS", + 7: "CLONE_VOLUME", + 8: "PUBLISH_READONLY", +} +var ControllerServiceCapability_RPC_Type_value = map[string]int32{ + "UNKNOWN": 0, + "CREATE_DELETE_VOLUME": 1, + "PUBLISH_UNPUBLISH_VOLUME": 2, + "LIST_VOLUMES": 3, + "GET_CAPACITY": 4, + "CREATE_DELETE_SNAPSHOT": 5, + "LIST_SNAPSHOTS": 6, + "CLONE_VOLUME": 7, + "PUBLISH_READONLY": 8, +} + +func (x ControllerServiceCapability_RPC_Type) String() string { + return proto.EnumName(ControllerServiceCapability_RPC_Type_name, int32(x)) +} +func (ControllerServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{29, 0, 0} +} + +type VolumeUsage_Unit int32 + +const ( + VolumeUsage_UNKNOWN VolumeUsage_Unit = 0 + VolumeUsage_BYTES VolumeUsage_Unit = 1 + VolumeUsage_INODES VolumeUsage_Unit = 2 +) + +var VolumeUsage_Unit_name = map[int32]string{ + 0: "UNKNOWN", + 1: "BYTES", + 2: "INODES", +} +var VolumeUsage_Unit_value = map[string]int32{ + "UNKNOWN": 0, + "BYTES": 1, + "INODES": 2, +} + +func (x VolumeUsage_Unit) String() string { + return proto.EnumName(VolumeUsage_Unit_name, int32(x)) +} +func (VolumeUsage_Unit) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{47, 0} +} + +type NodeServiceCapability_RPC_Type int32 + +const ( + NodeServiceCapability_RPC_UNKNOWN NodeServiceCapability_RPC_Type = 0 + NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME NodeServiceCapability_RPC_Type = 1 + // If Plugin implements GET_VOLUME_STATS capability + // then it MUST implement NodeGetVolumeStats RPC + // call for fetching volume statistics. + NodeServiceCapability_RPC_GET_VOLUME_STATS NodeServiceCapability_RPC_Type = 2 +) + +var NodeServiceCapability_RPC_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "STAGE_UNSTAGE_VOLUME", + 2: "GET_VOLUME_STATS", +} +var NodeServiceCapability_RPC_Type_value = map[string]int32{ + "UNKNOWN": 0, + "STAGE_UNSTAGE_VOLUME": 1, + "GET_VOLUME_STATS": 2, +} + +func (x NodeServiceCapability_RPC_Type) String() string { + return proto.EnumName(NodeServiceCapability_RPC_Type_name, int32(x)) +} +func (NodeServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{50, 0, 0} +} + +type GetPluginInfoRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginInfoRequest) Reset() { *m = GetPluginInfoRequest{} } +func (m *GetPluginInfoRequest) String() string { return proto.CompactTextString(m) } +func (*GetPluginInfoRequest) ProtoMessage() {} +func (*GetPluginInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{0} +} +func (m *GetPluginInfoRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginInfoRequest.Unmarshal(m, b) +} +func (m *GetPluginInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginInfoRequest.Marshal(b, m, deterministic) +} +func (dst *GetPluginInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginInfoRequest.Merge(dst, src) +} +func (m *GetPluginInfoRequest) XXX_Size() int { + return xxx_messageInfo_GetPluginInfoRequest.Size(m) +} +func (m *GetPluginInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginInfoRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginInfoRequest proto.InternalMessageInfo + +type GetPluginInfoResponse struct { + // The name MUST follow domain name notation format + // (https://tools.ietf.org/html/rfc1035#section-2.3.1). It SHOULD + // include the plugin's host company name and the plugin name, + // to minimize the possibility of collisions. It MUST be 63 + // characters or less, beginning and ending with an alphanumeric + // character ([a-z0-9A-Z]) with dashes (-), dots (.), and + // alphanumerics between. This field is REQUIRED. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // This field is REQUIRED. Value of this field is opaque to the CO. + VendorVersion string `protobuf:"bytes,2,opt,name=vendor_version,json=vendorVersion,proto3" json:"vendor_version,omitempty"` + // This field is OPTIONAL. Values are opaque to the CO. + Manifest map[string]string `protobuf:"bytes,3,rep,name=manifest,proto3" json:"manifest,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginInfoResponse) Reset() { *m = GetPluginInfoResponse{} } +func (m *GetPluginInfoResponse) String() string { return proto.CompactTextString(m) } +func (*GetPluginInfoResponse) ProtoMessage() {} +func (*GetPluginInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{1} +} +func (m *GetPluginInfoResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginInfoResponse.Unmarshal(m, b) +} +func (m *GetPluginInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginInfoResponse.Marshal(b, m, deterministic) +} +func (dst *GetPluginInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginInfoResponse.Merge(dst, src) +} +func (m *GetPluginInfoResponse) XXX_Size() int { + return xxx_messageInfo_GetPluginInfoResponse.Size(m) +} +func (m *GetPluginInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginInfoResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginInfoResponse proto.InternalMessageInfo + +func (m *GetPluginInfoResponse) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetPluginInfoResponse) GetVendorVersion() string { + if m != nil { + return m.VendorVersion + } + return "" +} + +func (m *GetPluginInfoResponse) GetManifest() map[string]string { + if m != nil { + return m.Manifest + } + return nil +} + +type GetPluginCapabilitiesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginCapabilitiesRequest) Reset() { *m = GetPluginCapabilitiesRequest{} } +func (m *GetPluginCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*GetPluginCapabilitiesRequest) ProtoMessage() {} +func (*GetPluginCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{2} +} +func (m *GetPluginCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginCapabilitiesRequest.Unmarshal(m, b) +} +func (m *GetPluginCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *GetPluginCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginCapabilitiesRequest.Merge(dst, src) +} +func (m *GetPluginCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_GetPluginCapabilitiesRequest.Size(m) +} +func (m *GetPluginCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginCapabilitiesRequest proto.InternalMessageInfo + +type GetPluginCapabilitiesResponse struct { + // All the capabilities that the controller service supports. This + // field is OPTIONAL. + Capabilities []*PluginCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginCapabilitiesResponse) Reset() { *m = GetPluginCapabilitiesResponse{} } +func (m *GetPluginCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*GetPluginCapabilitiesResponse) ProtoMessage() {} +func (*GetPluginCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{3} +} +func (m *GetPluginCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginCapabilitiesResponse.Unmarshal(m, b) +} +func (m *GetPluginCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *GetPluginCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginCapabilitiesResponse.Merge(dst, src) +} +func (m *GetPluginCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_GetPluginCapabilitiesResponse.Size(m) +} +func (m *GetPluginCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginCapabilitiesResponse proto.InternalMessageInfo + +func (m *GetPluginCapabilitiesResponse) GetCapabilities() []*PluginCapability { + if m != nil { + return m.Capabilities + } + return nil +} + +// Specifies a capability of the plugin. +type PluginCapability struct { + // Types that are valid to be assigned to Type: + // *PluginCapability_Service_ + Type isPluginCapability_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginCapability) Reset() { *m = PluginCapability{} } +func (m *PluginCapability) String() string { return proto.CompactTextString(m) } +func (*PluginCapability) ProtoMessage() {} +func (*PluginCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{4} +} +func (m *PluginCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PluginCapability.Unmarshal(m, b) +} +func (m *PluginCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PluginCapability.Marshal(b, m, deterministic) +} +func (dst *PluginCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginCapability.Merge(dst, src) +} +func (m *PluginCapability) XXX_Size() int { + return xxx_messageInfo_PluginCapability.Size(m) +} +func (m *PluginCapability) XXX_DiscardUnknown() { + xxx_messageInfo_PluginCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginCapability proto.InternalMessageInfo + +type isPluginCapability_Type interface { + isPluginCapability_Type() +} + +type PluginCapability_Service_ struct { + Service *PluginCapability_Service `protobuf:"bytes,1,opt,name=service,proto3,oneof"` +} + +func (*PluginCapability_Service_) isPluginCapability_Type() {} + +func (m *PluginCapability) GetType() isPluginCapability_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *PluginCapability) GetService() *PluginCapability_Service { + if x, ok := m.GetType().(*PluginCapability_Service_); ok { + return x.Service + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PluginCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PluginCapability_OneofMarshaler, _PluginCapability_OneofUnmarshaler, _PluginCapability_OneofSizer, []interface{}{ + (*PluginCapability_Service_)(nil), + } +} + +func _PluginCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PluginCapability) + // type + switch x := m.Type.(type) { + case *PluginCapability_Service_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Service); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PluginCapability.Type has unexpected type %T", x) + } + return nil +} + +func _PluginCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PluginCapability) + switch tag { + case 1: // type.service + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PluginCapability_Service) + err := b.DecodeMessage(msg) + m.Type = &PluginCapability_Service_{msg} + return true, err + default: + return false, nil + } +} + +func _PluginCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PluginCapability) + // type + switch x := m.Type.(type) { + case *PluginCapability_Service_: + s := proto.Size(x.Service) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type PluginCapability_Service struct { + Type PluginCapability_Service_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.PluginCapability_Service_Type" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginCapability_Service) Reset() { *m = PluginCapability_Service{} } +func (m *PluginCapability_Service) String() string { return proto.CompactTextString(m) } +func (*PluginCapability_Service) ProtoMessage() {} +func (*PluginCapability_Service) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{4, 0} +} +func (m *PluginCapability_Service) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PluginCapability_Service.Unmarshal(m, b) +} +func (m *PluginCapability_Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PluginCapability_Service.Marshal(b, m, deterministic) +} +func (dst *PluginCapability_Service) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginCapability_Service.Merge(dst, src) +} +func (m *PluginCapability_Service) XXX_Size() int { + return xxx_messageInfo_PluginCapability_Service.Size(m) +} +func (m *PluginCapability_Service) XXX_DiscardUnknown() { + xxx_messageInfo_PluginCapability_Service.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginCapability_Service proto.InternalMessageInfo + +func (m *PluginCapability_Service) GetType() PluginCapability_Service_Type { + if m != nil { + return m.Type + } + return PluginCapability_Service_UNKNOWN +} + +type ProbeRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ProbeRequest) Reset() { *m = ProbeRequest{} } +func (m *ProbeRequest) String() string { return proto.CompactTextString(m) } +func (*ProbeRequest) ProtoMessage() {} +func (*ProbeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{5} +} +func (m *ProbeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ProbeRequest.Unmarshal(m, b) +} +func (m *ProbeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ProbeRequest.Marshal(b, m, deterministic) +} +func (dst *ProbeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProbeRequest.Merge(dst, src) +} +func (m *ProbeRequest) XXX_Size() int { + return xxx_messageInfo_ProbeRequest.Size(m) +} +func (m *ProbeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ProbeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ProbeRequest proto.InternalMessageInfo + +type ProbeResponse struct { + // Readiness allows a plugin to report its initialization status back + // to the CO. Initialization for some plugins MAY be time consuming + // and it is important for a CO to distinguish between the following + // cases: + // + // 1) The plugin is in an unhealthy state and MAY need restarting. In + // this case a gRPC error code SHALL be returned. + // 2) The plugin is still initializing, but is otherwise perfectly + // healthy. In this case a successful response SHALL be returned + // with a readiness value of `false`. Calls to the plugin's + // Controller and/or Node services MAY fail due to an incomplete + // initialization state. + // 3) The plugin has finished initializing and is ready to service + // calls to its Controller and/or Node services. A successful + // response is returned with a readiness value of `true`. + // + // This field is OPTIONAL. If not present, the caller SHALL assume + // that the plugin is in a ready state and is accepting calls to its + // Controller and/or Node services (according to the plugin's reported + // capabilities). + Ready *wrappers.BoolValue `protobuf:"bytes,1,opt,name=ready,proto3" json:"ready,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ProbeResponse) Reset() { *m = ProbeResponse{} } +func (m *ProbeResponse) String() string { return proto.CompactTextString(m) } +func (*ProbeResponse) ProtoMessage() {} +func (*ProbeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{6} +} +func (m *ProbeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ProbeResponse.Unmarshal(m, b) +} +func (m *ProbeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ProbeResponse.Marshal(b, m, deterministic) +} +func (dst *ProbeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProbeResponse.Merge(dst, src) +} +func (m *ProbeResponse) XXX_Size() int { + return xxx_messageInfo_ProbeResponse.Size(m) +} +func (m *ProbeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ProbeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ProbeResponse proto.InternalMessageInfo + +func (m *ProbeResponse) GetReady() *wrappers.BoolValue { + if m != nil { + return m.Ready + } + return nil +} + +type CreateVolumeRequest struct { + // The suggested name for the storage space. This field is REQUIRED. + // It serves two purposes: + // 1) Idempotency - This name is generated by the CO to achieve + // idempotency. The Plugin SHOULD ensure that multiple + // `CreateVolume` calls for the same name do not result in more + // than one piece of storage provisioned corresponding to that + // name. If a Plugin is unable to enforce idempotency, the CO's + // error recovery logic could result in multiple (unused) volumes + // being provisioned. + // In the case of error, the CO MUST handle the gRPC error codes + // per the recovery behavior defined in the "CreateVolume Errors" + // section below. + // The CO is responsible for cleaning up volumes it provisioned + // that it no longer needs. If the CO is uncertain whether a volume + // was provisioned or not when a `CreateVolume` call fails, the CO + // MAY call `CreateVolume` again, with the same name, to ensure the + // volume exists and to retrieve the volume's `volume_id` (unless + // otherwise prohibited by "CreateVolume Errors"). + // 2) Suggested name - Some storage systems allow callers to specify + // an identifier by which to refer to the newly provisioned + // storage. If a storage system supports this, it can optionally + // use this name as the identifier for the new volume. + // Any Unicode string that conforms to the length limit is allowed + // except those containing the following banned characters: + // U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F. + // (These are control characters other than commonly used whitespace.) + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // This field is OPTIONAL. This allows the CO to specify the capacity + // requirement of the volume to be provisioned. If not specified, the + // Plugin MAY choose an implementation-defined capacity range. If + // specified it MUST always be honored, even when creating volumes + // from a source; which MAY force some backends to internally extend + // the volume after creating it. + CapacityRange *CapacityRange `protobuf:"bytes,2,opt,name=capacity_range,json=capacityRange,proto3" json:"capacity_range,omitempty"` + // The capabilities that the provisioned volume MUST have. SP MUST + // provision a volume that will satisfy ALL of the capabilities + // specified in this list. Otherwise SP MUST return the appropriate + // gRPC error code. + // The Plugin MUST assume that the CO MAY use the provisioned volume + // with ANY of the capabilities specified in this list. + // For example, a CO MAY specify two volume capabilities: one with + // access mode SINGLE_NODE_WRITER and another with access mode + // MULTI_NODE_READER_ONLY. In this case, the SP MUST verify that the + // provisioned volume can be used in either mode. + // This also enables the CO to do early validation: If ANY of the + // specified volume capabilities are not supported by the SP, the call + // MUST return the appropriate gRPC error code. + // This field is REQUIRED. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,3,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"` + // Plugin specific parameters passed in as opaque key-value pairs. + // This field is OPTIONAL. The Plugin is responsible for parsing and + // validating these parameters. COs will treat these as opaque. + Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Secrets required by plugin to complete volume creation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // If specified, the new volume will be pre-populated with data from + // this source. This field is OPTIONAL. + VolumeContentSource *VolumeContentSource `protobuf:"bytes,6,opt,name=volume_content_source,json=volumeContentSource,proto3" json:"volume_content_source,omitempty"` + // Specifies where (regions, zones, racks, etc.) the provisioned + // volume MUST be accessible from. + // An SP SHALL advertise the requirements for topological + // accessibility information in documentation. COs SHALL only specify + // topological accessibility information supported by the SP. + // This field is OPTIONAL. + // This field SHALL NOT be specified unless the SP has the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // If this field is not specified and the SP has the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability, the SP MAY + // choose where the provisioned volume is accessible from. + AccessibilityRequirements *TopologyRequirement `protobuf:"bytes,7,opt,name=accessibility_requirements,json=accessibilityRequirements,proto3" json:"accessibility_requirements,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateVolumeRequest) Reset() { *m = CreateVolumeRequest{} } +func (m *CreateVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*CreateVolumeRequest) ProtoMessage() {} +func (*CreateVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{7} +} +func (m *CreateVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateVolumeRequest.Unmarshal(m, b) +} +func (m *CreateVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *CreateVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateVolumeRequest.Merge(dst, src) +} +func (m *CreateVolumeRequest) XXX_Size() int { + return xxx_messageInfo_CreateVolumeRequest.Size(m) +} +func (m *CreateVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CreateVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateVolumeRequest proto.InternalMessageInfo + +func (m *CreateVolumeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateVolumeRequest) GetCapacityRange() *CapacityRange { + if m != nil { + return m.CapacityRange + } + return nil +} + +func (m *CreateVolumeRequest) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *CreateVolumeRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *CreateVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +func (m *CreateVolumeRequest) GetVolumeContentSource() *VolumeContentSource { + if m != nil { + return m.VolumeContentSource + } + return nil +} + +func (m *CreateVolumeRequest) GetAccessibilityRequirements() *TopologyRequirement { + if m != nil { + return m.AccessibilityRequirements + } + return nil +} + +// Specifies what source the volume will be created from. One of the +// type fields MUST be specified. +type VolumeContentSource struct { + // Types that are valid to be assigned to Type: + // *VolumeContentSource_Snapshot + // *VolumeContentSource_Volume + Type isVolumeContentSource_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeContentSource) Reset() { *m = VolumeContentSource{} } +func (m *VolumeContentSource) String() string { return proto.CompactTextString(m) } +func (*VolumeContentSource) ProtoMessage() {} +func (*VolumeContentSource) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{8} +} +func (m *VolumeContentSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeContentSource.Unmarshal(m, b) +} +func (m *VolumeContentSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeContentSource.Marshal(b, m, deterministic) +} +func (dst *VolumeContentSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeContentSource.Merge(dst, src) +} +func (m *VolumeContentSource) XXX_Size() int { + return xxx_messageInfo_VolumeContentSource.Size(m) +} +func (m *VolumeContentSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeContentSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeContentSource proto.InternalMessageInfo + +type isVolumeContentSource_Type interface { + isVolumeContentSource_Type() +} + +type VolumeContentSource_Snapshot struct { + Snapshot *VolumeContentSource_SnapshotSource `protobuf:"bytes,1,opt,name=snapshot,proto3,oneof"` +} + +type VolumeContentSource_Volume struct { + Volume *VolumeContentSource_VolumeSource `protobuf:"bytes,2,opt,name=volume,proto3,oneof"` +} + +func (*VolumeContentSource_Snapshot) isVolumeContentSource_Type() {} + +func (*VolumeContentSource_Volume) isVolumeContentSource_Type() {} + +func (m *VolumeContentSource) GetType() isVolumeContentSource_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *VolumeContentSource) GetSnapshot() *VolumeContentSource_SnapshotSource { + if x, ok := m.GetType().(*VolumeContentSource_Snapshot); ok { + return x.Snapshot + } + return nil +} + +func (m *VolumeContentSource) GetVolume() *VolumeContentSource_VolumeSource { + if x, ok := m.GetType().(*VolumeContentSource_Volume); ok { + return x.Volume + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*VolumeContentSource) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _VolumeContentSource_OneofMarshaler, _VolumeContentSource_OneofUnmarshaler, _VolumeContentSource_OneofSizer, []interface{}{ + (*VolumeContentSource_Snapshot)(nil), + (*VolumeContentSource_Volume)(nil), + } +} + +func _VolumeContentSource_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*VolumeContentSource) + // type + switch x := m.Type.(type) { + case *VolumeContentSource_Snapshot: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Snapshot); err != nil { + return err + } + case *VolumeContentSource_Volume: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Volume); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("VolumeContentSource.Type has unexpected type %T", x) + } + return nil +} + +func _VolumeContentSource_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*VolumeContentSource) + switch tag { + case 1: // type.snapshot + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeContentSource_SnapshotSource) + err := b.DecodeMessage(msg) + m.Type = &VolumeContentSource_Snapshot{msg} + return true, err + case 2: // type.volume + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeContentSource_VolumeSource) + err := b.DecodeMessage(msg) + m.Type = &VolumeContentSource_Volume{msg} + return true, err + default: + return false, nil + } +} + +func _VolumeContentSource_OneofSizer(msg proto.Message) (n int) { + m := msg.(*VolumeContentSource) + // type + switch x := m.Type.(type) { + case *VolumeContentSource_Snapshot: + s := proto.Size(x.Snapshot) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *VolumeContentSource_Volume: + s := proto.Size(x.Volume) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type VolumeContentSource_SnapshotSource struct { + // Contains identity information for the existing source snapshot. + // This field is REQUIRED. Plugin is REQUIRED to support creating + // volume from snapshot if it supports the capability + // CREATE_DELETE_SNAPSHOT. + SnapshotId string `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeContentSource_SnapshotSource) Reset() { *m = VolumeContentSource_SnapshotSource{} } +func (m *VolumeContentSource_SnapshotSource) String() string { return proto.CompactTextString(m) } +func (*VolumeContentSource_SnapshotSource) ProtoMessage() {} +func (*VolumeContentSource_SnapshotSource) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{8, 0} +} +func (m *VolumeContentSource_SnapshotSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeContentSource_SnapshotSource.Unmarshal(m, b) +} +func (m *VolumeContentSource_SnapshotSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeContentSource_SnapshotSource.Marshal(b, m, deterministic) +} +func (dst *VolumeContentSource_SnapshotSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeContentSource_SnapshotSource.Merge(dst, src) +} +func (m *VolumeContentSource_SnapshotSource) XXX_Size() int { + return xxx_messageInfo_VolumeContentSource_SnapshotSource.Size(m) +} +func (m *VolumeContentSource_SnapshotSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeContentSource_SnapshotSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeContentSource_SnapshotSource proto.InternalMessageInfo + +func (m *VolumeContentSource_SnapshotSource) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +type VolumeContentSource_VolumeSource struct { + // Contains identity information for the existing source volume. + // This field is REQUIRED. Plugins reporting CLONE_VOLUME + // capability MUST support creating a volume from another volume. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeContentSource_VolumeSource) Reset() { *m = VolumeContentSource_VolumeSource{} } +func (m *VolumeContentSource_VolumeSource) String() string { return proto.CompactTextString(m) } +func (*VolumeContentSource_VolumeSource) ProtoMessage() {} +func (*VolumeContentSource_VolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{8, 1} +} +func (m *VolumeContentSource_VolumeSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeContentSource_VolumeSource.Unmarshal(m, b) +} +func (m *VolumeContentSource_VolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeContentSource_VolumeSource.Marshal(b, m, deterministic) +} +func (dst *VolumeContentSource_VolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeContentSource_VolumeSource.Merge(dst, src) +} +func (m *VolumeContentSource_VolumeSource) XXX_Size() int { + return xxx_messageInfo_VolumeContentSource_VolumeSource.Size(m) +} +func (m *VolumeContentSource_VolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeContentSource_VolumeSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeContentSource_VolumeSource proto.InternalMessageInfo + +func (m *VolumeContentSource_VolumeSource) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +type CreateVolumeResponse struct { + // Contains all attributes of the newly created volume that are + // relevant to the CO along with information required by the Plugin + // to uniquely identify the volume. This field is REQUIRED. + Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateVolumeResponse) Reset() { *m = CreateVolumeResponse{} } +func (m *CreateVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*CreateVolumeResponse) ProtoMessage() {} +func (*CreateVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{9} +} +func (m *CreateVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateVolumeResponse.Unmarshal(m, b) +} +func (m *CreateVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *CreateVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateVolumeResponse.Merge(dst, src) +} +func (m *CreateVolumeResponse) XXX_Size() int { + return xxx_messageInfo_CreateVolumeResponse.Size(m) +} +func (m *CreateVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_CreateVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateVolumeResponse proto.InternalMessageInfo + +func (m *CreateVolumeResponse) GetVolume() *Volume { + if m != nil { + return m.Volume + } + return nil +} + +// Specify a capability of a volume. +type VolumeCapability struct { + // Specifies what API the volume will be accessed using. One of the + // following fields MUST be specified. + // + // Types that are valid to be assigned to AccessType: + // *VolumeCapability_Block + // *VolumeCapability_Mount + AccessType isVolumeCapability_AccessType `protobuf_oneof:"access_type"` + // This is a REQUIRED field. + AccessMode *VolumeCapability_AccessMode `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability) Reset() { *m = VolumeCapability{} } +func (m *VolumeCapability) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability) ProtoMessage() {} +func (*VolumeCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{10} +} +func (m *VolumeCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability.Unmarshal(m, b) +} +func (m *VolumeCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability.Merge(dst, src) +} +func (m *VolumeCapability) XXX_Size() int { + return xxx_messageInfo_VolumeCapability.Size(m) +} +func (m *VolumeCapability) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability proto.InternalMessageInfo + +type isVolumeCapability_AccessType interface { + isVolumeCapability_AccessType() +} + +type VolumeCapability_Block struct { + Block *VolumeCapability_BlockVolume `protobuf:"bytes,1,opt,name=block,proto3,oneof"` +} + +type VolumeCapability_Mount struct { + Mount *VolumeCapability_MountVolume `protobuf:"bytes,2,opt,name=mount,proto3,oneof"` +} + +func (*VolumeCapability_Block) isVolumeCapability_AccessType() {} + +func (*VolumeCapability_Mount) isVolumeCapability_AccessType() {} + +func (m *VolumeCapability) GetAccessType() isVolumeCapability_AccessType { + if m != nil { + return m.AccessType + } + return nil +} + +func (m *VolumeCapability) GetBlock() *VolumeCapability_BlockVolume { + if x, ok := m.GetAccessType().(*VolumeCapability_Block); ok { + return x.Block + } + return nil +} + +func (m *VolumeCapability) GetMount() *VolumeCapability_MountVolume { + if x, ok := m.GetAccessType().(*VolumeCapability_Mount); ok { + return x.Mount + } + return nil +} + +func (m *VolumeCapability) GetAccessMode() *VolumeCapability_AccessMode { + if m != nil { + return m.AccessMode + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*VolumeCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _VolumeCapability_OneofMarshaler, _VolumeCapability_OneofUnmarshaler, _VolumeCapability_OneofSizer, []interface{}{ + (*VolumeCapability_Block)(nil), + (*VolumeCapability_Mount)(nil), + } +} + +func _VolumeCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*VolumeCapability) + // access_type + switch x := m.AccessType.(type) { + case *VolumeCapability_Block: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Block); err != nil { + return err + } + case *VolumeCapability_Mount: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Mount); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("VolumeCapability.AccessType has unexpected type %T", x) + } + return nil +} + +func _VolumeCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*VolumeCapability) + switch tag { + case 1: // access_type.block + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeCapability_BlockVolume) + err := b.DecodeMessage(msg) + m.AccessType = &VolumeCapability_Block{msg} + return true, err + case 2: // access_type.mount + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeCapability_MountVolume) + err := b.DecodeMessage(msg) + m.AccessType = &VolumeCapability_Mount{msg} + return true, err + default: + return false, nil + } +} + +func _VolumeCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*VolumeCapability) + // access_type + switch x := m.AccessType.(type) { + case *VolumeCapability_Block: + s := proto.Size(x.Block) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *VolumeCapability_Mount: + s := proto.Size(x.Mount) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Indicate that the volume will be accessed via the block device API. +type VolumeCapability_BlockVolume struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability_BlockVolume) Reset() { *m = VolumeCapability_BlockVolume{} } +func (m *VolumeCapability_BlockVolume) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_BlockVolume) ProtoMessage() {} +func (*VolumeCapability_BlockVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{10, 0} +} +func (m *VolumeCapability_BlockVolume) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability_BlockVolume.Unmarshal(m, b) +} +func (m *VolumeCapability_BlockVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability_BlockVolume.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability_BlockVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability_BlockVolume.Merge(dst, src) +} +func (m *VolumeCapability_BlockVolume) XXX_Size() int { + return xxx_messageInfo_VolumeCapability_BlockVolume.Size(m) +} +func (m *VolumeCapability_BlockVolume) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability_BlockVolume.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability_BlockVolume proto.InternalMessageInfo + +// Indicate that the volume will be accessed via the filesystem API. +type VolumeCapability_MountVolume struct { + // The filesystem type. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + FsType string `protobuf:"bytes,1,opt,name=fs_type,json=fsType,proto3" json:"fs_type,omitempty"` + // The mount options that can be used for the volume. This field is + // OPTIONAL. `mount_flags` MAY contain sensitive information. + // Therefore, the CO and the Plugin MUST NOT leak this information + // to untrusted entities. The total size of this repeated field + // SHALL NOT exceed 4 KiB. + MountFlags []string `protobuf:"bytes,2,rep,name=mount_flags,json=mountFlags,proto3" json:"mount_flags,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability_MountVolume) Reset() { *m = VolumeCapability_MountVolume{} } +func (m *VolumeCapability_MountVolume) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_MountVolume) ProtoMessage() {} +func (*VolumeCapability_MountVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{10, 1} +} +func (m *VolumeCapability_MountVolume) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability_MountVolume.Unmarshal(m, b) +} +func (m *VolumeCapability_MountVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability_MountVolume.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability_MountVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability_MountVolume.Merge(dst, src) +} +func (m *VolumeCapability_MountVolume) XXX_Size() int { + return xxx_messageInfo_VolumeCapability_MountVolume.Size(m) +} +func (m *VolumeCapability_MountVolume) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability_MountVolume.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability_MountVolume proto.InternalMessageInfo + +func (m *VolumeCapability_MountVolume) GetFsType() string { + if m != nil { + return m.FsType + } + return "" +} + +func (m *VolumeCapability_MountVolume) GetMountFlags() []string { + if m != nil { + return m.MountFlags + } + return nil +} + +// Specify how a volume can be accessed. +type VolumeCapability_AccessMode struct { + // This field is REQUIRED. + Mode VolumeCapability_AccessMode_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=csi.v1.VolumeCapability_AccessMode_Mode" json:"mode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability_AccessMode) Reset() { *m = VolumeCapability_AccessMode{} } +func (m *VolumeCapability_AccessMode) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_AccessMode) ProtoMessage() {} +func (*VolumeCapability_AccessMode) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{10, 2} +} +func (m *VolumeCapability_AccessMode) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability_AccessMode.Unmarshal(m, b) +} +func (m *VolumeCapability_AccessMode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability_AccessMode.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability_AccessMode) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability_AccessMode.Merge(dst, src) +} +func (m *VolumeCapability_AccessMode) XXX_Size() int { + return xxx_messageInfo_VolumeCapability_AccessMode.Size(m) +} +func (m *VolumeCapability_AccessMode) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability_AccessMode.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability_AccessMode proto.InternalMessageInfo + +func (m *VolumeCapability_AccessMode) GetMode() VolumeCapability_AccessMode_Mode { + if m != nil { + return m.Mode + } + return VolumeCapability_AccessMode_UNKNOWN +} + +// The capacity of the storage space in bytes. To specify an exact size, +// `required_bytes` and `limit_bytes` SHALL be set to the same value. At +// least one of the these fields MUST be specified. +type CapacityRange struct { + // Volume MUST be at least this big. This field is OPTIONAL. + // A value of 0 is equal to an unspecified field value. + // The value of this field MUST NOT be negative. + RequiredBytes int64 `protobuf:"varint,1,opt,name=required_bytes,json=requiredBytes,proto3" json:"required_bytes,omitempty"` + // Volume MUST not be bigger than this. This field is OPTIONAL. + // A value of 0 is equal to an unspecified field value. + // The value of this field MUST NOT be negative. + LimitBytes int64 `protobuf:"varint,2,opt,name=limit_bytes,json=limitBytes,proto3" json:"limit_bytes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CapacityRange) Reset() { *m = CapacityRange{} } +func (m *CapacityRange) String() string { return proto.CompactTextString(m) } +func (*CapacityRange) ProtoMessage() {} +func (*CapacityRange) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{11} +} +func (m *CapacityRange) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CapacityRange.Unmarshal(m, b) +} +func (m *CapacityRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CapacityRange.Marshal(b, m, deterministic) +} +func (dst *CapacityRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_CapacityRange.Merge(dst, src) +} +func (m *CapacityRange) XXX_Size() int { + return xxx_messageInfo_CapacityRange.Size(m) +} +func (m *CapacityRange) XXX_DiscardUnknown() { + xxx_messageInfo_CapacityRange.DiscardUnknown(m) +} + +var xxx_messageInfo_CapacityRange proto.InternalMessageInfo + +func (m *CapacityRange) GetRequiredBytes() int64 { + if m != nil { + return m.RequiredBytes + } + return 0 +} + +func (m *CapacityRange) GetLimitBytes() int64 { + if m != nil { + return m.LimitBytes + } + return 0 +} + +// Information about a specific volume. +type Volume struct { + // The capacity of the volume in bytes. This field is OPTIONAL. If not + // set (value of 0), it indicates that the capacity of the volume is + // unknown (e.g., NFS share). + // The value of this field MUST NOT be negative. + CapacityBytes int64 `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes,proto3" json:"capacity_bytes,omitempty"` + // The identifier for this volume, generated by the plugin. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific volume vs all other volumes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this volume. + // The SP is NOT responsible for global uniqueness of volume_id across + // multiple SPs. + VolumeId string `protobuf:"bytes,2,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // Opaque static properties of the volume. SP MAY use this field to + // ensure subsequent volume validation and publishing calls have + // contextual information. + // The contents of this field SHALL be opaque to a CO. + // The contents of this field SHALL NOT be mutable. + // The contents of this field SHALL be safe for the CO to cache. + // The contents of this field SHOULD NOT contain sensitive + // information. + // The contents of this field SHOULD NOT be used for uniquely + // identifying a volume. The `volume_id` alone SHOULD be sufficient to + // identify the volume. + // A volume uniquely identified by `volume_id` SHALL always report the + // same volume_context. + // This field is OPTIONAL and when present MUST be passed to volume + // validation and publishing calls. + VolumeContext map[string]string `protobuf:"bytes,3,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // If specified, indicates that the volume is not empty and is + // pre-populated with data from the specified source. + // This field is OPTIONAL. + ContentSource *VolumeContentSource `protobuf:"bytes,4,opt,name=content_source,json=contentSource,proto3" json:"content_source,omitempty"` + // Specifies where (regions, zones, racks, etc.) the provisioned + // volume is accessible from. + // A plugin that returns this field MUST also set the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // An SP MAY specify multiple topologies to indicate the volume is + // accessible from multiple locations. + // COs MAY use this information along with the topology information + // returned by NodeGetInfo to ensure that a given volume is accessible + // from a given node when scheduling workloads. + // This field is OPTIONAL. If it is not specified, the CO MAY assume + // the volume is equally accessible from all nodes in the cluster and + // MAY schedule workloads referencing the volume on any available + // node. + // + // Example 1: + // accessible_topology = {"region": "R1", "zone": "Z2"} + // Indicates a volume accessible only from the "region" "R1" and the + // "zone" "Z2". + // + // Example 2: + // accessible_topology = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3" + // in the "region" "R1". + AccessibleTopology []*Topology `protobuf:"bytes,5,rep,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Volume) Reset() { *m = Volume{} } +func (m *Volume) String() string { return proto.CompactTextString(m) } +func (*Volume) ProtoMessage() {} +func (*Volume) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{12} +} +func (m *Volume) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Volume.Unmarshal(m, b) +} +func (m *Volume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Volume.Marshal(b, m, deterministic) +} +func (dst *Volume) XXX_Merge(src proto.Message) { + xxx_messageInfo_Volume.Merge(dst, src) +} +func (m *Volume) XXX_Size() int { + return xxx_messageInfo_Volume.Size(m) +} +func (m *Volume) XXX_DiscardUnknown() { + xxx_messageInfo_Volume.DiscardUnknown(m) +} + +var xxx_messageInfo_Volume proto.InternalMessageInfo + +func (m *Volume) GetCapacityBytes() int64 { + if m != nil { + return m.CapacityBytes + } + return 0 +} + +func (m *Volume) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *Volume) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +func (m *Volume) GetContentSource() *VolumeContentSource { + if m != nil { + return m.ContentSource + } + return nil +} + +func (m *Volume) GetAccessibleTopology() []*Topology { + if m != nil { + return m.AccessibleTopology + } + return nil +} + +type TopologyRequirement struct { + // Specifies the list of topologies the provisioned volume MUST be + // accessible from. + // This field is OPTIONAL. If TopologyRequirement is specified either + // requisite or preferred or both MUST be specified. + // + // If requisite is specified, the provisioned volume MUST be + // accessible from at least one of the requisite topologies. + // + // Given + // x = number of topologies provisioned volume is accessible from + // n = number of requisite topologies + // The CO MUST ensure n >= 1. The SP MUST ensure x >= 1 + // If x==n, than the SP MUST make the provisioned volume available to + // all topologies from the list of requisite topologies. If it is + // unable to do so, the SP MUST fail the CreateVolume call. + // For example, if a volume should be accessible from a single zone, + // and requisite = + // {"region": "R1", "zone": "Z2"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and the "zone" "Z2". + // Similarly, if a volume should be accessible from two zones, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and both "zone" "Z2" and "zone" "Z3". + // + // If xn, than the SP MUST make the provisioned volume available from + // all topologies from the list of requisite topologies and MAY choose + // the remaining x-n unique topologies from the list of all possible + // topologies. If it is unable to do so, the SP MUST fail the + // CreateVolume call. + // For example, if a volume should be accessible from two zones, and + // requisite = + // {"region": "R1", "zone": "Z2"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and the "zone" "Z2" and the SP may select the second zone + // independently, e.g. "R1/Z4". + Requisite []*Topology `protobuf:"bytes,1,rep,name=requisite,proto3" json:"requisite,omitempty"` + // Specifies the list of topologies the CO would prefer the volume to + // be provisioned in. + // + // This field is OPTIONAL. If TopologyRequirement is specified either + // requisite or preferred or both MUST be specified. + // + // An SP MUST attempt to make the provisioned volume available using + // the preferred topologies in order from first to last. + // + // If requisite is specified, all topologies in preferred list MUST + // also be present in the list of requisite topologies. + // + // If the SP is unable to to make the provisioned volume available + // from any of the preferred topologies, the SP MAY choose a topology + // from the list of requisite topologies. + // If the list of requisite topologies is not specified, then the SP + // MAY choose from the list of all possible topologies. + // If the list of requisite topologies is specified and the SP is + // unable to to make the provisioned volume available from any of the + // requisite topologies it MUST fail the CreateVolume call. + // + // Example 1: + // Given a volume should be accessible from a single zone, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // preferred = + // {"region": "R1", "zone": "Z3"} + // then the the SP SHOULD first attempt to make the provisioned volume + // available from "zone" "Z3" in the "region" "R1" and fall back to + // "zone" "Z2" in the "region" "R1" if that is not possible. + // + // Example 2: + // Given a volume should be accessible from a single zone, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"}, + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z5"} + // preferred = + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z2"} + // then the the SP SHOULD first attempt to make the provisioned volume + // accessible from "zone" "Z4" in the "region" "R1" and fall back to + // "zone" "Z2" in the "region" "R1" if that is not possible. If that + // is not possible, the SP may choose between either the "zone" + // "Z3" or "Z5" in the "region" "R1". + // + // Example 3: + // Given a volume should be accessible from TWO zones (because an + // opaque parameter in CreateVolumeRequest, for example, specifies + // the volume is accessible from two zones, aka synchronously + // replicated), and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"}, + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z5"} + // preferred = + // {"region": "R1", "zone": "Z5"}, + // {"region": "R1", "zone": "Z3"} + // then the the SP SHOULD first attempt to make the provisioned volume + // accessible from the combination of the two "zones" "Z5" and "Z3" in + // the "region" "R1". If that's not possible, it should fall back to + // a combination of "Z5" and other possibilities from the list of + // requisite. If that's not possible, it should fall back to a + // combination of "Z3" and other possibilities from the list of + // requisite. If that's not possible, it should fall back to a + // combination of other possibilities from the list of requisite. + Preferred []*Topology `protobuf:"bytes,2,rep,name=preferred,proto3" json:"preferred,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TopologyRequirement) Reset() { *m = TopologyRequirement{} } +func (m *TopologyRequirement) String() string { return proto.CompactTextString(m) } +func (*TopologyRequirement) ProtoMessage() {} +func (*TopologyRequirement) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{13} +} +func (m *TopologyRequirement) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_TopologyRequirement.Unmarshal(m, b) +} +func (m *TopologyRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_TopologyRequirement.Marshal(b, m, deterministic) +} +func (dst *TopologyRequirement) XXX_Merge(src proto.Message) { + xxx_messageInfo_TopologyRequirement.Merge(dst, src) +} +func (m *TopologyRequirement) XXX_Size() int { + return xxx_messageInfo_TopologyRequirement.Size(m) +} +func (m *TopologyRequirement) XXX_DiscardUnknown() { + xxx_messageInfo_TopologyRequirement.DiscardUnknown(m) +} + +var xxx_messageInfo_TopologyRequirement proto.InternalMessageInfo + +func (m *TopologyRequirement) GetRequisite() []*Topology { + if m != nil { + return m.Requisite + } + return nil +} + +func (m *TopologyRequirement) GetPreferred() []*Topology { + if m != nil { + return m.Preferred + } + return nil +} + +// Topology is a map of topological domains to topological segments. +// A topological domain is a sub-division of a cluster, like "region", +// "zone", "rack", etc. +// A topological segment is a specific instance of a topological domain, +// like "zone3", "rack3", etc. +// For example {"com.company/zone": "Z1", "com.company/rack": "R3"} +// Valid keys have two segments: an OPTIONAL prefix and name, separated +// by a slash (/), for example: "com.company.example/zone". +// The key name segment is REQUIRED. The prefix is OPTIONAL. +// The key name MUST be 63 characters or less, begin and end with an +// alphanumeric character ([a-z0-9A-Z]), and contain only dashes (-), +// underscores (_), dots (.), or alphanumerics in between, for example +// "zone". +// The key prefix MUST be 63 characters or less, begin and end with a +// lower-case alphanumeric character ([a-z0-9]), contain only +// dashes (-), dots (.), or lower-case alphanumerics in between, and +// follow domain name notation format +// (https://tools.ietf.org/html/rfc1035#section-2.3.1). +// The key prefix SHOULD include the plugin's host company name and/or +// the plugin name, to minimize the possibility of collisions with keys +// from other plugins. +// If a key prefix is specified, it MUST be identical across all +// topology keys returned by the SP (across all RPCs). +// Keys MUST be case-insensitive. Meaning the keys "Zone" and "zone" +// MUST not both exist. +// Each value (topological segment) MUST contain 1 or more strings. +// Each string MUST be 63 characters or less and begin and end with an +// alphanumeric character with '-', '_', '.', or alphanumerics in +// between. +type Topology struct { + Segments map[string]string `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Topology) Reset() { *m = Topology{} } +func (m *Topology) String() string { return proto.CompactTextString(m) } +func (*Topology) ProtoMessage() {} +func (*Topology) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{14} +} +func (m *Topology) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Topology.Unmarshal(m, b) +} +func (m *Topology) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Topology.Marshal(b, m, deterministic) +} +func (dst *Topology) XXX_Merge(src proto.Message) { + xxx_messageInfo_Topology.Merge(dst, src) +} +func (m *Topology) XXX_Size() int { + return xxx_messageInfo_Topology.Size(m) +} +func (m *Topology) XXX_DiscardUnknown() { + xxx_messageInfo_Topology.DiscardUnknown(m) +} + +var xxx_messageInfo_Topology proto.InternalMessageInfo + +func (m *Topology) GetSegments() map[string]string { + if m != nil { + return m.Segments + } + return nil +} + +type DeleteVolumeRequest struct { + // The ID of the volume to be deprovisioned. + // This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // Secrets required by plugin to complete volume deletion request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteVolumeRequest) Reset() { *m = DeleteVolumeRequest{} } +func (m *DeleteVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteVolumeRequest) ProtoMessage() {} +func (*DeleteVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{15} +} +func (m *DeleteVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteVolumeRequest.Unmarshal(m, b) +} +func (m *DeleteVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *DeleteVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteVolumeRequest.Merge(dst, src) +} +func (m *DeleteVolumeRequest) XXX_Size() int { + return xxx_messageInfo_DeleteVolumeRequest.Size(m) +} +func (m *DeleteVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteVolumeRequest proto.InternalMessageInfo + +func (m *DeleteVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *DeleteVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +type DeleteVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteVolumeResponse) Reset() { *m = DeleteVolumeResponse{} } +func (m *DeleteVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteVolumeResponse) ProtoMessage() {} +func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{16} +} +func (m *DeleteVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteVolumeResponse.Unmarshal(m, b) +} +func (m *DeleteVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *DeleteVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteVolumeResponse.Merge(dst, src) +} +func (m *DeleteVolumeResponse) XXX_Size() int { + return xxx_messageInfo_DeleteVolumeResponse.Size(m) +} +func (m *DeleteVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteVolumeResponse proto.InternalMessageInfo + +type ControllerPublishVolumeRequest struct { + // The ID of the volume to be used on a node. + // This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The ID of the node. This field is REQUIRED. The CO SHALL set this + // field to match the node ID returned by `NodeGetInfo`. + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the published volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability *VolumeCapability `protobuf:"bytes,3,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"` + // Indicates SP MUST publish the volume in readonly mode. + // CO MUST set this field to false if SP does not have the + // PUBLISH_READONLY controller capability. + // This is a REQUIRED field. + Readonly bool `protobuf:"varint,4,opt,name=readonly,proto3" json:"readonly,omitempty"` + // Secrets required by plugin to complete controller publish volume + // request. This field is OPTIONAL. Refer to the + // `Secrets Requirements` section on how to use this field. + Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + VolumeContext map[string]string `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerPublishVolumeRequest) Reset() { *m = ControllerPublishVolumeRequest{} } +func (m *ControllerPublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*ControllerPublishVolumeRequest) ProtoMessage() {} +func (*ControllerPublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{17} +} +func (m *ControllerPublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerPublishVolumeRequest.Unmarshal(m, b) +} +func (m *ControllerPublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerPublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *ControllerPublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerPublishVolumeRequest.Merge(dst, src) +} +func (m *ControllerPublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_ControllerPublishVolumeRequest.Size(m) +} +func (m *ControllerPublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerPublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerPublishVolumeRequest proto.InternalMessageInfo + +func (m *ControllerPublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *ControllerPublishVolumeRequest) GetNodeId() string { + if m != nil { + return m.NodeId + } + return "" +} + +func (m *ControllerPublishVolumeRequest) GetVolumeCapability() *VolumeCapability { + if m != nil { + return m.VolumeCapability + } + return nil +} + +func (m *ControllerPublishVolumeRequest) GetReadonly() bool { + if m != nil { + return m.Readonly + } + return false +} + +func (m *ControllerPublishVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +func (m *ControllerPublishVolumeRequest) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +type ControllerPublishVolumeResponse struct { + // Opaque static publish properties of the volume. SP MAY use this + // field to ensure subsequent `NodeStageVolume` or `NodePublishVolume` + // calls calls have contextual information. + // The contents of this field SHALL be opaque to a CO. + // The contents of this field SHALL NOT be mutable. + // The contents of this field SHALL be safe for the CO to cache. + // The contents of this field SHOULD NOT contain sensitive + // information. + // The contents of this field SHOULD NOT be used for uniquely + // identifying a volume. The `volume_id` alone SHOULD be sufficient to + // identify the volume. + // This field is OPTIONAL and when present MUST be passed to + // subsequent `NodeStageVolume` or `NodePublishVolume` calls + PublishContext map[string]string `protobuf:"bytes,1,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerPublishVolumeResponse) Reset() { *m = ControllerPublishVolumeResponse{} } +func (m *ControllerPublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*ControllerPublishVolumeResponse) ProtoMessage() {} +func (*ControllerPublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{18} +} +func (m *ControllerPublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerPublishVolumeResponse.Unmarshal(m, b) +} +func (m *ControllerPublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerPublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *ControllerPublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerPublishVolumeResponse.Merge(dst, src) +} +func (m *ControllerPublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_ControllerPublishVolumeResponse.Size(m) +} +func (m *ControllerPublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerPublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerPublishVolumeResponse proto.InternalMessageInfo + +func (m *ControllerPublishVolumeResponse) GetPublishContext() map[string]string { + if m != nil { + return m.PublishContext + } + return nil +} + +type ControllerUnpublishVolumeRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The ID of the node. This field is OPTIONAL. The CO SHOULD set this + // field to match the node ID returned by `NodeGetInfo` or leave it + // unset. If the value is set, the SP MUST unpublish the volume from + // the specified node. If the value is unset, the SP MUST unpublish + // the volume from all nodes it is published to. + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + // Secrets required by plugin to complete controller unpublish volume + // request. This SHOULD be the same secrets passed to the + // ControllerPublishVolume call for the specified volume. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerUnpublishVolumeRequest) Reset() { *m = ControllerUnpublishVolumeRequest{} } +func (m *ControllerUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*ControllerUnpublishVolumeRequest) ProtoMessage() {} +func (*ControllerUnpublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{19} +} +func (m *ControllerUnpublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerUnpublishVolumeRequest.Unmarshal(m, b) +} +func (m *ControllerUnpublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerUnpublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *ControllerUnpublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerUnpublishVolumeRequest.Merge(dst, src) +} +func (m *ControllerUnpublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_ControllerUnpublishVolumeRequest.Size(m) +} +func (m *ControllerUnpublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerUnpublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerUnpublishVolumeRequest proto.InternalMessageInfo + +func (m *ControllerUnpublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *ControllerUnpublishVolumeRequest) GetNodeId() string { + if m != nil { + return m.NodeId + } + return "" +} + +func (m *ControllerUnpublishVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +type ControllerUnpublishVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerUnpublishVolumeResponse) Reset() { *m = ControllerUnpublishVolumeResponse{} } +func (m *ControllerUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*ControllerUnpublishVolumeResponse) ProtoMessage() {} +func (*ControllerUnpublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{20} +} +func (m *ControllerUnpublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerUnpublishVolumeResponse.Unmarshal(m, b) +} +func (m *ControllerUnpublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerUnpublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *ControllerUnpublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerUnpublishVolumeResponse.Merge(dst, src) +} +func (m *ControllerUnpublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_ControllerUnpublishVolumeResponse.Size(m) +} +func (m *ControllerUnpublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerUnpublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerUnpublishVolumeResponse proto.InternalMessageInfo + +type ValidateVolumeCapabilitiesRequest struct { + // The ID of the volume to check. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + VolumeContext map[string]string `protobuf:"bytes,2,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The capabilities that the CO wants to check for the volume. This + // call SHALL return "confirmed" only if all the volume capabilities + // specified below are supported. This field is REQUIRED. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,3,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"` + // See CreateVolumeRequest.parameters. + // This field is OPTIONAL. + Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Secrets required by plugin to complete volume validation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValidateVolumeCapabilitiesRequest) Reset() { *m = ValidateVolumeCapabilitiesRequest{} } +func (m *ValidateVolumeCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*ValidateVolumeCapabilitiesRequest) ProtoMessage() {} +func (*ValidateVolumeCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{21} +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Unmarshal(m, b) +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *ValidateVolumeCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Merge(dst, src) +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Size(m) +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ValidateVolumeCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidateVolumeCapabilitiesRequest proto.InternalMessageInfo + +func (m *ValidateVolumeCapabilitiesRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *ValidateVolumeCapabilitiesRequest) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +func (m *ValidateVolumeCapabilitiesRequest) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *ValidateVolumeCapabilitiesRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *ValidateVolumeCapabilitiesRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +type ValidateVolumeCapabilitiesResponse struct { + // Confirmed indicates to the CO the set of capabilities that the + // plugin has validated. This field SHALL only be set to a non-empty + // value for successful validation responses. + // For successful validation responses, the CO SHALL compare the + // fields of this message to the originally requested capabilities in + // order to guard against an older plugin reporting "valid" for newer + // capability fields that it does not yet understand. + // This field is OPTIONAL. + Confirmed *ValidateVolumeCapabilitiesResponse_Confirmed `protobuf:"bytes,1,opt,name=confirmed,proto3" json:"confirmed,omitempty"` + // Message to the CO if `confirmed` above is empty. This field is + // OPTIONAL. + // An empty string is equal to an unspecified field value. + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValidateVolumeCapabilitiesResponse) Reset() { *m = ValidateVolumeCapabilitiesResponse{} } +func (m *ValidateVolumeCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*ValidateVolumeCapabilitiesResponse) ProtoMessage() {} +func (*ValidateVolumeCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{22} +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Unmarshal(m, b) +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *ValidateVolumeCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Merge(dst, src) +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Size(m) +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ValidateVolumeCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidateVolumeCapabilitiesResponse proto.InternalMessageInfo + +func (m *ValidateVolumeCapabilitiesResponse) GetConfirmed() *ValidateVolumeCapabilitiesResponse_Confirmed { + if m != nil { + return m.Confirmed + } + return nil +} + +func (m *ValidateVolumeCapabilitiesResponse) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +type ValidateVolumeCapabilitiesResponse_Confirmed struct { + // Volume context validated by the plugin. + // This field is OPTIONAL. + VolumeContext map[string]string `protobuf:"bytes,1,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Volume capabilities supported by the plugin. + // This field is REQUIRED. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,2,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"` + // The volume creation parameters validated by the plugin. + // This field is OPTIONAL. + Parameters map[string]string `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) Reset() { + *m = ValidateVolumeCapabilitiesResponse_Confirmed{} +} +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) String() string { + return proto.CompactTextString(m) +} +func (*ValidateVolumeCapabilitiesResponse_Confirmed) ProtoMessage() {} +func (*ValidateVolumeCapabilitiesResponse_Confirmed) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{22, 0} +} +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.Unmarshal(m, b) +} +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.Marshal(b, m, deterministic) +} +func (dst *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.Merge(dst, src) +} +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_Size() int { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.Size(m) +} +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_DiscardUnknown() { + xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed proto.InternalMessageInfo + +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +type ListVolumesRequest struct { + // If specified (non-zero value), the Plugin MUST NOT return more + // entries than this number in the response. If the actual number of + // entries is more than this number, the Plugin MUST set `next_token` + // in the response which can be used to get the next page of entries + // in the subsequent `ListVolumes` call. This field is OPTIONAL. If + // not specified (zero value), it means there is no restriction on the + // number of entries that can be returned. + // The value of this field MUST NOT be negative. + MaxEntries int32 `protobuf:"varint,1,opt,name=max_entries,json=maxEntries,proto3" json:"max_entries,omitempty"` + // A token to specify where to start paginating. Set this field to + // `next_token` returned by a previous `ListVolumes` call to get the + // next page of entries. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + StartingToken string `protobuf:"bytes,2,opt,name=starting_token,json=startingToken,proto3" json:"starting_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListVolumesRequest) Reset() { *m = ListVolumesRequest{} } +func (m *ListVolumesRequest) String() string { return proto.CompactTextString(m) } +func (*ListVolumesRequest) ProtoMessage() {} +func (*ListVolumesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{23} +} +func (m *ListVolumesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListVolumesRequest.Unmarshal(m, b) +} +func (m *ListVolumesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListVolumesRequest.Marshal(b, m, deterministic) +} +func (dst *ListVolumesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListVolumesRequest.Merge(dst, src) +} +func (m *ListVolumesRequest) XXX_Size() int { + return xxx_messageInfo_ListVolumesRequest.Size(m) +} +func (m *ListVolumesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListVolumesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListVolumesRequest proto.InternalMessageInfo + +func (m *ListVolumesRequest) GetMaxEntries() int32 { + if m != nil { + return m.MaxEntries + } + return 0 +} + +func (m *ListVolumesRequest) GetStartingToken() string { + if m != nil { + return m.StartingToken + } + return "" +} + +type ListVolumesResponse struct { + Entries []*ListVolumesResponse_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + // This token allows you to get the next page of entries for + // `ListVolumes` request. If the number of entries is larger than + // `max_entries`, use the `next_token` as a value for the + // `starting_token` field in the next `ListVolumes` request. This + // field is OPTIONAL. + // An empty string is equal to an unspecified field value. + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListVolumesResponse) Reset() { *m = ListVolumesResponse{} } +func (m *ListVolumesResponse) String() string { return proto.CompactTextString(m) } +func (*ListVolumesResponse) ProtoMessage() {} +func (*ListVolumesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{24} +} +func (m *ListVolumesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListVolumesResponse.Unmarshal(m, b) +} +func (m *ListVolumesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListVolumesResponse.Marshal(b, m, deterministic) +} +func (dst *ListVolumesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListVolumesResponse.Merge(dst, src) +} +func (m *ListVolumesResponse) XXX_Size() int { + return xxx_messageInfo_ListVolumesResponse.Size(m) +} +func (m *ListVolumesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ListVolumesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ListVolumesResponse proto.InternalMessageInfo + +func (m *ListVolumesResponse) GetEntries() []*ListVolumesResponse_Entry { + if m != nil { + return m.Entries + } + return nil +} + +func (m *ListVolumesResponse) GetNextToken() string { + if m != nil { + return m.NextToken + } + return "" +} + +type ListVolumesResponse_Entry struct { + Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListVolumesResponse_Entry) Reset() { *m = ListVolumesResponse_Entry{} } +func (m *ListVolumesResponse_Entry) String() string { return proto.CompactTextString(m) } +func (*ListVolumesResponse_Entry) ProtoMessage() {} +func (*ListVolumesResponse_Entry) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{24, 0} +} +func (m *ListVolumesResponse_Entry) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListVolumesResponse_Entry.Unmarshal(m, b) +} +func (m *ListVolumesResponse_Entry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListVolumesResponse_Entry.Marshal(b, m, deterministic) +} +func (dst *ListVolumesResponse_Entry) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListVolumesResponse_Entry.Merge(dst, src) +} +func (m *ListVolumesResponse_Entry) XXX_Size() int { + return xxx_messageInfo_ListVolumesResponse_Entry.Size(m) +} +func (m *ListVolumesResponse_Entry) XXX_DiscardUnknown() { + xxx_messageInfo_ListVolumesResponse_Entry.DiscardUnknown(m) +} + +var xxx_messageInfo_ListVolumesResponse_Entry proto.InternalMessageInfo + +func (m *ListVolumesResponse_Entry) GetVolume() *Volume { + if m != nil { + return m.Volume + } + return nil +} + +type GetCapacityRequest struct { + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes that satisfy ALL of the + // specified `volume_capabilities`. These are the same + // `volume_capabilities` the CO will use in `CreateVolumeRequest`. + // This field is OPTIONAL. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,1,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"` + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes with the given Plugin + // specific `parameters`. These are the same `parameters` the CO will + // use in `CreateVolumeRequest`. This field is OPTIONAL. + Parameters map[string]string `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes that in the specified + // `accessible_topology`. This is the same as the + // `accessible_topology` the CO returns in a `CreateVolumeResponse`. + // This field is OPTIONAL. This field SHALL NOT be set unless the + // plugin advertises the VOLUME_ACCESSIBILITY_CONSTRAINTS capability. + AccessibleTopology *Topology `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetCapacityRequest) Reset() { *m = GetCapacityRequest{} } +func (m *GetCapacityRequest) String() string { return proto.CompactTextString(m) } +func (*GetCapacityRequest) ProtoMessage() {} +func (*GetCapacityRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{25} +} +func (m *GetCapacityRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetCapacityRequest.Unmarshal(m, b) +} +func (m *GetCapacityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetCapacityRequest.Marshal(b, m, deterministic) +} +func (dst *GetCapacityRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetCapacityRequest.Merge(dst, src) +} +func (m *GetCapacityRequest) XXX_Size() int { + return xxx_messageInfo_GetCapacityRequest.Size(m) +} +func (m *GetCapacityRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetCapacityRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetCapacityRequest proto.InternalMessageInfo + +func (m *GetCapacityRequest) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *GetCapacityRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *GetCapacityRequest) GetAccessibleTopology() *Topology { + if m != nil { + return m.AccessibleTopology + } + return nil +} + +type GetCapacityResponse struct { + // The available capacity, in bytes, of the storage that can be used + // to provision volumes. If `volume_capabilities` or `parameters` is + // specified in the request, the Plugin SHALL take those into + // consideration when calculating the available capacity of the + // storage. This field is REQUIRED. + // The value of this field MUST NOT be negative. + AvailableCapacity int64 `protobuf:"varint,1,opt,name=available_capacity,json=availableCapacity,proto3" json:"available_capacity,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetCapacityResponse) Reset() { *m = GetCapacityResponse{} } +func (m *GetCapacityResponse) String() string { return proto.CompactTextString(m) } +func (*GetCapacityResponse) ProtoMessage() {} +func (*GetCapacityResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{26} +} +func (m *GetCapacityResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetCapacityResponse.Unmarshal(m, b) +} +func (m *GetCapacityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetCapacityResponse.Marshal(b, m, deterministic) +} +func (dst *GetCapacityResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetCapacityResponse.Merge(dst, src) +} +func (m *GetCapacityResponse) XXX_Size() int { + return xxx_messageInfo_GetCapacityResponse.Size(m) +} +func (m *GetCapacityResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetCapacityResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetCapacityResponse proto.InternalMessageInfo + +func (m *GetCapacityResponse) GetAvailableCapacity() int64 { + if m != nil { + return m.AvailableCapacity + } + return 0 +} + +type ControllerGetCapabilitiesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerGetCapabilitiesRequest) Reset() { *m = ControllerGetCapabilitiesRequest{} } +func (m *ControllerGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*ControllerGetCapabilitiesRequest) ProtoMessage() {} +func (*ControllerGetCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{27} +} +func (m *ControllerGetCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerGetCapabilitiesRequest.Unmarshal(m, b) +} +func (m *ControllerGetCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerGetCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *ControllerGetCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerGetCapabilitiesRequest.Merge(dst, src) +} +func (m *ControllerGetCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_ControllerGetCapabilitiesRequest.Size(m) +} +func (m *ControllerGetCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerGetCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerGetCapabilitiesRequest proto.InternalMessageInfo + +type ControllerGetCapabilitiesResponse struct { + // All the capabilities that the controller service supports. This + // field is OPTIONAL. + Capabilities []*ControllerServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerGetCapabilitiesResponse) Reset() { *m = ControllerGetCapabilitiesResponse{} } +func (m *ControllerGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*ControllerGetCapabilitiesResponse) ProtoMessage() {} +func (*ControllerGetCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{28} +} +func (m *ControllerGetCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerGetCapabilitiesResponse.Unmarshal(m, b) +} +func (m *ControllerGetCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerGetCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *ControllerGetCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerGetCapabilitiesResponse.Merge(dst, src) +} +func (m *ControllerGetCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_ControllerGetCapabilitiesResponse.Size(m) +} +func (m *ControllerGetCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerGetCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerGetCapabilitiesResponse proto.InternalMessageInfo + +func (m *ControllerGetCapabilitiesResponse) GetCapabilities() []*ControllerServiceCapability { + if m != nil { + return m.Capabilities + } + return nil +} + +// Specifies a capability of the controller service. +type ControllerServiceCapability struct { + // Types that are valid to be assigned to Type: + // *ControllerServiceCapability_Rpc + Type isControllerServiceCapability_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerServiceCapability) Reset() { *m = ControllerServiceCapability{} } +func (m *ControllerServiceCapability) String() string { return proto.CompactTextString(m) } +func (*ControllerServiceCapability) ProtoMessage() {} +func (*ControllerServiceCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{29} +} +func (m *ControllerServiceCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerServiceCapability.Unmarshal(m, b) +} +func (m *ControllerServiceCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerServiceCapability.Marshal(b, m, deterministic) +} +func (dst *ControllerServiceCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerServiceCapability.Merge(dst, src) +} +func (m *ControllerServiceCapability) XXX_Size() int { + return xxx_messageInfo_ControllerServiceCapability.Size(m) +} +func (m *ControllerServiceCapability) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerServiceCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerServiceCapability proto.InternalMessageInfo + +type isControllerServiceCapability_Type interface { + isControllerServiceCapability_Type() +} + +type ControllerServiceCapability_Rpc struct { + Rpc *ControllerServiceCapability_RPC `protobuf:"bytes,1,opt,name=rpc,proto3,oneof"` +} + +func (*ControllerServiceCapability_Rpc) isControllerServiceCapability_Type() {} + +func (m *ControllerServiceCapability) GetType() isControllerServiceCapability_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *ControllerServiceCapability) GetRpc() *ControllerServiceCapability_RPC { + if x, ok := m.GetType().(*ControllerServiceCapability_Rpc); ok { + return x.Rpc + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ControllerServiceCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ControllerServiceCapability_OneofMarshaler, _ControllerServiceCapability_OneofUnmarshaler, _ControllerServiceCapability_OneofSizer, []interface{}{ + (*ControllerServiceCapability_Rpc)(nil), + } +} + +func _ControllerServiceCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ControllerServiceCapability) + // type + switch x := m.Type.(type) { + case *ControllerServiceCapability_Rpc: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Rpc); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ControllerServiceCapability.Type has unexpected type %T", x) + } + return nil +} + +func _ControllerServiceCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ControllerServiceCapability) + switch tag { + case 1: // type.rpc + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ControllerServiceCapability_RPC) + err := b.DecodeMessage(msg) + m.Type = &ControllerServiceCapability_Rpc{msg} + return true, err + default: + return false, nil + } +} + +func _ControllerServiceCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ControllerServiceCapability) + // type + switch x := m.Type.(type) { + case *ControllerServiceCapability_Rpc: + s := proto.Size(x.Rpc) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type ControllerServiceCapability_RPC struct { + Type ControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.ControllerServiceCapability_RPC_Type" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerServiceCapability_RPC) Reset() { *m = ControllerServiceCapability_RPC{} } +func (m *ControllerServiceCapability_RPC) String() string { return proto.CompactTextString(m) } +func (*ControllerServiceCapability_RPC) ProtoMessage() {} +func (*ControllerServiceCapability_RPC) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{29, 0} +} +func (m *ControllerServiceCapability_RPC) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerServiceCapability_RPC.Unmarshal(m, b) +} +func (m *ControllerServiceCapability_RPC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerServiceCapability_RPC.Marshal(b, m, deterministic) +} +func (dst *ControllerServiceCapability_RPC) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerServiceCapability_RPC.Merge(dst, src) +} +func (m *ControllerServiceCapability_RPC) XXX_Size() int { + return xxx_messageInfo_ControllerServiceCapability_RPC.Size(m) +} +func (m *ControllerServiceCapability_RPC) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerServiceCapability_RPC.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerServiceCapability_RPC proto.InternalMessageInfo + +func (m *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_RPC_Type { + if m != nil { + return m.Type + } + return ControllerServiceCapability_RPC_UNKNOWN +} + +type CreateSnapshotRequest struct { + // The ID of the source volume to be snapshotted. + // This field is REQUIRED. + SourceVolumeId string `protobuf:"bytes,1,opt,name=source_volume_id,json=sourceVolumeId,proto3" json:"source_volume_id,omitempty"` + // The suggested name for the snapshot. This field is REQUIRED for + // idempotency. + // Any Unicode string that conforms to the length limit is allowed + // except those containing the following banned characters: + // U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F. + // (These are control characters other than commonly used whitespace.) + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Secrets required by plugin to complete snapshot creation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Plugin specific parameters passed in as opaque key-value pairs. + // This field is OPTIONAL. The Plugin is responsible for parsing and + // validating these parameters. COs will treat these as opaque. + // Use cases for opaque parameters: + // - Specify a policy to automatically clean up the snapshot. + // - Specify an expiration date for the snapshot. + // - Specify whether the snapshot is readonly or read/write. + // - Specify if the snapshot should be replicated to some place. + // - Specify primary or secondary for replication systems that + // support snapshotting only on primary. + Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateSnapshotRequest) Reset() { *m = CreateSnapshotRequest{} } +func (m *CreateSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*CreateSnapshotRequest) ProtoMessage() {} +func (*CreateSnapshotRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{30} +} +func (m *CreateSnapshotRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateSnapshotRequest.Unmarshal(m, b) +} +func (m *CreateSnapshotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateSnapshotRequest.Marshal(b, m, deterministic) +} +func (dst *CreateSnapshotRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateSnapshotRequest.Merge(dst, src) +} +func (m *CreateSnapshotRequest) XXX_Size() int { + return xxx_messageInfo_CreateSnapshotRequest.Size(m) +} +func (m *CreateSnapshotRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CreateSnapshotRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateSnapshotRequest proto.InternalMessageInfo + +func (m *CreateSnapshotRequest) GetSourceVolumeId() string { + if m != nil { + return m.SourceVolumeId + } + return "" +} + +func (m *CreateSnapshotRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateSnapshotRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +func (m *CreateSnapshotRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +type CreateSnapshotResponse struct { + // Contains all attributes of the newly created snapshot that are + // relevant to the CO along with information required by the Plugin + // to uniquely identify the snapshot. This field is REQUIRED. + Snapshot *Snapshot `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateSnapshotResponse) Reset() { *m = CreateSnapshotResponse{} } +func (m *CreateSnapshotResponse) String() string { return proto.CompactTextString(m) } +func (*CreateSnapshotResponse) ProtoMessage() {} +func (*CreateSnapshotResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{31} +} +func (m *CreateSnapshotResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateSnapshotResponse.Unmarshal(m, b) +} +func (m *CreateSnapshotResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateSnapshotResponse.Marshal(b, m, deterministic) +} +func (dst *CreateSnapshotResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateSnapshotResponse.Merge(dst, src) +} +func (m *CreateSnapshotResponse) XXX_Size() int { + return xxx_messageInfo_CreateSnapshotResponse.Size(m) +} +func (m *CreateSnapshotResponse) XXX_DiscardUnknown() { + xxx_messageInfo_CreateSnapshotResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateSnapshotResponse proto.InternalMessageInfo + +func (m *CreateSnapshotResponse) GetSnapshot() *Snapshot { + if m != nil { + return m.Snapshot + } + return nil +} + +// Information about a specific snapshot. +type Snapshot struct { + // This is the complete size of the snapshot in bytes. The purpose of + // this field is to give CO guidance on how much space is needed to + // create a volume from this snapshot. The size of the volume MUST NOT + // be less than the size of the source snapshot. This field is + // OPTIONAL. If this field is not set, it indicates that this size is + // unknown. The value of this field MUST NOT be negative and a size of + // zero means it is unspecified. + SizeBytes int64 `protobuf:"varint,1,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"` + // The identifier for this snapshot, generated by the plugin. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific snapshot vs all other snapshots supported by this + // plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this snapshot. + // The SP is NOT responsible for global uniqueness of snapshot_id + // across multiple SPs. + SnapshotId string `protobuf:"bytes,2,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` + // Identity information for the source volume. Note that creating a + // snapshot from a snapshot is not supported here so the source has to + // be a volume. This field is REQUIRED. + SourceVolumeId string `protobuf:"bytes,3,opt,name=source_volume_id,json=sourceVolumeId,proto3" json:"source_volume_id,omitempty"` + // Timestamp when the point-in-time snapshot is taken on the storage + // system. This field is REQUIRED. + CreationTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"` + // Indicates if a snapshot is ready to use as a + // `volume_content_source` in a `CreateVolumeRequest`. The default + // value is false. This field is REQUIRED. + ReadyToUse bool `protobuf:"varint,5,opt,name=ready_to_use,json=readyToUse,proto3" json:"ready_to_use,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Snapshot) Reset() { *m = Snapshot{} } +func (m *Snapshot) String() string { return proto.CompactTextString(m) } +func (*Snapshot) ProtoMessage() {} +func (*Snapshot) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{32} +} +func (m *Snapshot) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Snapshot.Unmarshal(m, b) +} +func (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Snapshot.Marshal(b, m, deterministic) +} +func (dst *Snapshot) XXX_Merge(src proto.Message) { + xxx_messageInfo_Snapshot.Merge(dst, src) +} +func (m *Snapshot) XXX_Size() int { + return xxx_messageInfo_Snapshot.Size(m) +} +func (m *Snapshot) XXX_DiscardUnknown() { + xxx_messageInfo_Snapshot.DiscardUnknown(m) +} + +var xxx_messageInfo_Snapshot proto.InternalMessageInfo + +func (m *Snapshot) GetSizeBytes() int64 { + if m != nil { + return m.SizeBytes + } + return 0 +} + +func (m *Snapshot) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +func (m *Snapshot) GetSourceVolumeId() string { + if m != nil { + return m.SourceVolumeId + } + return "" +} + +func (m *Snapshot) GetCreationTime() *timestamp.Timestamp { + if m != nil { + return m.CreationTime + } + return nil +} + +func (m *Snapshot) GetReadyToUse() bool { + if m != nil { + return m.ReadyToUse + } + return false +} + +type DeleteSnapshotRequest struct { + // The ID of the snapshot to be deleted. + // This field is REQUIRED. + SnapshotId string `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` + // Secrets required by plugin to complete snapshot deletion request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteSnapshotRequest) Reset() { *m = DeleteSnapshotRequest{} } +func (m *DeleteSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSnapshotRequest) ProtoMessage() {} +func (*DeleteSnapshotRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{33} +} +func (m *DeleteSnapshotRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteSnapshotRequest.Unmarshal(m, b) +} +func (m *DeleteSnapshotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteSnapshotRequest.Marshal(b, m, deterministic) +} +func (dst *DeleteSnapshotRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteSnapshotRequest.Merge(dst, src) +} +func (m *DeleteSnapshotRequest) XXX_Size() int { + return xxx_messageInfo_DeleteSnapshotRequest.Size(m) +} +func (m *DeleteSnapshotRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteSnapshotRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteSnapshotRequest proto.InternalMessageInfo + +func (m *DeleteSnapshotRequest) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +func (m *DeleteSnapshotRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +type DeleteSnapshotResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteSnapshotResponse) Reset() { *m = DeleteSnapshotResponse{} } +func (m *DeleteSnapshotResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteSnapshotResponse) ProtoMessage() {} +func (*DeleteSnapshotResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{34} +} +func (m *DeleteSnapshotResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteSnapshotResponse.Unmarshal(m, b) +} +func (m *DeleteSnapshotResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteSnapshotResponse.Marshal(b, m, deterministic) +} +func (dst *DeleteSnapshotResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteSnapshotResponse.Merge(dst, src) +} +func (m *DeleteSnapshotResponse) XXX_Size() int { + return xxx_messageInfo_DeleteSnapshotResponse.Size(m) +} +func (m *DeleteSnapshotResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteSnapshotResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteSnapshotResponse proto.InternalMessageInfo + +// List all snapshots on the storage system regardless of how they were +// created. +type ListSnapshotsRequest struct { + // If specified (non-zero value), the Plugin MUST NOT return more + // entries than this number in the response. If the actual number of + // entries is more than this number, the Plugin MUST set `next_token` + // in the response which can be used to get the next page of entries + // in the subsequent `ListSnapshots` call. This field is OPTIONAL. If + // not specified (zero value), it means there is no restriction on the + // number of entries that can be returned. + // The value of this field MUST NOT be negative. + MaxEntries int32 `protobuf:"varint,1,opt,name=max_entries,json=maxEntries,proto3" json:"max_entries,omitempty"` + // A token to specify where to start paginating. Set this field to + // `next_token` returned by a previous `ListSnapshots` call to get the + // next page of entries. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + StartingToken string `protobuf:"bytes,2,opt,name=starting_token,json=startingToken,proto3" json:"starting_token,omitempty"` + // Identity information for the source volume. This field is OPTIONAL. + // It can be used to list snapshots by volume. + SourceVolumeId string `protobuf:"bytes,3,opt,name=source_volume_id,json=sourceVolumeId,proto3" json:"source_volume_id,omitempty"` + // Identity information for a specific snapshot. This field is + // OPTIONAL. It can be used to list only a specific snapshot. + // ListSnapshots will return with current snapshot information + // and will not block if the snapshot is being processed after + // it is cut. + SnapshotId string `protobuf:"bytes,4,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSnapshotsRequest) Reset() { *m = ListSnapshotsRequest{} } +func (m *ListSnapshotsRequest) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsRequest) ProtoMessage() {} +func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{35} +} +func (m *ListSnapshotsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSnapshotsRequest.Unmarshal(m, b) +} +func (m *ListSnapshotsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSnapshotsRequest.Marshal(b, m, deterministic) +} +func (dst *ListSnapshotsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSnapshotsRequest.Merge(dst, src) +} +func (m *ListSnapshotsRequest) XXX_Size() int { + return xxx_messageInfo_ListSnapshotsRequest.Size(m) +} +func (m *ListSnapshotsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListSnapshotsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSnapshotsRequest proto.InternalMessageInfo + +func (m *ListSnapshotsRequest) GetMaxEntries() int32 { + if m != nil { + return m.MaxEntries + } + return 0 +} + +func (m *ListSnapshotsRequest) GetStartingToken() string { + if m != nil { + return m.StartingToken + } + return "" +} + +func (m *ListSnapshotsRequest) GetSourceVolumeId() string { + if m != nil { + return m.SourceVolumeId + } + return "" +} + +func (m *ListSnapshotsRequest) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +type ListSnapshotsResponse struct { + Entries []*ListSnapshotsResponse_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + // This token allows you to get the next page of entries for + // `ListSnapshots` request. If the number of entries is larger than + // `max_entries`, use the `next_token` as a value for the + // `starting_token` field in the next `ListSnapshots` request. This + // field is OPTIONAL. + // An empty string is equal to an unspecified field value. + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSnapshotsResponse) Reset() { *m = ListSnapshotsResponse{} } +func (m *ListSnapshotsResponse) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsResponse) ProtoMessage() {} +func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{36} +} +func (m *ListSnapshotsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSnapshotsResponse.Unmarshal(m, b) +} +func (m *ListSnapshotsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSnapshotsResponse.Marshal(b, m, deterministic) +} +func (dst *ListSnapshotsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSnapshotsResponse.Merge(dst, src) +} +func (m *ListSnapshotsResponse) XXX_Size() int { + return xxx_messageInfo_ListSnapshotsResponse.Size(m) +} +func (m *ListSnapshotsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ListSnapshotsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSnapshotsResponse proto.InternalMessageInfo + +func (m *ListSnapshotsResponse) GetEntries() []*ListSnapshotsResponse_Entry { + if m != nil { + return m.Entries + } + return nil +} + +func (m *ListSnapshotsResponse) GetNextToken() string { + if m != nil { + return m.NextToken + } + return "" +} + +type ListSnapshotsResponse_Entry struct { + Snapshot *Snapshot `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSnapshotsResponse_Entry) Reset() { *m = ListSnapshotsResponse_Entry{} } +func (m *ListSnapshotsResponse_Entry) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsResponse_Entry) ProtoMessage() {} +func (*ListSnapshotsResponse_Entry) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{36, 0} +} +func (m *ListSnapshotsResponse_Entry) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSnapshotsResponse_Entry.Unmarshal(m, b) +} +func (m *ListSnapshotsResponse_Entry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSnapshotsResponse_Entry.Marshal(b, m, deterministic) +} +func (dst *ListSnapshotsResponse_Entry) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSnapshotsResponse_Entry.Merge(dst, src) +} +func (m *ListSnapshotsResponse_Entry) XXX_Size() int { + return xxx_messageInfo_ListSnapshotsResponse_Entry.Size(m) +} +func (m *ListSnapshotsResponse_Entry) XXX_DiscardUnknown() { + xxx_messageInfo_ListSnapshotsResponse_Entry.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSnapshotsResponse_Entry proto.InternalMessageInfo + +func (m *ListSnapshotsResponse_Entry) GetSnapshot() *Snapshot { + if m != nil { + return m.Snapshot + } + return nil +} + +type NodeStageVolumeRequest struct { + // The ID of the volume to publish. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The CO SHALL set this field to the value returned by + // `ControllerPublishVolume` if the corresponding Controller Plugin + // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be + // left unset if the corresponding Controller Plugin does not have + // this capability. This is an OPTIONAL field. + PublishContext map[string]string `protobuf:"bytes,2,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The path to which the volume MAY be staged. It MUST be an + // absolute path in the root filesystem of the process serving this + // request, and MUST be a directory. The CO SHALL ensure that there + // is only one `staging_target_path` per volume. The CO SHALL ensure + // that the path is directory and that the process serving the + // request has `read` and `write` permission to that directory. The + // CO SHALL be responsible for creating the directory if it does not + // exist. + // This is a REQUIRED field. + StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"` + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the staged volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability *VolumeCapability `protobuf:"bytes,4,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"` + // Secrets required by plugin to complete node stage volume request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + VolumeContext map[string]string `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeStageVolumeRequest) Reset() { *m = NodeStageVolumeRequest{} } +func (m *NodeStageVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodeStageVolumeRequest) ProtoMessage() {} +func (*NodeStageVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{37} +} +func (m *NodeStageVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeStageVolumeRequest.Unmarshal(m, b) +} +func (m *NodeStageVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeStageVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodeStageVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeStageVolumeRequest.Merge(dst, src) +} +func (m *NodeStageVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodeStageVolumeRequest.Size(m) +} +func (m *NodeStageVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeStageVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeStageVolumeRequest proto.InternalMessageInfo + +func (m *NodeStageVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeStageVolumeRequest) GetPublishContext() map[string]string { + if m != nil { + return m.PublishContext + } + return nil +} + +func (m *NodeStageVolumeRequest) GetStagingTargetPath() string { + if m != nil { + return m.StagingTargetPath + } + return "" +} + +func (m *NodeStageVolumeRequest) GetVolumeCapability() *VolumeCapability { + if m != nil { + return m.VolumeCapability + } + return nil +} + +func (m *NodeStageVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +func (m *NodeStageVolumeRequest) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +type NodeStageVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeStageVolumeResponse) Reset() { *m = NodeStageVolumeResponse{} } +func (m *NodeStageVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodeStageVolumeResponse) ProtoMessage() {} +func (*NodeStageVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{38} +} +func (m *NodeStageVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeStageVolumeResponse.Unmarshal(m, b) +} +func (m *NodeStageVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeStageVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodeStageVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeStageVolumeResponse.Merge(dst, src) +} +func (m *NodeStageVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodeStageVolumeResponse.Size(m) +} +func (m *NodeStageVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeStageVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeStageVolumeResponse proto.InternalMessageInfo + +type NodeUnstageVolumeRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The path at which the volume was staged. It MUST be an absolute + // path in the root filesystem of the process serving this request. + // This is a REQUIRED field. + StagingTargetPath string `protobuf:"bytes,2,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnstageVolumeRequest) Reset() { *m = NodeUnstageVolumeRequest{} } +func (m *NodeUnstageVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodeUnstageVolumeRequest) ProtoMessage() {} +func (*NodeUnstageVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{39} +} +func (m *NodeUnstageVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnstageVolumeRequest.Unmarshal(m, b) +} +func (m *NodeUnstageVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnstageVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodeUnstageVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnstageVolumeRequest.Merge(dst, src) +} +func (m *NodeUnstageVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodeUnstageVolumeRequest.Size(m) +} +func (m *NodeUnstageVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnstageVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnstageVolumeRequest proto.InternalMessageInfo + +func (m *NodeUnstageVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeUnstageVolumeRequest) GetStagingTargetPath() string { + if m != nil { + return m.StagingTargetPath + } + return "" +} + +type NodeUnstageVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnstageVolumeResponse) Reset() { *m = NodeUnstageVolumeResponse{} } +func (m *NodeUnstageVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodeUnstageVolumeResponse) ProtoMessage() {} +func (*NodeUnstageVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{40} +} +func (m *NodeUnstageVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnstageVolumeResponse.Unmarshal(m, b) +} +func (m *NodeUnstageVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnstageVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodeUnstageVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnstageVolumeResponse.Merge(dst, src) +} +func (m *NodeUnstageVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodeUnstageVolumeResponse.Size(m) +} +func (m *NodeUnstageVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnstageVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnstageVolumeResponse proto.InternalMessageInfo + +type NodePublishVolumeRequest struct { + // The ID of the volume to publish. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The CO SHALL set this field to the value returned by + // `ControllerPublishVolume` if the corresponding Controller Plugin + // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be + // left unset if the corresponding Controller Plugin does not have + // this capability. This is an OPTIONAL field. + PublishContext map[string]string `protobuf:"bytes,2,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The path to which the volume was staged by `NodeStageVolume`. + // It MUST be an absolute path in the root filesystem of the process + // serving this request. + // It MUST be set if the Node Plugin implements the + // `STAGE_UNSTAGE_VOLUME` node capability. + // This is an OPTIONAL field. + StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"` + // The path to which the volume will be published. It MUST be an + // absolute path in the root filesystem of the process serving this + // request. The CO SHALL ensure uniqueness of target_path per volume. + // The CO SHALL ensure that the parent directory of this path exists + // and that the process serving the request has `read` and `write` + // permissions to that parent directory. + // For volumes with an access type of block, the SP SHALL place the + // block device at target_path. + // For volumes with an access type of mount, the SP SHALL place the + // mounted directory at target_path. + // Creation of target_path is the responsibility of the SP. + // This is a REQUIRED field. + TargetPath string `protobuf:"bytes,4,opt,name=target_path,json=targetPath,proto3" json:"target_path,omitempty"` + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the published volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability *VolumeCapability `protobuf:"bytes,5,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"` + // Indicates SP MUST publish the volume in readonly mode. + // This field is REQUIRED. + Readonly bool `protobuf:"varint,6,opt,name=readonly,proto3" json:"readonly,omitempty"` + // Secrets required by plugin to complete node publish volume request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,7,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + VolumeContext map[string]string `protobuf:"bytes,8,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodePublishVolumeRequest) Reset() { *m = NodePublishVolumeRequest{} } +func (m *NodePublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodePublishVolumeRequest) ProtoMessage() {} +func (*NodePublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{41} +} +func (m *NodePublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodePublishVolumeRequest.Unmarshal(m, b) +} +func (m *NodePublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodePublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodePublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodePublishVolumeRequest.Merge(dst, src) +} +func (m *NodePublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodePublishVolumeRequest.Size(m) +} +func (m *NodePublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodePublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodePublishVolumeRequest proto.InternalMessageInfo + +func (m *NodePublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodePublishVolumeRequest) GetPublishContext() map[string]string { + if m != nil { + return m.PublishContext + } + return nil +} + +func (m *NodePublishVolumeRequest) GetStagingTargetPath() string { + if m != nil { + return m.StagingTargetPath + } + return "" +} + +func (m *NodePublishVolumeRequest) GetTargetPath() string { + if m != nil { + return m.TargetPath + } + return "" +} + +func (m *NodePublishVolumeRequest) GetVolumeCapability() *VolumeCapability { + if m != nil { + return m.VolumeCapability + } + return nil +} + +func (m *NodePublishVolumeRequest) GetReadonly() bool { + if m != nil { + return m.Readonly + } + return false +} + +func (m *NodePublishVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +func (m *NodePublishVolumeRequest) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +type NodePublishVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodePublishVolumeResponse) Reset() { *m = NodePublishVolumeResponse{} } +func (m *NodePublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodePublishVolumeResponse) ProtoMessage() {} +func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{42} +} +func (m *NodePublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodePublishVolumeResponse.Unmarshal(m, b) +} +func (m *NodePublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodePublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodePublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodePublishVolumeResponse.Merge(dst, src) +} +func (m *NodePublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodePublishVolumeResponse.Size(m) +} +func (m *NodePublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodePublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodePublishVolumeResponse proto.InternalMessageInfo + +type NodeUnpublishVolumeRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The path at which the volume was published. It MUST be an absolute + // path in the root filesystem of the process serving this request. + // The SP MUST delete the file or directory it created at this path. + // This is a REQUIRED field. + TargetPath string `protobuf:"bytes,2,opt,name=target_path,json=targetPath,proto3" json:"target_path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnpublishVolumeRequest) Reset() { *m = NodeUnpublishVolumeRequest{} } +func (m *NodeUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodeUnpublishVolumeRequest) ProtoMessage() {} +func (*NodeUnpublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{43} +} +func (m *NodeUnpublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnpublishVolumeRequest.Unmarshal(m, b) +} +func (m *NodeUnpublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnpublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodeUnpublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnpublishVolumeRequest.Merge(dst, src) +} +func (m *NodeUnpublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodeUnpublishVolumeRequest.Size(m) +} +func (m *NodeUnpublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnpublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnpublishVolumeRequest proto.InternalMessageInfo + +func (m *NodeUnpublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeUnpublishVolumeRequest) GetTargetPath() string { + if m != nil { + return m.TargetPath + } + return "" +} + +type NodeUnpublishVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnpublishVolumeResponse) Reset() { *m = NodeUnpublishVolumeResponse{} } +func (m *NodeUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodeUnpublishVolumeResponse) ProtoMessage() {} +func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{44} +} +func (m *NodeUnpublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnpublishVolumeResponse.Unmarshal(m, b) +} +func (m *NodeUnpublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnpublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodeUnpublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnpublishVolumeResponse.Merge(dst, src) +} +func (m *NodeUnpublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodeUnpublishVolumeResponse.Size(m) +} +func (m *NodeUnpublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnpublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnpublishVolumeResponse proto.InternalMessageInfo + +type NodeGetVolumeStatsRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // It can be any valid path where volume was previously + // staged or published. + // It MUST be an absolute path in the root filesystem of + // the process serving this request. + // This is a REQUIRED field. + VolumePath string `protobuf:"bytes,2,opt,name=volume_path,json=volumePath,proto3" json:"volume_path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetVolumeStatsRequest) Reset() { *m = NodeGetVolumeStatsRequest{} } +func (m *NodeGetVolumeStatsRequest) String() string { return proto.CompactTextString(m) } +func (*NodeGetVolumeStatsRequest) ProtoMessage() {} +func (*NodeGetVolumeStatsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{45} +} +func (m *NodeGetVolumeStatsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetVolumeStatsRequest.Unmarshal(m, b) +} +func (m *NodeGetVolumeStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetVolumeStatsRequest.Marshal(b, m, deterministic) +} +func (dst *NodeGetVolumeStatsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetVolumeStatsRequest.Merge(dst, src) +} +func (m *NodeGetVolumeStatsRequest) XXX_Size() int { + return xxx_messageInfo_NodeGetVolumeStatsRequest.Size(m) +} +func (m *NodeGetVolumeStatsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetVolumeStatsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetVolumeStatsRequest proto.InternalMessageInfo + +func (m *NodeGetVolumeStatsRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeGetVolumeStatsRequest) GetVolumePath() string { + if m != nil { + return m.VolumePath + } + return "" +} + +type NodeGetVolumeStatsResponse struct { + // This field is OPTIONAL. + Usage []*VolumeUsage `protobuf:"bytes,1,rep,name=usage,proto3" json:"usage,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetVolumeStatsResponse) Reset() { *m = NodeGetVolumeStatsResponse{} } +func (m *NodeGetVolumeStatsResponse) String() string { return proto.CompactTextString(m) } +func (*NodeGetVolumeStatsResponse) ProtoMessage() {} +func (*NodeGetVolumeStatsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{46} +} +func (m *NodeGetVolumeStatsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetVolumeStatsResponse.Unmarshal(m, b) +} +func (m *NodeGetVolumeStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetVolumeStatsResponse.Marshal(b, m, deterministic) +} +func (dst *NodeGetVolumeStatsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetVolumeStatsResponse.Merge(dst, src) +} +func (m *NodeGetVolumeStatsResponse) XXX_Size() int { + return xxx_messageInfo_NodeGetVolumeStatsResponse.Size(m) +} +func (m *NodeGetVolumeStatsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetVolumeStatsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetVolumeStatsResponse proto.InternalMessageInfo + +func (m *NodeGetVolumeStatsResponse) GetUsage() []*VolumeUsage { + if m != nil { + return m.Usage + } + return nil +} + +type VolumeUsage struct { + // The available capacity in specified Unit. This field is OPTIONAL. + // The value of this field MUST NOT be negative. + Available int64 `protobuf:"varint,1,opt,name=available,proto3" json:"available,omitempty"` + // The total capacity in specified Unit. This field is REQUIRED. + // The value of this field MUST NOT be negative. + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + // The used capacity in specified Unit. This field is OPTIONAL. + // The value of this field MUST NOT be negative. + Used int64 `protobuf:"varint,3,opt,name=used,proto3" json:"used,omitempty"` + // Units by which values are measured. This field is REQUIRED. + Unit VolumeUsage_Unit `protobuf:"varint,4,opt,name=unit,proto3,enum=csi.v1.VolumeUsage_Unit" json:"unit,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeUsage) Reset() { *m = VolumeUsage{} } +func (m *VolumeUsage) String() string { return proto.CompactTextString(m) } +func (*VolumeUsage) ProtoMessage() {} +func (*VolumeUsage) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{47} +} +func (m *VolumeUsage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeUsage.Unmarshal(m, b) +} +func (m *VolumeUsage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeUsage.Marshal(b, m, deterministic) +} +func (dst *VolumeUsage) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeUsage.Merge(dst, src) +} +func (m *VolumeUsage) XXX_Size() int { + return xxx_messageInfo_VolumeUsage.Size(m) +} +func (m *VolumeUsage) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeUsage.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeUsage proto.InternalMessageInfo + +func (m *VolumeUsage) GetAvailable() int64 { + if m != nil { + return m.Available + } + return 0 +} + +func (m *VolumeUsage) GetTotal() int64 { + if m != nil { + return m.Total + } + return 0 +} + +func (m *VolumeUsage) GetUsed() int64 { + if m != nil { + return m.Used + } + return 0 +} + +func (m *VolumeUsage) GetUnit() VolumeUsage_Unit { + if m != nil { + return m.Unit + } + return VolumeUsage_UNKNOWN +} + +type NodeGetCapabilitiesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetCapabilitiesRequest) Reset() { *m = NodeGetCapabilitiesRequest{} } +func (m *NodeGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*NodeGetCapabilitiesRequest) ProtoMessage() {} +func (*NodeGetCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{48} +} +func (m *NodeGetCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetCapabilitiesRequest.Unmarshal(m, b) +} +func (m *NodeGetCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *NodeGetCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetCapabilitiesRequest.Merge(dst, src) +} +func (m *NodeGetCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_NodeGetCapabilitiesRequest.Size(m) +} +func (m *NodeGetCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetCapabilitiesRequest proto.InternalMessageInfo + +type NodeGetCapabilitiesResponse struct { + // All the capabilities that the node service supports. This field + // is OPTIONAL. + Capabilities []*NodeServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetCapabilitiesResponse) Reset() { *m = NodeGetCapabilitiesResponse{} } +func (m *NodeGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*NodeGetCapabilitiesResponse) ProtoMessage() {} +func (*NodeGetCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{49} +} +func (m *NodeGetCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetCapabilitiesResponse.Unmarshal(m, b) +} +func (m *NodeGetCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *NodeGetCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetCapabilitiesResponse.Merge(dst, src) +} +func (m *NodeGetCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_NodeGetCapabilitiesResponse.Size(m) +} +func (m *NodeGetCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetCapabilitiesResponse proto.InternalMessageInfo + +func (m *NodeGetCapabilitiesResponse) GetCapabilities() []*NodeServiceCapability { + if m != nil { + return m.Capabilities + } + return nil +} + +// Specifies a capability of the node service. +type NodeServiceCapability struct { + // Types that are valid to be assigned to Type: + // *NodeServiceCapability_Rpc + Type isNodeServiceCapability_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeServiceCapability) Reset() { *m = NodeServiceCapability{} } +func (m *NodeServiceCapability) String() string { return proto.CompactTextString(m) } +func (*NodeServiceCapability) ProtoMessage() {} +func (*NodeServiceCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{50} +} +func (m *NodeServiceCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeServiceCapability.Unmarshal(m, b) +} +func (m *NodeServiceCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeServiceCapability.Marshal(b, m, deterministic) +} +func (dst *NodeServiceCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeServiceCapability.Merge(dst, src) +} +func (m *NodeServiceCapability) XXX_Size() int { + return xxx_messageInfo_NodeServiceCapability.Size(m) +} +func (m *NodeServiceCapability) XXX_DiscardUnknown() { + xxx_messageInfo_NodeServiceCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeServiceCapability proto.InternalMessageInfo + +type isNodeServiceCapability_Type interface { + isNodeServiceCapability_Type() +} + +type NodeServiceCapability_Rpc struct { + Rpc *NodeServiceCapability_RPC `protobuf:"bytes,1,opt,name=rpc,proto3,oneof"` +} + +func (*NodeServiceCapability_Rpc) isNodeServiceCapability_Type() {} + +func (m *NodeServiceCapability) GetType() isNodeServiceCapability_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *NodeServiceCapability) GetRpc() *NodeServiceCapability_RPC { + if x, ok := m.GetType().(*NodeServiceCapability_Rpc); ok { + return x.Rpc + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*NodeServiceCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _NodeServiceCapability_OneofMarshaler, _NodeServiceCapability_OneofUnmarshaler, _NodeServiceCapability_OneofSizer, []interface{}{ + (*NodeServiceCapability_Rpc)(nil), + } +} + +func _NodeServiceCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*NodeServiceCapability) + // type + switch x := m.Type.(type) { + case *NodeServiceCapability_Rpc: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Rpc); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("NodeServiceCapability.Type has unexpected type %T", x) + } + return nil +} + +func _NodeServiceCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*NodeServiceCapability) + switch tag { + case 1: // type.rpc + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(NodeServiceCapability_RPC) + err := b.DecodeMessage(msg) + m.Type = &NodeServiceCapability_Rpc{msg} + return true, err + default: + return false, nil + } +} + +func _NodeServiceCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*NodeServiceCapability) + // type + switch x := m.Type.(type) { + case *NodeServiceCapability_Rpc: + s := proto.Size(x.Rpc) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type NodeServiceCapability_RPC struct { + Type NodeServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csi.v1.NodeServiceCapability_RPC_Type" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeServiceCapability_RPC) Reset() { *m = NodeServiceCapability_RPC{} } +func (m *NodeServiceCapability_RPC) String() string { return proto.CompactTextString(m) } +func (*NodeServiceCapability_RPC) ProtoMessage() {} +func (*NodeServiceCapability_RPC) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{50, 0} +} +func (m *NodeServiceCapability_RPC) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeServiceCapability_RPC.Unmarshal(m, b) +} +func (m *NodeServiceCapability_RPC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeServiceCapability_RPC.Marshal(b, m, deterministic) +} +func (dst *NodeServiceCapability_RPC) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeServiceCapability_RPC.Merge(dst, src) +} +func (m *NodeServiceCapability_RPC) XXX_Size() int { + return xxx_messageInfo_NodeServiceCapability_RPC.Size(m) +} +func (m *NodeServiceCapability_RPC) XXX_DiscardUnknown() { + xxx_messageInfo_NodeServiceCapability_RPC.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeServiceCapability_RPC proto.InternalMessageInfo + +func (m *NodeServiceCapability_RPC) GetType() NodeServiceCapability_RPC_Type { + if m != nil { + return m.Type + } + return NodeServiceCapability_RPC_UNKNOWN +} + +type NodeGetInfoRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetInfoRequest) Reset() { *m = NodeGetInfoRequest{} } +func (m *NodeGetInfoRequest) String() string { return proto.CompactTextString(m) } +func (*NodeGetInfoRequest) ProtoMessage() {} +func (*NodeGetInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{51} +} +func (m *NodeGetInfoRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetInfoRequest.Unmarshal(m, b) +} +func (m *NodeGetInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetInfoRequest.Marshal(b, m, deterministic) +} +func (dst *NodeGetInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetInfoRequest.Merge(dst, src) +} +func (m *NodeGetInfoRequest) XXX_Size() int { + return xxx_messageInfo_NodeGetInfoRequest.Size(m) +} +func (m *NodeGetInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetInfoRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetInfoRequest proto.InternalMessageInfo + +type NodeGetInfoResponse struct { + // The identifier of the node as understood by the SP. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific node vs all other nodes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls, including + // `ControllerPublishVolume`, to refer to this node. + // The SP is NOT responsible for global uniqueness of node_id across + // multiple SPs. + NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + // Maximum number of volumes that controller can publish to the node. + // If value is not set or zero CO SHALL decide how many volumes of + // this type can be published by the controller to the node. The + // plugin MUST NOT set negative values here. + // This field is OPTIONAL. + MaxVolumesPerNode int64 `protobuf:"varint,2,opt,name=max_volumes_per_node,json=maxVolumesPerNode,proto3" json:"max_volumes_per_node,omitempty"` + // Specifies where (regions, zones, racks, etc.) the node is + // accessible from. + // A plugin that returns this field MUST also set the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // COs MAY use this information along with the topology information + // returned in CreateVolumeResponse to ensure that a given volume is + // accessible from a given node when scheduling workloads. + // This field is OPTIONAL. If it is not specified, the CO MAY assume + // the node is not subject to any topological constraint, and MAY + // schedule workloads that reference any volume V, such that there are + // no topological constraints declared for V. + // + // Example 1: + // accessible_topology = + // {"region": "R1", "zone": "R2"} + // Indicates the node exists within the "region" "R1" and the "zone" + // "Z2". + AccessibleTopology *Topology `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetInfoResponse) Reset() { *m = NodeGetInfoResponse{} } +func (m *NodeGetInfoResponse) String() string { return proto.CompactTextString(m) } +func (*NodeGetInfoResponse) ProtoMessage() {} +func (*NodeGetInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csi_1092d4f3f3c8dc30, []int{52} +} +func (m *NodeGetInfoResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetInfoResponse.Unmarshal(m, b) +} +func (m *NodeGetInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetInfoResponse.Marshal(b, m, deterministic) +} +func (dst *NodeGetInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetInfoResponse.Merge(dst, src) +} +func (m *NodeGetInfoResponse) XXX_Size() int { + return xxx_messageInfo_NodeGetInfoResponse.Size(m) +} +func (m *NodeGetInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetInfoResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetInfoResponse proto.InternalMessageInfo + +func (m *NodeGetInfoResponse) GetNodeId() string { + if m != nil { + return m.NodeId + } + return "" +} + +func (m *NodeGetInfoResponse) GetMaxVolumesPerNode() int64 { + if m != nil { + return m.MaxVolumesPerNode + } + return 0 +} + +func (m *NodeGetInfoResponse) GetAccessibleTopology() *Topology { + if m != nil { + return m.AccessibleTopology + } + return nil +} + +var E_CsiSecret = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 1059, + Name: "csi.v1.csi_secret", + Tag: "varint,1059,opt,name=csi_secret,json=csiSecret", + Filename: "github.com/container-storage-interface/spec/csi.proto", +} + +func init() { + proto.RegisterType((*GetPluginInfoRequest)(nil), "csi.v1.GetPluginInfoRequest") + proto.RegisterType((*GetPluginInfoResponse)(nil), "csi.v1.GetPluginInfoResponse") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.GetPluginInfoResponse.ManifestEntry") + proto.RegisterType((*GetPluginCapabilitiesRequest)(nil), "csi.v1.GetPluginCapabilitiesRequest") + proto.RegisterType((*GetPluginCapabilitiesResponse)(nil), "csi.v1.GetPluginCapabilitiesResponse") + proto.RegisterType((*PluginCapability)(nil), "csi.v1.PluginCapability") + proto.RegisterType((*PluginCapability_Service)(nil), "csi.v1.PluginCapability.Service") + proto.RegisterType((*ProbeRequest)(nil), "csi.v1.ProbeRequest") + proto.RegisterType((*ProbeResponse)(nil), "csi.v1.ProbeResponse") + proto.RegisterType((*CreateVolumeRequest)(nil), "csi.v1.CreateVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.CreateVolumeRequest.ParametersEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.CreateVolumeRequest.SecretsEntry") + proto.RegisterType((*VolumeContentSource)(nil), "csi.v1.VolumeContentSource") + proto.RegisterType((*VolumeContentSource_SnapshotSource)(nil), "csi.v1.VolumeContentSource.SnapshotSource") + proto.RegisterType((*VolumeContentSource_VolumeSource)(nil), "csi.v1.VolumeContentSource.VolumeSource") + proto.RegisterType((*CreateVolumeResponse)(nil), "csi.v1.CreateVolumeResponse") + proto.RegisterType((*VolumeCapability)(nil), "csi.v1.VolumeCapability") + proto.RegisterType((*VolumeCapability_BlockVolume)(nil), "csi.v1.VolumeCapability.BlockVolume") + proto.RegisterType((*VolumeCapability_MountVolume)(nil), "csi.v1.VolumeCapability.MountVolume") + proto.RegisterType((*VolumeCapability_AccessMode)(nil), "csi.v1.VolumeCapability.AccessMode") + proto.RegisterType((*CapacityRange)(nil), "csi.v1.CapacityRange") + proto.RegisterType((*Volume)(nil), "csi.v1.Volume") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.Volume.VolumeContextEntry") + proto.RegisterType((*TopologyRequirement)(nil), "csi.v1.TopologyRequirement") + proto.RegisterType((*Topology)(nil), "csi.v1.Topology") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.Topology.SegmentsEntry") + proto.RegisterType((*DeleteVolumeRequest)(nil), "csi.v1.DeleteVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.DeleteVolumeRequest.SecretsEntry") + proto.RegisterType((*DeleteVolumeResponse)(nil), "csi.v1.DeleteVolumeResponse") + proto.RegisterType((*ControllerPublishVolumeRequest)(nil), "csi.v1.ControllerPublishVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.ControllerPublishVolumeRequest.SecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.ControllerPublishVolumeRequest.VolumeContextEntry") + proto.RegisterType((*ControllerPublishVolumeResponse)(nil), "csi.v1.ControllerPublishVolumeResponse") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.ControllerPublishVolumeResponse.PublishContextEntry") + proto.RegisterType((*ControllerUnpublishVolumeRequest)(nil), "csi.v1.ControllerUnpublishVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.ControllerUnpublishVolumeRequest.SecretsEntry") + proto.RegisterType((*ControllerUnpublishVolumeResponse)(nil), "csi.v1.ControllerUnpublishVolumeResponse") + proto.RegisterType((*ValidateVolumeCapabilitiesRequest)(nil), "csi.v1.ValidateVolumeCapabilitiesRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.ValidateVolumeCapabilitiesRequest.ParametersEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.ValidateVolumeCapabilitiesRequest.SecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.ValidateVolumeCapabilitiesRequest.VolumeContextEntry") + proto.RegisterType((*ValidateVolumeCapabilitiesResponse)(nil), "csi.v1.ValidateVolumeCapabilitiesResponse") + proto.RegisterType((*ValidateVolumeCapabilitiesResponse_Confirmed)(nil), "csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.ParametersEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.ValidateVolumeCapabilitiesResponse.Confirmed.VolumeContextEntry") + proto.RegisterType((*ListVolumesRequest)(nil), "csi.v1.ListVolumesRequest") + proto.RegisterType((*ListVolumesResponse)(nil), "csi.v1.ListVolumesResponse") + proto.RegisterType((*ListVolumesResponse_Entry)(nil), "csi.v1.ListVolumesResponse.Entry") + proto.RegisterType((*GetCapacityRequest)(nil), "csi.v1.GetCapacityRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.GetCapacityRequest.ParametersEntry") + proto.RegisterType((*GetCapacityResponse)(nil), "csi.v1.GetCapacityResponse") + proto.RegisterType((*ControllerGetCapabilitiesRequest)(nil), "csi.v1.ControllerGetCapabilitiesRequest") + proto.RegisterType((*ControllerGetCapabilitiesResponse)(nil), "csi.v1.ControllerGetCapabilitiesResponse") + proto.RegisterType((*ControllerServiceCapability)(nil), "csi.v1.ControllerServiceCapability") + proto.RegisterType((*ControllerServiceCapability_RPC)(nil), "csi.v1.ControllerServiceCapability.RPC") + proto.RegisterType((*CreateSnapshotRequest)(nil), "csi.v1.CreateSnapshotRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.CreateSnapshotRequest.ParametersEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.CreateSnapshotRequest.SecretsEntry") + proto.RegisterType((*CreateSnapshotResponse)(nil), "csi.v1.CreateSnapshotResponse") + proto.RegisterType((*Snapshot)(nil), "csi.v1.Snapshot") + proto.RegisterType((*DeleteSnapshotRequest)(nil), "csi.v1.DeleteSnapshotRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.DeleteSnapshotRequest.SecretsEntry") + proto.RegisterType((*DeleteSnapshotResponse)(nil), "csi.v1.DeleteSnapshotResponse") + proto.RegisterType((*ListSnapshotsRequest)(nil), "csi.v1.ListSnapshotsRequest") + proto.RegisterType((*ListSnapshotsResponse)(nil), "csi.v1.ListSnapshotsResponse") + proto.RegisterType((*ListSnapshotsResponse_Entry)(nil), "csi.v1.ListSnapshotsResponse.Entry") + proto.RegisterType((*NodeStageVolumeRequest)(nil), "csi.v1.NodeStageVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.NodeStageVolumeRequest.PublishContextEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.NodeStageVolumeRequest.SecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.NodeStageVolumeRequest.VolumeContextEntry") + proto.RegisterType((*NodeStageVolumeResponse)(nil), "csi.v1.NodeStageVolumeResponse") + proto.RegisterType((*NodeUnstageVolumeRequest)(nil), "csi.v1.NodeUnstageVolumeRequest") + proto.RegisterType((*NodeUnstageVolumeResponse)(nil), "csi.v1.NodeUnstageVolumeResponse") + proto.RegisterType((*NodePublishVolumeRequest)(nil), "csi.v1.NodePublishVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.NodePublishVolumeRequest.PublishContextEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.NodePublishVolumeRequest.SecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csi.v1.NodePublishVolumeRequest.VolumeContextEntry") + proto.RegisterType((*NodePublishVolumeResponse)(nil), "csi.v1.NodePublishVolumeResponse") + proto.RegisterType((*NodeUnpublishVolumeRequest)(nil), "csi.v1.NodeUnpublishVolumeRequest") + proto.RegisterType((*NodeUnpublishVolumeResponse)(nil), "csi.v1.NodeUnpublishVolumeResponse") + proto.RegisterType((*NodeGetVolumeStatsRequest)(nil), "csi.v1.NodeGetVolumeStatsRequest") + proto.RegisterType((*NodeGetVolumeStatsResponse)(nil), "csi.v1.NodeGetVolumeStatsResponse") + proto.RegisterType((*VolumeUsage)(nil), "csi.v1.VolumeUsage") + proto.RegisterType((*NodeGetCapabilitiesRequest)(nil), "csi.v1.NodeGetCapabilitiesRequest") + proto.RegisterType((*NodeGetCapabilitiesResponse)(nil), "csi.v1.NodeGetCapabilitiesResponse") + proto.RegisterType((*NodeServiceCapability)(nil), "csi.v1.NodeServiceCapability") + proto.RegisterType((*NodeServiceCapability_RPC)(nil), "csi.v1.NodeServiceCapability.RPC") + proto.RegisterType((*NodeGetInfoRequest)(nil), "csi.v1.NodeGetInfoRequest") + proto.RegisterType((*NodeGetInfoResponse)(nil), "csi.v1.NodeGetInfoResponse") + proto.RegisterEnum("csi.v1.PluginCapability_Service_Type", PluginCapability_Service_Type_name, PluginCapability_Service_Type_value) + proto.RegisterEnum("csi.v1.VolumeCapability_AccessMode_Mode", VolumeCapability_AccessMode_Mode_name, VolumeCapability_AccessMode_Mode_value) + proto.RegisterEnum("csi.v1.ControllerServiceCapability_RPC_Type", ControllerServiceCapability_RPC_Type_name, ControllerServiceCapability_RPC_Type_value) + proto.RegisterEnum("csi.v1.VolumeUsage_Unit", VolumeUsage_Unit_name, VolumeUsage_Unit_value) + proto.RegisterEnum("csi.v1.NodeServiceCapability_RPC_Type", NodeServiceCapability_RPC_Type_name, NodeServiceCapability_RPC_Type_value) + proto.RegisterExtension(E_CsiSecret) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// IdentityClient is the client API for Identity service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type IdentityClient interface { + GetPluginInfo(ctx context.Context, in *GetPluginInfoRequest, opts ...grpc.CallOption) (*GetPluginInfoResponse, error) + GetPluginCapabilities(ctx context.Context, in *GetPluginCapabilitiesRequest, opts ...grpc.CallOption) (*GetPluginCapabilitiesResponse, error) + Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (*ProbeResponse, error) +} + +type identityClient struct { + cc *grpc.ClientConn +} + +func NewIdentityClient(cc *grpc.ClientConn) IdentityClient { + return &identityClient{cc} +} + +func (c *identityClient) GetPluginInfo(ctx context.Context, in *GetPluginInfoRequest, opts ...grpc.CallOption) (*GetPluginInfoResponse, error) { + out := new(GetPluginInfoResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Identity/GetPluginInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identityClient) GetPluginCapabilities(ctx context.Context, in *GetPluginCapabilitiesRequest, opts ...grpc.CallOption) (*GetPluginCapabilitiesResponse, error) { + out := new(GetPluginCapabilitiesResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Identity/GetPluginCapabilities", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identityClient) Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (*ProbeResponse, error) { + out := new(ProbeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Identity/Probe", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// IdentityServer is the server API for Identity service. +type IdentityServer interface { + GetPluginInfo(context.Context, *GetPluginInfoRequest) (*GetPluginInfoResponse, error) + GetPluginCapabilities(context.Context, *GetPluginCapabilitiesRequest) (*GetPluginCapabilitiesResponse, error) + Probe(context.Context, *ProbeRequest) (*ProbeResponse, error) +} + +func RegisterIdentityServer(s *grpc.Server, srv IdentityServer) { + s.RegisterService(&_Identity_serviceDesc, srv) +} + +func _Identity_GetPluginInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPluginInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityServer).GetPluginInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Identity/GetPluginInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityServer).GetPluginInfo(ctx, req.(*GetPluginInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identity_GetPluginCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPluginCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityServer).GetPluginCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Identity/GetPluginCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityServer).GetPluginCapabilities(ctx, req.(*GetPluginCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identity_Probe_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ProbeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityServer).Probe(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Identity/Probe", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityServer).Probe(ctx, req.(*ProbeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Identity_serviceDesc = grpc.ServiceDesc{ + ServiceName: "csi.v1.Identity", + HandlerType: (*IdentityServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetPluginInfo", + Handler: _Identity_GetPluginInfo_Handler, + }, + { + MethodName: "GetPluginCapabilities", + Handler: _Identity_GetPluginCapabilities_Handler, + }, + { + MethodName: "Probe", + Handler: _Identity_Probe_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "github.com/container-storage-interface/spec/csi.proto", +} + +// ControllerClient is the client API for Controller service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type ControllerClient interface { + CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) + DeleteVolume(ctx context.Context, in *DeleteVolumeRequest, opts ...grpc.CallOption) (*DeleteVolumeResponse, error) + ControllerPublishVolume(ctx context.Context, in *ControllerPublishVolumeRequest, opts ...grpc.CallOption) (*ControllerPublishVolumeResponse, error) + ControllerUnpublishVolume(ctx context.Context, in *ControllerUnpublishVolumeRequest, opts ...grpc.CallOption) (*ControllerUnpublishVolumeResponse, error) + ValidateVolumeCapabilities(ctx context.Context, in *ValidateVolumeCapabilitiesRequest, opts ...grpc.CallOption) (*ValidateVolumeCapabilitiesResponse, error) + ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) + GetCapacity(ctx context.Context, in *GetCapacityRequest, opts ...grpc.CallOption) (*GetCapacityResponse, error) + ControllerGetCapabilities(ctx context.Context, in *ControllerGetCapabilitiesRequest, opts ...grpc.CallOption) (*ControllerGetCapabilitiesResponse, error) + CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*CreateSnapshotResponse, error) + DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*DeleteSnapshotResponse, error) + ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) +} + +type controllerClient struct { + cc *grpc.ClientConn +} + +func NewControllerClient(cc *grpc.ClientConn) ControllerClient { + return &controllerClient{cc} +} + +func (c *controllerClient) CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) { + out := new(CreateVolumeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/CreateVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) DeleteVolume(ctx context.Context, in *DeleteVolumeRequest, opts ...grpc.CallOption) (*DeleteVolumeResponse, error) { + out := new(DeleteVolumeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/DeleteVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ControllerPublishVolume(ctx context.Context, in *ControllerPublishVolumeRequest, opts ...grpc.CallOption) (*ControllerPublishVolumeResponse, error) { + out := new(ControllerPublishVolumeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/ControllerPublishVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ControllerUnpublishVolume(ctx context.Context, in *ControllerUnpublishVolumeRequest, opts ...grpc.CallOption) (*ControllerUnpublishVolumeResponse, error) { + out := new(ControllerUnpublishVolumeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/ControllerUnpublishVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ValidateVolumeCapabilities(ctx context.Context, in *ValidateVolumeCapabilitiesRequest, opts ...grpc.CallOption) (*ValidateVolumeCapabilitiesResponse, error) { + out := new(ValidateVolumeCapabilitiesResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/ValidateVolumeCapabilities", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) { + out := new(ListVolumesResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/ListVolumes", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) GetCapacity(ctx context.Context, in *GetCapacityRequest, opts ...grpc.CallOption) (*GetCapacityResponse, error) { + out := new(GetCapacityResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/GetCapacity", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ControllerGetCapabilities(ctx context.Context, in *ControllerGetCapabilitiesRequest, opts ...grpc.CallOption) (*ControllerGetCapabilitiesResponse, error) { + out := new(ControllerGetCapabilitiesResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/ControllerGetCapabilities", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*CreateSnapshotResponse, error) { + out := new(CreateSnapshotResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/CreateSnapshot", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*DeleteSnapshotResponse, error) { + out := new(DeleteSnapshotResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/DeleteSnapshot", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) { + out := new(ListSnapshotsResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Controller/ListSnapshots", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ControllerServer is the server API for Controller service. +type ControllerServer interface { + CreateVolume(context.Context, *CreateVolumeRequest) (*CreateVolumeResponse, error) + DeleteVolume(context.Context, *DeleteVolumeRequest) (*DeleteVolumeResponse, error) + ControllerPublishVolume(context.Context, *ControllerPublishVolumeRequest) (*ControllerPublishVolumeResponse, error) + ControllerUnpublishVolume(context.Context, *ControllerUnpublishVolumeRequest) (*ControllerUnpublishVolumeResponse, error) + ValidateVolumeCapabilities(context.Context, *ValidateVolumeCapabilitiesRequest) (*ValidateVolumeCapabilitiesResponse, error) + ListVolumes(context.Context, *ListVolumesRequest) (*ListVolumesResponse, error) + GetCapacity(context.Context, *GetCapacityRequest) (*GetCapacityResponse, error) + ControllerGetCapabilities(context.Context, *ControllerGetCapabilitiesRequest) (*ControllerGetCapabilitiesResponse, error) + CreateSnapshot(context.Context, *CreateSnapshotRequest) (*CreateSnapshotResponse, error) + DeleteSnapshot(context.Context, *DeleteSnapshotRequest) (*DeleteSnapshotResponse, error) + ListSnapshots(context.Context, *ListSnapshotsRequest) (*ListSnapshotsResponse, error) +} + +func RegisterControllerServer(s *grpc.Server, srv ControllerServer) { + s.RegisterService(&_Controller_serviceDesc, srv) +} + +func _Controller_CreateVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).CreateVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/CreateVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).CreateVolume(ctx, req.(*CreateVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_DeleteVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).DeleteVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/DeleteVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).DeleteVolume(ctx, req.(*DeleteVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ControllerPublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerPublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ControllerPublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/ControllerPublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ControllerPublishVolume(ctx, req.(*ControllerPublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ControllerUnpublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerUnpublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ControllerUnpublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/ControllerUnpublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ControllerUnpublishVolume(ctx, req.(*ControllerUnpublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ValidateVolumeCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ValidateVolumeCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ValidateVolumeCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/ValidateVolumeCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ValidateVolumeCapabilities(ctx, req.(*ValidateVolumeCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ListVolumes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListVolumesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ListVolumes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/ListVolumes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ListVolumes(ctx, req.(*ListVolumesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_GetCapacity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetCapacityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).GetCapacity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/GetCapacity", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).GetCapacity(ctx, req.(*GetCapacityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ControllerGetCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerGetCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ControllerGetCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/ControllerGetCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ControllerGetCapabilities(ctx, req.(*ControllerGetCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_CreateSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).CreateSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/CreateSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).CreateSnapshot(ctx, req.(*CreateSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_DeleteSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).DeleteSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/DeleteSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).DeleteSnapshot(ctx, req.(*DeleteSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ListSnapshots_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSnapshotsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ListSnapshots(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Controller/ListSnapshots", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ListSnapshots(ctx, req.(*ListSnapshotsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Controller_serviceDesc = grpc.ServiceDesc{ + ServiceName: "csi.v1.Controller", + HandlerType: (*ControllerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateVolume", + Handler: _Controller_CreateVolume_Handler, + }, + { + MethodName: "DeleteVolume", + Handler: _Controller_DeleteVolume_Handler, + }, + { + MethodName: "ControllerPublishVolume", + Handler: _Controller_ControllerPublishVolume_Handler, + }, + { + MethodName: "ControllerUnpublishVolume", + Handler: _Controller_ControllerUnpublishVolume_Handler, + }, + { + MethodName: "ValidateVolumeCapabilities", + Handler: _Controller_ValidateVolumeCapabilities_Handler, + }, + { + MethodName: "ListVolumes", + Handler: _Controller_ListVolumes_Handler, + }, + { + MethodName: "GetCapacity", + Handler: _Controller_GetCapacity_Handler, + }, + { + MethodName: "ControllerGetCapabilities", + Handler: _Controller_ControllerGetCapabilities_Handler, + }, + { + MethodName: "CreateSnapshot", + Handler: _Controller_CreateSnapshot_Handler, + }, + { + MethodName: "DeleteSnapshot", + Handler: _Controller_DeleteSnapshot_Handler, + }, + { + MethodName: "ListSnapshots", + Handler: _Controller_ListSnapshots_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "github.com/container-storage-interface/spec/csi.proto", +} + +// NodeClient is the client API for Node service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type NodeClient interface { + NodeStageVolume(ctx context.Context, in *NodeStageVolumeRequest, opts ...grpc.CallOption) (*NodeStageVolumeResponse, error) + NodeUnstageVolume(ctx context.Context, in *NodeUnstageVolumeRequest, opts ...grpc.CallOption) (*NodeUnstageVolumeResponse, error) + NodePublishVolume(ctx context.Context, in *NodePublishVolumeRequest, opts ...grpc.CallOption) (*NodePublishVolumeResponse, error) + NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishVolumeRequest, opts ...grpc.CallOption) (*NodeUnpublishVolumeResponse, error) + NodeGetVolumeStats(ctx context.Context, in *NodeGetVolumeStatsRequest, opts ...grpc.CallOption) (*NodeGetVolumeStatsResponse, error) + NodeGetCapabilities(ctx context.Context, in *NodeGetCapabilitiesRequest, opts ...grpc.CallOption) (*NodeGetCapabilitiesResponse, error) + NodeGetInfo(ctx context.Context, in *NodeGetInfoRequest, opts ...grpc.CallOption) (*NodeGetInfoResponse, error) +} + +type nodeClient struct { + cc *grpc.ClientConn +} + +func NewNodeClient(cc *grpc.ClientConn) NodeClient { + return &nodeClient{cc} +} + +func (c *nodeClient) NodeStageVolume(ctx context.Context, in *NodeStageVolumeRequest, opts ...grpc.CallOption) (*NodeStageVolumeResponse, error) { + out := new(NodeStageVolumeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Node/NodeStageVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeUnstageVolume(ctx context.Context, in *NodeUnstageVolumeRequest, opts ...grpc.CallOption) (*NodeUnstageVolumeResponse, error) { + out := new(NodeUnstageVolumeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Node/NodeUnstageVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodePublishVolume(ctx context.Context, in *NodePublishVolumeRequest, opts ...grpc.CallOption) (*NodePublishVolumeResponse, error) { + out := new(NodePublishVolumeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Node/NodePublishVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishVolumeRequest, opts ...grpc.CallOption) (*NodeUnpublishVolumeResponse, error) { + out := new(NodeUnpublishVolumeResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Node/NodeUnpublishVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeGetVolumeStats(ctx context.Context, in *NodeGetVolumeStatsRequest, opts ...grpc.CallOption) (*NodeGetVolumeStatsResponse, error) { + out := new(NodeGetVolumeStatsResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Node/NodeGetVolumeStats", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeGetCapabilities(ctx context.Context, in *NodeGetCapabilitiesRequest, opts ...grpc.CallOption) (*NodeGetCapabilitiesResponse, error) { + out := new(NodeGetCapabilitiesResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Node/NodeGetCapabilities", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeGetInfo(ctx context.Context, in *NodeGetInfoRequest, opts ...grpc.CallOption) (*NodeGetInfoResponse, error) { + out := new(NodeGetInfoResponse) + err := c.cc.Invoke(ctx, "/csi.v1.Node/NodeGetInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// NodeServer is the server API for Node service. +type NodeServer interface { + NodeStageVolume(context.Context, *NodeStageVolumeRequest) (*NodeStageVolumeResponse, error) + NodeUnstageVolume(context.Context, *NodeUnstageVolumeRequest) (*NodeUnstageVolumeResponse, error) + NodePublishVolume(context.Context, *NodePublishVolumeRequest) (*NodePublishVolumeResponse, error) + NodeUnpublishVolume(context.Context, *NodeUnpublishVolumeRequest) (*NodeUnpublishVolumeResponse, error) + NodeGetVolumeStats(context.Context, *NodeGetVolumeStatsRequest) (*NodeGetVolumeStatsResponse, error) + NodeGetCapabilities(context.Context, *NodeGetCapabilitiesRequest) (*NodeGetCapabilitiesResponse, error) + NodeGetInfo(context.Context, *NodeGetInfoRequest) (*NodeGetInfoResponse, error) +} + +func RegisterNodeServer(s *grpc.Server, srv NodeServer) { + s.RegisterService(&_Node_serviceDesc, srv) +} + +func _Node_NodeStageVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeStageVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeStageVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Node/NodeStageVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeStageVolume(ctx, req.(*NodeStageVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeUnstageVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeUnstageVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeUnstageVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Node/NodeUnstageVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeUnstageVolume(ctx, req.(*NodeUnstageVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodePublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodePublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodePublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Node/NodePublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodePublishVolume(ctx, req.(*NodePublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeUnpublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeUnpublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeUnpublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Node/NodeUnpublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeUnpublishVolume(ctx, req.(*NodeUnpublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeGetVolumeStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeGetVolumeStatsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeGetVolumeStats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Node/NodeGetVolumeStats", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeGetVolumeStats(ctx, req.(*NodeGetVolumeStatsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeGetCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeGetCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeGetCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Node/NodeGetCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeGetCapabilities(ctx, req.(*NodeGetCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeGetInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeGetInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeGetInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csi.v1.Node/NodeGetInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeGetInfo(ctx, req.(*NodeGetInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Node_serviceDesc = grpc.ServiceDesc{ + ServiceName: "csi.v1.Node", + HandlerType: (*NodeServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "NodeStageVolume", + Handler: _Node_NodeStageVolume_Handler, + }, + { + MethodName: "NodeUnstageVolume", + Handler: _Node_NodeUnstageVolume_Handler, + }, + { + MethodName: "NodePublishVolume", + Handler: _Node_NodePublishVolume_Handler, + }, + { + MethodName: "NodeUnpublishVolume", + Handler: _Node_NodeUnpublishVolume_Handler, + }, + { + MethodName: "NodeGetVolumeStats", + Handler: _Node_NodeGetVolumeStats_Handler, + }, + { + MethodName: "NodeGetCapabilities", + Handler: _Node_NodeGetCapabilities_Handler, + }, + { + MethodName: "NodeGetInfo", + Handler: _Node_NodeGetInfo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "github.com/container-storage-interface/spec/csi.proto", +} + +func init() { + proto.RegisterFile("github.com/container-storage-interface/spec/csi.proto", fileDescriptor_csi_1092d4f3f3c8dc30) +} + +var fileDescriptor_csi_1092d4f3f3c8dc30 = []byte{ + // 3070 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x1a, 0x4d, 0x6f, 0xe3, 0xc6, + 0xd5, 0xd4, 0x87, 0x3f, 0x9e, 0x6d, 0x45, 0x3b, 0xfe, 0x58, 0x2d, 0x6d, 0xef, 0x7a, 0xb9, 0xd9, + 0xc4, 0xd9, 0x64, 0xe5, 0xc6, 0xc9, 0x06, 0xcd, 0xee, 0xa6, 0x8d, 0x24, 0x2b, 0xb6, 0xb2, 0x5a, + 0xd9, 0xa1, 0x64, 0xa7, 0xbb, 0x6d, 0xc0, 0xd0, 0xd2, 0x58, 0x4b, 0x44, 0x22, 0x15, 0x72, 0xe4, + 0xae, 0x7b, 0x2b, 0x0a, 0xf4, 0xd2, 0x53, 0x4f, 0xed, 0xad, 0x40, 0x7a, 0x6a, 0xd1, 0xa0, 0xa7, + 0xa2, 0xc7, 0x02, 0xbd, 0x14, 0xe8, 0x1f, 0x68, 0x6f, 0xb9, 0x07, 0x2d, 0x10, 0xf4, 0xd0, 0x43, + 0x81, 0x02, 0x05, 0x39, 0x43, 0x8a, 0x43, 0x91, 0x94, 0xb4, 0xde, 0x20, 0x87, 0x9e, 0x24, 0xbe, + 0x79, 0x5f, 0xf3, 0xe6, 0xbd, 0x37, 0xef, 0x3d, 0x12, 0xee, 0xb4, 0x35, 0xf2, 0xa4, 0x7f, 0x92, + 0x6f, 0x1a, 0xdd, 0xed, 0xa6, 0xa1, 0x13, 0x55, 0xd3, 0xb1, 0x79, 0xdb, 0x22, 0x86, 0xa9, 0xb6, + 0xf1, 0x6d, 0x4d, 0x27, 0xd8, 0x3c, 0x55, 0x9b, 0x78, 0xdb, 0xea, 0xe1, 0xe6, 0x76, 0xd3, 0xd2, + 0xf2, 0x3d, 0xd3, 0x20, 0x06, 0x9a, 0xb6, 0xff, 0x9e, 0xbd, 0x2e, 0x6e, 0xb6, 0x0d, 0xa3, 0xdd, + 0xc1, 0xdb, 0x0e, 0xf4, 0xa4, 0x7f, 0xba, 0xdd, 0xc2, 0x56, 0xd3, 0xd4, 0x7a, 0xc4, 0x30, 0x29, + 0xa6, 0x78, 0x2d, 0x88, 0x41, 0xb4, 0x2e, 0xb6, 0x88, 0xda, 0xed, 0x31, 0x84, 0xab, 0x41, 0x84, + 0x1f, 0x9a, 0x6a, 0xaf, 0x87, 0x4d, 0x8b, 0xae, 0x4b, 0xab, 0xb0, 0xbc, 0x87, 0xc9, 0x61, 0xa7, + 0xdf, 0xd6, 0xf4, 0x8a, 0x7e, 0x6a, 0xc8, 0xf8, 0xd3, 0x3e, 0xb6, 0x88, 0xf4, 0x77, 0x01, 0x56, + 0x02, 0x0b, 0x56, 0xcf, 0xd0, 0x2d, 0x8c, 0x10, 0xa4, 0x74, 0xb5, 0x8b, 0x73, 0xc2, 0xa6, 0xb0, + 0x35, 0x27, 0x3b, 0xff, 0xd1, 0x4d, 0xc8, 0x9c, 0x61, 0xbd, 0x65, 0x98, 0xca, 0x19, 0x36, 0x2d, + 0xcd, 0xd0, 0x73, 0x09, 0x67, 0x75, 0x91, 0x42, 0x8f, 0x29, 0x10, 0xed, 0xc1, 0x6c, 0x57, 0xd5, + 0xb5, 0x53, 0x6c, 0x91, 0x5c, 0x72, 0x33, 0xb9, 0x35, 0xbf, 0xf3, 0x6a, 0x9e, 0x6e, 0x35, 0x1f, + 0x2a, 0x2b, 0xff, 0x90, 0x61, 0x97, 0x75, 0x62, 0x9e, 0xcb, 0x1e, 0xb1, 0x78, 0x0f, 0x16, 0xb9, + 0x25, 0x94, 0x85, 0xe4, 0x27, 0xf8, 0x9c, 0xe9, 0x64, 0xff, 0x45, 0xcb, 0x90, 0x3e, 0x53, 0x3b, + 0x7d, 0xcc, 0x34, 0xa1, 0x0f, 0x77, 0x13, 0xdf, 0x16, 0xa4, 0xab, 0xb0, 0xee, 0x49, 0x2b, 0xa9, + 0x3d, 0xf5, 0x44, 0xeb, 0x68, 0x44, 0xc3, 0x96, 0xbb, 0xf5, 0x8f, 0x60, 0x23, 0x62, 0x9d, 0x59, + 0xe0, 0x3e, 0x2c, 0x34, 0x7d, 0xf0, 0x9c, 0xe0, 0x6c, 0x25, 0xe7, 0x6e, 0x25, 0x40, 0x79, 0x2e, + 0x73, 0xd8, 0xd2, 0xbf, 0x04, 0xc8, 0x06, 0x51, 0xd0, 0x7d, 0x98, 0xb1, 0xb0, 0x79, 0xa6, 0x35, + 0xa9, 0x5d, 0xe7, 0x77, 0x36, 0xa3, 0xb8, 0xe5, 0xeb, 0x14, 0x6f, 0x7f, 0x4a, 0x76, 0x49, 0xc4, + 0x5f, 0x08, 0x30, 0xc3, 0xc0, 0xe8, 0x6d, 0x48, 0x91, 0xf3, 0x1e, 0x65, 0x93, 0xd9, 0xb9, 0x39, + 0x8a, 0x4d, 0xbe, 0x71, 0xde, 0xc3, 0xb2, 0x43, 0x22, 0x7d, 0x00, 0x29, 0xfb, 0x09, 0xcd, 0xc3, + 0xcc, 0x51, 0xed, 0x41, 0xed, 0xe0, 0xc3, 0x5a, 0x76, 0x0a, 0xad, 0x02, 0x2a, 0x1d, 0xd4, 0x1a, + 0xf2, 0x41, 0xb5, 0x5a, 0x96, 0x95, 0x7a, 0x59, 0x3e, 0xae, 0x94, 0xca, 0x59, 0x01, 0xbd, 0x08, + 0x9b, 0xc7, 0x07, 0xd5, 0xa3, 0x87, 0x65, 0xa5, 0x50, 0x2a, 0x95, 0xeb, 0xf5, 0x4a, 0xb1, 0x52, + 0xad, 0x34, 0x1e, 0x29, 0xa5, 0x83, 0x5a, 0xbd, 0x21, 0x17, 0x2a, 0xb5, 0x46, 0x3d, 0x9b, 0x28, + 0x4e, 0x53, 0x6d, 0xa4, 0x0c, 0x2c, 0x1c, 0x9a, 0xc6, 0x09, 0x76, 0x6d, 0x5c, 0x80, 0x45, 0xf6, + 0xcc, 0x6c, 0xfa, 0x2d, 0x48, 0x9b, 0x58, 0x6d, 0x9d, 0xb3, 0xed, 0x8b, 0x79, 0xea, 0xb7, 0x79, + 0xd7, 0x6f, 0xf3, 0x45, 0xc3, 0xe8, 0x1c, 0xdb, 0x67, 0x28, 0x53, 0x44, 0xe9, 0xab, 0x14, 0x2c, + 0x95, 0x4c, 0xac, 0x12, 0x7c, 0x6c, 0x74, 0xfa, 0x5d, 0x97, 0x75, 0xa8, 0x7f, 0xde, 0x87, 0x8c, + 0x7d, 0x06, 0x4d, 0x8d, 0x9c, 0x2b, 0xa6, 0xaa, 0xb7, 0xa9, 0x57, 0xcc, 0xef, 0xac, 0xb8, 0xe6, + 0x29, 0xb1, 0x55, 0xd9, 0x5e, 0x94, 0x17, 0x9b, 0xfe, 0x47, 0x54, 0x81, 0xa5, 0x33, 0x47, 0x84, + 0xc2, 0x1d, 0x7b, 0x92, 0x3f, 0x76, 0xaa, 0x85, 0xef, 0xd8, 0xd1, 0x19, 0x0f, 0xd1, 0xb0, 0x85, + 0x1e, 0x00, 0xf4, 0x54, 0x53, 0xed, 0x62, 0x82, 0x4d, 0x2b, 0x97, 0xe2, 0x63, 0x20, 0x64, 0x37, + 0xf9, 0x43, 0x0f, 0x9b, 0xc6, 0x80, 0x8f, 0x1c, 0xed, 0xd9, 0x4e, 0xd3, 0x34, 0x31, 0xb1, 0x72, + 0x69, 0x87, 0xd3, 0x56, 0x1c, 0xa7, 0x3a, 0x45, 0x75, 0xd8, 0x14, 0x93, 0xbf, 0x2c, 0x0a, 0xb2, + 0x4b, 0x8d, 0x0e, 0x60, 0xc5, 0xdd, 0xa0, 0xa1, 0x13, 0xac, 0x13, 0xc5, 0x32, 0xfa, 0x66, 0x13, + 0xe7, 0xa6, 0x1d, 0x2b, 0xad, 0x05, 0xb6, 0x48, 0x71, 0xea, 0x0e, 0x8a, 0xcc, 0x4c, 0xc3, 0x01, + 0xd1, 0x63, 0x10, 0xd5, 0x66, 0x13, 0x5b, 0x96, 0x46, 0x6d, 0xa1, 0x98, 0xf8, 0xd3, 0xbe, 0x66, + 0xe2, 0x2e, 0xd6, 0x89, 0x95, 0x9b, 0xe1, 0xb9, 0x36, 0x8c, 0x9e, 0xd1, 0x31, 0xda, 0xe7, 0xf2, + 0x00, 0x47, 0xbe, 0xc2, 0x91, 0xfb, 0x56, 0x2c, 0xf1, 0x1d, 0x78, 0x21, 0x60, 0x94, 0x49, 0xa2, + 0x5f, 0xbc, 0x0b, 0x0b, 0x7e, 0x4b, 0x4c, 0x94, 0x39, 0x7e, 0x96, 0x80, 0xa5, 0x10, 0x1b, 0xa0, + 0x7d, 0x98, 0xb5, 0x74, 0xb5, 0x67, 0x3d, 0x31, 0x08, 0xf3, 0xdf, 0x5b, 0x31, 0x26, 0xcb, 0xd7, + 0x19, 0x2e, 0x7d, 0xdc, 0x9f, 0x92, 0x3d, 0x6a, 0x54, 0x84, 0x69, 0x6a, 0x4f, 0xe6, 0xa0, 0x5b, + 0x71, 0x7c, 0x28, 0xcc, 0xe3, 0xc2, 0x28, 0xc5, 0xd7, 0x21, 0xc3, 0x4b, 0x40, 0xd7, 0x60, 0xde, + 0x95, 0xa0, 0x68, 0x2d, 0xb6, 0x57, 0x70, 0x41, 0x95, 0x96, 0xf8, 0x2a, 0x2c, 0xf8, 0x99, 0xa1, + 0x35, 0x98, 0x63, 0x0e, 0xe1, 0xa1, 0xcf, 0x52, 0x40, 0xa5, 0xe5, 0xc5, 0xf4, 0x77, 0x60, 0x99, + 0xf7, 0x33, 0x16, 0xca, 0x2f, 0x79, 0x7b, 0xa0, 0xb6, 0xc8, 0xf0, 0x7b, 0x70, 0xf5, 0x94, 0x7e, + 0x9b, 0x82, 0x6c, 0x30, 0x68, 0xd0, 0x7d, 0x48, 0x9f, 0x74, 0x8c, 0xe6, 0x27, 0x8c, 0xf6, 0xc5, + 0xa8, 0xe8, 0xca, 0x17, 0x6d, 0x2c, 0x0a, 0xdd, 0x9f, 0x92, 0x29, 0x91, 0x4d, 0xdd, 0x35, 0xfa, + 0x3a, 0x61, 0xd6, 0x8b, 0xa6, 0x7e, 0x68, 0x63, 0x0d, 0xa8, 0x1d, 0x22, 0xb4, 0x0b, 0xf3, 0xd4, + 0xed, 0x94, 0xae, 0xd1, 0xc2, 0xb9, 0xa4, 0xc3, 0xe3, 0x46, 0x24, 0x8f, 0x82, 0x83, 0xfb, 0xd0, + 0x68, 0x61, 0x19, 0x54, 0xef, 0xbf, 0xb8, 0x08, 0xf3, 0x3e, 0xdd, 0xc4, 0x3d, 0x98, 0xf7, 0x09, + 0x43, 0x97, 0x61, 0xe6, 0xd4, 0x52, 0xbc, 0x0c, 0x3d, 0x27, 0x4f, 0x9f, 0x5a, 0x4e, 0xd2, 0xbd, + 0x06, 0xf3, 0x8e, 0x16, 0xca, 0x69, 0x47, 0x6d, 0x5b, 0xb9, 0xc4, 0x66, 0xd2, 0x3e, 0x23, 0x07, + 0xf4, 0x9e, 0x0d, 0x11, 0xff, 0x21, 0x00, 0x0c, 0x44, 0xa2, 0xfb, 0x90, 0x72, 0xb4, 0xa4, 0x79, + 0x7e, 0x6b, 0x0c, 0x2d, 0xf3, 0x8e, 0xaa, 0x0e, 0x95, 0xf4, 0x2b, 0x01, 0x52, 0x0e, 0x9b, 0x60, + 0xae, 0xaf, 0x57, 0x6a, 0x7b, 0xd5, 0xb2, 0x52, 0x3b, 0xd8, 0x2d, 0x2b, 0x1f, 0xca, 0x95, 0x46, + 0x59, 0xce, 0x0a, 0x68, 0x0d, 0x2e, 0xfb, 0xe1, 0x72, 0xb9, 0xb0, 0x5b, 0x96, 0x95, 0x83, 0x5a, + 0xf5, 0x51, 0x36, 0x81, 0x44, 0x58, 0x7d, 0x78, 0x54, 0x6d, 0x54, 0x86, 0xd7, 0x92, 0x68, 0x1d, + 0x72, 0xbe, 0x35, 0xc6, 0x83, 0xb1, 0x4d, 0xd9, 0x6c, 0x7d, 0xab, 0xf4, 0x2f, 0x5b, 0x4c, 0x17, + 0x17, 0xbd, 0xc3, 0x70, 0x9c, 0xed, 0x43, 0x58, 0xe4, 0x72, 0xb4, 0x5d, 0x72, 0xb0, 0xa4, 0xd2, + 0x52, 0x4e, 0xce, 0x89, 0x73, 0x0d, 0x0b, 0x5b, 0x49, 0x79, 0xd1, 0x85, 0x16, 0x6d, 0xa0, 0x6d, + 0xd6, 0x8e, 0xd6, 0xd5, 0x08, 0xc3, 0x49, 0x38, 0x38, 0xe0, 0x80, 0x1c, 0x04, 0xe9, 0x8b, 0x04, + 0x4c, 0xb3, 0xb3, 0xb9, 0xe9, 0xbb, 0x25, 0x38, 0x96, 0x2e, 0x94, 0xb2, 0xe4, 0x82, 0x23, 0xc1, + 0x07, 0x07, 0xda, 0x87, 0x8c, 0x3f, 0x95, 0x3e, 0x75, 0x0b, 0x9d, 0xeb, 0xfc, 0x01, 0xf9, 0xe3, + 0xf9, 0x29, 0x2b, 0x6f, 0x16, 0xcf, 0xfc, 0x30, 0x54, 0x84, 0x4c, 0x20, 0x1b, 0xa7, 0x46, 0x67, + 0xe3, 0xc5, 0x26, 0x97, 0x98, 0x0a, 0xb0, 0xe4, 0x26, 0xd2, 0x0e, 0x56, 0x08, 0x4b, 0xb4, 0xec, + 0xb6, 0xc8, 0x0e, 0x25, 0x60, 0x34, 0x40, 0x76, 0x61, 0xe2, 0xbb, 0x80, 0x86, 0x75, 0x9d, 0x28, + 0x6b, 0xf6, 0x61, 0x29, 0x24, 0xc5, 0xa3, 0x3c, 0xcc, 0x39, 0x47, 0x65, 0x69, 0x04, 0xb3, 0x12, + 0x6a, 0x58, 0xa3, 0x01, 0x8a, 0x8d, 0xdf, 0x33, 0xf1, 0x29, 0x36, 0x4d, 0xdc, 0x72, 0xc2, 0x23, + 0x14, 0xdf, 0x43, 0x91, 0x7e, 0x22, 0xc0, 0xac, 0x0b, 0x47, 0x77, 0x61, 0xd6, 0xc2, 0x6d, 0x7a, + 0xfd, 0x50, 0x59, 0x57, 0x83, 0xb4, 0xf9, 0x3a, 0x43, 0x60, 0xc5, 0xa6, 0x8b, 0x6f, 0x17, 0x9b, + 0xdc, 0xd2, 0x44, 0x9b, 0xff, 0xa3, 0x00, 0x4b, 0xbb, 0xb8, 0x83, 0x83, 0x55, 0x4a, 0x5c, 0x86, + 0xf5, 0x5f, 0xec, 0x09, 0xfe, 0x62, 0x0f, 0x61, 0x15, 0x73, 0xb1, 0x5f, 0xe8, 0xb2, 0x5b, 0x85, + 0x65, 0x5e, 0x1a, 0x4d, 0xef, 0xd2, 0x3f, 0x93, 0x70, 0xd5, 0xf6, 0x05, 0xd3, 0xe8, 0x74, 0xb0, + 0x79, 0xd8, 0x3f, 0xe9, 0x68, 0xd6, 0x93, 0x09, 0x36, 0x77, 0x19, 0x66, 0x74, 0xa3, 0xe5, 0x0b, + 0x9e, 0x69, 0xfb, 0xb1, 0xd2, 0x42, 0x65, 0xb8, 0x14, 0x2c, 0xb3, 0xce, 0x59, 0x12, 0x8e, 0x2e, + 0xb2, 0xb2, 0x67, 0xc1, 0x1b, 0x44, 0x84, 0x59, 0xbb, 0x40, 0x34, 0xf4, 0xce, 0xb9, 0x13, 0x31, + 0xb3, 0xb2, 0xf7, 0x8c, 0xe4, 0x60, 0xc5, 0xf4, 0x86, 0x57, 0x31, 0xc5, 0xee, 0x28, 0xae, 0x78, + 0xfa, 0x78, 0x28, 0xe2, 0xa7, 0x1d, 0xd6, 0x6f, 0x8f, 0xc9, 0x7a, 0x64, 0x26, 0xb8, 0xc8, 0x29, + 0x3e, 0x87, 0xf0, 0xfd, 0xab, 0x00, 0xd7, 0x22, 0xb7, 0xc0, 0xae, 0xfc, 0x16, 0xbc, 0xd0, 0xa3, + 0x0b, 0x9e, 0x11, 0x68, 0x94, 0xdd, 0x1b, 0x69, 0x04, 0xd6, 0xe9, 0x31, 0x28, 0x67, 0x86, 0x4c, + 0x8f, 0x03, 0x8a, 0x05, 0x58, 0x0a, 0x41, 0x9b, 0x68, 0x33, 0x5f, 0x0a, 0xb0, 0x39, 0x50, 0xe5, + 0x48, 0xef, 0x3d, 0x3f, 0xf7, 0x6d, 0x0c, 0x7c, 0x8b, 0xa6, 0xfc, 0x3b, 0xc3, 0x7b, 0x0f, 0x17, + 0xf8, 0x75, 0x45, 0xf0, 0x0d, 0xb8, 0x1e, 0x23, 0x9a, 0x85, 0xf3, 0x17, 0x29, 0xb8, 0x7e, 0xac, + 0x76, 0xb4, 0x96, 0x57, 0xc8, 0x85, 0xf4, 0xc4, 0xf1, 0x26, 0x69, 0x0e, 0x45, 0x00, 0xcd, 0x5a, + 0xf7, 0xbd, 0xa8, 0x1d, 0xc5, 0x7f, 0x8c, 0xeb, 0xf0, 0x39, 0x36, 0x61, 0x8f, 0x42, 0x9a, 0xb0, + 0xb7, 0xc7, 0xd7, 0x35, 0xae, 0x25, 0x3b, 0x0a, 0x26, 0x98, 0xb7, 0xc6, 0xe7, 0x1b, 0xe3, 0x05, + 0x17, 0x8e, 0xe2, 0x6f, 0xb2, 0x6b, 0xfa, 0x73, 0x0a, 0xa4, 0xb8, 0xdd, 0xb3, 0x1c, 0x22, 0xc3, + 0x5c, 0xd3, 0xd0, 0x4f, 0x35, 0xb3, 0x8b, 0x5b, 0xac, 0xfa, 0x7f, 0x73, 0x1c, 0xe3, 0xb1, 0x04, + 0x52, 0x72, 0x69, 0xe5, 0x01, 0x1b, 0x94, 0x83, 0x99, 0x2e, 0xb6, 0x2c, 0xb5, 0xed, 0xaa, 0xe5, + 0x3e, 0x8a, 0x9f, 0x27, 0x61, 0xce, 0x23, 0x41, 0xfa, 0x90, 0x07, 0xd3, 0xf4, 0xb5, 0xf7, 0x2c, + 0x0a, 0x3c, 0xbb, 0x33, 0x27, 0x9e, 0xc1, 0x99, 0x5b, 0x9c, 0x33, 0xd3, 0x70, 0xd8, 0x7d, 0x26, + 0xb5, 0x63, 0xfc, 0xfa, 0x1b, 0x77, 0x40, 0xe9, 0x07, 0x80, 0xaa, 0x9a, 0xc5, 0xba, 0x28, 0x2f, + 0x2d, 0xd9, 0x4d, 0x93, 0xfa, 0x54, 0xc1, 0x3a, 0x31, 0x35, 0x56, 0xae, 0xa7, 0x65, 0xe8, 0xaa, + 0x4f, 0xcb, 0x14, 0x62, 0x97, 0xf4, 0x16, 0x51, 0x4d, 0xa2, 0xe9, 0x6d, 0x85, 0x18, 0x9f, 0x60, + 0x6f, 0x30, 0xe9, 0x42, 0x1b, 0x36, 0x50, 0xfa, 0x4c, 0x80, 0x25, 0x8e, 0x3d, 0xf3, 0xc9, 0x7b, + 0x30, 0x33, 0xe0, 0xcd, 0x95, 0xf1, 0x21, 0xd8, 0x79, 0x6a, 0x36, 0x97, 0x02, 0x6d, 0x00, 0xe8, + 0xf8, 0x29, 0xe1, 0xe4, 0xce, 0xd9, 0x10, 0x47, 0xa6, 0xb8, 0x0d, 0x69, 0x6a, 0x86, 0x71, 0xfb, + 0xe5, 0xcf, 0x13, 0x80, 0xf6, 0x30, 0xf1, 0xda, 0x20, 0x66, 0x83, 0x08, 0x5f, 0x12, 0x9e, 0xc1, + 0x97, 0xde, 0xe7, 0x7c, 0x89, 0x7a, 0xe3, 0x2d, 0xdf, 0x84, 0x36, 0x20, 0x3a, 0x36, 0x13, 0x46, + 0xb4, 0x1e, 0xb4, 0x9e, 0x1b, 0xaf, 0xf5, 0xb8, 0xa0, 0xcb, 0xec, 0xc2, 0x12, 0xa7, 0x33, 0x3b, + 0xd3, 0xdb, 0x80, 0xd4, 0x33, 0x55, 0xeb, 0xa8, 0xb6, 0x5e, 0x6e, 0x67, 0xc7, 0x3a, 0xbd, 0x4b, + 0xde, 0x8a, 0x4b, 0x26, 0x49, 0xfe, 0x82, 0x81, 0xf1, 0x0b, 0x4e, 0x8c, 0x3b, 0xfe, 0x8b, 0x76, + 0x08, 0x87, 0xc9, 0xdd, 0x0b, 0x9d, 0x1a, 0xdf, 0x18, 0x2e, 0x12, 0xd8, 0x64, 0x36, 0x72, 0x80, + 0xfc, 0xef, 0x04, 0xac, 0xc5, 0x60, 0xa3, 0x7b, 0x90, 0x34, 0x7b, 0x4d, 0xe6, 0x4c, 0x2f, 0x8f, + 0xc1, 0x3f, 0x2f, 0x1f, 0x96, 0xf6, 0xa7, 0x64, 0x9b, 0x4a, 0xfc, 0x79, 0x02, 0x92, 0xf2, 0x61, + 0x09, 0xbd, 0xcb, 0x8d, 0x91, 0x5f, 0x1b, 0x93, 0x8b, 0x7f, 0x9a, 0xfc, 0x17, 0x21, 0x6c, 0x9c, + 0x9c, 0x83, 0xe5, 0x92, 0x5c, 0x2e, 0x34, 0xca, 0xca, 0x6e, 0xb9, 0x5a, 0x6e, 0x94, 0x15, 0x3a, + 0x44, 0xce, 0x0a, 0x68, 0x1d, 0x72, 0x87, 0x47, 0xc5, 0x6a, 0xa5, 0xbe, 0xaf, 0x1c, 0xd5, 0xdc, + 0x7f, 0x6c, 0x35, 0x81, 0xb2, 0xb0, 0x50, 0xad, 0xd4, 0x1b, 0x0c, 0x50, 0xcf, 0x26, 0x6d, 0xc8, + 0x5e, 0xb9, 0xa1, 0x94, 0x0a, 0x87, 0x85, 0x52, 0xa5, 0xf1, 0x28, 0x9b, 0x42, 0x22, 0xac, 0xf2, + 0xbc, 0xeb, 0xb5, 0xc2, 0x61, 0x7d, 0xff, 0xa0, 0x91, 0x4d, 0x23, 0x04, 0x19, 0x87, 0xde, 0x05, + 0xd5, 0xb3, 0xd3, 0x36, 0x87, 0x52, 0xf5, 0xa0, 0xe6, 0xe9, 0x30, 0x83, 0x96, 0x21, 0xeb, 0x4a, + 0x96, 0xcb, 0x85, 0x5d, 0x67, 0x8a, 0x31, 0xeb, 0x0d, 0xbc, 0xbe, 0x4c, 0xc0, 0x0a, 0x9d, 0x78, + 0xb9, 0xf3, 0x35, 0x37, 0x06, 0xb7, 0x20, 0x4b, 0x7b, 0x74, 0x25, 0x58, 0x25, 0x65, 0x28, 0xfc, + 0xd8, 0xad, 0x95, 0xdc, 0xe9, 0x74, 0xc2, 0x37, 0x9d, 0xae, 0x04, 0x2b, 0xc7, 0x5b, 0xfc, 0x1c, + 0x37, 0x20, 0x2d, 0xae, 0x19, 0x79, 0x18, 0x52, 0xda, 0xdc, 0x8e, 0xe7, 0x16, 0x97, 0xf6, 0x2f, + 0xd2, 0x79, 0x5c, 0x30, 0x7a, 0xdf, 0x83, 0xd5, 0xa0, 0xbe, 0x2c, 0x90, 0x5e, 0x1b, 0x9a, 0xb6, + 0x7a, 0xe9, 0xc4, 0xc3, 0xf5, 0x30, 0xa4, 0xbf, 0x09, 0x30, 0xeb, 0x82, 0xed, 0x94, 0x6c, 0x69, + 0x3f, 0xc2, 0xdc, 0x74, 0x67, 0xce, 0x86, 0x78, 0xc3, 0x22, 0xff, 0x9c, 0x34, 0x11, 0x9c, 0x93, + 0x86, 0x9e, 0x73, 0x32, 0xf4, 0x9c, 0xbf, 0x0b, 0x8b, 0x4d, 0x5b, 0x7d, 0xcd, 0xd0, 0x15, 0xa2, + 0x75, 0xdd, 0xe1, 0xcd, 0xf0, 0x7b, 0x8d, 0x86, 0xfb, 0xc2, 0x4e, 0x5e, 0x70, 0x09, 0x6c, 0x10, + 0xda, 0x84, 0x05, 0xe7, 0x3d, 0x87, 0x42, 0x0c, 0xa5, 0x6f, 0xe1, 0x5c, 0xda, 0x69, 0x65, 0xc1, + 0x81, 0x35, 0x8c, 0x23, 0x0b, 0x4b, 0x7f, 0x12, 0x60, 0x85, 0x76, 0xe8, 0x41, 0x77, 0x1c, 0x35, + 0xef, 0xf5, 0x7b, 0x5c, 0x20, 0xcb, 0x87, 0x32, 0xfc, 0xba, 0x1a, 0x94, 0x1c, 0xac, 0x06, 0xe5, + 0xb1, 0xae, 0xe4, 0x37, 0x02, 0x2c, 0xdb, 0x57, 0xac, 0xbb, 0xf0, 0xbc, 0x6f, 0xfc, 0x09, 0x4e, + 0x32, 0x60, 0xcc, 0x54, 0xd0, 0x98, 0xd2, 0xef, 0x04, 0x58, 0x09, 0xe8, 0xca, 0x3c, 0xf5, 0x9d, + 0x60, 0xf9, 0x70, 0xc3, 0x5f, 0x3e, 0x0c, 0xe1, 0x4f, 0x58, 0x40, 0xdc, 0x71, 0x0b, 0x88, 0xc9, + 0x02, 0xe2, 0xab, 0x14, 0xac, 0xd6, 0x8c, 0x16, 0xae, 0x13, 0xb5, 0x3d, 0xc9, 0x50, 0xea, 0xfb, + 0xc3, 0x3d, 0x3e, 0xf5, 0x9d, 0x1d, 0x57, 0x58, 0x38, 0xd7, 0x71, 0x5a, 0x7b, 0x94, 0x87, 0x25, + 0x8b, 0xa8, 0x6d, 0xe7, 0xd0, 0x54, 0xb3, 0x8d, 0x89, 0xd2, 0x53, 0xc9, 0x13, 0x76, 0x22, 0x97, + 0xd8, 0x52, 0xc3, 0x59, 0x39, 0x54, 0xc9, 0x93, 0xf0, 0x59, 0x51, 0x6a, 0xe2, 0x59, 0xd1, 0xfb, + 0xc1, 0x76, 0xed, 0xd5, 0x11, 0x7b, 0x89, 0x49, 0xbd, 0xdf, 0x8b, 0x98, 0x03, 0xbd, 0x3e, 0x82, + 0xe5, 0xe8, 0xf9, 0xcf, 0xc5, 0xe7, 0x1e, 0xdf, 0xf0, 0x08, 0xe9, 0x0a, 0x5c, 0x1e, 0xda, 0x3c, + 0x0b, 0xf4, 0x36, 0xe4, 0xec, 0xa5, 0x23, 0xdd, 0x9a, 0xd0, 0x1d, 0x23, 0x3c, 0x26, 0x11, 0xe1, + 0x31, 0xd2, 0x1a, 0x5c, 0x09, 0x11, 0xc4, 0xb4, 0xf8, 0x43, 0x9a, 0xaa, 0x31, 0xf9, 0x34, 0xf3, + 0xa3, 0xa8, 0xa8, 0x78, 0xd3, 0x7f, 0xec, 0xa1, 0x83, 0xbf, 0xaf, 0x23, 0x2e, 0xae, 0xc1, 0xbc, + 0x1f, 0x8f, 0x25, 0x2b, 0x32, 0x22, 0x70, 0xd2, 0x17, 0x1a, 0xb2, 0x4e, 0x07, 0x86, 0xac, 0xd5, + 0x41, 0x50, 0xcd, 0xf0, 0x05, 0x48, 0xa4, 0x29, 0x62, 0xc2, 0xea, 0xf1, 0x50, 0x58, 0xcd, 0xf2, + 0x93, 0xdb, 0x48, 0xa6, 0xff, 0x07, 0x81, 0xc5, 0x9c, 0x3a, 0x74, 0xa4, 0x2a, 0x3d, 0x06, 0x91, + 0x7a, 0xfc, 0xe4, 0x43, 0xce, 0x80, 0x1b, 0x25, 0x82, 0x6e, 0x24, 0x6d, 0xc0, 0x5a, 0x28, 0x6f, + 0x26, 0xfa, 0x11, 0xd5, 0x6b, 0x0f, 0xb3, 0x1e, 0xb9, 0x4e, 0x54, 0x62, 0x8d, 0x2b, 0x99, 0x2d, + 0xfa, 0x25, 0x53, 0x90, 0x23, 0x79, 0x8f, 0xee, 0x2a, 0xc8, 0x9a, 0xdd, 0xb8, 0xaf, 0x40, 0xba, + 0xef, 0x8c, 0x7b, 0xe8, 0x7d, 0xbb, 0xc4, 0xbb, 0xf4, 0x91, 0xbd, 0x24, 0x53, 0x0c, 0xe9, 0xf7, + 0x02, 0xcc, 0xfb, 0xc0, 0x68, 0x1d, 0xe6, 0xbc, 0xee, 0xcf, 0x2d, 0x0d, 0x3d, 0x80, 0x7d, 0x06, + 0xc4, 0x20, 0x6a, 0x87, 0xbd, 0x41, 0xa4, 0x0f, 0x76, 0x35, 0xdf, 0xb7, 0x30, 0xad, 0x1c, 0x92, + 0xb2, 0xf3, 0x1f, 0xbd, 0x06, 0xa9, 0xbe, 0xae, 0x11, 0x27, 0xf6, 0x32, 0xc1, 0xa0, 0x72, 0x44, + 0xe5, 0x8f, 0x74, 0x8d, 0xc8, 0x0e, 0x96, 0x74, 0x0b, 0x52, 0xf6, 0x13, 0xdf, 0x24, 0xcd, 0x41, + 0xba, 0xf8, 0xa8, 0x51, 0xae, 0x67, 0x05, 0x04, 0x30, 0x5d, 0xa9, 0x1d, 0xec, 0x96, 0xeb, 0xd9, + 0x84, 0xb4, 0xee, 0x6d, 0x3d, 0xac, 0x09, 0xfd, 0x98, 0x1e, 0x49, 0x54, 0xfb, 0x59, 0x08, 0x6d, + 0x3f, 0x37, 0xb8, 0xcb, 0x69, 0x44, 0xe3, 0xf9, 0x85, 0x00, 0x2b, 0xa1, 0x78, 0xe8, 0x8e, 0xbf, + 0xe5, 0xbc, 0x1e, 0xcb, 0xd3, 0xdf, 0x6c, 0xfe, 0x54, 0xa0, 0xcd, 0xe6, 0x5d, 0xae, 0xd9, 0x7c, + 0x69, 0x24, 0xbd, 0xbf, 0xcd, 0x2c, 0x45, 0x74, 0x99, 0xf5, 0x46, 0x61, 0xaf, 0xac, 0x1c, 0xd5, + 0xe8, 0xaf, 0xd7, 0x65, 0x2e, 0x43, 0xd6, 0xee, 0x1a, 0xd9, 0xa7, 0x4b, 0xf5, 0x46, 0x81, 0xfb, + 0x4c, 0x69, 0x19, 0x10, 0xb3, 0xa1, 0xff, 0x5b, 0xb8, 0xcf, 0x04, 0x58, 0xe2, 0xc0, 0xcc, 0xa4, + 0xbe, 0x57, 0x01, 0x02, 0xf7, 0x2a, 0x60, 0x1b, 0x96, 0xed, 0x22, 0x95, 0x7a, 0xad, 0xa5, 0xf4, + 0xb0, 0xa9, 0xd8, 0x2b, 0xcc, 0x77, 0x2e, 0x75, 0xd5, 0xa7, 0x6c, 0x74, 0x74, 0x88, 0x4d, 0x9b, + 0xf1, 0x73, 0x18, 0x96, 0xec, 0xfc, 0x47, 0x80, 0xd9, 0x4a, 0x0b, 0xeb, 0xc4, 0x3e, 0x8f, 0x1a, + 0x2c, 0x72, 0x1f, 0xd4, 0xa1, 0xf5, 0x88, 0xef, 0xec, 0x9c, 0x0d, 0x8a, 0x1b, 0xb1, 0x5f, 0xe1, + 0x49, 0x53, 0xe8, 0xd4, 0xf7, 0x31, 0x20, 0x37, 0x31, 0x7a, 0x71, 0x88, 0x32, 0xc4, 0x35, 0xc5, + 0x9b, 0x23, 0xb0, 0x3c, 0x39, 0x6f, 0x41, 0xda, 0xf9, 0x2c, 0x0c, 0x2d, 0x7b, 0xdf, 0xad, 0xf9, + 0xbe, 0x1a, 0x13, 0x57, 0x02, 0x50, 0x97, 0x6e, 0xe7, 0xbf, 0x33, 0x00, 0x83, 0xd1, 0x04, 0x7a, + 0x00, 0x0b, 0xfe, 0x2f, 0x53, 0xd0, 0x5a, 0xcc, 0x77, 0x51, 0xe2, 0x7a, 0xf8, 0xa2, 0xa7, 0xd3, + 0x03, 0x58, 0xf0, 0xbf, 0x07, 0x1d, 0x30, 0x0b, 0x79, 0x17, 0x3b, 0x60, 0x16, 0xfa, 0xea, 0x74, + 0x0a, 0x75, 0xe0, 0x72, 0xc4, 0x9b, 0x30, 0xf4, 0xd2, 0x78, 0xef, 0x0b, 0xc5, 0x97, 0xc7, 0x7c, + 0xa5, 0x26, 0x4d, 0x21, 0x13, 0xae, 0x44, 0xbe, 0x00, 0x42, 0x5b, 0xe3, 0xbe, 0x9e, 0x12, 0x5f, + 0x19, 0x03, 0xd3, 0x93, 0xd9, 0x07, 0x31, 0x7a, 0xea, 0x8c, 0x5e, 0x19, 0xfb, 0x75, 0x88, 0x78, + 0x6b, 0xfc, 0x21, 0xb6, 0x34, 0x85, 0xf6, 0x61, 0xde, 0x37, 0x92, 0x45, 0x62, 0xe8, 0x9c, 0x96, + 0x32, 0x5e, 0x8b, 0x99, 0xe1, 0x52, 0x4e, 0xbe, 0xb1, 0xe1, 0x80, 0xd3, 0xf0, 0xfc, 0x73, 0xc0, + 0x29, 0x64, 0xce, 0x18, 0x34, 0x7f, 0x20, 0x2f, 0x87, 0x99, 0x3f, 0x3c, 0xb1, 0x87, 0x99, 0x3f, + 0x22, 0xc9, 0x4b, 0x53, 0xe8, 0x03, 0xc8, 0xf0, 0x63, 0x13, 0xb4, 0x11, 0x3b, 0xfe, 0x11, 0xaf, + 0x46, 0x2d, 0xfb, 0x59, 0xf2, 0x5d, 0xfa, 0x80, 0x65, 0xe8, 0xb4, 0x60, 0xc0, 0x32, 0xa2, 0xb9, + 0x9f, 0xb2, 0xf3, 0x13, 0xd7, 0x01, 0x0f, 0xf2, 0x53, 0x58, 0xd3, 0x3f, 0xc8, 0x4f, 0xa1, 0x6d, + 0xb3, 0x34, 0xb5, 0xf3, 0xe3, 0x34, 0xa4, 0x9c, 0x44, 0xda, 0x80, 0x17, 0x02, 0x9d, 0x06, 0xba, + 0x1a, 0xdf, 0x7f, 0x89, 0xd7, 0x22, 0xd7, 0x3d, 0x75, 0x1f, 0xc3, 0xa5, 0xa1, 0xde, 0x01, 0x6d, + 0xfa, 0xe9, 0xc2, 0xfa, 0x17, 0xf1, 0x7a, 0x0c, 0x46, 0x90, 0x37, 0x9f, 0x0b, 0x36, 0x47, 0x15, + 0xb7, 0x3c, 0xef, 0xa8, 0xf8, 0xff, 0x98, 0xde, 0x5b, 0xc1, 0xc8, 0x97, 0x78, 0xbd, 0x42, 0x63, + 0xfe, 0x46, 0x2c, 0x8e, 0x27, 0xe1, 0x23, 0xef, 0xc2, 0xf4, 0x55, 0x63, 0x88, 0x53, 0x2e, 0xb4, + 0x08, 0x14, 0xa5, 0x38, 0x94, 0xe0, 0x06, 0x82, 0xb1, 0x13, 0x24, 0x0e, 0x8b, 0x9a, 0x1b, 0xb1, + 0x38, 0xfe, 0x68, 0xf7, 0x5d, 0xed, 0x83, 0x68, 0x1f, 0x2e, 0x03, 0x06, 0xd1, 0x1e, 0x52, 0x0b, + 0x48, 0x53, 0x77, 0xdf, 0x01, 0x68, 0x5a, 0x9a, 0x42, 0xfb, 0x16, 0xb4, 0x31, 0x34, 0xe8, 0x7b, + 0x4f, 0xc3, 0x9d, 0xd6, 0x41, 0x8f, 0x68, 0x86, 0x6e, 0xe5, 0x7e, 0x3d, 0xeb, 0x34, 0x4d, 0x73, + 0x4d, 0x4b, 0xa3, 0xed, 0x43, 0x31, 0xfd, 0x38, 0xd9, 0xb4, 0xb4, 0x93, 0x69, 0x07, 0xff, 0x8d, + 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x47, 0x5d, 0xbf, 0x76, 0x3a, 0x30, 0x00, 0x00, +} diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest.proto b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest.proto new file mode 100644 index 000000000..7d8fccc75 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest.proto @@ -0,0 +1,1217 @@ +// Code generated by make; DO NOT EDIT. +syntax = "proto3"; +package csitest.v1; + +option go_package = "csitest"; + +import "google/protobuf/descriptor.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; +import "github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csi.proto"; // required for csi_secret + +service Identity { + rpc GetPluginInfo(GetPluginInfoRequest) + returns (GetPluginInfoResponse) {} + + rpc GetPluginCapabilities(GetPluginCapabilitiesRequest) + returns (GetPluginCapabilitiesResponse) {} + + rpc Probe (ProbeRequest) + returns (ProbeResponse) {} +} + +service Controller { + rpc CreateVolume (CreateVolumeRequest) + returns (CreateVolumeResponse) {} + + rpc DeleteVolume (DeleteVolumeRequest) + returns (DeleteVolumeResponse) {} + + rpc ControllerPublishVolume (ControllerPublishVolumeRequest) + returns (ControllerPublishVolumeResponse) {} + + rpc ControllerUnpublishVolume (ControllerUnpublishVolumeRequest) + returns (ControllerUnpublishVolumeResponse) {} + + rpc ValidateVolumeCapabilities (ValidateVolumeCapabilitiesRequest) + returns (ValidateVolumeCapabilitiesResponse) {} + + rpc ListVolumes (ListVolumesRequest) + returns (ListVolumesResponse) {} + + rpc GetCapacity (GetCapacityRequest) + returns (GetCapacityResponse) {} + + rpc ControllerGetCapabilities (ControllerGetCapabilitiesRequest) + returns (ControllerGetCapabilitiesResponse) {} + + rpc CreateSnapshot (CreateSnapshotRequest) + returns (CreateSnapshotResponse) {} + + rpc DeleteSnapshot (DeleteSnapshotRequest) + returns (DeleteSnapshotResponse) {} + + rpc ListSnapshots (ListSnapshotsRequest) + returns (ListSnapshotsResponse) {} +} + +service Node { + rpc NodeStageVolume (NodeStageVolumeRequest) + returns (NodeStageVolumeResponse) {} + + rpc NodeUnstageVolume (NodeUnstageVolumeRequest) + returns (NodeUnstageVolumeResponse) {} + + rpc NodePublishVolume (NodePublishVolumeRequest) + returns (NodePublishVolumeResponse) {} + + rpc NodeUnpublishVolume (NodeUnpublishVolumeRequest) + returns (NodeUnpublishVolumeResponse) {} + + rpc NodeGetVolumeStats (NodeGetVolumeStatsRequest) + returns (NodeGetVolumeStatsResponse) {} + + rpc NodeGetCapabilities (NodeGetCapabilitiesRequest) + returns (NodeGetCapabilitiesResponse) {} + + rpc NodeGetInfo (NodeGetInfoRequest) + returns (NodeGetInfoResponse) {} +} +message GetPluginInfoRequest { + // Intentionally empty. +} + +message GetPluginInfoResponse { + // The name MUST follow domain name notation format + // (https://tools.ietf.org/html/rfc1035#section-2.3.1). It SHOULD + // include the plugin's host company name and the plugin name, + // to minimize the possibility of collisions. It MUST be 63 + // characters or less, beginning and ending with an alphanumeric + // character ([a-z0-9A-Z]) with dashes (-), dots (.), and + // alphanumerics between. This field is REQUIRED. + string name = 1; + + // This field is REQUIRED. Value of this field is opaque to the CO. + string vendor_version = 2; + + // This field is OPTIONAL. Values are opaque to the CO. + map manifest = 3; +} +message GetPluginCapabilitiesRequest { + // Intentionally empty. +} + +message GetPluginCapabilitiesResponse { + // All the capabilities that the controller service supports. This + // field is OPTIONAL. + repeated PluginCapability capabilities = 1; +} + +// Specifies a capability of the plugin. +message PluginCapability { + message Service { + enum Type { + UNKNOWN = 0; + + // CONTROLLER_SERVICE indicates that the Plugin provides RPCs for + // the ControllerService. Plugins SHOULD provide this capability. + // In rare cases certain plugins MAY wish to omit the + // ControllerService entirely from their implementation, but such + // SHOULD NOT be the common case. + // The presence of this capability determines whether the CO will + // attempt to invoke the REQUIRED ControllerService RPCs, as well + // as specific RPCs as indicated by ControllerGetCapabilities. + CONTROLLER_SERVICE = 1; + + // VOLUME_ACCESSIBILITY_CONSTRAINTS indicates that the volumes for + // this plugin MAY NOT be equally accessible by all nodes in the + // cluster. The CO MUST use the topology information returned by + // CreateVolumeRequest along with the topology information + // returned by NodeGetInfo to ensure that a given volume is + // accessible from a given node when scheduling workloads. + VOLUME_ACCESSIBILITY_CONSTRAINTS = 2; + } + Type type = 1; + } + + oneof type { + // Service that the plugin supports. + Service service = 1; + } +} +message ProbeRequest { + // Intentionally empty. +} + +message ProbeResponse { + // Readiness allows a plugin to report its initialization status back + // to the CO. Initialization for some plugins MAY be time consuming + // and it is important for a CO to distinguish between the following + // cases: + // + // 1) The plugin is in an unhealthy state and MAY need restarting. In + // this case a gRPC error code SHALL be returned. + // 2) The plugin is still initializing, but is otherwise perfectly + // healthy. In this case a successful response SHALL be returned + // with a readiness value of `false`. Calls to the plugin's + // Controller and/or Node services MAY fail due to an incomplete + // initialization state. + // 3) The plugin has finished initializing and is ready to service + // calls to its Controller and/or Node services. A successful + // response is returned with a readiness value of `true`. + // + // This field is OPTIONAL. If not present, the caller SHALL assume + // that the plugin is in a ready state and is accepting calls to its + // Controller and/or Node services (according to the plugin's reported + // capabilities). + .google.protobuf.BoolValue ready = 1; +} +message CreateVolumeRequest { + // The suggested name for the storage space. This field is REQUIRED. + // It serves two purposes: + // 1) Idempotency - This name is generated by the CO to achieve + // idempotency. The Plugin SHOULD ensure that multiple + // `CreateVolume` calls for the same name do not result in more + // than one piece of storage provisioned corresponding to that + // name. If a Plugin is unable to enforce idempotency, the CO's + // error recovery logic could result in multiple (unused) volumes + // being provisioned. + // In the case of error, the CO MUST handle the gRPC error codes + // per the recovery behavior defined in the "CreateVolume Errors" + // section below. + // The CO is responsible for cleaning up volumes it provisioned + // that it no longer needs. If the CO is uncertain whether a volume + // was provisioned or not when a `CreateVolume` call fails, the CO + // MAY call `CreateVolume` again, with the same name, to ensure the + // volume exists and to retrieve the volume's `volume_id` (unless + // otherwise prohibited by "CreateVolume Errors"). + // 2) Suggested name - Some storage systems allow callers to specify + // an identifier by which to refer to the newly provisioned + // storage. If a storage system supports this, it can optionally + // use this name as the identifier for the new volume. + // Any Unicode string that conforms to the length limit is allowed + // except those containing the following banned characters: + // U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F. + // (These are control characters other than commonly used whitespace.) + string name = 1; + + // This field is OPTIONAL. This allows the CO to specify the capacity + // requirement of the volume to be provisioned. If not specified, the + // Plugin MAY choose an implementation-defined capacity range. If + // specified it MUST always be honored, even when creating volumes + // from a source; which MAY force some backends to internally extend + // the volume after creating it. + CapacityRange capacity_range = 2; + + // The capabilities that the provisioned volume MUST have. SP MUST + // provision a volume that will satisfy ALL of the capabilities + // specified in this list. Otherwise SP MUST return the appropriate + // gRPC error code. + // The Plugin MUST assume that the CO MAY use the provisioned volume + // with ANY of the capabilities specified in this list. + // For example, a CO MAY specify two volume capabilities: one with + // access mode SINGLE_NODE_WRITER and another with access mode + // MULTI_NODE_READER_ONLY. In this case, the SP MUST verify that the + // provisioned volume can be used in either mode. + // This also enables the CO to do early validation: If ANY of the + // specified volume capabilities are not supported by the SP, the call + // MUST return the appropriate gRPC error code. + // This field is REQUIRED. + repeated VolumeCapability volume_capabilities = 3; + + // Plugin specific parameters passed in as opaque key-value pairs. + // This field is OPTIONAL. The Plugin is responsible for parsing and + // validating these parameters. COs will treat these as opaque. + map parameters = 4; + + // Secrets required by plugin to complete volume creation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. Renamed to test whether secret + // stripping is really based on the csi_secret option. + map seecreets = 5 [(csi.v1.csi_secret) = true]; + + // If specified, the new volume will be pre-populated with data from + // this source. This field is OPTIONAL. + VolumeContentSource volume_content_source = 6; + + // Specifies where (regions, zones, racks, etc.) the provisioned + // volume MUST be accessible from. + // An SP SHALL advertise the requirements for topological + // accessibility information in documentation. COs SHALL only specify + // topological accessibility information supported by the SP. + // This field is OPTIONAL. + // This field SHALL NOT be specified unless the SP has the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // If this field is not specified and the SP has the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability, the SP MAY + // choose where the provisioned volume is accessible from. + TopologyRequirement accessibility_requirements = 7; + + // A secret value that isn't a string map. + int64 new_secret_int = 8 [(csi.v1.csi_secret) = true]; + + // We must recurse into maps. + map maybe_secret_map = 9; +} + +// Specifies what source the volume will be created from. One of the +// type fields MUST be specified. +message VolumeContentSource { + message SnapshotSource { + // Contains identity information for the existing source snapshot. + // This field is REQUIRED. Plugin is REQUIRED to support creating + // volume from snapshot if it supports the capability + // CREATE_DELETE_SNAPSHOT. + string snapshot_id = 1; + } + + message VolumeSource { + // Contains identity information for the existing source volume. + // This field is REQUIRED. Plugins reporting CLONE_VOLUME + // capability MUST support creating a volume from another volume. + string volume_id = 1; + + // A secret field that will only get stripped by code that + // can recurse into a oneof field. + string oneof_secret_field = 2 [(csi.v1.csi_secret) = true]; + } + + oneof type { + SnapshotSource snapshot = 1; + VolumeSource volume = 2; + } + + // A secret field that will only get stripped by code that + // can recurse into CreateVolumeRequest. + string nested_secret_field = 3 [(csi.v1.csi_secret) = true]; +} + +message CreateVolumeResponse { + // Contains all attributes of the newly created volume that are + // relevant to the CO along with information required by the Plugin + // to uniquely identify the volume. This field is REQUIRED. + Volume volume = 1; +} + +// Specify a capability of a volume. +message VolumeCapability { + // Indicate that the volume will be accessed via the block device API. + message BlockVolume { + // Intentionally empty, for now. + } + + // Indicate that the volume will be accessed via the filesystem API. + message MountVolume { + // The filesystem type. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + string fs_type = 1; + + // The mount options that can be used for the volume. This field is + // OPTIONAL. `mount_flags` MAY contain sensitive information. + // Therefore, the CO and the Plugin MUST NOT leak this information + // to untrusted entities. The total size of this repeated field + // SHALL NOT exceed 4 KiB. + repeated string mount_flags = 2; + } + + // Specify how a volume can be accessed. + message AccessMode { + enum Mode { + UNKNOWN = 0; + + // Can only be published once as read/write on a single node, at + // any given time. + SINGLE_NODE_WRITER = 1; + + // Can only be published once as readonly on a single node, at + // any given time. + SINGLE_NODE_READER_ONLY = 2; + + // Can be published as readonly at multiple nodes simultaneously. + MULTI_NODE_READER_ONLY = 3; + + // Can be published at multiple nodes simultaneously. Only one of + // the node can be used as read/write. The rest will be readonly. + MULTI_NODE_SINGLE_WRITER = 4; + + // Can be published as read/write at multiple nodes + // simultaneously. + MULTI_NODE_MULTI_WRITER = 5; + } + + // This field is REQUIRED. + Mode mode = 1; + } + + // Specifies what API the volume will be accessed using. One of the + // following fields MUST be specified. + oneof access_type { + BlockVolume block = 1; + MountVolume mount = 2; + } + + // This is a REQUIRED field. + AccessMode access_mode = 3; + + // A secret inside a field that occurs in an array. + string array_secret = 4 [(csi.v1.csi_secret) = true]; +} + +// The capacity of the storage space in bytes. To specify an exact size, +// `required_bytes` and `limit_bytes` SHALL be set to the same value. At +// least one of the these fields MUST be specified. +message CapacityRange { + // Volume MUST be at least this big. This field is OPTIONAL. + // A value of 0 is equal to an unspecified field value. + // The value of this field MUST NOT be negative. + int64 required_bytes = 1; + + // Volume MUST not be bigger than this. This field is OPTIONAL. + // A value of 0 is equal to an unspecified field value. + // The value of this field MUST NOT be negative. + int64 limit_bytes = 2; +} + +// Information about a specific volume. +message Volume { + // The capacity of the volume in bytes. This field is OPTIONAL. If not + // set (value of 0), it indicates that the capacity of the volume is + // unknown (e.g., NFS share). + // The value of this field MUST NOT be negative. + int64 capacity_bytes = 1; + + // The identifier for this volume, generated by the plugin. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific volume vs all other volumes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this volume. + // The SP is NOT responsible for global uniqueness of volume_id across + // multiple SPs. + string volume_id = 2; + + // Opaque static properties of the volume. SP MAY use this field to + // ensure subsequent volume validation and publishing calls have + // contextual information. + // The contents of this field SHALL be opaque to a CO. + // The contents of this field SHALL NOT be mutable. + // The contents of this field SHALL be safe for the CO to cache. + // The contents of this field SHOULD NOT contain sensitive + // information. + // The contents of this field SHOULD NOT be used for uniquely + // identifying a volume. The `volume_id` alone SHOULD be sufficient to + // identify the volume. + // A volume uniquely identified by `volume_id` SHALL always report the + // same volume_context. + // This field is OPTIONAL and when present MUST be passed to volume + // validation and publishing calls. + map volume_context = 3; + + // If specified, indicates that the volume is not empty and is + // pre-populated with data from the specified source. + // This field is OPTIONAL. + VolumeContentSource content_source = 4; + + // Specifies where (regions, zones, racks, etc.) the provisioned + // volume is accessible from. + // A plugin that returns this field MUST also set the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // An SP MAY specify multiple topologies to indicate the volume is + // accessible from multiple locations. + // COs MAY use this information along with the topology information + // returned by NodeGetInfo to ensure that a given volume is accessible + // from a given node when scheduling workloads. + // This field is OPTIONAL. If it is not specified, the CO MAY assume + // the volume is equally accessible from all nodes in the cluster and + // MAY schedule workloads referencing the volume on any available + // node. + // + // Example 1: + // accessible_topology = {"region": "R1", "zone": "Z2"} + // Indicates a volume accessible only from the "region" "R1" and the + // "zone" "Z2". + // + // Example 2: + // accessible_topology = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3" + // in the "region" "R1". + repeated Topology accessible_topology = 5; +} + +message TopologyRequirement { + // Specifies the list of topologies the provisioned volume MUST be + // accessible from. + // This field is OPTIONAL. If TopologyRequirement is specified either + // requisite or preferred or both MUST be specified. + // + // If requisite is specified, the provisioned volume MUST be + // accessible from at least one of the requisite topologies. + // + // Given + // x = number of topologies provisioned volume is accessible from + // n = number of requisite topologies + // The CO MUST ensure n >= 1. The SP MUST ensure x >= 1 + // If x==n, then the SP MUST make the provisioned volume available to + // all topologies from the list of requisite topologies. If it is + // unable to do so, the SP MUST fail the CreateVolume call. + // For example, if a volume should be accessible from a single zone, + // and requisite = + // {"region": "R1", "zone": "Z2"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and the "zone" "Z2". + // Similarly, if a volume should be accessible from two zones, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and both "zone" "Z2" and "zone" "Z3". + // + // If xn, then the SP MUST make the provisioned volume available from + // all topologies from the list of requisite topologies and MAY choose + // the remaining x-n unique topologies from the list of all possible + // topologies. If it is unable to do so, the SP MUST fail the + // CreateVolume call. + // For example, if a volume should be accessible from two zones, and + // requisite = + // {"region": "R1", "zone": "Z2"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and the "zone" "Z2" and the SP may select the second zone + // independently, e.g. "R1/Z4". + repeated Topology requisite = 1; + + // Specifies the list of topologies the CO would prefer the volume to + // be provisioned in. + // + // This field is OPTIONAL. If TopologyRequirement is specified either + // requisite or preferred or both MUST be specified. + // + // An SP MUST attempt to make the provisioned volume available using + // the preferred topologies in order from first to last. + // + // If requisite is specified, all topologies in preferred list MUST + // also be present in the list of requisite topologies. + // + // If the SP is unable to to make the provisioned volume available + // from any of the preferred topologies, the SP MAY choose a topology + // from the list of requisite topologies. + // If the list of requisite topologies is not specified, then the SP + // MAY choose from the list of all possible topologies. + // If the list of requisite topologies is specified and the SP is + // unable to to make the provisioned volume available from any of the + // requisite topologies it MUST fail the CreateVolume call. + // + // Example 1: + // Given a volume should be accessible from a single zone, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // preferred = + // {"region": "R1", "zone": "Z3"} + // then the the SP SHOULD first attempt to make the provisioned volume + // available from "zone" "Z3" in the "region" "R1" and fall back to + // "zone" "Z2" in the "region" "R1" if that is not possible. + // + // Example 2: + // Given a volume should be accessible from a single zone, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"}, + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z5"} + // preferred = + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z2"} + // then the the SP SHOULD first attempt to make the provisioned volume + // accessible from "zone" "Z4" in the "region" "R1" and fall back to + // "zone" "Z2" in the "region" "R1" if that is not possible. If that + // is not possible, the SP may choose between either the "zone" + // "Z3" or "Z5" in the "region" "R1". + // + // Example 3: + // Given a volume should be accessible from TWO zones (because an + // opaque parameter in CreateVolumeRequest, for example, specifies + // the volume is accessible from two zones, aka synchronously + // replicated), and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"}, + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z5"} + // preferred = + // {"region": "R1", "zone": "Z5"}, + // {"region": "R1", "zone": "Z3"} + // then the the SP SHOULD first attempt to make the provisioned volume + // accessible from the combination of the two "zones" "Z5" and "Z3" in + // the "region" "R1". If that's not possible, it should fall back to + // a combination of "Z5" and other possibilities from the list of + // requisite. If that's not possible, it should fall back to a + // combination of "Z3" and other possibilities from the list of + // requisite. If that's not possible, it should fall back to a + // combination of other possibilities from the list of requisite. + repeated Topology preferred = 2; +} + +// Topology is a map of topological domains to topological segments. +// A topological domain is a sub-division of a cluster, like "region", +// "zone", "rack", etc. +// A topological segment is a specific instance of a topological domain, +// like "zone3", "rack3", etc. +// For example {"com.company/zone": "Z1", "com.company/rack": "R3"} +// Valid keys have two segments: an OPTIONAL prefix and name, separated +// by a slash (/), for example: "com.company.example/zone". +// The key name segment is REQUIRED. The prefix is OPTIONAL. +// The key name MUST be 63 characters or less, begin and end with an +// alphanumeric character ([a-z0-9A-Z]), and contain only dashes (-), +// underscores (_), dots (.), or alphanumerics in between, for example +// "zone". +// The key prefix MUST be 63 characters or less, begin and end with a +// lower-case alphanumeric character ([a-z0-9]), contain only +// dashes (-), dots (.), or lower-case alphanumerics in between, and +// follow domain name notation format +// (https://tools.ietf.org/html/rfc1035#section-2.3.1). +// The key prefix SHOULD include the plugin's host company name and/or +// the plugin name, to minimize the possibility of collisions with keys +// from other plugins. +// If a key prefix is specified, it MUST be identical across all +// topology keys returned by the SP (across all RPCs). +// Keys MUST be case-insensitive. Meaning the keys "Zone" and "zone" +// MUST not both exist. +// Each value (topological segment) MUST contain 1 or more strings. +// Each string MUST be 63 characters or less and begin and end with an +// alphanumeric character with '-', '_', '.', or alphanumerics in +// between. +message Topology { + map segments = 1; +} +message DeleteVolumeRequest { + // The ID of the volume to be deprovisioned. + // This field is REQUIRED. + string volume_id = 1; + + // Secrets required by plugin to complete volume deletion request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 2 [(csi.v1.csi_secret) = true]; +} + +message DeleteVolumeResponse { + // Intentionally empty. +} +message ControllerPublishVolumeRequest { + // The ID of the volume to be used on a node. + // This field is REQUIRED. + string volume_id = 1; + + // The ID of the node. This field is REQUIRED. The CO SHALL set this + // field to match the node ID returned by `NodeGetInfo`. + string node_id = 2; + + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the published volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability volume_capability = 3; + + // Indicates SP MUST publish the volume in readonly mode. + // CO MUST set this field to false if SP does not have the + // PUBLISH_READONLY controller capability. + // This is a REQUIRED field. + bool readonly = 4; + + // Secrets required by plugin to complete controller publish volume + // request. This field is OPTIONAL. Refer to the + // `Secrets Requirements` section on how to use this field. + map secrets = 5 [(csi.v1.csi_secret) = true]; + + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + map volume_context = 6; +} + +message ControllerPublishVolumeResponse { + // Opaque static publish properties of the volume. SP MAY use this + // field to ensure subsequent `NodeStageVolume` or `NodePublishVolume` + // calls calls have contextual information. + // The contents of this field SHALL be opaque to a CO. + // The contents of this field SHALL NOT be mutable. + // The contents of this field SHALL be safe for the CO to cache. + // The contents of this field SHOULD NOT contain sensitive + // information. + // The contents of this field SHOULD NOT be used for uniquely + // identifying a volume. The `volume_id` alone SHOULD be sufficient to + // identify the volume. + // This field is OPTIONAL and when present MUST be passed to + // subsequent `NodeStageVolume` or `NodePublishVolume` calls + map publish_context = 1; +} +message ControllerUnpublishVolumeRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // The ID of the node. This field is OPTIONAL. The CO SHOULD set this + // field to match the node ID returned by `NodeGetInfo` or leave it + // unset. If the value is set, the SP MUST unpublish the volume from + // the specified node. If the value is unset, the SP MUST unpublish + // the volume from all nodes it is published to. + string node_id = 2; + + // Secrets required by plugin to complete controller unpublish volume + // request. This SHOULD be the same secrets passed to the + // ControllerPublishVolume call for the specified volume. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 3 [(csi.v1.csi_secret) = true]; +} + +message ControllerUnpublishVolumeResponse { + // Intentionally empty. +} +message ValidateVolumeCapabilitiesRequest { + // The ID of the volume to check. This field is REQUIRED. + string volume_id = 1; + + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + map volume_context = 2; + + // The capabilities that the CO wants to check for the volume. This + // call SHALL return "confirmed" only if all the volume capabilities + // specified below are supported. This field is REQUIRED. + repeated VolumeCapability volume_capabilities = 3; + + // See CreateVolumeRequest.parameters. + // This field is OPTIONAL. + map parameters = 4; + + // Secrets required by plugin to complete volume validation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 5 [(csi.v1.csi_secret) = true]; +} + +message ValidateVolumeCapabilitiesResponse { + message Confirmed { + // Volume context validated by the plugin. + // This field is OPTIONAL. + map volume_context = 1; + + // Volume capabilities supported by the plugin. + // This field is REQUIRED. + repeated VolumeCapability volume_capabilities = 2; + + // The volume creation parameters validated by the plugin. + // This field is OPTIONAL. + map parameters = 3; + } + + // Confirmed indicates to the CO the set of capabilities that the + // plugin has validated. This field SHALL only be set to a non-empty + // value for successful validation responses. + // For successful validation responses, the CO SHALL compare the + // fields of this message to the originally requested capabilities in + // order to guard against an older plugin reporting "valid" for newer + // capability fields that it does not yet understand. + // This field is OPTIONAL. + Confirmed confirmed = 1; + + // Message to the CO if `confirmed` above is empty. This field is + // OPTIONAL. + // An empty string is equal to an unspecified field value. + string message = 2; +} +message ListVolumesRequest { + // If specified (non-zero value), the Plugin MUST NOT return more + // entries than this number in the response. If the actual number of + // entries is more than this number, the Plugin MUST set `next_token` + // in the response which can be used to get the next page of entries + // in the subsequent `ListVolumes` call. This field is OPTIONAL. If + // not specified (zero value), it means there is no restriction on the + // number of entries that can be returned. + // The value of this field MUST NOT be negative. + int32 max_entries = 1; + + // A token to specify where to start paginating. Set this field to + // `next_token` returned by a previous `ListVolumes` call to get the + // next page of entries. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + string starting_token = 2; +} + +message ListVolumesResponse { + message Entry { + Volume volume = 1; + } + + repeated Entry entries = 1; + + // This token allows you to get the next page of entries for + // `ListVolumes` request. If the number of entries is larger than + // `max_entries`, use the `next_token` as a value for the + // `starting_token` field in the next `ListVolumes` request. This + // field is OPTIONAL. + // An empty string is equal to an unspecified field value. + string next_token = 2; +} +message GetCapacityRequest { + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes that satisfy ALL of the + // specified `volume_capabilities`. These are the same + // `volume_capabilities` the CO will use in `CreateVolumeRequest`. + // This field is OPTIONAL. + repeated VolumeCapability volume_capabilities = 1; + + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes with the given Plugin + // specific `parameters`. These are the same `parameters` the CO will + // use in `CreateVolumeRequest`. This field is OPTIONAL. + map parameters = 2; + + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes that in the specified + // `accessible_topology`. This is the same as the + // `accessible_topology` the CO returns in a `CreateVolumeResponse`. + // This field is OPTIONAL. This field SHALL NOT be set unless the + // plugin advertises the VOLUME_ACCESSIBILITY_CONSTRAINTS capability. + Topology accessible_topology = 3; +} + +message GetCapacityResponse { + // The available capacity, in bytes, of the storage that can be used + // to provision volumes. If `volume_capabilities` or `parameters` is + // specified in the request, the Plugin SHALL take those into + // consideration when calculating the available capacity of the + // storage. This field is REQUIRED. + // The value of this field MUST NOT be negative. + int64 available_capacity = 1; +} +message ControllerGetCapabilitiesRequest { + // Intentionally empty. +} + +message ControllerGetCapabilitiesResponse { + // All the capabilities that the controller service supports. This + // field is OPTIONAL. + repeated ControllerServiceCapability capabilities = 1; +} + +// Specifies a capability of the controller service. +message ControllerServiceCapability { + message RPC { + enum Type { + UNKNOWN = 0; + CREATE_DELETE_VOLUME = 1; + PUBLISH_UNPUBLISH_VOLUME = 2; + LIST_VOLUMES = 3; + GET_CAPACITY = 4; + // Currently the only way to consume a snapshot is to create + // a volume from it. Therefore plugins supporting + // CREATE_DELETE_SNAPSHOT MUST support creating volume from + // snapshot. + CREATE_DELETE_SNAPSHOT = 5; + LIST_SNAPSHOTS = 6; + // Plugins supporting volume cloning at the storage level MAY + // report this capability. The source volume MUST be managed by + // the same plugin. Not all volume sources and parameters + // combinations MAY work. + CLONE_VOLUME = 7; + // Indicates the SP supports ControllerPublishVolume.readonly + // field. + PUBLISH_READONLY = 8; + } + + Type type = 1; + } + + oneof type { + // RPC that the controller supports. + RPC rpc = 1; + } +} +message CreateSnapshotRequest { + // The ID of the source volume to be snapshotted. + // This field is REQUIRED. + string source_volume_id = 1; + + // The suggested name for the snapshot. This field is REQUIRED for + // idempotency. + // Any Unicode string that conforms to the length limit is allowed + // except those containing the following banned characters: + // U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F. + // (These are control characters other than commonly used whitespace.) + string name = 2; + + // Secrets required by plugin to complete snapshot creation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 3 [(csi.v1.csi_secret) = true]; + + // Plugin specific parameters passed in as opaque key-value pairs. + // This field is OPTIONAL. The Plugin is responsible for parsing and + // validating these parameters. COs will treat these as opaque. + // Use cases for opaque parameters: + // - Specify a policy to automatically clean up the snapshot. + // - Specify an expiration date for the snapshot. + // - Specify whether the snapshot is readonly or read/write. + // - Specify if the snapshot should be replicated to some place. + // - Specify primary or secondary for replication systems that + // support snapshotting only on primary. + map parameters = 4; +} + +message CreateSnapshotResponse { + // Contains all attributes of the newly created snapshot that are + // relevant to the CO along with information required by the Plugin + // to uniquely identify the snapshot. This field is REQUIRED. + Snapshot snapshot = 1; +} + +// Information about a specific snapshot. +message Snapshot { + // This is the complete size of the snapshot in bytes. The purpose of + // this field is to give CO guidance on how much space is needed to + // create a volume from this snapshot. The size of the volume MUST NOT + // be less than the size of the source snapshot. This field is + // OPTIONAL. If this field is not set, it indicates that this size is + // unknown. The value of this field MUST NOT be negative and a size of + // zero means it is unspecified. + int64 size_bytes = 1; + + // The identifier for this snapshot, generated by the plugin. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific snapshot vs all other snapshots supported by this + // plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this snapshot. + // The SP is NOT responsible for global uniqueness of snapshot_id + // across multiple SPs. + string snapshot_id = 2; + + // Identity information for the source volume. Note that creating a + // snapshot from a snapshot is not supported here so the source has to + // be a volume. This field is REQUIRED. + string source_volume_id = 3; + + // Timestamp when the point-in-time snapshot is taken on the storage + // system. This field is REQUIRED. + .google.protobuf.Timestamp creation_time = 4; + + // Indicates if a snapshot is ready to use as a + // `volume_content_source` in a `CreateVolumeRequest`. The default + // value is false. This field is REQUIRED. + bool ready_to_use = 5; +} +message DeleteSnapshotRequest { + // The ID of the snapshot to be deleted. + // This field is REQUIRED. + string snapshot_id = 1; + + // Secrets required by plugin to complete snapshot deletion request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 2 [(csi.v1.csi_secret) = true]; +} + +message DeleteSnapshotResponse {} +// List all snapshots on the storage system regardless of how they were +// created. +message ListSnapshotsRequest { + // If specified (non-zero value), the Plugin MUST NOT return more + // entries than this number in the response. If the actual number of + // entries is more than this number, the Plugin MUST set `next_token` + // in the response which can be used to get the next page of entries + // in the subsequent `ListSnapshots` call. This field is OPTIONAL. If + // not specified (zero value), it means there is no restriction on the + // number of entries that can be returned. + // The value of this field MUST NOT be negative. + int32 max_entries = 1; + + // A token to specify where to start paginating. Set this field to + // `next_token` returned by a previous `ListSnapshots` call to get the + // next page of entries. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + string starting_token = 2; + + // Identity information for the source volume. This field is OPTIONAL. + // It can be used to list snapshots by volume. + string source_volume_id = 3; + + // Identity information for a specific snapshot. This field is + // OPTIONAL. It can be used to list only a specific snapshot. + // ListSnapshots will return with current snapshot information + // and will not block if the snapshot is being processed after + // it is cut. + string snapshot_id = 4; +} + +message ListSnapshotsResponse { + message Entry { + Snapshot snapshot = 1; + } + + repeated Entry entries = 1; + + // This token allows you to get the next page of entries for + // `ListSnapshots` request. If the number of entries is larger than + // `max_entries`, use the `next_token` as a value for the + // `starting_token` field in the next `ListSnapshots` request. This + // field is OPTIONAL. + // An empty string is equal to an unspecified field value. + string next_token = 2; +} +message NodeStageVolumeRequest { + // The ID of the volume to publish. This field is REQUIRED. + string volume_id = 1; + + // The CO SHALL set this field to the value returned by + // `ControllerPublishVolume` if the corresponding Controller Plugin + // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be + // left unset if the corresponding Controller Plugin does not have + // this capability. This is an OPTIONAL field. + map publish_context = 2; + + // The path to which the volume MAY be staged. It MUST be an + // absolute path in the root filesystem of the process serving this + // request, and MUST be a directory. The CO SHALL ensure that there + // is only one `staging_target_path` per volume. The CO SHALL ensure + // that the path is directory and that the process serving the + // request has `read` and `write` permission to that directory. The + // CO SHALL be responsible for creating the directory if it does not + // exist. + // This is a REQUIRED field. + string staging_target_path = 3; + + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the staged volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability volume_capability = 4; + + // Secrets required by plugin to complete node stage volume request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 5 [(csi.v1.csi_secret) = true]; + + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + map volume_context = 6; +} + +message NodeStageVolumeResponse { + // Intentionally empty. +} +message NodeUnstageVolumeRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // The path at which the volume was staged. It MUST be an absolute + // path in the root filesystem of the process serving this request. + // This is a REQUIRED field. + string staging_target_path = 2; +} + +message NodeUnstageVolumeResponse { + // Intentionally empty. +} +message NodePublishVolumeRequest { + // The ID of the volume to publish. This field is REQUIRED. + string volume_id = 1; + + // The CO SHALL set this field to the value returned by + // `ControllerPublishVolume` if the corresponding Controller Plugin + // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be + // left unset if the corresponding Controller Plugin does not have + // this capability. This is an OPTIONAL field. + map publish_context = 2; + + // The path to which the volume was staged by `NodeStageVolume`. + // It MUST be an absolute path in the root filesystem of the process + // serving this request. + // It MUST be set if the Node Plugin implements the + // `STAGE_UNSTAGE_VOLUME` node capability. + // This is an OPTIONAL field. + string staging_target_path = 3; + + // The path to which the volume will be published. It MUST be an + // absolute path in the root filesystem of the process serving this + // request. The CO SHALL ensure uniqueness of target_path per volume. + // The CO SHALL ensure that the parent directory of this path exists + // and that the process serving the request has `read` and `write` + // permissions to that parent directory. + // For volumes with an access type of block, the SP SHALL place the + // block device at target_path. + // For volumes with an access type of mount, the SP SHALL place the + // mounted directory at target_path. + // Creation of target_path is the responsibility of the SP. + // This is a REQUIRED field. + string target_path = 4; + + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the published volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability volume_capability = 5; + + // Indicates SP MUST publish the volume in readonly mode. + // This field is REQUIRED. + bool readonly = 6; + + // Secrets required by plugin to complete node publish volume request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + map secrets = 7 [(csi.v1.csi_secret) = true]; + + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + map volume_context = 8; +} + +message NodePublishVolumeResponse { + // Intentionally empty. +} +message NodeUnpublishVolumeRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // The path at which the volume was published. It MUST be an absolute + // path in the root filesystem of the process serving this request. + // The SP MUST delete the file or directory it created at this path. + // This is a REQUIRED field. + string target_path = 2; +} + +message NodeUnpublishVolumeResponse { + // Intentionally empty. +} +message NodeGetVolumeStatsRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // It can be any valid path where volume was previously + // staged or published. + // It MUST be an absolute path in the root filesystem of + // the process serving this request. + // This is a REQUIRED field. + string volume_path = 2; +} + +message NodeGetVolumeStatsResponse { + // This field is OPTIONAL. + repeated VolumeUsage usage = 1; +} + +message VolumeUsage { + enum Unit { + UNKNOWN = 0; + BYTES = 1; + INODES = 2; + } + // The available capacity in specified Unit. This field is OPTIONAL. + // The value of this field MUST NOT be negative. + int64 available = 1; + + // The total capacity in specified Unit. This field is REQUIRED. + // The value of this field MUST NOT be negative. + int64 total = 2; + + // The used capacity in specified Unit. This field is OPTIONAL. + // The value of this field MUST NOT be negative. + int64 used = 3; + + // Units by which values are measured. This field is REQUIRED. + Unit unit = 4; +} +message NodeGetCapabilitiesRequest { + // Intentionally empty. +} + +message NodeGetCapabilitiesResponse { + // All the capabilities that the node service supports. This field + // is OPTIONAL. + repeated NodeServiceCapability capabilities = 1; +} + +// Specifies a capability of the node service. +message NodeServiceCapability { + message RPC { + enum Type { + UNKNOWN = 0; + STAGE_UNSTAGE_VOLUME = 1; + // If Plugin implements GET_VOLUME_STATS capability + // then it MUST implement NodeGetVolumeStats RPC + // call for fetching volume statistics. + GET_VOLUME_STATS = 2; + } + + Type type = 1; + } + + oneof type { + // RPC that the controller supports. + RPC rpc = 1; + } +} +message NodeGetInfoRequest { +} + +message NodeGetInfoResponse { + // The identifier of the node as understood by the SP. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific node vs all other nodes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls, including + // `ControllerPublishVolume`, to refer to this node. + // The SP is NOT responsible for global uniqueness of node_id across + // multiple SPs. + string node_id = 1; + + // Maximum number of volumes that controller can publish to the node. + // If value is not set or zero CO SHALL decide how many volumes of + // this type can be published by the controller to the node. The + // plugin MUST NOT set negative values here. + // This field is OPTIONAL. + int64 max_volumes_per_node = 2; + + // Specifies where (regions, zones, racks, etc.) the node is + // accessible from. + // A plugin that returns this field MUST also set the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // COs MAY use this information along with the topology information + // returned in CreateVolumeResponse to ensure that a given volume is + // accessible from a given node when scheduling workloads. + // This field is OPTIONAL. If it is not specified, the CO MAY assume + // the node is not subject to any topological constraint, and MAY + // schedule workloads that reference any volume V, such that there are + // no topological constraints declared for V. + // + // Example 1: + // accessible_topology = + // {"region": "R1", "zone": "R2"} + // Indicates the node exists within the "region" "R1" and the "zone" + // "Z2". + Topology accessible_topology = 3; +} diff --git a/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest/csitest.pb.go b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest/csitest.pb.go new file mode 100644 index 000000000..786c1d414 --- /dev/null +++ b/vendor/github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest/csitest.pb.go @@ -0,0 +1,5326 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest.proto + +package csitest + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/golang/protobuf/protoc-gen-go/descriptor" +import timestamp "github.com/golang/protobuf/ptypes/timestamp" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type PluginCapability_Service_Type int32 + +const ( + PluginCapability_Service_UNKNOWN PluginCapability_Service_Type = 0 + // CONTROLLER_SERVICE indicates that the Plugin provides RPCs for + // the ControllerService. Plugins SHOULD provide this capability. + // In rare cases certain plugins MAY wish to omit the + // ControllerService entirely from their implementation, but such + // SHOULD NOT be the common case. + // The presence of this capability determines whether the CO will + // attempt to invoke the REQUIRED ControllerService RPCs, as well + // as specific RPCs as indicated by ControllerGetCapabilities. + PluginCapability_Service_CONTROLLER_SERVICE PluginCapability_Service_Type = 1 + // VOLUME_ACCESSIBILITY_CONSTRAINTS indicates that the volumes for + // this plugin MAY NOT be equally accessible by all nodes in the + // cluster. The CO MUST use the topology information returned by + // CreateVolumeRequest along with the topology information + // returned by NodeGetInfo to ensure that a given volume is + // accessible from a given node when scheduling workloads. + PluginCapability_Service_VOLUME_ACCESSIBILITY_CONSTRAINTS PluginCapability_Service_Type = 2 +) + +var PluginCapability_Service_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CONTROLLER_SERVICE", + 2: "VOLUME_ACCESSIBILITY_CONSTRAINTS", +} +var PluginCapability_Service_Type_value = map[string]int32{ + "UNKNOWN": 0, + "CONTROLLER_SERVICE": 1, + "VOLUME_ACCESSIBILITY_CONSTRAINTS": 2, +} + +func (x PluginCapability_Service_Type) String() string { + return proto.EnumName(PluginCapability_Service_Type_name, int32(x)) +} +func (PluginCapability_Service_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{4, 0, 0} +} + +type VolumeCapability_AccessMode_Mode int32 + +const ( + VolumeCapability_AccessMode_UNKNOWN VolumeCapability_AccessMode_Mode = 0 + // Can only be published once as read/write on a single node, at + // any given time. + VolumeCapability_AccessMode_SINGLE_NODE_WRITER VolumeCapability_AccessMode_Mode = 1 + // Can only be published once as readonly on a single node, at + // any given time. + VolumeCapability_AccessMode_SINGLE_NODE_READER_ONLY VolumeCapability_AccessMode_Mode = 2 + // Can be published as readonly at multiple nodes simultaneously. + VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY VolumeCapability_AccessMode_Mode = 3 + // Can be published at multiple nodes simultaneously. Only one of + // the node can be used as read/write. The rest will be readonly. + VolumeCapability_AccessMode_MULTI_NODE_SINGLE_WRITER VolumeCapability_AccessMode_Mode = 4 + // Can be published as read/write at multiple nodes + // simultaneously. + VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER VolumeCapability_AccessMode_Mode = 5 +) + +var VolumeCapability_AccessMode_Mode_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SINGLE_NODE_WRITER", + 2: "SINGLE_NODE_READER_ONLY", + 3: "MULTI_NODE_READER_ONLY", + 4: "MULTI_NODE_SINGLE_WRITER", + 5: "MULTI_NODE_MULTI_WRITER", +} +var VolumeCapability_AccessMode_Mode_value = map[string]int32{ + "UNKNOWN": 0, + "SINGLE_NODE_WRITER": 1, + "SINGLE_NODE_READER_ONLY": 2, + "MULTI_NODE_READER_ONLY": 3, + "MULTI_NODE_SINGLE_WRITER": 4, + "MULTI_NODE_MULTI_WRITER": 5, +} + +func (x VolumeCapability_AccessMode_Mode) String() string { + return proto.EnumName(VolumeCapability_AccessMode_Mode_name, int32(x)) +} +func (VolumeCapability_AccessMode_Mode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{10, 2, 0} +} + +type ControllerServiceCapability_RPC_Type int32 + +const ( + ControllerServiceCapability_RPC_UNKNOWN ControllerServiceCapability_RPC_Type = 0 + ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME ControllerServiceCapability_RPC_Type = 1 + ControllerServiceCapability_RPC_PUBLISH_UNPUBLISH_VOLUME ControllerServiceCapability_RPC_Type = 2 + ControllerServiceCapability_RPC_LIST_VOLUMES ControllerServiceCapability_RPC_Type = 3 + ControllerServiceCapability_RPC_GET_CAPACITY ControllerServiceCapability_RPC_Type = 4 + // Currently the only way to consume a snapshot is to create + // a volume from it. Therefore plugins supporting + // CREATE_DELETE_SNAPSHOT MUST support creating volume from + // snapshot. + ControllerServiceCapability_RPC_CREATE_DELETE_SNAPSHOT ControllerServiceCapability_RPC_Type = 5 + ControllerServiceCapability_RPC_LIST_SNAPSHOTS ControllerServiceCapability_RPC_Type = 6 + // Plugins supporting volume cloning at the storage level MAY + // report this capability. The source volume MUST be managed by + // the same plugin. Not all volume sources and parameters + // combinations MAY work. + ControllerServiceCapability_RPC_CLONE_VOLUME ControllerServiceCapability_RPC_Type = 7 + // Indicates the SP supports ControllerPublishVolume.readonly + // field. + ControllerServiceCapability_RPC_PUBLISH_READONLY ControllerServiceCapability_RPC_Type = 8 +) + +var ControllerServiceCapability_RPC_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CREATE_DELETE_VOLUME", + 2: "PUBLISH_UNPUBLISH_VOLUME", + 3: "LIST_VOLUMES", + 4: "GET_CAPACITY", + 5: "CREATE_DELETE_SNAPSHOT", + 6: "LIST_SNAPSHOTS", + 7: "CLONE_VOLUME", + 8: "PUBLISH_READONLY", +} +var ControllerServiceCapability_RPC_Type_value = map[string]int32{ + "UNKNOWN": 0, + "CREATE_DELETE_VOLUME": 1, + "PUBLISH_UNPUBLISH_VOLUME": 2, + "LIST_VOLUMES": 3, + "GET_CAPACITY": 4, + "CREATE_DELETE_SNAPSHOT": 5, + "LIST_SNAPSHOTS": 6, + "CLONE_VOLUME": 7, + "PUBLISH_READONLY": 8, +} + +func (x ControllerServiceCapability_RPC_Type) String() string { + return proto.EnumName(ControllerServiceCapability_RPC_Type_name, int32(x)) +} +func (ControllerServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{29, 0, 0} +} + +type VolumeUsage_Unit int32 + +const ( + VolumeUsage_UNKNOWN VolumeUsage_Unit = 0 + VolumeUsage_BYTES VolumeUsage_Unit = 1 + VolumeUsage_INODES VolumeUsage_Unit = 2 +) + +var VolumeUsage_Unit_name = map[int32]string{ + 0: "UNKNOWN", + 1: "BYTES", + 2: "INODES", +} +var VolumeUsage_Unit_value = map[string]int32{ + "UNKNOWN": 0, + "BYTES": 1, + "INODES": 2, +} + +func (x VolumeUsage_Unit) String() string { + return proto.EnumName(VolumeUsage_Unit_name, int32(x)) +} +func (VolumeUsage_Unit) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{47, 0} +} + +type NodeServiceCapability_RPC_Type int32 + +const ( + NodeServiceCapability_RPC_UNKNOWN NodeServiceCapability_RPC_Type = 0 + NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME NodeServiceCapability_RPC_Type = 1 + // If Plugin implements GET_VOLUME_STATS capability + // then it MUST implement NodeGetVolumeStats RPC + // call for fetching volume statistics. + NodeServiceCapability_RPC_GET_VOLUME_STATS NodeServiceCapability_RPC_Type = 2 +) + +var NodeServiceCapability_RPC_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "STAGE_UNSTAGE_VOLUME", + 2: "GET_VOLUME_STATS", +} +var NodeServiceCapability_RPC_Type_value = map[string]int32{ + "UNKNOWN": 0, + "STAGE_UNSTAGE_VOLUME": 1, + "GET_VOLUME_STATS": 2, +} + +func (x NodeServiceCapability_RPC_Type) String() string { + return proto.EnumName(NodeServiceCapability_RPC_Type_name, int32(x)) +} +func (NodeServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{50, 0, 0} +} + +type GetPluginInfoRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginInfoRequest) Reset() { *m = GetPluginInfoRequest{} } +func (m *GetPluginInfoRequest) String() string { return proto.CompactTextString(m) } +func (*GetPluginInfoRequest) ProtoMessage() {} +func (*GetPluginInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{0} +} +func (m *GetPluginInfoRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginInfoRequest.Unmarshal(m, b) +} +func (m *GetPluginInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginInfoRequest.Marshal(b, m, deterministic) +} +func (dst *GetPluginInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginInfoRequest.Merge(dst, src) +} +func (m *GetPluginInfoRequest) XXX_Size() int { + return xxx_messageInfo_GetPluginInfoRequest.Size(m) +} +func (m *GetPluginInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginInfoRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginInfoRequest proto.InternalMessageInfo + +type GetPluginInfoResponse struct { + // The name MUST follow domain name notation format + // (https://tools.ietf.org/html/rfc1035#section-2.3.1). It SHOULD + // include the plugin's host company name and the plugin name, + // to minimize the possibility of collisions. It MUST be 63 + // characters or less, beginning and ending with an alphanumeric + // character ([a-z0-9A-Z]) with dashes (-), dots (.), and + // alphanumerics between. This field is REQUIRED. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // This field is REQUIRED. Value of this field is opaque to the CO. + VendorVersion string `protobuf:"bytes,2,opt,name=vendor_version,json=vendorVersion,proto3" json:"vendor_version,omitempty"` + // This field is OPTIONAL. Values are opaque to the CO. + Manifest map[string]string `protobuf:"bytes,3,rep,name=manifest,proto3" json:"manifest,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginInfoResponse) Reset() { *m = GetPluginInfoResponse{} } +func (m *GetPluginInfoResponse) String() string { return proto.CompactTextString(m) } +func (*GetPluginInfoResponse) ProtoMessage() {} +func (*GetPluginInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{1} +} +func (m *GetPluginInfoResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginInfoResponse.Unmarshal(m, b) +} +func (m *GetPluginInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginInfoResponse.Marshal(b, m, deterministic) +} +func (dst *GetPluginInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginInfoResponse.Merge(dst, src) +} +func (m *GetPluginInfoResponse) XXX_Size() int { + return xxx_messageInfo_GetPluginInfoResponse.Size(m) +} +func (m *GetPluginInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginInfoResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginInfoResponse proto.InternalMessageInfo + +func (m *GetPluginInfoResponse) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetPluginInfoResponse) GetVendorVersion() string { + if m != nil { + return m.VendorVersion + } + return "" +} + +func (m *GetPluginInfoResponse) GetManifest() map[string]string { + if m != nil { + return m.Manifest + } + return nil +} + +type GetPluginCapabilitiesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginCapabilitiesRequest) Reset() { *m = GetPluginCapabilitiesRequest{} } +func (m *GetPluginCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*GetPluginCapabilitiesRequest) ProtoMessage() {} +func (*GetPluginCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{2} +} +func (m *GetPluginCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginCapabilitiesRequest.Unmarshal(m, b) +} +func (m *GetPluginCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *GetPluginCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginCapabilitiesRequest.Merge(dst, src) +} +func (m *GetPluginCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_GetPluginCapabilitiesRequest.Size(m) +} +func (m *GetPluginCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginCapabilitiesRequest proto.InternalMessageInfo + +type GetPluginCapabilitiesResponse struct { + // All the capabilities that the controller service supports. This + // field is OPTIONAL. + Capabilities []*PluginCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetPluginCapabilitiesResponse) Reset() { *m = GetPluginCapabilitiesResponse{} } +func (m *GetPluginCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*GetPluginCapabilitiesResponse) ProtoMessage() {} +func (*GetPluginCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{3} +} +func (m *GetPluginCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetPluginCapabilitiesResponse.Unmarshal(m, b) +} +func (m *GetPluginCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetPluginCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *GetPluginCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPluginCapabilitiesResponse.Merge(dst, src) +} +func (m *GetPluginCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_GetPluginCapabilitiesResponse.Size(m) +} +func (m *GetPluginCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetPluginCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetPluginCapabilitiesResponse proto.InternalMessageInfo + +func (m *GetPluginCapabilitiesResponse) GetCapabilities() []*PluginCapability { + if m != nil { + return m.Capabilities + } + return nil +} + +// Specifies a capability of the plugin. +type PluginCapability struct { + // Types that are valid to be assigned to Type: + // *PluginCapability_Service_ + Type isPluginCapability_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginCapability) Reset() { *m = PluginCapability{} } +func (m *PluginCapability) String() string { return proto.CompactTextString(m) } +func (*PluginCapability) ProtoMessage() {} +func (*PluginCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{4} +} +func (m *PluginCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PluginCapability.Unmarshal(m, b) +} +func (m *PluginCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PluginCapability.Marshal(b, m, deterministic) +} +func (dst *PluginCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginCapability.Merge(dst, src) +} +func (m *PluginCapability) XXX_Size() int { + return xxx_messageInfo_PluginCapability.Size(m) +} +func (m *PluginCapability) XXX_DiscardUnknown() { + xxx_messageInfo_PluginCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginCapability proto.InternalMessageInfo + +type isPluginCapability_Type interface { + isPluginCapability_Type() +} + +type PluginCapability_Service_ struct { + Service *PluginCapability_Service `protobuf:"bytes,1,opt,name=service,proto3,oneof"` +} + +func (*PluginCapability_Service_) isPluginCapability_Type() {} + +func (m *PluginCapability) GetType() isPluginCapability_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *PluginCapability) GetService() *PluginCapability_Service { + if x, ok := m.GetType().(*PluginCapability_Service_); ok { + return x.Service + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PluginCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PluginCapability_OneofMarshaler, _PluginCapability_OneofUnmarshaler, _PluginCapability_OneofSizer, []interface{}{ + (*PluginCapability_Service_)(nil), + } +} + +func _PluginCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PluginCapability) + // type + switch x := m.Type.(type) { + case *PluginCapability_Service_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Service); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PluginCapability.Type has unexpected type %T", x) + } + return nil +} + +func _PluginCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PluginCapability) + switch tag { + case 1: // type.service + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PluginCapability_Service) + err := b.DecodeMessage(msg) + m.Type = &PluginCapability_Service_{msg} + return true, err + default: + return false, nil + } +} + +func _PluginCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PluginCapability) + // type + switch x := m.Type.(type) { + case *PluginCapability_Service_: + s := proto.Size(x.Service) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type PluginCapability_Service struct { + Type PluginCapability_Service_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csitest.v1.PluginCapability_Service_Type" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginCapability_Service) Reset() { *m = PluginCapability_Service{} } +func (m *PluginCapability_Service) String() string { return proto.CompactTextString(m) } +func (*PluginCapability_Service) ProtoMessage() {} +func (*PluginCapability_Service) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{4, 0} +} +func (m *PluginCapability_Service) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PluginCapability_Service.Unmarshal(m, b) +} +func (m *PluginCapability_Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PluginCapability_Service.Marshal(b, m, deterministic) +} +func (dst *PluginCapability_Service) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginCapability_Service.Merge(dst, src) +} +func (m *PluginCapability_Service) XXX_Size() int { + return xxx_messageInfo_PluginCapability_Service.Size(m) +} +func (m *PluginCapability_Service) XXX_DiscardUnknown() { + xxx_messageInfo_PluginCapability_Service.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginCapability_Service proto.InternalMessageInfo + +func (m *PluginCapability_Service) GetType() PluginCapability_Service_Type { + if m != nil { + return m.Type + } + return PluginCapability_Service_UNKNOWN +} + +type ProbeRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ProbeRequest) Reset() { *m = ProbeRequest{} } +func (m *ProbeRequest) String() string { return proto.CompactTextString(m) } +func (*ProbeRequest) ProtoMessage() {} +func (*ProbeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{5} +} +func (m *ProbeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ProbeRequest.Unmarshal(m, b) +} +func (m *ProbeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ProbeRequest.Marshal(b, m, deterministic) +} +func (dst *ProbeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProbeRequest.Merge(dst, src) +} +func (m *ProbeRequest) XXX_Size() int { + return xxx_messageInfo_ProbeRequest.Size(m) +} +func (m *ProbeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ProbeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ProbeRequest proto.InternalMessageInfo + +type ProbeResponse struct { + // Readiness allows a plugin to report its initialization status back + // to the CO. Initialization for some plugins MAY be time consuming + // and it is important for a CO to distinguish between the following + // cases: + // + // 1) The plugin is in an unhealthy state and MAY need restarting. In + // this case a gRPC error code SHALL be returned. + // 2) The plugin is still initializing, but is otherwise perfectly + // healthy. In this case a successful response SHALL be returned + // with a readiness value of `false`. Calls to the plugin's + // Controller and/or Node services MAY fail due to an incomplete + // initialization state. + // 3) The plugin has finished initializing and is ready to service + // calls to its Controller and/or Node services. A successful + // response is returned with a readiness value of `true`. + // + // This field is OPTIONAL. If not present, the caller SHALL assume + // that the plugin is in a ready state and is accepting calls to its + // Controller and/or Node services (according to the plugin's reported + // capabilities). + Ready *wrappers.BoolValue `protobuf:"bytes,1,opt,name=ready,proto3" json:"ready,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ProbeResponse) Reset() { *m = ProbeResponse{} } +func (m *ProbeResponse) String() string { return proto.CompactTextString(m) } +func (*ProbeResponse) ProtoMessage() {} +func (*ProbeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{6} +} +func (m *ProbeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ProbeResponse.Unmarshal(m, b) +} +func (m *ProbeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ProbeResponse.Marshal(b, m, deterministic) +} +func (dst *ProbeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProbeResponse.Merge(dst, src) +} +func (m *ProbeResponse) XXX_Size() int { + return xxx_messageInfo_ProbeResponse.Size(m) +} +func (m *ProbeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ProbeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ProbeResponse proto.InternalMessageInfo + +func (m *ProbeResponse) GetReady() *wrappers.BoolValue { + if m != nil { + return m.Ready + } + return nil +} + +type CreateVolumeRequest struct { + // The suggested name for the storage space. This field is REQUIRED. + // It serves two purposes: + // 1) Idempotency - This name is generated by the CO to achieve + // idempotency. The Plugin SHOULD ensure that multiple + // `CreateVolume` calls for the same name do not result in more + // than one piece of storage provisioned corresponding to that + // name. If a Plugin is unable to enforce idempotency, the CO's + // error recovery logic could result in multiple (unused) volumes + // being provisioned. + // In the case of error, the CO MUST handle the gRPC error codes + // per the recovery behavior defined in the "CreateVolume Errors" + // section below. + // The CO is responsible for cleaning up volumes it provisioned + // that it no longer needs. If the CO is uncertain whether a volume + // was provisioned or not when a `CreateVolume` call fails, the CO + // MAY call `CreateVolume` again, with the same name, to ensure the + // volume exists and to retrieve the volume's `volume_id` (unless + // otherwise prohibited by "CreateVolume Errors"). + // 2) Suggested name - Some storage systems allow callers to specify + // an identifier by which to refer to the newly provisioned + // storage. If a storage system supports this, it can optionally + // use this name as the identifier for the new volume. + // Any Unicode string that conforms to the length limit is allowed + // except those containing the following banned characters: + // U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F. + // (These are control characters other than commonly used whitespace.) + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // This field is OPTIONAL. This allows the CO to specify the capacity + // requirement of the volume to be provisioned. If not specified, the + // Plugin MAY choose an implementation-defined capacity range. If + // specified it MUST always be honored, even when creating volumes + // from a source; which MAY force some backends to internally extend + // the volume after creating it. + CapacityRange *CapacityRange `protobuf:"bytes,2,opt,name=capacity_range,json=capacityRange,proto3" json:"capacity_range,omitempty"` + // The capabilities that the provisioned volume MUST have. SP MUST + // provision a volume that will satisfy ALL of the capabilities + // specified in this list. Otherwise SP MUST return the appropriate + // gRPC error code. + // The Plugin MUST assume that the CO MAY use the provisioned volume + // with ANY of the capabilities specified in this list. + // For example, a CO MAY specify two volume capabilities: one with + // access mode SINGLE_NODE_WRITER and another with access mode + // MULTI_NODE_READER_ONLY. In this case, the SP MUST verify that the + // provisioned volume can be used in either mode. + // This also enables the CO to do early validation: If ANY of the + // specified volume capabilities are not supported by the SP, the call + // MUST return the appropriate gRPC error code. + // This field is REQUIRED. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,3,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"` + // Plugin specific parameters passed in as opaque key-value pairs. + // This field is OPTIONAL. The Plugin is responsible for parsing and + // validating these parameters. COs will treat these as opaque. + Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Secrets required by plugin to complete volume creation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. Renamed to test whether secret + // stripping is really based on the csi_secret option. + Seecreets map[string]string `protobuf:"bytes,5,rep,name=seecreets,proto3" json:"seecreets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // If specified, the new volume will be pre-populated with data from + // this source. This field is OPTIONAL. + VolumeContentSource *VolumeContentSource `protobuf:"bytes,6,opt,name=volume_content_source,json=volumeContentSource,proto3" json:"volume_content_source,omitempty"` + // Specifies where (regions, zones, racks, etc.) the provisioned + // volume MUST be accessible from. + // An SP SHALL advertise the requirements for topological + // accessibility information in documentation. COs SHALL only specify + // topological accessibility information supported by the SP. + // This field is OPTIONAL. + // This field SHALL NOT be specified unless the SP has the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // If this field is not specified and the SP has the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability, the SP MAY + // choose where the provisioned volume is accessible from. + AccessibilityRequirements *TopologyRequirement `protobuf:"bytes,7,opt,name=accessibility_requirements,json=accessibilityRequirements,proto3" json:"accessibility_requirements,omitempty"` + // A secret value that isn't a string map. + NewSecretInt int64 `protobuf:"varint,8,opt,name=new_secret_int,json=newSecretInt,proto3" json:"new_secret_int,omitempty"` + // We must recurse into maps. + MaybeSecretMap map[int64]*VolumeCapability `protobuf:"bytes,9,rep,name=maybe_secret_map,json=maybeSecretMap,proto3" json:"maybe_secret_map,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateVolumeRequest) Reset() { *m = CreateVolumeRequest{} } +func (m *CreateVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*CreateVolumeRequest) ProtoMessage() {} +func (*CreateVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{7} +} +func (m *CreateVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateVolumeRequest.Unmarshal(m, b) +} +func (m *CreateVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *CreateVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateVolumeRequest.Merge(dst, src) +} +func (m *CreateVolumeRequest) XXX_Size() int { + return xxx_messageInfo_CreateVolumeRequest.Size(m) +} +func (m *CreateVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CreateVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateVolumeRequest proto.InternalMessageInfo + +func (m *CreateVolumeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateVolumeRequest) GetCapacityRange() *CapacityRange { + if m != nil { + return m.CapacityRange + } + return nil +} + +func (m *CreateVolumeRequest) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *CreateVolumeRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *CreateVolumeRequest) GetSeecreets() map[string]string { + if m != nil { + return m.Seecreets + } + return nil +} + +func (m *CreateVolumeRequest) GetVolumeContentSource() *VolumeContentSource { + if m != nil { + return m.VolumeContentSource + } + return nil +} + +func (m *CreateVolumeRequest) GetAccessibilityRequirements() *TopologyRequirement { + if m != nil { + return m.AccessibilityRequirements + } + return nil +} + +func (m *CreateVolumeRequest) GetNewSecretInt() int64 { + if m != nil { + return m.NewSecretInt + } + return 0 +} + +func (m *CreateVolumeRequest) GetMaybeSecretMap() map[int64]*VolumeCapability { + if m != nil { + return m.MaybeSecretMap + } + return nil +} + +// Specifies what source the volume will be created from. One of the +// type fields MUST be specified. +type VolumeContentSource struct { + // Types that are valid to be assigned to Type: + // *VolumeContentSource_Snapshot + // *VolumeContentSource_Volume + Type isVolumeContentSource_Type `protobuf_oneof:"type"` + // A secret field that will only get stripped by code that + // can recurse into CreateVolumeRequest. + NestedSecretField string `protobuf:"bytes,3,opt,name=nested_secret_field,json=nestedSecretField,proto3" json:"nested_secret_field,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeContentSource) Reset() { *m = VolumeContentSource{} } +func (m *VolumeContentSource) String() string { return proto.CompactTextString(m) } +func (*VolumeContentSource) ProtoMessage() {} +func (*VolumeContentSource) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{8} +} +func (m *VolumeContentSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeContentSource.Unmarshal(m, b) +} +func (m *VolumeContentSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeContentSource.Marshal(b, m, deterministic) +} +func (dst *VolumeContentSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeContentSource.Merge(dst, src) +} +func (m *VolumeContentSource) XXX_Size() int { + return xxx_messageInfo_VolumeContentSource.Size(m) +} +func (m *VolumeContentSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeContentSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeContentSource proto.InternalMessageInfo + +type isVolumeContentSource_Type interface { + isVolumeContentSource_Type() +} + +type VolumeContentSource_Snapshot struct { + Snapshot *VolumeContentSource_SnapshotSource `protobuf:"bytes,1,opt,name=snapshot,proto3,oneof"` +} + +type VolumeContentSource_Volume struct { + Volume *VolumeContentSource_VolumeSource `protobuf:"bytes,2,opt,name=volume,proto3,oneof"` +} + +func (*VolumeContentSource_Snapshot) isVolumeContentSource_Type() {} + +func (*VolumeContentSource_Volume) isVolumeContentSource_Type() {} + +func (m *VolumeContentSource) GetType() isVolumeContentSource_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *VolumeContentSource) GetSnapshot() *VolumeContentSource_SnapshotSource { + if x, ok := m.GetType().(*VolumeContentSource_Snapshot); ok { + return x.Snapshot + } + return nil +} + +func (m *VolumeContentSource) GetVolume() *VolumeContentSource_VolumeSource { + if x, ok := m.GetType().(*VolumeContentSource_Volume); ok { + return x.Volume + } + return nil +} + +func (m *VolumeContentSource) GetNestedSecretField() string { + if m != nil { + return m.NestedSecretField + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*VolumeContentSource) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _VolumeContentSource_OneofMarshaler, _VolumeContentSource_OneofUnmarshaler, _VolumeContentSource_OneofSizer, []interface{}{ + (*VolumeContentSource_Snapshot)(nil), + (*VolumeContentSource_Volume)(nil), + } +} + +func _VolumeContentSource_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*VolumeContentSource) + // type + switch x := m.Type.(type) { + case *VolumeContentSource_Snapshot: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Snapshot); err != nil { + return err + } + case *VolumeContentSource_Volume: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Volume); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("VolumeContentSource.Type has unexpected type %T", x) + } + return nil +} + +func _VolumeContentSource_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*VolumeContentSource) + switch tag { + case 1: // type.snapshot + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeContentSource_SnapshotSource) + err := b.DecodeMessage(msg) + m.Type = &VolumeContentSource_Snapshot{msg} + return true, err + case 2: // type.volume + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeContentSource_VolumeSource) + err := b.DecodeMessage(msg) + m.Type = &VolumeContentSource_Volume{msg} + return true, err + default: + return false, nil + } +} + +func _VolumeContentSource_OneofSizer(msg proto.Message) (n int) { + m := msg.(*VolumeContentSource) + // type + switch x := m.Type.(type) { + case *VolumeContentSource_Snapshot: + s := proto.Size(x.Snapshot) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *VolumeContentSource_Volume: + s := proto.Size(x.Volume) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type VolumeContentSource_SnapshotSource struct { + // Contains identity information for the existing source snapshot. + // This field is REQUIRED. Plugin is REQUIRED to support creating + // volume from snapshot if it supports the capability + // CREATE_DELETE_SNAPSHOT. + SnapshotId string `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeContentSource_SnapshotSource) Reset() { *m = VolumeContentSource_SnapshotSource{} } +func (m *VolumeContentSource_SnapshotSource) String() string { return proto.CompactTextString(m) } +func (*VolumeContentSource_SnapshotSource) ProtoMessage() {} +func (*VolumeContentSource_SnapshotSource) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{8, 0} +} +func (m *VolumeContentSource_SnapshotSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeContentSource_SnapshotSource.Unmarshal(m, b) +} +func (m *VolumeContentSource_SnapshotSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeContentSource_SnapshotSource.Marshal(b, m, deterministic) +} +func (dst *VolumeContentSource_SnapshotSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeContentSource_SnapshotSource.Merge(dst, src) +} +func (m *VolumeContentSource_SnapshotSource) XXX_Size() int { + return xxx_messageInfo_VolumeContentSource_SnapshotSource.Size(m) +} +func (m *VolumeContentSource_SnapshotSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeContentSource_SnapshotSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeContentSource_SnapshotSource proto.InternalMessageInfo + +func (m *VolumeContentSource_SnapshotSource) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +type VolumeContentSource_VolumeSource struct { + // Contains identity information for the existing source volume. + // This field is REQUIRED. Plugins reporting CLONE_VOLUME + // capability MUST support creating a volume from another volume. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // A secret field that will only get stripped by code that + // can recurse into a oneof field. + OneofSecretField string `protobuf:"bytes,2,opt,name=oneof_secret_field,json=oneofSecretField,proto3" json:"oneof_secret_field,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeContentSource_VolumeSource) Reset() { *m = VolumeContentSource_VolumeSource{} } +func (m *VolumeContentSource_VolumeSource) String() string { return proto.CompactTextString(m) } +func (*VolumeContentSource_VolumeSource) ProtoMessage() {} +func (*VolumeContentSource_VolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{8, 1} +} +func (m *VolumeContentSource_VolumeSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeContentSource_VolumeSource.Unmarshal(m, b) +} +func (m *VolumeContentSource_VolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeContentSource_VolumeSource.Marshal(b, m, deterministic) +} +func (dst *VolumeContentSource_VolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeContentSource_VolumeSource.Merge(dst, src) +} +func (m *VolumeContentSource_VolumeSource) XXX_Size() int { + return xxx_messageInfo_VolumeContentSource_VolumeSource.Size(m) +} +func (m *VolumeContentSource_VolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeContentSource_VolumeSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeContentSource_VolumeSource proto.InternalMessageInfo + +func (m *VolumeContentSource_VolumeSource) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *VolumeContentSource_VolumeSource) GetOneofSecretField() string { + if m != nil { + return m.OneofSecretField + } + return "" +} + +type CreateVolumeResponse struct { + // Contains all attributes of the newly created volume that are + // relevant to the CO along with information required by the Plugin + // to uniquely identify the volume. This field is REQUIRED. + Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateVolumeResponse) Reset() { *m = CreateVolumeResponse{} } +func (m *CreateVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*CreateVolumeResponse) ProtoMessage() {} +func (*CreateVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{9} +} +func (m *CreateVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateVolumeResponse.Unmarshal(m, b) +} +func (m *CreateVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *CreateVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateVolumeResponse.Merge(dst, src) +} +func (m *CreateVolumeResponse) XXX_Size() int { + return xxx_messageInfo_CreateVolumeResponse.Size(m) +} +func (m *CreateVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_CreateVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateVolumeResponse proto.InternalMessageInfo + +func (m *CreateVolumeResponse) GetVolume() *Volume { + if m != nil { + return m.Volume + } + return nil +} + +// Specify a capability of a volume. +type VolumeCapability struct { + // Specifies what API the volume will be accessed using. One of the + // following fields MUST be specified. + // + // Types that are valid to be assigned to AccessType: + // *VolumeCapability_Block + // *VolumeCapability_Mount + AccessType isVolumeCapability_AccessType `protobuf_oneof:"access_type"` + // This is a REQUIRED field. + AccessMode *VolumeCapability_AccessMode `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"` + // A secret inside a field that occurs in an array. + ArraySecret string `protobuf:"bytes,4,opt,name=array_secret,json=arraySecret,proto3" json:"array_secret,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability) Reset() { *m = VolumeCapability{} } +func (m *VolumeCapability) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability) ProtoMessage() {} +func (*VolumeCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{10} +} +func (m *VolumeCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability.Unmarshal(m, b) +} +func (m *VolumeCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability.Merge(dst, src) +} +func (m *VolumeCapability) XXX_Size() int { + return xxx_messageInfo_VolumeCapability.Size(m) +} +func (m *VolumeCapability) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability proto.InternalMessageInfo + +type isVolumeCapability_AccessType interface { + isVolumeCapability_AccessType() +} + +type VolumeCapability_Block struct { + Block *VolumeCapability_BlockVolume `protobuf:"bytes,1,opt,name=block,proto3,oneof"` +} + +type VolumeCapability_Mount struct { + Mount *VolumeCapability_MountVolume `protobuf:"bytes,2,opt,name=mount,proto3,oneof"` +} + +func (*VolumeCapability_Block) isVolumeCapability_AccessType() {} + +func (*VolumeCapability_Mount) isVolumeCapability_AccessType() {} + +func (m *VolumeCapability) GetAccessType() isVolumeCapability_AccessType { + if m != nil { + return m.AccessType + } + return nil +} + +func (m *VolumeCapability) GetBlock() *VolumeCapability_BlockVolume { + if x, ok := m.GetAccessType().(*VolumeCapability_Block); ok { + return x.Block + } + return nil +} + +func (m *VolumeCapability) GetMount() *VolumeCapability_MountVolume { + if x, ok := m.GetAccessType().(*VolumeCapability_Mount); ok { + return x.Mount + } + return nil +} + +func (m *VolumeCapability) GetAccessMode() *VolumeCapability_AccessMode { + if m != nil { + return m.AccessMode + } + return nil +} + +func (m *VolumeCapability) GetArraySecret() string { + if m != nil { + return m.ArraySecret + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*VolumeCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _VolumeCapability_OneofMarshaler, _VolumeCapability_OneofUnmarshaler, _VolumeCapability_OneofSizer, []interface{}{ + (*VolumeCapability_Block)(nil), + (*VolumeCapability_Mount)(nil), + } +} + +func _VolumeCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*VolumeCapability) + // access_type + switch x := m.AccessType.(type) { + case *VolumeCapability_Block: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Block); err != nil { + return err + } + case *VolumeCapability_Mount: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Mount); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("VolumeCapability.AccessType has unexpected type %T", x) + } + return nil +} + +func _VolumeCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*VolumeCapability) + switch tag { + case 1: // access_type.block + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeCapability_BlockVolume) + err := b.DecodeMessage(msg) + m.AccessType = &VolumeCapability_Block{msg} + return true, err + case 2: // access_type.mount + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VolumeCapability_MountVolume) + err := b.DecodeMessage(msg) + m.AccessType = &VolumeCapability_Mount{msg} + return true, err + default: + return false, nil + } +} + +func _VolumeCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*VolumeCapability) + // access_type + switch x := m.AccessType.(type) { + case *VolumeCapability_Block: + s := proto.Size(x.Block) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *VolumeCapability_Mount: + s := proto.Size(x.Mount) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Indicate that the volume will be accessed via the block device API. +type VolumeCapability_BlockVolume struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability_BlockVolume) Reset() { *m = VolumeCapability_BlockVolume{} } +func (m *VolumeCapability_BlockVolume) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_BlockVolume) ProtoMessage() {} +func (*VolumeCapability_BlockVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{10, 0} +} +func (m *VolumeCapability_BlockVolume) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability_BlockVolume.Unmarshal(m, b) +} +func (m *VolumeCapability_BlockVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability_BlockVolume.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability_BlockVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability_BlockVolume.Merge(dst, src) +} +func (m *VolumeCapability_BlockVolume) XXX_Size() int { + return xxx_messageInfo_VolumeCapability_BlockVolume.Size(m) +} +func (m *VolumeCapability_BlockVolume) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability_BlockVolume.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability_BlockVolume proto.InternalMessageInfo + +// Indicate that the volume will be accessed via the filesystem API. +type VolumeCapability_MountVolume struct { + // The filesystem type. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + FsType string `protobuf:"bytes,1,opt,name=fs_type,json=fsType,proto3" json:"fs_type,omitempty"` + // The mount options that can be used for the volume. This field is + // OPTIONAL. `mount_flags` MAY contain sensitive information. + // Therefore, the CO and the Plugin MUST NOT leak this information + // to untrusted entities. The total size of this repeated field + // SHALL NOT exceed 4 KiB. + MountFlags []string `protobuf:"bytes,2,rep,name=mount_flags,json=mountFlags,proto3" json:"mount_flags,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability_MountVolume) Reset() { *m = VolumeCapability_MountVolume{} } +func (m *VolumeCapability_MountVolume) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_MountVolume) ProtoMessage() {} +func (*VolumeCapability_MountVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{10, 1} +} +func (m *VolumeCapability_MountVolume) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability_MountVolume.Unmarshal(m, b) +} +func (m *VolumeCapability_MountVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability_MountVolume.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability_MountVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability_MountVolume.Merge(dst, src) +} +func (m *VolumeCapability_MountVolume) XXX_Size() int { + return xxx_messageInfo_VolumeCapability_MountVolume.Size(m) +} +func (m *VolumeCapability_MountVolume) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability_MountVolume.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability_MountVolume proto.InternalMessageInfo + +func (m *VolumeCapability_MountVolume) GetFsType() string { + if m != nil { + return m.FsType + } + return "" +} + +func (m *VolumeCapability_MountVolume) GetMountFlags() []string { + if m != nil { + return m.MountFlags + } + return nil +} + +// Specify how a volume can be accessed. +type VolumeCapability_AccessMode struct { + // This field is REQUIRED. + Mode VolumeCapability_AccessMode_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=csitest.v1.VolumeCapability_AccessMode_Mode" json:"mode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeCapability_AccessMode) Reset() { *m = VolumeCapability_AccessMode{} } +func (m *VolumeCapability_AccessMode) String() string { return proto.CompactTextString(m) } +func (*VolumeCapability_AccessMode) ProtoMessage() {} +func (*VolumeCapability_AccessMode) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{10, 2} +} +func (m *VolumeCapability_AccessMode) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeCapability_AccessMode.Unmarshal(m, b) +} +func (m *VolumeCapability_AccessMode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeCapability_AccessMode.Marshal(b, m, deterministic) +} +func (dst *VolumeCapability_AccessMode) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeCapability_AccessMode.Merge(dst, src) +} +func (m *VolumeCapability_AccessMode) XXX_Size() int { + return xxx_messageInfo_VolumeCapability_AccessMode.Size(m) +} +func (m *VolumeCapability_AccessMode) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeCapability_AccessMode.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeCapability_AccessMode proto.InternalMessageInfo + +func (m *VolumeCapability_AccessMode) GetMode() VolumeCapability_AccessMode_Mode { + if m != nil { + return m.Mode + } + return VolumeCapability_AccessMode_UNKNOWN +} + +// The capacity of the storage space in bytes. To specify an exact size, +// `required_bytes` and `limit_bytes` SHALL be set to the same value. At +// least one of the these fields MUST be specified. +type CapacityRange struct { + // Volume MUST be at least this big. This field is OPTIONAL. + // A value of 0 is equal to an unspecified field value. + // The value of this field MUST NOT be negative. + RequiredBytes int64 `protobuf:"varint,1,opt,name=required_bytes,json=requiredBytes,proto3" json:"required_bytes,omitempty"` + // Volume MUST not be bigger than this. This field is OPTIONAL. + // A value of 0 is equal to an unspecified field value. + // The value of this field MUST NOT be negative. + LimitBytes int64 `protobuf:"varint,2,opt,name=limit_bytes,json=limitBytes,proto3" json:"limit_bytes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CapacityRange) Reset() { *m = CapacityRange{} } +func (m *CapacityRange) String() string { return proto.CompactTextString(m) } +func (*CapacityRange) ProtoMessage() {} +func (*CapacityRange) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{11} +} +func (m *CapacityRange) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CapacityRange.Unmarshal(m, b) +} +func (m *CapacityRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CapacityRange.Marshal(b, m, deterministic) +} +func (dst *CapacityRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_CapacityRange.Merge(dst, src) +} +func (m *CapacityRange) XXX_Size() int { + return xxx_messageInfo_CapacityRange.Size(m) +} +func (m *CapacityRange) XXX_DiscardUnknown() { + xxx_messageInfo_CapacityRange.DiscardUnknown(m) +} + +var xxx_messageInfo_CapacityRange proto.InternalMessageInfo + +func (m *CapacityRange) GetRequiredBytes() int64 { + if m != nil { + return m.RequiredBytes + } + return 0 +} + +func (m *CapacityRange) GetLimitBytes() int64 { + if m != nil { + return m.LimitBytes + } + return 0 +} + +// Information about a specific volume. +type Volume struct { + // The capacity of the volume in bytes. This field is OPTIONAL. If not + // set (value of 0), it indicates that the capacity of the volume is + // unknown (e.g., NFS share). + // The value of this field MUST NOT be negative. + CapacityBytes int64 `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes,proto3" json:"capacity_bytes,omitempty"` + // The identifier for this volume, generated by the plugin. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific volume vs all other volumes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this volume. + // The SP is NOT responsible for global uniqueness of volume_id across + // multiple SPs. + VolumeId string `protobuf:"bytes,2,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // Opaque static properties of the volume. SP MAY use this field to + // ensure subsequent volume validation and publishing calls have + // contextual information. + // The contents of this field SHALL be opaque to a CO. + // The contents of this field SHALL NOT be mutable. + // The contents of this field SHALL be safe for the CO to cache. + // The contents of this field SHOULD NOT contain sensitive + // information. + // The contents of this field SHOULD NOT be used for uniquely + // identifying a volume. The `volume_id` alone SHOULD be sufficient to + // identify the volume. + // A volume uniquely identified by `volume_id` SHALL always report the + // same volume_context. + // This field is OPTIONAL and when present MUST be passed to volume + // validation and publishing calls. + VolumeContext map[string]string `protobuf:"bytes,3,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // If specified, indicates that the volume is not empty and is + // pre-populated with data from the specified source. + // This field is OPTIONAL. + ContentSource *VolumeContentSource `protobuf:"bytes,4,opt,name=content_source,json=contentSource,proto3" json:"content_source,omitempty"` + // Specifies where (regions, zones, racks, etc.) the provisioned + // volume is accessible from. + // A plugin that returns this field MUST also set the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // An SP MAY specify multiple topologies to indicate the volume is + // accessible from multiple locations. + // COs MAY use this information along with the topology information + // returned by NodeGetInfo to ensure that a given volume is accessible + // from a given node when scheduling workloads. + // This field is OPTIONAL. If it is not specified, the CO MAY assume + // the volume is equally accessible from all nodes in the cluster and + // MAY schedule workloads referencing the volume on any available + // node. + // + // Example 1: + // accessible_topology = {"region": "R1", "zone": "Z2"} + // Indicates a volume accessible only from the "region" "R1" and the + // "zone" "Z2". + // + // Example 2: + // accessible_topology = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // Indicates a volume accessible from both "zone" "Z2" and "zone" "Z3" + // in the "region" "R1". + AccessibleTopology []*Topology `protobuf:"bytes,5,rep,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Volume) Reset() { *m = Volume{} } +func (m *Volume) String() string { return proto.CompactTextString(m) } +func (*Volume) ProtoMessage() {} +func (*Volume) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{12} +} +func (m *Volume) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Volume.Unmarshal(m, b) +} +func (m *Volume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Volume.Marshal(b, m, deterministic) +} +func (dst *Volume) XXX_Merge(src proto.Message) { + xxx_messageInfo_Volume.Merge(dst, src) +} +func (m *Volume) XXX_Size() int { + return xxx_messageInfo_Volume.Size(m) +} +func (m *Volume) XXX_DiscardUnknown() { + xxx_messageInfo_Volume.DiscardUnknown(m) +} + +var xxx_messageInfo_Volume proto.InternalMessageInfo + +func (m *Volume) GetCapacityBytes() int64 { + if m != nil { + return m.CapacityBytes + } + return 0 +} + +func (m *Volume) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *Volume) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +func (m *Volume) GetContentSource() *VolumeContentSource { + if m != nil { + return m.ContentSource + } + return nil +} + +func (m *Volume) GetAccessibleTopology() []*Topology { + if m != nil { + return m.AccessibleTopology + } + return nil +} + +type TopologyRequirement struct { + // Specifies the list of topologies the provisioned volume MUST be + // accessible from. + // This field is OPTIONAL. If TopologyRequirement is specified either + // requisite or preferred or both MUST be specified. + // + // If requisite is specified, the provisioned volume MUST be + // accessible from at least one of the requisite topologies. + // + // Given + // x = number of topologies provisioned volume is accessible from + // n = number of requisite topologies + // The CO MUST ensure n >= 1. The SP MUST ensure x >= 1 + // If x==n, then the SP MUST make the provisioned volume available to + // all topologies from the list of requisite topologies. If it is + // unable to do so, the SP MUST fail the CreateVolume call. + // For example, if a volume should be accessible from a single zone, + // and requisite = + // {"region": "R1", "zone": "Z2"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and the "zone" "Z2". + // Similarly, if a volume should be accessible from two zones, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and both "zone" "Z2" and "zone" "Z3". + // + // If xn, then the SP MUST make the provisioned volume available from + // all topologies from the list of requisite topologies and MAY choose + // the remaining x-n unique topologies from the list of all possible + // topologies. If it is unable to do so, the SP MUST fail the + // CreateVolume call. + // For example, if a volume should be accessible from two zones, and + // requisite = + // {"region": "R1", "zone": "Z2"} + // then the provisioned volume MUST be accessible from the "region" + // "R1" and the "zone" "Z2" and the SP may select the second zone + // independently, e.g. "R1/Z4". + Requisite []*Topology `protobuf:"bytes,1,rep,name=requisite,proto3" json:"requisite,omitempty"` + // Specifies the list of topologies the CO would prefer the volume to + // be provisioned in. + // + // This field is OPTIONAL. If TopologyRequirement is specified either + // requisite or preferred or both MUST be specified. + // + // An SP MUST attempt to make the provisioned volume available using + // the preferred topologies in order from first to last. + // + // If requisite is specified, all topologies in preferred list MUST + // also be present in the list of requisite topologies. + // + // If the SP is unable to to make the provisioned volume available + // from any of the preferred topologies, the SP MAY choose a topology + // from the list of requisite topologies. + // If the list of requisite topologies is not specified, then the SP + // MAY choose from the list of all possible topologies. + // If the list of requisite topologies is specified and the SP is + // unable to to make the provisioned volume available from any of the + // requisite topologies it MUST fail the CreateVolume call. + // + // Example 1: + // Given a volume should be accessible from a single zone, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"} + // preferred = + // {"region": "R1", "zone": "Z3"} + // then the the SP SHOULD first attempt to make the provisioned volume + // available from "zone" "Z3" in the "region" "R1" and fall back to + // "zone" "Z2" in the "region" "R1" if that is not possible. + // + // Example 2: + // Given a volume should be accessible from a single zone, and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"}, + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z5"} + // preferred = + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z2"} + // then the the SP SHOULD first attempt to make the provisioned volume + // accessible from "zone" "Z4" in the "region" "R1" and fall back to + // "zone" "Z2" in the "region" "R1" if that is not possible. If that + // is not possible, the SP may choose between either the "zone" + // "Z3" or "Z5" in the "region" "R1". + // + // Example 3: + // Given a volume should be accessible from TWO zones (because an + // opaque parameter in CreateVolumeRequest, for example, specifies + // the volume is accessible from two zones, aka synchronously + // replicated), and + // requisite = + // {"region": "R1", "zone": "Z2"}, + // {"region": "R1", "zone": "Z3"}, + // {"region": "R1", "zone": "Z4"}, + // {"region": "R1", "zone": "Z5"} + // preferred = + // {"region": "R1", "zone": "Z5"}, + // {"region": "R1", "zone": "Z3"} + // then the the SP SHOULD first attempt to make the provisioned volume + // accessible from the combination of the two "zones" "Z5" and "Z3" in + // the "region" "R1". If that's not possible, it should fall back to + // a combination of "Z5" and other possibilities from the list of + // requisite. If that's not possible, it should fall back to a + // combination of "Z3" and other possibilities from the list of + // requisite. If that's not possible, it should fall back to a + // combination of other possibilities from the list of requisite. + Preferred []*Topology `protobuf:"bytes,2,rep,name=preferred,proto3" json:"preferred,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TopologyRequirement) Reset() { *m = TopologyRequirement{} } +func (m *TopologyRequirement) String() string { return proto.CompactTextString(m) } +func (*TopologyRequirement) ProtoMessage() {} +func (*TopologyRequirement) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{13} +} +func (m *TopologyRequirement) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_TopologyRequirement.Unmarshal(m, b) +} +func (m *TopologyRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_TopologyRequirement.Marshal(b, m, deterministic) +} +func (dst *TopologyRequirement) XXX_Merge(src proto.Message) { + xxx_messageInfo_TopologyRequirement.Merge(dst, src) +} +func (m *TopologyRequirement) XXX_Size() int { + return xxx_messageInfo_TopologyRequirement.Size(m) +} +func (m *TopologyRequirement) XXX_DiscardUnknown() { + xxx_messageInfo_TopologyRequirement.DiscardUnknown(m) +} + +var xxx_messageInfo_TopologyRequirement proto.InternalMessageInfo + +func (m *TopologyRequirement) GetRequisite() []*Topology { + if m != nil { + return m.Requisite + } + return nil +} + +func (m *TopologyRequirement) GetPreferred() []*Topology { + if m != nil { + return m.Preferred + } + return nil +} + +// Topology is a map of topological domains to topological segments. +// A topological domain is a sub-division of a cluster, like "region", +// "zone", "rack", etc. +// A topological segment is a specific instance of a topological domain, +// like "zone3", "rack3", etc. +// For example {"com.company/zone": "Z1", "com.company/rack": "R3"} +// Valid keys have two segments: an OPTIONAL prefix and name, separated +// by a slash (/), for example: "com.company.example/zone". +// The key name segment is REQUIRED. The prefix is OPTIONAL. +// The key name MUST be 63 characters or less, begin and end with an +// alphanumeric character ([a-z0-9A-Z]), and contain only dashes (-), +// underscores (_), dots (.), or alphanumerics in between, for example +// "zone". +// The key prefix MUST be 63 characters or less, begin and end with a +// lower-case alphanumeric character ([a-z0-9]), contain only +// dashes (-), dots (.), or lower-case alphanumerics in between, and +// follow domain name notation format +// (https://tools.ietf.org/html/rfc1035#section-2.3.1). +// The key prefix SHOULD include the plugin's host company name and/or +// the plugin name, to minimize the possibility of collisions with keys +// from other plugins. +// If a key prefix is specified, it MUST be identical across all +// topology keys returned by the SP (across all RPCs). +// Keys MUST be case-insensitive. Meaning the keys "Zone" and "zone" +// MUST not both exist. +// Each value (topological segment) MUST contain 1 or more strings. +// Each string MUST be 63 characters or less and begin and end with an +// alphanumeric character with '-', '_', '.', or alphanumerics in +// between. +type Topology struct { + Segments map[string]string `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Topology) Reset() { *m = Topology{} } +func (m *Topology) String() string { return proto.CompactTextString(m) } +func (*Topology) ProtoMessage() {} +func (*Topology) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{14} +} +func (m *Topology) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Topology.Unmarshal(m, b) +} +func (m *Topology) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Topology.Marshal(b, m, deterministic) +} +func (dst *Topology) XXX_Merge(src proto.Message) { + xxx_messageInfo_Topology.Merge(dst, src) +} +func (m *Topology) XXX_Size() int { + return xxx_messageInfo_Topology.Size(m) +} +func (m *Topology) XXX_DiscardUnknown() { + xxx_messageInfo_Topology.DiscardUnknown(m) +} + +var xxx_messageInfo_Topology proto.InternalMessageInfo + +func (m *Topology) GetSegments() map[string]string { + if m != nil { + return m.Segments + } + return nil +} + +type DeleteVolumeRequest struct { + // The ID of the volume to be deprovisioned. + // This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // Secrets required by plugin to complete volume deletion request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteVolumeRequest) Reset() { *m = DeleteVolumeRequest{} } +func (m *DeleteVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteVolumeRequest) ProtoMessage() {} +func (*DeleteVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{15} +} +func (m *DeleteVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteVolumeRequest.Unmarshal(m, b) +} +func (m *DeleteVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *DeleteVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteVolumeRequest.Merge(dst, src) +} +func (m *DeleteVolumeRequest) XXX_Size() int { + return xxx_messageInfo_DeleteVolumeRequest.Size(m) +} +func (m *DeleteVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteVolumeRequest proto.InternalMessageInfo + +func (m *DeleteVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *DeleteVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +type DeleteVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteVolumeResponse) Reset() { *m = DeleteVolumeResponse{} } +func (m *DeleteVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteVolumeResponse) ProtoMessage() {} +func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{16} +} +func (m *DeleteVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteVolumeResponse.Unmarshal(m, b) +} +func (m *DeleteVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *DeleteVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteVolumeResponse.Merge(dst, src) +} +func (m *DeleteVolumeResponse) XXX_Size() int { + return xxx_messageInfo_DeleteVolumeResponse.Size(m) +} +func (m *DeleteVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteVolumeResponse proto.InternalMessageInfo + +type ControllerPublishVolumeRequest struct { + // The ID of the volume to be used on a node. + // This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The ID of the node. This field is REQUIRED. The CO SHALL set this + // field to match the node ID returned by `NodeGetInfo`. + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the published volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability *VolumeCapability `protobuf:"bytes,3,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"` + // Indicates SP MUST publish the volume in readonly mode. + // CO MUST set this field to false if SP does not have the + // PUBLISH_READONLY controller capability. + // This is a REQUIRED field. + Readonly bool `protobuf:"varint,4,opt,name=readonly,proto3" json:"readonly,omitempty"` + // Secrets required by plugin to complete controller publish volume + // request. This field is OPTIONAL. Refer to the + // `Secrets Requirements` section on how to use this field. + Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + VolumeContext map[string]string `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerPublishVolumeRequest) Reset() { *m = ControllerPublishVolumeRequest{} } +func (m *ControllerPublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*ControllerPublishVolumeRequest) ProtoMessage() {} +func (*ControllerPublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{17} +} +func (m *ControllerPublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerPublishVolumeRequest.Unmarshal(m, b) +} +func (m *ControllerPublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerPublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *ControllerPublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerPublishVolumeRequest.Merge(dst, src) +} +func (m *ControllerPublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_ControllerPublishVolumeRequest.Size(m) +} +func (m *ControllerPublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerPublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerPublishVolumeRequest proto.InternalMessageInfo + +func (m *ControllerPublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *ControllerPublishVolumeRequest) GetNodeId() string { + if m != nil { + return m.NodeId + } + return "" +} + +func (m *ControllerPublishVolumeRequest) GetVolumeCapability() *VolumeCapability { + if m != nil { + return m.VolumeCapability + } + return nil +} + +func (m *ControllerPublishVolumeRequest) GetReadonly() bool { + if m != nil { + return m.Readonly + } + return false +} + +func (m *ControllerPublishVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +func (m *ControllerPublishVolumeRequest) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +type ControllerPublishVolumeResponse struct { + // Opaque static publish properties of the volume. SP MAY use this + // field to ensure subsequent `NodeStageVolume` or `NodePublishVolume` + // calls calls have contextual information. + // The contents of this field SHALL be opaque to a CO. + // The contents of this field SHALL NOT be mutable. + // The contents of this field SHALL be safe for the CO to cache. + // The contents of this field SHOULD NOT contain sensitive + // information. + // The contents of this field SHOULD NOT be used for uniquely + // identifying a volume. The `volume_id` alone SHOULD be sufficient to + // identify the volume. + // This field is OPTIONAL and when present MUST be passed to + // subsequent `NodeStageVolume` or `NodePublishVolume` calls + PublishContext map[string]string `protobuf:"bytes,1,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerPublishVolumeResponse) Reset() { *m = ControllerPublishVolumeResponse{} } +func (m *ControllerPublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*ControllerPublishVolumeResponse) ProtoMessage() {} +func (*ControllerPublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{18} +} +func (m *ControllerPublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerPublishVolumeResponse.Unmarshal(m, b) +} +func (m *ControllerPublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerPublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *ControllerPublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerPublishVolumeResponse.Merge(dst, src) +} +func (m *ControllerPublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_ControllerPublishVolumeResponse.Size(m) +} +func (m *ControllerPublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerPublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerPublishVolumeResponse proto.InternalMessageInfo + +func (m *ControllerPublishVolumeResponse) GetPublishContext() map[string]string { + if m != nil { + return m.PublishContext + } + return nil +} + +type ControllerUnpublishVolumeRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The ID of the node. This field is OPTIONAL. The CO SHOULD set this + // field to match the node ID returned by `NodeGetInfo` or leave it + // unset. If the value is set, the SP MUST unpublish the volume from + // the specified node. If the value is unset, the SP MUST unpublish + // the volume from all nodes it is published to. + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + // Secrets required by plugin to complete controller unpublish volume + // request. This SHOULD be the same secrets passed to the + // ControllerPublishVolume call for the specified volume. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerUnpublishVolumeRequest) Reset() { *m = ControllerUnpublishVolumeRequest{} } +func (m *ControllerUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*ControllerUnpublishVolumeRequest) ProtoMessage() {} +func (*ControllerUnpublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{19} +} +func (m *ControllerUnpublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerUnpublishVolumeRequest.Unmarshal(m, b) +} +func (m *ControllerUnpublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerUnpublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *ControllerUnpublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerUnpublishVolumeRequest.Merge(dst, src) +} +func (m *ControllerUnpublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_ControllerUnpublishVolumeRequest.Size(m) +} +func (m *ControllerUnpublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerUnpublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerUnpublishVolumeRequest proto.InternalMessageInfo + +func (m *ControllerUnpublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *ControllerUnpublishVolumeRequest) GetNodeId() string { + if m != nil { + return m.NodeId + } + return "" +} + +func (m *ControllerUnpublishVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +type ControllerUnpublishVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerUnpublishVolumeResponse) Reset() { *m = ControllerUnpublishVolumeResponse{} } +func (m *ControllerUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*ControllerUnpublishVolumeResponse) ProtoMessage() {} +func (*ControllerUnpublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{20} +} +func (m *ControllerUnpublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerUnpublishVolumeResponse.Unmarshal(m, b) +} +func (m *ControllerUnpublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerUnpublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *ControllerUnpublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerUnpublishVolumeResponse.Merge(dst, src) +} +func (m *ControllerUnpublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_ControllerUnpublishVolumeResponse.Size(m) +} +func (m *ControllerUnpublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerUnpublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerUnpublishVolumeResponse proto.InternalMessageInfo + +type ValidateVolumeCapabilitiesRequest struct { + // The ID of the volume to check. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + VolumeContext map[string]string `protobuf:"bytes,2,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The capabilities that the CO wants to check for the volume. This + // call SHALL return "confirmed" only if all the volume capabilities + // specified below are supported. This field is REQUIRED. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,3,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"` + // See CreateVolumeRequest.parameters. + // This field is OPTIONAL. + Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Secrets required by plugin to complete volume validation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValidateVolumeCapabilitiesRequest) Reset() { *m = ValidateVolumeCapabilitiesRequest{} } +func (m *ValidateVolumeCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*ValidateVolumeCapabilitiesRequest) ProtoMessage() {} +func (*ValidateVolumeCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{21} +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Unmarshal(m, b) +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *ValidateVolumeCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Merge(dst, src) +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_ValidateVolumeCapabilitiesRequest.Size(m) +} +func (m *ValidateVolumeCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ValidateVolumeCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidateVolumeCapabilitiesRequest proto.InternalMessageInfo + +func (m *ValidateVolumeCapabilitiesRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *ValidateVolumeCapabilitiesRequest) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +func (m *ValidateVolumeCapabilitiesRequest) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *ValidateVolumeCapabilitiesRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *ValidateVolumeCapabilitiesRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +type ValidateVolumeCapabilitiesResponse struct { + // Confirmed indicates to the CO the set of capabilities that the + // plugin has validated. This field SHALL only be set to a non-empty + // value for successful validation responses. + // For successful validation responses, the CO SHALL compare the + // fields of this message to the originally requested capabilities in + // order to guard against an older plugin reporting "valid" for newer + // capability fields that it does not yet understand. + // This field is OPTIONAL. + Confirmed *ValidateVolumeCapabilitiesResponse_Confirmed `protobuf:"bytes,1,opt,name=confirmed,proto3" json:"confirmed,omitempty"` + // Message to the CO if `confirmed` above is empty. This field is + // OPTIONAL. + // An empty string is equal to an unspecified field value. + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValidateVolumeCapabilitiesResponse) Reset() { *m = ValidateVolumeCapabilitiesResponse{} } +func (m *ValidateVolumeCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*ValidateVolumeCapabilitiesResponse) ProtoMessage() {} +func (*ValidateVolumeCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{22} +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Unmarshal(m, b) +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *ValidateVolumeCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Merge(dst, src) +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse.Size(m) +} +func (m *ValidateVolumeCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ValidateVolumeCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidateVolumeCapabilitiesResponse proto.InternalMessageInfo + +func (m *ValidateVolumeCapabilitiesResponse) GetConfirmed() *ValidateVolumeCapabilitiesResponse_Confirmed { + if m != nil { + return m.Confirmed + } + return nil +} + +func (m *ValidateVolumeCapabilitiesResponse) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +type ValidateVolumeCapabilitiesResponse_Confirmed struct { + // Volume context validated by the plugin. + // This field is OPTIONAL. + VolumeContext map[string]string `protobuf:"bytes,1,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Volume capabilities supported by the plugin. + // This field is REQUIRED. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,2,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"` + // The volume creation parameters validated by the plugin. + // This field is OPTIONAL. + Parameters map[string]string `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) Reset() { + *m = ValidateVolumeCapabilitiesResponse_Confirmed{} +} +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) String() string { + return proto.CompactTextString(m) +} +func (*ValidateVolumeCapabilitiesResponse_Confirmed) ProtoMessage() {} +func (*ValidateVolumeCapabilitiesResponse_Confirmed) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{22, 0} +} +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.Unmarshal(m, b) +} +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.Marshal(b, m, deterministic) +} +func (dst *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.Merge(dst, src) +} +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_Size() int { + return xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.Size(m) +} +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) XXX_DiscardUnknown() { + xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidateVolumeCapabilitiesResponse_Confirmed proto.InternalMessageInfo + +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *ValidateVolumeCapabilitiesResponse_Confirmed) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +type ListVolumesRequest struct { + // If specified (non-zero value), the Plugin MUST NOT return more + // entries than this number in the response. If the actual number of + // entries is more than this number, the Plugin MUST set `next_token` + // in the response which can be used to get the next page of entries + // in the subsequent `ListVolumes` call. This field is OPTIONAL. If + // not specified (zero value), it means there is no restriction on the + // number of entries that can be returned. + // The value of this field MUST NOT be negative. + MaxEntries int32 `protobuf:"varint,1,opt,name=max_entries,json=maxEntries,proto3" json:"max_entries,omitempty"` + // A token to specify where to start paginating. Set this field to + // `next_token` returned by a previous `ListVolumes` call to get the + // next page of entries. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + StartingToken string `protobuf:"bytes,2,opt,name=starting_token,json=startingToken,proto3" json:"starting_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListVolumesRequest) Reset() { *m = ListVolumesRequest{} } +func (m *ListVolumesRequest) String() string { return proto.CompactTextString(m) } +func (*ListVolumesRequest) ProtoMessage() {} +func (*ListVolumesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{23} +} +func (m *ListVolumesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListVolumesRequest.Unmarshal(m, b) +} +func (m *ListVolumesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListVolumesRequest.Marshal(b, m, deterministic) +} +func (dst *ListVolumesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListVolumesRequest.Merge(dst, src) +} +func (m *ListVolumesRequest) XXX_Size() int { + return xxx_messageInfo_ListVolumesRequest.Size(m) +} +func (m *ListVolumesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListVolumesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListVolumesRequest proto.InternalMessageInfo + +func (m *ListVolumesRequest) GetMaxEntries() int32 { + if m != nil { + return m.MaxEntries + } + return 0 +} + +func (m *ListVolumesRequest) GetStartingToken() string { + if m != nil { + return m.StartingToken + } + return "" +} + +type ListVolumesResponse struct { + Entries []*ListVolumesResponse_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + // This token allows you to get the next page of entries for + // `ListVolumes` request. If the number of entries is larger than + // `max_entries`, use the `next_token` as a value for the + // `starting_token` field in the next `ListVolumes` request. This + // field is OPTIONAL. + // An empty string is equal to an unspecified field value. + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListVolumesResponse) Reset() { *m = ListVolumesResponse{} } +func (m *ListVolumesResponse) String() string { return proto.CompactTextString(m) } +func (*ListVolumesResponse) ProtoMessage() {} +func (*ListVolumesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{24} +} +func (m *ListVolumesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListVolumesResponse.Unmarshal(m, b) +} +func (m *ListVolumesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListVolumesResponse.Marshal(b, m, deterministic) +} +func (dst *ListVolumesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListVolumesResponse.Merge(dst, src) +} +func (m *ListVolumesResponse) XXX_Size() int { + return xxx_messageInfo_ListVolumesResponse.Size(m) +} +func (m *ListVolumesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ListVolumesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ListVolumesResponse proto.InternalMessageInfo + +func (m *ListVolumesResponse) GetEntries() []*ListVolumesResponse_Entry { + if m != nil { + return m.Entries + } + return nil +} + +func (m *ListVolumesResponse) GetNextToken() string { + if m != nil { + return m.NextToken + } + return "" +} + +type ListVolumesResponse_Entry struct { + Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListVolumesResponse_Entry) Reset() { *m = ListVolumesResponse_Entry{} } +func (m *ListVolumesResponse_Entry) String() string { return proto.CompactTextString(m) } +func (*ListVolumesResponse_Entry) ProtoMessage() {} +func (*ListVolumesResponse_Entry) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{24, 0} +} +func (m *ListVolumesResponse_Entry) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListVolumesResponse_Entry.Unmarshal(m, b) +} +func (m *ListVolumesResponse_Entry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListVolumesResponse_Entry.Marshal(b, m, deterministic) +} +func (dst *ListVolumesResponse_Entry) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListVolumesResponse_Entry.Merge(dst, src) +} +func (m *ListVolumesResponse_Entry) XXX_Size() int { + return xxx_messageInfo_ListVolumesResponse_Entry.Size(m) +} +func (m *ListVolumesResponse_Entry) XXX_DiscardUnknown() { + xxx_messageInfo_ListVolumesResponse_Entry.DiscardUnknown(m) +} + +var xxx_messageInfo_ListVolumesResponse_Entry proto.InternalMessageInfo + +func (m *ListVolumesResponse_Entry) GetVolume() *Volume { + if m != nil { + return m.Volume + } + return nil +} + +type GetCapacityRequest struct { + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes that satisfy ALL of the + // specified `volume_capabilities`. These are the same + // `volume_capabilities` the CO will use in `CreateVolumeRequest`. + // This field is OPTIONAL. + VolumeCapabilities []*VolumeCapability `protobuf:"bytes,1,rep,name=volume_capabilities,json=volumeCapabilities,proto3" json:"volume_capabilities,omitempty"` + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes with the given Plugin + // specific `parameters`. These are the same `parameters` the CO will + // use in `CreateVolumeRequest`. This field is OPTIONAL. + Parameters map[string]string `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // If specified, the Plugin SHALL report the capacity of the storage + // that can be used to provision volumes that in the specified + // `accessible_topology`. This is the same as the + // `accessible_topology` the CO returns in a `CreateVolumeResponse`. + // This field is OPTIONAL. This field SHALL NOT be set unless the + // plugin advertises the VOLUME_ACCESSIBILITY_CONSTRAINTS capability. + AccessibleTopology *Topology `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetCapacityRequest) Reset() { *m = GetCapacityRequest{} } +func (m *GetCapacityRequest) String() string { return proto.CompactTextString(m) } +func (*GetCapacityRequest) ProtoMessage() {} +func (*GetCapacityRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{25} +} +func (m *GetCapacityRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetCapacityRequest.Unmarshal(m, b) +} +func (m *GetCapacityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetCapacityRequest.Marshal(b, m, deterministic) +} +func (dst *GetCapacityRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetCapacityRequest.Merge(dst, src) +} +func (m *GetCapacityRequest) XXX_Size() int { + return xxx_messageInfo_GetCapacityRequest.Size(m) +} +func (m *GetCapacityRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetCapacityRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetCapacityRequest proto.InternalMessageInfo + +func (m *GetCapacityRequest) GetVolumeCapabilities() []*VolumeCapability { + if m != nil { + return m.VolumeCapabilities + } + return nil +} + +func (m *GetCapacityRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *GetCapacityRequest) GetAccessibleTopology() *Topology { + if m != nil { + return m.AccessibleTopology + } + return nil +} + +type GetCapacityResponse struct { + // The available capacity, in bytes, of the storage that can be used + // to provision volumes. If `volume_capabilities` or `parameters` is + // specified in the request, the Plugin SHALL take those into + // consideration when calculating the available capacity of the + // storage. This field is REQUIRED. + // The value of this field MUST NOT be negative. + AvailableCapacity int64 `protobuf:"varint,1,opt,name=available_capacity,json=availableCapacity,proto3" json:"available_capacity,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetCapacityResponse) Reset() { *m = GetCapacityResponse{} } +func (m *GetCapacityResponse) String() string { return proto.CompactTextString(m) } +func (*GetCapacityResponse) ProtoMessage() {} +func (*GetCapacityResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{26} +} +func (m *GetCapacityResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetCapacityResponse.Unmarshal(m, b) +} +func (m *GetCapacityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetCapacityResponse.Marshal(b, m, deterministic) +} +func (dst *GetCapacityResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetCapacityResponse.Merge(dst, src) +} +func (m *GetCapacityResponse) XXX_Size() int { + return xxx_messageInfo_GetCapacityResponse.Size(m) +} +func (m *GetCapacityResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetCapacityResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetCapacityResponse proto.InternalMessageInfo + +func (m *GetCapacityResponse) GetAvailableCapacity() int64 { + if m != nil { + return m.AvailableCapacity + } + return 0 +} + +type ControllerGetCapabilitiesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerGetCapabilitiesRequest) Reset() { *m = ControllerGetCapabilitiesRequest{} } +func (m *ControllerGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*ControllerGetCapabilitiesRequest) ProtoMessage() {} +func (*ControllerGetCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{27} +} +func (m *ControllerGetCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerGetCapabilitiesRequest.Unmarshal(m, b) +} +func (m *ControllerGetCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerGetCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *ControllerGetCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerGetCapabilitiesRequest.Merge(dst, src) +} +func (m *ControllerGetCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_ControllerGetCapabilitiesRequest.Size(m) +} +func (m *ControllerGetCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerGetCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerGetCapabilitiesRequest proto.InternalMessageInfo + +type ControllerGetCapabilitiesResponse struct { + // All the capabilities that the controller service supports. This + // field is OPTIONAL. + Capabilities []*ControllerServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerGetCapabilitiesResponse) Reset() { *m = ControllerGetCapabilitiesResponse{} } +func (m *ControllerGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*ControllerGetCapabilitiesResponse) ProtoMessage() {} +func (*ControllerGetCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{28} +} +func (m *ControllerGetCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerGetCapabilitiesResponse.Unmarshal(m, b) +} +func (m *ControllerGetCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerGetCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *ControllerGetCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerGetCapabilitiesResponse.Merge(dst, src) +} +func (m *ControllerGetCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_ControllerGetCapabilitiesResponse.Size(m) +} +func (m *ControllerGetCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerGetCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerGetCapabilitiesResponse proto.InternalMessageInfo + +func (m *ControllerGetCapabilitiesResponse) GetCapabilities() []*ControllerServiceCapability { + if m != nil { + return m.Capabilities + } + return nil +} + +// Specifies a capability of the controller service. +type ControllerServiceCapability struct { + // Types that are valid to be assigned to Type: + // *ControllerServiceCapability_Rpc + Type isControllerServiceCapability_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerServiceCapability) Reset() { *m = ControllerServiceCapability{} } +func (m *ControllerServiceCapability) String() string { return proto.CompactTextString(m) } +func (*ControllerServiceCapability) ProtoMessage() {} +func (*ControllerServiceCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{29} +} +func (m *ControllerServiceCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerServiceCapability.Unmarshal(m, b) +} +func (m *ControllerServiceCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerServiceCapability.Marshal(b, m, deterministic) +} +func (dst *ControllerServiceCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerServiceCapability.Merge(dst, src) +} +func (m *ControllerServiceCapability) XXX_Size() int { + return xxx_messageInfo_ControllerServiceCapability.Size(m) +} +func (m *ControllerServiceCapability) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerServiceCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerServiceCapability proto.InternalMessageInfo + +type isControllerServiceCapability_Type interface { + isControllerServiceCapability_Type() +} + +type ControllerServiceCapability_Rpc struct { + Rpc *ControllerServiceCapability_RPC `protobuf:"bytes,1,opt,name=rpc,proto3,oneof"` +} + +func (*ControllerServiceCapability_Rpc) isControllerServiceCapability_Type() {} + +func (m *ControllerServiceCapability) GetType() isControllerServiceCapability_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *ControllerServiceCapability) GetRpc() *ControllerServiceCapability_RPC { + if x, ok := m.GetType().(*ControllerServiceCapability_Rpc); ok { + return x.Rpc + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ControllerServiceCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ControllerServiceCapability_OneofMarshaler, _ControllerServiceCapability_OneofUnmarshaler, _ControllerServiceCapability_OneofSizer, []interface{}{ + (*ControllerServiceCapability_Rpc)(nil), + } +} + +func _ControllerServiceCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ControllerServiceCapability) + // type + switch x := m.Type.(type) { + case *ControllerServiceCapability_Rpc: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Rpc); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ControllerServiceCapability.Type has unexpected type %T", x) + } + return nil +} + +func _ControllerServiceCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ControllerServiceCapability) + switch tag { + case 1: // type.rpc + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ControllerServiceCapability_RPC) + err := b.DecodeMessage(msg) + m.Type = &ControllerServiceCapability_Rpc{msg} + return true, err + default: + return false, nil + } +} + +func _ControllerServiceCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ControllerServiceCapability) + // type + switch x := m.Type.(type) { + case *ControllerServiceCapability_Rpc: + s := proto.Size(x.Rpc) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type ControllerServiceCapability_RPC struct { + Type ControllerServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csitest.v1.ControllerServiceCapability_RPC_Type" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ControllerServiceCapability_RPC) Reset() { *m = ControllerServiceCapability_RPC{} } +func (m *ControllerServiceCapability_RPC) String() string { return proto.CompactTextString(m) } +func (*ControllerServiceCapability_RPC) ProtoMessage() {} +func (*ControllerServiceCapability_RPC) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{29, 0} +} +func (m *ControllerServiceCapability_RPC) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ControllerServiceCapability_RPC.Unmarshal(m, b) +} +func (m *ControllerServiceCapability_RPC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ControllerServiceCapability_RPC.Marshal(b, m, deterministic) +} +func (dst *ControllerServiceCapability_RPC) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerServiceCapability_RPC.Merge(dst, src) +} +func (m *ControllerServiceCapability_RPC) XXX_Size() int { + return xxx_messageInfo_ControllerServiceCapability_RPC.Size(m) +} +func (m *ControllerServiceCapability_RPC) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerServiceCapability_RPC.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerServiceCapability_RPC proto.InternalMessageInfo + +func (m *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_RPC_Type { + if m != nil { + return m.Type + } + return ControllerServiceCapability_RPC_UNKNOWN +} + +type CreateSnapshotRequest struct { + // The ID of the source volume to be snapshotted. + // This field is REQUIRED. + SourceVolumeId string `protobuf:"bytes,1,opt,name=source_volume_id,json=sourceVolumeId,proto3" json:"source_volume_id,omitempty"` + // The suggested name for the snapshot. This field is REQUIRED for + // idempotency. + // Any Unicode string that conforms to the length limit is allowed + // except those containing the following banned characters: + // U+0000-U+0008, U+000B, U+000C, U+000E-U+001F, U+007F-U+009F. + // (These are control characters other than commonly used whitespace.) + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Secrets required by plugin to complete snapshot creation request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Plugin specific parameters passed in as opaque key-value pairs. + // This field is OPTIONAL. The Plugin is responsible for parsing and + // validating these parameters. COs will treat these as opaque. + // Use cases for opaque parameters: + // - Specify a policy to automatically clean up the snapshot. + // - Specify an expiration date for the snapshot. + // - Specify whether the snapshot is readonly or read/write. + // - Specify if the snapshot should be replicated to some place. + // - Specify primary or secondary for replication systems that + // support snapshotting only on primary. + Parameters map[string]string `protobuf:"bytes,4,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateSnapshotRequest) Reset() { *m = CreateSnapshotRequest{} } +func (m *CreateSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*CreateSnapshotRequest) ProtoMessage() {} +func (*CreateSnapshotRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{30} +} +func (m *CreateSnapshotRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateSnapshotRequest.Unmarshal(m, b) +} +func (m *CreateSnapshotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateSnapshotRequest.Marshal(b, m, deterministic) +} +func (dst *CreateSnapshotRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateSnapshotRequest.Merge(dst, src) +} +func (m *CreateSnapshotRequest) XXX_Size() int { + return xxx_messageInfo_CreateSnapshotRequest.Size(m) +} +func (m *CreateSnapshotRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CreateSnapshotRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateSnapshotRequest proto.InternalMessageInfo + +func (m *CreateSnapshotRequest) GetSourceVolumeId() string { + if m != nil { + return m.SourceVolumeId + } + return "" +} + +func (m *CreateSnapshotRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateSnapshotRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +func (m *CreateSnapshotRequest) GetParameters() map[string]string { + if m != nil { + return m.Parameters + } + return nil +} + +type CreateSnapshotResponse struct { + // Contains all attributes of the newly created snapshot that are + // relevant to the CO along with information required by the Plugin + // to uniquely identify the snapshot. This field is REQUIRED. + Snapshot *Snapshot `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateSnapshotResponse) Reset() { *m = CreateSnapshotResponse{} } +func (m *CreateSnapshotResponse) String() string { return proto.CompactTextString(m) } +func (*CreateSnapshotResponse) ProtoMessage() {} +func (*CreateSnapshotResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{31} +} +func (m *CreateSnapshotResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CreateSnapshotResponse.Unmarshal(m, b) +} +func (m *CreateSnapshotResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CreateSnapshotResponse.Marshal(b, m, deterministic) +} +func (dst *CreateSnapshotResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateSnapshotResponse.Merge(dst, src) +} +func (m *CreateSnapshotResponse) XXX_Size() int { + return xxx_messageInfo_CreateSnapshotResponse.Size(m) +} +func (m *CreateSnapshotResponse) XXX_DiscardUnknown() { + xxx_messageInfo_CreateSnapshotResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateSnapshotResponse proto.InternalMessageInfo + +func (m *CreateSnapshotResponse) GetSnapshot() *Snapshot { + if m != nil { + return m.Snapshot + } + return nil +} + +// Information about a specific snapshot. +type Snapshot struct { + // This is the complete size of the snapshot in bytes. The purpose of + // this field is to give CO guidance on how much space is needed to + // create a volume from this snapshot. The size of the volume MUST NOT + // be less than the size of the source snapshot. This field is + // OPTIONAL. If this field is not set, it indicates that this size is + // unknown. The value of this field MUST NOT be negative and a size of + // zero means it is unspecified. + SizeBytes int64 `protobuf:"varint,1,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"` + // The identifier for this snapshot, generated by the plugin. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific snapshot vs all other snapshots supported by this + // plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this snapshot. + // The SP is NOT responsible for global uniqueness of snapshot_id + // across multiple SPs. + SnapshotId string `protobuf:"bytes,2,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` + // Identity information for the source volume. Note that creating a + // snapshot from a snapshot is not supported here so the source has to + // be a volume. This field is REQUIRED. + SourceVolumeId string `protobuf:"bytes,3,opt,name=source_volume_id,json=sourceVolumeId,proto3" json:"source_volume_id,omitempty"` + // Timestamp when the point-in-time snapshot is taken on the storage + // system. This field is REQUIRED. + CreationTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"` + // Indicates if a snapshot is ready to use as a + // `volume_content_source` in a `CreateVolumeRequest`. The default + // value is false. This field is REQUIRED. + ReadyToUse bool `protobuf:"varint,5,opt,name=ready_to_use,json=readyToUse,proto3" json:"ready_to_use,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Snapshot) Reset() { *m = Snapshot{} } +func (m *Snapshot) String() string { return proto.CompactTextString(m) } +func (*Snapshot) ProtoMessage() {} +func (*Snapshot) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{32} +} +func (m *Snapshot) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Snapshot.Unmarshal(m, b) +} +func (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Snapshot.Marshal(b, m, deterministic) +} +func (dst *Snapshot) XXX_Merge(src proto.Message) { + xxx_messageInfo_Snapshot.Merge(dst, src) +} +func (m *Snapshot) XXX_Size() int { + return xxx_messageInfo_Snapshot.Size(m) +} +func (m *Snapshot) XXX_DiscardUnknown() { + xxx_messageInfo_Snapshot.DiscardUnknown(m) +} + +var xxx_messageInfo_Snapshot proto.InternalMessageInfo + +func (m *Snapshot) GetSizeBytes() int64 { + if m != nil { + return m.SizeBytes + } + return 0 +} + +func (m *Snapshot) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +func (m *Snapshot) GetSourceVolumeId() string { + if m != nil { + return m.SourceVolumeId + } + return "" +} + +func (m *Snapshot) GetCreationTime() *timestamp.Timestamp { + if m != nil { + return m.CreationTime + } + return nil +} + +func (m *Snapshot) GetReadyToUse() bool { + if m != nil { + return m.ReadyToUse + } + return false +} + +type DeleteSnapshotRequest struct { + // The ID of the snapshot to be deleted. + // This field is REQUIRED. + SnapshotId string `protobuf:"bytes,1,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` + // Secrets required by plugin to complete snapshot deletion request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteSnapshotRequest) Reset() { *m = DeleteSnapshotRequest{} } +func (m *DeleteSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSnapshotRequest) ProtoMessage() {} +func (*DeleteSnapshotRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{33} +} +func (m *DeleteSnapshotRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteSnapshotRequest.Unmarshal(m, b) +} +func (m *DeleteSnapshotRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteSnapshotRequest.Marshal(b, m, deterministic) +} +func (dst *DeleteSnapshotRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteSnapshotRequest.Merge(dst, src) +} +func (m *DeleteSnapshotRequest) XXX_Size() int { + return xxx_messageInfo_DeleteSnapshotRequest.Size(m) +} +func (m *DeleteSnapshotRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteSnapshotRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteSnapshotRequest proto.InternalMessageInfo + +func (m *DeleteSnapshotRequest) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +func (m *DeleteSnapshotRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +type DeleteSnapshotResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteSnapshotResponse) Reset() { *m = DeleteSnapshotResponse{} } +func (m *DeleteSnapshotResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteSnapshotResponse) ProtoMessage() {} +func (*DeleteSnapshotResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{34} +} +func (m *DeleteSnapshotResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteSnapshotResponse.Unmarshal(m, b) +} +func (m *DeleteSnapshotResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteSnapshotResponse.Marshal(b, m, deterministic) +} +func (dst *DeleteSnapshotResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteSnapshotResponse.Merge(dst, src) +} +func (m *DeleteSnapshotResponse) XXX_Size() int { + return xxx_messageInfo_DeleteSnapshotResponse.Size(m) +} +func (m *DeleteSnapshotResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteSnapshotResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteSnapshotResponse proto.InternalMessageInfo + +// List all snapshots on the storage system regardless of how they were +// created. +type ListSnapshotsRequest struct { + // If specified (non-zero value), the Plugin MUST NOT return more + // entries than this number in the response. If the actual number of + // entries is more than this number, the Plugin MUST set `next_token` + // in the response which can be used to get the next page of entries + // in the subsequent `ListSnapshots` call. This field is OPTIONAL. If + // not specified (zero value), it means there is no restriction on the + // number of entries that can be returned. + // The value of this field MUST NOT be negative. + MaxEntries int32 `protobuf:"varint,1,opt,name=max_entries,json=maxEntries,proto3" json:"max_entries,omitempty"` + // A token to specify where to start paginating. Set this field to + // `next_token` returned by a previous `ListSnapshots` call to get the + // next page of entries. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + StartingToken string `protobuf:"bytes,2,opt,name=starting_token,json=startingToken,proto3" json:"starting_token,omitempty"` + // Identity information for the source volume. This field is OPTIONAL. + // It can be used to list snapshots by volume. + SourceVolumeId string `protobuf:"bytes,3,opt,name=source_volume_id,json=sourceVolumeId,proto3" json:"source_volume_id,omitempty"` + // Identity information for a specific snapshot. This field is + // OPTIONAL. It can be used to list only a specific snapshot. + // ListSnapshots will return with current snapshot information + // and will not block if the snapshot is being processed after + // it is cut. + SnapshotId string `protobuf:"bytes,4,opt,name=snapshot_id,json=snapshotId,proto3" json:"snapshot_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSnapshotsRequest) Reset() { *m = ListSnapshotsRequest{} } +func (m *ListSnapshotsRequest) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsRequest) ProtoMessage() {} +func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{35} +} +func (m *ListSnapshotsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSnapshotsRequest.Unmarshal(m, b) +} +func (m *ListSnapshotsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSnapshotsRequest.Marshal(b, m, deterministic) +} +func (dst *ListSnapshotsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSnapshotsRequest.Merge(dst, src) +} +func (m *ListSnapshotsRequest) XXX_Size() int { + return xxx_messageInfo_ListSnapshotsRequest.Size(m) +} +func (m *ListSnapshotsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListSnapshotsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSnapshotsRequest proto.InternalMessageInfo + +func (m *ListSnapshotsRequest) GetMaxEntries() int32 { + if m != nil { + return m.MaxEntries + } + return 0 +} + +func (m *ListSnapshotsRequest) GetStartingToken() string { + if m != nil { + return m.StartingToken + } + return "" +} + +func (m *ListSnapshotsRequest) GetSourceVolumeId() string { + if m != nil { + return m.SourceVolumeId + } + return "" +} + +func (m *ListSnapshotsRequest) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +type ListSnapshotsResponse struct { + Entries []*ListSnapshotsResponse_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + // This token allows you to get the next page of entries for + // `ListSnapshots` request. If the number of entries is larger than + // `max_entries`, use the `next_token` as a value for the + // `starting_token` field in the next `ListSnapshots` request. This + // field is OPTIONAL. + // An empty string is equal to an unspecified field value. + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSnapshotsResponse) Reset() { *m = ListSnapshotsResponse{} } +func (m *ListSnapshotsResponse) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsResponse) ProtoMessage() {} +func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{36} +} +func (m *ListSnapshotsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSnapshotsResponse.Unmarshal(m, b) +} +func (m *ListSnapshotsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSnapshotsResponse.Marshal(b, m, deterministic) +} +func (dst *ListSnapshotsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSnapshotsResponse.Merge(dst, src) +} +func (m *ListSnapshotsResponse) XXX_Size() int { + return xxx_messageInfo_ListSnapshotsResponse.Size(m) +} +func (m *ListSnapshotsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ListSnapshotsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSnapshotsResponse proto.InternalMessageInfo + +func (m *ListSnapshotsResponse) GetEntries() []*ListSnapshotsResponse_Entry { + if m != nil { + return m.Entries + } + return nil +} + +func (m *ListSnapshotsResponse) GetNextToken() string { + if m != nil { + return m.NextToken + } + return "" +} + +type ListSnapshotsResponse_Entry struct { + Snapshot *Snapshot `protobuf:"bytes,1,opt,name=snapshot,proto3" json:"snapshot,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSnapshotsResponse_Entry) Reset() { *m = ListSnapshotsResponse_Entry{} } +func (m *ListSnapshotsResponse_Entry) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsResponse_Entry) ProtoMessage() {} +func (*ListSnapshotsResponse_Entry) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{36, 0} +} +func (m *ListSnapshotsResponse_Entry) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSnapshotsResponse_Entry.Unmarshal(m, b) +} +func (m *ListSnapshotsResponse_Entry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSnapshotsResponse_Entry.Marshal(b, m, deterministic) +} +func (dst *ListSnapshotsResponse_Entry) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSnapshotsResponse_Entry.Merge(dst, src) +} +func (m *ListSnapshotsResponse_Entry) XXX_Size() int { + return xxx_messageInfo_ListSnapshotsResponse_Entry.Size(m) +} +func (m *ListSnapshotsResponse_Entry) XXX_DiscardUnknown() { + xxx_messageInfo_ListSnapshotsResponse_Entry.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSnapshotsResponse_Entry proto.InternalMessageInfo + +func (m *ListSnapshotsResponse_Entry) GetSnapshot() *Snapshot { + if m != nil { + return m.Snapshot + } + return nil +} + +type NodeStageVolumeRequest struct { + // The ID of the volume to publish. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The CO SHALL set this field to the value returned by + // `ControllerPublishVolume` if the corresponding Controller Plugin + // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be + // left unset if the corresponding Controller Plugin does not have + // this capability. This is an OPTIONAL field. + PublishContext map[string]string `protobuf:"bytes,2,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The path to which the volume MAY be staged. It MUST be an + // absolute path in the root filesystem of the process serving this + // request, and MUST be a directory. The CO SHALL ensure that there + // is only one `staging_target_path` per volume. The CO SHALL ensure + // that the path is directory and that the process serving the + // request has `read` and `write` permission to that directory. The + // CO SHALL be responsible for creating the directory if it does not + // exist. + // This is a REQUIRED field. + StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"` + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the staged volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability *VolumeCapability `protobuf:"bytes,4,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"` + // Secrets required by plugin to complete node stage volume request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + VolumeContext map[string]string `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeStageVolumeRequest) Reset() { *m = NodeStageVolumeRequest{} } +func (m *NodeStageVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodeStageVolumeRequest) ProtoMessage() {} +func (*NodeStageVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{37} +} +func (m *NodeStageVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeStageVolumeRequest.Unmarshal(m, b) +} +func (m *NodeStageVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeStageVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodeStageVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeStageVolumeRequest.Merge(dst, src) +} +func (m *NodeStageVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodeStageVolumeRequest.Size(m) +} +func (m *NodeStageVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeStageVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeStageVolumeRequest proto.InternalMessageInfo + +func (m *NodeStageVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeStageVolumeRequest) GetPublishContext() map[string]string { + if m != nil { + return m.PublishContext + } + return nil +} + +func (m *NodeStageVolumeRequest) GetStagingTargetPath() string { + if m != nil { + return m.StagingTargetPath + } + return "" +} + +func (m *NodeStageVolumeRequest) GetVolumeCapability() *VolumeCapability { + if m != nil { + return m.VolumeCapability + } + return nil +} + +func (m *NodeStageVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +func (m *NodeStageVolumeRequest) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +type NodeStageVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeStageVolumeResponse) Reset() { *m = NodeStageVolumeResponse{} } +func (m *NodeStageVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodeStageVolumeResponse) ProtoMessage() {} +func (*NodeStageVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{38} +} +func (m *NodeStageVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeStageVolumeResponse.Unmarshal(m, b) +} +func (m *NodeStageVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeStageVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodeStageVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeStageVolumeResponse.Merge(dst, src) +} +func (m *NodeStageVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodeStageVolumeResponse.Size(m) +} +func (m *NodeStageVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeStageVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeStageVolumeResponse proto.InternalMessageInfo + +type NodeUnstageVolumeRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The path at which the volume was staged. It MUST be an absolute + // path in the root filesystem of the process serving this request. + // This is a REQUIRED field. + StagingTargetPath string `protobuf:"bytes,2,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnstageVolumeRequest) Reset() { *m = NodeUnstageVolumeRequest{} } +func (m *NodeUnstageVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodeUnstageVolumeRequest) ProtoMessage() {} +func (*NodeUnstageVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{39} +} +func (m *NodeUnstageVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnstageVolumeRequest.Unmarshal(m, b) +} +func (m *NodeUnstageVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnstageVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodeUnstageVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnstageVolumeRequest.Merge(dst, src) +} +func (m *NodeUnstageVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodeUnstageVolumeRequest.Size(m) +} +func (m *NodeUnstageVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnstageVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnstageVolumeRequest proto.InternalMessageInfo + +func (m *NodeUnstageVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeUnstageVolumeRequest) GetStagingTargetPath() string { + if m != nil { + return m.StagingTargetPath + } + return "" +} + +type NodeUnstageVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnstageVolumeResponse) Reset() { *m = NodeUnstageVolumeResponse{} } +func (m *NodeUnstageVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodeUnstageVolumeResponse) ProtoMessage() {} +func (*NodeUnstageVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{40} +} +func (m *NodeUnstageVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnstageVolumeResponse.Unmarshal(m, b) +} +func (m *NodeUnstageVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnstageVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodeUnstageVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnstageVolumeResponse.Merge(dst, src) +} +func (m *NodeUnstageVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodeUnstageVolumeResponse.Size(m) +} +func (m *NodeUnstageVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnstageVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnstageVolumeResponse proto.InternalMessageInfo + +type NodePublishVolumeRequest struct { + // The ID of the volume to publish. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The CO SHALL set this field to the value returned by + // `ControllerPublishVolume` if the corresponding Controller Plugin + // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be + // left unset if the corresponding Controller Plugin does not have + // this capability. This is an OPTIONAL field. + PublishContext map[string]string `protobuf:"bytes,2,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The path to which the volume was staged by `NodeStageVolume`. + // It MUST be an absolute path in the root filesystem of the process + // serving this request. + // It MUST be set if the Node Plugin implements the + // `STAGE_UNSTAGE_VOLUME` node capability. + // This is an OPTIONAL field. + StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"` + // The path to which the volume will be published. It MUST be an + // absolute path in the root filesystem of the process serving this + // request. The CO SHALL ensure uniqueness of target_path per volume. + // The CO SHALL ensure that the parent directory of this path exists + // and that the process serving the request has `read` and `write` + // permissions to that parent directory. + // For volumes with an access type of block, the SP SHALL place the + // block device at target_path. + // For volumes with an access type of mount, the SP SHALL place the + // mounted directory at target_path. + // Creation of target_path is the responsibility of the SP. + // This is a REQUIRED field. + TargetPath string `protobuf:"bytes,4,opt,name=target_path,json=targetPath,proto3" json:"target_path,omitempty"` + // Volume capability describing how the CO intends to use this volume. + // SP MUST ensure the CO can use the published volume as described. + // Otherwise SP MUST return the appropriate gRPC error code. + // This is a REQUIRED field. + VolumeCapability *VolumeCapability `protobuf:"bytes,5,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"` + // Indicates SP MUST publish the volume in readonly mode. + // This field is REQUIRED. + Readonly bool `protobuf:"varint,6,opt,name=readonly,proto3" json:"readonly,omitempty"` + // Secrets required by plugin to complete node publish volume request. + // This field is OPTIONAL. Refer to the `Secrets Requirements` + // section on how to use this field. + Secrets map[string]string `protobuf:"bytes,7,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Volume context as returned by CO in CreateVolumeRequest. This field + // is OPTIONAL and MUST match the volume_context of the volume + // identified by `volume_id`. + VolumeContext map[string]string `protobuf:"bytes,8,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodePublishVolumeRequest) Reset() { *m = NodePublishVolumeRequest{} } +func (m *NodePublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodePublishVolumeRequest) ProtoMessage() {} +func (*NodePublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{41} +} +func (m *NodePublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodePublishVolumeRequest.Unmarshal(m, b) +} +func (m *NodePublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodePublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodePublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodePublishVolumeRequest.Merge(dst, src) +} +func (m *NodePublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodePublishVolumeRequest.Size(m) +} +func (m *NodePublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodePublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodePublishVolumeRequest proto.InternalMessageInfo + +func (m *NodePublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodePublishVolumeRequest) GetPublishContext() map[string]string { + if m != nil { + return m.PublishContext + } + return nil +} + +func (m *NodePublishVolumeRequest) GetStagingTargetPath() string { + if m != nil { + return m.StagingTargetPath + } + return "" +} + +func (m *NodePublishVolumeRequest) GetTargetPath() string { + if m != nil { + return m.TargetPath + } + return "" +} + +func (m *NodePublishVolumeRequest) GetVolumeCapability() *VolumeCapability { + if m != nil { + return m.VolumeCapability + } + return nil +} + +func (m *NodePublishVolumeRequest) GetReadonly() bool { + if m != nil { + return m.Readonly + } + return false +} + +func (m *NodePublishVolumeRequest) GetSecrets() map[string]string { + if m != nil { + return m.Secrets + } + return nil +} + +func (m *NodePublishVolumeRequest) GetVolumeContext() map[string]string { + if m != nil { + return m.VolumeContext + } + return nil +} + +type NodePublishVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodePublishVolumeResponse) Reset() { *m = NodePublishVolumeResponse{} } +func (m *NodePublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodePublishVolumeResponse) ProtoMessage() {} +func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{42} +} +func (m *NodePublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodePublishVolumeResponse.Unmarshal(m, b) +} +func (m *NodePublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodePublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodePublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodePublishVolumeResponse.Merge(dst, src) +} +func (m *NodePublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodePublishVolumeResponse.Size(m) +} +func (m *NodePublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodePublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodePublishVolumeResponse proto.InternalMessageInfo + +type NodeUnpublishVolumeRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The path at which the volume was published. It MUST be an absolute + // path in the root filesystem of the process serving this request. + // The SP MUST delete the file or directory it created at this path. + // This is a REQUIRED field. + TargetPath string `protobuf:"bytes,2,opt,name=target_path,json=targetPath,proto3" json:"target_path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnpublishVolumeRequest) Reset() { *m = NodeUnpublishVolumeRequest{} } +func (m *NodeUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } +func (*NodeUnpublishVolumeRequest) ProtoMessage() {} +func (*NodeUnpublishVolumeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{43} +} +func (m *NodeUnpublishVolumeRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnpublishVolumeRequest.Unmarshal(m, b) +} +func (m *NodeUnpublishVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnpublishVolumeRequest.Marshal(b, m, deterministic) +} +func (dst *NodeUnpublishVolumeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnpublishVolumeRequest.Merge(dst, src) +} +func (m *NodeUnpublishVolumeRequest) XXX_Size() int { + return xxx_messageInfo_NodeUnpublishVolumeRequest.Size(m) +} +func (m *NodeUnpublishVolumeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnpublishVolumeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnpublishVolumeRequest proto.InternalMessageInfo + +func (m *NodeUnpublishVolumeRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeUnpublishVolumeRequest) GetTargetPath() string { + if m != nil { + return m.TargetPath + } + return "" +} + +type NodeUnpublishVolumeResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeUnpublishVolumeResponse) Reset() { *m = NodeUnpublishVolumeResponse{} } +func (m *NodeUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } +func (*NodeUnpublishVolumeResponse) ProtoMessage() {} +func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{44} +} +func (m *NodeUnpublishVolumeResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeUnpublishVolumeResponse.Unmarshal(m, b) +} +func (m *NodeUnpublishVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeUnpublishVolumeResponse.Marshal(b, m, deterministic) +} +func (dst *NodeUnpublishVolumeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeUnpublishVolumeResponse.Merge(dst, src) +} +func (m *NodeUnpublishVolumeResponse) XXX_Size() int { + return xxx_messageInfo_NodeUnpublishVolumeResponse.Size(m) +} +func (m *NodeUnpublishVolumeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeUnpublishVolumeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeUnpublishVolumeResponse proto.InternalMessageInfo + +type NodeGetVolumeStatsRequest struct { + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // It can be any valid path where volume was previously + // staged or published. + // It MUST be an absolute path in the root filesystem of + // the process serving this request. + // This is a REQUIRED field. + VolumePath string `protobuf:"bytes,2,opt,name=volume_path,json=volumePath,proto3" json:"volume_path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetVolumeStatsRequest) Reset() { *m = NodeGetVolumeStatsRequest{} } +func (m *NodeGetVolumeStatsRequest) String() string { return proto.CompactTextString(m) } +func (*NodeGetVolumeStatsRequest) ProtoMessage() {} +func (*NodeGetVolumeStatsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{45} +} +func (m *NodeGetVolumeStatsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetVolumeStatsRequest.Unmarshal(m, b) +} +func (m *NodeGetVolumeStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetVolumeStatsRequest.Marshal(b, m, deterministic) +} +func (dst *NodeGetVolumeStatsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetVolumeStatsRequest.Merge(dst, src) +} +func (m *NodeGetVolumeStatsRequest) XXX_Size() int { + return xxx_messageInfo_NodeGetVolumeStatsRequest.Size(m) +} +func (m *NodeGetVolumeStatsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetVolumeStatsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetVolumeStatsRequest proto.InternalMessageInfo + +func (m *NodeGetVolumeStatsRequest) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *NodeGetVolumeStatsRequest) GetVolumePath() string { + if m != nil { + return m.VolumePath + } + return "" +} + +type NodeGetVolumeStatsResponse struct { + // This field is OPTIONAL. + Usage []*VolumeUsage `protobuf:"bytes,1,rep,name=usage,proto3" json:"usage,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetVolumeStatsResponse) Reset() { *m = NodeGetVolumeStatsResponse{} } +func (m *NodeGetVolumeStatsResponse) String() string { return proto.CompactTextString(m) } +func (*NodeGetVolumeStatsResponse) ProtoMessage() {} +func (*NodeGetVolumeStatsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{46} +} +func (m *NodeGetVolumeStatsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetVolumeStatsResponse.Unmarshal(m, b) +} +func (m *NodeGetVolumeStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetVolumeStatsResponse.Marshal(b, m, deterministic) +} +func (dst *NodeGetVolumeStatsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetVolumeStatsResponse.Merge(dst, src) +} +func (m *NodeGetVolumeStatsResponse) XXX_Size() int { + return xxx_messageInfo_NodeGetVolumeStatsResponse.Size(m) +} +func (m *NodeGetVolumeStatsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetVolumeStatsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetVolumeStatsResponse proto.InternalMessageInfo + +func (m *NodeGetVolumeStatsResponse) GetUsage() []*VolumeUsage { + if m != nil { + return m.Usage + } + return nil +} + +type VolumeUsage struct { + // The available capacity in specified Unit. This field is OPTIONAL. + // The value of this field MUST NOT be negative. + Available int64 `protobuf:"varint,1,opt,name=available,proto3" json:"available,omitempty"` + // The total capacity in specified Unit. This field is REQUIRED. + // The value of this field MUST NOT be negative. + Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + // The used capacity in specified Unit. This field is OPTIONAL. + // The value of this field MUST NOT be negative. + Used int64 `protobuf:"varint,3,opt,name=used,proto3" json:"used,omitempty"` + // Units by which values are measured. This field is REQUIRED. + Unit VolumeUsage_Unit `protobuf:"varint,4,opt,name=unit,proto3,enum=csitest.v1.VolumeUsage_Unit" json:"unit,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VolumeUsage) Reset() { *m = VolumeUsage{} } +func (m *VolumeUsage) String() string { return proto.CompactTextString(m) } +func (*VolumeUsage) ProtoMessage() {} +func (*VolumeUsage) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{47} +} +func (m *VolumeUsage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VolumeUsage.Unmarshal(m, b) +} +func (m *VolumeUsage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VolumeUsage.Marshal(b, m, deterministic) +} +func (dst *VolumeUsage) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeUsage.Merge(dst, src) +} +func (m *VolumeUsage) XXX_Size() int { + return xxx_messageInfo_VolumeUsage.Size(m) +} +func (m *VolumeUsage) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeUsage.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeUsage proto.InternalMessageInfo + +func (m *VolumeUsage) GetAvailable() int64 { + if m != nil { + return m.Available + } + return 0 +} + +func (m *VolumeUsage) GetTotal() int64 { + if m != nil { + return m.Total + } + return 0 +} + +func (m *VolumeUsage) GetUsed() int64 { + if m != nil { + return m.Used + } + return 0 +} + +func (m *VolumeUsage) GetUnit() VolumeUsage_Unit { + if m != nil { + return m.Unit + } + return VolumeUsage_UNKNOWN +} + +type NodeGetCapabilitiesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetCapabilitiesRequest) Reset() { *m = NodeGetCapabilitiesRequest{} } +func (m *NodeGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } +func (*NodeGetCapabilitiesRequest) ProtoMessage() {} +func (*NodeGetCapabilitiesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{48} +} +func (m *NodeGetCapabilitiesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetCapabilitiesRequest.Unmarshal(m, b) +} +func (m *NodeGetCapabilitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetCapabilitiesRequest.Marshal(b, m, deterministic) +} +func (dst *NodeGetCapabilitiesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetCapabilitiesRequest.Merge(dst, src) +} +func (m *NodeGetCapabilitiesRequest) XXX_Size() int { + return xxx_messageInfo_NodeGetCapabilitiesRequest.Size(m) +} +func (m *NodeGetCapabilitiesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetCapabilitiesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetCapabilitiesRequest proto.InternalMessageInfo + +type NodeGetCapabilitiesResponse struct { + // All the capabilities that the node service supports. This field + // is OPTIONAL. + Capabilities []*NodeServiceCapability `protobuf:"bytes,1,rep,name=capabilities,proto3" json:"capabilities,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetCapabilitiesResponse) Reset() { *m = NodeGetCapabilitiesResponse{} } +func (m *NodeGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } +func (*NodeGetCapabilitiesResponse) ProtoMessage() {} +func (*NodeGetCapabilitiesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{49} +} +func (m *NodeGetCapabilitiesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetCapabilitiesResponse.Unmarshal(m, b) +} +func (m *NodeGetCapabilitiesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetCapabilitiesResponse.Marshal(b, m, deterministic) +} +func (dst *NodeGetCapabilitiesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetCapabilitiesResponse.Merge(dst, src) +} +func (m *NodeGetCapabilitiesResponse) XXX_Size() int { + return xxx_messageInfo_NodeGetCapabilitiesResponse.Size(m) +} +func (m *NodeGetCapabilitiesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetCapabilitiesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetCapabilitiesResponse proto.InternalMessageInfo + +func (m *NodeGetCapabilitiesResponse) GetCapabilities() []*NodeServiceCapability { + if m != nil { + return m.Capabilities + } + return nil +} + +// Specifies a capability of the node service. +type NodeServiceCapability struct { + // Types that are valid to be assigned to Type: + // *NodeServiceCapability_Rpc + Type isNodeServiceCapability_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeServiceCapability) Reset() { *m = NodeServiceCapability{} } +func (m *NodeServiceCapability) String() string { return proto.CompactTextString(m) } +func (*NodeServiceCapability) ProtoMessage() {} +func (*NodeServiceCapability) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{50} +} +func (m *NodeServiceCapability) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeServiceCapability.Unmarshal(m, b) +} +func (m *NodeServiceCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeServiceCapability.Marshal(b, m, deterministic) +} +func (dst *NodeServiceCapability) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeServiceCapability.Merge(dst, src) +} +func (m *NodeServiceCapability) XXX_Size() int { + return xxx_messageInfo_NodeServiceCapability.Size(m) +} +func (m *NodeServiceCapability) XXX_DiscardUnknown() { + xxx_messageInfo_NodeServiceCapability.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeServiceCapability proto.InternalMessageInfo + +type isNodeServiceCapability_Type interface { + isNodeServiceCapability_Type() +} + +type NodeServiceCapability_Rpc struct { + Rpc *NodeServiceCapability_RPC `protobuf:"bytes,1,opt,name=rpc,proto3,oneof"` +} + +func (*NodeServiceCapability_Rpc) isNodeServiceCapability_Type() {} + +func (m *NodeServiceCapability) GetType() isNodeServiceCapability_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *NodeServiceCapability) GetRpc() *NodeServiceCapability_RPC { + if x, ok := m.GetType().(*NodeServiceCapability_Rpc); ok { + return x.Rpc + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*NodeServiceCapability) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _NodeServiceCapability_OneofMarshaler, _NodeServiceCapability_OneofUnmarshaler, _NodeServiceCapability_OneofSizer, []interface{}{ + (*NodeServiceCapability_Rpc)(nil), + } +} + +func _NodeServiceCapability_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*NodeServiceCapability) + // type + switch x := m.Type.(type) { + case *NodeServiceCapability_Rpc: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Rpc); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("NodeServiceCapability.Type has unexpected type %T", x) + } + return nil +} + +func _NodeServiceCapability_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*NodeServiceCapability) + switch tag { + case 1: // type.rpc + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(NodeServiceCapability_RPC) + err := b.DecodeMessage(msg) + m.Type = &NodeServiceCapability_Rpc{msg} + return true, err + default: + return false, nil + } +} + +func _NodeServiceCapability_OneofSizer(msg proto.Message) (n int) { + m := msg.(*NodeServiceCapability) + // type + switch x := m.Type.(type) { + case *NodeServiceCapability_Rpc: + s := proto.Size(x.Rpc) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type NodeServiceCapability_RPC struct { + Type NodeServiceCapability_RPC_Type `protobuf:"varint,1,opt,name=type,proto3,enum=csitest.v1.NodeServiceCapability_RPC_Type" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeServiceCapability_RPC) Reset() { *m = NodeServiceCapability_RPC{} } +func (m *NodeServiceCapability_RPC) String() string { return proto.CompactTextString(m) } +func (*NodeServiceCapability_RPC) ProtoMessage() {} +func (*NodeServiceCapability_RPC) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{50, 0} +} +func (m *NodeServiceCapability_RPC) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeServiceCapability_RPC.Unmarshal(m, b) +} +func (m *NodeServiceCapability_RPC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeServiceCapability_RPC.Marshal(b, m, deterministic) +} +func (dst *NodeServiceCapability_RPC) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeServiceCapability_RPC.Merge(dst, src) +} +func (m *NodeServiceCapability_RPC) XXX_Size() int { + return xxx_messageInfo_NodeServiceCapability_RPC.Size(m) +} +func (m *NodeServiceCapability_RPC) XXX_DiscardUnknown() { + xxx_messageInfo_NodeServiceCapability_RPC.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeServiceCapability_RPC proto.InternalMessageInfo + +func (m *NodeServiceCapability_RPC) GetType() NodeServiceCapability_RPC_Type { + if m != nil { + return m.Type + } + return NodeServiceCapability_RPC_UNKNOWN +} + +type NodeGetInfoRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetInfoRequest) Reset() { *m = NodeGetInfoRequest{} } +func (m *NodeGetInfoRequest) String() string { return proto.CompactTextString(m) } +func (*NodeGetInfoRequest) ProtoMessage() {} +func (*NodeGetInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{51} +} +func (m *NodeGetInfoRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetInfoRequest.Unmarshal(m, b) +} +func (m *NodeGetInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetInfoRequest.Marshal(b, m, deterministic) +} +func (dst *NodeGetInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetInfoRequest.Merge(dst, src) +} +func (m *NodeGetInfoRequest) XXX_Size() int { + return xxx_messageInfo_NodeGetInfoRequest.Size(m) +} +func (m *NodeGetInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetInfoRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetInfoRequest proto.InternalMessageInfo + +type NodeGetInfoResponse struct { + // The identifier of the node as understood by the SP. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific node vs all other nodes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls, including + // `ControllerPublishVolume`, to refer to this node. + // The SP is NOT responsible for global uniqueness of node_id across + // multiple SPs. + NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + // Maximum number of volumes that controller can publish to the node. + // If value is not set or zero CO SHALL decide how many volumes of + // this type can be published by the controller to the node. The + // plugin MUST NOT set negative values here. + // This field is OPTIONAL. + MaxVolumesPerNode int64 `protobuf:"varint,2,opt,name=max_volumes_per_node,json=maxVolumesPerNode,proto3" json:"max_volumes_per_node,omitempty"` + // Specifies where (regions, zones, racks, etc.) the node is + // accessible from. + // A plugin that returns this field MUST also set the + // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability. + // COs MAY use this information along with the topology information + // returned in CreateVolumeResponse to ensure that a given volume is + // accessible from a given node when scheduling workloads. + // This field is OPTIONAL. If it is not specified, the CO MAY assume + // the node is not subject to any topological constraint, and MAY + // schedule workloads that reference any volume V, such that there are + // no topological constraints declared for V. + // + // Example 1: + // accessible_topology = + // {"region": "R1", "zone": "R2"} + // Indicates the node exists within the "region" "R1" and the "zone" + // "Z2". + AccessibleTopology *Topology `protobuf:"bytes,3,opt,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeGetInfoResponse) Reset() { *m = NodeGetInfoResponse{} } +func (m *NodeGetInfoResponse) String() string { return proto.CompactTextString(m) } +func (*NodeGetInfoResponse) ProtoMessage() {} +func (*NodeGetInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_csitest_38acc6c7572d95d8, []int{52} +} +func (m *NodeGetInfoResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeGetInfoResponse.Unmarshal(m, b) +} +func (m *NodeGetInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeGetInfoResponse.Marshal(b, m, deterministic) +} +func (dst *NodeGetInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeGetInfoResponse.Merge(dst, src) +} +func (m *NodeGetInfoResponse) XXX_Size() int { + return xxx_messageInfo_NodeGetInfoResponse.Size(m) +} +func (m *NodeGetInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_NodeGetInfoResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeGetInfoResponse proto.InternalMessageInfo + +func (m *NodeGetInfoResponse) GetNodeId() string { + if m != nil { + return m.NodeId + } + return "" +} + +func (m *NodeGetInfoResponse) GetMaxVolumesPerNode() int64 { + if m != nil { + return m.MaxVolumesPerNode + } + return 0 +} + +func (m *NodeGetInfoResponse) GetAccessibleTopology() *Topology { + if m != nil { + return m.AccessibleTopology + } + return nil +} + +func init() { + proto.RegisterType((*GetPluginInfoRequest)(nil), "csitest.v1.GetPluginInfoRequest") + proto.RegisterType((*GetPluginInfoResponse)(nil), "csitest.v1.GetPluginInfoResponse") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.GetPluginInfoResponse.ManifestEntry") + proto.RegisterType((*GetPluginCapabilitiesRequest)(nil), "csitest.v1.GetPluginCapabilitiesRequest") + proto.RegisterType((*GetPluginCapabilitiesResponse)(nil), "csitest.v1.GetPluginCapabilitiesResponse") + proto.RegisterType((*PluginCapability)(nil), "csitest.v1.PluginCapability") + proto.RegisterType((*PluginCapability_Service)(nil), "csitest.v1.PluginCapability.Service") + proto.RegisterType((*ProbeRequest)(nil), "csitest.v1.ProbeRequest") + proto.RegisterType((*ProbeResponse)(nil), "csitest.v1.ProbeResponse") + proto.RegisterType((*CreateVolumeRequest)(nil), "csitest.v1.CreateVolumeRequest") + proto.RegisterMapType((map[int64]*VolumeCapability)(nil), "csitest.v1.CreateVolumeRequest.MaybeSecretMapEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.CreateVolumeRequest.ParametersEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.CreateVolumeRequest.SeecreetsEntry") + proto.RegisterType((*VolumeContentSource)(nil), "csitest.v1.VolumeContentSource") + proto.RegisterType((*VolumeContentSource_SnapshotSource)(nil), "csitest.v1.VolumeContentSource.SnapshotSource") + proto.RegisterType((*VolumeContentSource_VolumeSource)(nil), "csitest.v1.VolumeContentSource.VolumeSource") + proto.RegisterType((*CreateVolumeResponse)(nil), "csitest.v1.CreateVolumeResponse") + proto.RegisterType((*VolumeCapability)(nil), "csitest.v1.VolumeCapability") + proto.RegisterType((*VolumeCapability_BlockVolume)(nil), "csitest.v1.VolumeCapability.BlockVolume") + proto.RegisterType((*VolumeCapability_MountVolume)(nil), "csitest.v1.VolumeCapability.MountVolume") + proto.RegisterType((*VolumeCapability_AccessMode)(nil), "csitest.v1.VolumeCapability.AccessMode") + proto.RegisterType((*CapacityRange)(nil), "csitest.v1.CapacityRange") + proto.RegisterType((*Volume)(nil), "csitest.v1.Volume") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.Volume.VolumeContextEntry") + proto.RegisterType((*TopologyRequirement)(nil), "csitest.v1.TopologyRequirement") + proto.RegisterType((*Topology)(nil), "csitest.v1.Topology") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.Topology.SegmentsEntry") + proto.RegisterType((*DeleteVolumeRequest)(nil), "csitest.v1.DeleteVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.DeleteVolumeRequest.SecretsEntry") + proto.RegisterType((*DeleteVolumeResponse)(nil), "csitest.v1.DeleteVolumeResponse") + proto.RegisterType((*ControllerPublishVolumeRequest)(nil), "csitest.v1.ControllerPublishVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.ControllerPublishVolumeRequest.SecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.ControllerPublishVolumeRequest.VolumeContextEntry") + proto.RegisterType((*ControllerPublishVolumeResponse)(nil), "csitest.v1.ControllerPublishVolumeResponse") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.ControllerPublishVolumeResponse.PublishContextEntry") + proto.RegisterType((*ControllerUnpublishVolumeRequest)(nil), "csitest.v1.ControllerUnpublishVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.ControllerUnpublishVolumeRequest.SecretsEntry") + proto.RegisterType((*ControllerUnpublishVolumeResponse)(nil), "csitest.v1.ControllerUnpublishVolumeResponse") + proto.RegisterType((*ValidateVolumeCapabilitiesRequest)(nil), "csitest.v1.ValidateVolumeCapabilitiesRequest") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.ValidateVolumeCapabilitiesRequest.ParametersEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.ValidateVolumeCapabilitiesRequest.SecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.ValidateVolumeCapabilitiesRequest.VolumeContextEntry") + proto.RegisterType((*ValidateVolumeCapabilitiesResponse)(nil), "csitest.v1.ValidateVolumeCapabilitiesResponse") + proto.RegisterType((*ValidateVolumeCapabilitiesResponse_Confirmed)(nil), "csitest.v1.ValidateVolumeCapabilitiesResponse.Confirmed") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.ValidateVolumeCapabilitiesResponse.Confirmed.ParametersEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.ValidateVolumeCapabilitiesResponse.Confirmed.VolumeContextEntry") + proto.RegisterType((*ListVolumesRequest)(nil), "csitest.v1.ListVolumesRequest") + proto.RegisterType((*ListVolumesResponse)(nil), "csitest.v1.ListVolumesResponse") + proto.RegisterType((*ListVolumesResponse_Entry)(nil), "csitest.v1.ListVolumesResponse.Entry") + proto.RegisterType((*GetCapacityRequest)(nil), "csitest.v1.GetCapacityRequest") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.GetCapacityRequest.ParametersEntry") + proto.RegisterType((*GetCapacityResponse)(nil), "csitest.v1.GetCapacityResponse") + proto.RegisterType((*ControllerGetCapabilitiesRequest)(nil), "csitest.v1.ControllerGetCapabilitiesRequest") + proto.RegisterType((*ControllerGetCapabilitiesResponse)(nil), "csitest.v1.ControllerGetCapabilitiesResponse") + proto.RegisterType((*ControllerServiceCapability)(nil), "csitest.v1.ControllerServiceCapability") + proto.RegisterType((*ControllerServiceCapability_RPC)(nil), "csitest.v1.ControllerServiceCapability.RPC") + proto.RegisterType((*CreateSnapshotRequest)(nil), "csitest.v1.CreateSnapshotRequest") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.CreateSnapshotRequest.ParametersEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.CreateSnapshotRequest.SecretsEntry") + proto.RegisterType((*CreateSnapshotResponse)(nil), "csitest.v1.CreateSnapshotResponse") + proto.RegisterType((*Snapshot)(nil), "csitest.v1.Snapshot") + proto.RegisterType((*DeleteSnapshotRequest)(nil), "csitest.v1.DeleteSnapshotRequest") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.DeleteSnapshotRequest.SecretsEntry") + proto.RegisterType((*DeleteSnapshotResponse)(nil), "csitest.v1.DeleteSnapshotResponse") + proto.RegisterType((*ListSnapshotsRequest)(nil), "csitest.v1.ListSnapshotsRequest") + proto.RegisterType((*ListSnapshotsResponse)(nil), "csitest.v1.ListSnapshotsResponse") + proto.RegisterType((*ListSnapshotsResponse_Entry)(nil), "csitest.v1.ListSnapshotsResponse.Entry") + proto.RegisterType((*NodeStageVolumeRequest)(nil), "csitest.v1.NodeStageVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.NodeStageVolumeRequest.PublishContextEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.NodeStageVolumeRequest.SecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.NodeStageVolumeRequest.VolumeContextEntry") + proto.RegisterType((*NodeStageVolumeResponse)(nil), "csitest.v1.NodeStageVolumeResponse") + proto.RegisterType((*NodeUnstageVolumeRequest)(nil), "csitest.v1.NodeUnstageVolumeRequest") + proto.RegisterType((*NodeUnstageVolumeResponse)(nil), "csitest.v1.NodeUnstageVolumeResponse") + proto.RegisterType((*NodePublishVolumeRequest)(nil), "csitest.v1.NodePublishVolumeRequest") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.NodePublishVolumeRequest.PublishContextEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.NodePublishVolumeRequest.SecretsEntry") + proto.RegisterMapType((map[string]string)(nil), "csitest.v1.NodePublishVolumeRequest.VolumeContextEntry") + proto.RegisterType((*NodePublishVolumeResponse)(nil), "csitest.v1.NodePublishVolumeResponse") + proto.RegisterType((*NodeUnpublishVolumeRequest)(nil), "csitest.v1.NodeUnpublishVolumeRequest") + proto.RegisterType((*NodeUnpublishVolumeResponse)(nil), "csitest.v1.NodeUnpublishVolumeResponse") + proto.RegisterType((*NodeGetVolumeStatsRequest)(nil), "csitest.v1.NodeGetVolumeStatsRequest") + proto.RegisterType((*NodeGetVolumeStatsResponse)(nil), "csitest.v1.NodeGetVolumeStatsResponse") + proto.RegisterType((*VolumeUsage)(nil), "csitest.v1.VolumeUsage") + proto.RegisterType((*NodeGetCapabilitiesRequest)(nil), "csitest.v1.NodeGetCapabilitiesRequest") + proto.RegisterType((*NodeGetCapabilitiesResponse)(nil), "csitest.v1.NodeGetCapabilitiesResponse") + proto.RegisterType((*NodeServiceCapability)(nil), "csitest.v1.NodeServiceCapability") + proto.RegisterType((*NodeServiceCapability_RPC)(nil), "csitest.v1.NodeServiceCapability.RPC") + proto.RegisterType((*NodeGetInfoRequest)(nil), "csitest.v1.NodeGetInfoRequest") + proto.RegisterType((*NodeGetInfoResponse)(nil), "csitest.v1.NodeGetInfoResponse") + proto.RegisterEnum("csitest.v1.PluginCapability_Service_Type", PluginCapability_Service_Type_name, PluginCapability_Service_Type_value) + proto.RegisterEnum("csitest.v1.VolumeCapability_AccessMode_Mode", VolumeCapability_AccessMode_Mode_name, VolumeCapability_AccessMode_Mode_value) + proto.RegisterEnum("csitest.v1.ControllerServiceCapability_RPC_Type", ControllerServiceCapability_RPC_Type_name, ControllerServiceCapability_RPC_Type_value) + proto.RegisterEnum("csitest.v1.VolumeUsage_Unit", VolumeUsage_Unit_name, VolumeUsage_Unit_value) + proto.RegisterEnum("csitest.v1.NodeServiceCapability_RPC_Type", NodeServiceCapability_RPC_Type_name, NodeServiceCapability_RPC_Type_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// IdentityClient is the client API for Identity service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type IdentityClient interface { + GetPluginInfo(ctx context.Context, in *GetPluginInfoRequest, opts ...grpc.CallOption) (*GetPluginInfoResponse, error) + GetPluginCapabilities(ctx context.Context, in *GetPluginCapabilitiesRequest, opts ...grpc.CallOption) (*GetPluginCapabilitiesResponse, error) + Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (*ProbeResponse, error) +} + +type identityClient struct { + cc *grpc.ClientConn +} + +func NewIdentityClient(cc *grpc.ClientConn) IdentityClient { + return &identityClient{cc} +} + +func (c *identityClient) GetPluginInfo(ctx context.Context, in *GetPluginInfoRequest, opts ...grpc.CallOption) (*GetPluginInfoResponse, error) { + out := new(GetPluginInfoResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Identity/GetPluginInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identityClient) GetPluginCapabilities(ctx context.Context, in *GetPluginCapabilitiesRequest, opts ...grpc.CallOption) (*GetPluginCapabilitiesResponse, error) { + out := new(GetPluginCapabilitiesResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Identity/GetPluginCapabilities", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identityClient) Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (*ProbeResponse, error) { + out := new(ProbeResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Identity/Probe", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// IdentityServer is the server API for Identity service. +type IdentityServer interface { + GetPluginInfo(context.Context, *GetPluginInfoRequest) (*GetPluginInfoResponse, error) + GetPluginCapabilities(context.Context, *GetPluginCapabilitiesRequest) (*GetPluginCapabilitiesResponse, error) + Probe(context.Context, *ProbeRequest) (*ProbeResponse, error) +} + +func RegisterIdentityServer(s *grpc.Server, srv IdentityServer) { + s.RegisterService(&_Identity_serviceDesc, srv) +} + +func _Identity_GetPluginInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPluginInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityServer).GetPluginInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Identity/GetPluginInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityServer).GetPluginInfo(ctx, req.(*GetPluginInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identity_GetPluginCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPluginCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityServer).GetPluginCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Identity/GetPluginCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityServer).GetPluginCapabilities(ctx, req.(*GetPluginCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identity_Probe_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ProbeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityServer).Probe(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Identity/Probe", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityServer).Probe(ctx, req.(*ProbeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Identity_serviceDesc = grpc.ServiceDesc{ + ServiceName: "csitest.v1.Identity", + HandlerType: (*IdentityServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetPluginInfo", + Handler: _Identity_GetPluginInfo_Handler, + }, + { + MethodName: "GetPluginCapabilities", + Handler: _Identity_GetPluginCapabilities_Handler, + }, + { + MethodName: "Probe", + Handler: _Identity_Probe_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest.proto", +} + +// ControllerClient is the client API for Controller service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type ControllerClient interface { + CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) + DeleteVolume(ctx context.Context, in *DeleteVolumeRequest, opts ...grpc.CallOption) (*DeleteVolumeResponse, error) + ControllerPublishVolume(ctx context.Context, in *ControllerPublishVolumeRequest, opts ...grpc.CallOption) (*ControllerPublishVolumeResponse, error) + ControllerUnpublishVolume(ctx context.Context, in *ControllerUnpublishVolumeRequest, opts ...grpc.CallOption) (*ControllerUnpublishVolumeResponse, error) + ValidateVolumeCapabilities(ctx context.Context, in *ValidateVolumeCapabilitiesRequest, opts ...grpc.CallOption) (*ValidateVolumeCapabilitiesResponse, error) + ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) + GetCapacity(ctx context.Context, in *GetCapacityRequest, opts ...grpc.CallOption) (*GetCapacityResponse, error) + ControllerGetCapabilities(ctx context.Context, in *ControllerGetCapabilitiesRequest, opts ...grpc.CallOption) (*ControllerGetCapabilitiesResponse, error) + CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*CreateSnapshotResponse, error) + DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*DeleteSnapshotResponse, error) + ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) +} + +type controllerClient struct { + cc *grpc.ClientConn +} + +func NewControllerClient(cc *grpc.ClientConn) ControllerClient { + return &controllerClient{cc} +} + +func (c *controllerClient) CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) { + out := new(CreateVolumeResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/CreateVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) DeleteVolume(ctx context.Context, in *DeleteVolumeRequest, opts ...grpc.CallOption) (*DeleteVolumeResponse, error) { + out := new(DeleteVolumeResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/DeleteVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ControllerPublishVolume(ctx context.Context, in *ControllerPublishVolumeRequest, opts ...grpc.CallOption) (*ControllerPublishVolumeResponse, error) { + out := new(ControllerPublishVolumeResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/ControllerPublishVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ControllerUnpublishVolume(ctx context.Context, in *ControllerUnpublishVolumeRequest, opts ...grpc.CallOption) (*ControllerUnpublishVolumeResponse, error) { + out := new(ControllerUnpublishVolumeResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/ControllerUnpublishVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ValidateVolumeCapabilities(ctx context.Context, in *ValidateVolumeCapabilitiesRequest, opts ...grpc.CallOption) (*ValidateVolumeCapabilitiesResponse, error) { + out := new(ValidateVolumeCapabilitiesResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/ValidateVolumeCapabilities", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) { + out := new(ListVolumesResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/ListVolumes", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) GetCapacity(ctx context.Context, in *GetCapacityRequest, opts ...grpc.CallOption) (*GetCapacityResponse, error) { + out := new(GetCapacityResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/GetCapacity", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ControllerGetCapabilities(ctx context.Context, in *ControllerGetCapabilitiesRequest, opts ...grpc.CallOption) (*ControllerGetCapabilitiesResponse, error) { + out := new(ControllerGetCapabilitiesResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/ControllerGetCapabilities", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*CreateSnapshotResponse, error) { + out := new(CreateSnapshotResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/CreateSnapshot", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*DeleteSnapshotResponse, error) { + out := new(DeleteSnapshotResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/DeleteSnapshot", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) { + out := new(ListSnapshotsResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Controller/ListSnapshots", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ControllerServer is the server API for Controller service. +type ControllerServer interface { + CreateVolume(context.Context, *CreateVolumeRequest) (*CreateVolumeResponse, error) + DeleteVolume(context.Context, *DeleteVolumeRequest) (*DeleteVolumeResponse, error) + ControllerPublishVolume(context.Context, *ControllerPublishVolumeRequest) (*ControllerPublishVolumeResponse, error) + ControllerUnpublishVolume(context.Context, *ControllerUnpublishVolumeRequest) (*ControllerUnpublishVolumeResponse, error) + ValidateVolumeCapabilities(context.Context, *ValidateVolumeCapabilitiesRequest) (*ValidateVolumeCapabilitiesResponse, error) + ListVolumes(context.Context, *ListVolumesRequest) (*ListVolumesResponse, error) + GetCapacity(context.Context, *GetCapacityRequest) (*GetCapacityResponse, error) + ControllerGetCapabilities(context.Context, *ControllerGetCapabilitiesRequest) (*ControllerGetCapabilitiesResponse, error) + CreateSnapshot(context.Context, *CreateSnapshotRequest) (*CreateSnapshotResponse, error) + DeleteSnapshot(context.Context, *DeleteSnapshotRequest) (*DeleteSnapshotResponse, error) + ListSnapshots(context.Context, *ListSnapshotsRequest) (*ListSnapshotsResponse, error) +} + +func RegisterControllerServer(s *grpc.Server, srv ControllerServer) { + s.RegisterService(&_Controller_serviceDesc, srv) +} + +func _Controller_CreateVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).CreateVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/CreateVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).CreateVolume(ctx, req.(*CreateVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_DeleteVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).DeleteVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/DeleteVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).DeleteVolume(ctx, req.(*DeleteVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ControllerPublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerPublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ControllerPublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/ControllerPublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ControllerPublishVolume(ctx, req.(*ControllerPublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ControllerUnpublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerUnpublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ControllerUnpublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/ControllerUnpublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ControllerUnpublishVolume(ctx, req.(*ControllerUnpublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ValidateVolumeCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ValidateVolumeCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ValidateVolumeCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/ValidateVolumeCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ValidateVolumeCapabilities(ctx, req.(*ValidateVolumeCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ListVolumes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListVolumesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ListVolumes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/ListVolumes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ListVolumes(ctx, req.(*ListVolumesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_GetCapacity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetCapacityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).GetCapacity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/GetCapacity", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).GetCapacity(ctx, req.(*GetCapacityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ControllerGetCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerGetCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ControllerGetCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/ControllerGetCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ControllerGetCapabilities(ctx, req.(*ControllerGetCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_CreateSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).CreateSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/CreateSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).CreateSnapshot(ctx, req.(*CreateSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_DeleteSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).DeleteSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/DeleteSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).DeleteSnapshot(ctx, req.(*DeleteSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ListSnapshots_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSnapshotsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ListSnapshots(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Controller/ListSnapshots", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ListSnapshots(ctx, req.(*ListSnapshotsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Controller_serviceDesc = grpc.ServiceDesc{ + ServiceName: "csitest.v1.Controller", + HandlerType: (*ControllerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateVolume", + Handler: _Controller_CreateVolume_Handler, + }, + { + MethodName: "DeleteVolume", + Handler: _Controller_DeleteVolume_Handler, + }, + { + MethodName: "ControllerPublishVolume", + Handler: _Controller_ControllerPublishVolume_Handler, + }, + { + MethodName: "ControllerUnpublishVolume", + Handler: _Controller_ControllerUnpublishVolume_Handler, + }, + { + MethodName: "ValidateVolumeCapabilities", + Handler: _Controller_ValidateVolumeCapabilities_Handler, + }, + { + MethodName: "ListVolumes", + Handler: _Controller_ListVolumes_Handler, + }, + { + MethodName: "GetCapacity", + Handler: _Controller_GetCapacity_Handler, + }, + { + MethodName: "ControllerGetCapabilities", + Handler: _Controller_ControllerGetCapabilities_Handler, + }, + { + MethodName: "CreateSnapshot", + Handler: _Controller_CreateSnapshot_Handler, + }, + { + MethodName: "DeleteSnapshot", + Handler: _Controller_DeleteSnapshot_Handler, + }, + { + MethodName: "ListSnapshots", + Handler: _Controller_ListSnapshots_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest.proto", +} + +// NodeClient is the client API for Node service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type NodeClient interface { + NodeStageVolume(ctx context.Context, in *NodeStageVolumeRequest, opts ...grpc.CallOption) (*NodeStageVolumeResponse, error) + NodeUnstageVolume(ctx context.Context, in *NodeUnstageVolumeRequest, opts ...grpc.CallOption) (*NodeUnstageVolumeResponse, error) + NodePublishVolume(ctx context.Context, in *NodePublishVolumeRequest, opts ...grpc.CallOption) (*NodePublishVolumeResponse, error) + NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishVolumeRequest, opts ...grpc.CallOption) (*NodeUnpublishVolumeResponse, error) + NodeGetVolumeStats(ctx context.Context, in *NodeGetVolumeStatsRequest, opts ...grpc.CallOption) (*NodeGetVolumeStatsResponse, error) + NodeGetCapabilities(ctx context.Context, in *NodeGetCapabilitiesRequest, opts ...grpc.CallOption) (*NodeGetCapabilitiesResponse, error) + NodeGetInfo(ctx context.Context, in *NodeGetInfoRequest, opts ...grpc.CallOption) (*NodeGetInfoResponse, error) +} + +type nodeClient struct { + cc *grpc.ClientConn +} + +func NewNodeClient(cc *grpc.ClientConn) NodeClient { + return &nodeClient{cc} +} + +func (c *nodeClient) NodeStageVolume(ctx context.Context, in *NodeStageVolumeRequest, opts ...grpc.CallOption) (*NodeStageVolumeResponse, error) { + out := new(NodeStageVolumeResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Node/NodeStageVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeUnstageVolume(ctx context.Context, in *NodeUnstageVolumeRequest, opts ...grpc.CallOption) (*NodeUnstageVolumeResponse, error) { + out := new(NodeUnstageVolumeResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Node/NodeUnstageVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodePublishVolume(ctx context.Context, in *NodePublishVolumeRequest, opts ...grpc.CallOption) (*NodePublishVolumeResponse, error) { + out := new(NodePublishVolumeResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Node/NodePublishVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeUnpublishVolume(ctx context.Context, in *NodeUnpublishVolumeRequest, opts ...grpc.CallOption) (*NodeUnpublishVolumeResponse, error) { + out := new(NodeUnpublishVolumeResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Node/NodeUnpublishVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeGetVolumeStats(ctx context.Context, in *NodeGetVolumeStatsRequest, opts ...grpc.CallOption) (*NodeGetVolumeStatsResponse, error) { + out := new(NodeGetVolumeStatsResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Node/NodeGetVolumeStats", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeGetCapabilities(ctx context.Context, in *NodeGetCapabilitiesRequest, opts ...grpc.CallOption) (*NodeGetCapabilitiesResponse, error) { + out := new(NodeGetCapabilitiesResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Node/NodeGetCapabilities", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeClient) NodeGetInfo(ctx context.Context, in *NodeGetInfoRequest, opts ...grpc.CallOption) (*NodeGetInfoResponse, error) { + out := new(NodeGetInfoResponse) + err := c.cc.Invoke(ctx, "/csitest.v1.Node/NodeGetInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// NodeServer is the server API for Node service. +type NodeServer interface { + NodeStageVolume(context.Context, *NodeStageVolumeRequest) (*NodeStageVolumeResponse, error) + NodeUnstageVolume(context.Context, *NodeUnstageVolumeRequest) (*NodeUnstageVolumeResponse, error) + NodePublishVolume(context.Context, *NodePublishVolumeRequest) (*NodePublishVolumeResponse, error) + NodeUnpublishVolume(context.Context, *NodeUnpublishVolumeRequest) (*NodeUnpublishVolumeResponse, error) + NodeGetVolumeStats(context.Context, *NodeGetVolumeStatsRequest) (*NodeGetVolumeStatsResponse, error) + NodeGetCapabilities(context.Context, *NodeGetCapabilitiesRequest) (*NodeGetCapabilitiesResponse, error) + NodeGetInfo(context.Context, *NodeGetInfoRequest) (*NodeGetInfoResponse, error) +} + +func RegisterNodeServer(s *grpc.Server, srv NodeServer) { + s.RegisterService(&_Node_serviceDesc, srv) +} + +func _Node_NodeStageVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeStageVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeStageVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Node/NodeStageVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeStageVolume(ctx, req.(*NodeStageVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeUnstageVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeUnstageVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeUnstageVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Node/NodeUnstageVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeUnstageVolume(ctx, req.(*NodeUnstageVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodePublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodePublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodePublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Node/NodePublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodePublishVolume(ctx, req.(*NodePublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeUnpublishVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeUnpublishVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeUnpublishVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Node/NodeUnpublishVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeUnpublishVolume(ctx, req.(*NodeUnpublishVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeGetVolumeStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeGetVolumeStatsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeGetVolumeStats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Node/NodeGetVolumeStats", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeGetVolumeStats(ctx, req.(*NodeGetVolumeStatsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeGetCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeGetCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeGetCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Node/NodeGetCapabilities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeGetCapabilities(ctx, req.(*NodeGetCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Node_NodeGetInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeGetInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServer).NodeGetInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/csitest.v1.Node/NodeGetInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServer).NodeGetInfo(ctx, req.(*NodeGetInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Node_serviceDesc = grpc.ServiceDesc{ + ServiceName: "csitest.v1.Node", + HandlerType: (*NodeServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "NodeStageVolume", + Handler: _Node_NodeStageVolume_Handler, + }, + { + MethodName: "NodeUnstageVolume", + Handler: _Node_NodeUnstageVolume_Handler, + }, + { + MethodName: "NodePublishVolume", + Handler: _Node_NodePublishVolume_Handler, + }, + { + MethodName: "NodeUnpublishVolume", + Handler: _Node_NodeUnpublishVolume_Handler, + }, + { + MethodName: "NodeGetVolumeStats", + Handler: _Node_NodeGetVolumeStats_Handler, + }, + { + MethodName: "NodeGetCapabilities", + Handler: _Node_NodeGetCapabilities_Handler, + }, + { + MethodName: "NodeGetInfo", + Handler: _Node_NodeGetInfo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest.proto", +} + +func init() { + proto.RegisterFile("github.com/kubernetes-csi/csi-lib-utils/protosanitizer/test/csitest.proto", fileDescriptor_csitest_38acc6c7572d95d8) +} + +var fileDescriptor_csitest_38acc6c7572d95d8 = []byte{ + // 3225 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3a, 0x4d, 0x6c, 0x1b, 0xc7, + 0xd5, 0x5a, 0xfe, 0xe8, 0xe7, 0x51, 0x62, 0xe8, 0x91, 0x2c, 0xd3, 0x6b, 0xc7, 0x92, 0x37, 0x76, + 0xec, 0x38, 0x31, 0x15, 0xcb, 0xf8, 0xbe, 0x26, 0x69, 0x1d, 0x9b, 0xa2, 0x68, 0x89, 0x35, 0x45, + 0x29, 0xbb, 0x94, 0x52, 0x05, 0x49, 0x16, 0x2b, 0x72, 0x44, 0x2d, 0x4c, 0xee, 0x32, 0xbb, 0x4b, + 0xc5, 0x0a, 0x10, 0xa0, 0xb7, 0x02, 0x3d, 0x16, 0x28, 0x50, 0xa0, 0x87, 0xde, 0x0a, 0xb4, 0xd7, + 0xf6, 0x12, 0xf4, 0x58, 0x14, 0xbd, 0xf5, 0x50, 0xa0, 0xe8, 0xa5, 0xa7, 0x5e, 0x7a, 0x28, 0xd0, + 0x16, 0xbd, 0xb5, 0x01, 0x8a, 0x62, 0x76, 0x66, 0x97, 0x3b, 0xbb, 0xcb, 0x3f, 0xcb, 0x41, 0x0e, + 0x3d, 0x91, 0xfb, 0xe6, 0xbd, 0x37, 0x6f, 0xde, 0xbc, 0xf7, 0xe6, 0xbd, 0x37, 0x03, 0x95, 0x96, + 0xee, 0x9c, 0xf4, 0x8e, 0x0a, 0x0d, 0xb3, 0xb3, 0xf6, 0xb4, 0x77, 0x84, 0x2d, 0x03, 0x3b, 0xd8, + 0xbe, 0xdb, 0xb0, 0xf5, 0xb5, 0x86, 0xad, 0xdf, 0x6d, 0xeb, 0x47, 0x77, 0x7b, 0x8e, 0xde, 0xb6, + 0xd7, 0xba, 0x96, 0xe9, 0x98, 0xb6, 0x66, 0xe8, 0x8e, 0xfe, 0x19, 0xb6, 0xd6, 0x1c, 0x6c, 0x3b, + 0x04, 0x83, 0xfc, 0x16, 0xdc, 0x31, 0x04, 0xde, 0xe7, 0xe9, 0x3d, 0x71, 0xb5, 0x65, 0x9a, 0xad, + 0x36, 0xa6, 0x54, 0x47, 0xbd, 0xe3, 0xb5, 0x26, 0xb6, 0x1b, 0x96, 0xde, 0x75, 0x4c, 0x8b, 0x62, + 0x8b, 0x2b, 0x61, 0x0c, 0x47, 0xef, 0x60, 0xdb, 0xd1, 0x3a, 0x5d, 0x86, 0x70, 0x2d, 0x8c, 0xf0, + 0xa9, 0xa5, 0x75, 0xbb, 0xd8, 0xb2, 0xd9, 0x78, 0xf9, 0x9c, 0x92, 0x53, 0x36, 0xd2, 0x32, 0x2c, + 0x6d, 0x61, 0x67, 0xaf, 0xdd, 0x6b, 0xe9, 0x46, 0xc5, 0x38, 0x36, 0x65, 0xfc, 0x49, 0x0f, 0xdb, + 0x8e, 0xf4, 0x27, 0x01, 0x2e, 0x86, 0x06, 0xec, 0xae, 0x69, 0xd8, 0x18, 0x21, 0x48, 0x19, 0x5a, + 0x07, 0xe7, 0x85, 0x55, 0xe1, 0xf6, 0x9c, 0xec, 0xfe, 0x47, 0x37, 0x21, 0x7b, 0x8a, 0x8d, 0xa6, + 0x69, 0xa9, 0xa7, 0xd8, 0xb2, 0x75, 0xd3, 0xc8, 0x27, 0xdc, 0xd1, 0x05, 0x0a, 0x3d, 0xa0, 0x40, + 0xf4, 0x04, 0x66, 0x3b, 0x9a, 0xa1, 0x1f, 0x63, 0xdb, 0xc9, 0x27, 0x57, 0x93, 0xb7, 0x33, 0xeb, + 0x6b, 0x85, 0xbe, 0xd6, 0x0a, 0xb1, 0xf3, 0x15, 0x76, 0x18, 0x45, 0xd9, 0x70, 0xac, 0x33, 0xd9, + 0x67, 0x20, 0x7e, 0x13, 0x16, 0xb8, 0x21, 0x94, 0x83, 0xe4, 0x53, 0x7c, 0xc6, 0xe4, 0x22, 0x7f, + 0xd1, 0x12, 0xa4, 0x4f, 0xb5, 0x76, 0x0f, 0x33, 0x69, 0xe8, 0xc7, 0x3b, 0x89, 0xb7, 0x04, 0xe9, + 0x1a, 0x5c, 0xf5, 0x67, 0x2b, 0x69, 0x5d, 0xed, 0x48, 0x6f, 0xeb, 0x8e, 0x8e, 0x6d, 0x6f, 0xf9, + 0x1a, 0xbc, 0x3c, 0x60, 0x9c, 0x69, 0xe1, 0x11, 0xcc, 0x37, 0x02, 0xf0, 0xbc, 0xe0, 0x2e, 0xe7, + 0x6a, 0x70, 0x39, 0x21, 0xea, 0x33, 0x99, 0xa3, 0x90, 0xfe, 0x2d, 0x40, 0x2e, 0x8c, 0x82, 0x1e, + 0xc1, 0x8c, 0x8d, 0xad, 0x53, 0xbd, 0x41, 0xf5, 0x9b, 0x59, 0xbf, 0x31, 0x8c, 0x63, 0x41, 0xa1, + 0xb8, 0xdb, 0x53, 0xb2, 0x47, 0x26, 0xfe, 0x58, 0x80, 0x19, 0x06, 0x46, 0x0f, 0x20, 0xe5, 0x9c, + 0x75, 0x29, 0xab, 0xec, 0xfa, 0x6b, 0xe3, 0xb0, 0x2a, 0xd4, 0xcf, 0xba, 0x58, 0x76, 0xc9, 0xa4, + 0xf7, 0x20, 0x45, 0xbe, 0x50, 0x06, 0x66, 0xf6, 0x6b, 0x4f, 0x6a, 0xbb, 0xef, 0xd7, 0x72, 0x53, + 0x68, 0x19, 0x50, 0x69, 0xb7, 0x56, 0x97, 0x77, 0xab, 0xd5, 0xb2, 0xac, 0x2a, 0x65, 0xf9, 0xa0, + 0x52, 0x2a, 0xe7, 0x04, 0x74, 0x03, 0x56, 0x0f, 0x76, 0xab, 0xfb, 0x3b, 0x65, 0xb5, 0x58, 0x2a, + 0x95, 0x15, 0xa5, 0xb2, 0x51, 0xa9, 0x56, 0xea, 0x87, 0x6a, 0x69, 0xb7, 0xa6, 0xd4, 0xe5, 0x62, + 0xa5, 0x56, 0x57, 0x72, 0x89, 0x8d, 0x69, 0x2a, 0x91, 0x94, 0x85, 0xf9, 0x3d, 0xcb, 0x3c, 0xc2, + 0x9e, 0xbe, 0x8b, 0xb0, 0xc0, 0xbe, 0x99, 0x7e, 0xdf, 0x84, 0xb4, 0x85, 0xb5, 0xe6, 0x19, 0x53, + 0x83, 0x58, 0xa0, 0xee, 0x50, 0xf0, 0xdc, 0xa1, 0xb0, 0x61, 0x9a, 0xed, 0x03, 0xb2, 0x9f, 0x32, + 0x45, 0x94, 0xbe, 0x9c, 0x86, 0xc5, 0x92, 0x85, 0x35, 0x07, 0x1f, 0x98, 0xed, 0x5e, 0xc7, 0x63, + 0x1d, 0x6b, 0xaf, 0x8f, 0x20, 0x4b, 0xf6, 0xa2, 0xa1, 0x3b, 0x67, 0xaa, 0xa5, 0x19, 0x2d, 0x6a, + 0x21, 0x99, 0xf5, 0xcb, 0x41, 0x15, 0x95, 0x18, 0x86, 0x4c, 0x10, 0xe4, 0x85, 0x46, 0xf0, 0x13, + 0xed, 0xc0, 0xe2, 0xa9, 0x3b, 0x8d, 0xca, 0x99, 0x41, 0x32, 0x6a, 0x06, 0x54, 0x9a, 0x80, 0x19, + 0xa0, 0x53, 0x1e, 0xa2, 0x63, 0x1b, 0xed, 0x02, 0x74, 0x35, 0x4b, 0xeb, 0x60, 0x07, 0x5b, 0x76, + 0x3e, 0x15, 0xf5, 0x8d, 0x98, 0x95, 0x15, 0xf6, 0x7c, 0x0a, 0xea, 0x1b, 0x01, 0x16, 0xe8, 0x3d, + 0x98, 0xb3, 0x31, 0x6e, 0x58, 0x18, 0x3b, 0x76, 0x3e, 0xed, 0xf2, 0x2b, 0x8c, 0xe2, 0xa7, 0x78, + 0x04, 0x2e, 0xbb, 0x8d, 0xe4, 0x8f, 0x36, 0x04, 0xb9, 0xcf, 0x05, 0x29, 0x70, 0xd1, 0x5b, 0xb2, + 0x69, 0x38, 0xd8, 0x70, 0x54, 0xdb, 0xec, 0x59, 0x0d, 0x9c, 0x9f, 0x76, 0x75, 0xb7, 0x12, 0xb3, + 0x68, 0x8a, 0xa7, 0xb8, 0x68, 0x32, 0x53, 0x18, 0x07, 0x44, 0x1f, 0x83, 0xa8, 0x35, 0x1a, 0xd8, + 0xb6, 0x75, 0xaa, 0x1d, 0xd5, 0xc2, 0x9f, 0xf4, 0x74, 0x0b, 0x77, 0xb0, 0xe1, 0xd8, 0xf9, 0x99, + 0x28, 0xe7, 0xba, 0xd9, 0x35, 0xdb, 0x66, 0xeb, 0x4c, 0xee, 0xe3, 0xc9, 0x97, 0x39, 0x16, 0x81, + 0x11, 0x1b, 0xbd, 0x06, 0x59, 0x03, 0x7f, 0xaa, 0xda, 0x64, 0x11, 0x8e, 0xaa, 0x1b, 0x4e, 0x7e, + 0x76, 0x55, 0xb8, 0x9d, 0xa4, 0x8b, 0x9b, 0x37, 0xf0, 0xa7, 0x8a, 0x3b, 0x52, 0x31, 0x1c, 0xf4, + 0x11, 0xe4, 0x3a, 0xda, 0xd9, 0x11, 0xf6, 0x90, 0x3b, 0x5a, 0x37, 0x3f, 0xe7, 0x6a, 0xee, 0xfe, + 0x28, 0xcd, 0xed, 0x10, 0x3a, 0xca, 0x69, 0x47, 0xeb, 0xd2, 0xdd, 0xc8, 0x76, 0x38, 0xa0, 0xf8, + 0x00, 0x5e, 0x0a, 0x6d, 0xd8, 0x24, 0x11, 0x4b, 0xfc, 0x16, 0x64, 0xf9, 0xfd, 0x99, 0x88, 0x5a, + 0x85, 0xc5, 0x18, 0x19, 0x83, 0x2c, 0x92, 0x94, 0xc5, 0x7a, 0x90, 0xc5, 0x28, 0x4b, 0x0e, 0x04, + 0xd4, 0x2f, 0x13, 0xb0, 0x18, 0xb3, 0xe9, 0xa8, 0x0a, 0xb3, 0xb6, 0xa1, 0x75, 0xed, 0x13, 0xd3, + 0x61, 0xae, 0x5c, 0x18, 0x61, 0x27, 0x05, 0x85, 0xe1, 0xd3, 0xcf, 0xed, 0x29, 0xd9, 0xe7, 0x80, + 0x1e, 0xc3, 0x34, 0x35, 0x22, 0x26, 0xde, 0x1b, 0xa3, 0x78, 0x51, 0x98, 0xcf, 0x89, 0x51, 0xa3, + 0xfb, 0xb0, 0x68, 0x60, 0xdb, 0xc1, 0x4d, 0x6f, 0xaf, 0x8f, 0x75, 0xdc, 0x6e, 0xe6, 0x93, 0x44, + 0x6d, 0xd4, 0x34, 0x2e, 0xd0, 0x71, 0xaa, 0xaf, 0xc7, 0x64, 0x54, 0xbc, 0x07, 0x59, 0x5e, 0x34, + 0xb4, 0x02, 0x19, 0x4f, 0x34, 0x55, 0x6f, 0xb2, 0x9d, 0x00, 0x0f, 0x54, 0x69, 0x8a, 0x1f, 0xc3, + 0x7c, 0x50, 0x02, 0x74, 0x05, 0xe6, 0x98, 0x0b, 0xf9, 0xe8, 0xb3, 0x14, 0x50, 0x69, 0xa2, 0x7b, + 0x80, 0x4c, 0x03, 0x9b, 0xc7, 0xbc, 0x4c, 0x89, 0xbe, 0x4c, 0x39, 0x77, 0x38, 0x20, 0x92, 0x1f, + 0x4e, 0x37, 0x60, 0x89, 0x37, 0x4b, 0x16, 0x45, 0xef, 0xf8, 0xfa, 0xa2, 0xba, 0x47, 0x51, 0x7d, + 0x79, 0x3a, 0x91, 0xfe, 0x9c, 0x82, 0x5c, 0x78, 0x87, 0xd1, 0x23, 0x48, 0x1f, 0xb5, 0xcd, 0xc6, + 0x53, 0x46, 0x7f, 0x7b, 0x98, 0x39, 0x14, 0x36, 0x08, 0x26, 0x85, 0x6e, 0x4f, 0xc9, 0x94, 0x90, + 0x70, 0xe8, 0x98, 0x3d, 0xc3, 0x61, 0x3b, 0x36, 0x9c, 0xc3, 0x0e, 0xc1, 0xec, 0x73, 0x70, 0x09, + 0xd1, 0x36, 0x64, 0xa8, 0x7f, 0xab, 0x1d, 0xb3, 0x89, 0xdd, 0x4d, 0xca, 0xac, 0xdf, 0x1a, 0xca, + 0xa7, 0xe8, 0xe2, 0xef, 0x98, 0x4d, 0x2c, 0x83, 0xe6, 0xff, 0x47, 0xaf, 0xc2, 0xbc, 0x66, 0x59, + 0xda, 0x19, 0xd3, 0x70, 0x3e, 0xd5, 0xd7, 0x6d, 0xc6, 0x1d, 0xa0, 0xba, 0x15, 0x17, 0x20, 0x13, + 0x58, 0x8b, 0xb8, 0x05, 0x99, 0x80, 0x60, 0xe8, 0x12, 0xcc, 0x1c, 0xdb, 0xaa, 0x7f, 0xb0, 0xce, + 0xc9, 0xd3, 0xc7, 0xb6, 0x7b, 0x4e, 0xae, 0x40, 0xc6, 0x95, 0x58, 0x3d, 0x6e, 0x6b, 0x2d, 0x3b, + 0x9f, 0x58, 0x4d, 0x12, 0x73, 0x70, 0x41, 0x8f, 0x09, 0x44, 0xfc, 0x87, 0x00, 0xd0, 0x17, 0x0d, + 0x3d, 0x82, 0x94, 0xbb, 0x22, 0x7a, 0x3c, 0xbf, 0x31, 0xe6, 0x8a, 0x0a, 0xee, 0xb2, 0x5c, 0x4a, + 0xe9, 0x27, 0x02, 0xa4, 0x5c, 0x56, 0xe1, 0x23, 0x5a, 0xa9, 0xd4, 0xb6, 0xaa, 0x65, 0xb5, 0xb6, + 0xbb, 0x59, 0x56, 0xdf, 0x97, 0x2b, 0xf5, 0xb2, 0x9c, 0x13, 0xd0, 0x15, 0xb8, 0x14, 0x84, 0xcb, + 0xe5, 0xe2, 0x66, 0x59, 0x56, 0x77, 0x6b, 0xd5, 0xc3, 0x5c, 0x02, 0x89, 0xb0, 0xbc, 0xb3, 0x5f, + 0xad, 0x57, 0xa2, 0x63, 0x49, 0x74, 0x15, 0xf2, 0x81, 0x31, 0xc6, 0x83, 0xb1, 0x4d, 0x11, 0xb6, + 0x81, 0x51, 0xfa, 0x97, 0x0d, 0xa6, 0x37, 0x16, 0xfc, 0xcd, 0x73, 0x0d, 0xf5, 0x7d, 0x58, 0xe0, + 0x8e, 0x55, 0x92, 0x39, 0xb2, 0x88, 0xdf, 0x54, 0x8f, 0xce, 0x1c, 0x37, 0x93, 0x22, 0xc1, 0x68, + 0xc1, 0x83, 0x6e, 0x10, 0x20, 0x51, 0x6d, 0x5b, 0xef, 0xe8, 0x0e, 0xc3, 0x49, 0xb8, 0x38, 0xe0, + 0x82, 0x5c, 0x04, 0xe9, 0xaf, 0x09, 0x98, 0x66, 0xfb, 0x73, 0x33, 0x70, 0xb8, 0x73, 0x2c, 0x3d, + 0x28, 0x65, 0xc9, 0xf9, 0x62, 0x22, 0xe4, 0x8b, 0x55, 0xc8, 0x06, 0xcf, 0xba, 0x67, 0x5e, 0xbe, + 0x7a, 0x33, 0xba, 0x49, 0xc1, 0xb8, 0xf3, 0x8c, 0x65, 0xa9, 0x0b, 0xa7, 0x41, 0x18, 0x7a, 0x0c, + 0xd9, 0xd0, 0x91, 0x99, 0x1a, 0xef, 0xc8, 0x5c, 0x68, 0x70, 0xc1, 0xb4, 0x0c, 0x8b, 0xde, 0x49, + 0xd7, 0xc6, 0xaa, 0xc3, 0x4e, 0x42, 0x76, 0xbc, 0x2f, 0xc5, 0x9e, 0x92, 0xa8, 0x4f, 0xe0, 0xc1, + 0xc4, 0x47, 0x80, 0xa2, 0x32, 0x4f, 0x94, 0x3e, 0x7f, 0x0e, 0x8b, 0x31, 0xe7, 0x30, 0x5a, 0x87, + 0x39, 0x77, 0xdb, 0x88, 0x1c, 0x2c, 0x23, 0x8e, 0x97, 0xaa, 0x8f, 0x46, 0x68, 0xba, 0x16, 0x3e, + 0xc6, 0x96, 0x85, 0x9b, 0xae, 0xcb, 0x0c, 0xa4, 0xf1, 0xd1, 0xa4, 0xef, 0x09, 0x30, 0xeb, 0xc1, + 0xd1, 0xbb, 0x30, 0x6b, 0xe3, 0x16, 0xcd, 0x17, 0xe8, 0x9c, 0x52, 0x1c, 0x7d, 0x41, 0x61, 0x48, + 0xac, 0x8e, 0xf0, 0x68, 0x48, 0x1d, 0xc1, 0x0d, 0x4d, 0xa4, 0x88, 0x5f, 0x09, 0xb0, 0xb8, 0x89, + 0xdb, 0x38, 0x9c, 0x74, 0x0e, 0x0d, 0xf4, 0x4f, 0x48, 0x92, 0x4f, 0x02, 0x8d, 0xcd, 0x16, 0xcc, + 0xb9, 0x7e, 0x0c, 0xbb, 0x02, 0x8d, 0x4b, 0xc1, 0xbc, 0xcc, 0xe3, 0x20, 0xbe, 0x03, 0xf3, 0xc1, + 0xd1, 0x89, 0xa4, 0x5f, 0x86, 0x25, 0x7e, 0x36, 0x7a, 0x6c, 0x48, 0xff, 0x4a, 0xc2, 0x35, 0x62, + 0x1b, 0x96, 0xd9, 0x6e, 0x63, 0x6b, 0xaf, 0x77, 0xd4, 0xd6, 0xed, 0x93, 0x09, 0x16, 0x78, 0x09, + 0x66, 0x0c, 0xb3, 0x19, 0x70, 0xac, 0x69, 0xf2, 0x59, 0x69, 0xa2, 0x0a, 0x5c, 0x08, 0x67, 0xcd, + 0x67, 0x2c, 0xa0, 0x0f, 0xcf, 0x34, 0x72, 0xa7, 0xe1, 0x93, 0x49, 0x84, 0x59, 0x92, 0xf7, 0x9b, + 0x46, 0xfb, 0xcc, 0xf5, 0xa6, 0x59, 0xd9, 0xff, 0x46, 0x07, 0x7d, 0x05, 0x53, 0xdf, 0xf8, 0x06, + 0x97, 0xc0, 0x0d, 0x5d, 0xd9, 0x10, 0x5d, 0xa3, 0x66, 0x24, 0x2a, 0x4c, 0xbb, 0xec, 0x1f, 0x4c, + 0xc0, 0x7e, 0x64, 0xb4, 0x38, 0xcf, 0x8e, 0xbe, 0x00, 0xd7, 0xfe, 0x9d, 0x00, 0x2b, 0x03, 0x97, + 0xc0, 0xd2, 0x8a, 0x13, 0x78, 0xa9, 0x4b, 0x07, 0x7c, 0x45, 0x50, 0xcf, 0x7b, 0x38, 0x96, 0x22, + 0x58, 0x61, 0xcf, 0xa0, 0x9c, 0x2a, 0xb2, 0x5d, 0x0e, 0x28, 0x16, 0x61, 0x31, 0x06, 0x6d, 0xa2, + 0x05, 0xfd, 0x4d, 0x80, 0xd5, 0xbe, 0x28, 0xfb, 0x46, 0xf7, 0xc5, 0x99, 0xf3, 0x77, 0xfa, 0x76, + 0x46, 0x8f, 0x87, 0xb7, 0xe3, 0xd7, 0x1f, 0x3f, 0xe9, 0x57, 0xe5, 0xd5, 0xaf, 0xc0, 0xf5, 0x21, + 0x53, 0x33, 0x17, 0xff, 0x7b, 0x0a, 0xae, 0x1f, 0x68, 0x6d, 0xbd, 0xe9, 0x27, 0x8d, 0x31, 0x6d, + 0x90, 0xe1, 0x6a, 0x69, 0x45, 0xbc, 0x81, 0x46, 0xb3, 0x47, 0x9c, 0x27, 0x8f, 0x9a, 0x63, 0x8c, + 0xe3, 0xf3, 0x05, 0xd7, 0xda, 0x1f, 0xc5, 0xd4, 0xda, 0x0f, 0x26, 0x93, 0x79, 0x58, 0xe5, 0x7d, + 0x18, 0x0e, 0x3e, 0xef, 0x4c, 0xc6, 0x7b, 0x88, 0x55, 0x9c, 0xdb, 0xbb, 0xcf, 0x5b, 0x84, 0x9e, + 0xc7, 0x2c, 0x7f, 0x9f, 0x02, 0x69, 0xd8, 0xea, 0x59, 0x6c, 0x39, 0x80, 0xb9, 0x86, 0x69, 0x1c, + 0xeb, 0x56, 0x07, 0x37, 0x59, 0xd5, 0xf1, 0xd6, 0xb8, 0x0a, 0x64, 0x81, 0xa5, 0xe4, 0xd1, 0xcb, + 0x7d, 0x56, 0x28, 0x0f, 0x33, 0x1d, 0x6c, 0xdb, 0x5a, 0xcb, 0x13, 0xcd, 0xfb, 0x14, 0xbf, 0x48, + 0xc2, 0x9c, 0x4f, 0x82, 0xac, 0x88, 0x55, 0xd3, 0xd0, 0xf6, 0xe4, 0x79, 0x85, 0x78, 0x7e, 0x03, + 0x4f, 0x3c, 0xa7, 0x81, 0x9f, 0x70, 0x06, 0x4e, 0xdd, 0x64, 0xfb, 0xb9, 0xc5, 0x1f, 0x62, 0xeb, + 0x5f, 0xbb, 0x41, 0x4a, 0x1f, 0x02, 0xaa, 0xea, 0x36, 0xab, 0xcc, 0xfc, 0xb0, 0x45, 0x0a, 0x31, + 0xed, 0x99, 0x8a, 0x0d, 0xc7, 0xd2, 0x59, 0xfa, 0x9f, 0x96, 0xa1, 0xa3, 0x3d, 0x2b, 0x53, 0x08, + 0x29, 0x11, 0x6c, 0x47, 0xb3, 0x1c, 0xdd, 0x68, 0xa9, 0x8e, 0xf9, 0x14, 0xfb, 0xfd, 0x6a, 0x0f, + 0x5a, 0x27, 0x40, 0xe9, 0xe7, 0x02, 0x2c, 0x72, 0xec, 0x99, 0x8d, 0x3e, 0x84, 0x99, 0x3e, 0xef, + 0x48, 0x59, 0x10, 0x43, 0x51, 0xa0, 0xaa, 0xf3, 0xa8, 0xd0, 0xcb, 0x00, 0x06, 0x7e, 0xe6, 0x70, + 0x73, 0xcf, 0x11, 0x88, 0x3b, 0xaf, 0x78, 0x1f, 0xd2, 0x54, 0x15, 0x93, 0xd4, 0xef, 0x5f, 0x24, + 0x00, 0x6d, 0x61, 0xc7, 0x2f, 0xaf, 0x98, 0x2e, 0x06, 0xd8, 0x96, 0xf0, 0x9c, 0xb6, 0x55, 0xe3, + 0x6c, 0x2b, 0x11, 0x6d, 0x2c, 0x46, 0x45, 0x18, 0x1a, 0x2d, 0x07, 0x94, 0x34, 0x34, 0x27, 0x1c, + 0xbf, 0xa4, 0x39, 0xa7, 0x19, 0x6d, 0xc2, 0x22, 0x27, 0x37, 0xdb, 0xe7, 0xbb, 0x80, 0xb4, 0x53, + 0x4d, 0x6f, 0x6b, 0x44, 0x36, 0xaf, 0x7a, 0x64, 0xd5, 0xe4, 0x05, 0x7f, 0xc4, 0x23, 0x93, 0xa4, + 0x60, 0xa2, 0xc1, 0xf8, 0x85, 0x2f, 0x16, 0xba, 0xc1, 0xc3, 0x39, 0x82, 0xc3, 0xe6, 0x7d, 0x12, + 0x7b, 0xb9, 0x70, 0x2b, 0x3e, 0xb9, 0x60, 0x8d, 0xfb, 0x81, 0xf7, 0x0c, 0xff, 0x49, 0xc0, 0x95, + 0x21, 0xd8, 0xe8, 0x21, 0x24, 0xad, 0x6e, 0x83, 0x19, 0xd8, 0xeb, 0x63, 0xce, 0x51, 0x90, 0xf7, + 0x4a, 0xdb, 0x53, 0x32, 0xa1, 0x14, 0x7f, 0x98, 0x80, 0xa4, 0xbc, 0x57, 0x42, 0x9b, 0xdc, 0x6d, + 0xc3, 0x9b, 0x13, 0x70, 0x0a, 0x5e, 0x3a, 0xfc, 0x56, 0x88, 0xbb, 0x75, 0xc8, 0xc3, 0x52, 0x49, + 0x2e, 0x17, 0xeb, 0x65, 0x75, 0xb3, 0x5c, 0x2d, 0xd7, 0xcb, 0x2a, 0xbd, 0x6b, 0xc8, 0x09, 0xe8, + 0x2a, 0xe4, 0xf7, 0xf6, 0x37, 0xaa, 0x15, 0x65, 0x5b, 0xdd, 0xaf, 0x79, 0xff, 0xd8, 0x68, 0x02, + 0xe5, 0x60, 0xbe, 0x5a, 0x51, 0xea, 0x0c, 0xa0, 0xe4, 0x92, 0x04, 0xb2, 0x55, 0xae, 0xab, 0xa5, + 0xe2, 0x5e, 0xb1, 0x54, 0xa9, 0x1f, 0xe6, 0x52, 0x48, 0x84, 0x65, 0x9e, 0xb7, 0x52, 0x2b, 0xee, + 0x29, 0xdb, 0xbb, 0xf5, 0x5c, 0x1a, 0x21, 0xc8, 0xba, 0xf4, 0x1e, 0x48, 0xc9, 0x4d, 0x13, 0x0e, + 0xa5, 0xea, 0x6e, 0xcd, 0x97, 0x61, 0x06, 0x2d, 0x41, 0xce, 0x9b, 0x59, 0x2e, 0x17, 0x37, 0xdd, + 0xae, 0xc9, 0xac, 0xdf, 0x9c, 0xfb, 0x67, 0x02, 0x2e, 0xd2, 0xee, 0x9c, 0xd7, 0x3e, 0xf4, 0x7c, + 0xf3, 0x36, 0xe4, 0x68, 0x3f, 0x40, 0x0d, 0x67, 0x59, 0x59, 0x0a, 0x3f, 0xf0, 0x72, 0x2d, 0xef, + 0x12, 0x23, 0x11, 0xb8, 0xc4, 0xd8, 0x09, 0x67, 0x9f, 0x31, 0x0d, 0xfe, 0xd0, 0x8c, 0xc3, 0x8a, + 0x9b, 0xf7, 0x62, 0xd2, 0xa2, 0x7b, 0xa3, 0x39, 0x0e, 0x3b, 0x1e, 0xce, 0x53, 0xc9, 0x9c, 0xd3, + 0xa3, 0xbf, 0x0d, 0xcb, 0x61, 0x79, 0xfd, 0x9b, 0xa5, 0x70, 0x47, 0x9a, 0x0b, 0x33, 0x3e, 0xbe, + 0x8f, 0x25, 0xfd, 0x51, 0x80, 0x59, 0x0f, 0x4c, 0x42, 0xb7, 0xad, 0x7f, 0x86, 0xb9, 0xce, 0xd2, + 0x1c, 0x81, 0xf8, 0x8d, 0xaa, 0x60, 0x4b, 0x38, 0x11, 0x6e, 0x09, 0xc7, 0xee, 0x79, 0x32, 0x76, + 0xcf, 0x1f, 0xc2, 0x42, 0x83, 0x2c, 0x41, 0x37, 0x0d, 0xd5, 0xd1, 0x3b, 0x5e, 0xd3, 0x28, 0x7a, + 0x15, 0x56, 0xf7, 0xae, 0x8e, 0xe5, 0x79, 0x8f, 0x80, 0x80, 0xd0, 0x2a, 0xcc, 0xbb, 0x57, 0x63, + 0xaa, 0x63, 0xaa, 0x3d, 0x1b, 0xe7, 0xd3, 0x6e, 0x99, 0x0c, 0x2e, 0xac, 0x6e, 0xee, 0xdb, 0x58, + 0xfa, 0xb5, 0x00, 0x17, 0x69, 0x07, 0x20, 0x6c, 0x9a, 0xa3, 0x5a, 0xdb, 0x41, 0xeb, 0x8b, 0x39, + 0x05, 0x62, 0x99, 0x7e, 0x55, 0x05, 0x4f, 0x1e, 0x96, 0xc3, 0xf3, 0xb1, 0x2a, 0xe7, 0x67, 0x02, + 0x2c, 0x91, 0xe3, 0xd8, 0x1b, 0x78, 0xd1, 0x19, 0xc2, 0x04, 0xbb, 0x19, 0x52, 0x68, 0x2a, 0xac, + 0x50, 0xe9, 0x97, 0x02, 0x5c, 0x0c, 0xc9, 0xca, 0x2c, 0xb6, 0x18, 0x4e, 0x37, 0x6e, 0x85, 0xd3, + 0x8d, 0x08, 0xcd, 0x84, 0x09, 0xc7, 0xdb, 0x5e, 0xc2, 0x31, 0xb9, 0x73, 0x7c, 0x37, 0x0d, 0xcb, + 0x35, 0xb3, 0x89, 0x15, 0x47, 0x6b, 0x4d, 0xd2, 0x04, 0x53, 0xa3, 0x3d, 0x04, 0x6a, 0x47, 0xff, + 0x1f, 0x9c, 0x30, 0x9e, 0xf3, 0x38, 0xad, 0x03, 0x54, 0x80, 0x45, 0xdb, 0xd1, 0x5a, 0xee, 0x06, + 0x6a, 0x56, 0x0b, 0x3b, 0x6a, 0x57, 0x73, 0x4e, 0xd8, 0xee, 0x5c, 0x60, 0x43, 0x75, 0x77, 0x64, + 0x4f, 0x73, 0x4e, 0xe2, 0x7b, 0x53, 0xa9, 0xe7, 0xea, 0x4d, 0xd5, 0xc2, 0x25, 0xe0, 0xda, 0x18, + 0x6b, 0x1a, 0x12, 0x9a, 0x3f, 0x1c, 0xd0, 0x77, 0xfa, 0xbf, 0x31, 0xd8, 0x8e, 0xee, 0x37, 0x9d, + 0xbf, 0xc7, 0xf2, 0x35, 0xb7, 0xac, 0x2e, 0xc3, 0xa5, 0xc8, 0xe2, 0x59, 0x00, 0x68, 0x41, 0x9e, + 0x0c, 0xed, 0x1b, 0xf6, 0x84, 0xe6, 0x39, 0xc0, 0x7a, 0x12, 0x03, 0xac, 0x47, 0xba, 0x02, 0x97, + 0x63, 0x26, 0x62, 0x52, 0xfc, 0x26, 0x4d, 0xc5, 0x98, 0xbc, 0x93, 0xaa, 0x0d, 0xf2, 0x92, 0xb7, + 0xc2, 0x5b, 0x1f, 0xdb, 0x6c, 0xfc, 0x2a, 0xfc, 0x64, 0x05, 0x32, 0x41, 0x3c, 0x16, 0xc8, 0x9c, + 0x11, 0x8e, 0x94, 0x3e, 0x77, 0x93, 0x77, 0x3a, 0xd4, 0xe4, 0xdd, 0xeb, 0x3b, 0xd9, 0x4c, 0x34, + 0x59, 0x19, 0xa8, 0x92, 0x21, 0x6e, 0xf6, 0x71, 0xc4, 0xcd, 0x66, 0xa3, 0xdd, 0xe3, 0x81, 0x8c, + 0xff, 0x07, 0x1c, 0x8d, 0x19, 0x79, 0x6c, 0x3b, 0x57, 0xfa, 0x00, 0x44, 0xea, 0x01, 0x93, 0x37, + 0x58, 0x43, 0x26, 0x95, 0x08, 0x9b, 0x94, 0xf4, 0x32, 0x5c, 0x89, 0xe5, 0xcd, 0xa6, 0x3e, 0xa4, + 0x72, 0x6d, 0x61, 0x56, 0x77, 0x2b, 0x8e, 0xe6, 0xd8, 0xe3, 0xce, 0xcc, 0x06, 0x83, 0x33, 0x53, + 0x90, 0x3b, 0xf3, 0x13, 0xba, 0xaa, 0x30, 0x6b, 0xbf, 0x40, 0x4c, 0xf7, 0xdc, 0x96, 0x12, 0x3d, + 0x97, 0x2f, 0x45, 0xcd, 0x7b, 0x9f, 0x0c, 0xcb, 0x14, 0x4b, 0xfa, 0x85, 0x00, 0x99, 0x00, 0x18, + 0x5d, 0x85, 0x39, 0xbf, 0x8a, 0xf4, 0x52, 0x49, 0x1f, 0x40, 0xf6, 0xc1, 0x31, 0x1d, 0xad, 0xcd, + 0x6e, 0x3b, 0xe9, 0x07, 0xa9, 0x04, 0x7a, 0x36, 0xa6, 0x59, 0x46, 0x52, 0x76, 0xff, 0xa3, 0x37, + 0x21, 0xd5, 0x33, 0x74, 0x7a, 0x9f, 0x9d, 0x8d, 0x73, 0x32, 0x77, 0xba, 0xc2, 0xbe, 0xa1, 0x3b, + 0xb2, 0x8b, 0x29, 0xdd, 0x81, 0x14, 0xf9, 0xe2, 0x8b, 0xac, 0x39, 0x48, 0x6f, 0x1c, 0xd6, 0xcb, + 0x4a, 0x4e, 0x40, 0x00, 0xd3, 0x95, 0xda, 0xee, 0x66, 0x59, 0xc9, 0x25, 0xa4, 0xab, 0xbe, 0x0a, + 0xe2, 0x0a, 0xda, 0x26, 0xdd, 0x9a, 0x41, 0xa5, 0x6c, 0x39, 0xb6, 0x94, 0xbd, 0x1e, 0x39, 0xb8, + 0x46, 0x14, 0xb1, 0x7f, 0x11, 0xe0, 0x62, 0x2c, 0x1e, 0x7a, 0x3b, 0x58, 0xbe, 0xde, 0x1c, 0xc9, + 0x37, 0x58, 0xb8, 0x7e, 0x5f, 0xa0, 0x85, 0xeb, 0xbb, 0x5c, 0xe1, 0x7a, 0x67, 0x2c, 0x1e, 0xc1, + 0x92, 0xb5, 0x34, 0xa0, 0x62, 0x55, 0xea, 0xc5, 0xad, 0xb2, 0xba, 0x5f, 0xa3, 0xbf, 0x7e, 0xc5, + 0xba, 0x04, 0x39, 0x52, 0x81, 0xb2, 0xd7, 0x72, 0x4a, 0xbd, 0xc8, 0xbd, 0x8c, 0x5b, 0x02, 0xc4, + 0xf4, 0x19, 0x7c, 0x8e, 0xf9, 0x53, 0x01, 0x16, 0x39, 0x30, 0x53, 0x6f, 0xe0, 0x6a, 0x42, 0xe0, + 0xae, 0x26, 0xd6, 0x60, 0x89, 0x24, 0xb8, 0xd4, 0x92, 0x6d, 0xb5, 0x8b, 0x2d, 0x95, 0x8c, 0x30, + 0x5b, 0xba, 0xd0, 0xd1, 0x9e, 0xb1, 0x16, 0xd5, 0x1e, 0xb6, 0x08, 0xe3, 0x17, 0xd4, 0x88, 0x59, + 0xff, 0x41, 0x02, 0x66, 0x2b, 0x4d, 0x6c, 0x38, 0x64, 0x6f, 0x0e, 0x60, 0x81, 0x7b, 0xd3, 0x89, + 0x56, 0x87, 0x3c, 0xf7, 0x74, 0x17, 0x2a, 0x5e, 0x1f, 0xf9, 0x20, 0x54, 0x9a, 0x42, 0x46, 0xe0, + 0x6d, 0x2a, 0xd7, 0x9d, 0xba, 0x1d, 0x4b, 0x1d, 0x63, 0xb6, 0xe2, 0x6b, 0x63, 0x60, 0xfa, 0xf3, + 0xbd, 0x0b, 0x69, 0xf7, 0x75, 0x22, 0xca, 0x73, 0x4f, 0x28, 0x03, 0x0f, 0x18, 0xc5, 0xcb, 0x31, + 0x23, 0x1e, 0xfd, 0xfa, 0x1f, 0x66, 0x01, 0xfa, 0x2d, 0x10, 0xa4, 0xc0, 0x7c, 0xf0, 0xb5, 0x0e, + 0x5a, 0x19, 0xf1, 0xbc, 0x4c, 0x5c, 0x1d, 0x8c, 0xe0, 0xcb, 0xa8, 0xc0, 0x7c, 0xf0, 0x2e, 0x97, + 0x67, 0x1a, 0x73, 0xa7, 0xcc, 0x33, 0x8d, 0xbd, 0x06, 0x9e, 0x42, 0x0e, 0x5c, 0x1a, 0x70, 0x8b, + 0x87, 0xee, 0x8c, 0x7f, 0xe7, 0x29, 0xbe, 0x3e, 0xc1, 0xb5, 0xa0, 0x34, 0x85, 0x3e, 0x83, 0xcb, + 0x03, 0x2f, 0xb0, 0xd0, 0x1b, 0x93, 0x5c, 0xb1, 0x89, 0x77, 0xc7, 0xc4, 0xf6, 0xe7, 0xfe, 0x1c, + 0xc4, 0xc1, 0xdd, 0x71, 0x74, 0x77, 0xa2, 0xab, 0x1c, 0xb1, 0x30, 0x59, 0xd3, 0x5d, 0x9a, 0x42, + 0x7b, 0x90, 0x09, 0xb4, 0x8f, 0xd1, 0xb5, 0x81, 0x7d, 0x65, 0x3a, 0xc1, 0xca, 0x88, 0xbe, 0x33, + 0xe5, 0x18, 0x68, 0x6d, 0xf2, 0x1c, 0xa3, 0xbd, 0x5a, 0x9e, 0x63, 0x4c, 0x4f, 0x34, 0xbc, 0x3d, + 0xa1, 0xb8, 0x3f, 0x68, 0x7b, 0xe2, 0x0f, 0x8f, 0x41, 0xdb, 0x33, 0xe0, 0x30, 0x91, 0xa6, 0xd0, + 0x21, 0x64, 0xf9, 0xb6, 0x0e, 0xba, 0x3e, 0xb2, 0x45, 0x25, 0x4a, 0xc3, 0x50, 0x82, 0xac, 0xf9, + 0x2e, 0x02, 0xcf, 0x3a, 0xb6, 0xa3, 0xc1, 0xb3, 0x1e, 0xd0, 0x84, 0x98, 0x22, 0x71, 0x90, 0xab, + 0xd2, 0xf9, 0x38, 0x18, 0xd7, 0xa0, 0xe0, 0xe3, 0x60, 0x6c, 0x89, 0x2f, 0x4d, 0xad, 0x7f, 0x91, + 0x86, 0x94, 0x1b, 0xbc, 0x3f, 0x84, 0x97, 0x42, 0x15, 0x10, 0x92, 0x46, 0xd7, 0x86, 0xe2, 0x2b, + 0x43, 0x71, 0x7c, 0xf1, 0x8f, 0xe0, 0x42, 0xa4, 0xb6, 0x41, 0x37, 0xc2, 0xb4, 0x71, 0x35, 0x96, + 0x78, 0x73, 0x04, 0x56, 0x78, 0x0e, 0x3e, 0xc6, 0xdc, 0x18, 0x27, 0xf1, 0x8e, 0xce, 0x31, 0x28, + 0xae, 0x9c, 0xd0, 0x33, 0x34, 0x1c, 0x51, 0x5e, 0x8d, 0xca, 0x18, 0x1b, 0x4b, 0x6e, 0x8d, 0xc4, + 0xf3, 0x67, 0xc2, 0xfe, 0x21, 0x1e, 0xc8, 0x1a, 0x51, 0x44, 0xd0, 0xd8, 0x84, 0x55, 0x7c, 0x75, + 0x14, 0x5a, 0x78, 0x41, 0x61, 0x1f, 0x8c, 0x63, 0x10, 0xe7, 0x7d, 0xb7, 0x46, 0xe2, 0x05, 0xa3, + 0x48, 0x20, 0xfd, 0xe0, 0xa3, 0x48, 0x34, 0x5d, 0xe1, 0xa3, 0x48, 0x4c, 0xde, 0x22, 0x4d, 0x6d, + 0xcc, 0x7d, 0x30, 0xc3, 0x70, 0x8e, 0xa6, 0xdd, 0x4e, 0xe6, 0xfd, 0xff, 0x06, 0x00, 0x00, 0xff, + 0xff, 0xad, 0xaf, 0xe0, 0x83, 0x8d, 0x33, 0x00, 0x00, +} diff --git a/vendor/github.com/kubernetes-csi/drivers/Gopkg.lock b/vendor/github.com/kubernetes-csi/drivers/Gopkg.lock index ce164deb5..5573b3844 100644 --- a/vendor/github.com/kubernetes-csi/drivers/Gopkg.lock +++ b/vendor/github.com/kubernetes-csi/drivers/Gopkg.lock @@ -3,303 +3,245 @@ [[projects]] branch = "master" - digest = "1:c0bec5f9b98d0bc872ff5e834fac186b807b656683bd29cb82fb207a1513fabb" name = "github.com/beorn7/perks" packages = ["quantile"] - pruneopts = "" revision = "3a771d992973f24aa725d07868b467d1ddfceafb" [[projects]] - digest = "1:93147eb1d6f08d39f2c0efe3d29ee043bda72be7a8b3b367eb08c72c18524638" name = "github.com/container-storage-interface/spec" packages = ["lib/go/csi"] - pruneopts = "" revision = "ed0bb0e1557548aa028307f48728767cfe8f6345" version = "v1.0.0" [[projects]] - digest = "1:0deddd908b6b4b768cfc272c16ee61e7088a60f7fe2f06c547bd3d8e1f8b8e77" name = "github.com/davecgh/go-spew" packages = ["spew"] - pruneopts = "" revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73" version = "v1.1.1" [[projects]] - digest = "1:2c87cf00343faf42f84cbda2e475281542497a250a85c5cfa50747f55028e2d8" name = "github.com/docker/distribution" packages = [ "digestset", - "reference", + "reference" ] - pruneopts = "" revision = "5db89f0ca68677abc5eefce8f2a0a772c98ba52d" [[projects]] - digest = "1:6e73003ecd35f4487a5e88270d3ca0a81bc80dc88053ac7e4dcfec5fba30d918" name = "github.com/gogo/protobuf" packages = [ "proto", - "sortkeys", + "sortkeys" ] - pruneopts = "" revision = "636bf0302bc95575d69441b25a2603156ffdddf1" version = "v1.1.1" [[projects]] branch = "master" - digest = "1:107b233e45174dbab5b1324201d092ea9448e58243ab9f039e4c0f332e121e3a" name = "github.com/golang/glog" packages = ["."] - pruneopts = "" revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" [[projects]] branch = "master" - digest = "1:aa2251148505e561bfa8cd6b69a319b37761da57b0b25529c4af08389559e3b9" name = "github.com/golang/groupcache" packages = ["lru"] - pruneopts = "" revision = "c65c006176ff7ff98bb916961c7abbc6b0afc0aa" [[projects]] - digest = "1:3dd078fda7500c341bc26cfbc6c6a34614f295a2457149fc1045cab767cbcf18" name = "github.com/golang/protobuf" packages = [ + "descriptor", "proto", "protoc-gen-go/descriptor", "ptypes", "ptypes/any", "ptypes/duration", "ptypes/timestamp", - "ptypes/wrappers", + "ptypes/wrappers" ] - pruneopts = "" revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" version = "v1.2.0" [[projects]] branch = "master" - digest = "1:1e5b1e14524ed08301977b7b8e10c719ed853cbf3f24ecb66fae783a46f207a6" name = "github.com/google/btree" packages = ["."] - pruneopts = "" revision = "4030bb1f1f0c35b30ca7009e9ebd06849dd45306" [[projects]] branch = "master" - digest = "1:754f77e9c839b24778a4b64422236d38515301d2baeb63113aa3edc42e6af692" name = "github.com/google/gofuzz" packages = ["."] - pruneopts = "" revision = "24818f796faf91cd76ec7bddd72458fbced7a6c1" [[projects]] - digest = "1:5247b135b5492aa232a731acdcb52b08f32b874cb398f21ab460396eadbe866b" name = "github.com/google/uuid" packages = ["."] - pruneopts = "" revision = "d460ce9f8df2e77fb1ba55ca87fafed96c607494" version = "v1.0.0" [[projects]] - digest = "1:16b2837c8b3cf045fa2cdc82af0cf78b19582701394484ae76b2c3bc3c99ad73" name = "github.com/googleapis/gnostic" packages = [ "OpenAPIv2", "compiler", - "extensions", + "extensions" ] - pruneopts = "" revision = "7c663266750e7d82587642f65e60bc4083f1f84e" version = "v0.2.0" [[projects]] branch = "master" - digest = "1:5e345eb75d8bfb2b91cfbfe02a82a79c0b2ea55cf06c5a4d180a9321f36973b4" name = "github.com/gregjones/httpcache" packages = [ ".", - "diskcache", + "diskcache" ] - pruneopts = "" revision = "c63ab54fda8f77302f8d414e19933f2b6026a089" [[projects]] - digest = "1:3313a63031ae281e5f6fd7b0bbca733dfa04d2429df86519e3b4d4c016ccb836" name = "github.com/hashicorp/golang-lru" packages = [ ".", - "simplelru", + "simplelru" ] - pruneopts = "" revision = "20f1fb78b0740ba8c3cb143a61e86ba5c8669768" version = "v0.5.0" [[projects]] - digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be" name = "github.com/inconshreveable/mousetrap" packages = ["."] - pruneopts = "" revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" version = "v1.0" [[projects]] - digest = "1:b79fc583e4dc7055ed86742e22164ac41bf8c0940722dbcb600f1a3ace1a8cb5" name = "github.com/json-iterator/go" packages = ["."] - pruneopts = "" revision = "1624edc4454b8682399def8740d46db5e4362ba4" version = "v1.1.5" [[projects]] - digest = "1:63722a4b1e1717be7b98fc686e0b30d5e7f734b9e93d7dee86293b6deab7ea28" + name = "github.com/kubernetes-csi/csi-lib-utils" + packages = ["protosanitizer"] + revision = "5853414e1d4771302e0df10d1870c444c2135799" + version = "v0.2.0" + +[[projects]] name = "github.com/matttproud/golang_protobuf_extensions" packages = ["pbutil"] - pruneopts = "" revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" version = "v1.0.1" [[projects]] - digest = "1:0c0ff2a89c1bb0d01887e1dac043ad7efbf3ec77482ef058ac423d13497e16fd" name = "github.com/modern-go/concurrent" packages = ["."] - pruneopts = "" revision = "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94" version = "1.0.3" [[projects]] - digest = "1:e32bdbdb7c377a07a9a46378290059822efdce5c8d96fe71940d87cb4f918855" name = "github.com/modern-go/reflect2" packages = ["."] - pruneopts = "" revision = "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd" version = "1.0.1" [[projects]] - digest = "1:5d9b668b0b4581a978f07e7d2e3314af18eb27b3fb5d19b70185b7c575723d11" name = "github.com/opencontainers/go-digest" packages = ["."] - pruneopts = "" revision = "279bed98673dd5bef374d3b6e4b09e2af76183bf" version = "v1.0.0-rc1" [[projects]] - digest = "1:a5484d4fa43127138ae6e7b2299a6a52ae006c7f803d98d717f60abf3e97192e" name = "github.com/pborman/uuid" packages = ["."] - pruneopts = "" revision = "adf5a7427709b9deb95d29d3fa8a2bf9cfd388f1" version = "v1.2" [[projects]] branch = "master" - digest = "1:c24598ffeadd2762552269271b3b1510df2d83ee6696c1e543a0ff653af494bc" name = "github.com/petar/GoLLRB" packages = ["llrb"] - pruneopts = "" revision = "53be0d36a84c2a886ca057d34b6aa4468df9ccb4" [[projects]] - digest = "1:b46305723171710475f2dd37547edd57b67b9de9f2a6267cafdd98331fd6897f" name = "github.com/peterbourgon/diskv" packages = ["."] - pruneopts = "" revision = "5f041e8faa004a95c88a202771f4cc3e991971e6" version = "v2.0.1" [[projects]] - digest = "1:256484dbbcd271f9ecebc6795b2df8cad4c458dd0f5fd82a8c2fa0c29f233411" name = "github.com/pmezard/go-difflib" packages = ["difflib"] - pruneopts = "" revision = "792786c7400a136282c1664665ae0a8db921c6c2" version = "v1.0.0" [[projects]] - digest = "1:8b2082f564fe20dbb43a621ee0d57ae2777656ab14111d100d3d92d1b5b958b9" name = "github.com/prometheus/client_golang" packages = [ "prometheus", - "prometheus/internal", + "prometheus/internal" ] - pruneopts = "" revision = "abad2d1bd44235a26707c172eab6bca5bf2dbad3" version = "v0.9.1" [[projects]] branch = "master" - digest = "1:185cf55b1f44a1bf243558901c3f06efa5c64ba62cfdcbb1bf7bbe8c3fb68561" name = "github.com/prometheus/client_model" packages = ["go"] - pruneopts = "" revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f" [[projects]] branch = "master" - digest = "1:d522feb599bd02a4b76d3ad20b91668c87028a6b5fd19a1bed994e26f6cd3c6d" name = "github.com/prometheus/common" packages = [ "expfmt", "internal/bitbucket.org/ww/goautoneg", - "model", + "model" ] - pruneopts = "" revision = "41aa239b4cce3c56ab88fc366ae8b0a6423fa239" [[projects]] branch = "master" - digest = "1:1f62ed2c173c42c1edad2e94e127318ea11b0d28c62590c82a8d2d3cde189afe" name = "github.com/prometheus/procfs" packages = [ ".", "internal/util", "nfs", - "xfs", + "xfs" ] - pruneopts = "" revision = "185b4288413d2a0dd0806f78c90dde719829e5ae" [[projects]] - digest = "1:a1403cc8a94b8d7956ee5e9694badef0e7b051af289caad1cf668331e3ffa4f6" name = "github.com/spf13/cobra" packages = ["."] - pruneopts = "" revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385" version = "v0.0.3" [[projects]] - digest = "1:cbaf13cdbfef0e4734ed8a7504f57fe893d471d62a35b982bf6fb3f036449a66" name = "github.com/spf13/pflag" packages = ["."] - pruneopts = "" revision = "298182f68c66c05229eb03ac171abe6e309ee79a" version = "v1.0.3" [[projects]] - digest = "1:c587772fb8ad29ad4db67575dad25ba17a51f072ff18a22b4f0257a4d9c24f75" name = "github.com/stretchr/testify" packages = ["assert"] - pruneopts = "" revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686" version = "v1.2.2" [[projects]] branch = "master" - digest = "1:f7be435e0ca22e2cd62b2d2542081a231685837170a87a3662abb7cdf9f3f1cd" name = "golang.org/x/crypto" packages = [ "ed25519", "ed25519/internal/edwards25519", "pbkdf2", - "ssh/terminal", + "ssh/terminal" ] - pruneopts = "" revision = "3d3f9f413869b949e48070b5bc593aa22cc2b8f2" [[projects]] branch = "master" - digest = "1:fbc2896199a45d32325e24ceb56624c7db49f9cfb068f739ee53339a8fb183b3" name = "golang.org/x/net" packages = [ "context", @@ -309,35 +251,29 @@ "http2/hpack", "idna", "internal/timeseries", - "trace", + "trace" ] - pruneopts = "" revision = "88d92db4c548972d942ac2a3531a8a9a34c82ca6" [[projects]] branch = "master" - digest = "1:51d339a1d79f5c617fba14414aefb7dfd184b8ba0ddbb9f95251430b67c8aab8" name = "golang.org/x/oauth2" packages = [ ".", - "internal", + "internal" ] - pruneopts = "" revision = "f42d05182288abf10faef86d16c0d07b8d40ea2d" [[projects]] branch = "master" - digest = "1:3f5c191d90f1cf365ff1f88e4b08eb766ee6ade1cb2e4efd7c316cf7e015ac17" name = "golang.org/x/sys" packages = [ "unix", - "windows", + "windows" ] - pruneopts = "" revision = "66b7b1311ac80bbafcd2daeef9a5e6e2cd1e2399" [[projects]] - digest = "1:5acd3512b047305d49e8763eef7ba423901e85d5dd2fd1e71778a0ea8de10bd4" name = "golang.org/x/text" packages = [ "collate", @@ -353,22 +289,18 @@ "unicode/bidi", "unicode/cldr", "unicode/norm", - "unicode/rangetable", + "unicode/rangetable" ] - pruneopts = "" revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" version = "v0.3.0" [[projects]] branch = "master" - digest = "1:14cb1d4240bcbbf1386ae763957e04e2765ec4e4ce7bb2769d05fa6faccd774e" name = "golang.org/x/time" packages = ["rate"] - pruneopts = "" revision = "85acf8d2951cb2a3bde7632f9ff273ef0379bcbd" [[projects]] - digest = "1:77d3cff3a451d50be4b52db9c7766c0d8570ba47593f0c9dc72173adb208e788" name = "google.golang.org/appengine" packages = [ "internal", @@ -377,22 +309,18 @@ "internal/log", "internal/remote_api", "internal/urlfetch", - "urlfetch", + "urlfetch" ] - pruneopts = "" revision = "4a4468ece617fc8205e99368fa2200e9d1fad421" version = "v1.3.0" [[projects]] branch = "master" - digest = "1:212d4045ef941b209a154001718705dc723bd77e0200fcea36d15ec87ed49dec" name = "google.golang.org/genproto" packages = ["googleapis/rpc/status"] - pruneopts = "" revision = "b5d43981345bdb2c233eb4bf3277847b48c6fdc6" [[projects]] - digest = "1:1293087271e314cfa2b3decededba2ecba0ff327e7b7809e00f73f616449191c" name = "google.golang.org/grpc" packages = [ ".", @@ -420,43 +348,35 @@ "resolver/passthrough", "stats", "status", - "tap", + "tap" ] - pruneopts = "" revision = "2e463a05d100327ca47ac218281906921038fd95" version = "v1.16.0" [[projects]] - digest = "1:75fb3fcfc73a8c723efde7777b40e8e8ff9babf30d8c56160d01beffea8a95a6" name = "gopkg.in/inf.v0" packages = ["."] - pruneopts = "" revision = "d2d2541c53f18d2a059457998ce2876cc8e67cbf" version = "v0.9.1" [[projects]] - digest = "1:ddc5fa8f9159bea7d1ce58143e6d8fd8054018f7bc3709940aa7f7bc92855ed9" name = "gopkg.in/square/go-jose.v2" packages = [ ".", "cipher", "json", - "jwt", + "jwt" ] - pruneopts = "" revision = "ef984e69dd356202fd4e4910d4d9c24468bdf0b8" version = "v2.1.9" [[projects]] - digest = "1:f0620375dd1f6251d9973b5f2596228cc8042e887cd7f827e4220bc1ce8c30e2" name = "gopkg.in/yaml.v2" packages = ["."] - pruneopts = "" revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" version = "v2.2.1" [[projects]] - digest = "1:5f076f6f9c3ac4f2b99d79dc7974eabd3f51be35254aa0d8c4cf920fdb9c7ff8" name = "k8s.io/api" packages = [ "admissionregistration/v1alpha1", @@ -489,23 +409,19 @@ "settings/v1alpha1", "storage/v1", "storage/v1alpha1", - "storage/v1beta1", + "storage/v1beta1" ] - pruneopts = "" revision = "fd83cbc87e7632ccd8bbab63d2b673d4e0c631cc" version = "kubernetes-1.12.0" [[projects]] branch = "master" - digest = "1:570ce571245b39b4fc8a1a5552079e00b1be3aa2c3755b7be76d3eb7d7b8c0ad" name = "k8s.io/apiextensions-apiserver" packages = ["pkg/features"] - pruneopts = "" revision = "2c43ee60e25b6e421b37db431bad60e7416a6fd4" [[projects]] branch = "master" - digest = "1:cebe5f04ee0890c78c57a957e9d69892cebe60ccda4d1001d9f759a70b1e1bd1" name = "k8s.io/apimachinery" packages = [ "pkg/api/equality", @@ -553,27 +469,23 @@ "pkg/version", "pkg/watch", "third_party/forked/golang/json", - "third_party/forked/golang/reflect", + "third_party/forked/golang/reflect" ] - pruneopts = "" revision = "2a7c9300402896b3c073f2f47df85527c94f83a0" [[projects]] - digest = "1:f129d76e4103ddcd176f1a07051eb1826922e54f489032bef8283f7f9c32c4f0" name = "k8s.io/apiserver" packages = [ "pkg/authentication/authenticator", "pkg/authentication/serviceaccount", "pkg/authentication/user", "pkg/features", - "pkg/util/feature", + "pkg/util/feature" ] - pruneopts = "" revision = "e85ad7b666fef0476185731329f4cff1536efff8" version = "kubernetes-1.12.0" [[projects]] - digest = "1:5d4153d12c3aed2c90a94262520d2498d5afa4d692554af55e65a7c5af0bc399" name = "k8s.io/client-go" packages = [ "discovery", @@ -701,43 +613,35 @@ "util/connrotation", "util/flowcontrol", "util/integer", - "util/retry", + "util/retry" ] - pruneopts = "" revision = "1638f8970cefaa404ff3a62950f88b08292b2696" version = "v9.0.0" [[projects]] branch = "master" - digest = "1:ae938748bf72ccd682e9009b6a3dcfedb695ace9cca3ef2ea9f8fd31411b3a44" name = "k8s.io/csi-api" packages = [ "pkg/apis/csi/v1alpha1", "pkg/client/clientset/versioned", "pkg/client/clientset/versioned/scheme", - "pkg/client/clientset/versioned/typed/csi/v1alpha1", + "pkg/client/clientset/versioned/typed/csi/v1alpha1" ] - pruneopts = "" revision = "3ace7a84ffef58a17488dcefe2432bbeb74a5c7b" [[projects]] - digest = "1:4f5eb833037cc0ba0bf8fe9cae6be9df62c19dd1c869415275c708daa8ccfda5" name = "k8s.io/klog" packages = ["."] - pruneopts = "" revision = "a5bc97fbc634d635061f3146511332c7e313a55a" version = "v0.1.0" [[projects]] branch = "master" - digest = "1:d3fdd2e6dafedf0cd13d327cb62c8675d1f309d5587245e3ad35b083589675af" name = "k8s.io/kube-openapi" packages = ["pkg/util/proto"] - pruneopts = "" revision = "c59034cc13d587f5ef4e85ca0ade0c1866ae8e1d" [[projects]] - digest = "1:6061aa42761235df375f20fa4a1aa6d1845cba3687575f3adb2ef3f3bc540af5" name = "k8s.io/kubernetes" packages = [ "pkg/api/legacyscheme", @@ -785,49 +689,29 @@ "pkg/volume/util/fs", "pkg/volume/util/recyclerclient", "pkg/volume/util/types", - "pkg/volume/util/volumepathhandler", + "pkg/volume/util/volumepathhandler" ] - pruneopts = "" revision = "17c77c7898218073f14c8d573582e8d2313dc740" version = "v1.12.2" [[projects]] branch = "master" - digest = "1:1aa5e3a611782785b985a64a27254bf93e9a23b24a5b9f3c4dfc49fb6e07fa39" name = "k8s.io/utils" packages = [ "exec", - "pointer", + "pointer" ] - pruneopts = "" revision = "1bd4f387aa67de2eec07a362c10bc8bd7fe74237" [[projects]] - digest = "1:321081b4a44256715f2b68411d8eda9a17f17ebfe6f0cc61d2cc52d11c08acfa" name = "sigs.k8s.io/yaml" packages = ["."] - pruneopts = "" revision = "fd68e9863619f6ec2fdd8625fe1f02e7c877e480" version = "v1.1.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - input-imports = [ - "github.com/container-storage-interface/spec/lib/go/csi", - "github.com/golang/glog", - "github.com/golang/protobuf/ptypes", - "github.com/golang/protobuf/ptypes/timestamp", - "github.com/pborman/uuid", - "github.com/spf13/cobra", - "github.com/stretchr/testify/assert", - "golang.org/x/net/context", - "google.golang.org/grpc", - "google.golang.org/grpc/codes", - "google.golang.org/grpc/status", - "k8s.io/kubernetes/pkg/util/mount", - "k8s.io/kubernetes/pkg/volume/util", - "k8s.io/utils/exec", - ] + inputs-digest = "def5c710353323b5914b2b6c19a4ffe3a328764a00ae74f8bca45931f1b2e3ca" solver-name = "gps-cdcl" solver-version = 1 diff --git a/vendor/github.com/kubernetes-csi/drivers/Gopkg.toml b/vendor/github.com/kubernetes-csi/drivers/Gopkg.toml index b9fb06153..2e27746a1 100644 --- a/vendor/github.com/kubernetes-csi/drivers/Gopkg.toml +++ b/vendor/github.com/kubernetes-csi/drivers/Gopkg.toml @@ -20,6 +20,9 @@ # name = "github.com/x/y" # version = "2.4.0" +[prune] + go-tests = true + unused-packages = true [[constraint]] name = "github.com/container-storage-interface/spec" @@ -76,3 +79,7 @@ [[override]] name = "gopkg.in/square/go-jose.v2" version = "2.1.7" + +[[constraint]] + name = "github.com/kubernetes-csi/csi-lib-utils" + version = "0.2.0" diff --git a/vendor/github.com/kubernetes-csi/drivers/SECURITY_CONTACTS b/vendor/github.com/kubernetes-csi/drivers/SECURITY_CONTACTS new file mode 100644 index 000000000..585f480fe --- /dev/null +++ b/vendor/github.com/kubernetes-csi/drivers/SECURITY_CONTACTS @@ -0,0 +1,13 @@ +# Defined below are the security contacts for this repo. +# +# They are the contact point for the Product Security Team to reach out +# to for triaging and handling of incoming issues. +# +# The below names agree to abide by the +# [Embargo Policy](https://github.com/kubernetes/sig-release/blob/master/security-release-process-documentation/security-release-process.md#embargo-policy) +# and will be removed and replaced if they violate that agreement. +# +# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE +# INSTRUCTIONS AT https://kubernetes.io/security/ + +saad-ali diff --git a/vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/README.md b/vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/README.md new file mode 100644 index 000000000..50d0df8ab --- /dev/null +++ b/vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/README.md @@ -0,0 +1,6 @@ +The .yaml files in this directory depend on the RBAC files that were +released together the CSI sidecar containers. Check the repos and/or +release notes for the CSI sidecar containers for details. + +https://kubernetes-csi.github.io/docs/ has an example that puts all +pieces together. diff --git a/vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/csi-hostpath-snpshotter.yaml b/vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/csi-hostpath-snapshotter.yaml similarity index 100% rename from vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/csi-hostpath-snpshotter.yaml rename to vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/csi-hostpath-snapshotter.yaml diff --git a/vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/csi-hostpathplugin.yaml b/vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/csi-hostpathplugin.yaml index 237b759a1..0ac5fb770 100644 --- a/vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/csi-hostpathplugin.yaml +++ b/vendor/github.com/kubernetes-csi/drivers/deploy/hostpath/csi-hostpathplugin.yaml @@ -11,7 +11,7 @@ spec: labels: app: csi-hostpathplugin spec: - serviceAccountName: csi-node-sa + serviceAccountName: csi-driver-registrar hostNetwork: true containers: - name: driver-registrar diff --git a/vendor/github.com/kubernetes-csi/drivers/pkg/csi-common/utils.go b/vendor/github.com/kubernetes-csi/drivers/pkg/csi-common/utils.go index 382e81cdc..b39132e0d 100644 --- a/vendor/github.com/kubernetes-csi/drivers/pkg/csi-common/utils.go +++ b/vendor/github.com/kubernetes-csi/drivers/pkg/csi-common/utils.go @@ -22,6 +22,7 @@ import ( "github.com/container-storage-interface/spec/lib/go/csi" "github.com/golang/glog" + "github.com/kubernetes-csi/csi-lib-utils/protosanitizer" "golang.org/x/net/context" "google.golang.org/grpc" ) @@ -94,12 +95,12 @@ func RunControllerandNodePublishServer(endpoint string, d *CSIDriver, cs csi.Con func logGRPC(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { glog.V(3).Infof("GRPC call: %s", info.FullMethod) - glog.V(5).Infof("GRPC request: %+v", req) + glog.V(5).Infof("GRPC request: %s", protosanitizer.StripSecrets(req)) resp, err := handler(ctx, req) if err != nil { glog.Errorf("GRPC error: %v", err) } else { - glog.V(5).Infof("GRPC response: %+v", resp) + glog.V(5).Infof("GRPC response: %s", protosanitizer.StripSecrets(resp)) } return resp, err } diff --git a/vendor/github.com/kubernetes-csi/drivers/pkg/hostpath/controllerserver.go b/vendor/github.com/kubernetes-csi/drivers/pkg/hostpath/controllerserver.go index 2bd8d7024..576cb1e24 100644 --- a/vendor/github.com/kubernetes-csi/drivers/pkg/hostpath/controllerserver.go +++ b/vendor/github.com/kubernetes-csi/drivers/pkg/hostpath/controllerserver.go @@ -57,9 +57,21 @@ func (cs *controllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol if len(req.GetName()) == 0 { return nil, status.Error(codes.InvalidArgument, "Name missing in request") } - if req.GetVolumeCapabilities() == nil { + caps := req.GetVolumeCapabilities() + if caps == nil { return nil, status.Error(codes.InvalidArgument, "Volume Capabilities missing in request") } + for _, cap := range caps { + if cap.GetBlock() != nil { + return nil, status.Error(codes.Unimplemented, "Block Volume not supported") + } + } + // A real driver would also need to check that the other + // fields in VolumeCapabilities are sane. The check above is + // just enough to pass the "[Testpattern: Dynamic PV (block + // volmode)] volumeMode should fail in binding dynamic + // provisioned PV to PVC" storage E2E test. + // Need to check for already existing volume name, and if found // check for the requested capacity and already allocated capacity if exVol, err := getVolumeByName(req.GetName()); err == nil { diff --git a/vendor/github.com/petar/GoLLRB/.gitignore b/vendor/github.com/petar/GoLLRB/.gitignore new file mode 100644 index 000000000..e333b2dbf --- /dev/null +++ b/vendor/github.com/petar/GoLLRB/.gitignore @@ -0,0 +1,23 @@ +syntax:glob +*.[568ao] +*.ao +*.so +*.pyc +*.swp +*.swo +._* +.nfs.* +[568a].out +*~ +*.orig +*.pb.go +core +_obj +_test +src/pkg/Make.deps +_testmain.go + +syntax:regexp +^pkg/ +^src/cmd/(.*)/6?\1$ +^.*/core.[0-9]*$ diff --git a/vendor/github.com/petar/GoLLRB/AUTHORS b/vendor/github.com/petar/GoLLRB/AUTHORS new file mode 100644 index 000000000..78d1de495 --- /dev/null +++ b/vendor/github.com/petar/GoLLRB/AUTHORS @@ -0,0 +1,4 @@ +Petar Maymounkov +Vadim Vygonets +Ian Smith +Martin Bruse diff --git a/vendor/github.com/petar/GoLLRB/LICENSE b/vendor/github.com/petar/GoLLRB/LICENSE new file mode 100644 index 000000000..b75312c78 --- /dev/null +++ b/vendor/github.com/petar/GoLLRB/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2010, Petar Maymounkov +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +(*) Redistributions of source code must retain the above copyright notice, this list +of conditions and the following disclaimer. + +(*) Redistributions in binary form must reproduce the above copyright notice, this +list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +(*) Neither the name of Petar Maymounkov nor the names of its contributors may be +used to endorse or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/petar/GoLLRB/README.md b/vendor/github.com/petar/GoLLRB/README.md new file mode 100644 index 000000000..742ca0bd5 --- /dev/null +++ b/vendor/github.com/petar/GoLLRB/README.md @@ -0,0 +1,66 @@ +# GoLLRB + +GoLLRB is a Left-Leaning Red-Black (LLRB) implementation of 2-3 balanced binary +search trees in Go Language. + +## Overview + +As of this writing and to the best of the author's knowledge, +Go still does not have a balanced binary search tree (BBST) data structure. +These data structures are quite useful in a variety of cases. A BBST maintains +elements in sorted order under dynamic updates (inserts and deletes) and can +support various order-specific queries. Furthermore, in practice one often +implements other common data structures like Priority Queues, using BBST's. + +2-3 trees (a type of BBST's), as well as the runtime-similar 2-3-4 trees, are +the de facto standard BBST algoritms found in implementations of Python, Java, +and other libraries. The LLRB method of implementing 2-3 trees is a recent +improvement over the traditional implementation. The LLRB approach was +discovered relatively recently (in 2008) by Robert Sedgewick of Princeton +University. + +GoLLRB is a Go implementation of LLRB 2-3 trees. + +## Maturity + +GoLLRB has been used in some pretty heavy-weight machine learning tasks over many gigabytes of data. +I consider it to be in stable, perhaps even production, shape. There are no known bugs. + +## Installation + +With a healthy Go Language installed, simply run `go get github.com/petar/GoLLRB/llrb` + +## Example + + package main + + import ( + "fmt" + "github.com/petar/GoLLRB/llrb" + ) + + func lessInt(a, b interface{}) bool { return a.(int) < b.(int) } + + func main() { + tree := llrb.New(lessInt) + tree.ReplaceOrInsert(1) + tree.ReplaceOrInsert(2) + tree.ReplaceOrInsert(3) + tree.ReplaceOrInsert(4) + tree.DeleteMin() + tree.Delete(4) + c := tree.IterAscend() + for { + u := <-c + if u == nil { + break + } + fmt.Printf("%d\n", int(u.(int))) + } + } + +## About + +GoLLRB was written by [Petar Maymounkov](http://pdos.csail.mit.edu/~petar/). + +Follow me on [Twitter @maymounkov](http://www.twitter.com/maymounkov)! diff --git a/vendor/github.com/petar/GoLLRB/doc/Sedgewick-LLRB.pdf b/vendor/github.com/petar/GoLLRB/doc/Sedgewick-LLRB.pdf new file mode 100644 index 000000000..a399b06ae --- /dev/null +++ b/vendor/github.com/petar/GoLLRB/doc/Sedgewick-LLRB.pdf @@ -0,0 +1,4401 @@ +%PDF-1.4 %âãÏÓ +1 0 obj <>/Outlines 348 0 R/Metadata 406 0 R/Pages 2 0 R/Type/Catalog>> endobj 348 0 obj <> endobj 406 0 obj <>stream + + + + + uuid:a1e65d06-96f2-9a40-84d3-4ac4f901a7ea + adobe:docid:indd:e8dd818f-4504-11dd-9d3e-8aa37d5afcf2 + proof:pdf + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:1f382f0a-0ae0-7240-90c9-052bfa9b93bb + uuid:D604B9AA2016DD118D05AA6D720C964E + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:f2359209-ca4b-f145-bc24-11a32d3118e1 + uuid:92F9E1E974FFDC11AC15B6426E08541E + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:725ae99a-7e76-5e45-a638-be54a8b3e099 + uuid:96F9E1E974FFDC11AC15B6426E08541E + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:46ba4750-b6d0-a148-b72a-6aac87b46fcf + uuid:39AC52ADCAFFDC11AC15B6426E08541E + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:d81eb84f-0775-844f-8950-327b309a2838 + uuid:BD14D8DC7C16DD11BCFFD65EC7B1D34C + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:852ed07c-1a0d-af4f-b9f3-759b446c18bc + uuid:B4D572641149DD119EEFF96D7801BC77 + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:b46d8aee-c25e-b541-956c-22fa803ac69c + uuid:B7D572641149DD119EEFF96D7801BC77 + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:c81f585c-6684-f14a-ae05-056a473a74d0 + uuid:1C547E781A4ADD119EEFF96D7801BC77 + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:d1fde563-235e-8e47-a158-ac3cc76aa98f + uuid:23547E781A4ADD119EEFF96D7801BC77 + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:dbaaada4-048d-4642-b37f-5659c12203ae + uuid:DAD009446E4ADD119EEFF96D7801BC77 + + + + ReferenceStream + 72.00 + 72.00 + Inches + + uuid:a7a9523b-0c40-7d47-980c-c2d7a5d1ae87 + uuid:20547E781A4ADD119EEFF96D7801BC77 + + + + + + + 2008-09-14T13:43:34-04:00 + 2008-09-14T13:43:43-04:00 + 2008-09-14T13:43:43-04:00 + Adobe InDesign CS3 (5.0) + + + + JPEG + 256 + 256 + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4AE0Fkb2JlAGQAAAAAAQUAAuMM/9sAhAAMCAgICAgMCAgMEAsLCxAUDg0NDhQY EhMTExIYFBIUFBQUEhQUGx4eHhsUJCcnJyckMjU1NTI7Ozs7Ozs7Ozs7AQ0LCxAOECIYGCIyKCEo MjsyMjIyOzs7Ozs7Ozs7Ozs7Ozs7OztAQEBAQDtAQEBAQEBAQEBAQEBAQEBAQEBAQED/wAARCAEA AMYDAREAAhEBAxEB/8QBQgAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAA AAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGx QiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSV xNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgI7AQACEQMh MRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0 ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH1+f3/9oADAMB AAIRAxEAPwDrfqx9WPq3kfVvpN9/ScG223Bxn2WPxqnOc51TC5znFkkkpKdL/mn9Vf8Aym6f/wCw tP8A6TSUr/mn9Vf/ACm6f/7C0/8ApNJSv+af1V/8pun/APsLT/6TSUr/AJp/VX/ym6f/AOwtP/pN JSv+af1V/wDKbp//ALC0/wDpNJSv+af1V/8AKbp//sLT/wCk0lK/5p/VX/ym6f8A+wtP/pNJSv8A mn9Vf/Kbp/8A7C0/+k0lK/5p/VX/AMpun/8AsLT/AOk0lK/5p/VX/wApun/+wtP/AKTSUr/mn9Vf /Kbp/wD7C0/+k0lK/wCaf1V/8pun/wDsLT/6TSUr/mn9Vf8Aym6f/wCwtP8A6TSUr/mn9Vf/ACm6 f/7C0/8ApNJSv+af1V/8pun/APsLT/6TSUr/AJp/VX/ym6f/AOwtP/pNJSv+af1V/wDKbp//ALC0 /wDpNJSv+af1V/8AKbp//sLT/wCk0lK/5p/VX/ym6f8A+wtP/pNJSv8Amn9Vf/Kbp/8A7C0/+k0l K/5p/VX/AMpun/8AsLT/AOk0lK/5p/VX/wApun/+wtP/AKTSUr/mn9Vf/Kbp/wD7C0/+k0lOb1b6 sfVuvP6KyvpOCxt2c9ljW41QD2jDzX7XAM1G5gPxCSnS+qf/AIlejf8Apvxf/PNaSnWSUpJSklKS UpJSklKSUpJSklKSUpJSklKSUpJSklKSUpJSklKSUpJSklKSUpJTk9Z/5R6F/wCnCz/2xz0lK+qf /iV6N/6b8X/zzWkp1klKSUpJSklKSUpJSklLFwaJcQAO50SUx9an/SN+8JKV61P+kb94SUr1qf8A SN+8JKV61P8ApG/eElK9an/SN+8JKV61P+kb94SUr1qf32/eElM0lKSUpJSklKSUpJSklKSU5PWf +Uehf+nCz/2xz0lK+qf/AIlejf8Apvxf/PNaSnWSUpJSklKSUpJSklKSU1epdPp6rhWYGQ5za7du 41kB3tcHiJDhy1JThf8Ajf8ARv8ATZX+cz/0kkpDk/U36s4ZaMvOtoL52i26pkxzG6sJKQ/82fqb /wCWv/sxR/5BJSv+bP1N/wDLX/2Yo/8AIJKV/wA2fqb/AOWv/sxR/wCQSU2afqN0DIrF2PlX21un a+uytzTBgwRURyElJWfUHo7HteLsmWkES5nb/rSSnpUlKSUpJSklKSUpJSklKSU5PWf+Uehf+nCz /wBsc9JSvqn/AOJXo3/pvxf/ADzWkp1klKSUpJSklKSUpJSklKSU5/VczqeJ6X7Nwvtu/d6nvDNk bdvPMyUlOF1FvVOrFjuofV/1jUCGfrO2N0T9BzfBJTT/AGM//wCdn/2bf/5NJSv2M/8A+dn/ANm3 /wDk0lK/Yz//AJ2f/Zt//k0lOnh5nXun4zMTE6F6dNc7W/aA6NxLjq6TyUlO/hW5F+LXbl0/Z7nA 76p3bTJ7hJSdJSklKSUpJSklKSUpJSklOT1n/lHoX/pws/8AbHPSUr6p/wDiV6N/6b8X/wA81pKd ZJSklKSUpJSklKSUpJSklKSU431oxq8nBqFmHbnbbQRVQ7a4e13uMA6JKeZ/ZWN/5QZ3/bp/9JpK V+ysb/ygzv8At0/+k0lK/ZWN/wCUGd/26f8A0mkp7bptbaen41bK3UhtTAKnmXM9o9rj4hJTZSUp JSklKSUpJSklKSUpJSklOT1n/lHoX/pws/8AbHPSUr6p/wDiV6N/6b8X/wA81pKdZJSO976qLLK2 eo9jHOawfnECQ35pKed/5yfWL/yjt+93/pNJSv8AnJ9Yv/KO373f+k0lOp0bqPUOoNtdn4TsEsLQ wOJO6ZnlreElOkkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKcnrP/KPQv8A04Wf +2OekpX1T/8AEr0b/wBN+L/55rSU6ySkOW4sxbnNf6RbW4iwidsA+6PJJTxn7UzP/nkq/wC2T/6T SUr9qZn/AM8lX/bJ/wDSaSlftTM/+eSr/tk/+k0lK/amZ/8APJV/2yf/AEmkpX7UzP8A55Kv+2T/ AOk0lK/amZ/88lX/AGyf/SaSlftTM/8Ankq/7ZP/AKTSUr9qZn/zyVf9sn/0mkpX7UzP/nkq/wC2 T/6TSUr9qZn/AM8lX/bJ/wDSaSlftTM/+eSr/tk/+k0lK/amZ/8APJV/2yf/AEmkpX7UzP8A55Kv +2T/AOk0lK/amZ/88lX/AGyf/SaSlftTM/8Ankq/7ZP/AKTSUr9qZn/zyVf9sn/0mkpX7UzP/nkq /wC2T/6TSUr9qZn/AM8lX/bJ/wDSaSmz03qOVZn49b+vV5DXWNBpFRBfr9GfTHKSnsElKSU5PWf+ Uehf+nCz/wBsc9JSvqn/AOJXo3/pvxf/ADzWkp1klIsoOONaGNa9xY7ax/0XGDAd5Hukp5H7N1v/ AMp+j/5jP/SqSlfZut/+U/R/8xn/AKVSUr7N1v8A8p+j/wCYz/0qkpX2brf/AJT9H/zGf+lUlK+z db/8p+j/AOYz/wBKpKV9m63/AOU/R/8AMZ/6VSUr7N1v/wAp+j/5jP8A0qkpX2brf/lP0f8AzGf+ lUlK+zdb/wDKfo/+Yz/0qkpX2brf/lP0f/MZ/wClUlK+zdb/APKfo/8AmM/9KpKV9m63/wCU/R/8 xn/pVJSvs3W//Kfo/wDmM/8ASqSlfZut/wDlP0f/ADGf+lUlK+zdb/8AKfo/+Yz/ANKpKV9m63/5 T9H/AMxn/pVJSvs3W/8Ayn6P/mM/9KpKV9m63/5T9H/zGf8ApVJTY6fj9WbnUOu6V0umsPbuspYw WNE8siw6pKerSUpJTk9Z/wCUehf+nCz/ANsc9JSvqn/4lejf+m/F/wDPNaSnWSUhzQHYd7XMdYDU 8FjfpO9p9o51KSngvsGH/wDO/wBR/wA5/wD6SSUr7Bh//O/1H/Of/wCkklK+wYf/AM7/AFH/ADn/ APpJJSvsGH/87/Uf85//AKSSUr7Bh/8Azv8AUf8AOf8A+kklK+wYf/zv9R/zn/8ApJJSvsGH/wDO /wBR/wA5/wD6SSUr7Bh//O/1H/Of/wCkklK+wYf/AM7/AFH/ADn/APpJJSvsGH/87/Uf85//AKSS Ur7Bh/8Azv8AUf8AOf8A+kklK+wYf/zv9R/zn/8ApJJSvsGH/wDO/wBR/wA5/wD6SSUr7Bh//O/1 H/Of/wCkklK+wYf/AM7/AFH/ADn/APpJJSvsGH/87/Uf85//AKSSUr7Bh/8Azv8AUf8AOf8A+kkl K+wYf/zv9R/zn/8ApJJTb6Vh4rOpYz2dEzqHC1pFthfsZr9J01jRJT3CSlJKcnrP/KPQv/ThZ/7Y 56SlfVP/AMSvRv8A034v/nmtJTrJKQ5pDcO9znurAqeS9v0m+0+4cahJTwX2/D/+eDqP+a//ANKp KV9vw/8A54Oo/wCa/wD9KpKV9vw//ng6j/mv/wDSqSlfb8P/AOeDqP8Amv8A/SqSlfb8P/54Oo/5 r/8A0qkpX2/D/wDng6j/AJr/AP0qkpX2/D/+eDqP+a//ANKpKV9vw/8A54Oo/wCa/wD9KpKV9vw/ /ng6j/mv/wDSqSlfb8P/AOeDqP8Amv8A/SqSlfb8P/54Oo/5r/8A0qkpX2/D/wDng6j/AJr/AP0q kpX2/D/+eDqP+a//ANKpKV9vw/8A54Oo/wCa/wD9KpKV9vw//ng6j/mv/wDSqSlfb8P/AOeDqP8A mv8A/SqSlfb8P/54Oo/5r/8A0qkpX2/D/wDng6j/AJr/AP0qkpt9KzMV/UsZjOt517ja0CqwP2P1 +i6bDokp7hJSklOT1n/lHoX/AKcLP/bHPSUr6p/+JXo3/pvxf/PNaSnWSUiyt32W7Y5rHem6HWfQ Bg6umdPFJTx2/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/ AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW /qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0 kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq/wD0kkpW/qv/AJa9F/zq /wD0kkpW/qv/AJa9F/zq/wD0kkplWOs3PbVV1Loz3vMNY01kknsAKUlNv9j/AFu/03Tv+2x/7zpK TYXS/rNVl02ZVuCaWvBsFdYDy0c7T6Ldfmkp6NJSklOT1n/lHoX/AKcLP/bHPSUr6p/+JXo3/pvx f/PNaSnWSUxsrZbW6qwbmPaWuHiCIISU42T9V+iV49tmPgMstaxzq69zhucAS1s7+5SU4P7LzP8A 526v+3j/AOlElK/ZeZ/87dX/AG8f/SiSlfsvM/8Anbq/7eP/AKUSUr9l5n/zt1f9vH/0okpX7LzP /nbq/wC3j/6USUr9l5n/AM7dX/bx/wDSiSlfsvM/+dur/t4/+lElK/ZeZ/8AO3V/28f/AEokpX7L zP8A526v+3j/AOlElK/ZeZ/87dX/AG8f/SiSlfsvM/8Anbq/7eP/AKUSUr9l5n/zt1f9vH/0okpX 7LzP/nbq/wC3j/6USUr9l5n/AM7dX/bx/wDSiSlfsvM/+dur/t4/+lElJKMLqONczIo+rtbLK3Bz HC46Ed9bElOl+1/rb/5Tt/7cH/kklJsTqf1mtyaq8rpbaaXOAssFgO1p5MbklO6kpSSnJ6z/AMo9 C/8AThZ/7Y56SlfVP/xK9G/9N+L/AOea0lOskpBm7Psd/q7tnpP3en9KNpnbPfwSU8B/2Nf+bj/w JJSv+xr/AM3H/gSSlf8AY1/5uP8AwJJTp9I6D0TrLbXY9vUqhUQD6zq2zuniGu8ElOh/zG6b/wBy sz/txn/pJJSv+Y3Tf+5WZ/24z/0kkpX/ADG6b/3KzP8Atxn/AKSSUr/mN03/ALlZn/bjP/SSSlf8 xum/9ysz/txn/pJJSv8AmN03/uVmf9uM/wDSSSlf8xum/wDcrM/7cZ/6SSUr/mN03/uVmf8AbjP/ AEkkpX/Mbpv/AHKzP+3Gf+kklK/5jdN/7lZn/bjP/SSSlf8AMbpv/crM/wC3Gf8ApJJSv+Y3Tf8A uVmf9uM/9JJKV/zG6b/3KzP+3Gf+kklK/wCY3Tf+5WZ/24z/ANJJKS4n1PwMPJqyq8nKc6lwe1r3 tLSR4gVhJTvJKUkpyes/8o9C/wDThZ/7Y56SlfVP/wASvRv/AE34v/nmtJTrJKUkpwvrPe6n7Nt6 p+zN3qfmF/qRs/d/d/ikpw/ttn/zz/8AgL0lK+22f/PP/wCAvSUr7bZ/88//AIC9JSvttn/zz/8A gL0lK+22f/PP/wCAvSUr7bZ/88//AIC9JT13S8irK6fRZVf9qAYGOvAI3uYNrnQfEhJTbSUpJSkl KSUpJSklKSUpJSklKSUpJSklKSU5PWf+Uehf+nCz/wBsc9JSvqn/AOJXo3/pvxf/ADzWkp1klLEh oLnGANSSkpwvrCbMr0PsDMDK2b9/2vY/bOyNm4941SU4/wBl6p/3D6L/AJlf96SlfZeqf9w+i/5l f96SlfZeqf8AcPov+ZX/AHpKV9l6p/3D6L/mV/3pKV9l6p/3D6L/AJlf96SlfZeqf9w+i/5lf96S mzRk/WbGrFOMOl01iYZW5rWideGvCSkn7Q+tv7/Tv88f+TSUr9ofW39/p3+eP/JpKV+0Prb+/wBO /wA8f+TSUr9ofW39/p3+eP8AyaSlftD62/v9O/zx/wCTSU2um5/XTltHVLMJuNB3Gp43THt/PPdJ Ts/bcP8A09X+e3+9JSvtuH/p6v8APb/ekpX23D/09X+e3+9JSvtuH/p6v89v96Sl25eK9way6tzj oAHAk/ikpKkpSSnJ6z/yj0L/ANOFn/tjnpKV9U//ABK9G/8ATfi/+ea0lOskpDmAHEvDmG0Gt4Nb eXDafaI7lJTwv2TA/wDnbzv863/yCSlfZMD/AOdvO/zrf/IJKV9kwP8A5287/Ot/8gkpX2TA/wDn bzv863/yCSlfZMD/AOdvO/zrf/IJKV9kwP8A5287/Ot/8gkpX2TA/wDnbzv863/yCSlfZMD/AOdv O/zrf/IJKV9kwP8A5287/Ot/8gkpX2TA/wDnbzv863/yCSlfZMD/AOdvO/zrf/IJKV9kwP8A5287 /Ot/8gkpX2TA/wDnbzv863/yCSlfZMD/AOdvO/zrf/IJKV9kwP8A5287/Ot/8gkpX2TA/wDnbzv8 63/yCSlfZMD/AOdvO/zrf/IJKV9kwP8A5287/Ot/8gkp3eh9A6TYyrqX2C7Cvrsltdz37gWnQw6P yJKejSUpJTk9Z/5R6F/6cLP/AGxz0lK+qf8A4lejf+m/F/8APNaSnWSUwutZRS++z6FbS90a6NEl JTz2T9cug5GPbji66s2scwPawhzdwI3DzCSnB+1dH/8ALnqP3O/8kkpX2ro//lz1H7nf+SSUr7V0 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 12/8tKP+2m/+kUlK/Z/12/8ALSj/ALab/wCkUlK/Z/12/wDLSj/tpv8A6RSUr9n/AF2/8tKP+2m/ +kUlK/Z/12/8tKP+2m/+kUlK/Z/12/8ALSj/ALab/wCkUlK/Z/12/wDLSj/tpv8A6RSUr9n/AF2/ 8tKP+2m/+kUlK/Z/12/8tKP+2m/+kUlJcTB+trMmp+X1Gm2hrgbWNraC5vcAioJKd5JSklOT1n/l HoX/AKcLP/bHPSUr6p/+JXo3/pvxf/PNaSnWSUxsYy1jq7BuY8Frge4OhCSnnOsdCZR6X7H6RjZW 7d6vqEN2xt2xNjOdUlOd+yusf/O7h/8Abjf/AEukpX7K6x/87uH/ANuN/wDS6SlfsrrH/wA7uH/2 43/0ukpuYln1rwKvQw+jY1Ncl21tjYk9/wCe8klJ/wBofXb/AMq6P+3W/wDpZJSv2h9dv/Kuj/t1 v/pZJSv2h9dv/Kuj/t1v/pZJSv2h9dv/ACro/wC3W/8ApZJSv2h9dv8Ayro/7db/AOlklK/aH12/ 8q6P+3W/+lklK/aH12/8q6P+3W/+lklK/aH12/8AKuj/ALdb/wClklK/aH12/wDKuj/t1v8A6WSU r9ofXb/yro/7db/6WSUr9ofXb/yro/7db/6WSUr9ofXb/wAq6P8At1v/AKWSU6HSMnrl7rR1jErx WtA9M1uDtxM7ph70lOmkpSSlJKcnrP8Ayj0L/wBOFn/tjnpKV9U//Er0b/034v8A55rSU6ySlJKe c+uFGJd9k+1YuVlbfV2/ZfzZ9Od/tdz2SU859h6T/wCVXU/9f+tpKV9h6T/5VdT/ANf+tpKV9h6T /wCVXU/9f+tpKV9h6T/5VdT/ANf+tpKV9h6T/wCVXU/9f+tpKV9h6T/5VdT/ANf+tpKV9h6T/wCV XU/9f+tpKV9h6T/5VdT/ANf+tpKV9h6T/wCVXU/9f+tpKV9h6T/5VdT/ANf+tpKV9h6T/wCVXU/9 f+tpKV9h6T/5VdT/ANf+tpKX+wdJmP2X1PmJnT/z2kpb7D0n/wAqup/6/wDW0lK+w9J/8qup/wCv /W0lK+w9J/8AKrqf+v8A1tJTrdE+rfSM6cn7Pl4rqXtLW3OAJI1/cHgkp7BJSklKSU5PWf8AlHoX /pws/wDbHPSUr6p/+JXo3/pvxf8AzzWkp1klIcshuJcTYaQK3k2gElmh90DwSU8R9sx//nqv/wDY e7/ySSlfbMf/AOeq/wD9h7v/ACSSlfbMf/56r/8A2Hu/8kkpX2zH/wDnqv8A/Ye7/wAkkpX2zH/+ eq//ANh7v/JJKV9sx/8A56r/AP2Hu/8AJJKV9sx//nqv/wDYe7/ySSlfbMf/AOeq/wD9h7v/ACSS lfbMf/56r/8A2Hu/8kkpX2zH/wDnqv8A/Ye7/wAkkpX2zH/+eq//ANh7v/JJKV9sx/8A56r/AP2H u/8AJJKV9sx//nqv/wDYe7/ySSlfbMf/AOeq/wD9h7v/ACSSk2Ift2QzExfrPfZdYSGN9C0TAnlz wOySnU/5tdc/8vr/APMP/pZJSv8Am11z/wAvr/8AMP8A6WSUr/m11z/y+v8A8w/+lklJcToHV8fJ qvu6zdfXW4OdU5hAeB+af0pSU7ySlJKcnrP/ACj0L/04Wf8AtjnpKV9U/wDxK9G/9N+L/wCea0lO skpZzWuaWuAc1wgg6ggpKa37M6b/ANxKP+22f+RSUr9mdN/7iUf9ts/8ikpX7M6b/wBxKP8Attn/ AJFJSv2Z03/uJR/22z/yKSlfszpv/cSj/ttn/kUlK/ZnTf8AuJR/22z/AMikpX7M6b/3Eo/7bZ/5 FJSv2Z03/uJR/wBts/8AIpKV+zOm/wDcSj/ttn/kUlK/ZnTf+4lH/bbP/IpKV+zOm/8AcSj/ALbZ /wCRSUr9mdN/7iUf9ts/8ikpX7M6b/3Eo/7bZ/5FJSv2Z03/ALiUf9ts/wDIpKZV4GDS8WVY1THt 4c1jQR8CAkpsJKUkpSSlJKUkpSSnJ6z/AMo9C/8AThZ/7Y56SlfVP/xK9G/9N+L/AOea0lOskpSS lJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSlJKUkpSSnJ6z/wAo9C/9OFn/ALY5 6SnN+rH1n+reP9W+k0X9WwarasHGZZW/Jqa5rm1MDmuaXyCCkp0v+dn1V/8ALnp//sVT/wClElK/ 52fVX/y56f8A+xVP/pRJSv8AnZ9Vf/Lnp/8A7FU/+lElK/52fVX/AMuen/8AsVT/AOlElK/52fVX /wAuen/+xVP/AKUSUr/nZ9Vf/Lnp/wD7FU/+lElK/wCdn1V/8uen/wDsVT/6USUr/nZ9Vf8Ay56f /wCxVP8A6USUr/nZ9Vf/AC56f/7FU/8ApRJSv+dn1V/8uen/APsVT/6USUr/AJ2fVX/y56f/AOxV P/pRJSv+dn1V/wDLnp//ALFU/wDpRJSv+dn1V/8ALnp//sVT/wClElK/52fVX/y56f8A+xVP/pRJ Sv8AnZ9Vf/Lnp/8A7FU/+lElK/52fVX/AMuen/8AsVT/AOlElK/52fVX/wAuen/+xVP/AKUSUr/n Z9Vf/Lnp/wD7FU/+lElK/wCdn1V/8uen/wDsVT/6USUr/nZ9Vf8Ay56f/wCxVP8A6USUr/nZ9Vf/ AC56f/7FU/8ApRJSv+dn1V/8uen/APsVT/6USUr/AJ2fVX/y56f/AOxVP/pRJTm9W+s/1bsz+ivr 6tgvbTnPfY5uTUQxpw81m5xD9BueB8Skp//Z + + + + + + application/pdf + + + Adobe PDF Library 8.0 + False + + + + endstream endobj 2 0 obj <> endobj 7 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 71 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/ExtGState<>>>/Type/Page>> endobj 97 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>/MC1<>/MC2<>>>/ExtGState<>>>/Type/Page>> endobj 151 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/ExtGState<>>>/Type/Page>> endobj 180 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 216 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 224 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/ExtGState<>>>/Type/Page>> endobj 241 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/ExtGState<>>>/Type/Page>> endobj 284 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>/MC1<>/MC2<>>>/ExtGState<>>>/Type/Page>> endobj 322 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/ExtGState<>>>/Type/Page>> endobj 347 0 obj <>stream +H‰´WkoÛÊýî_ÁË"d¸»|A€¬ÄÒh[ƹÍP³Å™ŠÂÙÏ"™b“-ÀdÍw¸dDºä§à`úœ¡ÇðpäwÔÑ?×f¨ÉèC{Ö¨f®nê/¯å¡ß.[\íx?ž…çÕ½ ÐFZ5n¶»wjÕɃ†¿Ãªå$HoúðIا-M{¨†¼ä ¦Ï1&ibß@0Åî–‡>ò‡›¬ÝNzŒVmƒï&-Ø;³?sB¨jÄ-âh°íÄ'äÞ¦½’-õt«È5+*¶K>Ž(2æ÷)DU>5|³ap$øqù0ú½&S{›rÌ2Ó’õéAL™'jÏmôýoéå£qÇjùe:\Sl3 «Rí.ÉA˜«Û:>pÁ3Éà™ 2rõ[˜ªx• çQ˜©Mwàû†=Æ ¡×¾b¬¢jBV¸<¼š=į³{ÀUB‚üQ· \7>½øOC¨‡ðKŽ³r®2û,‹Scw›‚¢ N#_\oüXŠ|¯† ß{13Â1ì>øóÀ+o0ËøÜÊ¿Uâ;3‚§6íV½ÌMmûøE¥tçy1¡T™(µæð–ð3ÖÉ…QW‡F£L"\.)XÖVŒS~mÑ\^†+ŽYÛ±­öH)X†ŽÑ:þ\57!r¹,^Ë€ÂÚí©û½Õ/|÷>jå!ÀóàslÆ‚ÏR;)ØG»ŽÖ˜ÄÅ…Ò‚Wpø4yÅ‘¬RHäy©÷Þ¾Š·CìЕ [??%C¼iŽh×ÜHh"Ñ,|ð,r©Xp$ ß__„<Ô²[-xÌ —ùüöþåøy¡êÎ8©å¹F~7»­l–ÛÂqÔš!BÇ÷è û/ÆxYËEãho"Äd™º›‚.Þ'óÒÙ LÐÑ'Éwð+†‚Ëa^P9FaTNõ]ò/BGGx!<þMÅìÚ…¾(‹ â8ÎýÕ‚L˜¿Ä¹Ò›‚Jëë†*“> »ry)A¿Zxª 6Ý(-ÈL_˜åJb +Å>}ÝƼƒ>#èæ-6Ú5Zš”››4×±­ªŠ;\p¦ê¦uЪ”f4;ó‘U§69ijãÊËñå£ÍTM.¸"·>Çv×ÈO6óµ°¥ŒÛÞÐè¯Ü¸ ¾ e©úVÂçw-_T:ܽ®ÛÐ;ÀÇÔ‘ vŽþ¡¢Í‹¦›ïºŽ "VŒp~ ‚QwÓ´ìZBÍ&,rjÍŽT£úB åÞà » È@‹á.Œã2Ò×PÊ&Ï€ 9ÏYè'Ã~ú¬KBú½ÝøÝ–Äm  ›YÜ?.ã^bãÂâc‰r 2_¡Üó0¾ŽÀÍÀ­ +l™yX+£yŸžßÖí³gO_Ìû]½š-¿õÏÞüòæM’$Õóçσ—¯_gIœW¥ø$ÀC¿|€Ù1¦5 éb"å³z+Q ôƒ óCÊ×ã@˜Y,úG¨7®º›¦¡S„'øýåð"¾‡å¦{¶¾ÿ-&IŒ ”+YzÿcÄñI,øÃÀ·)¦Ôbu…xÞRkUÉšf/6[†°† ~¼Âÿê–€h³ák6àÀKš¡Ï¦å¨þ\{ñž2. A:gôžs´ì¡#ôÀu5ÛƒzèP~dÁ‘¹…ÞkJ67œàð–»cŠ&É‹Ä+º§œ€_YšžÕ…ÒUn\JÒ&«þ5ªû„Tqš±Ë…1¹6¹¬{ƒ#Ë|è)óÓ‚c$æ*ûÂØ +5J²P›pTœŽ¨ÄMu"´_äêö6ѨDÑaþXB-¨1Ž¯y¾§|¿E¾výκ^,å0!ÅíòصqỉØý;âs¿ÀTrGF½&åOåZXÊC ¶ø'HÉ(`å™d¸¢už± +Â?u[1—t%&‰ÓL; `¬×u_ç=Þ»E{ºªÕNêåq^Y‡sS%?smâ²ÁÜ&ùq”›<Öv\"ö“>‘ð‘%¼DŸk,¿×Ñ¿Ày BéÜÅ•>ßoÐÈÂÖ-R÷2¨ÛzN¼Ã|ÞAí@H• ²!¤£¦kz—‘§kD“'‚dÕ«Á«Kôõ-•yT4@urŽ ÆšÅh×4Aùr[º¡>qÌiŠædHež:“bNÇ©IÊĺå!h%Õ@ éO#Б/pi¦cXår‹#mÀé®´qfOØ9Ò#¶@…Z¯¥Fd~$ÌÍY§/ìÚzK8»E£YXz&ý3O.0hÔ %Ä)^"0*µä=ÜLVXºc m)­csÙ´_³<"ÖLëì¨[&°¦ NÞðëòÖ·È€k)Žçõ¬ŠX.àô~ùÙ*.‹tÄÆ…ùƒ4›Æyž=‚fM™ŒH0û 4;•ðÁѬϑڵŒ( ÒØœL°ç›õÚ§T}áz½(O¹R5”²]¥¯‰l0)Q$˜8IïWêˆG`ÇùüÞ*úW ß÷Ô[a=<´¤æ>â­îçÝ¢rËŠ¢ÝI9¦ÝìÖŲvàÃüg m"aV‰b)á—ÌØÜK®Yi×¥qcûBéÔyÛn†½Bäïùç#îC_rìú Oî;gÿÀŽG@Ûè¸JÓôv¤bsÁzÜ•nŠzܺ B“ÅTÓØ£‚ëVX n‚ïz…ðàJQjF¸0€G'TåWeâ_çsÛ‰AĆy+TM¥¶´)âö…ëŸVDØÂü“p‹¦¹! ñZû(W%iœ9®*W¤|þûe×ÜÆm…á{þ +\ÒèßXô®‘ãÌ$ñÔ)=Íô’¥e[E;Yg2í¯ï°»Ü]Š"éZ2y.¤Å‚ àÁ‹¸z®=âšü˜Ò©lû¼aŠ&¯ÓDÓæÉÇ@qY˜~=o³ï`³êé»|nüžf~w—·*ŠÙ8Ô¸é?ñ¼ ÓËcÊ9P¶§NX_"“ð%ˆÎóš,íýºÏ½ïBxÂÜ{`ÚµÙ“çÞ¼¹)çx²Ð/ŠF­—ÍÅu´W¦æ̪ªºŒvk©û£ôî +÷ÒΣ§ùw߶c¿é)ʼn\ø!™£Ù(j:ÿ¦7Ü«´´ófõÚ–*ÉhÿúLuŸ½H^IѲ¤VŸæ˺ßËóroÌüMò‚û¾ÍYTº5æœà›ñD7­Ów]þ®Ü2×Òô Õ; ^ÿ…<Ü` +îIëÍ^VàuvI”ÜÛ_˜FTöõ†éüµÃYyÏbL0mØy±œÿúaYn#e<Úlf<ÿWŽû©àVó%þôü«oê~˜ûš‰p€àÌþ–ñ­Ã1ø‡Ž4ŒÕ½Hâ~ù«Õpˆ¡YP¿õqz@Üoî·ëfÖû1­w“Và¿:IôWY,rªtw—œ±ºY´©ð‡$×âØïoõð>X,…±æýu}Sj›:”M®·„ì¯Ö¶–±w±Sæ1x0ÄËfŒ2ÍvN›£>à&e Üsì­r>EÀpèsÒÞ¸¸DqZì6(ª,æëµQMÂÛ„§»®‰öÛliw0ß»<µMèL”/‡¡¾{=¹|µœ/®ß¼zþB\¾¼’¥‹Ÿ'¿Mt´`ªJ8÷*ïñž‹Z“;üýzò‹XM¾}=‘eÑÅíäòû™ïê< ÛXBä­!‘£<Új#%îg'\PéðwYž…[L— nYÆwñ®Å*cwÿn;ü s—˜r—”dã‡jzý¦{¿çòüÓ{q30ÄO?ýãÛì=-Í®×é+è1Ï 5B{ÌÆ\TiÓÎ$ñ…§ñ{Òg‹¨T‹­ÀxüîùdjS… ­˜I .èdîåÿ¹SðG4þü§°â¥èÔüM4Û +Õ +˜iáq]¬7^,îrÛ»‰ƒ(ÓîX6¥‹Ê@’s‰¿¯Ë³´ª]oÎÐÚZá%bU¸Æ]wR”n–8A­¡Â¡6*dÛáž6¹¼šI§™¢^¬²Ð¾õH!’¢Ô1XT{1XÈvèo\Qßü3Óë¼X¹ÍEnnd•Â[E–Ü07É©zÝz½ %AÛ€†íI« ¨`½ÀaÁÜò=1мکü6=¬k®}[¤àŸL°þ5ÊØk™Þdù,ÛúÔfÐa¯¿4Zy•M™ûx;XÇÓ@w¸Ç¤ÙîF!º;ÝõÑÝÝ:† s.èìu6 £=:oS6 £3:£Ÿ:á¸N°aÑýèÑ98²aνΆatFgtFgtFgtF?ytNzYuR[ñ§PR¼Dþ_…?ˆÁ„4›µpj<¡¨*±LE>ØR‹-p¬åd†ý_^Íp¨{õb5RªrÞd¥œJ2:ö:OÛ¥Ù+P&Œ83ÁÛ®Zƒ¦kYÞ²RMësãÔ&5ñmËò’•J£•WÙ4X+%sõ³AÜ&bAI”Ø[ ÆýŠßKŽ¹à7Ðõg£ë-è‡n³]à,9K¾·ätÉÙ,l–3 g›³Yö&Ç‚SŠÒÝàÐÉnQç xò&çÀšŸƒætC ]r6 KÎ’­ä Îà Îà Îà|æŸINÎäœ!ò=br²f! Ž§Ô³ ùíÜn–}È·™Å€·ÎtSÙºS^¦¢…*ÆR‹-‚ÅÚöty5ÃNkìIÔ‹ÕH“Pi…+ðUÔ#M¼®ÒÃ¥y*9Œ8ÁÛ®-Lײ¼eMš"ÖçÆ©Í §®¿2Zy•Mƒµ&2—Q)Äí`"¤ö'â ·¹¸GëÊkìHÔ‹ÕH C•M(­¬F‚xÒÃ¥I*P&Œ8ÁÛ®Zƒ¦kYÞ² M±Ô—6ƒžºþÊhåU6 Ö’È\Fl·£‰D§\¨2z<‘#½ÝYÑ:FZtø´tBAî!gh…ß]áGi¿?ºæìôp:å˜N×é˜shOÑ.NƒÆ?]ô¡QŸê¥énQªÓ.„íB®Ó)£>I {Ñýt¾}Ãppd¯Ÿ‹×“Þ3AçÃ^çDàø Ãè_Ý>í JΚ³æ¬9]p’i—> +ï h£ô§¥*±LEm0?P¥ZØïr2þ.¯fØm}‰z±tíÁL)Ò2Ñ™‘*u‡K3U ðÃüíÎBAð¶ûUƒ¦kYÞ²*M±Ô—6½žBó’UI£•WÙ4X«"sµ²AÜŽ&R?‡ã®å=Ä—{-ï>IÒ¶åmÑ ~äÕfj: 7r3"7ò-à_,»kÁ1§ÆÙmÆßÏÞQON-ˆ€ËÉjî<„€ñ•Ðõ«E÷UñúHéÌ;§S ‹”5¯@šèGét²v!›·ö9atº Õ JÙ,t“.ª3:£Ÿ º‹`¤ÞÌ^ VÑ9õ:$õ¢›PF§jÊ[”îqD°a ~äÕ¦êr3 7#r3 ªèBXsgÓGáaÍ é¬9ûü5gtF?tŽél—½Ð­ÖAx@ÚèèÊ€“A,Sí$u,õV‚ÓëgØÙåÕ û­±3Q/Vƒ¾8­ðø½46Ždñ8,>\šªeÂèÓP¼íª5è`º–å-ËÒK}i3è©ë¯ŒV^eÓ`-‹ÌeËq;šH%Â3[C¨üx"G¼§Zp+ॡdÌNsQ¿ýÑ·¡qÕ)£Su:]p6 ›åÌBÝÑ=EÉ:ÁŸÜ¢àdgp>?÷ßž£?=ºW bØ ×Ÿ}òë-ä}pÛ·CpÛ€Ÿìepgð#§{|ÒÕœ,8a³Fw ½4;ÐÉX¶¡«CÑÕ «Nv“R÷ŒÑÕ˜eàó}RsöùñÙ…Á|Opˆ‚s\a—ŸƒYHýÆV.Çã¼ G\%–©h"øÊ”j!xƒõ3ìëòj†ÝÖØ—¨«A×`Ï4€S‰k Š×yŠ.ÍT2aôÀY(ÇvÕt0]Ëò–UiŠXŸ§6©‰o[–—¬J­¼Ê¦ÁZ™Ë¨• âv4‘ «*O$:½¹¥ŽøÓ¡;¨*ïH¢V.º7IrÊV÷U ŒÎè¼K®_ÑÏ%ƒáÃègƒNw›zܦ¹1=tŽ0ìõ³1 «ÎªŸ :áàÈ^gÃ0:£3úi¡Žë¬:Ÿ¦ç¢úÿد¢ìäy¸•¬@µ$[vž»–ÐÇöô…ýŸså$¤$ù¸@†ßO± VÆ“ÑH†,`èÀæؠߺä(%¦ÒûžcèFK÷U‡b”ú4.sO}4_ßy¬·÷‡Ý{¬nÿñ½ÝSdvRŠoÕµw™”úHõ L¬yõðC0e‹ó²8PwŽ³”ièëÃæºgiŽ7¾mœ†iÃ)a;U1wŸ«sXòóZ ¤¦H÷€\ë§He}|y€¸BÈO—kËàòFùÅ”7äMæÿ™ãRΤçó×æxóÄFyëYšXå?”kݲ.¿æ\N@?F®ÇÈu‰\'ä/«•(þ§lw¦<#Käñå)‡EŽk,òFyËϧKÞÒóå;–¦•få ù#o Ú(ÿP^(ZŸÎ@¿†ó‹ _R@ÏZ “r€dW/ˆÈeÐJ)q-ó⛿êP)ŠŒ«BÉÌWwæí}ç÷¦Û|GU§A-|pÖuÿi’ë#ÕC2±æÕÃÀ”-ÎËÞÅfwŽ³iè륛ö,"ÍñÆ·Ó0mø!$ c§)æîsuTœI‹êoÊ ôeôÇBŠAÏA¦ÊÑ ?:S’~ƒ\~-u9üZà/Ly³—Æú…õ½A¿ +z¢Ò÷ µ”6gl9zôHœ:°Ö…ú/DèÀ‚NS`­Co‚y먽WsÆ&ôÿŠ3¢æhzzkë­”¾ôÖ{=:j(ÔÓ5glBQ¡³¤2ØbN!¯€÷Zº¯:TÿUÆU¡Âê«;ôö¾ó {Ôí?¾™Äü­õ[–Ë*°I®TOÉÄšW?S¶4/‹w(:ïg#ÓÐ×K7íYDšão§aÚðÃIÆNTÌÝçê )˜øAÌ?qZ34~ˆ_iòć•k@N|Ú8^Å;‚Þ›’ýâË%QÎÿ(yOka3p%Õ~+–Û¿½Î3i_sX±Àvs`ÎaË°\€Y/¾¥ß Ö ¶NRXÎaë(,p`gNPX¹À‡Ö9,tØBì- zsô+”}¡ƒ•‹Q*iËú¯I?\®.ç€÷„·ŽŽÀ9°Òaåk‹°ŒÃns 0ëírÑÚÜ+8‡Õ9"ô؆–KÅút&MÝW%Ïß<.F +±øêν½ï<æÞuûïE\!.Eš”u‘ó¥úHõ˜L¬yõð#0eKó²dwŽ³’ièëÃæºgiŽ7¾mœ†iÃ%a;Q1wŸ«ƒDõO›<¶˜âë ·[o¯ý=¬÷f’ÄG^Èþq{yZç=ÀöTµTà$žü?ÌP·E|‰##ç©¥; 7Š¢çšÑ[è¼eèÌy_ÿ»õÄ¿õr=®Kàz™—Ãj8?‘‘ãº9.r\µ4ä÷FŽZ‡¢>s¥Ðj]¡ÖêV„^ôoTܸoÿîœßß`9‡Ö9.rTµ€–}\ÂQ "³t¦#¿ÆÉO þƒŽ¼™JÓxÓøsj—qÔÜlÈÛ5èòüDur£(jw`üfÎÂÔç±dŽKèL‘K÷U‡n˜YÆÕèÑ¢¯î<ÒÛû΃î=R·ÿø^Vbv*jþ”\Ö*4)õ‘B©¯aÍãÃ3?S¶8ÿ*$Yçãlàdúú£îYœão§aÚðÃIÆÎTÌÝçê šrDÉ"[Q>±ÌЋIîqêÝxòA‰ ç¢8÷¼²»8Áͼ÷tÞ 7w¹Ü]œó¢g9oIzs¥Ã²ž=œl•þôå¨ÉåAI + U0À­6tIº¾æý…5Þºß £l¡ÿšôÀo;jry„\pYGvu”˜ðZ¯$dù.rù iIzkD-GÀí.¬»4ÎÂ9löTα¡Ãº pï‚š¤°Àc¡ÈÜoÞòo¾Ò¡¦(²ŸãÞE“ºxH•áf5é:S,¥ûªÃD½ÇV#E˾ºóHoï;º÷HÝþã{8RÐ>ÙS^sbÎ’?R='»R—?S¶8/ IÖyç88™†ãú¸§nɇãdाmœ†iÃ'a;S1wŸ«ƒHQ?‡ÕSßVWuiÇqé·MÝ"àÂÇô¢²w@.ÄYNz. Ç•*Ó/T™ºE¤…*õ"U³³ð¯ÿÿÊq9ã§*ÇwpH[ÜZ)‘Ó©’÷ ä§JÞµRyaÆQ³U+ÈŒ7äwF.É£x®î?#rØü Ä–O^»ž·QI¼Uʯ…rõÍ»•è¹™·:i¸ÿ7j^j½AmqôX¨JiŒ7Æ/e9;rÝÖû§×JÃ}_ܨ}aóÂV}.í 9‹!Þ5qµ‚ê†Ñoµ‚«r\ä¨*W9o}åék~ ¢iË7€¢2Ž›› yC~9rÜÞÓWUãhZQ*RúÎ,ÖÁ1ðH¡çî«ÙHÍÆe’}}ç±ÞÞwvﱺýÇ÷Š’Þù¿f4YqbRê#Õs2±wxÃÃ3?SökÂá×úVwŽ³“ièëCŒºç(’M“”ú¶q¦ ?¬„aìTÅÜ}.’œÌRsµ¢3põ³†‚äGœw1$+xÖ…4•uÊ6Öÿ\ëÍ_îÍ90tX¹õ=N‹4ÃÎÿ¡”ì%뺂­-;¯“¸dÊš²Áf'®\p9îr[EX¹ø-WLC‹6Eq¹0Êù.ÐoŸ¦‰W0p-:æÍYå°5¸GÛÖÐÛ«¼ÕÐ×€Þš®Vþ¯ìÒ«(²1âvè©e6<¹ 7]ÀJ/´?§ôçd8Ia/t°Àa¯À*Çê["åsg–‰û´,DÙ·çî«¥§â1†eñVÞz_ßy¬·÷‡Ý{¬nÿñ½b¤T°•)º¢Ä¤ÔGªÇdbÍãÃ3?S¶8ÿêA²Î;ÇÙ@É4ôõ!FÝsɦÉÀI}Û8 Ó†RÂ0v¦œÏÅ9¼Îi´±àñúO]ïfäÙcomà‰ËÝŒ¼øGK@Ý 8×]ÃúEÐ/±ƒ³¬…â"dX0*°Ð±µn‰·]ëâ±1¡»Ös1 Niθrám«ôÔ™#OÇ v‚¢#`è°JW%Mþ/8à©P/õšõçbi¥èt Ø[¯ø€M”¸õŠ÷외Ïx„#‹·ö'£P¤@²Žš¡.ÌùÚÜåî‚ ¶YÄu—@&åKKÑ…§«‚6¸¬c—#LÁí3 ÷ R,«so`Yï)ö¼Uúú5•ô"è—hýt×I0í,'*—îÂB1Çî«ŽcOÅ?Ê°îç¾¾ó`oï;»÷`Ýþã{EKŽž­–Û€I®TÊĚLJf~ ¦ü?ö«%¹qîß)t„@€\ç>B–qeãûW=H²•ØrÆŸñ(î”V"en¶@Ãtú4tá2w-ûåø~\0ÀU¸4§)°oŒ¹´Zƒ„Ž,!aŸ³þô½²4áÜ™™çcè™{;ÖmûuÉT²Žï¥’EïÚþ·‰`/¯›ˆ»‹`Ýîíã(v|ͪ„w.õ„ãᎥ¿j¦,>>ì°‹käèï:}ÊÄ.ÓÉq7в_Æû!FæK$ÛoZú_·ià“–4¬ƒ,õîýä"-GÛèMžySa€K¡Z ª|.`%x’K3jðãÌ­È1çÀ)ŠÊy4HèJµÈÐ/#M’Y·hÒ™ç>éù“ÔbÑ|í£Ë&)°Ò…ØxÞŽ ‡O>#uóëuq…Ž\^pƒëv-#p’âBGíFÈ€‰%1 ç°Àe“Š¸…—¨-î—?+é¨z‰ââZæ9úx½<Þt᲎ì\”jæKV÷9YÇ­¬YbÀxxš®eý'Êúš¥?‘¥À‚AH™·ù@z·X–*‹«V–× +Kb@àp„kñÚ™Gë/ÅŽ€g¡lݶ_&“6¾–F.aûß&b½¼n"ì.bu»·£ÐJÓÜ™:©Øiƒ3®ý£ô÷ ÎÄNq‰Ln:½E¸L'ÇÝÀÉ~9¾ÏEšâ¿6nÓþÀ'+iXUêÝûÉEª¸GhÁ¸Î°§ýs'àÙ¤—f˜§*`èaI[–KCï³B×sµzƹByÒ º‘Ï=pd¹ r <üQãrÉ’>bòz˜›þ Í(SŸ—Å»I_ŠsàÚJWÉ@Sã<¦Æ–0« ®éBv.¸…ºElm€åEIdŠFÕ(éx”¯µeµº·å(ªw‘JžmÎ9ß-¾F.úºC×k•Ž:Ò!§¨‘T…”‹ _ž÷ÑçOÑUçëpqCŠ’f ]HssDèÈIŠªtäúÒ"Ü™fôø>zký½Õ%¬.3£&)ªÒסîG#k™W ¹ÀrŽiÂtµ,bÑDÖd^Ÿ¸‹JëÌK|×9ÏB)ºÓ¶_¦<¾#ÉK¼ÝD¨—×MDÝE¨n÷öñ5r0Qr«AI#M§¦±÷Òß2SvØÅ2¹éô)»L'ÇÝÀÈ~9¾Ïœâ¿6nÓþÀ''iXQêÝûÉ=ܤ ª,¦sŸñø¿6ßúß~£Ê zøŒ¦@ª\9ÿAÎ5“ä„4~}å\­-áì/—¨’ùŒAzV—¯sdà¨*7¥$ÖUŽšž±ƒ,æ¸Èõ¤– 1AqI‡ÍÐ~vlI!ûf.ÔªÎ?>?/§ÖΨ!AaåRâ»~‰ó§,縜£Esª\æÀŸžqX©àGu,fT½úŒ?~…MOT±à¶ZÀ#…Z+V –sÔ _Þ$ÏHPc²|ÆÞ@G¶[  +]1k ®ÊQÇBL+b,ªØ|BÈO`ëT˜‹uIM‡!Ô•»Δ-wÛ~­J¦6¾!­ï7ìåuqw¬Û½}ÅΤ?lZ¢â¶S1{ÿ(©Æ/QvØÅ5rðªÓ§Lì<w-ûe¼BõgŽNñÆ_·ià“–4¬ƒ,õîýä"V›IFÊðßÿ¿kèñG'KPµì7@gáKµì© +Â֘Û gä4…eZë% 1 x a¹äùH€ àê Úxµ6ƒ~7ék3úÕîX鸬›ÍFT€F +¬–ð–‚'¼º˜©z]B,k]ü-Ð1m:.pè]+úÂyÅ• pE· ˜u`è!Ø4ÌHYlµü‹ º9yµé0ÍKèÕë"§(n/R&®Ðç:`Ö•ÜF³€ÀYâ7ÌzÏUŽÒFâÞmû¥8•dãk®”¹ÅûMÄzyÝDØ]ÄêvoG¡C~`M•šòé¬k¡Ìx”þž™²øø°Ã..‘ÉM§O™Øy:9îNöËñýxæK$ÛoRú_·ià“•4¬ƒ*õîýä"–ƒš>¡4ÉéE®L(»#¡ì¯j‚ž©ðÜ#]%K»]–׿€»ïךçéª)æ,ð«(ÿ›)æ åÍÊVãgÕâQ´ÞÙ9~\訬ÇØëYçП>IcQ¥-Á9ßš¤ß™ê_ k”‚zH¹À¶Q¥R}.—»‘/¦sÔÚ %™Ï_ÏÏ8¨ãB®ˆFÕë\+ç|íý¿¡÷÷¡B©ÿâX´ +ægÆ¢µ-Ly"ëÏXÊqUŽ‰[)žkA\ ╶}›`Á EžH\+¤=Ç­‹©å²R¾ åÀEQ©TŸC¿ùbÀ{(p#‚fµ¸¬”¯SèïÄ-`[ào' +¯d‰»m¿%Íã[.T“ÇëMDzyÝDÐ]DêvoG…¸™!…´žºOc勵d¦,vòˆdrÓé5;O'ÇÝ@È~ïk·?ÓñÃÉq30ÒÿÚ¸MûŸ”¤a<©wï'÷(šêХㆪ_ — È~AÞÚ™tB = i­ +Êú*õ•ôëIrI+ë‹K:lY;“åÔÏ hµ6`èÀR_YÿÖ%5,븵Z/°Y +,õGS0™Œ‹C²ÎTkUDÖͨz³ÎwCç•õ_]'S`Ö™Ô¼@²Žë¾€I®¸zQjÛª—¥³º‘¹ah;Þª¢˜30ëk]_}À-Èç à,E”zªæ•Lœë±Òlݶ_f!3_爧5Þo"ÖËë&Âî"V·{û8 +­ÄÌeÈ"©3‹aìý£ô7Í”ÅLJvq‹L¿yø”‰#'ÇÝÀÊ~ïk·?spŠ7þÚ¸MûŸ¬¤aÝßÍ»÷“‹¨™ÅEœ¤ÕyRñ¹¿·\ó÷ò7ïa–? ó›?w)%Í~.¥þˆü;]NУ›§Ô¹b0åÁŸŠÁ7ÀùLB•?%_n”kºT nA~Kû[ί7ÖO½Ï•~¶_¥ô[*ðsz!±:·xk’þÃ$…V:&çmX.Qþœ¦ZKìÿÀU8C¡°`0ëb Mäʹ÷¯äò/Ú((ç«Î—çÜ©&)kY\zºp/ó>úüÞ8¬[DaÅlsau \¤ÍÛF‚ÂÖX¹×`èF¹¦¹?G€ÛESt˜žˆ`Å›žÀÕXçÀ–kÌOƨÔâÍ­‹¦Ì¦êõ˜pék|·í—¹PN<¾Î™$Tµýo¡^^7u¡ºÝÛÇQä8¢UÆäg?M~c勵g¦,>>ì°‹Kdò`òð);O'ÇÝÿìWMRó<¼ŠO0hô3#­9BŽÀŠMî_õ-ãÄTòð£æóÊ’ÀJ«ÝÓÓšH™‡¶ž‡ùÕ†Ë~õ×êÔÍ/\HqÓبŠ:¼Þ$k=…pšÞÜîì Š'µc…|Í|¸Av­§¸’ŒåóóœoÝÂç{лêøræØ]€=9ÊGø ++`g pyŠ–sà¤kŠÀ™ÖÚâýÈ-ÿÔŠ|þ8‚-¶"X±å÷`ü'z(¬·ÀÆÜLQ>Žà-Ðr-R`¥;ýärÑ+‚í¡À*‡ ly +1Â8B#†|µ€MèÀœgÊ)´ŽŽ¹€Yöt´0f-Í“Ò½wëË“sqx‡‘K] 6ô¶z²žžO¶éÙvÎ/ï«ÅE¥Ä³—JÄçñ‘Æc2qÐú™I%.õäÕ/oÖÙDÉ<´õiñ«džL”Œ¿V§n~áB‰›ÆFTÔáõ泯ßÖy¨Û×]í#$Ë¿= H}ÅyÕô®Š4úpë6?Ñô6ëГí-åž¿tÕ¯ÿB‘kSŸ¤¤þ‹º™/FPè°J·@#P¨þœ£¶£Ã_~ :lô::éoÄ]XO‡-Q`Ov`èy0 1âi²bnqû"Ý>3+¸“B³`/v‡§ÿÆÃŽ™wæ<\#käáaÎu.¥µ–þežH$µZAðDØún¡À + ½ÓTÝ8ç7QXc<ÂâÑŒîCO”%ÈT¢ZܺD™œ”ámFò¹.òlk'Ûçéùd[žmŸáüò~ÃH)%OŒHâ[Šmf4ž’‰í÷×;“J\–=yõË›u612ëz}gµÓ²_ýµ:uó FÜ46žìFûº:ˆÚZœª©ð—ÑnVýúû†›Vö‹ïú@´‹E»wr²—¯9ÿ—LúRä…ñ”\Ûîü +ù>þñ¯ÜJ.‡ööÂßƽ#ã7ë2ÙéºU +pmk_¶¹CâÛK\)³´÷­o+e¿ÒÄŠÕ¦Æòå¥[O1sŒ{*±ì@8ÿ+ã÷<%Qɱm??LùÈq]µácšŠÚ¿º=jów¸ÆÖ¸Ãc¸Au›RŽ+ÛþyµÝ31ï~÷Ù¦i‚Š™rÌœ‚ꇠ¸-_9–ˆ¨pÐŽÌ8j6ÄõBH…ã&,Ü bµé3$å°ÀqU~ ?dþð ÈQÈ~÷+Ð6f“í½o\ ×ÀÃxx,® J¸:A“–§ÆÒâî6‘ i.#p¦”ì¿®3†·q˜Ès¬«Á¾Œ-žl£§ç“íy¶†óËû Å'©2Þš•ø<>F/°aËwÓC>fv&µ+ÙÇ_=yõË›u6ñ1ëz}çj'™'!ã¯Õ©›_¸0⦱Ñux]Ã*Hì{ŽçPÑ{¥´…ën&Éè¦É}›¡¿|/àæ»9ø¶˜~¸Ó=RM_Ù>ç™\ÒÉ9“8ó&ï=t~xË787èìïBï*Õý.j¬Gýäп»;º£\²‡T:ª\€97èœïBïUé }4Sd.À[pvÁ´Å¨â']t{à?Á9¬\p‹¹ +•î±Þ'ô#ìßIqý™söw9ï²Dq#0ç°)7v%&q…ñtkŠÆx‘ ˆ8èÛ"pZÄÌ‘÷¶F`à°% +taÓ"p%eû£$OÃ8S”2¼ÃDYK]ݸz²žžO¶éÙvÎ/ï7Œäız­‹·ùYÌ ì‘Æc2qÐú™­½Ä寞¼úåÍ:›8™‡u½¾³ÚpÙ¯þZºù… 'nSQ‡×ÕA +¹b4Ž> %´iºÛO»÷¦ÉÔv»Žo0 t&òÐ72°+à!û{®"é•ÎmÒ^x Û@ìÆ‹Ôª¯ŠÔik.È9—Z©÷_£ilÚ@‰ôºÅ‚¢¾5—þÅÌ9°+¢z‹ Ë—ÆíÝ6sá—(ƶBû§üH-‡Êÿ/â9ª)"7"TSDÅͲo-ÀYÌ¥„¶}[ä»iÕW`Eˆ]ÜÃ"²€Š6kyŠœö¨ÎŸË#&ª—X¢ÇEîˆ[Ç-dµ`öPUÊ%·¹¥™=ô7*4¯;”èæJ™Šú–õî•œ[`9t—LmOI…²‹kÎ#¹†·qÈBžë*{⤶|²­žžO¶ëÙ¶Î/ï7¤¨ªŸ’…”[Š¹=ÒxN&Zò1³3Xx•¸üÕ“W¿¼Yg'óÐÖó0¿³ÚpÙ¯þZºù… 'nSQ‡×ësŒ‰Îs˜Î‘\hM¬×fý€GÊQîu¼ž,ìpÆ2I@)ãÝ[2…iàÞtÎ-çÀ““{—Æ> 4çSçL9hËzÿÞ’ˆ-d@ÊÖÏ-­©Ç,QXÎ-dJ¹wÝíÓ[€Û?°Ò¡ãjÝn¨±ä Éz0Á$ÄÄ›]`C‡.PÎqMñ¸Þò8ðH‰¹KÿÀ ÔYBçzÿ­?ZfQD±À2Î<´Àûgø‘Ëâ|qoÀ¥e#—Ögr5ÜÂ&–d)1µ7ÐþK4Ú]HZà% +ì.Þz¨? Ð·F¨ì %Œ‘à8S(<¼C³M uu¼:y[=ÙNOÏ'Ûôl; ç—÷FÔÕo¼ãBÄçñ‘ÆSZ3±þ==äcfG`R³»¿zòê—7ël¢dÚú´ÇøÎÕN2O&JÆ_«S7¿p¡ÄMc#*êðzsŽ•!;Ç ÒxL&ró°30©ÄeÙxU¿¼Yg'ó°®×wV;-ûÕ_«S7¿páÄMcc*êðzs¬¾LŸ6¤Üö¼ŽMl(¸Ø¦énUù87÷Ýã°‘÷âK¸ªÞK[hü'ÊÓE¿GÂ8Ês†ÇîÛ^u1 Ñ’‘@ê¸De_Ú,Ý¿-*AÚ$ tØVjŠ°·‹®äÖWúg:—ÃBâ(-t„¸H¼kK”¿ ý!Ö)Ò»Ðñ'®ˆ€<ŽÿÔÆóþ}Z- ½˜sÐØ™Ãjø + +{§8€ï¯r}Ûöb"ð…ØYJy!müÀ÷8`gƒÎ-ôþåœÌa“"0çÀíØ¡»(¬`ñ'  ë*œƒ!Wrr#u¦¤<¼C!ŸS]¤lõd;==ŸlÓ³í4œ_ÞW{J)¦*Dßth±ïk4ž“‰ƒÖ‡|Ìì L*qù«'¯~y³Î&Næ¡­ça~gµá²_ýµ:uó NÜ46¦¢¯7Ñ’u2(Þ-À£}<9€ï|ŒmÛèØ®DÎ>·ÞÛqž¾"=ñN-æZîÉ¥«V½@W +I÷€¾½\€•(H‚´—d¯è½kLŸRŠ`ú/@Çí¤ÀR?r×/¨4¼k”q\‘]à´+ôh;;n€›òÝÎ[À:$Ê(\CWrɵ7Ñí­e{èBbn ÆynÍ¥àJ!éÝû +µAr{¸âÿد–äÖax]` r#øY&•ï_5ÐÇŠmzÊ™”£§Ny%Š6©V«Ùh<ÞÐ9Ì¥õmèþåò¬þÛ‹¥ÄïÅ‚¸·èR ±†§\`±”¦}VDˆ¹Àå8¡Ã*ÝÉ,cVQÜVTI Ì]4râ$—ðÅ˼ȤbÃÇ8,¤ñäi6"Nå˜=ÄN/¯‡Øô; Ç·Ï‹•rM:§¹z M|¼”ñ5™Xýê¯Àä–×i!qYWÎw%Ë0æë°¬¹ØiÝo~Ú|›–_”¤iDeÞ¯ÞÃ%ç©Z;ob¿«Ö+ôÛ¥>!ýù†À9é½&fWçi…ž)qÛ¢ÿz<ëaX9ãìŒ2÷œÿrÌxrÔ#*ró{1cŸG4Rª÷rÆ>…îQk¯ôÝËÙÑ:xÖÑý¶1µ>Nï_å°À#¬s1HK„=ž°Àa}%ScÃL¸JY¸? ˜uà¤Ì:¬1WÑhç’ðíÜ㳋Qfn (h^4bî»9„jT¨rî-}ÿæR©¤æ²à¸ZÉdl½³ìþxZü©5ÌB„Ê9rjyÿpØà üÙÆ=“Ö·}4Û"GDØóéd©öjA€Žgçbm æ™R¾ +æ™XÛð1Ù¨„ñLÓ,”Ùcþ{½¼bÛcì5ß>/¶Î”“ñtøÝùúsšøx)ã‹r<Èæ‹Ÿîâ-˜Üòú«¸¬+绉•eóÓVãš³|¹™XŸ6ߦeÁ+iWÙ‡÷«±’°n¬À=¾²"º‘l às‚¿À9¨Ê%æ)–õ#mýé, p#«©¾ãŒqÆy)ùôÿ‡óoAÿNʸ =B©r}·ñè/"#­“s‘Þ‚pDc7q—dzëè°ÞRǧ/þ»nJæj€RAe9â¥æ˜©8+â +Ʊß8¤¬—¦ˆþ¹€»"`f¶ ³Û^TÊR1Ë‘Qót`kUz¡šl àçùJ+~™™jÌ|ŒC§Âyž-dj1{ˆ^^±é1vŽoŸ;qÕ< «½âÄÄÇKß“‰Õ¯.ñLTž¦…Äe]9ßMœ,Ãy~^s±Óºßü´ù6- ¾8IÓ8˜Ê>¼_½H·ÁT©´ÖÜÇ«òa÷=¾&é«ÝŽ[€z˜Ø­8 +=ŽT•t/×íºf²Ê÷Œl—Ð#M»öÝîn‹Þ™ÐÝRèÈöâÔrë3ÒŽ+öëÅûv¹%âJßm¼;3ô’[ß P¹§9 +6ªYïYË#(XûõΧFÄ¿Ññ"@O¤5÷zù1ò­Ôbш…Áà™'íqh9jEvsèxŽZˆ˜² ›‡ZD¤ZT©lG„j/ÀŽ®I …þ¤üIù7)7!ñÞû7,U,1àèå6VËwHÿ»yK(¥àå-§–AC nca™œµ— ëfT½:¢¥[¡2þ ïVÊ­Ç –DQ‰ž}è¦æ›¹ÂsÖ{Bé×K£¤‚xD€Qó°óQéù’u‹'ÔácJ”ªPÓ4-Ñ@‰Æü!özy=ĶÇØk8¾}^l]‰S“éü×Òy®I/e|SŽíW—x ŽP’×é ®+绉•eóÓâqÍÅNë~óÓæÛ´,øb%Mãà*ûð~õ"ZTãL1©T¨Ï{‚g*¾.$ôð`–Ð!LÝ[9¯ÔFÁÁôŽ+ãqP´`ŠEÃÏ8#BG>¢¸ÆîÒX1ÝÅjQ<àÁ¸•´E2}X;°rîcøð tþ¬kµ¾ ûÝb¤çÈõ¹~³{K¡R¬/Fû?¢ñ'ç¾Û=ð¨¡Ù+ )º9,pä›)·Ög„ + +Û1%˽%"”~¦Züô§\,—Òtë¸õàZˆƒvH±4ò,Žƒ,lˆ¬» °Ö£cI=ôK}«b¤J5çÞ)p'Ö(œ1ý¥P)–ñ” FM 0à/”nÔÿýãÆí-bÀ7*èî)×L¦Þ» +€—öá+âÜË|÷NÛ…§ÚbðTùSå÷UÞÈóò –€ž½ö:ß-çã¹ ¼æJåŠr§œdø‡ÒÈBIÓ´HlÞbþ[½¼b×cl5ß>/vn”âÔŒ–å"×õÍÄÇËèeÿabµù⧻x&°}ú5꺮œï&N–aÌ×aYs¶“/7'ãÓæÛ´,øâ$Mã`*ûð~õâ§O«µnQ¨öqOÐ-Gç’{軵°8ÿíSÝŽ»ÅzSSï¾ûçE˜ÊJ$B-¸ÑhKº?š»5¹‚±nCîÍäZQÆÔ±0$aZ /@ö¶~IbcG£@±çã? õòz±¨W Õ]ß>WI)Ôê^@sY·7ŽÒ?rÿ¡FSâñ!·}„±€ÓüW|„æ›ãnHÊ´´ó!Tç!’L›!)ýÛÆm˜.Ü“†µ¥*I÷þø!<$3 :@™È‘;ºCGû™e¯m´ ”°çI[ª©Gè¹ä=ŸÑdÖ‰âÕÛLzE­Ýt«]ïøßhÑz`9%ª¥¥ùœûCž%×=´ù”Û"ppé[ÌDjÐúÏ朑Ó9=s ž›æ_À>j„yÔĬùŒ¡ñ×n=@gÀö:Q“Ðm4tK˜JrÆhqx™úm£6ŠzE!H©‹´}M'%œÁóŸ˜æ¼zN€az›Yw<] õ(êCѽB7¦s°ÿò'Œn{‘ F¢K¯ëw¦C¿ óF…:`ºéb–\\ö"§ââ›-N“î¹çñ«ѵY4k–€Ÿsüô_š?m¹¼¦<€¢ÖfÑCÊݺ\R+K»C‘ÍB’Šv, +ƒ. #Úuý:%H…Çs²j´ó‹{y½XÜ«ë®oŸ«´¨r¶+ƒJÔUZ8JÿÈý§Ú‹ˆÇ‡ÜvöÂiþk„(4ßwCZ¦¥k7Ýyˆ$ÓfHKÿ¶q¦ ÷´„amÉJÒ½/>¤¿âðûb9£çTR3î>ZtÔñfà¨ðÞ ÐRAÝ¡'‹÷d¬Ièæ3$yÎ LƒÀ9-Ó +9-ÿtã˜3.)ù$‹€iûžEjºÍ0%æÚ•6ì4fèb­9­[êŠé‚ü4à +¶qdKÝ÷þ,¥–sÀQs-,í'@‰ujxh| 9¬ýVû9WÐœ='0ÛR늲8æ¹cènõÜ/ÓÍãÙhE [Ö RmØsËzÒfä!ë;‡îÜñDäWÒ‰¡¨Ô3‘èF˜DXw£ö™žAK¨;ÐEÇL·E2¾¸¤ ¦â³ùõ]œ€OéF?<—®‹˜B­. ä´@N+äôWJÔì¢DÝ3émæÜ­,:nE ¤©—ømºÄ_èÏX]ñiºkqñP¡ Ë^÷o3å~‹ÑÜÜbñÝ&:Ô\3ýxqùSäÿt À’¹c €¹,é‚r”î£_'ûMìuÃ9!dµã‹Åzy½XØ«Åê®oŸ«¬(Fê8»*ëÁ…£öÜiŸ?Y=ì+„Ó|! +Í7ÇÝ•iiçÃåþN…o7ÇÍ•þmã6LîY ÃÚr•¤{_|H„ЧÈ>(ç²çîšúuoÈ£ee×—¶ˆÜ5Ǹ7Åü°¶wC®[¬oXÄn\!(Â;6£¥áë†[ÀÖõÓ>ÇMW‚äºS7ì¥ïÕ©\ »;ÉS¡3R~pqf3Vº}ªXÆC(5W¾]gÉŠB—ªâ•âfç49Äí·4óö¸Õ|i2¨¨ÇŒ;vµæ²ÔÂyãŠg§â³oz#¼âFÐüñ„0Hô×î¨$MÓ¯&()¹tâ^G¯ÍÞ¨ÍÑ:´W¦âAòÃÏá$ ¬µ¶Ïr·ãO„¨é ®Ü9#äÈõÐq b`rÙöÝö  )Ê?Ü!2hQŽÜ˜‚fÉ=V'õÿ#«Ó1r¯Ý3Aâà1㤠„ê9ÀPê¾ß\îï,"ÍñÆ·Û0]¸g% kË•}óûêCŠ" ´ eÃÒM?/-õü˜~ÞüpüìÏ›»E¤E=Ñ“z‚®ö›mto#ÿçŠÊ¼LK^Ò“5§(_›£¥Ì¶DþG%õ<ôÝœ'$_ö¦¡[¹güJ€Û¦KÂ\ç¼yà6vÅêÖ±¾ÄO+àÒò~ ”cW}i¾ýŸíÑór¾¯,Ø¡šÛ‚q¸²X΋¦š,Ç7ÿã³îØ·$3w)º„N@Qj®·¯.6Z‘‡"%ȼA—ãs~<]2B—}” –=´Y¤ 2b ½ý"uÜŽÒ®¼4É(ecºðP£~—ã #ÀÈâ²ùu^6×Y¸½2mº¹€7Äq|ù´BN 䧉º€ÆìÑí"$"ò¨.&Œœé p|‰:†®Ø§Û5è‘b­éßF~–º8Vtƒ^ÒÓÛFýõ.çÒůˆ@Ø!Ï 2oÅÏ3B—“‘-0íÚ®6K´€ O`˜kèÍ©ùE”â•éŒ\OF »mFYµnFM—hŽ;VJ+¦£‰eHÝG¿N6~ ŽçÄ@†ãã? öòz±¸W Ö]ß>± ¬Ë•Ž³l‰.Gí¹ÿT$rÛÙg §ù¯ÑÜÍ7ÇÝ–i9žw"É´ÒÒ¿m܆éÂ=-aX[²’tï«)ApƒŒTËÁ7tL:¦÷ßWÔ±p`éCÿû L+ª‚}XEÍÀ:ê1楋Šª VQ3ôZŽ±§CW$‡Ì½§C÷KS—6ºGóEjÀ£î¥üOTñ©”ÿ§á^Iò®¸´™s×âBicŽiŸ.~+ÔqÍ ¨5[Ž‡~¼í2ëNxÈ szÖ ”k¾4_¢Æ–¤âÒ¸$ûç„ÑåXJÞ«Ð6uÑ1t‚6,zótñmº +g—‚îv,2·˜%¹d‹_ä **'hËOð¼ˆKçâUÏÍ·°D—¢(h]*yîy¢K }p%š¡äà’.cr˜sÓsI%êçuo¸8úáYOý• àÁ»d‘¢GèŽ;©•iÔÚ¼8Hºy]ÔFú³¾‹‘Ó9=ç»Ì¤X|Î~kÔí|ṑ&%ï5ÒVé’Ö’Þ<]l,Î@¯¬±¬RŽJ)ÝG¿ÎhkÏIm­v~±X/¯ {µXÝõís:AÖ"g +aÍDŽÃ'ö£Ádõ°¯@Îóq„(4ßwCV¦¥—û;‹Hs¼ñmã6LîY ÃÚr•¤{_}ˆ’½sèz¥þu¶é=£_ü¶¸S¤3,Òaõ]eÃS7<=ÎÐØ#[úe‹)M¿pÔ®oÐ{Qušu±p ÷LRS]o&Lö Ý«¼8f‹@æP1 gȘ빷yºðÂeoŒiRÒ.,OnƘ‡ NynÐòÜoÿ÷l§…Gu!ŸýŸ +°WUô)-nû®N¯r.~»¿8f:fDLOÑé[úì•Æ,GHÔÞWÌQE1•¾!]¢EgGL—îgX 9‡nÿM ЙڣYº9µfn¼j£\ÛX¤ó/1—$ Áñ’å™j²gèþœC+:ê,ê‰Ô3¤Õ YLÍÇ\Ÿ¾Haõ<'ª.c²ÌœI9a:t¡ªí¾eE‡ÍsÔ©8Ïû¢´†»D1{hL¢âΈé‚Ë9S³òŒ<ßÝæô"£¸LO¹Õ˜,Ú8MßBxNcr–+5•QY ƒ(*î¨Ïº@A\ž.Ä"£(Î/æF9óØ…~Ôü[%QÈäA>]‹Æ¿šµï8 åƇ÷¾Î-’ÉÖ÷ꔽÄûc{ùuŒ¸§v8½~ÜÄvŠø+‘‡õž“傥ߓ‰Õׇ}îâLnùò©ÄÐ#—“ën!弌÷KŒ~æ*’7 )ýÛÖm:ø"%-ë *ûáíîÆI–ß6%ëiÚ¾q\„¡¼Ñ'tŸ+¦FDèÁz5 —qÁ­”¼Ž¾r%iŠ™-[‹¦ °*ÂG–(NÌGíŸ=?’•ßFþÀwó£çVóäqÀ€^¢ !M»CÂ8¥&[¬O ØŸ»’r”FPM/a\lœ,¦7Ú¢£ ÏO8SqÆ(·;t‹\I¶%çsv"¥äõ¬‡]Ä-`g¹Lú€ðù•–p!+‰!u…É›ly­9¡K".ëÀsE,Š° +#p¦‡ËÞ²\³B‡ô-ÎÄ‘ë”ãÎÈ Þ‚>kÂèæ@7'rà|nG°¬W©PÖ¢€Æ+b?>±àb¼x€Èo€3“4?¼÷u.ĵ®ïU©6Ž÷ÇöòëqOìpzý¸‰]ã8× ¥Rn­Þ‘b²Ü°ô‹†Q_ö¹‹[ÄÐZýùiC—ËÉu·r^Æû%F?sÉΛ…•þmë6|Ñ’–up•ýðvw‘'zV¦l†¤ŸÈC€[ÛÞ´iù…Û5ã…‚ý ŒkzÀøÄí?W UŻƗû~4?îà»ek7džô§ ™ƒ×pkTeL”Ù…¶KäwÚê˜3æIŒ¶jFÛÙö(ȳ¤»2§¦iT•ùs%ž­ÊØfgÕ§Dmš{Áã[¨Öº•á3jŠU¯þ„LÙ]Ç eÖqö™Ÿs`W‹«‡3t%Û=œ¿sÂ2ž‰Ë?À8lÂå<ºg.6ö Ù³Ü™Rõqð‡¸zˆéÈakÓ…Š¥±ͯ‡Ö¨Ê˜*³‹JÀÎ 0ÃQ+·ß£2Š»?MF%œwðíšÆi"Ãñ§Ê-Úf¡¬w݇…Xï}™+eoëk5ŠË¾ÿç¡^~#ê)BN¯7‘ ‡×´ÂÄMî­„ÉrÃÒ/ÿoq &·|y-$.—“ën!å¼\߯gúÿ<¹nRú·­Ût>ðEJZÖAUöÃÛÝE²±Ç¯[ˆkÞrSy¢ ôLî<&æ´Rpn”8A9ÿ+èU‘†­«d)a3Tì]CˆŸ1µìf¢ÿä…´=~ùÓ€gjî¨z®ÅÇŸs‰p¹‚jKËe,ÑéõÜ…Rî0ÏQ9_&È4‰”rX +æ¸F1 œ+1{ƒóL\øwwè!Š rî‰jÊ£;Ÿ^])o¥ù”Œ«"²Ý‚Ž*ç^¨Y+ˆÐJôù™ L{ ¶õg‰hÒnáÎrJEŸáÍ&¢+è´B]Hr+tþ47ªê†Ç8p}«9,éÎ$l£9Ÿ¾@­"«¹¶4ªùüœ;r…º‚!O)y!/ê7ÐY(åvxïë…Ð|}¯Fœ=Þ#Ø˯cÄ=E°Ãéõã:v~ΚV˜¬Ü¿ÉrÅÒoÊÄjw¸“[¾¼Žïr9¹îVÎËõýz¦ñÏ“ëfa¥ÛºMç_¬¤e\ÅÕÞîî¡ÕË⦛ÉØ­çýy¯¡{i8üWpîd‰ÆÜ]€‡(püáï)‹7*µŒÀ§/ÏX4uÀ]ÑÈ cw ˃ò€Ê¢¬˜¬+µMS:'òBÅGÎç/ÑB13"¹éëdQm£kÙŸóïPP§X¨ùƒV„P¡ÐéRJL\ˆé©Š®¡Šu´Ši,-°×çºô% +Àº3yö1aæÏtØAT¨™Ú2½žOs°Éœ7“Ño( °ž[#çí:ªYü¡üOPÎü@ϧŽ<É©ÕöÆ÷—Äá2ê`:ÌÁWŠÎ?Ú­ù•Ec*c–Ï6Up nHb—+¨I –=!ɹðEKZÖAVöÃÛÝE”UW˻غvSPíëçm{ÔwøÑ죑þ ñm7y9ßM|¯ ·\v)© 軩ÁU¶ì¥ÿ†õÿg +¸@Wj…ÇLÿþ­Ð8gÝ¡ïµë¾÷”L/¹m™»99/Áy•'húîÐca½þ°þLÖzÉ¶Ë óÓKÿÂxn»Ì2O·^?œ?›sØ>Z‚ñ²¥è³j ª,Z£juË1N ={d:o vsZ‹„ÿßEz{½C®¤H­’¹@š]6+xˆmu5ûV‰N©.®ñO>fúôé‚ÜGsÈbƒT` \¤‘0-æe~“Š;zh´ÐQ[æE Q”-›;§² N¢.TKcH]Á•Ä`]ŒG›;}ºD‰rÎ +¨-ÉÉx Æ«<øþ¢ˆš,^(yF²|ç-Ë–žÏÙC¡ÝyËå¬Ç$ +«/Ð ƒÆzêFQB™šÉ-ë#GˆÎ{_g¡\××ÊT­¿>F¬—_Ç{ŠX‡ÓëÇ+­OZV©È½£3©ýQR<˜X}}Øç.nÁä–/Ÿ†¹rù/ûU“Ü:¯¢ | ¹Î|„,“ÊÆ÷¯èÇŠezÆùÞ(zì”W"™jÂFc}sÞMYY–~>ÅßÙ\ãÍ_›·ayá++aZ{®’ øÄÍô4:Jn;_·ncîBhvÄnÄ^XH û7@÷ÖÁr„þî\ .Ã)´Î!å> ÄåL¯ˆJmF÷ââ5– +Hsdiæy¡¤Ñ¡[& Ü +c÷%Šk\*©(`Æ]³Õßâ—àòw2žÈUõNÆ»®ðFÔ?Y +inSÞ}çW—ˆzÜ÷Qý­W§Åòhú7,ÿVοýÂÚ÷a+•šäI|ηef-ôî²(F -pQÄå9®Q4âr8BΕœè ’é™2 Ê"°å‚¦ ¨é2*v8‚ºÔÕJ‰3$ôT(i4H¦Û.`MÇͺeJµ¶ªþ³îE®‘˹|Ó½(éܧ<’¹”˜CÝ +£ke©ÃǸ£ê~:æQˆÆó“‡zy=yÔ³‡ÎoŸ79©lÐ(Ë- •§ æP†¢Ï“6?ô²ó;82/¼Ë_=ÃÆë›ónÊɲôó)ÆøÎU$]6SNƯÍÛ°¼ð•“0­=SɆ÷Í=„¢¦:2­¥î¶_¯À³ Á# 는äNȪž.ÐþšÌÝËC +GKïÿ18® $鎵Ûøî\ñœ£¹ÒºkHž»›®ˆÒâz^J¤ ¬ºD7v‹Áà9fÆ‘•XÍ“rëZÈ¢SÞ¥˜»O,©¶îÁ¶d×Dn5 ëÈÝ_)˜bB7baÆ“t/Ò`3çÀtu°ÝÈ%=ÕŠéA ¬?GsdY)ÉZ«ˆ1X B·è.WZ—Û?]ŒJ -Ï÷oCÏúˆŽ«‹…bÍ*t‹_n€ËSÐÿ%Y +… h[`Yž½qËrQ„-ÐL¥¤G¨Ï…+`É‚ª,Z¨„„Ù†”‚iEE&‹^—ªFšxK—BZÒð1.%‘‰ÌÇì·Ì~|òP/¯'zöPÃùíó&)%i4ûçMo+H¹Œìßþ'RôÞ==ô²óKD2Më_Ù£ðúæ¼›’²,çóù«Hºl¦¤Œ_›·ayá+)aZ;ÖdÃûæ"‰B 6i˜¥ÚjXÇÄ\¡»Šq9ÂíFÌ«¬g}87öšu­@¦ô*åU*C²Åm©æ¶F»íz+pÕ”Z² ÷¾¡ô¼ý¡ïÖBG(ÐX"”Eú tQÒˆÙˆ€ùÚC-R­ñÑ(ÐgÊWõ¡7·Dïž.À²èL‡u.%øçyn$0GQà¬×1B›õŸU¹F.[äòMu5º…"—#Úÿþ“(pE6ºÀºštc²T!“nBâ“ 0ûE\ºxÖYRK€¬{'-E[ÛÕ?Ó¡%½ÖX¡g­õ‘K߃é?a¼€ Rjíî'ý0uF`ºU©üœŽŽÍz!­GŒ¤{7Ò:þoKôŸ.×Àe \¾í`i^)Xn@ÿdÎ9ž  ©¸7WÍÄiÜe²ãJ‰¯§SöÊüøäq^^Oòìq†óÛçMFÌX&3Z±U.ã#{ªþ‰Åæ‡^v~ƒH¦iý+¯oλ)#ËÒϧã;›€k¼ùkó6,/|e$LkÏ“; ÷ÍE2…èAGéå{£cǬ¼@÷ß •|„CÚº‹˜¨>cº2w+tŸÀÒ¬ÿ1òÀ/Yiõ.æþ(Ñ:vêy¿ç…’äÖN#ð¼ºÑøßÀ·øå¸üàJÙÍ/]Ö§w"®E‘üÑo¨PwrAÚ±¡BQ=—ûêšµ…ÞÎÍ-r|T¢]ª °q1&Í‚iÑŠi«.šŽ*Œ–HøŽ0"ä¼r|½O¦W²„،ǢXâ9ß8p+2»C mAõ‹À„AžŒ +•P’ëÀ>¶ÓåÙIÿÏÅ“þ¤ËtÉþ?µ<’Å^s:^t¸ŠîL±EÞ}…&%Ë5Çu\IRmÅ€æÀYwè9ˆ5Ðÿù¾ÿX[¢x£h¢¬,ƒªºÏM[Ÿëü©:|ŒK $%ÍÇÌd¥øùÉc½¼ž<ìÙc ç·Ï›¬huû9vŠb|ÛŸÕOü‘Ç›F¯1›zÙù-"™gõòW&6^ßœwSV–¥ŸO1Æw®"é²™²2~mކ兯¬„ií¹J6¼ß\¤&æ© j­GKj†žÇß—±ÿO—¬ŸÌ#-Ð+…z§ïu¬À¿!çŒæ¨×¤ç ÚÞ +ünÛëx¥¤zDÆw4wk/R‘z×¾_\žL?žéÐtUt`ºCW"â|áY÷£…Þ?ÓaK´‰0¤ö.F%j›õ?F~Xk ¬é.Q`è•Šp„œu%‹wlWÿÂhTk=‚.?´ç¼Ìay¨5AòüitÎy¡s«-à[ür\þðX³@õº%’Ê-aúg:n'‚E+i8jÊ.Ý–þ3붔²H[œ]»­TJt²8tÛV§i>ÆeÌt>‘¸ŽÇ'ôòzò g4œß>7•”=Ó™Â- •m|äñž‘¢ØüÐËÎïýóiý+¯oλ)'ËÒÏË°¼³ ¸Æ›¿6oÃòÂWN´öL%Þo.R´L÷ŠSM_¸ÇV¾:îu r×/oÒPÕtAî,+ù/êIÀÜ®Ñò£i±G®ø“³µÕÙ±‰¾Ôgq_T[–÷Î`=ÌzgféŸã¸È]É“›#<® ÖfqVPý;§#/)¶èg™"×Àe \~¿ªTÈÚŒ±Ö¦ù e€¸Qµק¸Z:µåH9i«„G­M£*õ ßÛ©x×,œ =hu:dzò£9¢Çêt] !á°~€+˜ UQqãzÚÊ‚7ûd&Vkµ°cž¤(uPu)¼µX™Dòð1.9úºÌÇQ]5ÅÏOëåõäaÏk8¿}nB{;KU§Žì»É‰ry¼h¤è¿õöá·ˆdšÖcϬñúæ¼›²²,çóùM¤5Þüµy–¾²¦µç*Ùð~s«2ÿ¸KÄùqWàþãZ~䉺êÐè.‘ýw„î¼Ï‰oy@—@!†¶itl¡¯è¢‡ºÚÔ‰¢ÎD®-VjK—dñœ‡Ú}Bÿá-òPÑ»„î㜫zkö‡¾™BÕxÖE€‹:gi»Ñþmô)/W†1SHŠ8_x4>D\ö÷º•$ÜÀt/R µµéÝÓ[ÐaÛh¡ckÔ»oFØt‰¥0$]*iFìEÐó(pEu]Èm¬BEª ªB&ÛU +¢ÃǸäD1Ù| ÅèÇ'ôòzò g4œß>7½±™|ú%5ß’P–þÈã-#EŸj¦‡^v~— Më_™Øx}sÞMY–~>Åß¹Š¤ËfJÉøµy–¾r¦µ'ʯù~s‹U§‹H¼CɻմþÂ{USþ“jZ¡û?i•o¹Œo!ÿûU“œH¯÷,ÕJZûÁK;¼ñý#^u7nb¦ñ| £t°jµ@"•¤²²¾á`ö'ö nä¿ÕʶTZiW–»áT®jWÖŒÿÄù߀î-œ:¬Ò‘½…/%Òá‡ÊKnWvƒyKäÕ¾‚\PJÅQsKjÖ+}xo®•J»Gº½™K+ ³ +GcÊM¶ñ;ЯrÄkXÿÉÐq«?²»`v—àÜÕ*$ç\ZŸqJhÚB½žî1ðžq/.C]Õúâ`ŠÈ¬g’ܶ"×У›uÅóØÀ™SoŒÃ×PØR›Z‚qóÔûÊðÀójÏ8FÂLŠØõX.¨¬»áfEÜÀ,är„'.j»R25–r݈ã0oÓÃ9K]¦³QõóûØëéyÛ~Ä^»—÷“­iʼ°Â>=l:il.~öˆSdò¢ë4;¯+—·™•Ã0æëî°æd§u¿å×–×tXðÅJšÇÁ•úîõì A‘,%;ÙùA.Ù+ðLI*Psœsr@àB­h/•a-l·I¥/ã37Ÿ PóuÄxr¨šq„\³ÝÃVn="Fî¡#°ž¨–ÞYg2S½ô‡-©%»â…[a.¥$¨Öë'$E©¼e‹ß~ç×xËOÖù£ˆþƒZ[cPè Ý4ç mѣݿ¡r®uún||•ÃöÐ*-CÀ½S“¬ ú¸ Ûb‰¾¢”ÔsŽ·`û +dÒ™’gDäî‘έOçÐMIRÄþwÈö‚Ú!½ ÀŒƒOdœ©±È-MÀYʧjÑ#½MÃlá—ËlÎäj1½­žž÷±ëGlµûxy?Þ¹&öù¯,žÏ3h‰âaÓ13eñ³Gœ!~¦è:}óºry›99 c¾îkNvZ÷[~myM‡_œ¤yL©ï^ÏÎažsDHrêƨšü»Ãiv7ÙŒ£#õŒÇÐÙ¼ï¼ÄË9ì kŒ“/Ž·i;D±D¦óøçQÁ’õ cܦë¢LÍx«[Rçîä"½\Æmtå’*d eªé‚-Ž¯óø2—-?U,ÀÐam¶A'—’{µ ýá‹"ú"ª%÷MçBê 5sÁ*Ö]2©jߊ"pŽ\‹ŠäÞ ã’.TÔõ‚ ][ ¼z:lO{‹ hcÔŒ{±@kª[Ї¼¢Á:»õéeüXé°MtÔõÚ«ÁЭb[$Tsíµ2>pXGdÊÌõÀo;•„/Å9ÏÉ‹5ªOm%tïu÷6 ³‘eY¦s´}b1¿­žž÷±ëGlµûxy?Ù9OàëòoJ9¿ø%>Š‡MÇÌñ?{ÄÂ芮Óbæuåò6SrÆü¼xZs²ÓºßòkËk:,ø"%Íã`J}÷zvm¥Í÷©Ê…j7¬¬À•ª–¾ ¸Ú­ÐCŸÅç>­À9ÔV šÝ#[’žs§œúˆÀ9SJv$}{è¬Ë–» Õ¿à;zÔf•-¥ɹ6*ÅúpÙÓ‰@z:°12—{Èåö¬GÆ÷|Ö¿Kú6ç"m‹óQÝVéBÙ­/Gr©šGûZjïç¥øŠJ€»Ý%tFÕzvÆLŒÀÐ%ÒKÙº¦è7 ¬Ã³.$—Ì òSîå ¹œ ÿð¿ÑØÁvG°q7G~‘¾’þ1å±lC׸ bí2åÒ¶òâ˜)=Sïu>þ…uXàL"mËGUyñ|¤x{g›a‡urà6Î(eQ,KLšëœ½è)ôˆ1ÕvoÓ0>[f…,}ûß>vzzÞǦ±ÓîãåýdcŽ%VÏe¢>㤰O›Î?õïôgÈ uš‰×•ËÛÌÉaóuwXs²ÓºßòkËk:,øâ$Íã`J}÷zvåøÍ9GÎwhn¦Ëz$iß,ÕcBkyëJ ɳ9ðçVXll….T‹7H¹X$U<ŽX7©'$—8‚\$¶ã{(ýöþ,`Î9U‡„\Ž€ÓË”…³’³nT5:-¼Ì}'Dà°Å¸©SJÒúø”'2ÇLèÀ½¨séµ2>pX_Ž[|þ/ O{÷®8¾Ð™¤ZY +¨P-ŽÎYvF%)œAYO¥nA“õG=ú7ÐÅ¥O^Z‡öuÐC(©öJ?¿({oŒãÏÄ (`ÃZb&iµËßU¹#—Säru{Q½õbÁà6r¡]ÑL­x àFìgn>ɺ{›†JµÉ2+T<&÷±ÑÓó>öüˆv/ï'û +夲ÈÛùÕ/ÁUp¸jY*äõÌy+ÛŽI¹Rò{ X"~ W(_¨ú*gj& º‡µÜƒôÛëÙZPí8àâRÚÅÁ‡- ¸"Çõr¥êÚ÷·Ë£ôÿ€lÛ*IÓžñS±|GæWyË5Ð7ež©µ á|à*Tsû¼¡|Z‰2i­»·ihÑuè2«¤¥Äì>vzzÞǦ±ÓîãåýŒ“fÖæ¿3‹žßýÂ>=l:gŽ/”åáŸoq†L^tý”ƒb^W.o3'‡aÌ×ÝaÍÑN~x™9™~myM‡_œ¤yL©ï^Ob´ˆÒÙ¶Dù‹ëTþ à•ÿüÏ.¸#ù +²|?_\ú· •¬Ô?LEÿµ„¤Ro¸WùÖEÔWIä¿øÖ'ÛšZ¯‘áqG“x%QÕ h$L„=8f#±¨hõe]"dÇ»ŽB’´oÿö/PówÍïW9ùuÖ *y°ý—Ø4?#ËÖS=8jHª%¼ËnãumTü.¸oì"LU2`ÔF¬¨úæË8xµ)—käàˆ‰²Ü ÚŸ’³AÚ¦m+ij½º‡× f“À¦°HeD‘(Y©ͺÄþÏ~$·®ãÀ«øA¹Î|„,“ÊÆ÷¯HrKôûÊdd=ö¯D1!Õ„›Ý ‹ ÞYJP›IÔÜŠið¨õFÍ®˜±—%fÖ:N÷¸!{œDœïe÷ä.nðÒâþ5ì'Eþ!“¨¢#»·eþ†F‘LÊmqÎuw¦è3Ã0Suî³~ RòÙ³ïôòzöM/¾Óéòö¹*H)þ5IÜ\vexÈpN&ö–p|Ø×›ŸÉ4Ï-Î+§·±&×á4?­Yl8ï7}mz ×ß5 ãØ+•íô¾8ˆG)ãAJíÛq[òo€ŽÖTÍÀ=ÁÕ#‚Ðþ%W$‘,îZ·ô·«žð¦è®V-ÏøâÞbK˜n½_[2å8@nî4,ýãNT¥´q´àF©læÿ>Q¨–ˆH–HE P§ˆ_ñDšµÞ¿»>lÍC"pÒ‚²mùgŸ´FÈÌ’É’2Y¬R.åà‚§[ài <ýØ>smëÀqàÄÂV0þý%¶‚M,À&pa¯¨°´Ð®(ª¥·îhŸ]…RÎm6ߟ,°ж"SŽÃb¸ +lE°¹¸æFÁã¹P’M#êSÍ3E­ º%m«Þ¿œÃv™¤„)-hÞ/¤ì¤©X^ÖÜùcvú†ì—Àÿmœf¦ØçϾ×ËëÙ·½ø^§ËÛçª&%x“5æþÈkj,ÃC†ƒòÐŽ­~ +&Ó¢-Ú›èJK+Š±Å†%­¸ xh"5àY‘RNŠš[8ŶæêœÅÑ­®¨×¢ b' +LôJ!+&tñAF¤‹R©Ú^Ñþ½h„#2ד,7Àc°êD°ÝE&© ³;wh«Þ¿ºÀÇã¹:½UFE¯Q–Ͻý’Mýíº‘Ë%Xº»B¯¸U×Á=ÚKŠ}Iº¸ i<ýy1âÂmÿÕqFºa‹˜T¤ÖqæŠÿoK–ÇO·ÀÓxú!p¡ ¾‘,À6êƒT[UÜŸ.OA_T=—|„>"ë‚ê pêJ”jÚ’Æ>¡3]HXÚôÒP²¨-]~]òÃ*®”cRH²$*ÙZ²ô_s¡t‡+ÏÔõ`A—œ[èl©Z²æÀ a¡¨9Ç°•¹úT`/R•¶êê4`šl[+‹ÀÚÍs þãi‹RmïÏóý]4ûÞr¾ÄŸVÀÓß*ù&ÉŸ±e÷Ø-¶4G¨:¬´Àæ-Ø Š\bL¼PŠyœ)znü†®ó5O³‰,«Ïž}£—׳ïyñN—·Ïž…Ô³ÛÀÀuâ4–á!Ã)™Ø›™ña_o~&Ó<ÿ5Ú1¯œÞÆŠ\‡Óü´f±á¼ßôµé5\|W$Œc¯S¶Óûê5¤8$²ü±ëʇþ´ùG?í Ý;-ò§€±Äüà ½D¾ÜÉÃùɨkàUcK–_så÷º›¤»7À“¶LÙŸäû#¯Ä!ýQzÁ•ÿ!-¡oÞÏB%ä|Í÷—`¢ƒW*Ê ©‰° + X•ŒƒAš°º0·lAp"# ¥ÍŠwTIôNÕ +ãóŽ~G3UÖ#ýòRñ¢ý‘ +¢mw±x„ª‹RÔ¸Uõ^¡ç.ai«Þs„«éB…s›»ú/9,p`…­¹j*€a6å>¥üp)îC¡±Ô +Ht`Mž)kHªÀºh`ITôŽª "0Y"K üYóÖÑøs.ìÐ EÞ"gò} £LIê4™(šOž}›—׳ïxñmN—·ÏÅ®•¤ä2ÅÏÐDc2’‰“­~&ÓgÅu¿úìÙwzy=û¦ßétyû\lÌ”“'Ïá +ùæk&j´á!Ã9ýËÉV?ƒÝ×MGŠ–æ•ÓÛX“ëÐçËéºf±Ó¼ßôµé5\|×$Œc¯†ÿŽï«ƒøo*×î¥àHÁŒ» ‡jw,3t£PïôºÝÞMÍýJfèJ¡¸"àñ–,¨Â[pw3‰[áhÛù1/1AêJ¡ªÚƺþi.TBlcøgÕ`7Ö„ +k„$‹7/÷|¨ã¾ëF[8¤Vû§K!µº•û¤ 0ÓÍ;"5QP¢+Åt§æ—ÿï&ø†VJµlAï5¡Çl­"T¸/•t%‰ÜR½{IW&ýûUݶ÷=…O€ ëÁGÈ2yÙøþï}HrËt«´•ô9}é¢"“ÁÙÁº¸}ÍqÙ€µ4ªÞÒ’Åx0ÀŠg*!¶G0ÿB%¶Âò­‰»j"¦õûýT‹ +IØšWbÿ·€U±ú@1eÑHJ¬:ì%U +¥¶Âø |G+*¬-UºfyŒ^­A[jˆKE÷¿q:½ ÃD%Û´*¤I|õì'==ŸýЋŸtº¼¼/Ž$êç 5I–îexäá=™XìîáïÀdšæåHÑdÞ9ÍÆš\‡¾>nö [ôcç4k2|Û4 × Ÿ5 ãØ+•ìôz÷"\t‡dgeí·íJ|gäÞÁÄÚöŒÓr†®d5¶ÍW·RpÃÉÈ5>€ëxÅŽhw÷๭x5Ò‘>ˆÓÛkËöЫo±)‹nylˆÚ’)snõ|û+ú»%_¯¸¤FÔÅ‹G!i)Ë¡Í_ó!²¸GÕsLU7£.Š@˜B©®šQ¯ÐQ» TQWïëWtk5Ò”’+Ð> +›Ñ•bL€7ÔkÌZ+êÿŠÂV׆€WõØÂ߉ë`踄Ñ@ $tä}Ma«®~MkÌ•T"pó  -Ïÿ˜+?ý^þ‰–NÉjl½¨¶ÀÒÚ‡j<ćöɹU—þé‚ëýÊÄõˆ˜»±ƒz>¯üà†öÏ¥PâZ;×%Wr&±Uè©"gŽ#ÍCÒå eJ¬§·a˜Iýãj¸ðöãì==ŸýÌ‹tº¼¼/Îòæ°þìæ{ç8<òðš~¿üïãÃ>fþ +L¦iþk¤h2ïœfcI®Ãi}Ú³8p>oú¶i®>KƱ*ÙéõîE²D­º†À8B0w«NrðÍîÓMÍ-?è»:¾OÐù-ÚVº†É9n€ç"@^=÷þÅl,]EÒz¡¤¡­9Ï=MÇŠÞ?Ï‚ç.ŠYô/G»A%DHEÖ#‘ÕðÞ@Oö@]úg:jBwYŒ%µÚ‚Ð+o¹i®Ãq©üšæ²@.wÈåÿtÐ’#_PN©•D#öÐB¥0ª‡b&t¯yÚª"BÍ•‚åÖE˜®$ÙÚ¾h_ºÈ-rY"—/ c-Ú*:FÍÍl úLß>@C¯l˜v„ªéÊÕ#¥TÓG+…[3B€Ž«.À-†Ç¥–ë ä²@.wÈeü03*d‰ÛĈ Œ°)ÝÈCzFä96tÌìÛ¹‹²>Ж?¾¡‡‰b%‹’ µ¥—=x^"ºÄ;AgJþ«¿ ÃLêWEòo?Î~ÐÓóÙϼøA§ËËûâ\ÿ‹%I%Üß6<òðšL×&Ó4/Çñ[?vN³±$ס¯—ÓuÏâ¤ù¼éÛ¦i¸nø,IÇ^¨d§×»IÙÊHËš€®Ó nµ= pŸ´–±ÞSª›»×I9"íÝ¿{ zW ãz±ÐBßÞ¨7ÓÞº§éð ×uŽfàê; ª ¸©yI¡•EèÞîŠBu3òè™T ±è./¹ +dÕº°¶- t`Q÷øŒ(êF&“.™¬2¤¾àŠ:°“:ôX´m꺿£Ê”,%<àß ÆÿâE•˜­å9ÂÅÍ].é9Èšõ I92$aŠǘ\¯þ!…tR`®#ëz¡¬©êûƹE.KäòÅmHAÊZ‚Ùzü]¦ÇXqs£Kc(v„ªoO˜J…ƒ4ÐÿùQÀ5«®ÙQ¯L‡Õ%IÚv¥U–F¥TR›Õ»¿¤À­rfŽ^…8•£ãîW×¼¿šã!Ù…]óRÙ%¾žÞ†a¦šë´ê¯ªÃêÙOzz>û¡?étyy_œ‰ý¿±"Ê÷9Tý+ý‘‡—dÿ Nû˜ù0™›úÇ_#E“yç4 rNëÓž›“ì:+2|Û4 × Ÿ% ãØë”ìôz÷RÁp›RÉ­áu|›> {/ á„´™[ÏU÷˜a±…Þm̘»4´GaKJ”ìn€iÛÆŽƒ|Éå1KÛñîkwr‹\–Èå×vw£ææ~‡ãÓ3p£jµ Â’­¶íKÿ,G%‹‡:Žåèë¹ËqÖKbŽÖBï¿æF%qËòî¯'¬{:ðZ1I^IR9¢£øŽ·75×È­}ÔÖ@xäÐ(YJÕ6&~W|71dÆGTü[o"KÖr„ƒîáýAdùï°åKbþä«lAm*¼äôˆÐ²=[€knl­ó„ôÖâV—7Ô=4XËs9çÜVÀAs!UÁ$KñÉÑÒ"·Èe‰\¾,-%§6p!H‹Ÿ]ˆ-{=Gk¡woDÈÀ«ØZRì5µd)˜ªX©T=¢›Ûš.•RÉÚâªÈZ['B ‹QIÜÆÜ?.úQWÔé9´5ï8`3—¨Æ’ÇÆBøΊؗêémfŠÞÇU¡šÕWÏ~ÒÓóÙ½øI§ËËûâ`¥ žš†S­Þ×D£ <¼§·‘õ–&óR~,G óÎi6Öä:ôõrºîYœ4Ÿ7}Û4 × Ÿ5 ãØ+•ìôz÷"ÿpü›v£3ôòØ8º½PÀ•!˜g§?6s¼™,ÕÏŽî½þ"eÜ\Їô^›ÓÅ¡?É=j¾9]Üór L÷KÊ¢]ÿD/chƒ]Ç™ô¦ä"&[ü¸ ÇIÏYt\äÀL÷¢—$kúÒ¥‘ª(3â%6RØȨCÃW!55¼À¶tNòjõˆöbûi¡A–=RskEûÒ\n˸|‘æLIµÞ?Íjª’æ…R]óþ.‘;[ŠEL +$%»ŸCÕs¿£¡dÄÜHs[úÇÍ$˜4ÇÕsTQte‘[àlѨ€Êâ5Ï&ˆ4÷’Ç0ÙR©$Yƒ¾EÕ·¿£…LôDUw3âŠyEƒDÐ+*9·Ðûw"Tà©Ä°[º¼žNó$¬¨ÿšâŠ¸¯®È-pY—_ëJ¦’“Œ\±|×U0%N§·a˜Ç–c\MSôÕ³Ÿôô|öC/~Òéòò~Wê‰yø!k´û‚h´á‘‡—t!»{ø°[Kš—#E“yç4 rúz9]÷,NšÏ›¾mš†ë†Ï’„qìuJvz]¼‡QÿT…JØĦùö.ñü»ò¶²;ãfŠ*iø:î¿Q€w  a-Œö‡Û ïŽQñxIÃj½;ÄÍ”¥õ¸ß\¾ÕÛÝa{¨(ÙÚPÑ=îJSÙ÷ïÂ^G‡wۙܛ¥‰rûd‹¸ì¥tv»*œxé­¦Ýy²½‚š¥ã.ÚÂÞQLþ"*ß\Ê*Ü&ª?åÈaRé“FRt-v3{fÍÚj±;”?ÐÇmRâš»w 3»âRwÇý»°×È)) Âf@¡bë”}Û»K·W¼âI7nrM %¨wÒ‹¥eIßÕÆäˆû ×Ý…dj[\Í€ + “[N# j§€j“Ž›cjYÒwtÍæ,áÖnúFí²Í5µ€#܆€BQk‹û›Ý»°Û(ÇU–tˆS¹+IhÜvÔVc¸»W’@¹æ6Mõ]m¬öFÉJàQµÙlYk¦TãémfªjÓj¢äŸ{ûqö“žžÏ~èÅO:]^ÞïÊQYËÏ„Uc9ÔákXìîáïÀdšæåHÑdÞ9ÍÆ’\‡Óú´gØ¢;§ÉX“áÛ¦i¸nø¬IÇ^©ôûU“Ü8¯÷s +_à!ä:GÈf™T6¹Õƒ$G±LM)ó=ÛûU²ÑODªÕn4~zÝ|H%.<QªŒ2œAÇ•Šf˜©õ ¶5A)üOЙ¤îÌ~w-— e Z¾Z¨9+L|ø,ÆJmªf,„;eí¹Þ`– f¹Â,w°=õÚ'ž±m/š‚ NàVuŒ©É˽AßÚA¢%מëÁ/ØÎÎ}C»™˜ª§‘I3¢<4õfhªCÜz¯sÈC´ Æ&ÍÜ{õà}Q!A¼Þ}ðº¹@f†ˆPÒ‚—A±48Á”v]S20aÒ’ð™Fյ¥T¼.9(q¹·Üvˆ:UFu¢RüÈ@†ã´3‚ækÐat mkêQÝg‚jõÚ[öÐÞ*ëÈ!­=´<@c*fzb’\áT jÖÑÑÍôÇ­àÖ˜Ù)†/;_×1Ë0 Û»X º…œe«&Ózz›N q¼y¾«4ý,o¿^b§§ç—Øô#v:}ü~¿â£j.Ë Ä~m«%×é`©M¯añ«C|ÇïoëíEÖ•ËÕLÉùt¹¿¬™–”Ï•ËÅÌÉô¶å2|q’æó`Jýôºùi:->÷–Ô×јÅÚ«¢Äžu¦¤v”{Æ)þ·RJzäµâÎÒîÍvxm#V$ª¶!52E6‘>²Ú/p×¼ãÛë³&c;”Y]Ùá#¥ÁLYçˆCJ°Õj+@£ß…‘XÑŒW‘–¥G=:Ûˆ­&¸.ZZ4?Dij^¹Î‘²[Åc»îE¨ágƒxˆ‹¡µu#áÔk{pÔ¨îY‘æÔšõ¨×®”Ôú =¶FµèNg¾"ó¨ûÅ(–4¡ùH fç†::Ížù .ìT\„Òš3\9%¯.Œ4j¶F†oë¦]z• ®mÌ¡†‰%¡Y¶ÕØ:VÈÍG*áÅGJµ-Û<ýïô6²H†ó]¥Ú$î¾ÄNOÏ/±éGìtúøý~Eˆ—ªsÑh–ë¢)Ù§ƒ….ÿ3U•_â86°õv¦ì²®\®fJΧq¿žÎk6;­û-o[.ÓyÁ'i>¦ÔO¯¢)QâPÏ<ø¥vGùe/p ¥¤½k ;ÁȨ# s9rÛQRÛî(νm£‘âMñP'QŒ)j£T*?µ\¢–-jù&êx¦EË€«GÔn£d¦}E®mT•dÒz6ǃ!ÙØ1¢=~e³µÇ|ÑzÜý@3+¬°Í’¡¡ÎäjG­æ6¿{àkM­·©HH¶£"ÝKÏöè-2j²IÍp¸ƒïl­÷’Ñ´*™ª2œsƒj;ØnÎ}7¨wÃò]"½¶£ô: n!ËÜ×åਤÙz5“D£¼7ê{ä’⭯ɟŽóÃö…¸Ù߀0QMMðDÂdU¯½ƒÊ$§(!9šÌÄ­”›Ý]Þ÷ðn³8›!v¨IAZ i¸ÎÚöVËw¸¹Êém:-ľÜT*¹ÆÍ—Øèéù%öüˆN¿ß¯ø(Mó̇s.W|”ìÓÁR›ÞÂR–ƒ^Å'ĺbë3e—uår53r>A×\ìäç‹™’émËe:/ø¢$ÍçA”úéõêC"¯ÉlZ¥$³=ã6R×^£%gÔ™LJß’G-þ3êÈm^ú18꥟ÚÚHñgÅÍvä´ÂŽ‡› IÛU³~nu)áèˆ +)™+^«T6ªD؉d…‡;¶Óv$îq ©ìû±s”U2¯}Io%1{ìUåàVÂT[…k’J­t#Úð¨c$å̈ÊFÔH<´ÓÙÈÎ%îLyG#ÃÃNQ“|T“öv¥*æ÷îí÷wJÖ;÷Ø™$PATwõÒ«dlç¶F­j_“ƒk$“I%Sv4®C!žëQ=èÚ ™$QÉ\qÚ¦‘DI–”[$$Û˜#hcGu?&w>Él’LÆÓGCi;T¢m§·Ž2þê¼c~äQjl$[.a˶|“ì¶Þþ—ˆPÒZ`Pk•<+¤ðt4z•ÓÛtê$.Ë]‹Ð7_bŸ§ç—Øò#ö9}ü~ßl˱[k³£¶Ü®µdŸ“ΙXüêø£[oGѹ¬ —«™óérY³ÙiÝo~Ùr•ÎÏñ‘æó IýôzõµÇg(UûsÝ˦î×Ãù7µ‹Û-µË«Ï_u:ý*};mvÚü®ò­Ò_¡ 5×¾§m¡Ûº]A·¿‡n—Ðm ý¨_°î’{Öó?†žÆz$ ·¾'ßúß"?žãÙú§Áõý°óߊåOybnäÊ=ã:Cj;qsEÔ8SòÔGÏÛ»ùíÖúêŸòLVíÀïÑ@­YŸŒEHK;‚>fl‰ÄV 5qyÎ}â¿Hcri©Ÿ\8Ïaé­Ço¡ÀA±ýã˜;0p`Æ«ø#Êóö*Wʹ`yfɽ¯ X¢¨ôÍ| Uõ¾Ž/ŽíRï,ãΉ'ÑÍaÅ’H8cz9hFT*igx#¯½RƯMX¥$ª\q¥jµ—8@²FMÓ­š?@,·ïúšz#ŒB?SÜ¿¡ôœÊÑ÷7Jÿ–»|ú¡Ò•Ô¤1ë"ùˆõ!¡‡§kný:~Ê\Ž&¹[(ýC¨çŒÈ9S3íu~_àr \¶ÀåÛÀÍ­AÇgoÕز”B–ykæñM±çÛtê¤ñÏù®‘Åóöë%6zz~‰=?b£ÓÇï÷;‘à4Ü*¸›K˜o¦fb)ËÁ?¯â ˜<Ìâó¿Ñ%]Ö…ËÕÌÈùt¹¿¬Ùl¸î7¿l¹Jçç¿IóyФ~z½ú ¯uá'–ô‰tà>½B;Œu£BÏ{Ї­¦ àµæøÀÌ +]ÈRyÄp{è°r±xÈ!—µ»x [,¨¶˜¤X$ºØC¼åÖb‘ýòx +7×GŒ.7WyŒ‹¹p}|ÎaÅë+L²§òñŸb=$pd¾Óö|Wåñ”ó´_ ãsž‚óvÔ?o1RÜÃA½zŒó½ÖP¢¬×G(ýö¬3Lè9Œqg"Bð—¼sÇ÷ôFœ‹#l…• +ì(ÇñÌNn¸„—3fó·xh'Ÿ#p¸4†¹ÎÇwàÌkŠ™ê^غ=ð{x KBäx +U9lëgr@5’ùNy"Œq¶ßAÇ—‹EjÑŸÔò˜Ô"¢5€j9ù8S+rz›Njl1ß5š¾ôí×Kìôôü›~ÄN§ßï›…ÔÙæÖÜš¶+FJ®Óaú¦6âW‡ø„°Œbëí3]Ö…ËÕLÉùt¹¿¬™–”Ï•ËÅLI¼l¹Jçç¿Ióyð¤~z½ú ç¸9i²¶¤šü›bú–&¿óÓþI“+t&ɉ!¡gRážõaËi®±wF圫 NÛøà<Ú†”k“DйP´GjÕ:—T{#ÈeÞ¡Ê%rDÙÑùøÞ3c+ÈÒ·×yìÝå/­0i4ÿà4ó¤õ`xÙâ—+àò1b‰÷=hxàâ$æxÌq^vÿé@?Ik?˜¤•;¥ÄG¹|LÊ…”*to©Ïåã› ìüidÜ(®T ËÓ4÷ЇK¤-Ž?@±âÿ²_Éë:pÿNá äzŽ#d™T6¹Õ‡$G±L½¯Ì”íÇNÍJ-Q­v£Ñïƒ9ÿ1åßËBKË‹w‡~q¨¦ÜCGˆŠÀñœ=÷ñCéÉø(ž +½”‚é/Jl©\СYÏU{ÖÇ÷¦bÞGÎ+e…\¤°F¡4}\JG¶ÅL*ÜCŸs¡¤µ]à[ür\ <[²Sd\ÒæÛò,¤5ŸÞ¦ÓÌÔdYe#O}ûç9¶zúõ»~ÄV§—÷ÍÎJÒ"9Ï2”ë4g1öÆaRO#ÙÕ!>#x—u9SvY\®fJΧËúòÌf§u¿ùeËU:ßÿÅHšÏƒ§ø°×«¯0 šÍ‚nk@ƒÀ +¼DËp?pßþ-øŽ&ÿÍ~t ï5 [gò¬=ðñu®TSœ 2.Å3¤Ê…jFÔJÄ‹šzÊï \.˸|x³Ú‹üöÀoéVè1Z0e!Cv&€ƒôô:7œ+ÆÔ¥å¨÷É9SµÚ mÖ]8½V@Î ¹#j%GÎý ‹`çÀÐaC®QõÚÛ9‚µüˆ-X3ÏÄ,Æ"q³õ”ß>nÝ^-ÀÃ(p%n;À²9pÄE6—ÔÒQàS/B5ö~1jš’òBEq$*Äæ}ÆE¨Pب¨”¬é|LΙZìP'í¡_¡F<‡@Î…Š7Ä™8dëœhi'(ŽïåN)¥£þ9fu²ÒÜñ)ÏTç‡á€+•b}u œkà5gR×-ðø-Þð6²‘æe•3 OËϱÕÓ¯çØõ#¶:}¼¼ov.$Yxö«lrM‰eŸ“ä™Xl9øçU|“[YÍ”]Ö—«™“ói¬×Óù™‹ü|1s/[®Òùþ/JÒ|D©Ÿ^¯>£„—D×èŸ]yñ£)w¨(ºB—ø»&ôC—ôñº’HÃd=\LjFjÕ?A0BâùQú¬—lPÓîë)5 Œô8‡ Læ ¸RSÅK ¼ê¨ÍÈ­ +$t'KÒC_é…s{@ý]Ê°Îc;Î}Ô_,NbÓq‡:qr•¾D G‘êéã› ¬£nT½:ä0'ÔÜ´²•Œ\!—ÿD+žˆ5Å­1}EI-õrA€œ[2ÕZÇ9!m;t|[TÊ\ËÄr{ÎZksX•÷P¦RÚQ+Ó¤)bTT*• Ø rD±{K¦’!½E¦›0cn¢*‚ ](¥ÖûËøEZȬa©qOùø½È( Ø0Çœùdž)yÝÎDÑXƒÆ·é”RÜ6/s&7‹õçØëé×slû{>^Þ7[e§?³X½v\Ë>¦/aâ°†í!>‚ã5e]Δ]Ö—«™”ói¬×Óù™ÍNë~óË–«t¾ÿ‹“4ŸSê§×«ÏÐ6ýµVQM7Òä'îJ¹vvÞOäJ†Çx˜€¦>IHÏÈ=¶Öòˆltkä¡Ï;Iz`çýB^ç¯FS92ãYíõysä…$+žT +Õ”%>źü‰ßÜ™jQ¨ ú‰<Âb†L+ÇÒ»ÊÀÓ<å…Tå(® ‰\‰³õÃÄ—ç£|´eªÌY%“5î|x¡dÊ¡p<ÜJÍ´Ç `)LÍ°6ÿâ~,î8¦Ô7M€œâ”ÅÚý.^IEŽúÏ®‚:ºej€ÕéTZéùþÛ7ï¨p«;™ÀUŒª×~ˆpr%­:¸y.“„RJY¡B¹¶ŠÈy¡bùj¹µŸ;SôPHÎ+yËpÅwþL•ÔYªîd–ᇭN`GÄíüF…¤ZœœËQçR-BµV¨).‰·ÞȲm›P¦lvz›N¥¨yÕ¢[M«Ï±ÓÓ¯çØô#v:}¼¼o6vbñjò¬Ôχý.ÿL,¶üó*¾€É­¬¿—õÁåj&ä|ëít~æb'?_ÌŒÄË–«t¾ÿ‹‘4ŸMê§×«ÏPö:ÿ±ª¥·?Vä½Kiù_ýÈy‡ò¯ºSÍ¥áÓ +<ú´ï_,…DÔÈõ ]ZNëz4êêõÀÍÚÝ…`*KFêÔøEªÑ½vä22Å1˺dÌ-RICèœÇ¼ÁGÈÇìþÀ-4Æ´£—á…-” d̬Èæ€Í?€›fùÛüÙü1Û®ÆQ“yÏ®˜=È©©ôå9>ç°À•ZÕøíÅr{èBª;^>>çÀÓRëÛÐøœg’šú”ˆÐ?a£'y4ð[0ÞÈygB(OXÎaËÖ åœz•o€oñËpù¯œ\[­å)Tl'™ß^å÷€žÚN"°^¨²`ÎCÀé"”ÞÌ VèñÔ<ýÇö{o÷]—ØÎŽBÒPFpÁyJÔÀ%%ê!KTï¡X† +HЫp}|ΣkÈ#(¿‡Z@)‡5‹„‘ûh„`æeÌêä¹l‘ËÿOu?¡±¨ùe…Þ¦›ÿv¢»KÉΠñ¼VCL\°Q7¶Àv"ØTÉ­!ϤyÇVºQõú•ßº÷¬#@/Tj3ÈÄU(%9š-ÆttÖw×}ý;z96Æ&hŒ…Ô³B궋jʽX8/TAÕ’©¶Ò«!ë¶Fag ¡*;-t|ÆJv† ‹Ð9¸ÿ[ɽ`ÆWºRm€Àšì¸ùðñÜUcL©¸5Äþ©$)õ–8>p!g5@àF­•¾ñ[œN5ùµç-pŽØém:µ˜8ʲZˆ#Ù¼ýó;=ýzŽM?b§ÓÇËûfãFi?õ¶’Òu†³xUÊô•LÔmñ ñvÓu9Sö¼>¹\ÍŒœO—õå™ÍNë~ËÛ–Ët~à‹“4ŸQê§×«ÉÖt.¦ÔJ_L7éºP®Ò÷ºÇ®OèÒ¦?ªX/Q51^hÝ|GëÃÚØ +ÜHY¯­Þå +·<´q\è<×>!hXæÀÐc|);™ÀÒƒuñÔ×(ë9õ +¼FúaÌ6š#{&Lkt*®È+UmGÐoa/·—z‰›J?;ŽŸ]<î݉ºãbsLs1â*}½/çr‰\¶È始¸ûéÑø” ¹zOùíß#+jõ£æ?dÌÕD©å>+@¡§È]€1WI²7ÀÅç¤QÒÚç­áÅÀ¥Aªw¬€M-ṄCèõ£TµˆrßA‡/Ðp6=ʸcªv ¹B¹JŸZä‚›ÏÃÿÇ~Õ$7ÎëÀýw +á€ëÁGÈ2©l|ÿª×’Å•‘Çc{ˆW³¥ éfO£ÑÀ¢Uz÷îâv uÎ Ålm í_)…4Ú3FÐG´Ðd{¾ÒgjRI{«OKdœÝ¦sÈå²1Ëu ÝÈ"ÂX ±•^0™f>ÆeCp?'£#¾pÖËëÇqÖp|û\±Rñ³#)!¨¬H‘¤ã£Œ06Y=p‰óò9QÒ´ìœß&RNK|ŸŽ÷Œ[ôkçü2‘2þÚüN¾I ÓT±ïç÷ˆâ|&– »ªsÈïwùÃαç@YÚˆq•‹mâÞQ¥ü©‹S^“:¤ö”o Órƒ\|—s!Žµõßþ9WXX¼- mRþë”q½ÊHç*— »ÇtT$´ÆÒ½RtÜ!æqH<»1`üe[©Ä¡-Îîµâ¶ëC+ˆoëÜå£íe m}ÞŸóû˼ eÞ:½üå +UعîM»½B¯1¶q«ÿ"-TeC.ýÏd•ö~϶˜È$îhŸÐ %{Á¥WèšÃ32×ýãb!›6»dÝ­`˜BØHŒú(SL¹ ^> K>¡+þ8yL/Žåâ7§ë¸EZÖoFþ´vÄT“¶ÆèAç,ŽÞ?p!ak»hÿRqÜþ…‚rëæœEŒ,Õ=?ï“õJØa…:ºR æâAèJZE\²^(›xìE™ +×=Îû”‹ÇÚ†Åþ9÷š¸‹œ[à>ÄbjÏË#†"·ÍÈÝ<*)ãœÂW½~SÓð1.S!8Ïô5"ã¨âó'½¼pè' Ç·Ï'¦˜Çê/’òŠI6>Êxψ*Óù!_o¸C$^þ5AiÙ9¿Mœœ–ø>1î¹8p9oþµù5œ6|s¦5˜bÞ/.‚ Ç‹(þ›ýç~CGI™´ÓÀÍÈ~· lŽˆä8S,1º˘¨Kë¿ýsî¯çý?@¯džìQéL!{tTklw‘Ü·"EÈÓüŒÉñþƈXG0^°³Í^mÑ1t£bNÝ°ðÉ:üŧ1:š(;…ŽÄ(^ŒBœBÏ$õörïFZHœú"„þu£¿| +])ü˜¿.ÊTÙ!áì5¶h¤±ç×¾ò;Œ_å+×@¿¢Zq)r¥"n9N¡CéÑ¥—3%÷þþ¼˜X¥—Y«rlûƒúôœYBöØû<«Ó`ž©x‡—(“FŸÆ¨Á3ëNý¥PÔ,OË#¬Ñmvᣧ $"†eÄ.»t&Î6|ŒË¨¤`qú3¦VÆ÷Îzy=àØ#ÎŽoŸ+V,$+B¡ÆµqIÒñQÆ›‚?(õò[DRáås¢¤iÙ9¿M¬œ–ønÃiϸE¿vÎ/+ã¯Í¯á´á›•0­Áëð~q‘DEç¾²£)f>þç–gxÁÝt¹@GIŲ—5ºjgÐcm¦î_.JVCë¿Ýö¼3[ÉÙ£XæTÂÓÓÝ= #ÝEŽ­\<¸ 2µG q2W£ÀôPƒÏVÄHÔÚ²Þ¿\Þ’}Ê¥PIæ*QŸ)]·¦˜þåR‰A¼ÃÜ‚¹±ŸYQ°%U‡bqrR²½¬xgyç9¤Fty¼BžÿV#xŸÊT¥¸Ì--DrËzÿ%*´Õ@‹;ŸãΗ¸óÕÖBÖ'¿¿V" ‡º™#·Q±ÿêUæLVò^íÕÍŽrL%nˆÅAjµ¤$­\ºoCŠ¿Õ¤Ø¿X +™¸Œ,°ÄPƒKèš(i;Èy0E¡ÂÁk:×Öÿèã +4“±ÏÅj58TK®TÍgy +ºkŠ]¦©$5&¬k¤¬¶7Ëu ]Œ´î¶¢>£”·@÷öâÖá.u+Ÿw¬óH¥&Ä8·Kwô£ ã23òAœ?'¡Èã÷Îzy=àØ#ÎŽoŸ+V4Œ±C3¨Y±"IÇGo)fY=p‹H*¼|ÓlZvÎo+§%¾ÛpÚ3nѯóËÄÊøkók8møf%LkpÅ:¼¯.R"m¬”t×uÔ˜¡£¤bˆ®”¹@/Ø"­wì'à¨T€¯Öq‚nd–×%ëEé9íÕhŸBªm·N7OO£Üˆ³í%Ó>ÕR(G‹Í¥Bæµ5—ûËåw)ßWyN­V‹;ŸãΗ¸ó•¸DÂ3&Çû‹œ‰“î¹y¯ž˜BÝ›{e½dÛkÿ}²ÎpEyF‘>ºÛÐU½øÔºRÁŒçRë^)G +Ùgr)%µÝ¨ÂÛ¨Ïî×D1:$†(eCâ ±P5õ +]…Ù%tÇiQÉ,´´{sÁ\¤º1ÐyàÜÐúÅçH'ª¹,R´QÖ§øËýµî—uÌE@þŒ†ô‡)\÷†‹^Yw; +X綗öŸÝ7âl>;)'mGŒx3çWA¿FçW¯Â²ç.}B&g‡JwÜGœ—–srñ¼TÔ¡Ò9’ÔêsÄ(àü)ryt)ùa÷ŽÐK„#ŠásºdÝ(¨ã2'ÊøéésbJ¸äÇœõòzÀ±Gœ5ß>/ŽÎ ÉlÒImÍŠ žâQÆ›FŠYVÜ"ŽBX>'œ’–óÛÄÊi9Ÿ÷\œ´œ7ÿÚüN¾Y Ó\!ý¯.bÕòìÁ©¶Ê¼ù÷Ñ6¶¯kÙÓeWÍc.ƒ¸ +§ t£SÛ<ú—Ë8ɨ«Á÷¬D«¥V.Ý6ì3à9…¶Dûnh~¾ÒÝ™-r,æÑ‘©ëØÌüyK!ŒŽê‘sÈE²—ЕLC«ôry`‰FÄÍ èÝ;º2e {í¿KÎQ¢Vt/-ö Ýqèò›ÑTÍ¥Ö9Q(Á«OdtŸ½È¬ìõÿ.eÊSt]‹”=B‡¹Hª^-Ým7rÓ—©_Á(‚zŒ-ëý7$¿¹ EšCiËèpõhæ“u¿E* +è¡MéfkL?@ÿ]ä{1î²ú.†©ú?[o¹?ðû«Ü+ç˜ÔÛòôà,L™7Úÿc9ÏçÈó%ò|u +s;õ¼PΖè!æ*I ÑaVd,R+œ{5E$ÅTm/nõɹ©=#µ<")ª<ÝÏÿH.Ìœ±?_sJ¬:|ŒËTñÃ2N‰`üÿpÔËë§qÔp|û¼8™©h­sw®yíZ’t|”ñšˆL0äé!_o¸C•¼ük¢¤iÙ9¿M”œ–ønÃiÏÅËyó¯Í¯á´á›”0­Áë𾺈%ž¦F‰î{*¨µï^a¿2ø*Už#“j嶞n~{ßà #ø©o|1®”cùqØí˜q8sÜCþ$ó½ä|yµ'Ý€ßî_|}Ã.%´¾Û?á +7}Ér”g +âP+èÑ%ý8ôl+öËLwGäw·rφ(¥º¬O#›öz«O#­­8 \©êFº¹:ŸWœN›§_©`(RÙ£¼ÇÄ&Xýu}à5z9Æ·¢²×zÔ +ŒÅÔÚ¤u­Üy%‰!zä\)Dz—´ºD^¨@ì‘{õDÍ”»t–J¹FöˆÜ(hmµr3ðpß=$V<µÕJ÷¸;ÄamFbQ >n•³;¥ÀÅ«qÈ8'ŒAÙcçôªÅßï1Þã4áwòÄ4!¥î¥•.97²i¯³Üÿc¿Z’[ÇaàU|AHÈõ;‚eRÙäþUÓ’%6õFIFñSo¥-¸Õn4šúÑ‚ð’½·•ÈãŠÜ(%ñˆV^šì∌#°˜Ô~ +`+¹6§”À½wè7²œ‚E[1¨Ä*“¡?¯ #@eÏÓ©”y¸Î·Ù¨Çý3j=ü:£ì+j^_®J* ß3Sj¥Ýz­qezÓLYì怷Èä¦ëm&v^Ÿ\®fV.§Ëý噫Jk½å×–Ëtyà•4Ÿƒ+õÓÓÍ‹¸¶:o.©EJFoÀ᪥×å°öqWÙ3±#êpèp1ofÅRÉs¨rŸüj/Gå¾+ô¶^çÃ7(òhÚÚ]ÆK%iR,0E“|4>çFÕk¿tü'Ô‡Jvk‹"µlthäJÅv }¨&þEÐ÷¬åyþ{PK;ÿ§%Vzƈœ£Mk¼°•ö€k(Üœ«Œçˆ-ê³=Sæ˜c(nTŒ«óJÙ=àü„X’r¿ˆ¸C,Ât~ß Ê‰{àäbŠH,¢\”£æljìÉå·wQm÷€þË\L¹x&ÉÖ;úøS´Â[jÄñ_©I‰™ÏUK@#pµTÿ·\á–ÜòßàŽ*q…©ˆ÷sxà˜@‚«YËÈ,ÇŒ‰F™74t;hï‰Ã+Þ"Mú)!k•"{M:tnÅOV™²Û5ôJúót*L†Ÿžo³¢®ãþµ~QöµN¯/W¥1”ŽeV¨bZÜ°b\§C™Þ4Ó´‹]ð™Üt½ÍÄÎë“ËÕÌÊåt¹¿¹\Íœ\N—ûË3W×z˯-—éòÀ;'i>Sꧧ›÷°”u%—P+Ø +½RqïSõñ|˜.ß #(•VöFö¨¬«çPÉz…Þ(§ÖO¾aGö‡&ÍÙ„P‹*©µPÙt%óÏJÈ:z4î…~…\®Ë r¹BþàüUà¼ß¡)å^é€é—o«ün¸»yÜäâB­IŸ\@ë’¸7ôJ»Ç :9¢Ö=±üiуu>­†º3BGÔ¹+Ù>µülÆ•Àå¸|2ã62i1'QÔ¸¥L¥Ô>¶/–Ã9W!M÷ùñÈ{ÅF‡ï, <Õfw¶–ÏP¾\RŽ¹„V*îýð sº²÷¬G€nij?‚^OѨ‰+,pÏÿig—1·8 s@Æ…Z“½]nÈ…[hBv¹ƒ³ü„\TËžŸÿaý`[tÊÍ#’Ž!ÚJí¡t“(¢/"æzmýN!¶4*"ñ(‡³°{oŠâ¹3yn!÷9Œ¢jm/ 1׬ìõ蘆^©6Û›¢cBw*¹ì-tƒAÏêr²ªÄ&×ЉäÓót*NS†Ÿo³#3îŸQëá×e_QëôúørUºWT¶2±skºÆ>Êô¢™²ØÍ/‘ÉM×Û äõÉåj&årŠûõtyfzÄßž\.fR¦_[.ÓåwRÒ|ªÔOO7ïQ¦_˜öÊýðØ ÞÏéncéÿÚÞøª¥V½d²N÷1'’’¢J=¬^æ/‡ÊÕXo’ößб†y½‡Ô[ +VÒ 9§^êßF~7àRu‹Ž^RDàÈÔèQ¿ÃþøÕöÜ÷Äb“è +·\á–ÜòŸ0[iMúÝñxÆwD!I-æô¯äÎ{»ãб˜´#Ó¿r¹‡ÖvOµö~þ‡óuô$ÚÐÃ.tfT½Þcþ/tCà0hæŠ:‹À¹»ìASé•ZÝ`}x¹À\6—¢á ]•ÄrŽÇ8ÖÐÊ}à7V‹Zë^R³;£¦p.Ö¡áqCã¹Ißœ´‚ ¸éä2‹ƒuÝc}ÌÑï¤) )b|6n=ðá;T… •{ÈüxkáVïX~"ßF]‡ —Ô"êœgÝØã†îŒ4õÀ#ŒP¥RÚô!禿”]Ö‡„7ä +k½ç?±ËmÅ–)OŽXnµP*õZæyz®ž§sÍ”¤,÷¿ìŽûg{øuFÝW;½>¾\ÕÆ\Nµ‚t¿¦Û¿Ó¸N‡2½h¦,¾ìí +o‘ÉM×O™&†ßž\®fR.§¸?טž¹*¸Ö[~m¹L—ÞiIó9ÞYýôtó"Zdî'Ï*h¼!o”¬ö{À°²¼àžæFƒì¢á†Rç{(å#nùˆ[®qËçpãX7öÅoûîOÛnp}[%/%žN”Q8õ|Eß%“¹ôŒ®pD"½¿£ü{…ÏQ®õ¸ŽÏï®[qà¶T9 ãÐJJSR‹×›’}Ï GdËmJógtÆÃÎM!ÞÚ ÆŸ›ª˜›»ÈGÔ8´’¦/Åã<.rg²Ì!1h>ŒºqÆ͇@ÓJotçðÉ6èÔGÊÊyc“_ã`¼¨Ýƒñ@^K‹ØHZ¹äˆjq£Z­Üùì¼åå£;bèTêÆÜqä,K•v'4®2“Cå’="rG–Ö;âè*GbQÞØ‚FÇîôÌó +4ÞTâM ¸®‚ dmƒñ³3n¶-TÒÆ>B-Þ<$òȉ%M_ +¤óJ­Õv²ZÞ¢WÐs¦Êõô<«Óôñ|_ +i-¸F±‡_gÔ}E±ÓëãËÇÚœ(‹habïh1žß±L¯šñM_öv…×Èä¦ë§S^Ÿ\®fZ.§¸?טžùPÉ.3-Ó¯-—éòÀ;-i>Yꧧ›¯¾ì¦{Ê,7‡£þßòÿw…î™LÒ'ƒÆ§ %h”o4Õÿ‚õ©v½é_å|_-.úÉp7ph¥ºdCO§;à[3oõûšy¿Í_•8ï·”{àÇwçñÐZåÞXÆKE{ö"`ˆJUxúWtþ•l÷ïÆÂ].O-0ó”S‰È¹JX¡²ÒZ<µL{£ç€¦™WÙXx‡‘WÍ}Ü +€—=c²=Á9sîÍ<€'¢A›û^à:Z”³õ‚ù6òß?<)b“–z¹ bIºaŠÄx±;üa‹&ÕуFEU‚Ø="tìDÊÐÐa.ž4¤\¯s³_5ÉmóJpŸSèÆ`þ€µà#xi—7¾Õ×%E”ÐqQ æUVil¶zzz] +ïÑ6 ŠTMú±(€`H‰‚ +&¬ÖsÒækÆ‚ œàë¹jßK›¼ø9/‘ó×’:iÔJ—Æ}Ú ‡ÒÛÞjÙ §‡Í]˜ŒŠèZî2¸`ÀÈ}^,^Àyë9^,È\Ee¸¸¹'z r!±^ç ä¼@Î7ÈùïxK,3§–Zaà®ÞNx›·Ãû´FkTæç\RcÁóöôü‚s?qØáóõcÁ r³…™&jiY©ÓE§¥D˜ÈŽ?ßá+(¹Éå¯p/—óÝ‘”Ór~>ï¹:ÉO7GV¦·Í·ù´á'-ù¸W⇷›áŒ(: 1¹ÔPCÌ:~?aáˆÐ§¥Qí†mWr!Îkþ;T&=CwK¹Q lwѹ¤j¾6Œ©ó–ªøÚô5¤\D“Ô²G,Ýœu4ì\(P¢¾^ŠõŽþXà| œ—Àù‹À‘ \û}°X6±EŒ_vÇ#èÿlÔ'ÓÆ(ëÒ1ÇäÖBB·šŒêZ'zCØõÞ¿-õ_ß<½ø4qñš\†,RÇç9¤¿^LÖ²GCúSÒ×WÏ5"ç2)]÷æ|‹à5ý­Í£C–¨Oc]DC' Føº€”Ãs©!¡Žé`8¯Õè¾yÂàäB{Œ¤[·QI$^Br.ɬ¬%€!¡ taé;iÖEʽ^†¯Q”b6RJZ=f7¢–=Âîæ¡€YûFAéEyà°t¦ÒûâðœÃîBºKNYË1}{g©!mÑ<•ê!SWàùŽî"kqL螬õ¤ø^M4`êÊ©J“ƒUOMóR-DɼÞ§µXrÒù9kÊè¸ï?^pØÓó ÎýÄa‡Ï×ZZµ‚ŸS’6¾õÜiÃezéÿ(\^ð”Üäò¸¤âå²s¾;ÒrZâùqó´gqÒå¼ùmóm>møIK>®A–øámñ!xg>êRª‡ú}ÏÐí£Ò¼YUý?@§¹¼Â8Ù8œLÕŸæâ±D]HBŤ‹\4U¿3=€Že¹3€Žù±´Õ‘`Hc„¿°JÈ2ÅHPŠqDÖ=—;æ8¼«;èG+œëÍe‰\¿Ä9ý)ôU¹pÊVûÌX¾ ½üúŸ +}],Æ%&çqKT‰ÑûàõX¹ð5r^"ç/Ê…aŠ éèŒ9Wû°@Î ä|ƒœÿŠ-"1:µÙ%ì€oáâ-¢-‚s°ÖÃs·B}+¸7ü“í‘з.<ÕVú:<çK-¹\ÃER\‰†tˆÅÅlþqG «©æ;=tû¬¸=ë¡»¨ëÐ5¼¿¸&j}÷P£ ¼YÌQ5j™×FÑ!¡c,çÞ^&ð0ŠP]CB‡©C/}ò +З)#žû~´=ëJúº\*ßQúðÀ1a0ñZP³D)™xTè,¥×yè¸jHè`]%l;2Ž•)¹ÃÅ]à鲌^D‰J9¼Okb©6?gNlŠç/8ìéùç~â°ÃçëÇ -¨AŒ:ñskV|ºèô©xÛ|ñó>à0lžÿ +–½\vÎwGZNK<¯‡Óž«“üts¤ezÛ|›O~Ò’k%~x[|²Ÿjí{ö·•ù‹_w³Aì a£Tkq߸;*ª®M[TÔöœ£g·*à]É¥Öj»†pvïÀÃW(¬‹ßãæn¾ÁÍ·ŸLþñRÙº$Ôg¨n}å-Þd-# ‰ZLäˆ1E× }LWdT©Çd““­M2cB'l){¤®Í60¸Ô7ú¿hí+txàhEµÅtÅÀÐa-š¹—Ë·‘ÿøö¡‹S&îG‹Çꜯ‘ó9±@%©òZR,æ©U¡xbAJ»Ó@p.–²•Þ[†÷óØS·;œ€x*"'}âÞ\¼$Ê^âGT,ê}…+‹ßSÎ à|œÿN#ª©ÖÖ§–¦X­YËÐÑCÝ´g}ø +u ¡Â}à +`ç¨PÕÚ÷Ðá9ð¬¶Ç`ñ›ißB#dE-Ô·Ð:G÷Ïy—&º1ç˜C«jÏùƒu¾‰·HºgçÔ䬫“ÅM“…¶Õè2&ëžÈ|èòo¸¸Jº¥Z‹ç‹È¹ÒJ|à-8ÈkMù&,RÁ!~xŸÖ‚ÙƒçÇŒ zÿñ‚“žž_pè'N:|¾~ÜpRucÆÉè¶ÇY©ÓE§Ï¤DlóÅÏwøBî–Ë_ÅËeç|w¤ä´œŸÏ{®NòÓÍ‘’émóm>møII>®A”øámñ’r¥†j¢TàÁ‘~Û ôIŸ}´Ö.¸óýL:>pˆ_m-“Ž©O.¼‡÷n}*ÞcúºFÎ×Èy‰œß6ÎÀ1{e‘>c ¯sÌ»õ¸9N8ºˆ¥¤¦u-× I/Ð5©æ5Ö‡„ŽdWzG`Œ”Ô8¤§crti=ëÃæé+!©=çš‘&VâˆE6vAç"-ÔøuÅy¶J!åÂè¤wä€u¦JÛ;1n`ŒhFd’sk©Y ™^Üî·£ƨÒ,¢\0‰poŒãsxÔ´ˆ*.!ÏJk–8dy¢‰qHg +tPñܾ@¼8í1Îm ^^„ûÁ"‚T¢†­°m(ð*ššèÚºôÍ•7/EwPúöí_ïÛ+}ûªÓ?yD‰mMzƒÞQ£jÖ }ø6v–ãd²>é¼ïÿÃs; I9g©ý07¾± 1ÔÊÉŠÕƒÕš2f¢tâÄÚïÓZ9 ×ù¹ä”½âù {z~Á¹Ÿ8ìðùúqÊ+:%Îõ6Y©ÓE§O¥Dì7|á½<.ÚÊeç|w¤å´ÄóãæiÏâ¤ËyóÛæÛ|Úð“–|\ƒ,ÍÛâC Ç솟—R)¶G¶Û¬¤® ãÇÞCš›ùØ:š^.RÆ·&f[3à¡Üà +ºséR¡ÃÑZOúðjqI\«ì=|mAù”Jƒz lQ ï1òno.Ê‘f¯3pŒ»U¸w œ¯ó8‘q Ûü#Û9Gn½-þk¢Œ§LÞk}xwŸS¹“¹¾­–½QÔ¸>‘s–=bËöÐsÊ’ë?¹ìÈ9‚‹³CHè"MQS+»¨åƒ…•;:>çžjö +¹D5ø"†¢Þ\†— t^©QHÎ9Q怜ÃÎU¬.Ûwÿí9/I‰tçàÂ×Èy‰œ¿\¬&Ó¾…F¹&ö;#ÑðYvî\Ê +çüKœ¥B¿ óLÞ[Ëðœ‡õDˆ%lõ’÷pÄíU¸÷K*µFŒç¡3®1÷J’î[Ñð~ŽØâª}TÜžóG(=jûO÷Bîðæ‚ +-Ü›bÆ¡óª¨@%.€W›Nn àTk;¼OkiS®™Ÿ³§éc߼ధçœû‰ÃŸ¯7¤Xm RJ¢Æ·ýÙJ.:}(¡™øÍ_Hbzy\RñrÙ9ßI9-ñü¸yÚ3m±óÎùæÈÊô¶ù6Ÿ6ü¤%×àJüðvó!Yf]æÚ0Ô ¸!fì1lØñfäb°°,Û…‡Ž¹‘-X¸;!ç$B½_¢PKm²F­¥FÚ÷ëa›Þ…óiˆÉk©t° q‘‹µµˆ4f…þÇ~Õ$ÇÍëÀý;…N€Ä/×9‚e\ÙøþUšËÒPóäÏ%OˆW_6’‹jö4 +¬µ'}xµäŽ æÉÞEæR0câbÀj=ðœ‡\šÕ£î?ª+rI‰<1éá‹Åž’sϯRdïÓb‚ÐRßE‡ïF¼à¡ÒÇtF‚Ê;A7A‘FÔ•JÏPúÉr w-ý\”s…˜.rz:WL9™IÆȘY.ñÇ%å€B§f4¾-¦ef­€^Ê%­¹„Z¨Jo.ä´ANwÈéïP.A9bFÎCætr‡D® 4 =e&mD™eW+ÇÜèýÍv¢ 4ò¹¶žò¡ÕÂæ4©;Tçm +FÓë|+ñéøI.Ëä€m^‰½~ü|‰mßb¯éíןÍÖÁÆwU+x­w¤hµù"óAôz±÷§8‚©,ÿ[¡Z]Þ¼>]H¹ÝÆúe«ùÕNv{¸2íúXn/|R.÷AÛôûî.­^~\3º?Èwüº§¹Ø]@{Ö ÞC åÎQ†Æ¡Llᙎ’ݘÐÃjJíu>lÌX€‡9iK•¦WÐÉø¨é )—°E¬5QDZµ"·§d»Óåœï–hè1ò6,Gž>j‘ò^¦_黺ˡ+ä"u'/~/ç´FN[äôiwÁ† CW¨¼‰¥š¿Vy±(÷œùÓTÎ R"m€Ópú+ÀƒqeO¨ò(ÏÀ}4‡Ž¸È9a>à¥Q<çaŠªÒ›âøœ'ný\±ç†÷#0ÛiC9:(‰¦„nFÜËeø͸ÄZ}üM;Vxk9 ”ç?~¶XNàÜ*´¶S ã«\¡¶¦ÅÎR=©)8ãQÌ2r%†í_É8£`C25Ûé£ TpGëã»z´£Rú ‹_þ)¹|†ó#¹h*z¤ôQ¡K)–´H[$Þ”Ð%¶ÛÉŒ9ü…‘Ž ©õÈîµÏç[㉂áÂ8©Gn,¾-S$ ž^ç[‰[ñë2(Øbý%öúñó%¶}‹½¦·_6[ŸTÂ莭>_d>'’Ý]â ¦²,W¨V—7¯ONn·×õë;ó+úþæõáÂÉüµëc¹½ðÁI¹ÜSlÓï»c˜óµ{°<ì´©¨årûmeµÜŠodé¿­¯+J¦MmndIŸª¨ò°14z8ÍÐFŽ|§JÙ¨ò9þSäTùÎyüžÞZÁ‰œoó9o‘ÕÓ;ò¨yÜ°Gæ<ê„s:WyØ­n ÔJ/–úe±ÔÈÿ)ð ¸2>¤ÈÜJ/ò/KåIVnÑ­†é‘5S#KFäa+&;œ^1xE}F‡Åo9K3¦–|&«y­O0ñÓçxKÈxWy2nZã¦-nú\»W =#Ftð¬ù*J“w`î„¡§'åtäqŧWæ)­ž¼æÃÕ £0Í[ŸQX!‚»ö#ÛèJ OÑÃIsDÂxÕÖ›áè&nñ·Œ},wÎé!:OáÜ ê2g& à&hé·0Â"}]ŽŽ;®h-¡R"\¹ø>Ýᦿá(»iÉ'ð +×ÃVÿOpJ(Ÿaü([ˆžQâì1?x?i&àAšõÈÏWùéI¼Bµ€5>çÑ:YN›Y3V8yè<ßÆPõ(J\=ŸRBám§åOxLmŽµYC›!ÕÖ&uëâ!V¯Óë|/%þίë§eõ—ØëÇÏ—Øö-öšÞ~ýÙlíá¯1T©VÐvŸ'´^N(¥Å‡£¾¶—8‚©,ËsŸ©Ë›×§ )·ÛX¿¼<¿³ÙiÙïúµëc¹½ðAJ¹ÜUlÓï»sXi~iEËA„þ'²|ðÛž¡à1´8Ér¨‚ZA/(}0žóHt»¹hàD÷ —H£Œšªu¬Ü…xg¸w,¬GB¢Ã`TÖ½rªawå0¡:Oº[qÞ°õE:¾§çu—ÄÐC.J,ùtÓ€J?} /óèÿTjOx‚NZÊ4ñ®8wã„b‰ÞÏ5ðYåÍŸÐÏoŸV[δ•ušKÎ3ë<-ç¼3T|/å´N[àôé.T‹ö](åYe)‘ÕŽÒÖ¨vÎN VkÆ´•ÙózK”¨h¥„rq ¡øðš×YZ“Ч ‚–°8MÁ±<»8OH‰† rØ„FM,ÿžý|¹  ÉQNµ¢c/˜ñMQ ©hR¥'õsgêu><ð`\ÜsŠE¡èN+ÊÀy¾¡¢F÷œÔ£‹6ÜêkHˆ§×ù^ +P”Áe ,¸xýÏKlöãçKìû›Mo¿þlön@­ò–\é^ŠZm¾Hiñ%@²»KÁT–å +ÕêòæõéBËí6Ö}º½³ÙiÙïúµëc¹½ðAK¹ÜYlÓﻃ(…ïªUÐÞ7TI-ÈãèÁQš–÷Ž;FF-˜È +àQ#ÜRYÁ +zqµ”2y·ZªTº@WÒ–Oé67½Òß[¸é3¦¯ïйðSÂÝùr¡hÂÖC^.Ñü9ÙôµR:YÉÙŒ¼Ô”ŽЭØëC +&â"yÍX¤óèÈϺÿr¾ +MrêÈb›~ßDyR)PÔó¤¸ ö~öU– pvày¿ÿ |‹Ÿî€Óß®ÐÔ{àãö5çèí¨oœý|Öcj¬;r¾@ƒóÒ$¥\¬‚»÷ãnoɪsS Í3y­µB5Q®ûî@$ö„,ý2WñžóqÇ€uli~45iŠÜ@š˜âˆ¹%&/jØO –hþóÞßï-çë¼cëÝex[Ì›·,†¿§øùwÈ<+ôðóJŠùrKbk!VMY¡I­EÁs¦Gî'¢á9•“´ÞX†.ˆÛQÜS, +M½/ÐУ :el¡1Í•&)YÏ\* íŒs  Ï‚)xÄú˜‚I =qppÞÑúð½4€‹JŸ^2©AÑzÔÆ”‹J?_|™ó¸ÏéHÛ‘ùø?ݧ¿Ü¨aÖ^dRs&žQçVK‡·ó˜é¼ZË艦@Ú»ùðZ Ê‹éåCÖgȜɓ5,F“:A5à t¬à±Áë|/G¼¬Óœq0Ö_þË~$7®ëÀý;…O€ ëÁGÈ2©l|ÿª×’lÅ6ýK3¯4úDÕdc‰1©V»Ñhà°·÷3νà°Óåãûál&É`¥8OüÄŠÉüŠ%5ðLne]”uçr7³r½Äú¼yÚ3m±ÛÎåffezÚr›®~XIó5¸Ê~ú|z\AͤLsï]lØ’º‡.«[¨æºr}O è( Õ:V¡cИœOÈk?òî4vsà;¹´¦½^4 ¬jÁ, ­ç<€\N[¨@φ‹Ôga#õιlQ¾GFÚ_èF)ÙÐÿ„¹d-¦•óF%¿à|x™{ÁäØ¥ÞÖ:.†…ndV¶Úè˜Æ˜©U9¢ínŒ€.j}™> 4uÕZs9æ(§Ò¶ 鉑+´‘š}ÿ­$ù…`d®Â”²nÝ!ãJIl+u ÝÑKÈ2tnúw¾82`¤K‰û">„ /hFUåˆô²2UO¡ 'Õ“ÕB¢é9+ ·Ó×t]„ªçe]¤ñõÏg½½Ÿqìg.ßG ±¡3[Aí7y.!à +>Jjx±Úòá·;¼“[Yÿ+$.ëÎånfåz‰õù¨iÏÝI~½™Y™ž¶Ü¦ë†VÒ| ®²Ÿ>Ÿ^$3¾:)3eïMlàŸ÷}j¼™ð†ÊÕ+ë•Ì½7²a[Ç\¼åÜÉŒCBGÃõPÑôN險†dEÊܳ>|‘b’Á Ös>@é¿«–m±äô"+FйSÓ&Ýs‘O‡‡+Q輤Ö{K€…»“€A­¨”ASQò¾@÷÷–ý¡Ãa.ñüãœÎPâ(8/µl CB‡Ÿ[;B-ûw"]^„Å?+t½G®Èõ….ÔÜz;¾BáŠfÜ‹%€ÌQ¡,ÚÇ–a1l÷‡¡—vƘ-¦Î©ä-èc²®8;õóÜð¶è™ØoD{øyب˜§ïön>~ëªqøŠ%Ø„Y´æ¨SEÒ^+ãS^IØbúa{e+Ã2ÎÀ[ëɪ‘û£³’•¾¦ë¢”ñèy='JÅ°~ÆYoïg{ÁY§ËÇ÷ÃÑJ©áùfø¾wÂd~Ã’žD¬¶|øíoÁäÐÀí¿Bâºî\îfV®—Ëú²çáÀõ¼åiËmºnøa%Í×à*ûéóéET«Ï¡N$ÒÔuܪnXï£8õ ·ªÊðŒÃJI lÞˆËéw±z¶CšÆnƒË\RãPc-ÑL^ZHè`ÝUÐúî‚qômÆE@èˆÓÓÙaÒ]/*M¶„>$倎”w„Zög½P-­a"ØK#©}v €ÜžÎ[zú4€qÙ°—!£®sÚúöΫt^ èRr‹×g—¸¾ˆèbª1#£F-dzJ/ºQ„ôÑ JÒ»äÍä2¤Ì¡ËœCB˺g*^z_^é_ŠY¢q“ †Qëu.ÿÙÐå@ÿ]ä[ÀR–¨]Øá"®£c­ùEÒ_éBM,dDÜE •ª#:äÂMûˆ>>ðBI_Øâð +•»¨òܨ@æñ8GVôÜú¬8=tLŒ*ó"aYGT ëŠQ9¯)hTD8¯^ðóýu.¤*5¢\ÐD£BÛGá.’¹/ÑGÎGé¿Äù¯@ÿ¹4k%¤\ZTc”°rÉ=]ÃF€’"³ž {bj=hØEmG¨eÜ1 (šÈ•*§Œé¢ey„ÎpJñÓ×taµ$[Öµ‘zÃú‡½½Ÿqî‡.ßO´´l ÛÂ÷k{. “ùËôªL¬¾|Øí¯Áä–×ÿ¢[º¬;—»™–ëå²¾ì¹;É®73-ÓÓ–ÛtÝðCKš¯AVöÓçËâ>'ÿM¬½ üûÞ #kx|ØŠZagrÉOVRo¾§Œ•óFœsïbÃö¸RãX#ï*—FM&“ŠÆy`zS”ëî€KzìpîFl¾}̪ä*¯¡õ—`©4xj ë,¸ ä!g®FÆUá…œ­PœûsÞà+ÓW·!'ÕÖ'Åᕹh•€7®)†*U :ÈEmýn¥ì ‘ÛP&Ó|Dóß:X—”"Ê%l‚ñÆ[™eHS„ÎKÎ=ôœöµ^æÔ‚ +Õ–V¨ qj}PŒ Ãq5æ@Õ\¼éå²?ðý ½R–³\w) ¹Øô!•Žn”]Ž0ÆýcT¤O‹ãרSòtDî Zñü‚ñ +茿x£…Jµщö¯O¡Ä­º gW‰#—L®&'«ÞO¢¬ˆ|úš®‹PN²¬k#×Ï8ìíýŒs/8ìtùø~"¥:·“ã!陟>Êô¦L¬¾|Øí¯}˜nÿP+ëÎån¦åz‰õù¨iÏÃëyËÓ–ÛtÝðCKš¯AòÛçË<Àðã*ή[ØP6vE^¥rȶ›0—¤½ [PWÜÙ©J¤^ýÃ7gë làD9S®5`q"Y;"Hÿ?,MK@­€òäòÅRRëíp|Â!•VR/òч©hz¢„¦”Ó–ªäÃ#—}›~®¤å…«ŒŽÛfXûÚ_ã`¼¶J¹ÒòwVJ¡lµoøÃã$¬oŒ¨LRs<ÀÁÝekˆ±.ÃöžFš“dȽ¾˜ÛFgÜ3iË[½gÄ|…®)æGh|÷®)ÔL¶T¾ç{Ïè÷©å¾sŽ_ŸpÄÒt ù:oTÝ="çL ¼¯Ðÿ ü •ÃYœóõ¹û̉¤%)`²5|Uâ%ĸµY…ŠZÏøøç…[¼X¼¹õ…zàüæ‰Þ8P˵WÒRö¾9çS¹×º )t]Þ:^²‡4†`\8$ë†Ðë@Wè9Þ!½‘‡ÇJÔ<õ‰kx¥X!M7Jh€ÓV+…ZÕþp¯•¨„·¸—x„ÃÆSN}ý p8ÃFsˆ¥ªtòâd }±|…γ{Ïy£¦~ïˆ~FçA„õꧤîòÝS|1ô˜þb•JÊ} ƒó°Jwª)[¼:Z™J«S®±Ö>-ÆpôƹOè ›ÚÐÞ‡×yØæ"°)Fî‹*Uó:“ùnèÕ]rk!Y‡ÖE{©o/Vˆ‹†Œè \…û2:|-ðìÞÑœ#窵¾Œ˹Ru³ƒz¦\®8Ï™œíð:‹¡ÌÚò\ÐB9±ÖÓó˾a­ÃÛŸWœKÅç4Dh¹v-ÅʸÔiŸøoÑ« 6‘É´¬™Øx¹ÜÍœœ†x>/5Í™¦ØûÌåf&eú·å6&|°’æ1¨*vx¹ÚHƒõÎöÛ8õMÌкl=¦7 +ÔÀEû`Pºø½†àrr…\.ï¼ +i¯óœãˆÂC꼤PÌ‚»4ªÓ÷ ¼f*z£u PB§æ±ä˜I—ÉüFŠ­b®z¢„SúûJôä{Ùydw+}o#*ª¶˜½…’ ïÑÑ}ôwàž©•ÜÛâðÞ‚xnƒ¢ šP‹Y†B›¢dß»É9r¹D.÷!}bÉ9õŒÐ9RK•ˆÐ!æÒ]¬R͹¹1Ü¥¤¾þŒBèRbÝ7,vxûñóbm¼6ÍQ\®²M—:mŸ\l¹èû¶‘É´¬¿2±ñ:s¹›i9 —çËœ‹×õ–[nÓiÂ-iƒ¬b‡—«x“2›ÁV‰´]|ßöñ}Û¶ß÷:iÓÖpè¨U6éwÿr©¶ôÍ\øL/¬m‹¦—€Üÿƒt÷¹ü—twf/ÅÃ*=¬½dDS¹}HÁ€õ˜‡J—äQiÔ P”¼O§üǤó/øýÚ$÷­ÌðÀ'™7í }xà¨þš½ýÞX.¥.W¸å¯ ¤Â¯Ójº‡­|ç’Û&]ïî]‘Æ•KÜÊÓKäÈ’Šj@Î+Õ˜ýŒ%fd±¤Vûnhxà&¤ÍâáF(÷Tz¥ ïäPJvîG8…ª¥>± Ï9lÅjí|xàK)uÞss± z¶|ÃY†ç*Ï"½•8 h)JŠ)󘱄§ª{˜ùWtVª¬üX­•="Ëö´Æ­ýu¯€û®¨ê½`"°®$¹õõ?ôÀÖ‡©ÂI7'…9Æ3uT£ ­…QNµËðÀ2^Q]ð²]—Ì”µ^§qÁ¨my.JÇáõŸ#{z>bÝ7,vxûñób퉋Šƒß(sW)”}ºÔi£½-}¿Ã.2¬îýW&6^g.w3+§!žÏkLs.\×[þm¹M§ ¬¤y ®‚^®öá¹ñÒ|)ê΀[âvÇ{?c`yï#Ðå½ïÐQ5$§¾‰8!Awn}/0¼\j²^çÃÖ»3Ƶ†Š¤gÈ™%T³ª¥×i:À ‚)^ö€¾ñE˜®Þš‹UJ²G!Úw¡Â”hÀ‘ZJ‘€[øšsßvE`üfÛ àBånÚ‡–œÇTyEè¥ï†Tý©‘s¿Ãù%õr…\þçhãšöÎA,Ù¬¯žœÐS’ÞY†çý§z +Ù …åÀÝRD7O¤µ'<‚VRÐU(¥¶wG!çÀå¸<Yp:[ê{Ïb‰špaçÉz7^æ‘K?^b‰YACÏ$5K@¥ceH= ð°q+° µ–[<±XÅŒÚGÜ΂Äe‰{ÎÈ%ìçM¹‹Ã7#v ©óÊ$©ôÅÿùåä +¹ü-?ÛËÅT9wn½Ê.0CO'-|™3þÏåð: ê+òïü\˜ZÅã#Özz>bÙ7¬uxûñó|é‚0‘’ƒ%T¹ëŽEÙ§K6Š–^<_ôý»ÈdZÖ_™Øx¹Üͬœ†x>¯1͹Xp]où·å6&|°’æ1¸*vx¹Úˆ•Òf@ÎèU¹½…mõy? c· ,EÑå +ܧƋ{ïÕÂ>GÛå7,lÜp´B7¥:͉SªÏhM¹ÏuXŸJ‡îa.Û“ž(›]üWœÑÍ¡»P.­÷Ŭ£b7É{;£œ#—Käò 3â]©{ØËæÕΘû( Œ"PW»ÓÁŒˆÛ*:ë;˜ç³Pb ¹\Œµ?ŸãO”RíKèðYÑ„¼æ{Ž¸Ejù +±pN}àžó*è|{ÊÇÇ.–s@[A rahåà\JëËg„®"S­åôQÃV‘² u¼ìé^[1¤`[”5¢¡3¡öÕ?€Ò½ºÝƒ>¤\à/ž9`XDga¥öåh|vôJ’ë=[ÒÑZÍ-(ô"u:úƘ¿Ïè¾”b–= o.tF³þˆŽ¯¼£w)¶ü·ÓÑ…¬qt#œÑL™KL_,ê5¨ÒC7L¼Œ¸Œ®EÚ$ÇÓ +gÍýù8·äu!Ÿ'ŸÏȽ(M¯Ó¸8Õœ—ç¢$.x~ÄbOÏG¬û†Åo?~^¬ ¯bU|ÍFÕ›^‘¢X—:í•Dôê‚mÀ1´¬™Øx¹ÜÍ´œ†xî‡ÓœiŠ½Ï\nfZ¦[nÓiÂ-iƒb‡—«¨%›ei’îåŒÍÝ÷¿äŒÿtè(Ë9csèV§—¡ÊõÊ:“¦È‚Ï”ÞRîÜ œ)=×½µœ—Kàòûr}F¹–ÒG»ÒtÏÚûâ°é x­mοkÑtŸò‡4t3⬡Zdz2ªÖú,Â!ME¯“o Î Ré/LEn@_.L•KTγsD#@Ï”lµ|E{‘<õ1éq#£)U‰‰Ü©q ƒÚZÄS9©gB=êY§”ÍrPÁdá>5ŽŸ_ðN¶{þ2¤\ tÕv¯±ÒÕÁºgwãrnRÓ︻oÜ ¼ÀyÉÒõ¤êqëh&«uà_á.7[Œ?VËŽG4jÔôêÒ×Ñ ä—+äòW8·B©Ö˜U4‘$Ž©óÒ¼/E18o)÷-]èL®½¡G@X/Ë(gèDƒtU2ö•íð:‹RѶ<—Bd¯ÿ±ØÓóë¾a±Ã¿ìWMvã<ÜÏ)|„ø!@®s!Ëäeãû¿7d+–èo”tËjâ›^‰bLªX) +—·ÏÅÞœIœƒªem]J6<òpTôÜdÓCoo~ §Ó[žÛ_ Èh^9½´\‡Óü´f±á¼ßôµé5]|ђƱ“%vz_$WÍ㥢¤­4»õà¸ÿ'k5ºÍ¥w„#Q¨6æÝ*xºk£FèC2µÜ–½þåWæuØî—¼ŸÿVÉûŽ³|C+˜œ§˜2/ZŽ– ß#ç%rþ¶\d(ÌÒç5o6½}*=n-|Cu½ÿg =ô-5Ô–õþ3BPÊÍ eiíå—Ýå€ïß%ïc}ML_ [ŒBCgÓ#‚×îZ7…ĺå/½B/EZKïß_DCúKà˜u‚’DÆJ'Ë-çR–J[ŠŠGtÖV,Ýsî…(‹êÁ*ç{ä¼DÎÿv•örß›óVsÑk [ü +–€Þâ~N•Z?ï¿‚†nç[ =€»X­‘íèZPâ]QÏ-‰uËϻ̊&Îyj9 —â=¦€ŽnX¤íBp>TѤ­»t\þQH\,þãT–W=µû‰?†±ø=HešgöÕçϾÙËëÙ÷½øf§ËÛçbo²BNJLyþ•Æ#æá¤þ!¶é¡·7?‚©Ìujæ•ÓÛHËuèóãÚ»ôú2Ò2|mzM×_´¤qìd‰ÞWÉD<æÒR7#uW¼A÷;•Ki[ÇÐõœK¨Ff†ž ”NÖ­Üqž2‡²àYéٙܖ½Ð].UkHÖ]0b²•“º¼¤V Y T}_0µ¾¸À½Ô ¯póŸ1¯Ã²Y‹v×Êÿ»Ì3””bÖ¢juc¸"ƒ*µí@èƆ¡K«i‹õ./i(‚í%Ý¿=#¼êááe§˜Žd1##ùÞm)}nxá{à¼Îß /I¥5õþSW`™{`¬¹ Œdž"7uAsAÖÒ&€îòûæë?£neÝ^¡G Œƒ1bjq|y^!ç?sE¸¦¶0ÇÌèn/Òú3,˜ŽH]»ëÅ4®Ô£ÒÈö‚sÙʺ}úKØjDP(j«o/Šüm/uÅju+£÷©óÀõß|o=ù=p¾ÎKà|¾[ +â–µô©–Àå?A–ÒÊåɆþ{ГrÁd`KËΨ‚yaý†\Üïqš¦ +¨>}ö­^^ϾëÅ·:]Þ>;Ë€¡:)*7ÿO¥2<òpPd]=ü¦2O»‡Í+§·‘”ëpšŸÖ Kì¶rzI¾6½¦ë‚/RÒ8vªÄN遲ˆøÙ5  Y šw>˜Á!öûSQnàòQþwÑ«ƒd‡gŒß ¤3åÌõpëݺ˼XLè•d zW1c–zöʧ­ÖÈ{êwï䢆GgÒ=윇ܺb SÎ-çÝúÐîºÌ#^Ђ +•ˆÐ¥Wn•ÞÿõT¬¥M\8{ER•-[ì“sôòÿ Eptô=è-ö¿¢Ï`½ðƒ¼Ø½ÒKòŒžB:ºU@õÍBwcLé1ÆPzJ³…¶Æ  GŽ<ÅÔ9åÅèÉ:ßéŠFeÝ d«õê-acWè:jY¶.i¯JÇ°¤çr¼3îtKszpKY.ÿ|÷#³§.Ëñ€·F…±múgþsö½^^ϾíÅ÷:]Þ>[+¤ìß׬«ä+Jexäá¤Ⱥzø)Lež&¿Š4¯œÞFV®Ãi~Z3,±ÛÊéedeøÚôš® ¾XIãع;½¯BµêïŠù 2oн‘‘Ô"ÿeàÏ6à™r`IãN,¢e­úŽ{¸÷_YˆH;Õ¼Yãæ¿á-±ì~=w‹@ɪæÍЪ‰Ô9AÎéˆ º?ç UéŸݳR¨`z'eÚ*ÿ}#öAjYï¿þ{¢&8që/”nÀ”[é_.=AEø¹ìÏ:cŽ™^B{zQ‹ŠÕ-Ö{…U0Þ1綖FpuCi9ÿ üiÀèµtÛ°ðVíòvŽ‹Îzl¡w/—Øq1+…Tº×¡”ôoõ?Ø_JE É:ƒ‰XŽ* ”¶1Úß_~JùöEØ:gPJ%(ô$ÒôîåâÞ¢"[ÅhoÙ? i ½{o kŠ‘CWØ~ÎÅ’¨K„ ê}QÉ!û¢œÔbzKØíŠf(ÃÔ2 Ñ’ó +ÉÏô1 YýØ4Mæ‡EŸ?û^/¯gßöâ{.oŸ+NjAvN|@uý•lxäá È6=ôöæ§ðÚ¨2ÿ•€Œæ•ÓÛÈÊu8ÍOkÎûM_›^ÓuÁ+i;WÞñó’³;– §ïpÏÓ‘ Lä ÞóÛ¸Ò»P<×Öµ (€©0PYa<ò¸v(h+¯tJyP?$ —yD­„¥<¬±¸™3iÈ ÁLZgé¾íˆ­dòîÛ¾_yÅVzçÛ +¤’¶f ^’ÛáVëìxàDž™[3ì¾4 ÐJß [#ÒVÞäofñ. %ƒáJJé^)ÙCJÀ\èc[uè1‘K•œ£ÿ/Ö}….Ó8ÝÚ6%ä vns­¬¦ñî1hÄ +I%¢xÀ­B¡ÜzK÷ÀÝ™¤e¡g`E (—¨ƒœ¨IŽqç–°Y‘ ¶cEà1÷Ö_êÊ Aå’%`Ü +›ö!— +‰´*ÿ²È?€ŸmB¸-mK„ò$ÀœÚÖß¿XÈÒzy„̶"påÖY"èÜÛP¥V.ý{ C•²GÞŸsI+cEÿ:¨9oé¼WoQNmj¹‰Þ]é>…J¦-è½²4ry‰–TB:zà ³¶r鿤áõéœoqÆ—À X͇—aIþ±òôÈÈŸý¬‡Ç£{ò³§§×ÅÑ4'œJÈÒ5'Še¸Èðž2ÙÕÅ_"ƒùw¾=öÂpÞ9Ýœœ—þ|Ü<ìYœ4Ÿ7}Ût›ÎÞYIãÚ©b;<_½H¦éÇ]óßnU9' Ä1WRŠä¾Ð3[;ÃD€Î*o5Ž>¡»¤(g\ÈqSé]5뺸—¶çE §jŽ™¡+oÓ>¡óðOíØÛ};*žRÝCéw‡î³£qþ3ÆQ²´±+çIwqôû'F†R(fvñ+h/(XÛ^Ô½¡;p&iÍ¥àäÝ¥…F¹úBcFf{¨7Õ•æß¿Ì‹ÔÍ6Ô§™¶–¸ÐÍ “¶‚Y _ʆ®ÓO)] 5"çq»?—­¤Ø'åŽ<Å ¹^¡¦ekí•uY›çº.³¢g.b〜G6—”¥¥<€¹xrÑ[ì¿û;nLm@@9CIS- †+Á%Bd¶˜Ž^€m%|ùnEZ çMKïUéÙ¨.úï¢Ð,f䢲Ë<÷£(ÚJÌíÚ[¨Vto "[@/ E/Ã’ØÃ$NQÀDýùÑÏzx<ú±'?ëpzz] ^8cñ+^wèá‰_dxÑ Ùÿq¼ØÛ¿Döq‡çOÑ©Åyçt7’r^Nϧ='Ùùf$eø¶é67¼“’ƵSÅvx¾z+)OÂ4µ~ÝåÏúÝ.Æ7¹Ø }æGéŽ÷l|SA͸ Š~Ü8:§¼¦ÖÅú§Ü^âóÑÿƒ‡ñMvA¹¬_øeµ|½å-‘os^J‰ÜC†Ø‡½ºëú l-•·úÐNéÿÆÏ‹COÚÖhèC÷Oi‹õ>8sˆ¬t£”Á(ÇÌa[iܼÈÙbV(CU•€Zq‘§J!ë“Àj*;pþrÉÿ }_èVÃB÷EÅÒúKèH{$Æû# )1õâ“8&tÄ›3i—) ø?“Æl¦ +™±…!À„M^iø]"Æô°áE@²Déˆj;Óýÿ.à!% +Ù†\åaÛPèq9oÝ>ÃÀUJPèb{ô¢û·Qñ-iÁè/,ª”ÍbŒBá­wßJ­®Öè—ß±Bkj£KǸɿD@Tq»ø¬Q/Ã’²·©ñ1ú 2<>úIG?ôä'NO¯‹ƒ½f4›b É®QßO†×Ì=3-/þLy~Œ€†óÎénää¼ôçãæaÏ°EßvN7#'÷M·é¼á“4®)¶ÃóÕ‹X’:–Y +Õðfèï[Û±±c›¡{¯N¸©û„® ‰1$tÔÛŽwÿ¶ñ-Ðó&ë}–ihÖ0QrÆ…5*k+—nöohG¡u^}P牛£)`]‰ý—(í3|Ý¿DTëç´@NWÈég8¬sŒ3êhÖº³-Ò%rZ"§mñ/·ü—ýªInÇWñ!â‡ëw!ˤ²ñý«²Å2]¥©od=b&+Q,jÂFãxQLëÏÓæ\@õ,Ï , …6é2*t/›Y“é +ÈOœK†¬Wßœ‹Æ„΀֎Èú+¦Ñ¤]âõÎåø«€›ƒçlFZ¬ºÅðç­bÊœ‡²`íºáyž×-†CoÄ°üŠØ#_çp~Î%å±U3 +Kâi®‚JïËó…å)Ðœz¶ŒOó´ZžÖ—'ã¤QNƒËP[N›˜¯BI‚ߪ +¹®€ ”Øùœ–TcXºn£ŠýsÄzûsŽ°—ˆuº¼­BW`7™å¶sÎJ>=dº'Fl{xÄ%Lë²M@FËÉùíš”ÛrÞŸÏLGôûäürMÊôµùµÜü$¥\בªj§‡{(£Í£®÷ o`± ùuK¥b ô¨,Ö^ †-¨øÔ9¬‡5w4¯l9ynQÜ^æ<F¢DSÀ]ÆŸ» d©ÁsêÉ’A+4ã”Ð=ú¯µ-ècF@µõ\Ï .V±|¦‡•Ò1ã cÜæÓ×þÐÔ¸w.+ä¼BÎÈùïä<±Í`-©FÞ;¦S)G¨Ëþ²˜µ‹]¤aFYL=\J/‹袡.[½hȤ‡]4zÒÿ3´ÑÄT×ë•q|IðÍ‘nÌ”çE^Á±ýZ—Cyžx¢cÇÞ¤ÿc¶¦çXâWKT‚.šs0ªPªö®küM<ŒÖ(Q˘ó´ÀÓÎs±PΨæ±·†¹=Äü)¯¼iÇf¾59ÍÅH„­‡>>ÑóZE3ðmÇ5&]j0si^eT(¢}ÒnÿhámUš+®€Owi§ÏiI1¦ò¼‹G8¶ÏêíÏ9¢^"ÔéòþµŠ,ÀÈ|M‰[yìÏJ>=dº&²=<â™üÞ& £åäüvMÉmû×ÃÓ™U¤%ÞüµùµÜü$¥\ב©j§‡‹ˆX½¶oÞkÁ°ú»çÐ_O5Üåœ1ÓÄ»@Þ7ÍH—©qØiº8”êGtŽýé"qIJ)y=ÂßíÔôî˜.ø¤[gÈù4 kÌ0ñ颪f¸‚…úÞ& £åäüvÍÊmû×ÃÓ™U¤%ÞüµùµÜüd¥\ב«j§‡‹TgºJ˜p*!XO}ƒ%%t††œhÞ]€WÖú1``k·@wp+sn€¥&ðÐ×Vû†·?ðÝ Ô *[?ÂŒŸóèoÕ·Ìô˜jà…ŽÐóÝŒÆÓù™¶$Ⱥ#°z?ñ&€Y7ÁD†ú®H±W— Î% múÅ1é¢ÀÂ}Öǧ‹Ä‘Öóü—.¿êòœ.ElË£I¤š²ÆBŠôÆk|ºTp²ÞŒ\@PzžgðèTÊ–åÚ½@wEimK[Æ,ИFÑûñ"Á4ÐkÝêÿC&Ý ¨SÎ^”6é™»hZÓ•XÓÅ ö¦+ƒ¦'Îzjÿ’ÔìÓ›¥¤‹9h˘rr9œæÿïâ"àMéhIß©)§Ìz5釣ý¹¾™&îFèÜf|iL¬/ +âØC?ç5b÷ÆÀ¸ ùÔþT}=Ò”§ÏiIç]ÂضØ>G¨·?çˆz‰P§Ëû×*²jmW½UåÇ¿Rɦ‡L÷D@¶‡G\Á´.Ûd´œœß®I¹-çýùÌ*ÒoþÚüZn~’R®ëHUµÓÇÃEji³ø:¦š¿‘ XÅ-í¹£ã6ãøâí6pWŠôöhXøa +²ö#A¾›×ž'£oä!“iU¥r;|øo¯äMÛ6úÈ9×èr®ñD˘òpv­¥2Ñ7äÎЈ5£(V0±ùðmH@Z9"ã{³Üã7®½EüÇÀbÊ4â–ŒÕ9M¸&}Ƈçxd¼õBž¶ +áÐr®Ö{ÛÑEÅ1'î´î0ˆRjíE%AÂ¥'J14z”áó­@FýÈ™Bij"7À"=ò_®¼+¿ëà„çì÷y3îPZ„KˆðqC|îQ%‘ø£JTgo1Æ^£¿a¯+¨Rj®Iñ¾<›¡å{“Å€›n\Cé;èT)ÐWôOËÙ=SÂV°V{]¿8HŸxò Å)@xȘ»qV`?Ä—ïO—¤<ŒcÉhn»rQï]yeI:{VÖ–°<´<)Ï Zn „½GÌ=:¨ûô1K4µº4=¤ù¿‚0‰¡§,"áGL {+ºBmÔ·¢ ²&½gùþÐM׊é¬}…fàKV»è®Ë(¡¸T¨<_Æ3«¢ÕC:Ñ+ñÉX”C5a‰zD–rÓ_á¹ÒºÜÄú’•é!ŒRU3©‹[³“ªAu]ÛE;}NK* A¦ë6 +TÃØ?G¬·?ç{‰X§Ëû×*tƒ‚a㦬 ácV”lzLÂð/d{xÄ-,ÎoÑrr~»f嶌}?Ýά"-ñæ¯Í¯åvà'+庎\U;}<\„4R=]$þëÞk ¬ tíÿÞ¡mÒpDNšrsI%ÀwDçâ}ÖÇg‹A)­ï×ãwPI47æ/Oka2(%ô`¹:}'tœ¸ö]h`´@ ”-k7¦š ¨²'㜠4¼ï“Ùküo©˜;miN‰†Æ»Ö/割Œ<±®¸{ï¶2°\cA[ÐGÕD4ËèÍ +[Ïó 9‹ýEšT]»óâõ²ìÏs‡Ê%§,¦.Ѽþ¼:b}E7ª®=ôñuQ )õ>w|à¨nò|L»(PƒèKÔ (×Þ.fÈzb“žx42pÆŒ†1rŽµ/Òñ cZà D¨×–ñ+ 1Zì/,?öÞæf€Iw볞Á¡+0[ï¹2½°õbž¡…4§Œªh ÅSšÅ°è^±ôa{¿ƒ—ø‘ª—ºö[¬µÓç¿Ù¯–äÆqºŸSøA|¹Î|„,;•ï_5ä8–©i¥»l7Ñ5+Q´ ?ÂÓ`Óe(Öïÿ#ÖËë1ž"Öáôöq““ÆA¿éï ¤·%¤Õ§‡LE@²›GÜÁ”/ÛªÕËÉåmÎÊyûóáéÌ*Ò%ÞòkËk9øÊJ™×‘+¶Ãë‹h Ù ÓE7x9êŸû|1îÇq{ÞuΙû¾1®|!0êǨê{qãÚ“%CÊcòj˜iÞ½f iNžGk½œÿ +Ï¿…ü;²ø×V¨‚ËÆô•¡¥Îe¯:Çä¸F¸§¨ùý“óKàO©‰Ò¸þ‡þPèDÖf|A¨ -eγöPEëg¹ñ[peÃ)ŽßCCXjé›’;ÖúødÑPDìË3ƒqq¨Jý\‘!çU6ºP†œ‡Y4äf‘9§WdÐÖ÷þpZ§àôgô<í0× VßkDchâ柵<·P…V¥åÆg‹€jʩ EÚSò\¢BñÙ]#§5rúûý–Ͻïý9èRÑzmÉ=µ¢sÉIu‡Bm/écòÅÁ6ìâý…ñEÚ´ôú2~°”ý_@¼õ:>ð°Šm£<»:ÿö#‹TQ ŸFHóZ¦ +¾ŽPÂȼOKŠÂw)ÆջLjôòzŒ §ˆt8½}ÜdÄÕçÒ­Þþ“;ñé–Hvóˆ+ X$ôs»Bµz9¹¼Í)9/c><™ŽèçÉåeNÉôkËk9øJI™×‘(¶ÃÕ=âVœÄ[”¶–.À <þÚL ã}Ò]ÅLã*ë:];‰\ã/©ŒÑzH Ó3ˆ~ÿ +e¢ÞÒe ¹Zëy>~Î5€=e¹Íï_¡N’ÈE_¥\›ä̹@ÅÖKKUtÞÐó laãŒÊ~ËôÙõI×Ài œ¾ ÜÐûúümŽ?±:U±%c.nP%¬Ë[ÌC)¡KX\×”ÐubUV¤5¹ÌXŸ è UÉ)X¤Ïyº$ö¹R¬—ÆñM—©>£=bž£Vs +£Aõ uÉÐŽÐ0#Óœ©E3çRödqLž‡¢×â?BN7ÈéOuѤÀ œS²ç îÔ@½¦’E)®aÍ㻦kYD`öÃû´”˜9dÙe ÖØ=F¤—×c=E¤Ãéíc˜@'70eD¬Ýz +­óõdº%FêÖ¸BÌ +*—í +Õèrry›3r^Æþ|x:3ÑÏ“ËËœ’é×–×r>ð•“2¯#Ql‡7q»ÏêëúŒÆq·‚ú; ›ä2ÓèD¦™dì]¼öÐWÈGþºLNc£aÛ:®Õ{qŸ+a5 àáÔ1©°HÝ…>f}8•[#“:ZÛ›Æ$Œ€ dTÅ.–hp¼"K!~†,>¢…K_¢ÈR‹fî€z=¸M|²”’èPØ{sž!çX6$1Aη¼âðj®®jïÎs¨9aÙ,FÌyfQduI˜ñÄž%/ôÐä]=r"J Ý1Ž´=ç2$ôàºpémîøú" [í|EWÐèÿ)É’Øææ좙½¢Eì Ë•ç1YãŒSQ@§¦}žé™é’V(—œ´¶0…¤¨ +p•5Ï)þ;¼OKd@÷eK((Æþ1b½¼#ì)bNo«Ð bˆsVˆðöïÔjÓC¦›" ÙÍ#n`*—í +Õèrry›³r^.ûË™U¤K¼å×–×r>ð••2¯#Wqç7qZþ^¥TSÌz”TM48^á&ç=ùª¢® WNåí.Èg¥9aíGÇa;Ç'ð˜yÙ¬ž#çeúVÆ Wjò swwÂdÎzÖ"Íœó^[o©ïýY×R²JcR¦;ªSî Õ3f\ywt2åS-”1ç Ý£ù˜zžzbÓ•–éj3ÒE±Æñs¾Åª¦Tô_âœÐ‚í)Ùâî}…Öß®ÐúD¶ o¨âý¡ÿ*ò¿VΓEAíuÿ!;Qd½2fE/›õDO=’΢½ gà‹CSí©>¾¼x©9kTÁ¨gËø­(µ¢“™%—¬Ý+`•œY÷裖SÒƒëEŸQ¦÷×—¦¥§KàZJNë’X³¶ÑT¥e²\¤¥†Co€Üê +¸Þ§e- M–mŠ±ŒX/¯Ç{ŠX‡ÓÛÇ*´7m³ÜzÁ[7§Õ§‡LE@ÒåaŸoq  ÷úùi…ÄçÉåí_ö«&¹uîç>Bð×ï>B–IeãûW $ÙŠd*Ÿ^2²?vjVe“nµÆÈÊõvz>íY8Ÿ7ýÚ´ × Ÿ¬„ñ> ­áôv÷"šO©}‘¹žÒêßÍwÿnYý»¶ª'ûü{mYOå´:i%ËôWõtƒîX0û2hô Ý­€Ë—Í:ÝÕÒÚ +–ñ=äe‰¼¬‘ï5ëy¥œý[Ûfðο¿ ü+3˜›»oˆ€ÀÝ~ÿapìY,½Bk[¡ýs.TsnUŽ`-º­s¹8ëÅäËl×5ë°îbxcøBàÜ£‹Æ¶‹öϹ_ÅÚ@À¹¸£Ã–¨öQL1mûhü1ôøôï’¾ØÓb«–îq»ÌsN;)w-öt‡;ý;ÖÏuxÿR©^› S¨RÚj Ž ÝS.—½ÄÕ%tŸç¼ !ú9pâ†nÛEÚ5Š˜Óœz³‹n æÇÈŸf‹Àœ×íìÒ?çB¶ÕCJ´—Z±BW4ñnÄjX«…=äÓûpë/¨:=Í”Rò§g?èåÏÙϼøA§ËëÇê\¡£ŽßS"q|¿êð3œdºèmå¯À¤RæO#EMóÎi5Rr½žO{VÎçM¿6-ÃuÃ'%a¼w¢²žÞî^Dü%¦„”"”ÌÐ=PW…ª¨tOIþÿ¶c t÷±X¥5àn“é ¼zí2 p71ŽE!KÔÇÙÕyŸÐjL­\Ž‡~XÔ˜¡*¶+˜>ÝE)¨>#jí.BZcËùÕò4±À2n¤†i-B5•YŸ°2÷ÀÎO±óGt¢TJ«tÎQú=úÐ(Ÿ-2—–õþ ]=qÕ½Q´W¹ ö"%É»½¨Kè>…’aõÂ3¡YI­`ú·ó ÛÖhÿ¸+YÖVæÇD+Š!"θœ»¡ç÷\±OC÷/›ð u+Uk…@º#Ï•÷ ÷ÚŠ¢ågØË#ªTyw¾è’u¯ÒR6¼AëÐS]µÜzc÷­Ô +(pKkÿX+ÏêE°R.Ïa ³v¸@@.TSiç9€NäMt«u_ ÀbQŠÃáxÖ‚*%λZé¬:#³zRJYÖœgâOïÃ- e;ÆÇ)ñðüìg½ü9û±?ëtyýX=œheœY85B¢—ªŸ8|aºèmåoÁ¤¾íöi¤¨iÞ9­FV®·þÜN×=‹“ôºY~mZ†ë†OVÂxï\e=½Ý½H©,c«N–ێ׭.oÀý(I[#èØÃ~t#Ž¢8ö».•[;øñœ+UN­\ú/QïÕZŸ óG˜K•ÐÊ‚ò`-ðŽ»õ ÝÇ°Ùk!—Óë}Bws1ÿ t.ºa‹Ž[¥F%WÔ S¨:²7zb¬ÏŒ‡KÝý…CLˆ¤Sç6íŒCiy—¤»«[Nm‘þùÀBj5¨Ã&¯J¾@õtÞƒÞ«½ˆè3úÑwIÿµîb”’¶± 8GA”ŠQÕ”!¥R•ÐrÞ¿X€Ý\©r2@ΕrePÊc°½ØÒeÅU‹‘»ùÞ8×'ç•x#nõ߈PµbÙ¿Q'"ÑÚ6ÿîÅâÉœ5µ9±{àn,–¸U9†XR•ˆW E(‡#WέÊ1ºPÈi/´ô™·Œ²ÖVçЕRÞðóŽ•ÎÉ!im1‘å|zn¹PÒ8=f¦¡Û¾ÿçìg½ü9û±?ëtyýXí NsœòP.÷QNâø†%T?ÑAÈtÑÛÊß‚I¥ÌŸF?.Í;§ÕÈÊõvz>íYœ¤×ÅÈÊðkÓ2\7|²Æ{ç*ëéíîE +ku©™ÛœñƒžWW=¯~þ½õÈž·nÆ{6öW²¬«‚j€VP3tqñlô¼ã9?ºy»GxA]zAü0/˜W*¶Ñ:ú×y\j/Û}ø_éüi×Kè!¶S#t¥¼îÖjOwÀÓ¿"saÇ}H@zº)z¶‹ñ€ôtèæïF+êß[|rÄ ól7nC5¥û܈œe#'v\ü˱´M¡8-k«q„îiRÝË,½zy-:Ç€ŽiŠ^¢œskŠJN-ÀÐQ•Ûþ½D-otÑî;ãn-ü„öÿˆÅËà,•Å¢$lÏhþ˜ˆ`#W¥bIº‘FÍ-Iãž\º„î­¨HÌ-¸³¨ÛFàBàœÉªµrAJ7<ºøqÒBï>x‰V“6/£{: ·éóh¹Ž s£˜7J´{Î}È.!¶]£Da§Q¥à10»s^)Tn•Þ±»Ii ]ùÎЙb¬§÷á6Så8=M$VüéÙzùsö3/~Ðéòú±:·R-«Ö¦¿IÔáR†Wdâ$ÓEo+ÇϤRæO#EMóÎi5òq½õçãQÞÅIz]Œ| ¿6-ÃuÃ'a¼w–²žÞîÞÂ…§ŒQâ3úÝA¥´.:pŠã¼ èY2$tw^ 5ðÎÐ+U•¶iý0 [@ +¦—¸CUHµ¸Ðµµ»¸‘F† +ÓË + ˜jñ6Tè!À²nIÛ>Ú}v)B’"p{Öür0p¬T¨Áë7x‹QLP.Îy)¶—»Lèã¸ËmBGàVçÿï¡ÿ†£­†X¢ƒÒ­Eþc±|û£… ·v@¹$’À­¡÷Ï9°+*™åÉ9êjT8fHè®.mn€.‘ªæ=Ö»ôEà ;„. ˜Ý(PȺÜ_üp Cf)†ÚN-Ý«´:e¸¶t÷_œ³¶œ÷\’ï({m¿GäÎyȶW¡=zâÐöï¹y—œUÝàWÒÌÏpÅÃû† ÜŒ£ö!\­Ému>wZâNkÜéïpÃŽžÂÄQ´Aþãâüwü.îøk]¹RM½@+¨“ªV2öpJ©$Ê­RºÇm$)>CáG#ÿN”V)ýwNwC‘ˆ8wÊpÝÞº¤6{̲‘sØh Û<•LCË8„ʵ„v˜è߇ÆRÛ†«•¿þK ²ÆC1H¥hÞ;{Å-•*ç‰pa^·N¦è½·™jµéiò74zö“^þœýЋŸtº¼~¬þ@/™æxß“‡Hç—2¼%'™.z[ù+¸Ëy|º})jšwN«‘‘ëíô|Ú³8I¯‹‘’áצe¸nøä$Œ÷NTÖÓÛÝ‹Äê/ì)”RÂJ¢3t¦œhP¼wñ„ZÚÝ=pg¼Z«•îq{š3«Qä°ZqÎk±6ÏõÚ3–Œ³ì-]ŠE¼_§²—¡»š·rÉ*­™@‡íCCC.€Ò½Hs˜ÐÍ3)j/J!¶½ F‡™±ü—ý*Hnd×aûw +Ÿ@‘H‰”Ö9BŽeRÙäþUêvÛò<ÿ7ÕîR³·:#‚A4J½ÀÔ“Üh¤ÓÛK.â×3…\:ç2À]$âðÇÇ®‡D]R½§@W­F©ubÁ´ÐDXYW£9N߈MBoe ^ÓSà^3e7â]èE7Ês{Êÿ+ã?w.ª¡äÌ(t¡–ö(Ï­µÒB#2úJ—yÕ1*2p.šÇ´Åœ´{òNèžÑ"%t°^%Ž:Ÿ_.ÄÁ¼V ”C,­ÜH‰Ó›"8Ï®¬qËK9' X÷\)gP@W-”¬3÷ÑÔê˜Ð'†3ÏÑè¦~é0)DÌIïý1‡„BXÞjHÈ•ïÿ¼à¤§çú‰“Ÿ¯Wœ4·¼†ÿ¬×J4©ý£ âk’ÚÕîBßÿõZ‚¸œv®«…“ããú~ÝsqÒé¼õÛÖe d%yÏ,±ˆÀ§¿Î4n’¨3è¥è½64+ô*>¦ééå‚m2o™­6ªe~kAÆMvoÞ“sŒ$RGè 2/)1Š¥W;?G4o–m±<ÂÎ1Ðä’ cöÚlÔùôÀ™£9§%¸FË;ôÏG´~/mä|z•ÃWšº2r¹Ô’ïuÐYã–EgmþÑÇ¥0Ï•xŠé^…Ϊ•\ çJ̺‡¬é^:Xo"c<' é­qnú€VäYcåÕê=ès +=…–Gä Í(*§+b)g(Pó2ŽÛsþˆ©(Æ2Úùô2G ­9œOb©IÆe-ŽÀ§/OhÜZ"jüè÷fŒãv¥ñþôÞs0TîòVCn‚·/8ééù‡~â¤ÃçëÇ#-"uFšM¤öëò5êë‡}­p…Ž,Ÿþ +x.§ëjaäøˆ÷Ë}ÏÙIv\,”ôo[—ñ¸á›“¸<ƒ¨ì‡·‹‹hHÙt͹AzÚŸö 8Š©xç® Ü—f W¸uW8Çq¥‹Å¾Î€çz#þOŒÎT^Üö6›¹Ît®vúöº9t°n95êçÒo7–èü¦o‡QŽmµŒ~ÎQ¢î7 ”( ‹ÆÑÓ§/QÈ%YK”@.ÄJôœ™Ÿ]ZpÍ{¸ËÖœ—Ф”8DÐÔþ–èžrÎKóq%(QÚ‘bјY97Ôòà̵ rÄÅh•”ô”eœè¦7·äÒÐ[¨Ö8¡×àIî£[@ß>Ä ùFx™ßÒ[P)£\Jô~BŸR+ aw4ô÷¢-*”Væh¢5ë|z™ÓÖ'·™³vë[Ú8Z@'è]ŠZŸ¾HûT˽"“ó@9e‘Òz:ºh²4Ÿ¾ýC,–ó8ˆÎÓ\Lcn!P9¼¥”ȹX]>—` Sœ™„j—õ™‚V=¼÷ÇŠ¦õmÆM+޾ࠧçœù‰ƒŸ¯W„T©kJßðQú%áhêë‡}­pƒÜòé¯Äå´s]-Œñ~9£ï9;ÉŽ‹…‘þmë27|3—gð”ýðvq¢KZ ¬ƒýa/_½úau×ö xw¾‡ÈÀÎ8/¥î}sÖaa±µ{6+ôâœzÁ e¬QèÝ'³QÍgUšŠÜqÆ™ZÞpFëÿYˆ˜ŸQ¢.2Zúü:O!ZâÔ92¨¦Ji‹ ÇUß¡DÁºXÞ#¼l<Ô*ce0F2ŽJïÆØ"k‘–X8c±`R(šÇôÂÝ¢pöÒì†ÔçwFÖù¢W¨ßðÅé'N]}¦«Ni耮5†Î ó✖Ht[hÞ„zlmÖ7—z¯Ñäc/b`½ÛcݺÅÒh‹Å­ç¸õ·þŸ¹¥…¬7|q~?¯A$RNç¹?”\ZÓqžÛ¾D1•¾‡ÑÐ[°Ç6:¿¿°G\Ìf„ *—Ü8º¢%ÖM按+…ÔqÇQ L2×`©.Œ·"×´5;¼÷G ­ÚúVð/_pÎÓó ŽüÄ9‡Ï×+F¼¨¯S¢ÅëŸÒd¹^é·ÄOÿ¸|Ø× +7HÁ-Ÿþ*A\N;×ÕÂÈñï—3úž³“ì¸Xé߶.ãqÃ7#qyî&凷«‹4Œ¹ëO[}üi'Öä ¸5!›É9/\óÈùüÀ[¨µÜ›f ­ÎyTîEŒ©ÚÆI05xNãäõÛ¤ÿø†‰ôÈyo•,ÖŠÔËÐSY GwN¹Ä!qºbEi-íV$}çy®"ŒÐÑF3a}¢µ|#qqx"«Î!©µ2º ÝT)“.±»tè)ßÌ”¬#¤§˜GÖ #¼´]¦ºí}݃ÁÜ)’ù ΧOŒÐ9éî²5pœl7Æ" +©Dgž£ýíþ{wÿèÎÑ[HÙ8…8åzŒ£X C.%×Ñ]¦×9äb²KÆ}ô,:rÎ0YÔPÝÆîÿWé•KLMù€‹Ž®Æ8V¤ÐúqtÀ¡•†ˆ1*b”Óh™sâØÒ»J¹ å*{ôGt¾"-YëR¤&ñ2.¦Ðä{ì7\_jð,xù‚ƒžž_pæ':|¾~\œ[‚y+‹“ =Îd¹_é×L!©¯öµÂP{ðŒ¯¿J—ÓÎuµPr|Äû匾çì$;.Jú·­ËxÜðMI\žATöÃÛÕEšÁÒñš²œø·=ƒž-72à/à°‚&7bçzÓ±wLÏ9ÄRïR>UÏûj1 9Þh׿üÀ7aNÀqœT¢ÙëLæIÚè‰bÎSoÌŒÖRšƒÀöœo.foáU:BiÄ?„JG¾´D59žA/­ŒJŸŸsL0æדpÞ¨ˆYP0µ€qSËôŒóJ'K[ÿöÀÑ„’ÊØ? ÓÎr¼QBdÂÖRKãd<[Þ£>·öDâ`ƒŠö!¨<µ4N –˜Ày«|ÚC‹ÜmC³ê\,²B§M\ “œ*À1VŒœs¸ gnÎ~lEœsc‘:¦E襗»E:'ô¼‰3j¸“‚uˆæžÃÌ +5î:ÆÑQ0È/¹×+äúG±\Lîºú¬rÉ¥’Yc¶f ë)ëeôJ!y=¼÷Ǽ¼ÕPиÞÿyÁIOÏ/8ô'>_?.¶§ÕÅs½Úµ ¥ß_£võ;¤à–O¯%ˆËiçºZ89>â}=÷ô-þµs],œôo[—ñ¸á›“¸<ƒ©ì‡·«‹ÔŒ¦_¤j‚‰Kê z·±˜îér è›Ùë¹UJÖ=™íÁú#ã1Žíã·‘ï&LÍÇ\-¿íÀò èÿ•ò{Œc ˆyÔùôÀ»¿[¦šd~€· @Õî滩’ÆY‰¢õR…¤t Šy€ÐcˆWáŽw +ÒÌø\‘¹Vñ¿Æ²3ttáìþÒÚX -Ћ'Bèp—dRé€.jc %€NÛýÁy‰iAtûv”C®¤rIŒRa„Á uДîæŒA—Õ[\¤¶1¹tÑ[SA"»è±ˆƒtÚþŸº”4¤«r&Ý4Z&ä\0ÑåQ,Ó:ólQCñQæÓk…7z”Ìé+-˜f„‹&¤6f–ùµRFÐ{akÎ4…Øœ°Aä¤SrŽÿÜ*åXèÆ9AèÒnŒÓ ¸¶¢Ku\áx +Eòá½?ZHë»ü?ö«%»q^Å'@ð#H®s!Ëäeãû¿7 d+¶©i¥Ó¶š˜élD)&T„ +…‚„öìèq^^òäq§·Ï›°’MÌ’î‡,ãÒ.©ÑG±»‹€ »Ù¾A˜)(óm¨Óç£-“ÏO¸¶§Gôòzô 't8½}Þ® Åã5ÍJÆ÷õcÞ§ý’Ú)ɇ<_ìrçGðiÒG²Ë]?2/;ç»)#ç¥?Ÿb´=W‘ì|3¥¤½m¾Å󆯜à´öDi>¼ßÄØÊäD¹ìm åúËÊí—•_Ù7"ö”¸˜.Ð}¾-kþb`»Êz¦Èb,À½ß©ôÚ;¬‚-ÀÙ‹_4dÆ™1"U¼A¤Ü\”ÅZÀÞFÈyPàìSn Ù†ÜIµ~ì>ç>”Š½$FèŸþ#²ˆ¢(€íxsX[Èÿvð,ÏhDl‘çþcâ˜ÍßgF¥ˆW!óŠÅs‚ÄÒ÷вغ(kO—Y\¤%k}ü" «. Þý{u ÑŠr‘ˆÚâÐsŸññ©B€ˆ1‡9v5¯uÁ²Dtç +–¶zÐÕ™ +ä˜Í3lÀv¼€dqè’¨ïBã×'9ËWüíød «ˆÞ>½FwÈø3æ8a‹9 1ÿ…Ì:BR‰é·\]¨¤xEêÍ?••œÜÉÂd3îšM" Ç!×óʽk‰a¸´pßE‡†N™ó4¥{@ vøh«Ei~¨ …üéѽ¼=æÉNoŸ×q ‚`ÑékšvƸ´KjÇ$ ×´éb—;?‚‹´éò_Ÿ2/;ç»)%ç¥?Ÿb´=7—xóÛæ[«JLÇXZ<¶Õ­qnÌ^Ä€˜{®_¤ag¢¸>×É"Â[Їä¹7#,©§Ëøoâú'åYmÕîòa>ðú%µCäùb—;?A6]þËÀ™—óÝ”‘ór~>﹊dç›)#ímó-ž7|e§µçÉ+ýýîš‹ÌåÄt¡%lN-BÏÉÐÕëJ÷d2®r^”R¸žŠì1<:"‡a® “p¯.ãóœWÍtiñ—•ù%ÑJ–­¬JôL+D ‹5S߉"ä¼™SŒØ‹Ä­&÷oU,„=ðñ3¶<ÛS#ÅÂ¥†Ô—DŒi·Ì1Ås#Û⢎‹pE#dÝåE´Ïzy±Ä½Ë¸z‰jDA'HT·X>fŠÇîÇŠñ›¿kbÙôæc¦œ!kÚc”{FÖµl!5édºGÒŸá¹R‘=L×3¦9´Ú·¢YG(YbÆ¡ãf;z•Â!¡“s½ìm»ä¹Ü"—o»ª½¼Dp]$l3°`OòñGeJ`Ç…î[VÚÐø9'(J)àd¡ †1=KX{ž*d¢=<îã“.Nté‰A\Ä;è.Пa-–º +;îÔ \áöñŽåðÑ–XÓüT!exô8/¯Gyò8‡ÓÛçMØ6ÕÎÃ-æ{Ca\Ú%µ#6«”ç‹]î?A6]þë¶$ó²s¾›òq^úó)FÛsp‰7¿m¾Åó†¯|à´ö,i>¼ßCQiÒ^«©×Þï|VûýÏjüYà~ræÎ-«È7*Éþ¸’èÌ¥ŸÇϹ/´þÌÙï;£ïg| ·€EŽ€¹'JŽ 0•Ÿµ‹¿Íñlu+ç¿Ã•oåüO,Ý•®¬N.ãçÜ[´jDA Ü„ØíŽõš:A•ÔÓe|9ÈÕ,¤¶0cï#@ÜD 5¦¼xÖÚ÷¢çÖ¨\#—[äòÍ kÎÚ\‚¤uKGeyÖ•œ?ú3èRc’¥ iÐ>TqoE|DʈsZŸF[d9!†t-©BN´_/Š Õ¸oEãרËbÞE\/‹Ê1çkF1B'rq1éÙòãÝ­>J)½ ?™æÿßQع¢ý¶ô}h|à(i©â,ç5Q_Y’¬”gŒœ‡‰ mB3ë )[Ì" =¬sñØ™÷p.oFA3îÀ·üù˜,WHȽsº»Û4¯\oYN 9>Ú2ù±t~ª@\üéÑã¼¼=äÉãNoŸ7a°¤2Ies›óù%µSú×–<_ìrç' ÈÞ_þÃ~µd7®ëÀù[…W€‚ä8Kð2LN&Þÿ9úD±Dö•;WV}n&".Â…Báë¿”h99íÆŒÌËéýtfp‰7}Û´ óqmy’tyß\„©”Q2 +ùàhŸmŒsrN k%èxj\  „Õ“·[ ÛBw]FŸÐqç¨ç-ÀÃCÆ ý¹„N`½º†Þ­³û +Ôúu®›¨^$¡ÔIïŸ-hCc©5ÑC%H”ëþß¿œð²;ôY¡¹4J´ÿœÛ$£äÓq¹íD¦-kãâ,)á^#ê“,[œBg’ëíŸçÖüïô>}‹ô4dñ¿œŸéY9?úñ '­KÿŠNÐêDT‘ d©»¿è8„«g‹þÙ"À9û¤KÍÑãP$mÏÕ?pû—ˆj’÷ßúm¡º—ñ>«SÛ×t·S¨@æX{–ã_ ±éZú—D„\²O-ç@>­y„TÈ¡54„Ú±øh JTÜþ5‘,çXç܃&"`9CÍN¹}¶4|b÷õiý™jÏÒ?po£AN1R®×Àb¡ËÇ°T³¿ez;ÌLÉÞ^-ÒËëÕ‚Þ,Òåöö¹ +,ãXö‚i[Ç:„ÄZ{eš‹Ô„ùqÒO,R)ÉgC2º§6@†^ê-P¹fKÿÀ$P--ýGð“0®-S’.ï«‹˜12>NÎŽ©æåñZp/èÖ9¸¦e·*¶à&ˆ9ÖÉCʺa ýÇ"öl—±ª^kƒä,Ì´gJ»êwÒ"©¸jy_ÐcÅìÈ”Þi¢S²˜˜—ª¡vm2îJ”´Ô¨Q4Ãé ;}<ôAN~<Ó 6z¨èŽ‹Ô ~{CLŸY'0Ïåjþºƒ®’k àAÝjz ˆ.yŽSôhºT³OE·f”bM—þsnÑ¢ø4 8œu—r†”¥®O}È>$eo0êºc§‹ Nù‚ö¡âÕè&¦Úr//ÏhF\Ô'tŽìÓ££… u™þX_~üV7æXÛ.ta(ˆ­.ƒé¢OatËsÇ9w<*h.>›BD¬ ³B¾¾oóŸaº[à Ò<tÚŒú,PG‰Äa ÒÚ+ö߈OEdGtç}B÷V 6€’Š`à×ÐÑ&¼|ù–Ñ\LoÐhõñ¿«Ezy½ZЛEºÜÞ>7ÉÊ8þ˜Yuëä”ÒðˆÃ=Óæaw0hÀ¾^%-'§Ý˜“y9½ŸÎ¬"-ñ¦o›¶a>ð“0®-S’.ï«‹(`H<T ®X¹@·Û†°7ðvÅË:j©çFY˜\ùé;èsí§=@ÀR9»œÓ9?Ìk,ÐMì»ê{ tÄÆÐûcä§åÜ-p‚T’º$‹Agqšs¯À…Â^ûï•,^{h,6„zv\!_wRÞ ç?E¯97=ŠuÎ÷-O顉kEï_]"”RjßâÁ+JnèyÿÀ72î¡@ÍŸ©[Qÿ,`Õ²“óß!ËC9únÎ +f¯í?Hƒ.ý—h€‘]Ò… k¨eÑ]´‘ôþÅE!Ü«Ð>ÙbáHëœ÷_¡!ÒŽ=ï’,ÖB™Î°çÇCGˆ²Ëó^¥…J©í¹è…RÍtêB ¡ìõ¢>¡£&ì™ô>¡3Ä<ã9Ÿ’ñ'p…)üÒZôË‚¸»WqnwMùŽ¡Œû_L,ëŒ?P›-†;@nvSÎîø|›×¸ùáÒlQÅAiúl›h~F×<\QŠÄ3:ÏzfvÙ{ø—r¸ hi0Å‚K›)jÓ«Ÿˆš]rÅ«3DH1ÇŒÿŽ>”ñc¦¶fÆè¸Ïþã·ã“9ñÝtÇŸsm™Zzè·:›ãO÷:nî‚C¯‚éŒÒ<\Tbr <šúL9C º§†"÷©*ž{>·f =?µ:§ƒžÏ€å¶Îr¯.‹ 9ºTD‚ܪOʬñ“G²øƒ‚æùŸ'åÞH®Fî<šÄ1®#û >†¥Ø°ÁÓ[²·W ôòzµ˜7 t¹½}n2’PÒ”’bXÖ)QÊÃ#×D@N›‡]!©,¯mºL´œœvcJ楽g†#úurÚŒ)¾mÚ†ùÀwJ¸¶Dæ÷ÍEJÌy\$o/Ò¹ôÎÐRâZÂ:.§¸éáp^ç pþ3À­¬ZÖ±,Ðm¨êµóv·ÐccÐíŸæ‘÷Ì•˜CWǣ˜¹œ œïó8ÿíÀÕ>Ó Š–«”½Ù¥OÏ"fìB­‰ ›ÉÔ˜]6„‚ÜcÖ 4ž>zT¥„âS` ùžÀô AÖnÑÕ]O¢%ºÌºic¢Úíþù/€?Ã¥S>£“>c0Ê’÷Œ>ÙAY÷ˆÞ«2ª=€‡Ñ(sLNSžK®ûhÿ97m¡PÓ¼QŒ´܃´ðxo‡PçÎ`E‚˘"k1~F%zDÒBzdècBŽ¨ï/ÆWºWÑ'xâ#8O[D =k;ê­ôíèøE”²cCî9Ï ôˆ‹ÖŽzº1Y`±¬—T…úJ:~9Jn8úøŒ'¾ ´Ï.÷‡~ÖÐJVÖÍ[¯ôñ‰öUtü+ÊÀZºÑQÅ"{gKMZûÇÊ­è;ä¼CÎWÈùÏÜP”–ó†&N\ÂÂ)¡'¶tÆ„e¡ öqñþµèÆØŒ{cÌ!¦ÒË›õAÿ‰`~½xN{™¶£T±K¨i7Zö¾ˆ Ä§ihP.³j5fϱÓËë96ýŠN_oŸ»[ü™Ñl¸ÂzýcÍÇÓé”È~õˆ# x„©_ÓÑB8­+—·™‘Ë0æçÅÓši‰ýZ¹¼Ì”L_[^ËeÁ7'eQâ§÷«ƒT .'+P‘¾^ûÓ®À Ô½×ä÷HánœÛaÌÊÁVèqwšö%oØZ½ç°Þ\UcsA›ËQÿ5&t)9‘sü÷®8¾Ð¨Õ£d7&çiㆹ œ6BG­)Õ"„½Zna67Û¶1t”J å¢P9©+¦­¡¹ zÒÇWKô[X +ј”GÎ-‡ÐǬ¡æÞC¿ðÚúêŸóPzNà ÕjK(‚&}Í`-Ü„SBò”SèLšSèä؇ÜûsþˆúßL²vE.7:Ñ —4±`Ò6tE©Ï\ã±`éëèø¶¨ õ°³ DHÏÉ9ULi, ظ‡ž£1Zï‰ã«…À$ù€;XΔˠ†G½Å˜Ð:gTºAñ–6åæ . ÕjÆFT ²yÆpn þŒØrGcaUž‘GjÙ ‚²>¦¡E·ÄËlDʸ ÿœc§—×slú;¾Þ>··øx£‹Ë5%FuzètLd¿zÄ0ŒNÖé©Ñ¤uåò6Sr.óËši‰ýZ¹¼Ì”L_[^ËeÁ7%eQâ§÷«s8Í. µ<;ñö§åýOËÿz™¶ÀUJ&çý†½®¶£B—¦=ënîãNq÷Ý*Õ{àä]£Ò3ºÆû”ê­Î[•g”¼ûËe*yíH.cBc,Þw0ãË…c·ÒGÒ ÞB¬™¢ÝV,ìÔ—¢ œ#rJ;Ê‘rBj$I…îGÀÇä\ –¢ ohDE¤¾åàº$öD‚¢ôŒzkIˆ*'ÔyÆœKqæ¼RÙ_Q„bõô1 eJËl„„¢1{Ž^^ϱéWìtúzûÜmŒ èué+_ÿ˜Mo ï-dÚ·D98·ª=ç §mD3jµ‡~Êÿ +}'tñCèc +FÀ¸û¯¹¤ +I+t +^jªr½Bùp4MÕÛÈÅYS™Ø +Ý q£<&¶å¼i_órp^¸§<r©ÔCÏpC…¹wÅñeù¨bM<:^ñœ*ŸòŒöÀøœ TÊYúŠiNµL!™ûÔ2¾Z¢áEÌü6ò§WP©–Ò_¢9õÖøØrÄ[ä¼GÎ?Nº•¼¯£ã‹…ƒqëóâ8ï€ópþ3ÀJó^*ã3.ÑÝHèãG®´W ѾôÜ£#*¥" VŽ˘%H€¹¥­ž9›9[Æ’r‹*D}HÌÍ£€²e´sÞòñU΀\r:‹@yFw™'N-Åâ¯2rÎÀN}àºÿ}tlxÄú˜—4|ÑåÈ_FŒ³æôTÎ ¡”ÖWÒñ­1¢KsÉ™lK­²g¥ž>¦¡7\fã„Â1{Ž^^ϱéWìtúzûÜmÌ@Ödfk»¶-#Ÿ:‚-ÿõg@p“õ)r8­+—·™“Ë0æëé²f³“_^fN¦¯-¯å²à›“2ƒ)ñÓûÕAY—ª—é—]q´Vû’7° ¬Ð¤–¾ä ¨Wà ©KÎÃzo ”s+÷“w¸ù +7ÿ™û©‘ën$Œ#éæ~jk=Q€•9S–ÞÈEX³Bg—¾e :¥ê_6œ›k¢$½­ýØüÙ¶xÇÀ3¦ ʹ¿ŸãO\B£OrÌ(–©×ò¾o, Ön0>>𬠨‚ªæl†¬´ÞXÆçÜ¡JÉ™Xˆ)çý”¦Ë'ség‹‚7ëu>>ç¡òF}¼½?çÐyUë/h¹4½ÑŽ/‹˜è}!Âßþ#ÎïÒ %®¡i;Ð š&䜠yégèäTZÖÈ…N9¡[dÏJK›ÐY™S£Ô±‹Q³Æ.q–¤ÐÓj JëY?LìC@ÎIjß`üUúCY7°–Œô¢U棖«¼‹ ÜNÓÐc«yVÀâJ|üsŽ^^ϱéWìtúzûÜmI®ÅW§_Ó©³\£:=t:'²-ÿõg@p“õCÎNëÊåmæä2\æ—5» ×ý–¯-¯å²à›“2ƒ)ñÓûÕA„Ïe¯ýýjInW‚û9…NPêuÁGèe;¼ñý#¦H©iRÐÝõžWaJ¦ª2³¼¦²½tךhò]€34å½l:”¬8g¦žó Ð)®ó>›?Ê_éÿŒ-϶7°*©¦°U¥“c}|uÑøçvÆ v<çÒ¤O¦ãsÎ1 <>~ƒNI©¤šVœ3¦,–´Ê"PÃýV9‚ÒÆÇ. Š{CãZ~|±P<¥„Î10iªwÅ:—–1)* ÷sÅsqÓ7mqÓ— T¼--ÿçÀ÷ñv›6°é6}Ûþw­}oŽœAKüWFài ˆAXrNŸŽÖ{g†Ä¢ÐB\R²žvŒ#¨ÚvŒèø·ƒæV‚œUYÒÚ)Ö×ù–ó?‰æ_âü+Ðw9Ç0¢Ê çOÃiRHXçèí;-ž =„Ñ)§‹6¬½ºߢÏ(—¢ÖO¢ÊEAj;C_žaGM9§¥MŒR0•04 ¨jÓ‘­U@ÂËÛ´Œb¢ë&Á4…¼ýõ½üx;?â¢ËÇÏ÷ͽëìÐ÷ÁBѧ™^²B 9Þ~Ä T0åe —“ק™Û2öçÃÓ™éˆþ>y}˜ ™¾íúXn> )ó:hb»üº{ Òàn.x††V” ôoÝúp7pQ.а>‚5lNÁz9ïÿ”ô=àáÖ^ÏÈ¥ÇW:E.Õœåz)”*#­¤½HÚõªÐQ‹¤¤|4+ôÒhú˜=Ê f=ôñ%=±a‰«3 •²˜ÁFªRŸÆWtñrFt9^ œÈâøœ'Ž‹aED{ê2f¹x±œ3‚aJMa,ÒC?ÞGŸ»²Ö:¡œá¤ÏLZÖ°KÖú̘u!>£Ö·$lÚ³>~ Hܤ ÍxÏK¿›ôpC2¶½Ü8*ëjÖ«úñ1àOIßnÔe|àÞJߢãOv J­«£XpÏŠÆä\âŸKŸ\Æç<±%ê,Ô¥žýørIê ±xdDÿºÌÿöñù\+î5訢XˆÎçŽoÐÄSQZûh¨=ð9ô¦æ|WçØ.oÓJÀ­]7¸ÆækÜòòã5.üˆ[.?ß7—*V›µÖK7Þ*úô1…ø’Jv÷ø+XÐø{ —“ק™Û2öçÃÓ™ÍMË}×o»>–ÛO>ʼ–â…ݽ¶âWí¥ÝŒ1”„-ÐLZ_“ÃÚÆÜ@Ù%ŒxÒý!à8žsŠÖˆ&ËX,H!MùŠ%m•‡×QíãhI$ ´D£îJË çuWåb2™qÂrq=;ŽÒ9m‘Ó—Ë¥‘å4"© Ïùñ• ׌ê Þζ¢#ê~¹8”‚95=qæðJ9›”¡¡ôNz|D†Uµ¾ÖÇoREÏ<hg´è3c«­ç<Ã(ªÞzmy.pZ§-pú"ðVÔÎP–ã/¤:Š#t%Cà2@â~*¿X˜´gŽÔbB9ËE@LµhD’k>æ-ç¸ñåmZÆÄfÞe`ÇØ}›^~¼Æ¥qÓåãçû#Íþ̈tKÄŒéC¦×¬PãÇÞ~Ä;T0•ecÚÄåäõiæ䶌ýùðtfsÓrßõÛ®åvà““2¯ƒ©àà×æEBªê,bÊ¥½†U‚8G}0V‚tÁÝùe(%X•KkÔ+Áøå¢Àѵ K4(öCÀøÀS7¨WOVÅ‚TΞ^ŽiχÀ‡M+Æ9®ËˆÛb^LéAÕʲþ•*ß…®P"&ìϼe.ÈgÌ‹Ç×JP®œ‘sëpgZ¤ pºNÿU±Á>#ŽÏ8E^ÑŒî©àæ½”¯‡Ç·'ƒ¶¶g c* ÅHQrºPZçO«æ +ÄÞKÎ$渔h,3rËjʹ‚ SÊJÇ`½îÅÜQY¯µì̘¬ÇpátFzY#§5rÚ"§/6)…QoF8§Çš>¾02˜x?\äà¦ù·¸ŽÏPóïábë¡ø`¸È .i=q“* ·3*ýM=šÑŒ”¼/—aÍHÁ´Jw(\¶ÅRcÚh—·i)àÑó.‰Ý׸éåÇk\ú7]>~¾ß1µGsÕBtLj¢M2½f…3Íüa¿Ÿâj “å¯h´œ¼>͜ܖ±ï—Û™ÕMv{˜9™¾íúXn>9)ó:˜b»üÚ¼ˆCeäx õ¥^}‡­É¸I½ÿ†–°ô"žºEŸhÂjqÓÞ©vUµÔº }Ìj‰Á±Ëã+αa<ç‰u1LØ´‡>~¹p8lí[t|à +ÊÜ3>ðÄ»@@J5ð®;¦š½Vȋ➶ŒJzµ¶Çú˜Ðc £’3¢#q?ïf¨ôÄ.êÐÐ%eÔ%ðVú&ßGZk{n4f¹phºöê2>ç®-çH'¡.Òsž¡\Q¿Y?»Iݵ×ôñ›”AeN`•û:¸ÄHç9«ÜÀ{?èFn¡Ú¿X QsÇgœ«YBÆ%€SΤ!—kNea@®}V¿\ÒÖyZãO >ðH£H}¿A'—®‰âÅŠqaÝ)Ú§;àôßp·3lú’è­óÓиÖ>Õ Žþ´Ejëm(ƒƒ k_.ãsž¸Î°‰¥TŠ!,e¥3˜÷þ?~¡gÅMqsÆ„ŠˆÞ‹ùñ„?¥; ûI.tÉX.Z¼žÁùñýiÞzà\HA0cf‰œhvðgô'‡ó'ä<ñÚ@mb1aØR ¡ÞDÇ—óÈæt¶šÓ8mÓ—SbRÿL<€Š[ÏøøÀJ¥=ESVºõÓç“ýó(äyIw|Ç/tÛäÄñ5Q º÷už!³(°•œ™E@¥ïÐ ÕÂ^ÎPÅ£û“ Ï–ÃËܦò½2³CŠ×Œr.€¬=ð œ XÅ>+ýxu!hÊ{Їt­TºƒÜÙ ©l—·i)Ðb^šwX-v_㢗¯qçG\tùøù~G‰Ååó¯)Òyœ¢M2½f…Jv÷¯PÁT–m4ZN^ŸfJnËØ÷ËíÌæ¦å¾ë·]ËíÀ'%e^Ql—_w/ÒÍJàÜzÇ»)Ý•ãö§•ÍOë%ðÏŸÖ×?­¬Š· E_l¨+rŸ¯~>ð?Ž[#׌ûoö«&¹q^Å'@â\Ï|„,“ÊÆ÷¯ú ÉQ,Óó”É“9ÄWoeŠ ©f«ÙhÐ-nÚâ¦ïá6¨[ØÀ滟-lÞÀþ ê| [naËö¾y} +\MÚ*@'¦ù·ÍâÇ^sj¹8äÍ|À÷ðúöD$ÒÞËáÙ6Ðú c  ooYÊG €\€0·µg|‹Ÿî€Ó_ѸAIÚ#¤®qN w”ò'¸¿¥”ï0¾§±½â3$p¿œÙj<©ˆw%¶'•!M¥@F´ˆÈ w¯çÈÙ·I93õpÄ'䬘µSÀ°ôH+‡#'0¶}Ä: ,Ôjå¹EˆnÓ8}·Š‰›!ÕÝD>d\‰šlØrÈ€H ¥¶}çí°—*+mÍà†V”5ã FÔ*%DÊ*\{¸ÊÑÈ-‰íq>¤¯D­Ir[;Ÿ¬•#g l5^íH%µ¹6€¯ó^ß9d÷f€j-òák ìå¬!»7­)dõTHª"ƒ$ì‘öè•S@Sw܇ԟ¨.îŒkj+~O1Û³ñÁb­P©Ž¼@ݦ—Ïû4(—IFŸ<û>/¿Î¾åÅ÷9]^?n¶•”@Mt1Y´ûË£y>žø7ö— ÙÝŸÁTÖé Ùh]¹<ÍŒ\‡>?/žÖLKôsåò032½myL×_Œ¤yì<ùßîR±”ùË©çÓÞ@g<EƒØ päÒVèÀÉJë=^,,K[í†õÞÿÖr 16”ŠFÜ¥uËÜ&ŒßÎßÀ>(ÒÝ×)!íeº1/gyÌyèÎ:iT7ωË?+}{ºCNGé^†ò^P“ò)¬S+ôñ]Q=ù‡NßqÅ#Är¼Ì JP™ x;×»¢[ä´ENß.þšºô Ç«¥xPlóV µ„Š¹)Ï9c÷z çÈAÅb!ÐLÒÿ±¯t3D†j!9ƒü@áœÜSânG1(å¾CDàÕŠÜŠ<‚Xx?™‘µðOYÿ†Î…z{ùñV!sXÊ1—åxè.tÒV.î¨%”ÐjTKï¤ô?¥|?pi «óµÅv©’õ¨ À IPCgo‹zS~„-*(?èç†nþ?™ÛÞb`à¬lKSd[Ü轟ާ¡ç«Ë,—iöì½ü:ûžßètyýØì‹  yþ’©ð}eÖ<ŸNR^ƒ¤Ë}>ù Leýk†l´®\žfB®Ãe~Y³ÙpÝoyÛò˜® ¾(IóØyr¨ow)Ì:_%Nµ-wÃf£¸€kCÝÀöu½j +ën€»VZ¸J¯Ð+ˆI¨X·B'(¤­\b(]QC"7¿£¥MGãûb²Ôúâñæò γnjr9žõÀÐÕãÆ,¤J’¬=0ë”Ë^)º·RÛÎ1t)c¼‚ä½#WŠ™¼Ìû)ŽYK˜) \ÜÙ´Ç=:?ÊŒã÷uÂ5fNÜ’ + ´¤C³§.jeþŸZžªò2Š=R×3|1W±‚) Ò#íèVuÏÑǺWQ¿¤}±xÍ{2“s…b¥…!è:ômQoÈ^S/ÞŒjê¡—£}QÇ ³ K=€?Ã\Hÿs—þîb”rȨ+ é1FŒU¦€¹KM[àä–sƒœó^“s”¶3Ÿòˆ†NÕ·Q­`¹leŽ OïÓPÁ4/³ɲϞ}§—_gßôâ;.¯›3Höÿ›ë3Û½ 5Ï”T§× ÙÝŸý•²NgÈFëÊåiæä:ôùyñ´fZ¢Ÿ+—‡™“émËcº.øâ$ÍcgŠíôvw3'sñ°r„Ô[UÖ¯O[Uå +ÜÀÊ! ©nTÙ@?¬à­Ð¸<ˆ?È¥õfeèòûýèßbýßxÁ ôzL3°CúŸr¾ÛH{ýø;ªîª¥½£BÚúñ¬¾£æìÁ%=´`xJY,µÚ^Ó)À}=c`~,õŽɃrÛÊDDj!+©B%i;ŒWÔ=ݱÿ³Î·ÜÓrú;:]ŒÂÆ]v¥[«ôî¢÷ªè˜îRüŠb{E#¸‹BÉ=„~8éæÿÄÖêe|¡«û¢ÄlHÃFèf;Etа˜¹¶*8»T¬í,"¨Ü@’jHè9ç=ÖǬD ÅjLÖ¢ºbM=†-šR«ó ò!›¢Ð… +†ÌŠÎ:¦’CBW¨Û´!„•‹sN“a¬¢æJ·Véã×"ñ„^[G?ø3Ü…*·rŸsv[DàÒ´$¢·d÷siºá9·ÊœehÎ 5;ç’ðÖ[Øðô> J‘e–‘}öì;½ü:û¦ßétyýØlLs~œêb¾/qšËô#Ó1tù±Ï'?zz•õ¯²Ñºryš)¹—ùeÍfÃu¿åmËcº.ø¢$Íc'Šíôvw­F§ªA”[Qüm?¡úGÞµ‚¡jõ ë¢A¡ H¤”qƒ»ˆ´À¬óßÀ>,MÇXäª[f8‘{¥FÔ¶eŒ@y)1 Ñj@µ¸³äò@-ã;‹§: + \§(×£Õ=Z*¸bLc \?3V 鈡À"1S‹€qÐKª@4¸$.ÚAëÏh-*>ÌøÖ( ¹ôˆ\Ï°ÆšCZcà¼H¹Mã§.ª)b\@£žh)nu;× ©Ë5h% ÙÑ1Ê%¨X²iÌZ!QÈZ ÅÔ¹·ˆµ?n3g„¾& ôÈ%TsÌÌå®(\bB7P|`è´î]‘ë`ÏкiÈj¤€µåÇW#ÍAµ"þÏ3è20I°Bš9{HmzA0ÿêïÓБKq×ðg2¶Ü*ƈ1¬ +\ë4%©6Ý+t‘èvãsEÀù#Á|:[¬ïJËP6}…>eé³ÅœnÓ8}“- F=£$*ˆm£ Ê’VÍ]ZŠÅ…1p÷ýÈò š˜UX¦F£–/,iãmÞñTðñŒ”x¼ï§¶¡†Iƒ¢€Z‰ª8>ÓTNQÅG$\lRS)ûÉîŽÉt…μ×õ1¡»‘¶”CÚÀ¸Ç|žé´Ø^Ð:C«IC€AÁ¾B¾þºCN¿‡éJŨ.㨱”±+ëB—8ºôZsF*9¡Kƒ®='a:P7L¨‹ $xÆ:úˆž'‹Ö"ÍOèpQétÆ„þW²ü±¹…A¶Ü?p£‹ñ©’X°[ ¹ ”¡Xá”]ïаïæ=_AÿÎþ;ôbÄž¸üÉÖ²ˆ Ô.¯Óé4²Üísíמ½ÒÓg/úî•.ï/o«Â µ-Ó?]÷„«L‡^tz zíùÀŸWþ þvn×_ë”e¯O.WsO>Nýþ\jzfUðZoyÛrY>øêI™Ï½SnÇ?ï>¤ õ”K̺ÿ—)FÒiyEî; ¶(ÃzÇ pku¯çC©Ø [¤Ôèéò@º(ml0ã7.1Ng๠zM´Üà,9H9W@º‘–Ò8£´Pí{r~Ä„ÏôÄÐD£ýg—œ¢(.Šz¿fdÏîkEÉ*‰Z-+tÜõ¡1……Á¨QÊÀÕ<0fä‹ø—¨.šî+‘”œ|°V£‰f€îªŽ-£vÿ£ž1æ nˆËøWPÛôÇvœn‘Ó9};¹ ¥Tsç +™ÄéÌ ,ž¹”3æ\?QθTm……¤Å{÷Fy~Þ}™ÕYÁ*Ÿâ‘ò +\½E i`ûB÷õ±žü8ݧ5púvËé¡ô-¯ÅölcLè +‚¼·€ ¥¾7ââÊ•*Oߦ˜þ…~2td´TPd°æ?²tƶöþHõò:¢;Uåå6VÿÜî÷Ÿ½ÖÓg/ûîµ.ï/o«Ò +EîärV*Þu…«N‡>}©‹2ÉràÏ+ÿ +ávýµB•z}r¹š»òqê÷çÓ3«‚×zËÛ–ËòñÀWWÊ|î½jrùy÷!ä7R•ûïú¿û…¼2ïí^C"o¾5暨OäM[dË°ÖqÓñ-·>÷áïž32-ŒŸ¸ÝðzÐÇ¡ /¿®dîySÍÜ|ÙmqgL@q²D–'ЕF%åtz ®ÑôlAGp¼»ynXÐð¦ïë¢Y¤Êè¸eú;CSN_&÷†sH÷uN#ŨŠBo%Zçð:îŽODé†ÓÅPkKÉ”Uð :¼ã¥)gdxÒ€euÃ5h¸vÚ[†Mvï’¹¡Æž?VTè8­Ó÷DEýÝëø,wãÔè÷ €«ëaÝÏ!‘ë{üäóÒj¤ùƒ—ÎcÒŠ`‹®?zZ‘ +h–2²'ÛÈÇ.ºÕ½ñ9OÇr¶{Éóº'»¬Ô|²â®_™÷Rù¯fI³­0F]IÀªõlÏ?b8¨n çñT9=B…®֑볋D…Ö­o€cß[»Æ$ºú#Õòq1–=q“æ‰%AkŒÓšÞ@4 +zäâ»À†*Ž?¢šYFàTvõ|L²0p¡8¡í9Ý"§5rúfÏÙ0Œ:¾÷w—Ä –|ZD픥èyK£ù¯,J©9QOŠ]ööŠ!S‹ )1p­¯{OwÈé÷h‹B± ž¯-P(’exànCT9îC9”íŒMî ‘–šQÎeª½?[ JlI1 Z£²dàJ-­üŽ‹Kâ†{ŽßqwOÚÕò!‹÷œû^b’,]1*âødIÛqö]H(!pc‰®ŸÀ<ÅËY;c{D×±•–p@LZž çNãé’!š»ùKÛK¸cz(C3*Ú}Mhq]¬”°ã$|Ë×q§Š°ÝqºENkäôÍŽ+´©\BbTŠ=Ÿ,5nÇ÷üйz4Î×óielxÿ̧®‹LÏ@=#³OóŒkÑCÇ7†*=’e|à>Ÿq ŸåªrÜä2t¼iO ‰žÍ­a„>~Ï°•ŒÙÜYNd?›gÝ?§ñt)Ï8žÞsÓ½˜8*ò¤Y+ï +êb^¸Æ4ô´r.誘“.ÞóÚKÜ*2,¡Íkר.ºn ¦9W‹f4üˆºÿwÚØ+Žçù# 'Ýå ¨YÔóñYnÐYÏP–G$4Î(ç\zçÈ–r¾•[Æç¹@åº×ò!Ù2µ¼kÌ-Ç÷üpè Aˆ£ºŒJ—b Õdé ¨ë˜ÛÉ.¯Ó)²0.·±BÃæ÷Ÿ½ÖÓg/ûîµ.ï/ow=Ñî9hbbktß®:úôè/’åÀŸWþÞËÿ±_Éë:ð*>B$®ç9B–Ie“ûW}PrËÔ{Êä) +ñ+³Qr7ÛÍFÃ=ãýSRZÞœï&N®K>ÕhïÜT’ëÍDJû¶ù6]_ø`%Mk§*ëåyµ#ùIjþ[SŠóãÞOM»aRƼ¢õÉn|Æ<‘žI³°wèÞ« O™år#Ù˜¼¨¥ K?ÀD€nžìöH*“.ÈRâþˆŽï禱’Ýÿ…Z¤ìö¢1¡{t¤jä½nicä]!_o€ïóÏœQ£o.vÖìõæRt¯‰ŽyB}€TÞQË 2Jyè&*†½)F`½‘ñɳß"ç5rþÜláó–¾…F°ó,´×û‡ÔŠ"Ô²qBÇ缂g–Þ¿WäŸq–}॔=c2(ºXŸ‘ZŽ¦\K@àrÌ™"¬•WÉ‘r[¤ÚÏã¡Ïzšk<µ¸!bN½—o, +RcªÜ€ªá‰Ç«\¡¶zádîÀYj>#È%®Ðw›ÿC…ŸÑZ6šè¯-~§ÎµP?ÇE€.€¢GPϸû4 ,tìSîðjiCh’@¦8©›ç‹´fÕ./mYÀ÷8?Í€ÌþôÑ+=üyô¢o^éòöôzLjÚÜ%¸èýñ²v)m“þŬóEÞï|þ¾äåSò©‡–7绉ëÒŸO5Ú;7•äz31Ò¾m¾M×>(IÓÚyÊzy^íƒ ‘ÿÉ8õzØ_ö¸;o®ºgCؽ'ì³ôÀ¶@7@ósu%мÑ7VÈ×Üór>Õ|o”Ž(gL0ÇC/¦9Ôðu]kŠé/­[Ÿ2Â|‡¿˜7Ö¬W¨Ä;i\O ÝÛK iÊ37¬q|¥gÈŒ9d' lŒq©G/•ÚCÿ²^N“‹ž|Bù8¯ó'OhÜÀ¨^ŽŽŽ;;ï5®j‰ÜZ…½ÑbÌ6ÕWª”>œð§QΰÄïPK®º'ô!;¿ÇsK¹Šã›‹+±—ËøáÜ H¦€À=$bî½%‚T4oÏá+B)‡3€¯¸XDRÈ€+R¡¼5bÂm(™Fí ™ûÀ:›Eì qåâ³\!ì{hc¬-fTD@å½ÙbHè~FböQ,iÏÇ„8/JÍg4£ïÈ.&¶»Æ”‹µ +{Î8T;òx®Ù‘ ¯)'ï¬õòÒ–>í¡ÌO[PPúèeþ>ð¨#‘€wþ¨Ë +…´so¡dÒ®ñåâùœ6òÖðÀ[NDZÌÓ–äxÀ ÇŒæRÕ€œKñ…>ƒ¹AÛq–µhø9ÿTç7*¿^þëåŸ@ƒ¦[q÷~x¼•ˆ|ŠµS"Y;"úg——¶r»žfÈJþôÑ =üyôšo^èòöôºªË \d:õ˜å~8²v)m›þŬóEÞï| êÝüýSRZÞœï&J®K>ÕhïÜT’ëÍDIû¶ù6]_ø $Mk'Êg“绘VStÞèuÃjrö5p¾x‡î¢¤º1-ämsèÖXA.Ixú¬;tMÖ·¢òõø9ÿˆÒÝÏs«îˆ:ð¢3pq¶Þâ Õz±D€n+÷r‰`‹deú¬{3ÂTû ;ü!u¹°ÉžÒG• ×Ìñ‚®;z-Ùâ‰ÅUΔCа =lûwg‘„ýñ¸ç4è+"ÔûJ€ã¹å>äŽ\À( n%HÙ$d`©L4âù kæ5EåÜ4íÙùJ?õLEü¨U×Ð}[vyi+,ইˆ ýñ£WzøóèEß¼ÒåíéuU8C̳Ýò=%­çù¥´mzïf/ò~ç[@PÉ˧¤´¼9ßM”\—þ|ªÑÞY\êÍß6ߦë ”¤iíDe½<ßíÃ’³Ø¬ · +aÎÓ;ðÖ¨³õ9z`û] #¤TBuŽE.nÉEÒ¸O/„Æ®Æ+–Þ|#0ÎIû`7pûñ­ /‚XÐÿý:Ë™:7H%¦Î}ô*EÍ^74Ûôx™WOŸ©ïýã˼B5ݳ–1e®P·2îøœ›WÛAç>¡•Ð²l@^.Jà”Gl¡ +–ù Æ÷– +IKÌ#u$òx^Tö8³°šÆãÜÅ¢V÷"ל»-érùÖƒ&ñ´(}Zø¯·ü€·¤Ä1“RßAˆÅM±ZL™ (êÞd1&tϹU&.) yc²ˆÀ¹tŠyFz)¶Çú¨³æ ¥€î €¥'}üä’E»è©](õ½hx±´|ΘCŠEÓÆDÁX,KÏy'N‘uo¢F¥L¥G›ŠØÿ›G‹¼ÆþmvyiKu%•ùi%õ§^èáÏ£×|óB—·§×UÝÙ§_©Þ‹PÈÚ¥´]" ËÝÅ·€ ~ìÞSë6Ë›óÝDÉu9?ŸßYUZêÍß6ߦë ”¤iíD9ÏwQFž6’+~M’ò÷¿¬üç_vn€©|1ÕÉßØÀáÐ]”Ť?MŸ2ßMÒwLþ³ùÞ°^‹ýxÖýpà˜¿Ò þ-ò]Ò}l”æSÉnú¿'»ÏËe¸/R¶ˆœ»Z*óG¯å¼B©u/Ù ÉyËÓÕúd7|/ÒÖ…K@àmÜEê¯ò°À=8¢}qfüÙØ" +EÏ\Ç‹@RÝ#}ÔÔ‚¼!ô¬{B/»R3æ*`.{aqTèÊtFX<º{£îj}TÖ­Rĸh •0"çÍMbRg­é_F~Z0¯3vEŠÚ$jrÆ ýŽÄµÅÎ]µ˜LFz¡‡?^óÍ ]Þž^WuÅçCª³g%¼—¡¶Ki»D@Öù"ïw¾üûU”ܸŽ¯â ,†Hüž#äó™©ùÉý«”lÅ2•'OVÖ#ªö#eI©f»Ñh€z¹}K“–•óÝDÉõr~>¯Ym¸ì7¿m¾Mן”¤éºµ½¼?DŠâ4¸ô³×Àínî™T7BÆ°vÞú4å@úN,¢‰4ð,Ôû×ÀÖ{§òLz燨§£RR}…|¤¡qá\À¨Ô€:¯@˜÷t~D”>œsŸ»ž(ÑQ¡{âèý|Øttg‹›À#Ø¢'±B}‰Ϲ'R·µøÀÓîŸ#I?{hEnŒ(¸Çú˜J÷`)ÔØxtÙ6<}ø"m£aÄuKO5ÑF_ÝL÷ºÑ˜Ðªå^0à Ý+Ô÷”>¤¹x +×rñFj(½¥‡K28)p¢QtPÆ“ä½î?æX”QFtwsÁ^ä<Ñ¥÷Ýøút­”Zúú ÀyܬY-qEŠ…”¹BÍ»cè:1î }|¹TȤ½+_ ¯àÜ2Ÿý`oiv®¹/Ñá»›§¶$fbÙè¡+äëðrþ· +ÔÊFT¸€*…tóÈ©…zàã·!!ÜK-CŠÅ ´„ìüž¶*÷ w`‘·eHšW°Ñƒ]~·KžŸ(Ôž¾ù>?~¾ù–¾Ïåãןն¾‚Mç®ìUÿÀ‡µÒΈ€¬ó‡Üîü*yù–€”–•óÝÄÇõÒŸO{´5« —ýæ·Í·éºà“‘4];MY/ï)æïœr‘IŸ‹¶YVdùŽ"àÕòÞœ[>Ž]þúW&p½ÈF—Þô¯§Hÿÿ*ßñ¯zJæ)xŠô¿°¾‡[!' ɸA–üd¼ŒrUí ôxà‡sîɈŸGâÜ—v¼ˆ¦¨€uúðH R* ´z¦“'côX¦è:ÏX÷ü|H{"ÍL9"ëž[c"¯®—ÒK}üõ ª·—¼ÐÇ„îi±ìÚ˨Ð}Øë•>|õœ‹µÖœWH>‹†„nrŠ(.™‚r.Zúé"BxA¨…ú"¾zH/Ì!ÝÅc•3ë&À “QTC÷ +³¨¾è¿pÈÔ¥m‰õÐÇWº1ŸÁù+@²Ú»K_lSH_¤¯• ß#ç5r~R.þµDcö"ñî”är|…V§1ªZqDèn.˜O~¼`̇º áEÀô”ð +ÁäRCšºCç’c +Æ@´I ^|ñ#«ôómÒÏò^ -$pËl EÒ fZ‡„ÊvùÝ.ÔÃçô´€añ§o¾ÓŸo¾é‡ïtùøõgµ±O‰’Ë”.R¢…¦–vNôÑfýág@P§òö˜€”–•óÝÄÉõÒŸO‹Ûš¶Dn+盉“ö¶ù6]|r’¦kg*ëåýá %™L?.—*kÜ {×Så=ÿÊÄè +Õv¡ÉzªvÆ,s8twƒ"»ZR0ªô¬Û<à ÉJŸï†ÞæÇœöºÞb9žs‘Ò':wO§,{ÐG5F¬Œ!Y÷qûiàxKÿ[Î÷qSÞzs)‚1S—yt¡>º Ϲ·ÐÄ\#rÞfÞD½µDàÜ_³©F%:<ç|3 G®”"¶¡ +•ê^T<ÂY^ш’iD±TP¬½X¸yØ´å”+ìüaE®¾Z/•á‡ æÎøV.w(Ò†F0¬ÜGÛ q“óÐÃfÄjÜ÷ m߇8.©÷–Ði{þ pÝПÈæc©ylÙ(Ò‚AHœk¼väJwܽ\"#eéW±´°¸ÕŒ¸K‹][y1ë^¢›ÓÜñ%z¼`LUC²žÚÅ^fzìvTä”èu|~!÷uî;éÀ ).œ× ÁÈ.¿Û¥û›§§²‘?}ó~ü|óM?|§Ëǯ?«Û èšçŠêc ‰oüŸV\µ½Y>ü nx’—ÇΫҲr¾›8¹^úóiq[³ÚiÙo~Û|›® >9IÓµ3•õòþpÌ9Ï)}ÔØ€äÞ±CEêp·ß¤}Ï[_ãçà|j1Ý.ÅzØ{ʲJ(ï½+P´]¡ÉzβôÍ:€¹´Le/Ýa/¯(S—zHgt­k‰LïË”ÓZÿ[äûrAÓÖè”9‡ÁÖ}z$ ‰

¼·¸TØÍ%pw–$À‡×¸3Ž‚[`Æ…7\%‚“#Ô€¾âNÎYCf–f‰šöÿнDQOQú+ÜEë)ƒÅáEÚò9m  öôBÚP¤îéYJH¹(C)©Dd½Y#Ö½ItTÖ¹æ>`=pôrÁÔ‘ƒŽ8ù—³`*­ #(ÕËïv)PÑæ§ÐÌŸ¾ùN?~¾ù¦¾Óåãן')û’‰“œè!k¥Yæ½Ýùüí’—o HiY9ßMœ\/ççóšÕ†Ë~óÛæÛt]ðÉIš®©¬—÷‡ƒ‰DnvÆo{XNº"÷¬QØB…Óç Õv;öHõ´ Oj Õõ®ÈsöÿÉ¡ì÷¦swšŠ}…L_€¼hé‘›ò“œÅU^)¤Ê£2. +U¬g|ØáëÓÉSB‡o醒io4¯ Ætfì“Öð*÷M}qŽ/r/OÎ)by:å\ÊãX@*IbFr‚̾$ rKÖ[ùðZAȹôZ7IÚk@#*%3¨i߀ÆG®Ù[íùÊ M_«õ=ht•ûDRöüpHÆ+(Sß;ÇGî]ßBwÊ‹–Ú!ÿ¶¯|ûèY¢Å )rGnU÷´2¢•‹BëÛçè†Ø"y¢÷ðgÀtÊ(q¸R*¤TöÆ·#ªóhÎy&<»éó=p^çg5^0d´u•§„úW9ËUˆ”~”wû´½hÄŽØ ƒŽ@™ÝÅóãCº!¢õyüxä/蜄Ôs¾Î+àüœÿË~µ$¹±ãÀýœBšA\÷t„^ºÃ›¾Ä$«Ôe•¨yeÏH2ñâ­ê#‘J¦‰ÄŸðàn¥)kv? ›Æ9©ñ=“Nrò‚=Õ9qÓ½À5)læ£ß²¦ê¼¾¦®)Ãû3öúövƶŸØëôùþ㆒¦ö_;„²õKí¥DØpÁ)(™Êö·•ëÓÂÊåïýtY³ÛiÛoýµõ1_üd%/÷àJìô}wü!Ãõ&-‘ìë zÿZ;‚>U¾¸‚î&c4šÖ +6¹0ôvÇÃ&îÓçÞËý(ŽÎ +½µ;@Œ"U +•ë®œ‘µ•x5*’œÅ£¿Ê¡•Â™rÞUG¨OÆ—õH.s¶OVB"7ì]Ý"Öhw«DmEMòhé CêÂ6ÆéJ¯R_¡ôÇË¥$iAÝ¥6‹9ÑyR×1-þ#—ç¶Q÷±Nï-îB£)N?Z¨¥¦<öÐéGÍÊGå9«Ê£ŽE‹U ¹Kµ1rͯtNÔF;ŸÞZLR®>Vèã?#ãj‘ÑΘ ÔR5GõE+G¶8'ò–Dó8ZLï-ž[‹™Ï[r“Q.ÓûbØk}C)±ñS«1'PNNNñ8Üù½:¿b¬x¼\rRic‰€y¬`iÛPäÌâ©ImqÚJɪv±Xªâº^p–ÓG¿£šL×—Dèµx{ÆFßÞÎØó>ßÜâ­Èò_‚”Ûà¬p1\j?$%*º^ìë '0•íSðk¼­\ŸB.·ëûuÍnÃm¿õ×ÖÇ|Y𓒼܃'±Ó÷ÝAJߦ.½šZ `ÃSá±–¦䆛Û[¤Ž±A/©dÈ9ŠÄŽ:FÙá.7¸Ëù2q®;qø²­m”ùô¾Òc‘Üy„ú¤”…#z9€·ÃÙeNÎñeóqÔà‰1û'"Na Q:fãÏÉÝG±Lo,0s‘€MIë>i`ÉšG;œ8æ¹²©a»|ä+s†Ä¨Í2WÖ1iEàœ’¡ETºqò&£\"°ÎH[³ùSª¹Žkú& +K¯9‡T:üÅ y<Î!'áÀK¥ƒà2#pH¥•Ó£¶ÄsÎ3rnÿQK:¯ÖÜ|Æ¡ŒSµ2?ᡃ"1Gìü9“xÎÑ+Âù32nÓ2†óvž›ÔˆÐ‘¹˜$âHdØ;dó‡Ð‹¨„„v˜ã$^Æa.ç0—Z-¬\¼„òENê,Ë\TëÍ@G˜ñìôÑoko³ë[IRoÏØéÛÛ›~b§ÓçûNœ/áBs¹ tŠœ„Kíç¤ÎÞÍgÀ´Óøz͉·•ëÓÂÉåï—Å}Ín§m¿õ×ÖÇ|Y𓓼܃)±Ó÷ÝA$eþþçÂÅuŽ/àð‚Š¿ R¼Û8oø»òQFš:X7Šï6è5e4@çÿ™u~ôœ¨Ž½cú…Э騖ÇSþ»Œ÷TˆGs™8D®åÎ 3½T¬&s9y§ôD©)ÛJ§§"G…¾bøz¼Z‘¦ÌüõÉ=¯õ¸Ý3‚X0È0w¯T­D4sìm%Ô°û7¸ðóœïŒr Cé¥Ò˜·"(]µôˆ…5ÞA,ørncTœžs#Å:òúˆŒ ¹ˆÞñ–é9WKto z2çjETó¹æç¼¥vg”›7Œ…ê˜Z"àjˆ9åʧ!(œ½ŒŒÇèžFµñ—ìcJŒ )0ÞvàUæny æ{è¿£•_‚þˆ¬Õ+T[L™[Ó1$N\0~f;ÿãuþŒ9ÎøÎ7½µ@åU…ã‰Å–£³ìp—îrƒ»üÆKb³qžˆ0 +ao¦€ã§Qr)GikÎ6ÄhCwÆ¡ù ”R)³õ—ÔÚ¹bZÎKÒì|R§”moæþN§~ËœXÊúš4)V|ü댭¾½±ë'¶:}¾ÿ¸¡ÄDÚ*ZÍ·”({¿ôþM‰ŠÝ\p‚|e{ ÆÛÊõi¡är‹÷Ëâ¾f·Ó¶ßúkëc¾,øIJ^îÁ”ØéûÍAš7ZžÜIG÷ 85 +Õ©WàŽ—þç=ÝÎy¼¸ĺŘó>wU¡GÐysƒÝôbA§*c§ž:‘^ #LƒôH‰ôœ“¸¼b +x¼ÊÍK¬T·‹Jèúïˆå— ?Dæ=ÑP @z퉥Žr™¿>1½èˆ;á˜B‹áT}”x„êäT½¾"l=Ã[•±õ€®Ž/݉¸Ó[K*ÌŽZèœJœñ¥Æ!‹´G®ÂGÁeVèÄù‚y|;b¥úbàåxÙ/¿<§Ò$f@§äÆÅ‚Päñüá¶(’LyÌ‹š‘ ¢¿$1>~ºàTœ4"ëac—ÔTÍŽä2¥1‚s#~…\ž¡ôÖÊ+¬ñÑžžIqú€ÈÕ\é¯ ´ìp—Ü娕¤¹Ž17‚TDêã3Z"€çbcàŠÑ†¨òÈyKÌI¥sS²ŽÈŤ¯˜Š½$DôÑϧ/Røy1‹ôàO,Pn-Œ\n×÷ëš¾D¿V® %ý×ÖÇ|Y𓓼܃±Ó÷›ƒ4’¶ ”ËíA&v‚/à(§âuÔäÄå´qŽlgÚ݆[Ieé+¾Ý_~W)GoÈt¬ñ€ÃU”èh˜ªM_s®e¬Îi{Ýçö±<Þ‘/äãÑC-¢u$=t¸¹;€…^rñq|™Þ!—œ[ÀN6² õ—;C×ô„ 溓YbT'5â´Þ«Îœ &Þª1 Ô7S 'Êel ÓsŽ.dt¨ó9CKNêw8²\b‹%¹ùØŠ¦—KO[ÞN¡0Eª‡Sèœ:/)Óp>=çð–†àPå9•{å ù£©RÈ +¹0q@oé¨Ü@.ê‰Åü¶øŒVÔr=‚»°Ù+ZÑ38g‰ÙD\ŠBŸÞ\P¡zo²`.º»Ž³Åüœ·Tõ%úxkÊÐKDsëôšèòèþO©6•ˆr‰›¹8¡ù}úî?¯x +êçÌÒ[C‡`,ËQDŸL0R›ŸÔ9qó½»hª$§~ËèU`uyMh¹ýõ[}{;c×Oluú|ÿ±ÛY»ÓÖÕ·Œø†eë—ÚJ‰Š®ûzÂ!(œúëSà3ÞV®O )—[¼÷ÓeÍÕNvyXH鿶>æË‚Ÿ¤äå>÷ëôýæ .Ù–ƒxöQ˜Ï5àrýç–ýŸ[þÚ€¿€÷@Mm>­oÀ9‘ÓQ·žªž® »{Hè½í‰ê×çØN-ÔüuU¢µ+L¸»2E«(•^¨¸¼bp|¸ÎÁyɱréU‰þÂÌ;'tNµÈ8óF€NÉÙbB‡`r‹©uDM£€ÖˆK;caô»È9„|9®žk•>½\ sc 8^€qʇÍhJ±À«â€1¡Gut£7YŸ_éž´ÝüÖR“P9êDSj®ÈÆ!+j‘VƸ8½Ìa-a傽õЧ”‹•ÔÚa\œ“õš*õsG3ÆÀÑEâFôØþ¢ZGèó{:¥julFÓ—(€gjÇ¢ÿ°_5ÉÍë8p?§ð!×9‚eRÙøþUÓ”%ê2¯}ÄÔËÆcR­v£Ñ(‘’ˆCàZ¨˜zÌ-L)Ê–ø‘‹ñç¯<r¥®¨ÜCÊ5oeÅ1Û“õsÝvÐH¡¬äsÀEâVÜR,Èç5lP.3à².¦…VÒ¼ÕˆÆt¥ÕUjÕZŒê’óDQÊé«]²RÅ´4-s¤ÂX>㨷÷3N½à¨Óåã{vr¡£\Ç•ÊË<¤±´ÜÞ“‰;¦r¿ÃK0MÿFŠ%>v^ï&Rn—X·ÓmÏËIåv3‘Òžv½ · ORÂt ªR9}.^¤(Õ’(¨õ!cØßö!äöõ´:ÚÍÁœGâ•n7°<’T’?µÀÂòJ"6J?p£ö³¯®ñ¢ØN/sœkÀÃ܇%&óH8Âh0Gùâ¥yJYÉ¢ã3ŽÀcßõ÷·•ý9g² } žs-¤æ±µÁ¥¦-± 5+¾ˆ4—Ð…²ªÃ.„¨%ôÀ‡wsè\jì ÔCÖb’µ|ëzƨ›p—ý[‘PÒÔ‡ó”þ«JÏ9õíßô€>Z«ÇfÁä´ÒG‡W:J4²ô%ê€s(=eq)(Ý2uå¹Ì‘˳K N+¡k|xÝʹcºb¢ Ö÷ÿñ)G}‡s¨ç*¸(GûÊœ«‘˜f—"™{àšPÄÅ&ô1už¨Äè³DI æ¯D[:Ï¡ïCãØa}ï¸jî¥2¼)Âͳ•#†Šß˜‡²®ÜñÅâ5&j¥”Ä£¯´“¹î¡õ»ã2•²¢ò¡9æ]‰¥Ì3K$.|új—Fjùºª”±áë_gœôö~Æ¡œtº||Ï6Ô ¨h´Ô´ìoKûÈí=¹=yñwÀ>pz_F—,ñ±óz7qr»Äºn{f'=λ>íznžœ„éLêçâE´Æx¼Dª§÷ƒ—i}Ûz¦ æ(¾r.ê¨ã=€ +ÆŽrÝ ð"Ò· Š³EÄÓÄøÿÀ:z‡¥-G“õH*m³CÖZ°öЇ÷Œb|ÄÜøþ¢¶â/ãwÑ„]I.ËÅsZdD®^+ÃS®†N¯‰Ëiurý3õMh|CŒèž+Àd–”Û—ŠC±xížpD³°•X† œE×R¢è~K¶¡û,Ñ|H…þÆ8ä6áòš+z¹¬ Ãz³Ë;Ä’ÄãPá»%9D,û›"Î6Ÿ#‘Vd®Øg®ñKT(Xî{¿¥Ã],õc¨¥GÊk¬/&Y‹ŠäÐEcrê.*¼5Ñ ÝP¤aËÓ‡ Xgã^0üljÏNŠÉH­xÌŒÀ™F÷÷t³ä6ìZî#ÀÐ:RÐ+IHswIŠ¾Ú%+ ¼gZæˆ=ëgœõö~Ʊœuº||ώƉEêôƒr²eõkœ^1·7ÅÐÄçx ¦¢é±Œ§–øØy½›X¹]b}ÚÜö´-zßy½™XiO»Þ†Û†'+aºW©œ>/¢l“‡ÈG¸ØnfpCÞb’ºŠ7à)‘ÕN:»ïp¡’ÕUBz"·°¢•SÆSäEåä¯Àå¸ÌËoxwÜøŠ®$ŒýûÝî*Çw¸luê!U©fs57Þ‘ÃCì9wàˆ1—ÞGǦŸ¹:ÊÿO7L*.;b¯øᰃ˓qãèP)G‡~hoT&î>:n·úŽ"øìí(PJ*¡ï™Ã3ž(äìqnãUm+™¯œN`ÜÔªGƲxì‘_‚Zï‡gb>ÂwÉrõH¹YŒCåªÙü¥ÚH‰Ã–ŽØ;Á¸±öZÞ3aŒ(þ”‚<®+|[Hs?þ Û«L2Iæ~ls`ሴ{¥ìo…¿Pšm‹óAMÜ«©ä¬ýø3UnA}Š:Çhá1å‚õ¬÷ÐÁ:‡¶(TÊJ‰zà<"·x¤œI+÷Qq|à,Y‚ãÒfÆz®µg}†\fÈe\þŒ\œÖ§ãæè5ô½ø¼Käšû.4¾VŒteâ¿Mølå'È`+>'P$–`Ü[ùøÀ#©¥Þô È<±ÐÁºYÜš‡F-Q¯£ Kˆ.Z/¼Âú/·ÿ] W|Ù¶ÊtHÖ‘J Gôýsî? éxQ'Õ%ôHYRýo#?LçLµ‡=¾ÊÛwÃRÙŸqtÑÌ},•`è?j8®Ø|¸È-œ¾Úedœh×e΀‘±~ÆYoïg{ÁY§ËÇ÷ìhl‰x›Æ Y¶g¥}´ßùߘ%ñÿé£Üïðh0šÿ‹–þ.çòŠ\æÈ凜Ã{¹¸Jv/œÕèºß…‰l_c–(S..ÕÒ—=oèfýPyEÜÐÃÞ]Ä"Ø…Ò•K\<(˜Ôäz¡RW”>C.3ä²@.¤D[䊱oDÃ{ t®-êû.Brráç–Všÿø!7QõèæÄôÆÿqó'ô”)X=¢DÃ]$³¸Tz‡ÈeÎÅ-àcΉªñÖH4d‰–ˆ³·*tTÒCŠÅe…fY™,ÆŽ‹".;8wÛ‰Ðÿ­öæ2¾\Ðsêåâ!sEõØüýºy 5ñH9SŒ+ZñÀ¹Õäº×Åi·’â”k%­ø–?Î…JÊæ‘s¿S¨PNÖw"½ßo‰¢…èq°ÈTbÜ,ƤæRS?…Îÿ/sÅ_ß}¬€[’|°Xä¹Ì‘Ë[¨¿Q.pÊ'5Œri¸ ÷Õ.¹P½.3’|,X?㬷÷3Ž½à¬Óåã{vt$ΧÒϱ,»³Fk¹½)KY|à-˜ŠæÇr¤Xä±óz7±r»Äú´¹íi[ô¾óz3±Òžv½ · OVÂt ®P2Ÿ‹‘ + hÊd+V0¬‡ÝqC–™«£Vý)Kê»Æ°öΤqÃy9ñV·ÛÃÀvËFâTŒ]GôŒÝ‘û-O…±‡¸µ@èIÔ%txKI¥Ÿ=˜‹Xqi.žå¢¼l™¾|@TV/tº²öíà™ñ%â–’{Î=ô";¤ýï;”лùÀ#ã‹)Z±â²>³®‹ƒ¬è¹É:ëÃË¥M¬ÑŸ·xäSŸñŒÁ¢ïŸ×\}6~ûûU“ܶÒ÷ïºÀC?`Ö9‚e\ÙøþUHʲ¨‘CÛb_%U)‘4 5[F˜qc«àr¾AÎÊÌ YÆÄ’u àZ°ŸAã3^Ir2ε1öŸúQ«¦ ,K?>3@°æ[¬9ˆŒÀ˜z­ç€®,—P¢åˆ­bk$p.½§ghR„Z1§¿aË=v bÞò—!¡ëÍ|«MÇ´F²CXÄ‚áš“ô(§"I¥Îî=ô £T+öëhÎ+0·”¡Q[@·ú—I´¹ 4‰À¥nPå&¨c¬©Ì§çéX +ÄÍËu.ñ¶ן¢Ø·ïOQ÷%Š^~üZÕf(fÁ‰uÃBɧ:½'Æ×ØÍG¼†iÔËeš|ûòär6“r>ŒëóÃÓ3«J—zË·-§åüÀ)e>ªÄN?o^ƒ©à<° ýݘÄ7¿êZ–u%K_ÉÒß~]¿–e=­ +®~]þ,¯ ‡4ßI#CŽ2}?kð +óåc ]>]®¡Ëú–½BŸÆžØ»+ÁȬÇØ«¿YƆŽÑÙïO¡öeÖÏlú2ëôôÏ"ß–‹(õœgÞ*¶ŒbG¼÷ôñ9Gæ#>ë-磻 ô +RÞÕ#Ë%ßêžÓ#«Õr„-îýïý3s”\{W°`va=FZÊmêó{ß@ÿ2òÃ\=Ê5=B逮{>ÄZ'tG,ñ‘-ªkÎèÅaŒHùÜ%³Ò5öQî9Þ]¸˜÷:^,1þ¹Ò ºÿøP­žó(jIÙ qsÙ²–QÕâxÇZ2@G§„“(€WÆ”¸Ý¤oÐáÇPŒþøoùorÄZñ·;¯€7â­µbÌ1„€Þ2æD„"Ø7h†)Tî·èø:¯PêlžA縨äã\*4ä¤Ù¼é–)îÑ €Žñ/©Îµàãg?Ÿ•D:'ðP·z¡º^äõgN Ôq#Ô­_€oóŸa<-ð°mýÖ5¾Æ „=ë ròÞW2@WÀÆ}_.|_çoWÔkR¥§u¾Ÿ¶ö—Ë#Œ‘„rº AuÙjÒ1¡Ç¾U«¦ô…*‡h}wèѦ[nBäÚ>¢—=¤¾¿Á¸iÊQz©ˆ½`èËÐé0ƒ0;ÂÕw×Kø Ö’33¶B=ðýÕrœ¯‘ó9Ÿ‘o¯Pl+0ŽÙ xùøR!@Ñøc¥ò_ÙžC­–-_S+~ׇ§<´¢Ì[©eÌ”K÷G†þtº#– ÀÕQ~|Ÿo€óS_Ù{à Œ%<Ñ‹¤„ž9›c”Ó”khh½yI8ý¥‚iI9Š¦&­ÌåJGm§hÔ¶ºÅùr è¶å-£o¤)[4³\ +qÆE?|¤¼È` ¸T¼E 8šöy:äøs¬©óerÀxÅ瞢ַïOQö%j^~üºá¤‘×±(Öª7œ(Ùô1Uý7 ™uù°×³x‹H$Ñy¯% ãË“ËÙÌÊù0®ûéüÌU%;ŸÌ¬L߶œ–óo¬”ù8¸;ý\½H4´y(¤˜©¡® #QïÀÃ6Ô+ðÈR©ß›íø9¯‘óï³Ý…ñŹOûß_,a +¤ýà6O_g¶[§É<¼ÒÈG»÷§i` ÛNà9º œ¯ó8xÌêLÞ{ª½÷¼»\霵äd¡±o±>&t!ÖLëË+tmà´‘öÐúþžŽ1…KÎ6­±Ã`/˜ñ]=2CëÕ2þe×1ÑÒø +\B)²)ò1]‘ÀMúM`Î1‹´õ1wxµåF-§Zÿi­ªG»ù>riDGä–GD®ÂzDnÙ}ø‹ðf“ =”Žª½1fLoÄ ›AqSéC.á/Ô$ãE0”ŒŽžzŠæ\-$*g”JÜsOã|…¡¶Öos_F~ðéfíW¢£_=j§ìÏð•‚ýà_,•°÷òÇ2Î×Èyœ?¼VT®G$–Gl¡[/–¦Ø\1¡Î£œlšâ˜rQpn[3tH?wñÚz¹d€^„·üeLèÁ:–„ÃH„8kZäšt'"p:d’>‚õ¨2êë¥Fke„n Ø,“`*¨°œÔ#¿°¬­1L'¦ëótH5â,—±¸Çõ§¨õíûS”}‰Z§—¿nX1/8'Œ&t;ë”æW¬¥EEÀ0·ùÃ^Ïâ-Lëå¯d|yr9›Y9.×—gV/õ–o[NËù7VÊ|\‰~®^Ä óü"Üx—xÚV?o{ûyÛ¾VvÉÚ7£ÒÐwSæôIõÿ}f·ë™ýxÜÚ !î’“>£–ÿâcÊ ´öbžòhPeéG}™rzúgûóÿ•p»ñ‘x«w¶Þý•ò+7¼#– S(f¯ò.©ôpK¨,½›g°–ŠØ{âø-JÀ1DS÷R22áÙÛV{Žê,Ζ3߈Jý±ÎÂ×Èyœ?è,wsÛÓÍ ?oý:¼»ˆBÁ”îB@†”Ré +Ö1ÆG]1I¸\h cÄ>¹dK9ʽ§¯¯©çäü§ÜÅZË©óÔ±K*¥TzÆÃ^2BcDöz†]´pŸ†ÇZÑbýüxôgQOÈxH\Ñ{c~öÇmŒ {S ˆ©×øøŒhíÿø¸Óö&Æ=­&d<ï.+E5Ù +ZCB·q’3Þt¯ý6´?ôýµ7‰çdÝ¢vo/S”“žôý-}ÿAÛl>¾©7P7>xŒò5r^#çßQ…ªNê1H×À°ñéy:äÐ’ár™$Ü¿Åõÿ±_-ÉãJpߧРʨPÀºà#ô²Þøþ/IJ´$0‚=ý(*bVüX嬬ÌwìõöóÛ~a¯Ëׯϧš_››_-=º"uºä霌éO‚ÉK^_ ‰ëºryškr½]Þ/k¦%å¶ry˜‹2}myL×ßUIóý$T~ùýtfË9’Éžþþ“ÿí ú» WÒÌ=+G~ ,È…ªôù%p¦ÊÞ+ØÐscE^öÞˆ%·B­¦>3¾xÞQr¥æ¶GóÁœÝMKɽÇxP/\™öFÜ ÑžV¹gyäz–7:ù´õ³‰ ‰(yÞ²,£·g`’ÛôÛ3B×=ðÿ#|3…sk'ãþ“‚ï3E5¢µ…]©šö¦RõzF :\ 8¢YA*Þz{8:îÒp I%×ÑÂ×æä!­ +“Ö¼—;G¬9Ú³q Ésré1@Í™¸iß¡£K"pg÷€6+S +‰ÛHŠô£3ÃkÙ“Ã!E%*UðS·=ª Yqü¦öèø‚Îq%k†|tªX¦æª2úôAäÌ)í9•!Õ0hBÅýŒés¸OˆK¯á£—{²W°CÔÛ‚:ñLìÚ'ÎÓ§Pa™!¢¦6¡ºkƇtXL^ZP‹•Mú‘?<É…Ì’Ä"¹ÍЫSÖG®4.—éV r/¯Å ïß±ÕÛÏwìú…­._¿>v®T”ýRJ#NòLÃ-À%Oebõ§ 1Ñ7¯¯…Äu]¹<ÍE¹Þ.ï—5Ó’r[¹<ÌE™¾¶<¦ë‚ù¥2¿ü~:Hu«óШ©²s7àæ¤ Ÿ $akÍ™JÖ~Ü ÜQ7èà}ÕÚ{ŒÐQu¹VèBmÏKÊô¦íŒÙq¸¾€é–Ëž·³êŠéá½¾ï‘î‘ë=r}D®WäûÀ3ç~ lîîÕÅsÌq„횆F+0xµoÒ×2ýOﻃ2ÆŽQ”KêóWžqÕ=èC#£ÁªGlQ sé5=BÕÃÚ.äÀ´Áôá dQRPÓedÂ}2úkšŸÆòDÉ=æ(Ré³Åø¸öœÏþŠ ª¥îiâ˜bžˆÅzi¿?Ûmhâðb²°o˜–Ü…×'ÜúoU\÷¦Ð˜n‹©šîÔ|P–'õ5G-j}ÍÇD~²;Šålýø~A[\ Ér!‘Ò›ÅñÉ1†š$¿”š©©<òÜ©¡rÓ­"¥B2ç×¢TÑÊ?Þ±×ÛÏwlû…½._¿>¶nè·¹…’t¢U¤N—<TUºàL^òú¤p]W.OsU®·x?/žÖ<ì´î·|myL×ßUIó=je~ùýtšRYon¡BÌ +ã±7’IZ¡ãÇ{7°§¾A7G§´~\;<ÖšWJ­í…ÞQknÞB¹»µêˆEÎЗã nµ×—„™^õ3¤ñ ·q¼ºòÔ+p#«åŒóŠa$Y{W=¾¢ƒåZ{²Œ¦‹9^à#êŠÁæÖ@ñkÞ(!i„ýíÒ´Ào©–˜EgjìÅÜ&{î!í9ˆ^亼Âã&Ö˜UWâÜ#žè`KJ­þã¢Dš6\KU4rç½Y4&Í ‰Y Yuì º‡„.X"}Õ?@Ÿë¿£.àÇ¢Œ%ÖçÐÐ .GL¢ +m‘>‰Pt¤‹šÇ«9€K­=χŽM[^q|Ëe$-G ¢©ˆ†EŒ"-ý Ÿ.™8i_ó ÚJ9;é=r}D®XqÁül1•Åjé‡ÐñÀ_¡,AÉ’ÉK‹)‰<ý(ä ²BÙs¯æœ"ªn;Qn,5WC_–êÔø)5âV/Ó­rØßùµ8etÄÇwìõöóÛ~a¯ËׯÏû­ Ÿ¯0¥4ÊܵP‘:]òtP&FŠœ/åö„S0ZÏÖ¿ +‰Ëºryš«r½ÅûyiÍÆë~Ë×–Çt]ð]•4ߣVæ—ßOqÁ¦Ó¿V½ô 5®þ~CGôÒ —1nC}C7üÛ8fÕ3%Og ìcœÆ7p¡¤Rã=ÏÙsï3"ð\ Lv¶E:‚,™„7t\Ÿ±B7Œ²’bÊbÙN1 WÒ’éBn­—Å5‡K’Ú3}|EGÍ°E¯³EmÚ¡gúk[Tï‘ë#rýí°õ)f‹bŽæQ4·ÞæhQk$%÷-:~Í™Zã”ç¾× CºEðÍ…’Ö~ _p+T“ì‘|ÌÑ_H!Š¡£êžCʹ±{<žO4õ¸hyds·èFÅTCBwª\Θ¡¯p¹bA©®ÄžC#ÌÑZjȪÃ窧Þv€>ɺáWñ,Sj»ŽqLi,”ŠÅ”F&Qëér|Õ_’éd£ê“¨p4i½@ÐÉ\ìz£ŒõÓ­bÔr]^K¥‚Ó~üxÇ^o?ß±íöº|ýú|Øšáæê\-ÏÖ¨ˆO—<“‰Õ—K¹=á LŽ¯Üþ*Îuåò4×äz‹÷õr]ó°áºßòµå1]|×$Í÷¨†ùå÷Ó1J™R®jx¬Ð™²•3òãa-µB¯”Rî¡ÿµ¼ZÆVà™R•=º %c7èVÐøÅâx»š[ÙHãWªÙÏpGJì}ð¿=R¯¡Fõ$jÕPŽúŽ.m«A¶¥wU7¯=Ó‡oÑ:µ¨õj.½¢ýðФæø1ïé˘UÏpÊ~†[¤GGÕ‹¦½x1¦¾ÄMF^à½OFãK£SõÒ[ÆácþK=CÒ§¹QÝrã—<“ˆYÈþT’–Σ¯ K²|F¨{E¼.g0ýГ[/èªßeÞ·é_#?é‰Jë‰>>n%ΩŸEã ºsØ\d­ÆÌE‘nc½–.z\‘ëÒ&×m¯æcÎD ßð\ãkK†&æ¾E€?â×'àz2pnðå¥6„9y sœ 7zù˜îmÚL–÷šHµáý;6{ûùŽ}¿°Ùåë×çÃÞlªõRJCQžsb‘:]òtP€@Ž|¼àL^l}-$.ëÊåi®Êõvy¿¬™–ømåò0WeúÚò˜® ¾«’æ{ÔÊüòûéÙë<ïÜ÷þ·#‘ò†[àH5”#½!WÊVž™3ð¤¾á6ö€¸s°¨{Å wá7øÝJ 4æ¾¥é4¸‚ážx‚¢ÇãIE_æ>"Pp¦,¾Y†ò 7ä°ýžö&|Måž+£ã¶ÊýÌ Àd[Óx¾jhuÃφP•‚²Ÿ€üðîÌ”‘cÖ\šô5~v&JÞ|xØm-íÉáDq˜Ú(FµpD«!WÓxV¸[ª'å¿ùs—8¥ØIâT(TkçÈQñÄ©—•\ ¶Òýá+þ?ê«%É^E˜ø ×>BÁK;¼éûGLR¥.K¢<åñSë«"«ETH$”Šôÿ û½ÞÁÖ¶ Z™q'(M#OèUPš5RʸÄL•å^Ékχ»1é£Þ“ÀcUbM§á0µÐñypû\¦è5p½®ÊðR8¥§M;¸¹ÔòŠœ?½:áTÂZþŠÈ­“òo˜€ç°Y†EBäø-Ä%c…¦5ZÖþDÏWÌyÂÊ¢f«Sç¸M9ã èM?Æ?læÛ{Å!­xÿ†`_¾¾!î;‚Þ¿ý¼‰­øl÷“{#ëv/¸.m<ê¸(#`lÿØáLá¶ÿu¸oÙOn»sR.Ëíývæ*’_6笌¯mÛr9ð+-å¼F®,Nßï.R Œž§0vyœô¼âV}–ßõ+©òQßXJ ® Wîó°~Îj·š©o\ñ¼—TãUÒñãWWè?h;p§Ö|fKšwá¹Ug–´}È(Ôf3ý×ÊòØO®€‹”#M\“,•L}îCä¼caG%º&t8®"÷ž7G‰}[ž_£Wû+|Ëó¡+YÈ+ŒË'z˨ç:ÂÍk* Zð§4¹LÆ:g}yºX@Z8RJ‹ƒ/ËÈzy0e K©9Ý¢5Œ:„‘ ð /™õÑŽª¼B_žŸu!vIÙIQ¦Üy&Ìú®+oÎÃI9Æ Ð•œ_ỞÍ¥Òc.–o£x1ÏÈ•ÑFk?Œn/ wÈõ_É94±7Ÿ/ÏrdÜÊÌ•õI.‘² )I³žÑn+¡vÔ„–„ž8ëCÎMEë—h£*f¢õKT¨ˆäæ„z¬×KÍ9‡¹ñl3d„ár$Œ‹A/Öýä­S~KÆÁæ§cmLl²½×B­Ž÷oöåëâ¾#ØéýÛÏ›ØFÜÀ½ÃÝ—‘KŒG7El¤ïüðnÁnû_C›ì'·Ý9+—%iôræ&àoûÚ¶-—¿²RÎk\Ùâôýî&½âß[ÉðÇ4½ã +w“’Êj|@3Lë©Ä`‡Ð1Ótì§C‡ók ?ÉlìÀ'ú\¢ è‚ÞQY˜¾f‘F™8Ò—5³ŽVÖtž2@¯$ÎGЗ$ Ü©IÍ \ÏÉuÅ8ãó8ó×ÈüéþúÒÂT}IºÀ¿T9–DŽVÊì3ôõ=€¹Ïâ²<ÍæÇ+Èòü Ã(¬ÏÒ²>Yàt{‘ŒrUì‚ñ6£¶U“YЗ/Q´Pæ–SϱðžÓé¦U%³zdפ º¨”#ϵ$]๊kJM‡éêÕf¦ç LWÕ|EŠ>Z‹flFLUmnFËGƽó\ ËS%*±ðQy®©,JZÆáœÐ{{…žF‰†Èœõõ™.¤¡9™ž×¹Àèb¢›ýâ òÛ èrýwZ‘P±6Ï¢ŸËs½F®·Èõºk™gÈxX tùæA%bv-ϧÊgXܦ}&KwŽ™ˆK?P–%é‚œ7¯¯¦Ë“Qžsmäί(Ò'ë9x.Ý_݈þáRp¿ñŽß½-Pf*ÞO?Æ7¨æù½* ãõb}ùú†°ïˆuzÿöó&4†Ɣ厜¸Þ›P—:îÉÄÛÃ?v¸Ì«ÛþWÙOn»sN.Ëíývæ&àoûÚ¶-—¿²RÎk¤Êâôýî"ZA€ÁÊè\ÆÂú»C‡)5›õwa-Ø¡µ#̲ã·UõYÃ2°Å!¿–júºÊ:û_š!ëÁœ‰ž éÁTÙSB_BÈK¾uŽÈã5và•º÷ÙS'   —³X¾9†kªaàJ]ºª&̹R´6÷¢õ7*åA®\H‹%4‹Ð Ës}àèŸÑró`Í:Î1·y¶XŸ.Èyo)âPs“£ynIèÖ¨ÖÈ™uxEѹH×7¹Jæ–S]@—q&#]”J×£Ñbͬ Uõ#}Yº’÷Œƒ(~[fY\wn™M×úÀ[® +ŽóìÐ@·À‚ô|IèhE×2¶"˜.•:ëy†"5–”9Ç4ÊQçö¿|ÎA–¬Ã|Kãz$ŒËBwžûè_#ÿ pùeQŽy*sΗçùè¢fs+Z?ãi©Âd#ÞçSåù,™ýyßbÄ|„|MMdt¢˜»ÿúD¯$Å<À !1PxGlo·Ê8ˆïÇX[¡Öd{¯…ÜÇû7ûòõ qßìôþíçMl§¢ÞÏn•¸—-—:nÊÄêw\,pÛ_ R+ûÉmwNËe‰÷çPãÌ8'·Í9-ãkÛ¶\üJK9¯qg‹Ó÷»‹Hƒìz(ÕxগýïîÀ+E9È#×9?š×nhÖ=•›Þ¡;r~”ô¥ZÞUÒ­÷DãºBKÉ(-Š=–e§€x#îž±<[¡bIÕ<È[$½®Ø"­Í²>Íîˆémâõ·þ+ÇàÕµÏÀž¯ +ÔÍf–'€B¥·TCãUïÇæHÑ—´-©°eýП/ŒFê|?ÜePt&e9hE+ +#Üy/2güù%úе?Æ% +Ÿ[P§)K”©×žÓ/qDMh»”zçyžËQ¤ ÌÜG3¸¥z¤.kò¼Ã$äy%™}Ëú°J¼¢…~SªÙ–%ý(n1ÏsrnTšem VZJÃe# ýsµE¯‘ë-rýCmòâ9‰žØ乶¹­¯‹‰-®{K©ŠÖÈõ|MUTüHgèë³¥P¹<3¤Ü1ÊÙ+F¹ç빓5Ÿõ|}QlĵÌÀקy¥Rí<ÿŒœ—ã]“çFÍ{ª­Ô$NÞ*…·ÛqÂ~Œ¥@î¹m¯9ÈXñþ ¡¾|}CÔw„:½ûy—”îâ›±¨SR\ÚxÔqQ&F+9?üc‡K0 ÙþW! ÙOn»sR.K¼?Çg®"ùesNÊøÚ¶-—¿’RÎk¤ + ùûÍEÉô~îyÆ<ÿw—ƒ¸PWÿ|Z>M vè Eª!æºuRë‰&+ºÔ–ÉÛ](kG˜dCâ`ÏäK¯²^KRº4©õ<¨…¶”<¯dZ5i+jMsªK%éq¤.kBÇBËlÖ/R¡N5Æ\ c”Y_þù«JÔF9åëseŒ¼mVÅåÃãb"J5ð^E%¥šƒå‘TÍCo…´¶œ“hPÍ9\yJEO«.àyˆ9ô5Éâ(Ñ:—è_'ý7ÀŸ?Z(Õ¢‘æmü¶ÌýyàÑñ›_Ÿ*°ŠÌ³²¬œ©•’¸>p#ÉØ*U ΗoÌá:g|yàèùì=¡Šƒál‘ÒÚ¢s²Ö”F Úº q]ëì—Ž 0&£µEÎ-¸òõµÅ‘óž“,fuîŸ È‚œ7öYYÖ'‹P4N<_Í?e„ë‡hIºÀpÁ{ʬçòæÐÂ*íäI«ÜŠ"ã ÑN?ÆÚàjض÷*¤êxÿ†`_¾¾!î;‚Þ¿ý¼KIk­žÜaŸ»Ý»P—Q\ÿaX&¿{à ¡¶ýµ„ì'·Ý9)—%Þ·ÓåÌ8'·Í9+ãkÛ¶\üJK9¯‘+@ý~s‘†âgÃü’ÈíÀ±ø/÷U7ï~…>†H<»rÌVmÍaÚS\>¬ûýmJ3ã‘([Δ¬{I“œfh4|ãsâe[~ãâ”Zè¸ ¸"G:åÐV¼þƒ\œ§¼å¥ûä<:VÙ +—=Jõþ¬DLu07‘˜pû 9 ÁPóu`8Š)Szù¹  œGiÛÆþqÇô^}Æ +»¨Þ¦*f¸{YºuÐkÛèWjÑÝz~XÎËŠçê?Eƒ“Žèww/¡á¼¥.}Vÿä¥6E-„‹Omº?åûg(C©mD?—r¹E.säòAÊÙ‘'ƒšˆA¡Ø2>>Ç/ àò{ÄœF>Âoí/,ârέœw,Iè–ÝêSX`·R1Ù„bàCÜrŠ]BGŽ&DºÁ@4¹îÐèm¤[ôœý)úETVJ‘… µ«‹p¹ãô^s” ·’Þ¿.¢%RÞ—£ ÕÛí8,—ÊŠW´åÁ¥X¢IèvkQŠN|9¤†¢‡,&i‚º5ŠAh“”ïNR> º IW¤±ÿp1 <8enû¹ýƒåWcå àÈ˔㠹¸˜æ„Ç"ÃSŠº"<-sMå‚õ®úúx­/¸jxùñ¼ $SPBŽ|â% +s‡O¬ÏÄÑÅo —4\—ÙqâëÉi6Rrb=ç3õHºœœ&#'õצ©?x%Åc0Òðsöâ|Ì2–¼R¤XªÖWèâB([л’ßÖ£h ½[)¸Ç±¸åKûä¾4É2empNÛ¶ÑçBÉ”CºaÝKhS´Û¢w#‹”t«ÿê’óÚÄØòÓ7‚ +-ûCÏØêÿ ÇÆ@ZF¿’¤ý—Qx÷HmœwQžxÅsõ*„ö+[MO¦ÜÑþ9Gõ¯û9$(ÇÎ-„Kr€o°·p£Í~N$Ÿ-F:,W +²%Œ}Bõ†–õÏF¹E.säòaa,+ºØ}†bÀtH;·¿¸` Òª¢qI—•0·¡â2E›¬›uº àÞ¢]Œ0.þˆú¿¿º8Ý°%Œ}¦hpB‰L¦ht>¤­þ¢Oèv5½še›6=¹”CëugÈçr™!?L_²‹´ÒÝMùQÀ-K@ÅÀ^e¸ôlÑ° …ÚôÜøîÁ‚qL&ãÍhI&KRT³Qu‰.kncÝëê©©XÏN}àA 6{ž›]òðî4<Õqð.B¦ÆuñNJÄú —}}<áÞ\6¼üx^Ð’‚'ÐRï)Ë`TÎõëS tñÁ3È% ×eˆwâëÉi6ÒrNëÓ™z$]NN“‘–úkÓÔŸ¼ÒâÇ1È +iø¹xHÉ•$d‡þPhê¡©;„æÿè,¼¥eo„¦Þšºƒ œYÕ·vÃë€XîìÃ~‰uþUèoûÓ3ôäüš±þåXeý}¯ôñxÙŠôb7\‚eèV¥-¤7Êz$')·†cÿ$Ý_ÕQµ³¶s·2&ŒÑn%Mvà M9ùÎÕan–r»æºH»ì‰KB?f¸šUE ‚¢Ÿ5µ(u]hHF:Õ0n5ÎÝjw½‹Tßm͹Ô5é¸Ô(ᶭ"<Y”@·j\jÀX….ÎÛLÒh·ú§¬m í¸eY FKL‹U¿…p1ÚWˆ ,z€šFŠFÅ‹á’¬†K4›¢°ÉRd·†ÂµíåŒfgpÙ®i1ëpíqÅÓ ÅÃ(ÊÜ(¹~ô2Ã+ðó®elj¯'§ÙÈÊyˆõ<œÏÌ.¼Þ7ýÚ4õ篬|ûþ8TrF +â2èøç†çúJOøÃpzüãjLý;¾7O¦8dºñ _¨ÎÓƒrç*eœãý©ðyÃ8œöœWë¶Ëê ua`'XÍãüKý¬Pž6à;mÁ಩§mõÿDr?!7úχÿ'å÷ endstream endobj 12 0 obj <> endobj 68 0 obj <> endobj 333 0 obj <>stream + + + + + application/pdf + + + RBPassUp + + + + + Adobe Illustrator CS3 + 2008-07-03T00:35:39-04:00 + 2008-07-03T00:42:04-04:00 + 2008-07-03T00:42:04-04:00 + + + + 256 + 132 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAhAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7Z+WOpecr3VPNZ8zWl5Z uL6JrCK5SkCQtboDFbOCUkVHRqumzH4upIxVker6h5otGuJbPTbG4soUMiyTX00MrBU5NWNbSZRv UD4z9GKpjpd8L/TLO+CemLuCOcRk14+ogaldq0riqJxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVbNNFDE0szrHEgq8jkKoHiSdhiq23uLe5hWa3lSaF68Z I2DKaGhoRUdRiqpiqE1f/jk3v/GCX/iBxVDeVP8AlFtH/wCYG2/5MriqaYq7FXYq7FXYqpQXdrO0 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 v//Z + + + + + + uuid:20547E781A4ADD119EEFF96D7801BC77 + uuid:a7a9523b-0c40-7d47-980c-c2d7a5d1ae87 + + uuid:0742cf20-2206-9d4e-9e3d-e542f631a88a + uuid:B7D572641149DD119EEFF96D7801BC77 + + + + Document + + + 1 + False + False + + 23.000000 + 12.000000 + Picas + + + + + Minion-Italic + Minion + Italic + Type 1 + 001.001 + False + MinioIta; Minion + + + Minion-BoldItalic + Minion + Bold Italic + Type 1 + 001.001 + False + MinioBolIta; Minion + + + Minion-Regular + Minion + Regular + Type 1 + 001.001 + False + MinioReg; Minion + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red + SPOT + 100.000000 + CMYK + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + + endstream endobj 54 0 obj <> endobj 52 0 obj <> endobj 57 0 obj <> endobj 335 0 obj <> endobj 337 0 obj <> endobj 339 0 obj <> endobj 341 0 obj <> endobj 342 0 obj <> endobj 405 0 obj <>stream +H‰|PmL[e¾·ìÖ»9»È]•õ}ï2hÐ…9ƒF'™Î°n%²A +…ví¥]ùè½£ÃÉh Ú[ +Œ¯•BË(EØ2ç”83&†á\Âtf™SÙßnwŠEÿ{Nr~<çEJr ÅÑÅÛ»Æê +s‚âÉßÒ*Î?9ãûnø*ôÏü}^²Ý×ïòƒáÁ†ú.h;`Üj*׫ e Cª—Tš€dŠ½‚þšÀ'‘òfZF©"ý€¥¤qó3-¯Ý  ·¯ý"›(;s @¡×äËS”ª“dºot‘3·ù‡ËrÁŠHi7Š›šv‘-m¾fô±Åð0”ìn7E™Ñ¶ßãçn}²ôá굌¸E_V¨Å²ó.HÝ›G"ÒîÕf{næ>è1}SƒÐÖdSǾ¸¼[9¬íÂAHý\­‘†úƒ'aÏIk¯›5z¬²wÕø¤³Ý„Vîã~‡2£J©!573ë_ÕþÉ@LµÑ²ŸƒeÂ6.‹Ë²îßtkÐñ]ïým“7Òö’áÁN—¸½'lnØvÜmw»Ü­íïò4u4¸É[µ§ +IW$eÃF±w–øÜce€ÄÂ^B¾ðÕO_Æ!+½sgéæ(7˜1µ=C!ÙXàt`Äo1uÊ]6½ÃÃ{š½v/ÙkWŸ.y¹UF˜[ðq¡Y–}‰9[&¿XÒj4ÈŠË •ºò¶p…¼Þm³[“56«¥VVn¿z$ $Eì\žioá°l3‡Å¿@é©1Ô†6HMLN.Žè»à†WQçŸ-CABØ(¡çê])Š£;ˆÄ:c+Kü ÎƉwªO•vƒ‹wφ ä v.o6Ç·NPcQ %HÓK uZp(¹Ÿ×@êÆÃûè-´'r¤ÆXž nXkL à MÎlèL395ÀRcUéa]ÇpÚžc ÓC}¡+çO§«ÉáƒÛBÀ’N$ËKšpú]-±âO5ÆÅYËYCI­ï‘Ü'ÔðhW÷> endobj 404 0 obj <>stream +H‰bd`ab`ddóð‹tñÓöÍÌËÌÏÓ JM/ÍI,É(üfü!Áò[ñw߯'?°Ê20LÙÅû=šÿ{’à¦K„@jêó *‹2Ó3J4’5 -- t@¤‘‚cJ~RªBpeqIjn±‚g^r~QA~QbIjŠž‚‚cNŽBHW±BPjqjQPâ…Ìb…D…’¢Ä”ÔÜÄ¢l…ü4|&100222ˆ22°=ÃÀÌàËÐÆp–ÑD¯~å+×?ü^ÿù{Ë\QÝâïúßå¿Ë/þ®ÿòÅâßú¿åËÿÖדÿñå·Nøo·ßj¿Õöÿvû®ó]{ÿw·ïjßÕ¿»ýÖ–çë^ôcÂýåŒßSo2gûqBôB'ë®þ¶t©?NìÁmm†­r%ß,b7œØ6á°Ômì~¥þUáu@ßuwýÐê\yƒyÑwÑï“LÙ`¦.b·kxøz—öíxvíßr:¿•µ«qœž/züÓ©÷g>pôþ>ÂÆW¿÷û¹£ßU/0~ÿp›ù;ûOÑìß;X'ÌÝ8k‹ôwŽýžzæ±.æYËæ•È7NnèijmhnihÂÞú©Mó×Vn•>Ûs~éÇö-;rVê¾ï³ßùqõ5IrK¾;°~oa›y•¯fÖO¹Y¿«~·™{¾›í{ó¤?5ÓÙå8WŠÿçáÜÈu“ûG‰È÷§¢L«õ‚ endstream endobj 338 0 obj <> endobj 403 0 obj <>stream +H‰|” PgÇ7ÂÆU4=X·%Ù6ëyÓ­V-½Ó¶§â·UAP”*H‘¯˜`>ò€„ˆ„@ˆ" +Š|@üD¸Zµ­­´v::wȵsz7½gí:7·A{×»éÝìÌ»3ï¾û¾¿ÿÿyÿ œp8þ战Øõ;mO•§*äo†+dI[ÔbYªÄÿq!Mrèyú93˜ŒåÕ@ÝÓ1ô5©.› ’—@ÜûꜲÿBý:EF¶259E-zCòkѲ•+ßZì—‹Ö&)¥¢èl•ZzH%Ú"—(” +¥X-MZ"­•ÉDQþ¿T¢(©JªÔ°³ÏAD©*‘X¤VŠ“¤‡ÄÊt‘âàÿÛ A8샼ÎAÞDÎA6 ÈŽ$:y…•‰Ì@9'€;›q:`M¸?ð{ô7’;:Ó‰-ÆÊg½>ëÄìù³³‚ƒóxYÖÛ/ÐB-'å)S/ÃqneûîÊl«n’/‡u +XÏŽ{òBß³c{–éÌ‘F¾)…v•Êo-©iâ»{Ž÷Õ·b°™ëfx¶¦B©™ŸQŒ–л ·“IA™E\¬(ë…îsPЛÞBoŠ ‚P|òÈËàá~zïXÛejìtÿÅ{‚©ðÞ5Âò™øÛµzÿ,ði;ÓŽ =)±öõ$SÇÅÇé_š¬F ƒð·0ß²¯ã£ôiÂRo©©¬À*lŽ£.r`XþÞžˆ”ŒÛ(!ðÉ;ŸÉ–,Ú²ié>uõǪRQÞeýô'íÝAO…„)}ÜdûÉÞEÆwM~½´Œ[×yzÊq&ÙªŠS§fj1µò€1‘|§°ñ®“ºwb·Wò+ÛQ¬-òæ´k5Ðwº§å¦ÿN¥Kˆ-òȘta–Ln:H怅EvTZø~d9v.i3Ť0 +¢™Ûf7¤Û)|•k·k§[ܶ½5Mm%¡¸³Ê«­Ò9r›øyǵ]ê‹Ÿê–ÁƒýÉóùÇð +ƒµ0ˆ©ââ1¦ô;ÿ%gí´èfË·ºÒdc©ù¼+Õúí|mH„‚ðq:P"K¬5Æ£vw…÷»õÂÌÆ¿š+BññÜRm¹ÊŠU¨U–<2,,>!Žú 2‘A– +Þ?•Ôqj°³é„°­¹g µ+ç漃¾ŸÛVPG6=è¾rb6ÂbB%‘‰U +,1%3¿ˆ,4¹¼=öÏ›G©æÑfOƒ³;,ÒU_ltPGÒ” Yϧ€É»eZ´öhC†!(ˆq˜‡ÑËè½>°­ô­•T ÷3x€vØŽÔ†_*sVQòî™e&©‘‡žmÎÛXª¶iøÉ5}™#äÙöO¨ûWG„Y‚±CñB|"†á Ãà2„}Ž9—LSy¾tPõ+¯îÂεtºH—=KJñ>e} óÑÂA?ÒiÀa>ðt@à÷ip‰,UŠÆÈúwÌïß ôÐσ)˜_¡ø}KaaY¹-,-~/µ)âÀüÅ‚ßv‰»N^èpÔ Ïvõ{»X+³–£tî/é}Ð}õÅ<9Kô9î4]z.{Zk±*‡Ëâ$Ýæ"'eŒS2H¶\“–¥ÌTaâ$U¾žÌ7xÚ(žTù8]ð,,€ž ¡DÜž=™2&{¸ÏZf;j¥¦NÂêS_ò™u[#dé‰Âµ;Å —˜ ÛòK¾qýå[!ßaÂî-’F‰ˆ©:˜yÖç­Ç*«UØI³Œ9¬¡ÿq¶~¿c4d}Ÿ=‡È +ø]3Wͼ›³AŸ‡Œ†’"R¯rZõ”ÞZ`6™Myº’C˜ÒchhöÕ^ð}×ï¹Õ|Usû‰=´©ef³möµ»ZØRxõÊf +Ÿ¬Ñ/·Wcöê—WÐxTÞ$&7mÇ‹©ø}ª¹¿Á"¸²dK!Ê33fý¸·XÛ¤ Q&Ù@—A§ðÈ€· U†gä|#Ìý¨Ã%[¿-ÂÛb™MDƒ©-ï¤ë9\¯Ôâc²¢Ä[Ü×»ÚÎ6ák:™ÀGrŒ©ÆÕF¬N-«N"ã"´ÉqÔn±**F°¾'áv¾0^‘™_ª-ÍnP{ò1|ì”î„?J{8C‰ƒ¢aar½ÖY-¨ª´Z+„ø±ÛžÁ†æÆS-ƒ¥w0gI­¹Vh;Ú\Ñêì8Ãç}ÁÞ¾¤q€¥@ÔAð6Æ€åNâ(·òJÚZ°‰þ‰ñ&Ò}D#)¢ðg±ŒݤsiÚÈl¯Qº”½¥þ”[¦SþÃ%¨@'\‰Î 2[mÌJ¥Ò²£“v®ÁØXÑÈÏßÞÏöî-Œ-ÜËç1ËŸ#ÍAÈ„DÁ ð>‰?~¢'دùÔ(R^´+[¶ßƒv˜;%dܺýQ”Sº»š«HkYA2‹ü8Š1¡›rÝ,2Û≧ۈ½ 2iSæ™þ“]'µ-I¾cÏ ™(c}˜ÇÞéy0÷Ìó{áƒuNÂæw¢ªÿš¼7î!]Ųìbê ³J­ßŇà¶+Íþ%ü‰?Œ{ɺçf Ƽ0ë¤?mWF¦Íb[¢‰4—N³û.ý£[âT9™Fœ’ë>Hˆ\]R긊N4$:³I ;¯ 2tâ¢ÃYkGÑëµæŽƒdü†i=Ó\MV²Z T2³R¿+‹Ä›œ6rZÎG0o;ü‚MO¸¿¬?Š™ð}=ÞH6<'}Qô†©+wØt†|ƒTëÑܬ5pÒS ­’ãó+² %¥*{¾‘+ªÖYT~}»ÐîooP-ûÞàÐÚ»«U†dˆ‰Xwò!ŸÁ[+úUä@`ä g³T#Q“áñëwâ#c—^ªßçÜGXÉ —ÃBÛføäâ¯?Ø"#CpB¶MþŽßÂòÿËàdôhsU&÷‹(oŸoS‘1éñÅžH ´HõÎWòQ°Z¨xøÛRC»=Œ·p¥BeÐì]—-K¬é™<êZÀuÕH‹¹§0I{§¾z;ù‘¼¯a£rèhÏNº¨édë%u¬MŠF;O—7Óäï¹[$œ¼! bs“úr^Ds<·âä1:[ëgÆ×ånXa¢,žŽ!9ª‰[`ĆCg:ÌÔáôÿû!ÂS|­]&”œÊC ¥˜*£²÷x)ÊD¥øí‡dYVd`ûlAÝUªõ÷®sýºhžÃ4fSu?ÿÒš8„’ ‰|9%9þôå; ž¼ÁÄÃ]1õs[aa±‘õÐÎ¥ÖD×êÌzMIA•µ(WÞ¡î‹{„uWõë(í¶½š> endobj 402 0 obj <>stream +H‰\ÑKkÃ0 à»…Ží¡8>!F×A{°¬? µ•Î°8Æqù÷“ìÒÁ ‰?[VPdylžkÈ?ªôÆjÓxó +á‚WcE^€6*ÜWñ­†Î IÉí<Û¢ª@~Rp +~†Å“/¸òÝkôÆ^aq>¶Kí͹ÐÈ ®AcOzíÜ[7 Ș¶j4ÅM˜W”ówâkvE\ç©5jœ\§ÐwöŠ¢ÊhÔP½Ð¨Zý/N?Ó.½ú +>œe4‘OÉ'r™öKÞ/óäœ]$ì2¹d¯“×ìMò†½MÞ²wÉ;ö>yÏ>$bÁ÷ʸtê0<ú¢nÞSKâ5Ä^pŒÅÇM¹Ñeñ#~ˆˆÐ endstream endobj 401 0 obj <>stream +H‰|SLSg}ÒöÉ´ +å9mç{o±NQ¦qÈ08†B:Fˆt 2£¦–§4Pª-ÒTŠYeLHµLÓTÄ®üЙ¦‚¬*A42aÌÌd°çtK6Üûð#ÙšìÏåKîß½÷䜓sq,6Ãq|•º(gWá»ëó SEŠ†5šÊKR4Ùi©© ¯òJœWÄ¢dÔôìÙÜWâUÖzs è—‚1¾÷•Ø‘„…!.ÛtÄf6.­dTúuÌëéé©êf&«Äte46K%k´0ê +½É|ÄdÖU²%&«¼œ)\ز0…¬…5W ¿/ˆ0 £c*ͺÖ¨3—1¦Cÿ‡„a¸ð°¥¿["èÂD˜KÂŽ`Ø<^ƒß‰Ùs.fJT!úš‘1²78XßJ‹92Ôè »ô¬Ñ¨?Ðe +Ò2.ÈñnÀˆàÿ„|àô3ˆ²"Uæv+¨€ÆÉßÑÁX”VŒr„nrå@l C$Cr1ä ­´¬1Àû×­8ìùSƒsËÈVµM}‚8*uŠ6;õŠùÍÒÝ Î-õ” ‚éWCó°BÖåË¿Ááö_¢_KvØÄÁÀ•Qåý 6w]~ºFMhwk5„_.õôzž~SË +ÍÑší”@<(Å3¿Üz¬xšI)8`)+£dÜm¾#’Wgó“Eø3d»U,Ÿùƒ¡Ï•á«eEù¹ì:Ýb·x»\~¥|ìÆ8»vMñ~­†íöYhG ×è¨çê¸jgÓÞä8SKX}![H9åãPxwÏ„ê Ý,•O_ñúÏ}â!|^w{‡bâ½Á×vï3—›(Á X=Ä«7.ü!‚»sqäz”¸%­E 4eýçCg@šñ܇û†6ñ*)êœW‘C³Ã†¦ˆÓ¨["ã†áú8È¢8L HÄ\,©G×Å.o¯'¤œÌß”VZ©e{Òµ­\cm]íIÎî¬ùÀÞÌyÏI÷*ïLøûé‘›]w#Šhn)lE\ÍAêSP‰á¤Ä 9€Û£pÊŠ_¢°0ÿÖÜrÒàTÛ Î""P…¥>J8ˆŸ™…%gM"Ìj«s£4¦¬˜þrÈ¿ò³sÁ¶ÞšÿžÌ+ž‚e—;\´»Ýï +('C;¶½]•MËZ«.Uñ—¢wB¿M^:*ˆª×9÷rj¢Gñ5»F”P*IC9)h'ÂÐ;„¼ÍÅ=qÿìO°ÿ èVÖ»Å/¢›šÍø2gý&Ÿ‘?€&!ußþfª:\)£å3Æš½¦êjÂf;fÔ*-€Ø‡7‰ó»‚”üçþÀE_«›ðúÜN…üÁä®/ÖP=¨ÌíÑ\U„:ÂáCvžÅpÌF pè)©Õ üñ‡ûüôøáöt±ã°®€’¹ªÀ5 +׎ ƒ÷…c¶“Á‰6ß5”·~2@å‚Q(q+ŠIJO±×ÛÜvê®@ôƒ’Ž®„è'3÷MGÎ{oê"ŠKµ5XÌtÝq‹Ã¨”ÙÏÎQgQu;l÷Þk”@ÝÇóv”:Ÿm{ùŸÅ‹úãž¾ôÑb<&ÉÈ€K” endstream endobj 58 0 obj <> endobj 361 0 obj <>stream +H‰\“ËnÛ0D÷ú +.“E yo »¼èuû²D»jIå…ÿ¾Ž ëÐ$gæò‘îûÃÐ/&ý1íÑ/æÜÝìoã}n½9ùK?$yaº¾]ÖVüm¯Í”¤aòñq[üõ0œÇ¤ªLú3tÞ–ùaž¶ÝxòÏIú}îüÜóô{w|6éñ>MýÕ‹ÉL]›ÎŸƒÐ×fúÖ\½Iã´—Cúûåñæ|Žøõ˜¼)b;g˜vìümjZ?7ÃÅ'UžÚTïá©?tÿõ;å´Ó¹ýÓÌI• ƒ³L$¼›:´ß?Û»Ð.²ØŸÀ;rüOÞƒ©>IUr|‰ñeNÎÁ¹—älÉìȬd¿’_Á2²–[ò6°¥—…—¥—…—¥—…—¥—…—²€©i¡i©i£&벨Ër]Â'©kt¨ÑÑËÁËÑËÁËÑËÁ˱.‡ºkq¨E˜YY¨#Ðêt„:¡Ž@GdÝ'0×J°VB}‰ú¬+‘ßÀÜǸ¿Â}죬gõÊzP¯²^E½ÊœŠœÊœŠœÊœŠœÊœŠœÊœŠœÊœŠœÊœŠœÊœŠœÊõW¬ÿs‹,‡þFÉ6êõôâx‡[h>îN{ŸçpmâU÷7¥üÇmžÆÉ„Yx“ R›ôn endstream endobj 352 0 obj <> endobj 360 0 obj <>stream +H‰|”yTSWÇ_ï‘¢DÉãÕ¼d&/:­"Š¨Õ©µ®,b "0E¶Dd–`ˆ¡(²'@1„D! ¬#›êÊfµ —ªE±#§ÌL—ߣ—ê¼èxæÌ?sÞrÏùÝwïû}~÷ûýñ0k+ŒÇãQx}âé¾ä㨸(eœóVµ"&*Ô2ñ+å±bëÔÙVˆA†_L÷à¿Ç°¢;øt²ïøÔ$²|—ºYŸ¤ŠŠˆTËCËW¸º._jy¯”oÜ£Ü&÷KJP‡Å&È·Æ…*UñJ•B¶g™\¾1&F¾Ã²*A¾#,!L¥á¢¯sG%ÈrµJ±',V¡Š–+ÃÿßNÆã.ÌÎ +³Ç11[ÀÇa˜s±ÂÞãc®¶I€}„c~,Ö +ËÅ°÷9l̳ÁÖaþX2v›çÀ‹äMY¹Y5[=ãgðÿn½Òº÷Ä›ˆùDñÀf•M—`– û­åo}i»Ð¶nÖºY³#f÷Úií&…ûç„Ìy27ÚÞÎ>Pä(:OÊÈó«ê^PzêùÛeó¶Ìë{Órú‰ÄV² +-·7B)/Vó HH]©¾}ºô¶àvIÐÉp©†«c6“›lÒæÑœY«Ô†iâ£ö +„Þ4À»¥ü[PHÜC.Q>€s›¥‚­“FÔVdÈD*ÕØ`î`Èê96J.#CbªÕ2aj#;ÞÈëÚQ>(ª('#¸sœáž à2%ýA‹\ÏpÏ'ÈÅY +6ì +9®DîhuTAžÀ…?wXXÏ€SC"lBÎRaž™m«¾È†“|ØÄ^¦Frk¾0è²"è53›ÓüuºZ:[C%‘o^aÔ”ôÑOÙ®íšmI^)´0oˆ-í籂1>¼|»ªóHkUǾBñŸ#ê¤(€€õà‚?™¹úÉã€AÇ»4Ñá2/×Ãðö–ΫÒûÇüæ#ÞâõëO_Ïí‚aêöÌYüóþúarVÂ(eª £`‡8>›©ÇIuð“Ò¶kuj1Dæ]±ù9%Ç{ióWÃÇ  êÑÆ°Ìte6­ÐáYl)e ¾DFyBXš×—ÀÔ 6‹X¿IÏä#°Ÿ–QäúžÖ”¥AíŽ^pCzÖûZZÇéû qûzics¹åTï°drýÏb™Þ†|4Ryïü÷’É-H$ã„ÞJ‚Ãa}a‘žÖWèK‡.%¸®ññB|&9Ž"'GG£-õ^‹lÜ +¯”2]pBlr ûkËÞDÑ•IVYGÞ™^Ä&SdwþC—¡O@Þ1îÝvô)JFŸrMM‡|Aä ®c׫M Lmû_G«O© âw¼¼ýÞ•¢E¾€ÃBð{ؾ?÷Ä"‘«{[^ ;þ +÷Ùcò̵À¶½åq°3ÜñVI€í“Ú¾û `ׇ@³%Ü_$þùÈ}(ÃáCŸ@_\®?+…å÷=ÑŸ²CkQD\|~ÁfŸ1¯¶è´@8ɵ“mPÓ’P+bKëÈIx £èµtLÑA¸ŠØ ÊÖ­–"ÑÍ•¢Õ¤Ïk—ƒ¹9åI¥ûõ{í¬3ˆMý¦›†Ã‚7‚;¡„ÿžÐo‰òôÌÿä\ÏÉÀјYXýœn†µ¸p)×Ç2ó ì\þ+\ ¬ñ¬Çÿ–r ׳LÕÀ£¯Â 7›îé3.\ˆhóô>³(œuE[Áƒ áÊ`ÑI¶z\[˜•Èíµ ý”²9%è@(½wkL´GfZl"ŠŽLõ̳†S50ëë > +¼BÓˆ1ß,BOž9C3-4‹À¿lìUj¹êdG+PLâ‚”€´:%RyÐ?'›Ó·–ë¬^ùª2}­o0ö}zÊÅz‚Œ‡›3xqëßt—{PÓÙÇELö·î4Îò›´$¿NîhYDZZÛu]±[]Eå¡°yÉ›@€„„Wž†‡äAÈH"<€„ò`q£â[Ä]kE‘Š[뺎•­ÓçâNÄéNÿhç÷ßoîÌ9ß{>ßsÎõÿºõÉgp1Œ=ÎfŸšŒ‚ÔjÞÍj»¨6›Q›'®a£†ÐZ*ºí7“¸]àD–ö<~_A‡Yð3ø%Ì…a(~„¶"úŠDÙh;\†>€aÀè¦#ƒ nýl†pÍ0Â…m ™ÜM¶Š,umœ0ÆŸ'KÝ럧¿wB€+ñÆŽÖ£U™Q9Åz­¬sÿÃq?×ÅFÖeVÑÐ +—1:à'Ó|JcSÒ ^é 1 ×2ñçÿü‡V³h0BÖ"µBSéé¥èOpt/E7© è&•ƒ˜M Û››x™¹UiÄQêX>½[_ÍiøP »+¢3Öy¸+÷EýT¨¦%C/mØüN¡»ÀÇ÷äßwcós“ Ì«Åý6–53¡á¤T<ïÿ +Ðÿ Ö’€ÕÚDàÞs!ƒvß=¸eFeÇgÉYªŒ!?>–o¹•ÿW?„Ëf >“8¾{™)Óû.1§FÎßgá3 ¦°è`WQp¯ò\݈zXªi˵þ¨)+O“C •ÃÑŠ¾¯|YÀQN™Jq³£˜»Ø~‹–¥ÿ8)'okiŒgî ÿ;{0íñ‚[W»ÿÖú¯¦oB[Þ˜¿6¸Œ½N“Oµ„µ| ë{em‰µ"N°Fz4%صÑ Âþ;ÜÖ †`.™šþ?†©uvÿ+k÷ml0|óK¨$Óß®­nÈ›fdæ~÷yFcç›ë'ë—BäP«x^Ekm­T,d°÷ÄíOˆL›OZm”¸Ôº^ÍM¨ÆJAòÔ5¹±Îqˆ±€Ê¶}²wKJ"#î`¡ìPÕÒHâ‘ANh +Uµ&»›áòøfÿüb +­³¤5e9'%ùÕÕ¡´1ñmv‰ÿ÷‘ ¤w~þσÃ^ú1i‹¤‘0ÍŽŽŸ¸EÒJás2 e„LÕìª-j‡”ö…*M¨¤\­ïn¶°Î žõz.`*j>,¥÷œ®RX@M:o­¨ÃÝ幩ŅXʉN!”w ôèîv^ΛîÎN†çiÍAŸ.’ ö èò}÷<üðaðü[@§v«I2ðéb¦ìø)nC #½q¤b€èñ5]s“7È}iÓÇsg¥¬Oût «–ú¾£Øê• !ûSqÙ0¾è ›žêí}£Øפo˜°›+bÑG{ÑÇ_q€´B(/"Ø\çl3 í_‚W¾?>2ôˆl˜3pWCÄ G'ï´ÞwzA¿ÕÑÞEt8Ê‹-¿c¨lÒ4é1üŒÙh4™˜m[æ¾È¬ŒTÖž«·37Æ_~Öwç&‹vW|=¥Ä¿e ZKI…!ý³ðàÌ™'x>'E^ v«–DâI’<´™BþÖð„u"j[rfˆ8”ð›ÕÌ­ýëD_£™u®ÿìÈÈ-r­-FeOe ŽGÇÇÁû*òd„\etiAŒî‡‡a4f«WYÄ„<¼¸l'Àû$(jñ':_âðL˜¾q^Ž‰NG{¦7YµÂÙ¡Y€<¾xCI.7½(‡ÇÃRR3óKZªø"|7ä™Ñ‚ákH£GEÆ—f’©‰zU“R ~è„;n‡ylOqkni;ºž#ÈL ©…‡b™ûÒ.‹X‰yâr¦Ä$p Xø= ZÃf3w?Íyx~6ô^ÎО!VŠ=ªËÊT4Úf†Ï‡_±zÚí˜ÓÞïfž®>-7³ôÊz¥^‰á×Ã[TænW•1”<È—qŸ+02ASi¡KÐfô%~p½NùKpÂ?>š˜‘ÞÇÏÂ_˜èZŸ.×uaøƒ‹.¸®œ ºjrÙ€{c‘œrD¬-²Í$}çôå/Ñ'U] ÿ*(/Ú2 „DT#/1E_²wnÂj©ý,Š½¾–t¨ü‹â²pPzáW€ÿ ‹ÉÒxi¼8žACÉœŽ à¦W!·Õ<Ùÿ’|ÿ¼†nN—D\ÙhÓ’o™)ØIé×{¹osbÌa`PÚmcFBW'O'õz/rQŽ‰Mb3á|ù— àßeøËéÝí®S õ”¨­€ÈdsU€¯´”;šM|-µÄϸèD!p×¼?監ñKe"B"ý7áåÕÔ•†ažxjÔá4Ùkr¼­™®åšŽ3YUÆbm«Ö BƒÆ€ áž›1;¹'Bp¿ÓpU)‚‚:*Z-EA­v´¶ãŒŽí>öt-ç$Xµ¿šu~íßλßï{÷³­µ¹xvïÞLJÇÚÚÜu.Ô^å.«•¦â"îÔ{Z+X6U%?qÍû·°KK…é”äoˆ¨g¡¤Þ <‰Ë†žIN'/ ÿÄ'WªâTå®õ‹JkÍö‹Ïìèòy?8¶Õ‡ÆÔר=ÀÓVqa’,’'+ü9yj²÷‹(„óÂ,n’èŠm5å8¤“Ô^ÅþãÝ$’E¼ØkÉOV$RîUƒÊodž{(˜z0>.†ë&Ï觰ÇñDôˆ!NO¦œÔ•œ|ì¾é™©º†þÇ›â7S^¨‘â{%ïp#–Sʪo#ÿò¬r ‘¨©uñÆ„ˆ? …´š»ÈˆÃà÷e=/&Öï‹×Ûí¥|)”Q¾$‘«s7kâæzãHœcr3GZá+1 ¼EÙ5øArµ"V›Ëœ®7Ô~mébŽ6QOÆ' I/ˆ§î$b›¿óŒ9Þ@áôoŸõq(\<ýp: +óÁßù[8PŸêwª…çÁ°O@}~ …û£IÂQ” ëf4#é…pŸû¦{Vx*%P=+\ºv÷ª_˜ü\ ½NÙI„u÷ÍÀŒ™x‚ØÉÈ> À£¼û&¹˜µ¡õ{}ç»zØÇ»}źµwôm6¹–ìfÀ7&§›ì2‹³Ì +N6&Eâ¥døFrÞþ<´P«Ð«AŒh|§Ÿ!µOƒ–SïÚ§Óª n¸Ã§’+zB?‚„M·°v˜L,f˜jªK<`tP´’\¸’ _“.v¸”ø=‚ÃP›r"©DÌTïKS¦jø2f™¨ÁZgi21ùäúCO½K«Û¤BEs¡ÚŽÔÌÅâÊù†B«u˜é… ¬]ç®-ª\WzOŒ c—o³fxÃË„izu +›þžEŸÞ†ø•C©ÏÙÄ‹áõXOu^E²8žJþYÅQqqÌ™zCWÅEÏ¿™Ž®ÊŽºv´£Þe´«C¯µâfµÄj´š,6£Ýh;êÌ·¢Ní›d¸}%/¢9Î"#¶’v /VAòxðÔø?ÇBà%ãË/ï\oWÕoõáiÕû[X Þ†Ö:™ÄÅ6jm%N›ÝVæ(q ž’$o*ˆç¥‹…8o_A¢”Åõ¦²™„9¬dANF¦ÀÜ‘ÎÖXµ% +*×*d¹,AÉ™ì@'Ãü¨õ4¸œò"h‰*(tr +Ë¢H _gHD{x" Ö× Xñ3ÐõCyc3B†ÑZ`¸Æ¸nûáµÈFZ¦Ð¤D¦i[Én$òˆ;¥ + ~}£·§?ÀC‚4ôæçÊéï§0ññ6C+{O+B1GDbäª8mh§žiÃP‹t[Š½Y@¼áiÑûñÈ$d‰°;ÏêZª\µø9ßÈÄàyŠ'2É°@¢×Çmÿ8(©qÈôƒ&èŸÃˆšF7‚9.»ÿFÀ%ãܵ;pþø zêjec#«MZ-ΖŠ„%lE)fLásÙYSy‚ýT\ÝÕÿO?†^.Èï‚”Ûx{q« ió¹]và,ÍH(à I&2º”º{¡‚Úi§´…ç¥ã>…ub—‰%Dc‰l%çl&ƒ©zÅWõ0¨h Åú' +ó;Å€½ƒ»Ï_²õãªJ°„» xi’‘Übú+ZG¾s.˜€¯P¬ê$ƒ-äërjõÔ5ø[ÝÔz»ªêšXD,ŠÙ‹‚µG˜ÈNã¤r…‡¨ ±ËJøªÎW~Ò[•?…ƒ÷¢.o¾@¥N‘ƒEa;/À댾^·ÙÌÖb¡"ÙHD g]:ÐèÊŒ¸± À®’#’l<£Ø+jm£|ƒrÈQy 4´^9cÅòJ„Ÿ’&ËbùñF5¾¾VUïöV×2[ëk«ÀjÖçQ)u@[f,2WMUÃ1i­à`â^] /!§¥ŠŽ,½›ÃÅéF?Z­§|{ó,\v7„XáŸD¡Pˆ—èìªÂL}ª89s· 6•+àúmz¨yTxš²Iç·)z/á…MCF‚/?ä"?*ŠÚ³>vý«,¹‹t?ß1:ò³oþniîCÛLÉÉK «ÙùK?¼ÿ·uýƒ¢i¥Á.+ä’|På5pqÃf‰drÅþ,> endobj 355 0 obj <>stream +H‰\“Ájã0†ïz +ÛC±ãÈ£Œa›´CÛeÓ}ÇV²†mç·ïüúMÖàèš’&Ùf·Ý ýl³Ÿql÷a¶Ç~èb¸Œ×Ø{§~0«Âv};/³ôÛž›Édš¼¿]æpÞ ÇÑT•Í~éâeŽ7{÷£áÞd± ±Nöî÷fo³ýušþ†sf›Ûº¶]8j¡·fzoÎÁf)ía×éz?ß4ç_Äçm +¶HóeÚ± —©iCl†S0U®Om«W}j†î¿u·¤ŽíŸ&šjõªÁy.¢ï¦6U‘§¹Ê[òüB~Q^¯ë \ ðš¼;²{²?‘Ÿ”ë8Ôq¬ãPÇ1×!×=’ÁÌu)wC†sIçÎ%딨S²N‰:Âo ¾%ŒÄÎÂxIñ%¹ËrF`îE°¡›ÀMè&p“gò3˜žél…ç)8Oáy +ÎS–;Ð «<÷â±OOOOOOOOOOOOOOOOOOO7ÐËÍ£5´ƒíwßµ×µåR›§^C—õCøþ'Lãd5 ¯ù`µ\Íô endstream endobj 350 0 obj <> endobj 354 0 obj <>stream +H‰|UyPgÿ†9ºEi”Þ±pZ§g1Ï$àjPWÔ ` +"÷9ÈÀÊ r_Ã9¢È5äEqEâÅD’òJeMܘìák«­r{”ªÄýc«»ºª¿÷½ßïý~ïõ×<$°@<ôðtsßê²ô‹è¸hEÜrEl˜yÙŽ¡xÌŸì"¶h¾ ýÕmá„ ‡­ÀÏŠæ Ì·ñ·1ïÒº*âÕÊèȨ$Ù¢ÐÅ2ÇÕ«?Yf~:É6„)BÂe;Õ‰Iáûeîq¡ +e¼Bœö‘L¶!6VæmÎJ”y‡'†+UÜê;~Yt¢,X–¤  ߬”Ëÿ !w!‚‡løÈ! Bvù^ü³‚•‚Á˜ðSá¤ÈUôæ×â¹3$–¶–Ù–÷fÆÏ<>ËkÖy+Ü*ÇêáI´Xl­³þÏì”93؇„ùÞÞ“¼>¨ç÷Aƒø3¨ŸÄ¶O Ž¼Ó°œ„V|ªÓ44Ó³oo§|€&òMo,,3Ñ´ Oáü˜ñÕÃBS^±.HòúClGÞáUz©†Lت’¼¢¯$L'¶6y£ÚM‹ù/ßG<k>³fnåɪK5g# ¶Þ š¼»R–0[øäÙ™±G°X{uÉÖ ®iÒ펭É“mý—¨ ÓîMŽÛ¶8Ó{<¼½||qFh¯3å·m  ,×Àrœ|_Í{ú+b´ÿÖ–Dao뉞!êLßþ=ž›C–FÒ‘²†öÒfŠ?3²xYX¸¯O`gC"­-×dé45©ú4}z±¶:OmPŸ¤®CÂMð¾±ûö¢ +º#vÕ«1Öà õUGI&¼.,”ùoÙ™‚Lt…YÀyÓ3ùuà*†B'QdN–2Wê¥ʡׄí.*‹r*º%OŸ\YÁ,pÁ>fgÙ³öì2üñ1ñÈÓ‹ÏMá…l…ˆ0¨˜Î™•6½Ì&rüÚ+X¤óË؈w‹F›ŠK®S ZÍ~¾„uû3ëRª±Q•<ñ„ü?CPv¥-Qª‚¢ èà5ÃØ sùˆ +¦Œ½FŽþ4¬—ÀüM€³ ÙÅ.,¹ÂþΧ0Ãh,©j’·$°¤kÁ.T΃ÍÌ„xò8ËwJËKÒÇк µNI¹Üšk¼7J`•o‚/Î1Ò^>üLÃg¬çB‹Iä[š^õ,ü×@˜ 3ÝÁÃÖOÃî{]嘡ߑ=O*¦, +(É­¬žW=P}ªª ‡¢Úˆ†]Õ1uAúÌ}BŽí +ÆC\$ºÃ†Yñ(Nôá¹ÉpNÙ* ì`!ùœ{Y.fÑ¡ìÏuÜVcäO“·*ÛÎÒ#]C’ëFìj¤…ùükÃÁ'’—Îý¬TÊvˆÈ)96®+Ïf‘„ØsNÜRÐTZ,-.­*‡Ü£3×wêw—¿åtkgjoÎgc~÷‹Æ:uiFÚ˜^©¨ðé.²ÕßÔ“wO¥ª3u ÔkQ|VáQ5*ÊÝ­Û”ãÆ,UÃU­Õ5x]mKÕÕüz·È̵ÒÌuÏ„9Ns¹iïù¨ SËFòSl:8#`IÆ0sáøDvwD³´^k¥>ËØ“€'©µê4I|_Jƒ”TÕËŒEtyoU«±7TT—TP=-I»èHL®Z»ß?÷INŠÞ#ñ>ë~¿~¤§¥_ª(oŒ¥]Êlêµ½–ÒdÔž¤É.ÖR.V'« ’£ŽŸî®=Ò^G7V¶Ô5Và„A;/o€o[W +op‡y|ØõÊOì®Y¯ ÌÆã°«9…yž’×°øg³þFÁbnŠ|«~a±¤ä,í~:,]!(­i,¬ &/ïa­ØÙ»<½éðÂä] žcÈ­¬‘2íS¸=Ê3Á,>c„8&J® ¡ö-í +xÃ_ö´ve† Ї*ŠóŠ©šãM}\–Ö@UÁ†8*tK†ÿvÚco”›«„EßÙôë+§¯ H‰jíUüë”>œHadJ&Y• ¿~/NONÎN¡‚ܸ)8=¨;ÒfÒ„iNéKñ6ÍM€Yâ·IE&Ka\ÚÙ®Òম+l×H÷AMF/,½ŽBh2M + mhHR6`c›ÅÆ áM›­Í¶ôdyÓnK²¼ Ë›žc0Áö6ÒÄe—»¸4´– 5É„öŠ\¦ôÊ&¤ £y¿tî¹ç;ç|ß9·NYZk¡ÐP¢Ð"8gí— ¾º@˜Æn?;ÆIá{ GìD$ä[\ƒ4ï5 nù)8·œ ß„ †‘äï“÷S«Öƒ³è);züuD‹½®¶O4ñÞµeˆ‡âðï4kb¤z'Zÿ:"F˜&¸êÅpȱ¡æ†ÖgÐâIÄî¶fYvÚòÄP“l¿'—ZürâlÜúG ]¤—ïÕTéE ¥^]H}BOý«õå©Ku„ÁhÖ«E8ŽÔ‹kà<1Žisô#Á¥ž£='#©Ék¥²¼½Ï_ÿ]`£î6›9L÷”…Š¤¢LEæ[k¶ÿ¤Ã×äoˆô7í/Œ«1õù e&q#-ÁËÜóʨAc]“ ²Œ}D«@(Ôåí¤ú{ 6Òh H³ZwÆ,Œ,HŸ±Ø îíYœ±ýL&æ¡J¬VËÕáBþ|ñqÝïÞ~ Hc˜¤éÁÍ‚$'ãÀ§‚dýûú” +"Œšk«6‰Èo†à¿¹²¼œ}ä?Á²žÈcshž;OžLƪ¶À³b´™Ä¥®"ÏÂL dƒ~•~o È(3 D‰0kc6³`ýÌ…qàªqYëK¡¥&Âß°\µ]e7z”mBùÑ× @ÙÛ;ØÜÒz„ý ÙÕãêu%²å”sÈ›y dmª´ZLZai4S§6êJt…‚‡\8´ïŸf5aò9(£ÿô+þ34ÁÕ¸ÿEöéêõ(:%…JZ#Ö¨uE5a›â¾“˜ú#+PØÂ0ɱ…cÛ㸠â¡3©:÷Íw0>NÁ Íg¸f +ÞâCî=Š·mÜ°R´âÖþñ°êˆB.ÚŸ_p =}ô÷±ÂÆÙç}Ï©kš‡”#Ô­©“ßÞHé{§“Î +w‰"áöžÈqå»,æò.ã•,Ut!rþMLd)ÌÆ~‡Ûä®e õÄÏà> endobj 359 0 obj <>stream +H‰\ÔÍŠâ@à}ž¢–Ý‹&?uëÞ‚`ë4¸˜Æ™Фtc 1.|û©“#Ý0‚æ&¹‡¤òõv³í»Éå?ÆK³‹“;v};Æëå66Ñâ©ë³²rm×LÕüÛœ÷C–§‹w÷ëÏÛþxÉêÚå?ÓŸ×i¼»§U{9Äç,ÿ>¶qìú“{ú½Þ=»|w†¿ñûÉn¹tm<¦}Ýßöçèòù²—m›þï¦ûKºæóŒ_÷!ºj^—Ä4—6^‡}Ç}ŠY]¤ÏÒÕïé³Ìbßþ÷¿-xÙáØüÙY]nÒÉUUVË”¿¤\ªé»Æúýs½H몘×érÉ\"¿2¿"/˜çóߘß×̸oµaÞ sf:¤ÌyéÕž³…} +úö)èSh˜û è3Ð`4˜Íæ@s€9Ð`4˜Î@[€-ÐàQv¥èJ9W1W9W1W9W1W9W1Wõñü!s®b®²+EWJÃü|*»Rt¥ô(<Ê®ægZiÓÙöxÞÑ•>žuteìÊЕÑoðý¿Ñoðý¿Ñoðý¿Ñoðý¿Ñoðýÿ÷¯Šæ…0üPf?¿Ü·¯yÚÜÇÒÜÆ1mó–5ïØ1º>~ìjÃepé*|³ ÜÄ(® endstream endobj 351 0 obj <> endobj 358 0 obj <>stream +H‰„TiPTÙ}¦PèçCxïµqA\Æ∣Èà†HelÙA»›E@Yd§¶fˆ j*‚b@éœQÅ…™1£™AËÔ÷˜ë$éŽe~Ī¤êÖýñÝ{N}ß©ï34Àp7w“nóÙâj»#4*4:ÊÎK ׿ÌcÅ8kaˆæ¡¼_&§{¸s1¬¤kì5,³‹V’x‘þ“jSô¡#òÐà¥dQÐbÉJGÇKõ÷g’¢e’]GJY¤B²5*(Z~(Z ”X&‘lŒˆxéQ +‰—L!“Çêª:„*$¥<à€,2@.‰>ø¿˜0 ×uáØLSL‚aÖ&Ø*.¶ÃÖaØz s¶ÄB1,ҋð óÐMŒb|l?VŠ coðyøoqo< +ïÄ߸Üå˜qâ9“† /p ®·œ'ä%ñø!ü¯JÁ+££ cKã}Æ?ÎX?£wæÆ™¥³Œf5 m…§MÄ&I&È4δÚôŽ™Ù5‘©è¬ˆ%’g‡Ìþš\Dž1ÿÂ\1ÇjÎñ9w-Ü-,Yž°¥~GµˆWŠïYí·˜»`níG¢‡èg(T¨?Î*0foʼnߥžx +”Šl©«m=/¯ —ËCCêçB;íh–›˜«ÌdÊQ 2V#‹‚ŒÓ9……j°(ã20ä_ÊÕœ¡ª +Ãh¡ó´oþôB- zÁéÝC:¹Š‹l–ì@h3…6ßA`³„.¯äZKÁ 6PP ÐÁ:Ú ENÖëèòx.ؼ¾°™‚Í;ÀÙ¼¦“ã¸ïœz‘ÒÁÀ¹:Š:qhíåÀ¤9Ab'J„)J@I~„ŠøBäfCä0ç6šMÕŒ^}Ly^–ÉñòÄâŒülº=­)êµ?2l÷!Zè¾}x?œàôC1é'úô*˜…À ÌT‘çëkÛZ×…†–‡¬W´0Bd2m‡W†óÀ„Ði_®…þê˪šÙ§Íø…g zÆô +ÒN˦–ÿõe-ZŽÄ(Ðòe ûC´Ô¹"ds¹ÂR°½®`6>àŠlaŽ†m«¾¡IöÉaŽ–ÍïÇalœÃ.4/½¨¾TÚ!/²ðRÍö#)h°ã>{Õ5ü‚šrº»zç>yxíýye"÷Bc[ßøÛN©½ËjOWf§ÔÓÛC̪®C_7H¯‹ ûÛÀ'ÄKX¢"ÇÀw ¶í±-frùÄT‡¦áì©rAe…ZSCz÷¬ðñ‹‰Œ¦·U阫;ºnŠ{.Gxlß.C¸?S¨äžm(i/G†Â† ¾”zîŠh¨T2ÇŠSN¦f¤¤¥§d¥d¦ä©Ô©‚øªóG:Ä:EÀ®‹µÕIÒü€£ŠVó>*¡Öð?ÿ·ºÑlY[¾-¢—¢ù¶ÈF0XEö¿½ûóД õñôÃÜ» ´8L=âÚ GÜ‚ŠöÓ—Ä ¸±u™Ã>°ÿî%+%÷c/—ÅÃ'Gê{þ(øSwCß05±ã{dí§J +¤ë`Òy§´úM€oº!/¿øTO8ìÚis2 ÝW%;*ø Ù"C$§ÐŠÉe`¦§`ÆÏ.‹‰ËH§·†5‚äÅÈÝfËöŠŽÒs…´þý+ÒÑ÷˜Ùv²¾ š9]ÛZÖ.þ¡c½K¼ƒ=#,‰eµ)¥¢ÖšÐjueî?îŸæ+¨åÝ©È+ƒœgÜ£ÖȽà˜Å¸šK´M@À÷ô#ø§—Z|X[Ñõq¯1ð¸¿û>1I<€cì[òZ×Ag×CÁ!‡·sn-cTWý­aš˜,}ÿ”ÜîÝýÝPóµ›ç™‘ûûÖPk÷ú»Ó)‘äàƒ`öܽsãe†xÐÝÚP]T,¨Ð”4×QãÛ—J6;®ÙzÕw$DG¿/âXŠ .&&JJ!ì±Ç;ZX e7¡¿ïx ‰Ï9ÃIdS_IM/â[?錴‰«MÀCfÈÜ –Yßs¼º2¿¬†Öv„¢5 — %a–°–}MNiå-?~„IŠ• ;øŽ¾¼Uûì óÁÞ°ÿ?g]ÉÞþèu=4ü¤¦Â0ÌéP»‡‰}ºÕÿ/_ˆžQ¶ýS~¡>3D£cþÀoè%´:[YOÛ‘GƒSQÌQUFªŠŠmHPÓ%-âÖ:eð÷ ðÃŒÇWñáÔ.­g[}ú,7º9®¶•êïjª§Ï7««[©§_Œ¯£ í™_? x!øé\¤lgMãðÀ8ëS25¼ÉEáÞø±ð²P¦¢À÷!Ÿ¥elK·TB˜†™ç—ŸZ^yÛòÔåú‡êzøó759)ÔY)³Â³,æ³d.ïÊæ¢/yB˜Ÿó{èo‚¢&ˆ& hÒû5ñ®cš&•üñŒÂô“ ÷|„§¥;è=œÀÿfPÝØÍÜni½þjʱwE9­‹öjÙ“+/¨ëG.„ÖÒš°À²MâÅîdU^~a.W|*¯E Æu[v:~åg˸ñnG‘Ä»·ö |žK€㜬¹GA_I-ì/-‡ãDW~"´ì?Ù$’h˸‘õ‡´›B[½¥Ê^Œ¢Ñ*4¢UG ðÏßU52gÚk•_‘çYXûúH‘¡Ù/‚Ù …•À +¶üm0ñ›uÊ^ÌùßUÕĹš™9.©Ç¼¼3ÇÄb]Z«=Gª–Zk‘ºûª(¨ jµ²”˜ö5»1„!ˆ2ŒÙÁ ]·b]°¢b£Ï>ß³r´ÏåÝá|éñMBÔ.§ïÏ™ï›ïw÷Þßï~ÓÀÞ®õ䈲¯ñFXÞT)‘'é&9{„$dCðAÿ¯¨Þ°ãâs+¦W£Ñzm%ÇÈäfôÕ:[~Düh}ÕÄ)$zû4EÅJM%Y¢L‹v7yúH‘´ô'ÃÆíÊoceÈÆÃd¡ÏiŒl^d­úOA ƦôØ´TBš¡^CEDë-)â‹êÐiýŒ·WérJÅ¥9ùÉQá»°À\­j65R°Zƒ¡Ft œo”iåâ²ô‰9ŒÉ÷QŸR÷î® Ë1xÈðþºü«\“µ¶í +L`‡íL#;®yÎ<ÔÒøt“¢µ…G+ëâzwéx„g/ qšŠÓÓÏ_ Ëñxîá›ãánC,Ø^3à fŸ ·ÿ&˜Áì£ñÙn~ÁxO,B‘'Ö0Æ6¤ZBNoéàš`̬§? öõ6×_ü–)è64RÉpAßQµU›Ÿ&÷Ý°’»SM ÿœàßåxïw©¸ãD§îtvý¯…‘›>"Œ0*2ÊP ì®9GòÙuîü’lÉ [Õ÷•…9JDæ (õ4Õ*U¼2Jž»VMÈ ›Æ—HÍêM¾Ëxß õ> Òû½ tl£·3:¦îA^Zí\§§råð/ÔækÁK-ðLÆrp”ç° 5kñæÃ×z:O>Ìw&·•ý U`&X¡ð©ñ¤±NTÐt°¬ËÀ}¡”áµÖÌ‚Âo õ#‘B‡;Ø=Ü=\†µi­ÊJ)±O¶'=ˆD ¸Ÿ&T/RÇH2Bt\ÔJ_–Ÿ¸WÝDhê4'Ÿ’PĹn +»ØQí}3ñ.—oz¶±‘C<ö/ÜŒBR4 +-A¢` Ñ› ka2¼Û! MæÞŠAâð¢Oßš‰Æ )S8› …Õ†`Lz‚F£xpN-ºèá sœïó`;{‡³À‚ 4ÔROoAžè¯q+cwšLYâ¯k)Þ– +½¡\üÀòð"¼NžßÕ±½FT·uMÉR +™dXßû½žÆßv÷;,É«Ì¥¡¼ÎŽŒ£ø +2¸Fù5j#uýÆV¿ðŒðÏbÅI‰_¨·QÁد“X]y®¤\,ø²&¢-°nóá¦ÀµÄ^ÌP]œZ.g|É­Ñ Ç¶õ¤"¾>{‹<#±}Έ˜¨5Å+(T(Ãú_F'Èx9ò*_é±Á•fiòø 7@òÃZFÐ× + Í¡%ŸI,ê} +FA(˜Fe3‚ŸnãüŽ.«/h\×p<ÛòÍ÷"AzE«+ÄL¾·à¨âœªUÓ”cÈ,È2‚¾By¬i'…þöñœih P éâïâ/ÄÌ!çoÜ°à À;žÎe.×ì÷<›÷BŒbÓ½oòþÔØõ§ÍâG†âs³ýãÂD¿XŸ¸’Zº‰9/Ž·å|w›„H—{õ¸WR™|x,ÍÝ„Âcx“TÂë°ÆÁW¥u-w‹ /9µ¸S†ÒÚÔ欔5¾IËg£äõH´V}a’k9u&sKA½Ñ‡F~NµWYÿ~;â=@úËh ÁguÀh&7y¼ …‰ÜµZÇÑD:vZU¦´¾ŽFŸ æ²é,udz[1;ÔôBZ1Óp¯Ðx±ˆ‹ F†×jlê‚ìÌ`ß´ `½ 't˜À†–±:o)†ÞsìöæžûÅ~”yÌTl3ùÖ9çxgļ8ð[vÀ`îA•ð€ÁTfµ÷î±]i»XPzÉiª‰2¼U}XS”›í°9`ë¼ðÁM·6ÛÓê +‹c‡ÉÇå»g”Fm{`{à‘ Û|¢2.?/•D˜Kmï:‹{ôåLç/Dsª‡ÏVsÆÙÉã,aŽü«±IE:ýMr˜ÄoôOŠDÕȵq·1g8Dˆü¥Ø…A?Ÿü…Äçëô“")p•Ù](‡Ù힇í0ã jæUy祦iTFVE‹’ðfuSÜAQYr|ñNꓬՑÒT")=;3‹Lµ¦——ZòEm%Ú¾¤:kãþ.ŽÅä;“‰õriì&2äøªÞ'[ÛD¦]e±*"ä¾Pž•*£¢™ÎæŠýM•âJó9kU1Á¿š]ÏòO@äþ¦dÏk7!÷.ÞFæ.OßœG$ã—ՆݫIÇy\ÒiË=E ø3˜ +^³þí—‘­ÓäˆgÆxïò2W0E‡¨ÇÝÜï >º8Ô ©W•šb¹ŒäK²/Àãÿ^íAM¥WÜ,†{wµQ¹½ÉÉõÕÝmë*­»«ÝßU‘± ¨<}$>gL~-NìünÞR8´YIŠy½J PÁ(|….ì¸ÂÍÅ¥™qy"pëçpOZ;Ývº§_•l']`OPæ†3ŽxÄô +z O¥)jªg/ +—&Áü­ª,µí$&Q<<ÍD®7¹Ž×ëQ;r¨œQ®®<Ããˆä·@´,<ÉrŒ€ˆ1/÷¢¿â‚£By2±ý½ðó +,ÖƒÅÐ jÕWèNðîìù“?½ð=šMóhôËÕk²¹ùt+ˆÅGL/‘GÓ‹5ùpW{ÿ›§À®™ƒŸ•I|f]ØmpÁ½ ¯6è5Õ(½¸ß.«½b±¢Öš:s-ÑÕ!ÛIlܬ2•¯2ÍU&½YgRVËlÂÚt]¬Fw,,:‘UËŠSŽðò¢´4½’}¾áªÑÁGO!ëšÊA¸pjhÍyyë~Ht·IM>'?ö +6ßľڂým‹ÛϽÇ&¶X -&‹Æä ÿŪc5ÑZÔf¦˜ÄÖwÂé7‚ú#>—’ØÔe±ìPF’¼T©Ë3å×d·g; +QlzYª4RP‡Ê T9Y¼°Ë;,ÈW/Ÿ¯³Dñ±—ã— +‰h™ÅVÛj³›ÈÒZS™ø¦]Ñ)¦HˆE/ï¯÷„lÝx8ñèïâ]#ýÎ>znÿö5îÚÿûÎzÊVOÖÙZM=„³K«h';ä™±¼è„U|μîùƒsbÂb\^`£çAæF1õ2¤Ö•ó¾-F>Õh>ašE"…4•W¡Ü@šÛ{kûtèpKÔv’Þóo“&$¸Òc’ˆŒï¿ö–¦ ;–$@9ôo!œ¿Ê–ÏÄK?6Ü¡øY„ yN³ óµÅ…|ìN|Nœ4^‚b“ÂùÔ‰KñôzTð?Ù¾/:¹®ILr†<ιQ§Â31.lÆžàØ£/t å6~ Ÿ3*©²DC(‹ËõrR©Ï×3 ô&…}›X}›FÀòU7›^ÏPÜÀPTÂÄCÑ„â +™¨(‹X»ñ`)XpwðnC‘ÝHr6Ã…áÁ×[G˜N>„õ‚phiih"¬Õ…r ‰ U©Y]‰6š«©zž-«U'âkg½¬Fý8« r…ø{9ëæòså6àÞ÷:xxœ!ÔÇÏm8'¾D|9vöÙHǶ2Öz¨­×ÕØ}öT§( ƒßdÐÖ+¯*)®Y’fï…lLºJfQ©Gx‰™‚˜[סº¦yòà>Åš‚¥¶"Àò>^]Q§‚³x÷žö'‘H*3N†i§÷ÇÝGnk**«øû”v¶Bš­’é É™‘_ŠÛ)ðM“Uâ3Í/Vá^ð<ñH|n"sÈ>E‚“H¼z›R‡Hµ9¡aS%fU!ï\I¸×Ül¬oçcÁ-pPVtbP³±5UöþJ«°#±:¶¸\UáäYŸè9?ÔìFmôñXÄî)V9X bÀ›^ ¬¿ ~öx«o¢y°\?ÈHÊM"¤O]£Õ+•Bnêúä_ ?JM|~쉢Ã`¬ÑdDs¤¹V¤+i Ëé¿ûr€Ü"þŽec:"W1ODùèÁ*÷ÀÆÎQÞ¾¯{gÀbú–o«÷Àíh÷´ý†ÑxQÉ;EöÀ¡i+Ö)‹Ò¸²mÉ+²v@•LsÀv¶w ýVüJÁZøc¨(l©4Ûô\ìlŸ‘MчEÈ¥"}©5,¤_ûrZ`Sð¥|*¡j]>8ØB¯+°ql¸Î½n(7Uº’îÐqšï››ž ¢ØÔÁ=¥e»T¨RˆP/Ò—í=\{ÕK¼O£¾u™ê¬bQ±¯¤Rÿd¼Lbš£8žŠ©@jÂÝ’6^¼¢Ô‚…DAA6´mÊN±-¥tß÷uJ ¥) )K¢RÐjUR\õà‚ M8iÌ7dHpJ \ËpŒ88äøê;P´ +f~DRûK/SštV7j°ª­ 9ï*~ªû‰Ÿ&å„)±1¦ˆ#C`žÂ2§”Þ°(g;Ž¬Áøy +g@Ïé‡U³¬BÕ1ª¦ûÇÉ ‘¡Ð2ë/tgœÃi§qš]E?¡àÜà,úè2!ùfk—ô 'AÈäwÀØ´ ¯óÒ©JŒ,¤Ä2È]Î?/8ŽF}§ÖÂáºù#qæâôDbŒ­ +‘ËúJo3+^5/°AUþaʨv]%L8ž³» õßÄÅS0auåi«kßQ  +á«ú÷ÿÇ.ž FÖ•Õ7ŒçY…¡Íp28Ì …Ð(kñ1·sŒãQ¹Í¨u{P›Óî6z4ÞaîÌekƒ¾^Ò"¨¬“Tk»)z±¾»•)Þ³Ë=¡óC£ì?˜`E§údA²éQ{­¡Êöë4Iš_¼¿Í‘u ‡uŽ6ù=M¯†Ñ?È÷õXnk¹-‚ªZYVBx¯®íÀ{©K >I2c† à>] endobj 67 0 obj [/Separation/All/DeviceGray<>] endobj 321 0 obj <>stream +H‰ŒWYsÛ8~ׯÀ#¹5‚ð®ry+vâÙMRI¬ª<ÄS[ŒD[\K”#R›dýö’qg£Ñýõ×o3güK­SYáÔ¾š}VÍìr1;»º1jÙ*«T»lfg¿C÷¾-ì¿ .îf°ÅÀ_ø‘Ê"§ÛÙ—àuÝvá< öáܦAý5Œ‚ü§±z­F‡.þ˜Ý<–ÍùùÙ«ew(7‹êGw~ýæúÚã...Ôåë+5Ktœã!‹Õ,Páâ?³7ï`Ôð±ê•²^)ËJð†/Á"œ»`]©pždÁ­‰²}肶ã>(YUhƒGîw¡5ÁŽÛ+вB}ÿÂ*³Ù…IðX7÷¼¢ä϶ìÖ,†o8‚zYndb‡}‘»åŒu)§WaüxÜ”uÓú©ªM÷¡uAÕ¢Ý6L×íTK4à<ÑXgnµãû>0 +ø¢e³‚]Ö8”N-P‰¼“’wìÄ;‘xGbûFM ƒŒG:ÁÆ°Æ_K”Qoja£à'ë†q‚’BÛÈŠщ©.Š”|È­Èå:Êb tjbÄQð€+„E‘Õ‰s1¬ÉtJ+ÏGQä}/¦+î¼ÒpÕŸ$Ã>y_°P”ÍÃÉ… + ÄXÉ‘ +_‚ßÂAÂwpY@øðF-åûöí§KiÞn݆âÒÈh“Ž\*¾B@ Žð"qÌJ×¼Wo:îÝÉõŽ< 7XrG£¡ÍQZü„ÁV‹Â. >¸Œ?ã¡ï&Áwîukæ_8ŸûP"ÁÚ"Òˆž![{ÏÝv[nÐP›Cƒ1¬I½©OÝÄÝ õSá›r’ÝŽd³D=Q<ü†âÃJ9|ἿéPcîb#?}‡x&”%Úx#rÙ[OÕòí íÞ@Ð^×÷ðÎâî?ÇQeušÇÏÂPÎkV²Úë4U¹ïíé%ê"õ÷|"ðÌ P¢xàUh#­Þ¡4€aŸMf¿ãv»f(`z…è°Î)F37%?šDf†µìãíã@]DÌ™ÑÑQÁïbä¬×CL=ÏÞ‰åà¿MH膙À ÷kB»>F‚$xgÿ8FÂ\¦‡‹—?ˆk#— +­a«ÝxnðXäaª`Jfzv»h†³»:貤% Ó)bÓ9gÚ!Àš²‚Ô@`bRfkÓ–Q=BGP†¿¬Î€…ËÒ·&„NíK™†· ÏðÝ„‡ú‡*Ï@y| O™qpØ”¢Kb'ãÒF]¿û ý<"rÉ€$qëE‹OrHçýU±Ûìè3¢, Æ9Ú]u—$KyT0¬+n÷ù"*žN/ÇÒ¢Z9²yËóõ (æùTòpCöÕµ°fZ›úÚ&n8ßyg´¿±,EX–yÒÎNÙ?;bÿÌ×<+"þ (\ŒQÇÕR«b¬„Í3È®-1Ãc¬×¦Øn¥N¤ü‹ÕDŽU•Z7N/ƒ_ËÖ»ƒ³]4 +oþÄñ+ IÄc (xØrH £c$î—.koCïXùÏÐ~ÈYˆµ0u}Á +k|CM´;lVÜÝÔ\5rox*¹ íëÒĽœ8èòH[ËÀW68K—zutÚàš„M`ö—Ð ,»•Zj×ò¶Q ¯º±ý²`` X(&ñ|˦$Û‚0XÝ$ýBïÙšŠÆt( NJ,ñHà(ÚújÐYªáC±qótFÛ±ždDºÚ°më§esQ`ŠE§8¼y‰ympÀȇ©»“ x )ý¾ÄK”<xXÉ>#@“î]wðÞ4òP‰^yÒA,P­äÉP M’1¥BcZ®¢M»“»Ãö5Û­›0Ã]»¬9tÊi£ç¡9\–!`HBcÚ¯—}Ñ….Z2*õ¡ïQ…/²zx“ÅÁ«Xµëßsh>_ðþ]ÖÙX]5ƒC½ôXvkjP†nf©7es~~öjÙO.ªÝùõ›ëkgŒ»¸¸P—¯¯<˜ÒT(ŸJÿ7ï`Ð(ükÕjb½&ýÛ0ñ§ "lp ©Øè—@Ità õ›þ9„DRéy.öU‡p$ŒŠç……àšž3ŸÚñ,%ü¦‡Ð‚Î7@ÕÁ?`Q£ºBÞ|6壱›Á‡fÈ%Ô^&õU;´¸6Au~>µ bCÞÇðůOœ|ûöÓe¿é¨zô´“£W†9N##ÝpÕÆ;ŒÆ§#šS¶àfíG'E{åGo“2îÍbvöaS.«Õ‡××êìÝ•a´}œ}›¨ˆTœä:Ï”-rµ¯fŸU3»\L‘×Ç@$/U£ ø£æFkàÉÊ?ì¢LG.Oœ`cpÙ\ö!Œ“ã6G«€†Èšß‘[åg°ún«ÈÜ…çž +(öŸŠOÐ)fŠA%S8%L® “úy¡ñ¢¤Ò~xILÈ),D-–Êj›«y¤£8gäí+2ü +ïÀ‹KÜ{#°æ\JuH¹Ä4ñÐö…^":ÓÖ é¼€ŠËZ«‹ØŨ_àŒÎ²\x!ŧÓÜ…38ë"·2Ç8Rè$Êd¤ 5€ƒ½¦ÿB©‰ú®bõNõþý¦¬ÌƒëtT$ Ž³ÚdàÁå–6ão†LÕ+y¬£(=0йùk„=ïJ+Šå\ªã"H¶lGì¸# ŽÞK¸¬‚Áo°‚ðEΩÐÖÆH08Y=ŽPYBÂìG+öÙ Úb`ÉIèûŽ¤Õ»ÆGØÇ™cŽ h- Üäb õ"Ðê}~‚›¦ÆßÛà“,@ªñ—¤\Y² J(°„ù[S1Ð’ÓŸ\c1LopN#g„Œ1½WཤvI¸õÎóïo~hæðÖâo+=¼tëñI …\¢ì’d}Uúˆý×:ŽðJ7]BÒ6UNòìP•- Õú¥ÕÂn‡ÊÚ•™¢áM;¨*-=úþ ’ö!ùþrÌ'h)ÓC U¨‘”i]LÓAÄ2-$ÝŠ%®ó±Å'#•ú±Ã3­íQú¬.j20òr䨠¿/°½IËè«…ªÏŠ &´\FQé÷w9jÛÒ ]뿱n®=N1HèK4 ê +·ë +å GÇZÀOõ¾· î­ð&Ê^ÎåueÇŸóáa8(Ótuy·L2%pCnL¼¶¼£ê/Øéë1¦e¶Lk¥×Uûo¼Äž)e¹opKm­sïóì6J–­‰«Ý¡|Ýs›æ% T™¨„ì6ßï+oø–^"ííkó~ºŒçý;ïË°ÖÆ {ƒ²T_’¥Þ­(SZ£0Q*æþ¼ò?&í½ŒWÄkóá·.‚Æð£VeÌArX=b§³ž–i¼Ëú{%)‰·ê˜å+’¦òuÞöµÈႧnB[A­˜ù#…>^bÏÍ¡æåh{±p–žkgÛx7:SÿýMF¢rié’å†ÁUF$¾üïÏßþqùÏëgþëq‚’a„­ÝÂå›ÔÄåGZŠ2È,·ùço,±”×W£\:Ûë“·ßÂím/ÿ•¿ÇËý™‡•òýyãíÓî¼?^Ö¸._Ð'ú?o»ó/7©¶•½¶àKO{à/÷Gž,ìënÀµóåJÖf÷óLoݺöβ(®%ì/+™Ý53òî]yòÞå¾²¯hLø'ö7ôc¥»áÖÆeÜ ”„c¯Ü ¸vž!Éé«¥Wî…[—{GRWš³J¯Û´v]¡6ÌúŽ÷Lž*’mì<ãÚ´vÝ€Jª›¹ƒû€Ã>O…‰#tåe¶Še«Zm÷N¶ëν`kß R­ÉÁaßw®B¡“GbïÛ´v]!†Ð\„aoܺöÎЗ!K’±!B$îÎÄ‘wGèÊ{ +ÀR0ûN¢Ĺnm˜mÓÞݦâÅ ·6ž¡dÞ:ú ÆcÎP?àÚ9AÍÁ„Û+÷­3`¼ÙŸFâîLIw„®¼çÒ¨Ò¤UJ‡å†qÖ\¼:åÖÆ#´V6{ôëS±7î…[OÀ…ö6è)¦sOèÚ{[ܾ~Ìí­»×Î+Žùüsn¯Ü ·6Þ g¬¤¥!B0&ݺò^"¤ à!¯~ѵ÷‘(;ÇÞºpí¼@@®Î^f830ú€Ö® d÷<‡>+Íý€kç µÄ$Qƒ?!÷¦áÀ¸lå›PL´Õš_Ÿ„W§ÜÚ8B®åÐöü”¹Ü ·6žå½5í<îûöüh±¼#Uü€kç±1¹l{ëŽÐµw†@¡m^ä ÆÝÉ8òî]{oÐ0áùÓ±—î…[¯*˳çÇ«Wpí<åeØ3u`•Kî~<“ç§r‰ƒrÁGø×®5ñV.åéŽÐ•wŽZŠçÏÆ«Snm¡•’]c/ݺöž% ·*æ¨hÜ›Œã. µk©Ú¢ƒ!·÷í\;g(9äó'b¯Ü ·2ÞäÅå¼÷‡W¿èÚ;R9y&öÂ=0kÓ’‚Hé‚¡4äOˆÃÝy8î]{/иîmÏ…âîTyw„®½Wà²óðÿP(îÍÄs'ØÚwƒ1<{Û. {×$k¢6æWd¹+tí=AN¥ÉAÔ@ÆÜsVK/ܳ6][Ei̼L·=w|*“ÜUË3w~*“8(|d/ìå¹LÊ¡kïUÖign{ã. µkiHùÇEöÆ¡+ï13îmÐ×Ïcí®-—'û³ÅºöŽË£›múõ³m/Ý ·6žñæuâ\qî„ZÛ&ÈÄòÌ + g­Cqo&„»×ÎYÞ*cíV æŽù×[?óÑÎrGèÊ;ˆ-òù3ñê”[GE^>°\žª¥OÅ£ÊÜ ·6ž Å’] ¹½tGèÚ{Z©îëÑž½<±ó;¿±óC–iôt/ÜÚxJr›£¥!B*îŽÅ‘s?äÚzƒbÚlÒ£æÜ݃îȹne\Ž DrmÝ,¾~нz×ÎH2Y,tèT;"×Ö &éÑ*w;®éÌÁØkw„®½´Ì´5{ëe`Ü´vÍr¡hÍÅÛw„®¼çT,—wœEï(s7ÜÚ8BI‰vÿ¿}fnñ®gH­´“‡bïÛ´vMB[ÑEöÆ¡kï 1¶rþDì¥{áÖÆ4|AŠPò™‡Û^º#tå½DàœâɃñêZ»NPƒ<ê!{ãŽÐµ÷…ˆÏŸŠ½t/ÜÚx…ŒŒ·½r7àÚ¹I ùä¡Øûv­\Ó²L¬.âðê]{O¢T 5¢9möÊ}PkÛ¸–¥9eÞ +Xz|*•ÜUÌ3z~Bt|d/ìå¹TÊÊ¡kï5ÕzòP컀֮YîlÍEöÂý+ëU^¥˜Î?Ù^rkã ‘ ¶½r7àÚ¹³äÕ¹#±÷íZ»&™­(¹ˆÃÞ¸#tí½B LçOÄ^ºnm¼A¥åà—›\iÈŸˆ»q$ݺòÎHN¢“ãÕ#´vdÅT\Dboܺö^ •Â›ÃÖ×ÇboÝ ¸v^cÅÓ£—wL1ØçjÝúÍûß¾ÿ—ï?þòãûß¾K (Ëb½Ä ~:›ÇË_/+„û¿Ï>œJ¾?l||†óê1€ *-˜â¥`Yð߯¿³ ìhÒמ„“¬2¡®Ò!ðO8ìàðBluÆÚ RhÛtjªëòcnÅ'‘Éä3VŸäk@ëpØ¢!OÊ>5n´ôY” 8ØWémæ±9ÙYN¦9kõI¾ Ó@CHdÈK—M>kõ¶#é=™}V—h“]zM"ôVŸ¬r·”„^[ƒÄB1Ë/ ½ÃÆê³€|»‡­.I_Œòl1Õ'ÅR­a}p9n¬ ™-@kõY@¼ø@ΆÀˆ¦@kñY¾,±œÑ«|²|¨¦ÀšÌãÃZ}n³ã* ªh\>ÞÞacõY@–1K —l” !3­Õ'åÉPÛ`‹3$²Î‘ò2Á€Öê³€’9¶8C!+å”.æ)l­> (ÛÒ`‹ `²j 3§­Õg Ð2*­ƒ¸BÄdâkÏâU(HëSšàµ·”^ñW¥‡M>cñY>xxpˆ³Ö!R7ü—"oâå(5»K÷YÍ8DÌ곟åKãà~%|…šy†;`¬Õg3´:ôÇ1šþ8ØÇ‹ÏâÑ2¬¯â(ƒ~´n!yòL>cõY@y[«ƒ1PúÓò'GðŸ±ø$_‘'K4°ÄC³ dß1­Õg2.[XÉš£³ìŸ9eY«Ïf¹On[x» +‡˜Ì´VŸ$Nl±ÌHh1S–µú, ÜxÃè.Çò'+ ä @cõYÀ&ŸÅƒ1å¢c›c µú$àÿ©/—$NJνŠÚ@!2ü®ÇžxÿÓ‡”TÉ$.AUõksàhK%A‡¿ =«Ã6j Ù]Ó°GPp/Ÿ®ªn¹À®6 +}-0f¢{µŒ²qmé[‘3È°ú8Qp/_%‰Æ±5ø:Ú#úÝ‚3 ¢{5‹Õ8¶ô­Â 2¬{á­‰¢;kÔmo˜µX1`ËE÷2õ÷Íš¾Õ3vú=`@Ý ˜tÛm¦—b ¨GÅoÝ X´ÎŒsK¥ 7’§ Šîl”Z5R¬€¹U]„+¢;[Pöw¹òeF%¨¿ÀЭ‚à^ îåÓ2ÊlXA¦Üðe‚V÷òJ1N©Ák$S,¨‡at/`Óà ʲ‡wÇ©At'`Ô£R¬{NCœaÜÃ0ºPGqïFŠ5Dé°6¨ Šî”ñ[fŠS@Sp¼†MŒ¢{U6L/wù:<çPp/^Õ9’ /(T*:F +Ý®Q÷òu5Äv ·!g\€ ºõ¢ †M-o4uÂeF| ¸O(Öhä7©KBõWÔëCýPt/ .*±®9츛ÀFѽ€ú#]Œ « €¶ŠîlTs1Œ`zÜ“vŠ;žÑ(ºP¿Yônµ3¬ÁJ¡‚(ºPÍ^µÎ9l¤X¼@>Ü˧YŠf†Ë_NE÷ê¤ Ö5§N9à ó ˆîlJ6¬¾Îˆ€Æt¥·0 +îåëÔ¹F0Ÿ 3œq£èNÀÕÌ5ÃǨUf4«¾†Fѽ€jV²uÌe}«€ k±“Aѽ€ +ÅLñbÈì6¬ ˆî¬$Õ:çîFÓNq;š2(º°K6¼ A<¹€b;ñr¤ÐÍìa~¥A'‚{ñ˜z †T¾„ë/ã-‡¢{5¶N9=5"NpfX(º°èª5T>¸…•¯Ã%‚{ñô7’uÊ)ßA‚ î_Ý X‚ºåjXý¢ä+Dѽ€<¬ˆá°v˜áš ‚(º0©Ù †T—Ô3„#÷òåqñ>P¯Ý‚g`«8à ºpX‘df8dT»öÒ(º°SÖ1—MjeXs„€ :×ak¤\«‘bu ‚\‚è„5ˆ¢{…’Ø{¸eauyf÷òeõ"lúÀV¬¸GPt/à¸ÅðºG TÀŽѽ€}@‹MA¡Ž{Ew¶@­YלRœÔé@Qt/ ë²êfŠ90¬PAÝ ˜¨Ä`zAÎhëcèµPt/ .‹j.b‰¨G”¯Á)‚ŸÄÓ¥ˆ,#ŒSã˧¼¾!5h_ª¬,êT›ç7nÔŸ•RB“G*kßèÃI+<§µÜnÇ[„ñË°üz>èX«Y€}:vàµL¡„¤;P/©Ô’D¡ =C<—‹çþ|]xÒó^#Ø3ýÿÜXƒ’)Fu&MôAb\.=(£8殦¦¥±9Þ3'Ÿ÷†¸ 2Š0èT"mÁÖùÕå²·So?ãÁ¯M©ÙòVÙ…Ô©÷”„çÑ,TSc2RsïÞ*éÕš=ŸåàqíŸXl²ãºiú±b÷¶Ãqh;ëˆKd +±é¾ýž|hüTàþþkxmþüù°¢k?X_9ºwTØù‹3{9§Ù< ¶^É’$‡D<î—#­£¸ôižl–ÉúõY–ƒŽwµQF3EÏtj­YpØL/f=¯êžEÆá½;¶ËÿØ„ßØ™'µëXCE«ždÙÃ;•ìÐÒŽÁZhÍ‹¢ÏÜ$g gaŠ)YÊ®)/+v/…Í|åênX6þeÕ¦iizN·©dÅëV›z2cF8qSdé”ûh•Ù§o/.$éÖŽYN¹Ì8ù§ôCÛê³ÈZÔﮪ{˜u3N'Qñt£ý##{¥V£WXvS¾3Ø^_”ÒõgõYæ«4||jHt­è?ãb¸ýó|õ÷ˆs~þ5j߶ç7ï¯Âýc·ÿÕ÷‡P·ï¬>ãÝíþ2<¾n1~"^ê!þÙf ¶tÚH=ÿ4zöêIðYóq»ê‡çqÿ€ç;|:ߟ߼¿zÂ÷çCaø´‚†êBŸuOT$—ÃF]× |]Â÷eͼÐû²bêÇ* ·Jý*ܳâEcê½tÐ¥gÀãŠ<¾ÐãÏj~òYõFjH÷\˺IyŸ6ðe ïlÒò± +¸‚g×|¹ú¤{ ÄËQÍl‡âO¶éf0fO©_{Ö›)´Ø—Ñ&€ àXFâ©ó+¡Ïº õ¤‡Å©ÙÙ=ã7V_{Ö;S %ï\iÈtÁeäŠþedÕù…ÐgÝ+•¢ÝÃ,Ô"çÿ² Øê~!ôY÷NYB<ô»x8þèFr¤—ážï‘ô¿|n4º\W4º”]—«Ð/D>«.Z&Üë›Ý] °·” Ùµd¿ú¬{¦s<4_'œ€s)ùÍ€±O¯„>ë^¨×šÎõêv'­zÕ3WúÎ.½ +ö¬w£&½~p*㘯/À† ø)ßx%ô­î)视 8ð^Üüº&ö¬7S.’—Ñù7’g—àWážO”XêÑHÄ¥òííÿV‘_‡|V½·rò¦síþ¯ëßý–ê×!ŸUoS“Ã.=±ŠœðþUdÉ~!ôI÷(ÄPNZÝÿ‚{¹ú¬{¤Vc?,š?_…{V\¨ŽŸ:0Ò|u`8»tuc¤7Ì…ÈgÕ3å®=Â¥iJK±šT ü®`à +Ä¥”PÉXóåBè³î•R.ýäpt™6ŠfšK÷ ¡Ïºw’Øøƒ³P }Eó»á}õ~!ôIwÖ8-æK˜_×EŸu +‰›ɨÿÓå½¢Ùó¼ëöÈß)öËpÏŠ'êAø°\Öä²!ÿöZ’wD¿ú¬{¡Z4ÐOŽÇ7àß*ö ¡Ïº7*\Û9÷ëÚJî×ï ß~!òIu #h<Ùªøèð• ::\Õ~%ôYw&É1}pÍÔ“8á·E³‚÷ì¥òÝsîYñD¥ž,—?ï`.Ã=+^(Ôr¸¶Ä¿<»¿ö¬w¥.%]Âvm5¿ú¬{§Úk=yclQz>}¬¾¡û…Ð'ÝS¤R¾9ÿˆO¿ø¬¹PfýðÑt\›Ý²_OǸñ5£9 Ë>¹T¿ú¬{&iÃàƒOx]ß¼.{®£ ‘ϪWbýÔQ§®ÙñVZy™ýÔ—K’$¹ D¯Ò'€~@r=K™iÓw˜Õèþ[yVõG x 3K¦álÚº§Êó¥G`+åP±ïC¾º>ESG£Ú@'aRþäÙöÐß[’iÓî:õ8Ïz`?4ê9øæ ðS›ÖÈ€Ù{õ;Ë(i>øhŒ ¡:ß }õ½ŠM £» ðD“F.¼·‡Ë6Ü«ã& ÿ½yû³äýmÇwá^ÇþQ›·‡ŸŠö,9ëÎPH߆{qÜ’ä>ò—F®Vÿ+aq'ôÕ÷,Zf{r*ž+¦¾_IÑ„ÆËNè«ïURÒñæl|ûÄxe¬ï„¾úÞdXÕoy)S_LïMÈ—Lß…{u¼KÏVïŒçC=0â!À¹‹vÁ^ýžÒÆè·íYŸ ×C©èov¯P|Ù }ñ½Cô¡š‹Jns…UÌe PgågÇ¢Së;¡¯¾c ªÞ6*¼WgmÔ8¼žç›`¯~7Ñžû›±Ë®Šå&v±3#´DwB_}ï’J{o]†.uB×—M—mÀWχŒÙË›Q÷*ÐÔO^¡ï½8>ðSínVŸ‹W9—ÎEÖŸ¡q¾ ÷êxËwÝ™Øå„ývw–#y9¾ ÷êx…hFwšJª³¼s/ãÖÍb#1”ÐwB_}7)µØ›èlû>ä«ëCrjóÉ]™Œt½·á^ŸI’üdÌýÿ§–m¸WÇUfv[+Ϭ£Æ"]Gžé¡¯¾éSÑ£6ð¨f¯­£÷zô•5º ÷êxkå6wñ˜ûö&z%¡oD¾ºÞ¥)~ì wQ°Iß^£;¡¯¾O)Ýƹëlû>äg×[RÉeêß?ü¹)÷êxMZo›ôŒÌÈõ€®¿Ù5 +ßB¦o„¾ú^eš¢KM%!|Eø:”ÌÚ¦_”·B_}7¹¢S Z¶Íµh.Ãã0—¥‘³úêû­î°•Î¶ïC¾¸®IZíýÉö?½6BûtîÕñ,}"‹%œ2ß|õ¼Jî¹¹^(šW‚ËNè«ïMfÎý¹ñ` ÜÉ.»`¯~wéã~!ñc¤¿Ñ5šBwèFä«ëS¬6´¨á°«³xðù@]NðÇÑkÑÃh,Gø²}#ôÅ÷¦ÒÒèO͹Oß»éì…Z߆{u¼H±ùæ.ª‡j‰e€Jº4´F7"ÿtý|Oßþøöoßÿø×}„_) ÛYó”iíP>&ŒöׇBúñ ÿŒþrî_7ß“¨µy© I†A߶&‚ÿþù×!:2ƒcÒA¸,)ãC.᲌Ÿlù—¿~Ó¨uL{ÂÕyOWdŒym¾Vyü¯|zâÃßñµQ>¢äkÒ›Žk>“<‰}(ü2)âu1­z×e¶BŸw£|D=È7¥v«×|CR1ÂW1­åcêÿtßC1tÌyß)ZšÛ»øb‚Gµƒx'æ¼~œ$i£õ—2}_¦lŸ·Ø%àg˜tû€3ÑþeêQ@û<\Àž•8Xi2õ(àøˆù—|ïÃ46·ÒõAăx3!÷âñYê´ƒÓ ©Gógt¼,’{&x;b˜z°JqñÆÇ÷ð–¡x®v;¬¨ó¼x¾Éñ:ß¿L= +ˆ-1±&Àfl6d¿J‰z¿Ùœ„–¾&€&µÑÍÔc€5á³Ô id¸‹fVT;Š‡!Ö‡óÀ ·Ã¯ˆuÞÀÀ«lºPi¤ÓqOפÕä¾îPöºë…½.U„”×5ÑDôí~£êQÀ)Ùª³à ã‹ NÔÊU*bJvb|Sñ(_Æó2`G†f%ˆ^i 2õ( î´–œF)©ÀŠç£=ÌÄ£|&]3 |ݘ´‰zpHëÅ}áÏ3ÃE) QâÔ¨¥9)`DZxb¨z0KžÝIYøþ™ÖÎRUV¸p7AØŒAÊ2ŽçjGá —¢wÄM±¿Ü[V0ø‡·>ÑŽâuÃ;ápàTv"Ù£ø) QÎ ìðÍ›×啉ñŠâL3'ãc² >Ó„ÀÄ£|Eªy pb6°æ½KÐT= +ØÐ^„½R@ãHÕ°7€ê³8!öIñǃL=ˆ!×¼+nþpèzÂdIF÷ÕŽáÕ$S«ûÀŸþx-‚åÐhSõ N‰Þ¯Ÿ ¤› ˜ÑB´‡™z9©Ìë1@ŽgÊý#ÚQ<¬ä„4àvƒÀœA3>ò 08wøLôÇä'Óâ5¼`nîëZû5_ʉ¯ÓŽâáÇš¹¯ÛëŠöœ¨GqÆêõߘ¬=ªäAÛƒˆGñ w„^ÇpðÍÁ`EB¤ÝÁÔ£€CFuRZyÌ×B[§©;Ö„7ÿ¯¹ýxbôy‰t.K{„d‡®æ_'æÅ®2 +í_¦D eçÊú¬¤›¤DO$¦Ä%;¦ÓÀøþCoé|fêQÀ!Ú¼ˆ ZØ‘‰ùaÜA¢¸3´: .ËlâÆå ©GñYÝ ERæV£3©G žÑ»âÊ'¼ž1MŒW ÓŽâ5is8 ¼Æ{¸WþÀD= +ØñHÞ‰ÑÉ`áõ(à”’‹“ò‹TmÔÁÇÁ‰zpªèðR R<ï9éaâQ>´iõb B¼±)m¢9S@¢¬2Ót_¸Ó+K¢Ò)ÍÔ£€/Çà̘,H›ðaâQ¾!VÔyaùĆŒ!¨Ò!ÃÔc€-%Á;x|ªlËrãcâQ¼,¥™“‡ųÉêŠGùÀ ^DŒ«,çÛÇ33@¢4IÝÉCèס´ìàŽÁ_×—ŽÂu™5¹¯;ç$Ý>cóªG§Œ”çE +­ÏKÂä§Ä3 +,’Qg8·ú©€Y~ÝÛÐ.QÏ`…½¹V¹¹¯«ÜßÜ]\]»¿J>p»õ$ Xgœ•m÷9ËRçë_.þ¼¹Þ:ë7Ÿ·Îon·—ò§Ûz»ùjû—ëo/$'ºìåë×?>yç›þ®o®›ÈÆp÷k×<ˆ³5mQݬÔ>Ã¥zä$œqßúÇT(¤rÊídƒ ¤c·‹$è]Xý›wo»‹«ï?ýpsûã÷_ÿ®»z÷Öuo¾–‹Òœæ7j¤Â†ˆŸ +Éf”Q½.I:mßVÿ¼ ™’Ä¡*ÚQ’¾•}”½ø|{ñ§îîñ¶Ç]ÇÙzWé.­±ÒsÝîe™œŒU_,Z¼nÃó_¼Ž$VkÏOx^¡5^?³áDÕ+”=ÍÃù„vŸ1˜OÀÕÐ'ð¼OJ¬I^½X½øüjŒGŒ§ +¼ GŒ§c8b¼ §cJÖPI§Æš‚tÞÁãù„vj]Ãx³/Áu^±¼°¾pÄx]§ÄšÙiñÒêWÏðÄp§$¼,Õu€õÅ#†Rž«á)χ•Xó¼O`Õï„GŒ¥¥UÚm²†JŠ@‰nZ槼®Ó0œ"°ê‹E‹×mªßuOEž¥°ryXßÀú¬?GùB‰°¾xÄPŠ`Ǧ°ó´§².rCÊ#R^Önt†,g AG w ‚oÚlkJWs¤æHX”/1Žýb5”áÉï„%_ÀYFÌ6šíêM×j‚bÓÆ À8ÓM-x} Æó¼ã¹’GÀéW‰_€X'Çê“NÇx“ƒr61•4E|òì°KÓ㨠+Ÿ†µ¾êÈŠÀ«/1àÔÀËk`]W_<âè YÎ@Īáu}ر)ìüñ©¼ µå†•G¬|DmÑfb²DÓ/ £áÕ®ó4]ª»ƒŽñjÌž¥°r‰\ßàú®ï#\yñˆ­Î&ðBêxuㆠœML%Mû“‰ýSħòªOè„>gb¬®ÃËJüÄ:ëVí:(Zvl +;?A{*ë)7¤<"ååºâe(%€Ñª‹­ë ž¥°ryXßÀú¬?7éÂÅ^¶ÑähWo¶–˜bÓ1ÄŒ ´<,bKÇÄq‰¸©ü‘ +v÷ 4 g¿€F²`¼òjžT‹@Ì`ŠÀ¢ÅÓ/T}'F²F¶Åàýð/õaȦÃûbËP +ù$¶à\·»Ý™ìj%†×úŒlÝþª|-ïnÞïÚª?1|£­Äð^*D©û8J.l,yö`lü ükÜI@âŒ÷䀈ú…¸ôZž&~¾SÎs{\¤©Î Üó˜˜Û?yfxVUÔ“ä‹–˜`óQÀp2†37v´~óı%Žcâ¸DÜhEn÷ ±ûñ Ç3±cìÇϧò¹Ïåæç_WÛ)ÎÕ{>™”ËšªÕÐëy“ç¿F\z}œ]^´(?•ÔûéååžÌÏ¿wùwþ#«gËÛìååËãë]šÅõ×¾I±<.Iš~¿¢žØ«?DÍ(¦œZÄ|˜øÝkò¨õ¶G¥«¾·•l~8¢“#Ô3eö¹³¾-W´¼¢åmÿSôÖÔö|þÅ›8ÉB)äÐ >Ê»9mûh'Ñ°ôùÛ{#GR5?üÛ)°h‡úê‹• P´ê™+GßÝšäçhá.M‰¼n7u­‰uM¬÷ÌÀî€×&áˆÁr‚•œ´Ö[X®`yËÁH´`Ë8xòŽ(zÕ(¤Øø†ÑkLÑ[Ó'$†;/kÞBöL™ýv±<ŎÛ:<ãm¼SªXâ d¡rKߣ¼›fØGÛÔ‹Î x<1OìÈœ³ûí¸]žxŒŒwÊá•J8bÄÑ+#ðŽ"<ÿJr$9E b8••œ´ªðɆNÌ(¦Ü”÷pu¯†g†Q|îÃjRìN|ËPCš:°@ƒ‹8b¬,Y(…ÜòïQÖÍ0Û§íXÈÿ“w¡n",懲dÑ ®köÂiŒW½Q6¤1VN`e0^F`é›ING_ÀD ž¼cJ45 +)v'¾¡+°2¯G`éËJNZ°g‹`¬£/~‡º™*ð¶š:GæœÝÏ»ŸqàVÚ6<ÿ‚ÝBp«Íeó@‡G ¶ã° nâ°Ü8mxŽÀš8,ÿ:¬þ EËJNZF8[5CÖ¯2$G’S‘; ͺƒvtÇjÿF²èˆƒ'ïXqˆÁ<Œç8bÄ‹)zkÖ‡Ãi v ©¥ý(‚#˼®†·çàˆ±<Œ—x{NYÉIë@ê`®py…ËÛ¡æ²y¤âu€‚ÑÂÅbqGÓ/‚ÁN ¼Òã™2ûŒ±ãý‹æÄTƒ#V£b÷ô†9T…ñbìöŒB2 /…Ñ$s0ž!ñŠÜÞðFÙ¼ô&®çN*bYKEü@“—…RÈ­îs”wSß}´£¯OÞq÷2|;«gÊì3FÆÚÌX´bF1åæ´N÷n>ÜŒ-ÀôMŽ$§ˆ£/Ö´å.Þ^ƒrX6`ÑBu^,ß‚Ñ–‹lK檕ßõF[ŽOͱ<þóí{ +–çU)™]ž*öãçSùÜçòaÓó¯¿ÿr™„4'¤+ÃáòJ uaQ"ûù—Þ~Èók¿½üèIÊ_ÞáÉüü«—ç¿R¿>[Þg//__?éúÓüK–wÔj,‹F’¦ßµ6œ(†¢@Œ¹ˆ©üñ7Éõ7>ø&ÓË7™V“’ V ÏNŠXñž•u&öñÝVî[ˆÛ %’E'8Ï-Å©¦ñQÞwh}Îõ½¼ãAô•\b3Åñ•—k^^óòÇúÞÒ¿b‘œyÅ™8ØÆëïCâþã%žÆÉB«axvŸ¼í™ƒ b¨ Tr$I®A»¼ïˆ*¶æÀíÓ·Ý.á.$¸½ŒçF +W¦Ø)qSà¥p:’œºßðæÀ<¨MW}°ŽP¼M§>7Ü{J^¸=‡·5ð2Oã¤3çMb­‰uM¬[Ä·,ñX'âI‡Ä€«.%F]Ý6 °ÄE‚E,XÞ‹1À²ƒT&«œ#Š¾$9u/g7œ:,›#³ò"}§¯®Ã¹B§›1q>‰¯N<‰Ñæ‘ÍÆb‘œùÖMwÂlÃ#tET +Ž6àŽÍx4ãµ#‚‘ãÜØwñNï@ŒV‚Má"Yt‚³<40Yhí磖؄Ýgˆæ¦Ã3\+ÆklxÛ/&ð&ÐDZ¼ÆÅ DŒ7ycÝ¡Ã^ÐPVŸˆ¬g40àfNJ1óöÖКX×ĺE\)¿ÓË·;BâjñÙ§Øòñ•—k^^óòVJ|éç`°FŽsãȨöÅN/Ü¡ÃEXO_°ô…›8¼Þ.æȬ¼‡x´´þ-ÂyŠ± |¾`<æà¢B}"n”µs* h +cÕ5¨kïòÄkÃH†³ÖoÖðœ‹ÖÏð$FlLNµÑ_Þ»0zÓÂEbŽÌÊ‹`;ÖÎ@¼áà2bìå¾µÇÈqnWÞý-Œe¼£ŽoËá•a8`¨ÀÛpUìÔ´Ýh×…Ťv!NlZûLZ–µ›þ|ûžæ*·<­Fê—§ŸÊgýøùT>ö¹|Öôüëï*Øõ%ØÌ—Xk¡×äÉÎ + ”Cçõ‡ìò¢Åü£'ñ~zy‡/dó‡_þÿÊêYÊþåÕ—‡×Ïyùaþ ×_û&Äò¸$iúý¯êSžm—Ê_R+6w‘ïÆæѯ±9$J¹LJƒöCR“jEª+RÝ&uLÁGÙÔu÷Ø{IÄ,q“ø< Æ bPSÆJNB öFÙ^ÁrË+XÞ!­;hwÚ{´7Ý©¬KÍh8áîôeÝ8mi|ååš—×¼<}옂Mb>¬qoW(Ïé¶mŠÏI|p}´P4 #V6¸åUÙ 1š‡•jßÐøÊË5/¯y¹R¸ûÒ¸,æÜ[ß[#é 8qx›Ù+eõ¼áˆ½;ccchŪ+V¶6†zOâ´¥íɼ‹ØxЦ +Íð¶b@ÓÌÃaÜC_Àî0tí¢«¤Kz5'ìV-熣-Øf£Ur;δÏÙ¶Âå +—W¸çƒsvyÇûÞ͉R´Æ1±¼ïˆ*¶æ’ˆq\ÇiÇ"6¨ØÅs\ÑÁó0XªAmcÄÚ{™¸ÜÛ¿_yÏaÕ_8yÇÒ¸CñI—¥Ñ >£Æ€Á†µ˜áVØ%Ù¶sXkb]ëñ:ÙöhüÑâÀó0ҪÂ…J¼aF1åÔ"æÃnxW㣠+?LúbùoWHÄ,͆öª°ÔIJ&–iË¿·ÌA#ÆkÁ€®€K6¼kN½RVÏY¼Wá=§«®XuzÀ=ç=‰ÓÖæ8Ýž­§¯`&- 9Ë·€‚•ÜŽúû¹A«p÷oa]¼ó/V<ŒÊÐQÛ äƒØæ´Åš6®iã´1m•£wfÙ25ïë{!ÞÎ^­‰uM¬Çˆ÷(üXÄPfG%ƒ=F>àí7•@ÌÒØo•äöË&¹mÂûœBxüÌ €uŽà#d™T6¾ÕIË\‚–I[ææEö³èÏ­žžž’˜kb¾ôÜ°e‡DÃîoH ×!Äͧ½‰¿µÆpYqnŽ7‡Jb]‡vTÙŽ®R°JÅ*}]#oµéÛwÖáƳ»¶p=ë*” `)†¥mBk“€i†³)`Ho +¨ã8oàÖ>ûÐwxÊúx„÷ÎÆkçç´»Æ8‰†Ö Ñ:^ÓÁË<ÅÊ:[”©Cêâ掖ööï·¾- ü ˜hP­p+Ÿúîª/X«d!Í’f1”°6N»$¿þûã¿À4}ó÷Er¢Ìß~Éúùë%?õ5?êòúû_•ìÒ¢ƒRÒ+äúÉ%“› _$“%¦/³˜Ö^ÞÞa)Ú‰bùwú+Åøëw)YûöãËëë“®_M¿dyG©Åò:kÄáòçÓfŠÎLüBªÎÞoV~´YÅ·Ï2VŸeú,ýýÏ2b)Znºýè­ø™ØĽ[ÑßÍzqŒ:¹M\l§A¯s|Oã1âv_QŠj€4æÄ|jùx-o—vÌÃÏB)ÄfF¬Mˆ[´kYŸgÒ¼e¯8“†— â-YÓrʼn9Ì××î®Øp+ù+ƒõ=·ÆÙÏÞÝ•TRèKI,5±ôˆ å=Ѿp9:RûćÉ`œ‰Ã!Eœ44ßæ¯Odc«µă?€Ø2%¶M¯ž9s»ñlH ç +œT"…»„ðò—C$ H¦1«‹6ò÷®ð–¬imŒ#v5±†’iºb‹6«“¸Ý,á³çÄ8Š®IºK>|»=ãLâõ¡÷…¼Rñʈ¶€"RŠí|Àmá<×ÜoGÛ§#öwÞÖH†4E‡¤±RTä +ÄÍŒç +¸ÉÌc¦Äí<ÞCã1W´}Ì|ê5ÌQ…»þÚ†Ô.Ùð:G%•Ô×XJb©‰¥G\\$ƒ/WÏsh ÖäS¤›»n Úµ¬M'J¦é„ƒéŠæ¨Ý†×ÚÁôÅë¿LâµÑ—í²Fábƒ5‰¥ –ŠX†ˆÑ;Þ‡×(9âtºâÌbdGÀ4JÈh«£[cudkŒy·¥-Z«„qÔm–`P´€Ý7*©¤~Ë‘’Xjb¹t6D‘mƒÄK~>Á´Áé 6q6RŠM7œ ò›å¯RTƒä¼†"I8‰÷$Ûq8Mïf;÷ÛÙØQ§Í2%n{wm¿6m@Ú6¸-Œ— xãí·¨¤’B—XJb©‰¥G\4‹A—öò,®@ê¿â<×j•‡£ÅÛpwnŽs;?1Cœ \×'’!MÑá‹·dMsß‘Ø2Ú"^r|Í仢éã¯]¢x[/ÝÄ'²Ñ7Ò­pÅ Æû»‚£#µ±ß„Ž“Çx®Ü ‘Blj¼Vá[´kÕ}ÿ²*±èî»nCâóZz@FJ¦™[LœY=swò)øÔˇQïM —â…,·zÄ7ÞÄá¹kêï ¨ Fl•†4E‡CŒ—j€SGÌ!’„°ûvþÎ 1+à| §1"1Tgû; :&ñÚÐwIÃ5ú‰ÛÜRKE,—Íå_¸ ó/`þžÄ»«KŽœ>Œ×àá\–lx±xKÖ¸ÝsbË›ÎQt¦Õ~Ìj›Û>Þ.'‰Ïζog‹bÓ[Юe}ïB9pÒต-S⦇wÑxÌí. “hΓqÍÆs´|ÀJ3<ßÂeGGjcŸø‹cË)Ŷ+ηÁŽS%ÝýŽÛ81Ÿzc”÷Ìalÿ†H‚âøOcñž„5ebÍH¸ ¶y jȯÿþøO§×²|Ÿ¥yýýñ’öó×K~îk~Øåõ÷¿Jü›­O³Öª«Ôëç—Ìô‡° _$“5¦/-±µ—·wXŠvRcùwú;%ËýöÝâÇë'•¿dyG©Æò:³r¸ü©¶j~–‘˜ù}þFï?N‰$†t›xékˆ‹Ž²ÛŒçO%Í3Ž¢±Ì3qJb]ƒx‹­Z°JÁ*«|°67*“õÜŸ8-YµfÕž¶uóv¯«xÝ;ï½æIÃ|+Ü$^­îíÄ_ë…æ´ +úÐx²Ã3aŽÛ±®+y]Íë.Šµe˜¡ÉËžœãfú°¯à%D®NQ P‹¯El–i›öîYãÝwr™Ã\sEÌqûC›<¸pã(dØ ÎàVKmÜÚÏ'ñÄpG`»)+üÎÀîH§h·ø¹õi¥¤•šVz´u1Ä$ÓjWÒ1—Ô]F ·˜O}w^qŽ¼ÕæÂx×w8ÑvoÃxÄÑAºC¡–2ÜÐá xÄ€1}è±ñµ¦†wlöw¬þƒ7tp˃ƒ!N¡Å$Æò0 #Їƒ2ÜÀ‰ Ä6ÅÕŽˆ7‰K…µ ÖŠX/ýÅ,v^ÌýIKb­‰µ§q½˜GnŽ;‹Î¬s]:CñˆÁ’- %±®A»–µC:´3ðI¡ÊŽOÎq3ÅÞi¹¤åš–»´ß»°C9‚S"‰á¡mò»9B̼×xoâÒ\sEÌ—~?Ã;1à*0Þà.˜¨-\ ãMÜéßµE[q,³}woßѾ¬³}-¶pñ+Ö§ÐÒøÊëJ^W󺎾/­›Üàw6Cë +\WáºKwØÐ’ð~ƒ«:xqg0YϱK¬%±ÖÄÚ#.Ü=mË=‡ÆfûËCJb©‰eÆ#ÄO¥1±LÝÝœ-·ó8Zb#ýt;Ž+ðˆáʦ€c£VØWÇ›ÄeÙÔ‚X+b-ˆ[eSÜlŠÖ¹ëTâICj[QÛ†-|“x-o3Ô¦¶®£í(k‡tȹOT‡áÂ Ç p)ÆÉ‘·ùí=ÿ×àÝý q +͉; uÎ DŒWÜñ\7ypÄb”¢š&ñV®(ó˜ b®ˆù2ÇpÛ­£% ‡Ï,~@Ãtb<ÿÂe`ÃL‰$†Ôº”ÒJâùgÃü4y³+šÄï)Á%1×Ä|yd_Ãê€[Ž80YÏ-G|LÝ0ñ­©+ÒcxI¨'™:8bŽ‘4¤Ð%Îâ^âmékçÍÑÚÎGK5¸ Ë X´âïõ´Íh7Ýqçe´Ûe„×tÖ)ÍðTk?§îìgðúâeÞæÖÞ$>Þæ@L¶{írqÓâ±»%›a'8®ÀéìsFX$mÑü+6PÐØH5›âjâØÍ-ˆµ"ÖŒ;çpËGk—§¾gþžñhõKÀ®wsÃ]¢bgcWc-‰µ&Öu»‚ØUÄn@c¼¬Üy1’†º÷îŽ!Þ§ÙЀŽÀ¹BÃ܇›ùp@m±¦ o+ŸÓ¶ß´é܃ûýáÔv½¶X¹×}9Zb#HÞ•¹éì~unH¬s[·@Ä!PЇ–É¡xšú&¯ø{×Åfòn:sh;YÌœÍÎþ®1—Ä\óC5†kÁbfWì¾;Ê à‚˜+b.4nE…Øù’kíŽ+¯+y]Íë.÷›Ú–v9ØX'ÚlàcAkóÿ +ùåßÿK&¤åÛâÉ›4ÿ%?ë篗üØ×ü¬Ëë•3ºá4ÏI)„\?º4=+7šðñÅôßYŠéEn;Ö^ÞÞa³¢“Ë¿ÓŸ™‡ðúÝüãñíÇ—××']¿š~ÉòŽRŒåu‰ÃåϧñáiCÙܽÓ>™¿Öw­ÉNJ‰ß„=šé¦mjML·a˜ôXêÆ@ÆiWÝÃd<0œñž—¨â(œ<©·—ÅVÀµÂ®v°QÎ1[ÂúÛ–8â Æ)ÿ¤·vgo×\ñ,qÝ9tŸ€% Œ£°8%MâÀïå’K`®¹î×˱”hw 4KÀ ^¬¡Yn5«§ó‡ãa4`±J!¤nßÊáM'¾› ÝZ?M¤¡cÙ!²&vWòó·\#Ãv¯Cøü$ӳ㳥ÿÙ/ƒä8nŠîsŠ¹€@p#øY&•ï_ŽF#±“¦»»Ütñ{ek4Óz‚>þÿHº]zæ.FE¢¬?qc‹—¸±Á ‹WÚ­~:—õ†6¥r­”%_ÀŽÁ:0œÃžW,ŽHrèÔÊÉR*’á +»X]¶ÂHËV.¤õ„;íÂXk¬ `ÝŒæ¿p†ëxÀ—Ó¯r"UY>ÍÒŽŠ¡‰Üm³ìLdgPÚE‚Å;6Ñœª¨Ã53¸嬳•u´ëB¹~W;¸ '-®,q¥Å¿r©>‰7ÃxšùâC¹ÖŽëžÑÔÐŒfiŒr.ik»¼6áSŒVܸؕÓgŒe´Z‰W|à&ŒV|àšž£"±ck·Én9¸…CÓ¯d&)Ùp€Ñ,MC"É¡£áÉNs'‘gcE,Üʼn5]ͳàLîÞ ¶zor\~üaŽ7ü.°6ÀºÖ=ÀV? P{­!­Ï8a,Kƒs8`¤KH9‘ª¬k÷´ekp¥Á•®|⾌àÂ-Ž±¼.ÙR¡¶NZ`YËmCËþ»Ç¾Óá +;š$ÀÒ­~W;bˆ‡Õ{áþ粨q\'ŽÑæ WwJ}g +a0ðá:ÉýB‰ÖÏà€á$×€±.80ýjL”¼¬÷³)õ‹¶pÊFnÜ)”ðÀH!™ŠyÂñßpÏæ·³Uîq´}jèó&’ÖÕ0Ý6\±úé<<.N¬ìž‰£mÞÚëX·€›¹ï~ümד” 4a¸+MÊõ§h÷ÃÑvzD¼£æ‹×ЀúÃÕήûmaf©>‰×§t_4wbT$vn²>‰Æpu­=ZZ•DH›GÑ<ÀPaÕ! +ã8„†û{6Õ°³þîQþ¼x€Ãs4´Ì°úé\€€/ Ö0ÖU„6]¸…Ó`”sIàxxÂk5âÜ £Õ6rãNI›ÐÒ°©cM6×EcÇY´ëÞ Œv)×ïêV´íÄ]¶sí +.‰¥$²äëö{ð²ëÄ8.€ãð Ý›h +†;/<Õ'ñzÄ]‚øqÜëîÁõ)˜kÐ#à€ÁL îÐsa¸ÚwÈ6a°•Ã›ð¥áÁV6rcª>hÁlÕ%Ü6§©>ïO +w GJ1¦†¸ž"±®#ßþþí‹ É×Å)³¿½þµ>ì÷?¾Öç~«»}ûóŸÅ_ÏŸ¡_÷:,f¡ÏÔ/áþ+ +çÏ/î×ÄÛ,î_Þ?nïŸäáþƒÿÞKåð|µ~ÎßßþøÿóIϯî?äñ‰vÿ×Y×_ï¯õPÈYÄ'$)»’I.ëÄSZ~½vÅꛀfÉ‚#©oñJ¦lÞ!>OÇm°ZCl bÛ¬ÙHÕÎŒ5h Ô;ÄGy×hºDw¶‰4ZÇÕ¦œíg/J|b1,B9•žŸ¡†í¾ùöh«l©Ä0Z ïž;á5f+%Ô6:ºBn7Œ,—n.oٮᾎ-àÅ׃1qx¢XSfr®‡ÔO3±Ñ.ž‰U)‰ö*Ù„ÄÊ…¼ÄíÓÂZb[Ûq“!;£ø‘Sëª(¤ž‡{ð‰ª°LbÖ«3CUˆK— p;% |¡æ{õÉK·°]Ç#Yðî¦Í7cñ2Ï&ðTQ2eóNxœ§ŠÖÚ¬!¶±5ÄÝò•XF‹¢ÁÝsjô›P­Ä3adÁ‘ˆ-°:ñÕ.‡+'òT¿=îÞhXw…òËXÖ)—Æ`ó…“/^žh™¬ÌäÌ£‰ò¾ˆE µÀ£SR®Ë‰CìN–Kׇ«˜·ZÚlœ²‘Ëèù><û[‡—spU"RÏÃEq&±‘ª÷΢‰K Ì£»ÏÑ­{¦å€)‡×$°º%’=€pqŒwgà&1^IÃËåë:_$2es½xmÞYCl bkˆ»‰'F)èvYÓ–X—Äú3g¬läÆÃ/Ðà ¨?c<;ƳŠÌT·¯³ySãy1ØõuØò·ÎZZ[ÒÚÖh›ß¡¾=6¼qÁ?xsZ75'Ë¥kjñ°âÆ|D x1§A©hˆ⣼³Ýp/ddpÛ†wÑAùÞ|58e•G¾Õ¾–âP¯Z7ùö÷o_LIůK©}{ùk}Öï|­ýVŸuûöç?ÿiØÅC}´–Jt1 }þé +ß©?ùã‹Róöm÷/I·÷Oòp§xü{ÿ5›W›·/ŸÔþçOþÆãÿuH’o-ø™kýcªSÔzŽM!”Hžu¸Ùie ,·­]9õ@pr÷Ø#žo_Ä3E¿—Wb©ºÉFŸ×YgüÑ aflµmqõÃ-bm‰uI¬[ÄËî²gÆßë.p^QÛ—pˆ•EËÛ^1O£-Lœs'¤§Ü<¸Z˜ Bâ© ¹šWHÑz™…íÿñQ¿L§Ì;8gL¬­tµHžµŸÀÒËXZà8®Èk4 Ýci§:çNx4Æ[â¸$Ž·CÆf ±-ˆm±²[êéø ïðùf&);ÎŽylnëë 1\Ü™Pá^˜²²áÍï…«ÅœXwœwÖÛ’Ø~Š<\ÞiLd’†wŠO;¼䙢ïغyˆáòÐÙÔHCêm™¼ZȵwJ‰ä¹wŒòÇ€¥–%°4æñi¢XD$\(&]‹†Ýˇ²‘WÄ™uíPœ1š±iÐ +Ú9즌Žìäî@e1žáˆáN%Do»T1Þ+”,÷ÎÑ­m×1ÚÕp¡ +Úõâ ãŽEÛ¡k‰mIl[óm”ÝH~¹ í¢<·ç5¶NYˆ-õJÐAÞá—ZcòÀº&õ=¡>êM!ê'1? ¾,X—ÿ¼1¿Ó¾¿|ûüäþímâ÷×?‘ÿ?ƒðñ%7ðÿC÷LѹãSnûðô¬FZ D 7cÀ2ïÌ5lÖŠÄ{jÅ®ùŽUÀ¡ t{ÄÓã‰oñ.âŸA ud#.!áÄ]µaÊÌy“X[b]ëqã;‰õ3ÖI´çÅñ(ïmÃÖ¸`Ÿ¬¯£½ÿ¬ÎöYÕΫjù<8#qºdN£_¶jéÈ“¬3‰,¯,xå6“ÈéŠ{¾‘Oé2.¡*”Á±›wEU*˜âéÍòÈ.œNÇN`-ªÂ¬Ü Ìât½'”±°¶ÀÜ«˜<‘f¬Bb]ëÄŒó©"!±(H)‰ˆ…˜K¸y×s·|ÇRÂBŸoóò•Í| ’Ž8c¯@ÀÖ‚Ãô“øbA‡ºÛõ2¯o4Ä–(A\@[ÙμçT1ðÊÀ+ ^ù1áH…€E" ïeÝ i!)9Pµú~sÚµ°GT çÓý÷çNåT›† ¨U66mrº§ûn>ý6ôr¶?üäÙ–Î#Ò] R °Æ­’v¯yEqÛMl§é ðe,„`}ór„Gºñ²28FMb žTð ñT—ø@i'X€´é&±ŽÄº$Ö-â¥ÏÜæ’KÖ/Ø'Ôpý¦²à|þÀV@m"5.ãÁùbN*ÚéEígnéºpÂîãÖ¢ ûq ñÌK`G|º§³¶|ñœpñ¬Z¦'[¼|ñ‘ÏŒz[ræD{—Ð)Ò¹±ôë.˜ñ%½"q>kƒ†Ø6‰e$–%±l“Ÿ$~üuW#*(×Ó›Û›×ÐKM¤Šf`f”ˆ8aJ§»@òÍ8_ÛtmñaªØËûqæ›Î‹Lñô6`Þå󉄪(@:‘:ë’X·ˆ—½bZÓ+qÜÛθ°D:¦½¼><3Ýhã„š|»”´xHK?I¤õÇýò«: ñãu)ÐÔ^^ÿÒ?ì·ß¿ôÏýÚ?ìöõ¿ÿuéë} +ýT(‹ÖǼÜÇÎýŽx}âè)ÜŸàB·oï(`åþƒÿÞÇ®æï¯ö÷Ù·o<þþIߟÝÈãã,ï¤íöçb2ÈwÑigpvœ>ógd¨Ht2í‘•°ŸæîyˆïK"- >`©’ð‘E"›*RÅF¾Tfw@mAOˆ'›Ú ñ“6aÚ<¼5h·"V­ø EH!@‘ˆv/ë醖‹ÖÁzu¯CZ]ÐêT¼e»:–à|n–­gŒ¸l#NXÒL1Ø»+:…ÆÍýøZI.-pén8^ÒVž«Ñf[…þuö‘qèÂeR›Z -øzóí­Ì=‘"X r¦Ð¨ý«½£?sÈ%Ôp3 ³@CS›$žij2Ë‚Xfˆ ¡oŸH×™qºäHx"¥S…‰Òy/ï +í0õIÚÇ_öcœ oÐtf¨H™ˆ½5¶¶u‡z0KØ~h§†‡{èsë^}˜A…·g,#±,‰ekÆGz±T«QÉÜ+‰Õñî.ÄVâ& NÛågz¼kqèx±€j˜tŸ;wÄÎ5 @ÀWäMx×å#–‚øð/Ñ\>œÎ$²UµZýô‰vÏ7TDºs#_Uc¯`-tᣀm7°}ˆ¥Kx¦[:nÔ‘år!@‘ êhï„O¶ˆ„¦Ö* Ë¶†/sÒ±; ¶ÀÕ OúÚŒ†ŸÝ:övz80œ±€j¼»¯ÊøØ ¨“ç‘qB«HwR¸NÜIOÆÝØãu Ö±ÄQO¨Š|›—ÎÜL­„—ÇL1º<#b^ómbñÐe[ÅÏïpè (Ãàj“ž)@sà å@›ÚñÃ¥—¸´9Ü„1—k¼Ú<:èp÷I·n¿mZ¾tËì¨i·}çÜÙa,µÿoµwܶ§’"]'ó‡tÛ&È@ZÃù^--²…q¾Äj ÕÃè‚‘*1¸U@—m _G™Ž!¶ +ýëlÚCÀÞN_¸‰• !g"vÔXÄCú{LbX¯³ˆÓU öÚ0¨ÃŒy$æ%1ï›ñ\pÄÄ©‚#ÝÖIq0Ö¨\>_huA«O Í€zÞܶI5Ìl› IJ – â\§F.Z6mÒÒnÚUýîUo4[¸3æmºEëŽ æž©Ö³óø¨…ÄMû½ñƒ¸ôìÿúå×Æý<µÇë" ­¾¼þ¥Øo¿éŸûµØíë/þ~¯f)`b¼˜†`}LÃñþ‹p¯ˆ¯Oý1ûÓ\èöí¬Ü1ÿÞOé¿Û·W_Þ÷øöÇãïŸôýÙý‡<Þ1Nãñ¸O‰ÛíÏ™=×vŸ ƒµÈ>Wª+¯T×À>7þš¼ë¯)àÒýuâ7ÔÇkêÛðÏÿúÿ×ÂÝfhÕ뉤øv0­Íõ­ØÏ¥öÖ¿‡KDü–­Nø¤éwÞ‰ZE}kQ¶Ô°âó¼âóŸ[ö#ú©e®ë¤åÅÐ÷°¾¼ccÓ¦xÃMãFàTødݺiÔTCâW=ÈH,Kb¹½gJP«yÕô›ÊÅØ°jäbWÔ®Ýwšm“xZ»kÄCïž$~tû±m =Ø´XË£c©µŸ*¡*ï:Ðê‚V?äÖ `©ÛŠÐ‘X—ĺxÆ‰ß .Z¿ù‚¥óÝKç+ÀãÊñ€Ë \¾m‡†R'q¡ñjµÀÔž¶ˆÏÒþ#âÄÚÙÚ=r¶ùìH8˜ñ!±wº‘Ä ¶.›4¬5±n‰µ§áÊçª/dû]Õ_ã»—¾ÆÖfrôäÝùÝrâ}wm ö÷DIÏ.?౿N@Ùñfì™|dšqNå5ìOžñAÞ¦±e¦sKGY»6<¦†6m&±ôTWûÍlXB$‹®%ß‚8ÊÚì=F1µNÐåàqÔRAKjäÒ@N r}áÝñ°/Õž¦Ú`¤)7Åp˜õó«s’t+VüâÝPó•IByþ/„š5lYÃÒ©7õlµbÕ «ÌV‚'vÒ+cÓhT‚e2ËöÙ§„}J|ØyÛõoÛR |K¿_Ĉ±°šA™œ|93¥˜{ó}¤úºÃâm[°:2çZ´œ¯x- Öº3gÙÃT £Y„S2u§/]-c®ˆyCÌ#2¶@ê­]FÆœEßl¿d,5±l‰ey¦Œ-«YÞŒñÌMÇÔìðÄ\󖘟JŒU€àœ P.ó±?c­‰uK¬½W¹]Ih«®ZxïÝàóJ!YŽ*ðt ˜Ñ“w¡¹yWìmBŽÏ'þÝ °·}ŸOœåàO¿ñfº›'Oìk`odý—|û#Er!ßÿ^^˜’¿ýý{yÖŸ}/ýYžµüüûßÕeÉ·';§¶™EÙøû,²_? »ôë—ìï£X+­Ò‡åí žÌ¯@÷ÿ®Rœÿ+ego/¿ÿüö ÷_Öâþ†z÷ŸË„8-ÿlúlyG.S%Prå¡Wî³²~WµA{EÿÔqk¾Ü6#M9ugüØy”·¥ˆP ÕŠðÙÒÞÞÑi-Zñê†W—~kY{–©ã³1±gái87:®6ÊÛѯT¬²a•¥§_6&9vg;|'|6Ûíõ82Ûöõ(NÁô+!“XÊ-ȇ="J<³­ÀyDŽ`É Ö|\^}ºŠÐšW·¼ºò‰P‡ qXú>Á¦¥‹JŸø2©çE¿»ígñÄöE¯MgûØ»á¼;ó¹€~LÆ×®]'ð–Ɇ9­çÆSb¨]¾@ÆsV)³u G P^†W‚%2ZIËä¾xóÔ0’E°iÊ ®2c˜¶—pCnŽ–Ñî À„C›±x£¸qÃU暘·Ä¼<±÷`Uv,CƒÊc0û…kl7â¾v‡O¢>ñÈ„÷úd¢¤Ö0³yö[kB+bÝëâº}‡sD³ß¨ÄNZª¸šG¤[X4ç;«O$ÆSD»[g‡·ÎNÞ:ñk±, ûÕD'5†*åˤV=ãìP”àãnÛ™ß$i;lžL]_·×ñ]½Í·¥„+Ãõ3qºª‚Ïžq­b®ˆyCÌË+%Ž“}Ým''0ŒfÅe´Ù†DÑkÓÁ>¦;ì¹ç_@™ÄÒéž;ñžk:Jì¨éˆãU¹u¯åƒÄÕ~¦áõÂ|*ð­íHÇ‚á*\ srÄ9)ŽEÚ²pÖ ž·qµ*´"Ö ±.}UœxÁ W×€Ž"À»ùpìªa¸ +÷Õ0¢ßò¡Oo7SブkZÞÒr—vjjÀl\¡Œ·+£µlAæ [ÞÐíT!ÈZx<­8GnÀǦ›#™öJ®Áˆ®7À[HʲÁi½xYát=…N?,jsEÌb®ˆÛ¦æÒ pépŠ™0‰¥Óµû;««ï`ÁÂ9/£•3°Û®®ã³ùuëú|™Ì`Ékfô]MjbÙKx›#Ä{µ­CUJÎh6,Á!Ù0\0³iÊ©«ˆaâ^mšðËX°¸@ÑkSó¶àó7.¯§ÑS=øÑ`ÖÕƒ‘Tá…²Ð}WåílÜP½Œ~YoŲ•WTƒCº=}Ü Œù´\ááìP¬!"Ua”¹âi)ÎÐ +ºDE:0¡Î ¨àÅk¹œ…8§V»˜tÅeò‘ûóÕšW·¼Ú›ou êá~q½È¥– +¨>x(-Ú¢ˆ,/ðÚ¯‹×·á᳿x#Ä{‹·ÊØ3öÙëغªÐŠX7ĺôU!ÞCµˆÛÖ!ETïùªgßCqW ó‹åcj@ó_058 + +–S¢è¥Ñ'g)w®B!ÖfŸ ‡‰OWoAˆÊR ÷a”µC:tZ´Hñ ¸˜à€b‚ÓzT4¼ìþ!ݹ <$à×ȵ¢ƒÝ“mÖx'žlñ¶oý’®5±n‰µ7ßí¾LxgßpÜ7„]5Øa5ØÙj™ÄÒSíáÑ#È(n̸ª:\ó–˜—gV§h™œ#،ٌ4åÔ%žqÏ'†x_¤AÀCPówµ;¿ñ<¢]Î%±æjJì¤ßËL‰™[¶ú‚6síC þpú¦Aùg¢—Áî +N·î{z/›8ãˆÔrŠvw¯¡Y·ÅÄkNÃx÷¢*lÆâ9ŽÏ+>#"~š&Ñ“©;=4j^®xyÃËòå$E Apb0˜½_Ë{kã®VÕ°h]@;3œ‚y˜s¤äÓZÓ"9®h}¦Ëc—ßþ(6’¢Ýÿ.™ìöñ|û^öç_ßËs–‡-?ÿþwóÝE2Î÷zâ¥,I=‰òï“ÈnýìÒ¯_²¿bý­ìW™áÛJ`ø•âþßõCI¿ÿu}ÛýÕ·ßóöóúüû«ëAÜ.ãá´üóŸµöÑÖ/ÑÝ?çk=úžùlå²Måc}NzEƒLªöœÑJ…*TéŽvuK1îNvâ32Ù ¸,&‡qu æçÈ90vÀ4û”%RghÝB±ÇØÅeâ(Öí‡=pMË[Z^žYPJ܇”c—ø¡J5uéPü·°•W iÎÎ$–Äêv‡g\Í .«$žù£ ¾£ÞA8}×ðÜ=9“ÍÁ…ðíÓ­XYH]Ò5a¯—ÆœKñµfRœbÀ#yñÍ °è„H9ù†.I —mx ÇÙ(:nO +¸£–Ö¢ML)1R^àŸHDÎ{á +_yM¼×éëÁèì—Ar7…÷9Å\ $°Î|„,ÿT6¾ÕOY‘ÃN5Bv ©jHZÙÏô|‚Þ{ IQ¦«‘½l[eÀWyÝÑ&Ð<ηçÌa,†k¾qŠN,!p{Nõ.Ž •«ã_·”m$ÕdPLÆýñ>y뼌×Ïs{§šÛpVUÞ~ÆÜó˜'fÌZ¡ Z ’KÃèŽö~öðb‹%†xK¾­óò²xîÛÛ{Ü€»Ÿ( hÁÝ÷ÅÊH®(mgÄKå‹îxj—{X>Âòh×Ö:o¨]Ãæewwô1wÄ| æ)bÑ1ðSîð™Í× ˜Œ‹ï}.3”âÅÅâ¦#ªPå1ŠŠ`6N±öŒHÒv²óî-›BFöF‹—‡{.†«¼îhã]-ÓÈÆËöÜ|?ç}‡4Þ]ÉÄ„hÞÝtWyr{Žçaw-kÛ1#·Þ¬º"V–ÆxŽ­± +pm_󥊯ØÊX+Ô@®ÆjP¹:|ÇÇʹP}§ñµ÷ŒÛämòB2C)ú>V&ªPeheñÖ,^Ç3ßPæ ¹½SÍu‡UãíWŽ;b>sGìö‡pÄmိn'^ +ÙKãUý÷*¯ÛÚ|™8Ž K. ¨ãL.=q9—Ñ|»ßcr¯³úý,µ˜K^ƒøgá¦Ç{ºpîSQª ";O7¼¼jÈ~ƒÍ7’t¹ ð¸NJO+GZÑ®ô16¤âdÅÝ|,X§)ëÎE[e¹±Ò,ÒAïÂŒ—h\›|+[ GJµx‚x!¨Ë±ôJÅ$£˜{b>ócÅKØ rurã–¢7c¡)e—x½±=UÐÚD4b¶ªn Þâl3a÷_'QÓpqÓî†KN‚´à8îîÓ((ƒUïBºçŒ£©‚5µo¡¯¿©Æ‡„¤ +"âeÇU9 -bN îª +j(ùFë—ñ²95OËnýY!áEöÀÕ…i(_éYåÈ*#ù.=Aãçö$|QCJÙ:â^×>þøó—_k{HJ¯¯ Aýñú·ö°ß~ÿÖžû½=ìñý¿ÓP(‰_—9#×Ã4äíÿÏðåa,ÿü`h¯Óxù1µ@K¿?Ѫ{«<ø÷Ÿ/¿§`~{,¥¿ßþú÷·'½ýôò%¯Ÿè§ñú÷ö 6ÂÿôWÚ4= ++˜éýÝ“ žóîß³VÄ`œØðïœëÜ~ƒ}»¶*bÝ‘ÀÚV°ZMxxä÷S‚ø°B°Œ–mR»3Ëö¬v ”šõ½ß²=Ù¬´´œqåp¿ôgc¨Ùœ ¯(V o¡V®t³“}Ú]#doÕÖ÷™–.Ó$°B¶5&Öú‚BUÏy¯úîÆ=㪠µ–8…—ÛÑ‚²¹¡¯Z´œ ¡ãb÷\´—ûÉ«ç+t»2Ï¢ÙX¼ëQcT†\Û;8ˆ3¤Æ¨Þ¢ÝP»‚ +Zí<‚»BF=0éq©=©Ýp 2$ÍçQÜOJâ=€£¥[4àx‘Œ][»Ü N‹úR ‡ëZ ˆÕ°ôÀr–ðÊSHHÙ¹„n–ÊlªØûõç`Š)Å‘®)TEG +W­a0Ù§š$e@òrbèÊ+ˆSûW‰Q{YÛg­žkvOÇ‘W¸ò˜ÈJ€x>Ü[¶^ u±EëcÑ,7ÞÕ­IΈÞÓ!J\Àef‘ò"œý†. çÝaœ;ܹ0ΞýV¶Z6›ÃB9äÚÞÃAä@¨›÷êh]%(H ¤Ö¥5ß°ôÀr–p·“À¯[~®dçV»™rYJu‡K—a÷—q+ Á09žð†Ê=*Q¹C=]±Ëcý®éô ×sS+t~I¬Ú±¥í¸”Ô8Õ[¶;s"öBø²?œÛîÒf(YÏ ï[ƒ$cW;&<' 8š†£¹µ'á°ëLÉsÖË>¬nß tV„.2('¯ó¬^—Êl 5›S¯Ša¸kO6Êpö‹*p¸4fC(¶xeV¥ßxÕ¡ÑfáâµÉhÁV Š½ßÂQ‡K\F8;£ +X‡xíHWäÐõ°Mr,8—@N€xîhÝ€©ç¥#/]ðgs´hfmŸ¶znðä„g€¥–°L(x$‰éîL+O8A%tN¸-!÷do¯’j ÞméÂÙW¶º;èj8Z÷aS¨ê¹ÄU8ƒ½:[wÙ P7Kw+*hmë¥ï°2”¼]¶Ÿ¸ q- ¢_á¶1Ü +X¡ó¥ëúÎô„ÏÜleA‹×(Qò&¼Þƒ©Ã¥.=ƬþJHœww…7g¸”‹VÎ$1»)·CÃOz0%@<¹;*B‚¡7àí/wJ_ á™2 9Àw›.µ'¡—Æ?q§Óø¼>èEàŸøÚ–¡¦¯Iæ =g¸c‡k“X@ zÕá~fmŸ¶z^Î:‡˜žqé€å,q¡,MÈuóp¯ÒzÒ­ ’ËùåvGé²2”¼ýZèfáò"×ö>¿„vè—:\:àÒc¨_S¨ê…Û +cX¶h +Rëù¢ÝQ·a&ï¶L Æ^˜m)dÏ°BçP<­ÝóûraG6á0ËƪPª{®­‘Â2gÈIó{–›'2 y]án575Fu—ì~ņ ¡Øö기‰‘²c +w+bñú µ'áÐɤ–#°<†¡¦—CM?J¨…æZ@D7_> 5,H äÕ†-þ$GEPIFÉëæ÷ +‰pz•œ ¡WÈîX•2mŸ¶z^Êötté€å,IÔöÞ«.°Bž;¬9׺™O—û0ÀœÚ·H9PÄsÖnרg¥#+=.íÚ³u!ØÅÆÆP³ jÃ,îvnº¾õ2”¼}º Ó8Z¸ *hµs7»çÂÒ¯$COW»änØpÕ”“Ž€¥–#°Œ€W&1×"º9‰WN8\+Tõ$¼bß®¢~”Á† ✠!I  . #5‡`î+Œ)’§ß›ÁrUZK wȈÞÓK\Àe*Ø +T1oÙM¸Ã¥—¸ô†[´›"Ô² {-ý^J`%(Ië—1ì2†HjˆWq²AÒ|žk&gÔ0ìÆÄ×¹™— L/Š°—ïÎqj©×2þòkÈ?Ò^—íÿåÇëßÚÃ~ûý[{î÷ö°Ç÷?þúWlÚÿÙ/ƒäXnˆîç}Á$’kÁG˜¥Þøþî¶þgy"+š%WJÚø«%Wë5”ÈL(?n,iÌnÚ®Úm5Ü?ˆ„üóE õ1ûK&a¾ýõSá|÷íßûçlµýí»ÛsÿýñõÛ;½½ºÿ’Çý4_·)I¾ýö·ÈÊ÷ØÏÄÒÊýùë¢Ý_SwMR_¦ÊÂω¯fŸRr{ŸO¦]¹-Üâ?$õˆW+çF,‰·'žÏ¸&KŽ†—TÁ£ÓuôPÎ*ÃÙN«áyq]§@à@VŠ§ßƒétö|5 +…!쬞®»b€ i¬XŠÅ¦8É#qö¼ö»Ù¼¬Ü(˜ž=ߥĕ,i>›¸×ÄÜ1ë«B©„rv;_êgíìË6,8 ÏYë€mlSÀLÚšäÇÙÄ—Ib´Ñfª,gïÚ¢¼ÀJ7 FÅ‚{©};Ó~ªÙݶÃ]2<÷>Ǥ"³zî.ìæðåÊzÍ«“‚'G<£à×ü«ôHM$–<Ú£7 }­ú"ÍëÂ둉)KŒCbë‰mOlCâEÒ•ZÛoPo¾+Ôð%e›…RœHß˔ɅX=ëÒlrÂ3i¦±îˆõ6¿Ù(&ï`»"±ÆL•ål3[µp©RªæmÜ ´/e0-\u”’¨Tç¼¼d #kPÙ5YÀEƒ+¼±R‰ùtâxxƾ‚ÛOÕkçÈøEUàÔô”ÈTÓ€tv²Ò—²2tÝØ“Æ=i.52¥”çíŒlwÆȬ¶°McW“¶§³Sp®8_KI˜ÝÖð# ´gÕ=«ÞÑM|R ¿ê'i `õo•I5¸aшe9Àõ]¸]kª¥œÕ%>,‡Ó¯6™*ËÙ¢X$a¼sBYHÙk“Ý|­'¶=±æ»Oä™ ¿“ÈY(µ!ãt°þ‹§˜ˆÓ T%§o7;ÉÍ ÒB²QLÞ|»ê;I;S}µãÕ¯NÌ°ð$ +)Å”ð—«hÉBòâmÑŒ¹–ƒÄÛN`(%/ẽ›L䙽³ØvÀ61b)Lõìƒs¡$Ðxñ$ h1g®Ù¬l$)xWÆQ=öýù|‰¥ +rÉBrOÌìá-×rx¶Å#–D1Šsg®"^»m0w )gw¶kÊï~ÓfxýMÓ‰3{›v‚“½4ßX©Ä|z¶-Lc'ÃKa™*ËÙjX¤]¼ê‹UrðŠzUJ^V\óÚ„ÉáT)Us[Ùµ¤‹–Áígš][8£?¾fdŒŠÁ± BUrÂPž‘e£˜< wÄ“ã!ÖŽXwÄ:#a.”$Ž‰/3c LÌÅ«“+Â"6`á ,O¿€ÇEHRr‰Ïˆ¹W‰ å¬nÌÞ¹ †›q +Åë•35©‰Ä’gjG‡;0´—Ž·HªW!.iÑ…½¢j`¥$*õô²¾ÒÅà΋X©ÄÌ8Ä€§fŠÕq<¹w3Às#ö÷Ž©:¾äÚ¥D¦š®ŸnX§¥Êéæð• ¥’%Í8Æ«‰)ËÄáf=±í‰mH¼j¾U)y5²3ÝØÃÆ=lý*úÊE ®½ƒ%X«L$–ªC{Ô N$Õèžô1aJ¡zÄWìÛuÿ81e™¨g/›_pÉsñæzTCÌéöóÜll$)äó„Ð}†Éñ>æôt¼Y(Eõh.™ö¼ºçÕÑ’­$VRöºÍ*[ØÏt…wˆ[PD±‡†•›4~·fëýWÿþ¯çÔÞ$>¾¯B¥¦íû¿¶7ûÏ/¿¶÷ý³½ÙíÏÿþñ·Þdí?í½,°í¦ÑŽƒÇ4j¸i¿úÇ‹êc÷—LÂ|ûë ¦ÂùþîÛ¿÷ÏÙ,ãí»ÛsÿýñõÛ;½½ºÿ’Çý4_·iK¾ý¶O|*¶ñk›„ÔËÇ’Ôöë¤Ïˆ/û’+iɧÏwaQá¸>'î’xÆñ_±RÕÍñ?ŒX;bÝëÌŒ›Y­ž*.§áH‰ÕQĪŒZJ\”‚DÅÙ:)‰bÏÕ®H\ï[Çq áWjìÑ}{§±p’2œíe‹X!ËÕ›íÕ qÓ¯yć{w8ÝÕ€ô —Èpn†×ƒ5 c5w›;­²s´éùŽ×ñÖ~¼>|µ­ƒk>Rñ’£åš‡ÄÓ[7êkS¼ŸÇÕð•Ì æÖ€SXZ„{ð`WÕ‡w&Š?‘”-ðûAQE9;(l bÏÈ.XÑPsFÅ‚ëd«tÛOW:bÙËm¼i*P±çdÐÎ6ßÕáT WÒ’ëÙWÛ—½Xˆ“”¡~­çµ=¯Ýúí¦>©àÇ_¾ô] ^¥ß…e²Ü -*P™„ó P5.”¥lQOkxTÚ§x]À9/ðÒÎóæf§EßÛvõmÃóÝ6V´ûé|Óˆ&¼2‰ffh¬Œb¿xÚEô¤mÓ€ ͤj}Ö{Þ¸ç·÷­aå²%´®#e³o¾44)FÅÂX×!V~ÿÞ,‰·'þÇ~µ$InëÀ½OÑ0L¬}„9‚—vx3÷x¬®® j¦P¤ž¤Â3›îúHªT*‘™¸vß´÷}Ó<Ķ±]Íqy®»5y½Ž©CLÄô6Öq@U„s7’w¯¸\g&H´Ïc•x²p>a¯;ÅYŠ8±S„›ºˆyg@%ݧ®²å1*´GÐ^ÿóÛïRÀŠÝ?gâûç_ÚÅþøóK»î×v±·¯ý»a#ÝôF ¼a‚LXºÝµßÿöÆ’Ý™¸½E Ä·3oLÜÿßî‘Sy| +†øqøýõãJw·¹ŸÑ3qÝ"yûû»ù–b·®U€¨Ðó-rö9ŸâœîܧØö…÷9y‚µ›lêÑÒ-½íòú9ÕùéT ¥ª»—Ì wˆyƒ˜'¦* +Éñ2Ý›” áP'6€9Ž]÷Ì-SÅUÅé3wÐ9‘ñ=O?MÃ'6tø½FÇ|¢¹5ÇÙVsaª¥mŸÊïÁ‰K ˜Õ< cx29œÎ}frh†Š:öáu:a(W#«@’~—ìb€Ìã.q(™OU¶#sÉ‘’¡V7ê®°‰ƒL^%^‘âˆu­] ‹{5ñ í^=¸ÜVHŠ—«á<ý’0¹Ü.¨ßˆU"Ç—P \JœÉ Ψ`Šq¼É‹çnŒ³ç{¾Ø'šŽÝ†¹ž"È ¬‡x¯?C»×Ó\í(&^û9A [^çü×w³pJ×ÜIfãP8­¼ó*Äbòm:€,Õãö6÷hóm¡=±ìIJ†œHvËä!|´L +d‡ÝÎ&ñÎÃÁÒ@ÆÕ±²Î¦/3ˆ_‡L€Rõ³|´ªÇÒi…¤èùÊë[Qb€ÌãTæ1oóñyÇk›ªƒô˜ÕÄ3´{õàv´Åd´w.Ò9 Ôb¯+úC¸Ôèh±ö8­½‰[Pœ*hM¿ºÚ¥Í‡¡uâ@ÎÆ(w™<Ù-g2y¯ïRªc_;‘á¹áª8âxý=šŠ3$f¹.ëº{˜tµ;OÏѧ¹/¹…”½.qÍ®ñS)"Ô¾AjÀT,Ÿ%„ZݱÞÀ‘f¨¨ž|¬j¤Šã6|l?Ú ×õ³ +Ù$’‚sn@ÙÛæV”p¼žŽcÎE²×$öâ½râB%gZ,ÐÞIš@µ^¾cüÔþJÃ$È<æ÷X"Ÿª„,Õ뼹Ǜ·xóˆß½71`V·C\‘w¢Ü®„no_*-Âq[R6§;Ü7¿=îÐm—!èáÇÛ;ÍÀ +yˆ÷|¡E°šÆ ç2…' ©…*<×·‚€){ü^R®U ’k-¸ ¿IŽïûœã +Ùĺ9ÊÅÕñ‚ήüpª Ÿ'ªB¨¶'Œ*"¶)ÕqÁ08UКÆh—±N +lèÈ÷šÎs°AX’$CÄ“¾q ÈÙmÀ šZ¬ ƒQÁf•âÖ¬©$OÂgØCÚ-े!‘«àµ²‚³Bi5øê,ÖÝòU×ÏJ»Rû™0ò ¶e ¾/¸Q +peࢮ„D¸Êq¼\3ä‚ÇK"gÅœ*hMžŸ†¸ç9wó—¹pª©HñtLV u—ºsoýx¦fþ—ü˜± Ž¶Ž_µíÿ¬mÂ@\]Ä VŠxC§ ‹SWº€‡ÚîH0é¸È¯uÊP$GZïâqlíÈ‚¨›º HIᦎ Ber +f×€¦_^ÙJ’ØɺóÒ¹ŸºÚ!®ÄufêÂu¶pµ˜“BÛ<..@½$fêoà ÙÜܸ‚ÞŸ/›› lÂ%&9žéðG7»¶u˜ÊŽ€ýG¤bŽÄq¤ÆÆ©‚Öä¡]Qá|‚As7¶uÒ#žOTÅí'qTmÉ ZÆ^HáÊO³OftñYĽ&æn:¿Âg(Y/öá½*fœø'ªçÅB ’òë¢î=6a¡ \qtRÏJ{VêX/_8„¦ìÍöèdsŠ ·T(˜ÝR¹˜ +’Í5áh®ïRÁaV×Ä$eaG³§U‡£¦û1ª¯$k9qì6`‘Œi¨À9Râ=¾û ûC-éê¾pj‰LÑjo­€IC¹Z¤cS2BvÛÎI´gÎ7œ"$‰ýß‹÷—Û ðO.·p·¦@òU¼ZSËöž©E„K:¡ Y›Ó-—$Žæ‚JiÜóž˜o/ŒŽ€2HŒÐzÄo¼ÔóÒž—:Þ!íûŽXe-`.‡Rƒ`ZÛØѤç•=¯ŒÔpjSӌى¹í¹#ŠèØ\–ŽXvÄr{0— ªe\~¦g|y.”ÑIæ5g¬ œ¯H,¨À9yÎvÔ×®ö‰¤ ˜/öáÓÎp©Á­@cº45Nl•™Á=4Žvà‹•ËU€ÅV2ŽûVävñ]t¦¸*Ô‚ã„[‡Xr%OÃ+‡Ó± ‚RwËY§x~iœék±R.ž"r‚dKˆcÍö¦ÈÔ$Ð’¼qq/`îˆyGÌ·‰pV‚Tj ¨‹7c¡fçç·ºÖ¤`GŒ¨©}ýÏo¿—ömsíçbŸ|üô‹½ê?¿Ø[¿Ú«n_ÿúwWZÅßÖ9qi»QÈ›¿7¼ÿ†l—Î÷oZjÛ(îß"°ýùí K ¼ólÿ½ÿ’ÝOí¹úíãÛ×oozûŽÊF±}m#âzû{—O2sûÜ ²Õ—¥íÈ.܆"í‚«ro…œ°"n&d+åuçkæYk 4ßjæIxõ|OUDµ;Á]º+,”zùÒu¼ïª°Z-›”>qáÎY.¶P.OÊö&kVaˆ­#¢;ã£*~B{æÝh% rŽ3ß`MBññìçx¯¯4`jβm²?BÛ­–;_éxeÇ+Sóµ‘'ŠÚtÌ=›ïÞ"f®\ß"$ dJyÌÒËžXn¯ æp3æ&P[wËeˆ%e(íú*A‰7=~Œ£N’=«[~V¬Ä”[3cÖ ÈcQL›ÛxñÞ×ØŠ"œ¹qmÐt‚xK²Å³!¿²ÍÙñGRE4sD()ËP“3~*Âm« 5¹ª8§cÓà ¢®*Hj/<ñ¨ã¥/ý˜°;ß9©›wë%t@ <˜É1žñå-¨H×&´tIJ#–âp›ÍÙØÞSÆó]Ç'¢KÜ*äêôŸo%!Íü:OáºA—¡H¤BÌŠ§ã7…&âyÄQÞ¦º»ë½æfÅ3‡­Ë7}:Ûžw.ß>q@ÿ¨m¢ +¯S,«' TÞ…¬¼×ˉ;Þw•žb††âFòzó§aIöt®n±\¯öÄ3¶Jj¯#ã€5;÷çŠÄ‚çš»&Ÿ§ŸÏáf§_²Z[£âšÚz³BHª^p¼ñRÏK{^Ìv§ÝÒÑ–m™Ñn- „ζ-9ßdUѹæ6ï>s]>¸Äsþà;šÅœº9wŠ"~Io(¶ih€a´ËZ '»Ù:'` 6G+Éñ‡óTqbˆ³qÍ6Î øuGçÔ¾} ^i¾’2”¦—ûï/¹iÕZN±ﮣ]mÀ5Uøût§³íÙ|»kn:Ûôƒl›Y{ï$í zo"@týáhsxª†›Nµùææêw½Ð|uÑ9I¾,fÔ1\#_éxeÇ+ãåjE’ðj{8Ó‚ã…F«« 3cúºxšÉgÎrùuñ«vJÖ9©×Ð~ÐN·ˆg´§æ†VP½¾Ÿ˜Él‚ÑÑpgÅ“[w}“àJj-qfÌÊö¦2ÖñBÄáú»f@‹b«D();q·äâ5‚’':Ðt@gš»Å#´¢©nÓ|㥞—ö¼ôó¼ûuÓYR†Ò®o˜'öµÆ@HmèjÓÄ—»ZÀÓ.šGp¨’%‡PF¾úîèx©ã¥/ýàuÑ€krûVÄsgÓƒóÝ.Êçó5Ÿg¼›ŽÄF'ÖË‚#\ÁÄ’ÚØØÖp¼à·t‰ÙÞT®¶áS}B€jËCg›$žq¶9Ÿð …sËîæ-X€šB/=;ÅÀÕ¦¦ë‘V+ðÒÜ[O¿¬T¯?9Î,ðr•¡©MË÷ú‹#p¼ƒ# §…#® +œpL¼S”ŒãF¼ÌŒ% øn¼¢WDë˜B¦Šz¹Ž;Þ÷ÜIñîЀ[K˜ y}âŒ6¼SÃœ?¸jçF VÙJ œ« šNt‰eˆ%Y—`t\mÛÔ#ѹK<çj.1Z'æâéø—z^ÚóÒm°u'*¢HÃ<œï¤"fæ+±ìˆe†¸ZÎÑDj,£aV|<X’ÙÍñJQ¼oélß g 5ã ¥ùþ³®½¿®Å[¼,)9‹wV:7?Š×1œ±56ÈÕ¦Ã*¾zÄÝX+¨^ïm'Š¢ZÍL—v§– +«™IqH“m[ íJ³Êá‘n +:ÂÚ©ÔíïOÔ@PPÇÛ¶Œâó‡fuZØ˶3h²ºIQ@D½¹®¨„xM=ÜŒÙNÀ&Éñ‡%=8\ã‰çÁ\-\?ã*˜\W[8ÜŒ8IŽÑ!$%Дôâùž´qB„ìáͶt¬eÇZ¦¶íAë9Ù‚Ú ¸m¡ôû?öË ¹‘›‡ÂûœBB‚¬s„9B–Ie3÷¯úÙRd³«7ûW·ŠÐx33öHòçפ +RÍÝƸ›öÜýÆ TÿÎØÏ8Ð’¶î·Qu7´b}Ÿl°ˆäfÃ|'„’ÝmñI<ÜÖO¿áÂå/)A.äµOâ‰.¢xÄán¸pÄœL³›G÷ûƒ:bZSGìn@&oƒÑ…÷ªû&­'­P 4hñ¢!^ñiXëéav$±³zÅ}Fb#¨Å¼±—wsYŒÑz1é0RHu Ñæ©gñ¼«rÚnÀó”8Ü•nð¯®Ø^ÌÏ5µC—F…*ñí7ÝCÜ©é.éˆeE,#‹#žÆ•!r ¬V% +ñö}4Q.Ð|l‘‘¡&ø°˜èp©Ã¥.}â¾M›Pi7ÒÙ)ÜUbŸ˜ Ô¼ú>%±T ‘oWœ©1 ”ÌÛ¹öTc;Tc! Š9)lyìÚwKühÙeÓÄ×w8Ë΀µÒ·Æ'j¬ +Rm»=WŠ÷*ìê+€L^LÜY±gÅ5+^¾®—G‘Æ‹àxÇF¼.€HÛè<÷F˜ãŒ`˜Ï¾Œ:ZìhqE‹Û´©€¯ïÝ Ò¡`pƒŒ Ún¿O5³.Þ†Wš¹ž uq†Ú¿¢`zú`-’m9_W¯[&ÜdŠ Y#µ…pÃOã@ñP 0J 7pÎ@‰½æpDw<Ò»Õ€µR}Ik{Mq¯‰ ‰Ã\ñ´åÌ`í +dq\`µØV‚=£iÚÍšür^D¶/µy<›hJz2ñAnà|Õ×¥=èTû¥7Äw;S[…R=3Ì»5™K:¡´djr¼Ív_ßñ¥¼ÔáÒ +—¶åýN…óRA r¡íÌ=+¯YyKÛ΃ÚÞ<ønˆG©›@$WÛVêYiÍJ—vN*‰ÎvÃîôõ{z`V/Í&ô/)ƒP={¿­ˆ‡\üÅBŽu¹P© Q XëéC÷«64[~»-âÿÃ-⑃³éNy¯ïpR¡dq q ñ±†ˆ¦ñw¦}³L3ä´}MãªÅ‘wJâxGgEH¹xÑŒÄf€J['ö¼¸æÅ­ð=2Ë ÔÐ=ã>ô•žWÖ¼²O_ìˆqEŒ#úÆk”á¦.`I çŠ@-B s mÉ + ’›jêROLkbº¼Ò¿ZÛkÊvÏ£qUHu ·O“jdÈäõµ#6ó^uÝlPI§OÜîêîq±NN[|ÂîF>f¿eÓÝÞU7ƒ h`ئ‰ÆëqäYøð,­¬he€–ª³zËxF}sÑM Ÿ~jൢ9ñ{‹í=ÄÝj8kÅY…*ê,åãˆû`ó±¿8JõZÄT.¦äÚ÷ ;Š6g äî‹ÃÃìÙf†rÁHÍ,Ü a‚F½u½Mãˆkô†ºàÂ5´€7'‚d T*I¤šK|Pé9hk2½¶ðpÇË+^Ñ7\ ¦z=3§$6dòˆ'êhHNZ´ŽÆ™Á8{Ä{çlà CêzÚ +•@k-Øy¯šÅ[ñˆãp ¡dq¢c||hNàuil'›ôIJ&–Ë®¥1®ˆñ²½4Hk{Mq¢}ïŒË“ÇJ,K“HŽ§lk‚`˜Ý¨˜PcËPÓÙ…¸Ã¥—V¸ô‰ën»mDJ‰h“Ø@­ýw˜™ã$ ’NŸ¹Ý&v ™2y¥ír@ßë·H¤¦mYv†6d´Ž´yÒF1]þùí÷{õúë¶ïS…„·ïÿhöÇŸ?Úçþlvùù׿«udÀ÷’R¨èJnôªƒååqPÛ_XË««Ë—í"jþ÷Ž š—rû{ù-9åûwÛûô¿—ßþ}ÿ¤ûW˹½£Wãöï¦ÕËß«§È÷ Šæù €¥û¤<$žoRÚ³€Dådàw¤Åú°v¿lÐÞ®Î}Ñ©›ò>wÙ´å=O˜õ-tXëK‰Ÿ-Ýe!>}æŽL iÁnu3׆‰ÏÜPË¡Ä^D±KÔ–.6Ç %•{Ýâ]FäÝZïj}ã5Ò´8i¬Ü:r âpM8X¯ µ4̾+ÚéöU(Y\âOpOÌkb¾¼pàÆ°X´®5Ö5GV°:{ã8â>ˆ¥#–±\¶Ûg ÅÑÚZ¬UÇ©€qöBm¯ºh÷Κë‰t~¯·Ó³!šÆ±²jZhÝ›h>GDJ³x'†DsC&È…t“XzbYËq§|7žëÉí‡úþtO\J¼M<ÆTiégˆ™Ò ¶F6ÝI|}‡3yíŒÓ²¤Ûé­ýHKs;yÜ»âüt uÇÔ7"¹ûîCaê‰iML—¶K²´dñéS×w êˆiEL±Û‚î;[\áMÝ„ÄœkÛådàw¤ùµ˜£ ]ÍíäHõ•E~èðøb9G+òñêgwÞÕ—ûX:bYËÆát¸c‰!—íñTmë¼2H|óãCW¤Ò|œq£*¼±ë†’ømR-Þ®ã”ã”Né¢3]¢a;̤ç•5¯li»Ž†uýhˆ¸â¤šC|†‡<áêkË5çMÛtþE(YÜøýà^mgGsCZh½E<ãz“ U^ÚÙŸ½äÂI¯óHF\m¹‹¼1#±q¸K.œÆb­ #"6ùrÝí¾å»â¨ug TÒé9ÑóRÇK+^êôõ‰£ RY$7'æó0§ÒNŽìmè½¼þjoãNmâ„¢õ5i¯ÌìtâŽxا+Ûsœs´öÏ5·NN—˜ñ¶ã”›ËÉ6îp±ÃÅ.n/Èe€ö)Ct¢âö`ߣJĪÃ\8JñQJìy÷NŠ=)®IqƒôPè2iºé[éyeÍ+û&m$ÞkÒ8ØBŽµ,ÂÉK•–Kc{覱0'ƒ*êhœMw÷}HÜ{B:bYKGìÇp}yC#~“…œ8ÒšÓ´hëÕ‡ 'Ž£Uàx9,ÖÖr$W„*—áªg rfpÂEÛÄ Ò^™ÙÎM³c½[€µR$ïR¸S.TšIYö›7q3:"ÒðĨ.ÔÂÕàp¥’±#¦š‚Õ42 ·ê8Ø©Á9‡ó±…[Ð%ȹqsÈB\7ý;L¼¥ï¯ë]•´hßúþ_úrÖeÇyÙp™ìÔ¨¹åBr´½m™}]Ø6‰‡Òá‹$“Å¿t¶{?PGL+bêˆý‰«íÞpÊûŒ“¥h‡+露ËrîI·.–#Ä_Ëx®ŠV%´¾<Ž¥#–± ÇZwœ(±7u“Ñ’Ê¢­›j3ú7ÚñðÜW'jŠfc3`­/ÕøÉ`î•EãÓëÄ/bÁâ˜Fª%Ë 2„’ź…‡ÏŽÓs¢–¥²ỉo_@í´‹W4YA%²1'ÇBáÏ–p+A*E*-&²§ï^uÑî74ãâ'ÐsÂ^eßgʼn@.äùö“x8w©úV[¦.òp¼œ°UÔ!¾=›=wÏEÜ»X:bYKGình,€VíJL)SGœÊõÿüö»´GÑZÝõû¤`I®ßÿÑ>ì?´ÏýÙ>ìòó¯Wj´ëËpiVíÌ5Ä•|wœ-ŸÛ~výüÂ’ýý²Éq,Çð~Ná G¢HŠ\Ïú³ìÁlúþÀÈù«˜)=X¯ ºkQ¨tú§>³‚Áˆ÷iÜf œoïÈ ùŽñþ÷ý{¶4ôù[°üñê·??çãÁý_xy?Š÷ŸÛˆ¨Þþ<,xÔ· Û2Œ¶]Ý~]”AËoâk-Ij¶‹‰;Þ§âw"HmùÚOVìYñÈŠëÕ³ek~£9jÒ·È„˜SsbAW¿‹BÖÒ#ÀŠ# ?SvÓéPèžSjGÇó‡u Ÿï”C¼ˆ£¼Ò>)‰§ß ‰[Ì”·²û3±ôÄr$–ñ±Ú`GŒbü"þ¡ÚhQv.Ç–[W[?°IÇf ¢8ðáÙ*6Tije·å}›Ðð6ó –Õj«\i¼¹Ø ‡˜œïŒCH,`™™p¼þnçH¤5ô<훘{b>óˆx­¯iË?® o9ck—Î"µ:¥ÖêÊ8xù'TëàÄ@‚.íéš.¿Ïá4pÆñî]<â€ÎV[Ž·Ë›ÝioK¾»i‹ÆvuÒìx±ãÅ/ÞF^0Ôp‚Tëå™­×uÄt ¦ Ç»w’2E"æÖ=ðrg[yïjS…ÕHÄÒÚRŽ4c!°ä%ù-ÝM*ԔƪØgóD $Ä8ÄŒ ´ Ú!þäÅž¼Øñ^®ak[g—ß»…ÄáR&ƒTÏ'®H™S¼.-Vä~gY‡³SƒK¯×™ŠzŽöÉK=/yéçù.õ_ShfætŽîÆMúÙÌ“ŽXÄ25ßxÄZú¹ZÃïS-4à|´z†–N¯\zljçðÎ A|¯q6=íkú;§DÙIi[6ª ê^¹%œ (Ç&ºOjxfÆÔÓ˜ffO³{´kÇ)ÊD"–žXŽÄ2šñ1cÎxÛS,yýhKÇkª­ƒú‘ât¯{‚Îò¾LœPj‰­8îÁ=1‰ùvjéž,vñˆãp!(V,æÄí8£«áE¦¶4dM(bÚÙÆž ™þŒ©m‹¿&<®žoªbFÅ?xp¸"PÇá¼"`¬bhqtLUAuBÇû[…$v¹Wôª˜Ë¾*4ê±o4ãP)Ó´z°ß~ÚŠ¯/·Ê‘¯¶‰³~¡… gjB`ÉSÄŽE‰´¶j—®.J+g®ŒÆ‹lœÄñ*+Φ§õu2&”¤—¯[î1=à±"füBI@%yŠXådxøÅ„-˜b`1Èd‘²"ØÎEsáhæÔ^3ê»D²"HÖgÛª!??߶V†’¯öß•fP¥@6„ÔRãZà÷C}ÛëJrúúÿ°ÒÃÊVF°GóÁ}a¾ñö-zÑŽ¼UkuâbGàh“¶ïy®Ü¯ÎDí5Ã~¶…ŸÅ;/‚•Iby¼ã¶‘Æ!0õÀt¦ðqÝfñbÝ2’—·Íúz­€%Íl£ãM¡jrúÃY1 œlj¶Ÿ'‡£9C-M(ã Þ˜“3Õ–ÄÑ/§ TÉÓïéUKÏ–-›žvõäÀ +¥FÒ¯0!º¸;ôÀÜó˜g€Ã•3¶áÂm“nœÚwÑٹݪƒU R®5ˆµöi¸ÁÎ +E¬GÛÒ‡é‘ Úªê‘ÑjÙ¯X»:ÖH +ã°šMGÅxf¯®Ìp’Ö%C…±2”|µVò*¤D¸fÐÖ%è—4ÖgÀáüÌ +ùÃ,î3Ø;T< âÿ¨ŸÅ¢)!TPÔ +XòÐx÷)fq® ¾Ÿ¢Q‚çâtôÅ6…Þi2??"¶”@.ÀÆÞ™vz½ÒÕöŹB}Ì÷-"þçÍ éþ;ßþùíwioÁòø:q›#¾}ýK{«?þüÒÞõk{«Û׿þ=¤dÁ7‘åf8–³àDYØýw¡T¿lÉ“hŸåö×Ï·o/o}1ëý­ßþ¿ÿŠÜÆóí«í1ýöòÇÇïoôþÙýG<žèñø¸ývTo÷ðÔà3ÝÿŽíQ-´½­sFHÌñ‚¥^Bµ@2ÆHómžÉoVôšXzb9Ë9âë|1c© f6$Þ¨¨ÞO¬öøk ïÒü!+ç@ó•v¸$oÝ>Ä-DŠ&O·„“âmÝ ŸnØî¥lãjƒ´*qÔ@†ÀUÆ·OjX+„¢ÎŒ×uî^ÃÒËXn®¬5GÄÓ1·kÀZż®]®ºm¹bÑrñlÏNÖMd„š(Èš~;£ó‡É×󇞘:b:Ó ±*H5÷–;­Þ4ÒïGÁÈèÊw&.|ëeÃñ‰±ÍG’k …cÌ^^È=ñ”¿X¸r txrº¿²^}µ´OTxÂùD¸Ã3^0s"@)n0o–uñN9®ÀÉœ.±er„;Œ¨ÛÄ>Æ& %áÕQ·rÄáê™A/ »ÅÞÄx;µx,@¹½W·¿‘&Ãù‘V7P,ú¥\uÃ#^@B9†ªB¬}W¯®lK:ܱ¤V+_M|úMþA*`jc¯Ø¦hÌ»`ÇR¬âmÝÉþs½Pá¾ãN—øgÀÍ6O¿=ñÆÎ"Zpd<®û¢¡4Ì ÁÄ=B—О>6\5pÊ ­†I7ª bèwGùª@Ò|¹E¬ì•Y9G"N :qmCnñbùZÀóS2Pb÷ÐظóbyK'ŽæËš–;è8ŸÍø…¸BuÂcÝ™ÔÛ±tÄr – ;æte½zó:Þ©#É¥PIcgÛç¨S©æÆž&~ÐgwîS¨!`j˜A’êè·ó‡É²æùÃBâPú xUVO[Ç›±V(z}j¬#æd@|uU[µtñL­ +˜z¦¶®¦õÄÜó˜gˆ¥‚šE*ï&@5gL=1‰é܌窚KÌ +šÔ1¶-Ua ¹âX“3ž9ffüê5°Z9NçD€RÜ´Þ‹±ãÅ/ÞÆ^í%A¨‰â--^zÄó‰pµ˜·§Ñu6<=㧇ÒJbdHTb'•ë;üºà hmâò¨[hlá.;Î +ܼ³b=mÅzuÜųb+ ~cûîkÜó˜o_ë?)ŠÇ÷s\œ „}+^5c;=ãÏ”Ï&Å[¼w^ìyñÈ‹ïÐ&æh]›¨’1ç;­ˆ±M|PZ¡èõ½2îÂ[¬â/ÑðÊù*Hõî¤ÎÕ¦çû”ø,¯ë÷×ÕñÆ-«ÃS™áÎÖÀªŸÊÖá*`ê©¡Kåéª6Neîˆù@Ì·™T6PO¿Ë·m®Xú´ +óXÒóÊ‘Wn§cæ {U, ’x¢SÄä„gñSù¯!p•±£m£N(ÅMŒõ<Ãë;Zƒ´*qúC´ù†ëÀá6î—£ýšodG‹×ƒ9S^EÓ®öL+]³S5¯§éÉ¿=1˜ñ\v“à +¨/ŠU#ÖÓ#VWÆUñê`^ºxY9Ç!æ”AÄõ¶ï¢ ˜ŽÀtˆbmÚ…»ªª:3bLÌ1ˆy†8ÞâÌèMãÖ¶q…¢Ékm;× ÕÜž¹%±€©9›·¥WC®èô nÆÓ òlÆÇæ6Ó5_]ª\ïÇ ›[¸ÍcD âqŸß¦Wp6P/óN¶Š1íœ"üÚ†`R¼­[B‹§gëê7œ«qº¿²^Î'=Í÷‡r‡{ð6þ@†Àu¢ýHO,GbS;b<ãm"5j8ÜiW@+¹æ#0€³éIà·'M°z·è–{¯‡ë>$ %a¨ËN iv7oGb«¾W¬">Ð/:|¼ŒwÙ AJ%’WÄóc±{"zwÒ†ÄÁn%%¨ŠæKV¡Š:Es]3îg,±ˆejÆ T'®}fïúÈ +Ü +²G¬§‰õ)ñBUH{M’H ΋mÞõ›GfÄ»J;âÉÄ›!þÙÚ<§û+ëÕ:>ËëúD5‹älÕ€ÕÓðŽÄ\´x¾<•†òý`É4ªilj“¼31·p¾©…;FÃ'”ruèx±ãÅ/ÞƦ¯üD‹9ª +¨×Ÿv+5*˜kd<¦åž–´<¢=ºÚŒ†_¹A±q.ï¬Y9G² ¤ùr›XØ}ðþô·ò£­mvÄ™[-ºëÿŸß~—õñuªÐZÈÛ׿´7ûãÏ/í}¿¶7»}ýëßÃ4,¥¦8lîYš{öÓàTÓ°|ÿu¨UšïŸX²Ç4îŸf öï·'2h¾c<þ¿ÿžœòûWÛsúíåßßéý³ûy<ÑOãñq›ÕÛßþ¶âEš…¢‚”ûÏÛý¯™$ ]M¼0¦ÚÆTÓiÆ +9“G|–÷êùZÓ°TOï´ØÓâ‘G´ ý³ÝŽXÉ⨬=ÍæyÄvóUH˜#·«ëg§·-=ðY\Ïr+XJzñx;Úa³Âî9ï*!vM˜èòù®\¶¦_Ä«³x•~sËaO Ð~ÄÈ J©n²-r²¥YÑšCâPúmWÛ‹Bè÷~¥&âHþÉúo¸[ˆ*²E"ÖæÉëºÞæh] Ç›¯4b¼ÜÔÖsj5"“7âå‚ø™*0ç‚î½¹-ISó¬aCí’¶e³tu^XÉ­Á‡Ú¸x¥Óì—ArÉ E÷>E_`àL$€Ö>ÂÁK;¼™ûGÝ-JY +BU5]ÉHP\‰¤ºšèÿØLv‹Ä´%¦‘xþŒ=¦I\mÁ“ h+³‰Þ—‚{¾Ð“®jpqW£0¯¸u o]6/&swQ +ŸÈw9²uTW#WNKèfî µÍö†ß7õ˜Ak=lF§ÝaþE6šCÿ]lã¸øÓæiæËÕ¯Él8Ë©A¼5绞?äš/)2=M^˜òõ¸TŽFêO£fÚ8, æß=8ßÕ(üd+ÊFL½Y›çz›—˜«{b”ÞWóâ\í3]V#A°N³»Ü¥®æ鲆·î,ï»´×eµ„wî˾´û-{Ï°2»Ç]z+t®™ˆ­A‘µÏåô›-QrP)Ñ|/SÄ…[—/Ct…ŒÍ5ÔÄE7ù,îç¸Çùn†ø͸„iˆ¹xæ!îy\˜Ô=Í4Ê=+θ6¨h–eë˜hú•»Ò‚ ZëÑ|ìE¤~48nr &‰„3v/V mA«?š)­™{E—Ù÷nàÅ7¼xÛK?_ýèˇ&öF×Êìºq•~óùCºÏ(`ˆ¡†¼Ì_ª˜¯ŠâO[œ×t6õ[×Dò̘̟f‹ˆ»ÎÙh+h ³Äj´ÝSem³Så¥óÍ•ƒS©!ݵ õ\8jžgyߥÅÓ´±ri7m®Mè¦-ϦqQ¨•"âË7íÕ¤^¡+F¾°à|“9Y/@Ö3eÞ„ŠH×+Äg|M"b÷áÆaÛ\8ßæ%Ë qöe¾Š6_K—|¨`'ËCœ+«1¶ûkj4ßï¼4òÒ–—ÆùÎOï¾uD”GÔ}뤇3^Ø<·nÝi€*²9•2]Çöº|ªøJ˜ cÏlÜ8ÑI7ã„D<·Qëyˆ¹0H‘L~¬ºb¢'lLâ^!’(Wäó +.”8Ôñz$ßÍãâO[ “ÐzÙÍ}*Z”6ßxqäÅ-/¼Ó·Îï]§0¯·ud ŠôèÞ­6_U(ëwÁ뜰{xžàºÚ‚Ä& ­Ì¾u/¼¸áż¡†ýYÔLŠ¦–)aš?Íu»Õ\Í‹àZ@0œñr ç´ËìzÕÂu§­m6ío;_.-< Ö¸„œJ k\¾Ð. ¤5ÕŒ³ÅqSK”Û¹¸±‰F6q–÷]Zt‰ÃcáIºp›xˆ/53‚Þlv•TÖ;t™-„Íx]ã_Œ÷+”ÍR®v ‘H¹+6 JPéש˜w*ò©‚ŒÁ¸F3¾ÂÏÚY8ÛÇeÛ×ï:³ÍGL^5­åb͇мí^‰yKÌ·¼" R©‚ ƒPçJi2ÐʆVÚÐ'„€4¢eÆKÁ°†^X¤jª 0k`lK«‚t g|zíÞ7¶³¼¡ °öíF¯šB©|b™8Lzÿßþð©Û'>2ã_¨ZPëªéiUèîñ8'â"j€J{qG^ÜòâmçÔ]è¬ÐºD‡yEWË׬cH|¹"Ž…ŸØÕ R°qÃ|iä¥-/}è|ó¹ZghÄ‘G¬¸u]Á´×yIb«P Nw¶ñrÐ@Lbºí_2ãºw9^)Ig¯ÜçQC>âqDÇ¿ð #èÍ"â³*Þï±­‹5œM¹\´žÝ.½z±É¦vÖ„?'“o®PY +h)³—íìt£Ù²kŸx.´¼o‡Çø»ã÷1œÃÇX??dÛ¸t¡½#ÖD[Gò˜q¢A Ôggˆ+·.Ÿ„R[ß%–‘X¶Ä²G¼-F8ã†o?¼8,F¢Púâ…ªÜCªã7¯+˜Ö€xMgÊlùî]²ùæ*Ÿü8‡qx½e#@æ}ù.cÁù*#‚TÅT»öpLŸ's1@¥½ù^V^¥}Daþ(5«sŸÇѸ4@$Ùõ‰iKL·¸6¢uè’¨%´à|¢Pév£ÓFñ>ñYÞp¾&Yð›8<ßýq$¨ý¢É¥ëEd½Y´uËň{n×àÌ­èjÄ Æ%ظ%‰õþ[h¿É­Þë#\ÎÞº^ÜðâmßÕ2KÒGÍ/ÆŠŽÖý5Ts¨!_L˵l©h½JÙ·Þe–ëý Ï–ï€{$Ÿ}çåzw Úų•œ›­¾KÛ>âþ†~÷ÇmFToïè„_~KC­Þžxÿ-Ëø·|¾–Aâ—æš6–øÑÒõð~éšö—.ª¸Põˆóá?oEGÌ©‰É$EÀp&¹šøˆ‰–Ç&Ž˜*AÊÕÕñ1÷ļ'æñ©^ÎŽ9a»F]?~›1õÄ´'¦c3žQÅ#?V¨I9WäyiBëdžeìgÓƒ3~yÇÀ+¤#–±Ü&¼"17ÐÖPÇ·ª\•Ð!~åÅž÷¼Øñ^îl +µÕ ŒÇÓ0)¢;âZ,›kÅë…UÙÎÍxÆËs²ö×HÆ8–“*$»Ú'ð(¯;Ûp%>T)u †YÞÁl¹cå+g«í¤I¨%T ¸º³]Ðãeç Ì^U»¦ø<™%Yùï3'.ö³Ï¤ápLl`Å< Ûa ÛxʈŒ8T…ƒ‚‘$ÜÔ œcE]´à kËQ"Wo*–žXöÄ2´‰£¼î|3$vOÜ’ó-`ì˜ÚYãí¬nøn§ïºfþ&·`nT…š”㈂!g?›ßˆ©'¦=1ˆ÷ª˜16_±¢ŽsòÊði‚èp±ÃÅ.ÞÆž/3 ±\XÝ;Ö©Žö)dKZ ˜¹a±ž4¹'í %œÙÎ*CÖ@ã ¸uªJ¨Ê.Ü$ìYÄ’k§2TbgÆk‡‹¸p'Ñ 7‡û(+ž£õNcÛ2ŠKûs˘nÀ×oD< ¯yêR#j˜{bÞóí@ žš°[ÕZ8£[~V«jµ +äs΄“›‡=í<‚ 嚯=qÝä'‰ï¿nìUŽSs³RÆúLŒýÎ5K_¿qf‹íŠ‰Íh:Ǻ™­¯[Î ©º³=Ë;^ìxqÇ‹ÃùÜŠbu‡ÚNšzI±d¶UÙ”3žï:ý!œ†9·+ë¥ò,ý†Û6ƒùCÀ&ÏÑÚþ6Q!–‘0c+=ÙÅz¥‡Ä `(›¨ Èêå¡q"±Uhá|5qÇûµŠ%#Cë=®O¼Yñô©[ñ“k\%H¹æk£nï3~àáTA–A\/Φ‡ãN‡ÄÒËŽXftœ +ÊnZ°RXóâ¢|a>3Só ­íŠ>j¾¤xu?ÓÔ8µº&s™ºÆ)™¸Á±žEpj[])8Ü:&g<³uO+—VÀxÜ"¤‡•=¬Ü‚Øï3¸þÞIJÀµÔ86Lš!1aœùrjó-Å!î,b² ÏXÄsM˜ªªgÃkšš +]Þ„ñðŒýî­NĪkœزëj V‰pQOÂÃA´º3~SÅdxÌÈø¹ðàÜ®¬—ÚÄÑé~šªÆ( É5µ£¼Gç +ä;ðIãíp±ÃÅ.Þ†b°¶Èe¿óèáΣÃñJÇ+;^™o<ùÆ ÎH’¯ ås#NÀ²9:^qÆd ¨¸ªX¬Wþ¢½²ì$0›8mËtvNØ®Q·´¿¶ézöÞiÛ—ö™P~PÚÅ `¨Ô¥aR†J,^°Ã=†ÄÜóŽ˜§æ« ì5ŸOUÙ~Ô«›åw¶¶jˆ¯Š³f|ÞºAµ +ålU c8'kõ5¼ž"¦³0vÏY7öÀ3¢xn¥#QÈœÇ¢àž˜÷Ä<">sÆœ›M 8•â´w¼ØñâŽNØ¥ÍÀœpΦ‡ ^Á +&NtŸuä‹ ­¬MmÚ…Ç#ž„ŸËŠX‚˜=nƒÃ6ÕÞ]1($»Z =í”x?Qƒ àLW[ï×nÁñˆµéXB©B ³qéYfƜەÕ%>#”Orµ€j¨JÅË·Õ@• å:NŽeZO¬dŽè +lޚѵÊiâë‹{†Ä„qfnÕ (ɯo¢žXöÄ2ÅY‡®Ê–Rãù.$ˆpQgŒÇ»çS‚8W ¨(_Ø{Nua†Tñê&ÑñbÇ‹;^¼œj¢÷iï¿ÉÚîwwçË/ïxyf¾©µˆRœÌ舩'¦=1#ž;p®EX…flW[ÄYŠøehWglwŠ"Æ +V=A¬xàbY0ç Ì^mϦ‡-X¯>pJÀµ¸r½–Æ)™ä8«7P./«vÀMÝ¥útûç·ß%CQ½¿N‰òËëßÚ½þøó[»í÷v¯Û÷¿þýŸ_jÑ»a–öh7 ~ýù,m߃’ü|²ýû2ŒíA†öa?ÞAóFtÿû–œÊë«`9߯¾?|½Ïë³í#îoèGqÜFÔ¾êßÿË'Ͳ5–ÒNyÍÞO9½‚]¿åäBÅ#·‰ß;.§fB:$žŽÔ1ñŒ…>Ú’Vªb™NÚŽ‡¤ñŒ—1Qbnw¢ˆ¸mŽÖÚ–C|”÷=ÚŽuj¯ù<ú­­u'Ž¤_Ujõâåý4©Aš¢ùCU NŽ"ºÕfºzW›)—øL©®¯qjÕÛõâkTñ䌅[Î…ÒqœdèÃmc”•ï³¦*˜+B4^.fÕËåW^ìyqÏ‹·Çgík»¯Õ&•«‰{KG,;béˆ} gXž&e³//–ì=‘L­•‡H9Ìlã5àx‡qÛäBôÉÊ9Ž“qÙîDN¾uú¥ž˜öÄô±ú}i<.ñz3&¡æì´ž³NܹÄÖ®LhÆñT¡”8ÒŒ !¹íý´dþÒ:æ„P‚õ‰H]˜4ƒ†RD¬ùÔoÍ ¡ú0…Ùç¨Ö¦ˆPíÇ,±§ˆÕæ«8ÔÎAÕ€µº±1§ºµË('N­í¡<8^*Wj²xŸøîÝGˆ»|p‰¹#æ1OsÆæã˜{nÄ.v¸¸ÃÅÛ°Fä¼-GA,˜¡Š:Ëg6=,}—¸Ÿ®tIJ#–ŽØ­ÁBÍ""…2ç—UîòÐègL1íˆibÆŒ9Lq'a°P†F•!…*>œh+>Ω»fÆ_ªø„*îÑf[‘œŒëÜŒz^ÚóÒíKeÀÄH©9ZŠ¯B!$×~O äS‹¥ RÜL͵‰õB™”åCGüdï1 +ækdõá~tÖŒÏÛ8om8ã ›g'<°á)=¸¤ío¡vONùá^t~Ì=µÕ R&Bù©˜ë=É{?5ñç˹>å#Ž±BÉâú/VÄõ›FŠáfÁ´»UàPJÈn‹Cà0;‘ä_aqaoÖjç”l»'áxÄœ¤0žfé?öË 9Žc¢{Ÿb.`¸€ +ÀÚGм´ÃÝ?âW“¦\í°«ƒ]Œõ79¶s€ÌD’SˆÛK• ãø"]/­’–¤˜±+è;gæUFvå™ÙÀZY> #1ļ#æ)bIv +Uð"‘“½ñÒÈK{^z¼?¿Wfqº à¶•_’<Ž–¯¡IÅd>‘oŽ“ù„"´Tú² ô„Æ$úæs5ÓtÄÙ<‚À]ƒ†yK½‡Ä?öŽGbÞóH¼zó [˜utz*Ö{1õ»ãS+ñÔ™ôŽÄšº.㳇ò6@õè½áÒ ½‡úÒiâ§#|™¾Ùê0«@IuB/u͉ÛHÜöÄí\ÔÑ@L;bzÌDÝö$ŽêÚ 5fódÁ!¥%;넶Í;nl—Ç̇°…AL?5˜º«.]8³5à"ÇV|bçþÎL6Á®½[pu\·y#qˆÛŽ¸ÍkÏ5ùˆ „~|Y-¾4 e+AÁÄ<óž˜?—¸ä è|—GªþÃÆ€¹ÚDó-éyZ>‡HØ&LA˜$ÏT°Û–ÍÑæ½ñÒÈK{^x—Ó¶íê8Þº6ò¶=o;Òwï3¾öžOèÖ$–Ïð…ç»:L€ZÍ×UøX`ÙË° n'Y:Aꦖ¦I8¶pß~ˆ;Ý$Ö÷à–+åRe†fË /à}ëô‡ƒm›²²PÛí,Jµm©ÌL XŠ&J¶¢àÞASXkÝŒ,UÕIW仆gçýˆ¥P2SKxy"§â‡Æ<óž˜?UãtÅ’¶Ó3¸‹âéÍ[Îý_›Sn§óΞùÜâ¶#nq\…³T5Ö—|Ü|¦ç÷Ø#f¦á+Ô`6ÚZO¢Œc“¾i5ܱX&´_m€êÑøÞq(œû;K¨ñUÄãÚñ@Ì;b~ÌØoºâcÖJ¦ŸŽXŠ¦š +)¸y….Öø¬ÂÑDpIW%²RÚ¶u‰¼XJ21—ðÌÊÅmX¡¢„·Ñ5#|ímT¡å±S&Iä ¦ŸZ‰ºŸ­Iä»:¤p¶1v‚OOÅòË.ßTu;ÆàÞÞxF…Ö¶÷ýõ˯Ú{ËëëBàV_^ÿÖŸõÛïßúc¿÷g=¾ÿñ÷«ê¶ÔR‰vbÈÛR{Ù~.íßo¶?_Äؾ@èxÿü@w Ôíá/o¿¥”úö*8âë»_¿|{ÎÛwÛñú£¯_w‰Xþ'UYqKUì QÚþ£|û iü iÿAÒðA.ÿÄÉrв cD{ÃÒÍÞGV9Ðw–÷)íé†nÖ +VúÂ=¥½c¢àüp"îcõ¹&ºÿamy&‚[ëáïMÄý*¡`mh<O»Úsâq*x æ1?Ž§B:(OÅdnÌLEˆÛŽ¸}Íä°ÚŸT/¾ã'ôŠ~> +*j<]»Ÿi<ü“¿jõ5æX¨t?^mÇgqCyûP£^S'æ¬8a£x îg¹"Ÿ kï?EkbÁ +¬¨InÐt!D@æÇ)×Fâ¶'nGÄû”£˜vÄô˜H9u¨˜IâRA„ƒ¾¬úœMp„œj`·,jÁMS¥\ƒæÚðŠ¢öÑ&¡P¨y¢2l - +ŽNEĈ °§GžƒƒÕ€°¬.˜W»AáhŒn§ýØžù1çÇQ‚ä«‚Û{‚Ãnˆ¼É1ž‰¼Ù± õÈÃåc|ºTÄC‘Ž˜½B««äÒ1®}ñŠ/ÞÇ4>ÉMªErÐJ!`¡ÕÚ^9¿¢@ʉ*›`VŒ6î—F^ÚóÒÀ{èÁ­ké +f:Gc0Æð´»_ÁÌçR*ˆp0Cû™.˜OÛÏYÞ/AËVûsºôÿ÷ˆu¡I,¥µõ7è•å½ª×Cž®ÏløÊ*Áf€ýÍìR5 Ž«4¶Ó[¸x ^$ çûÌ\'G¯Â îË«Ä••8•¾ù¢Î +µD']Âdk[\0wÄ2ËŽX&ˆ…zÔûD‰Ûž¸}æ'+ñZÁ +3|lj`pªA_»#q†Ùzû1=n?·q6) +Þè¸O¯îÄ‚M£†¹Â'¦¦8ô ÂõwÝ•AÀBËæ…—hA¨Ý,’4Ì|W¨ööãºZßKûƒfòa¬Ðo»èîx㥑—ö¼4𮦭XhõMw¡Gä»9¤ +–Å—èÏ­1+–õ_élاBÓyº?#¾´{gŠÐÍœM¡P Óù~úækðù.QöþΊ‰:qFŸÈ¦±‚º{Åt“?Öx†ø=5êmgyõó‰/Ô'Œ ¡%ê½aö÷§Ý`Å“#1cÅsK+˜z´tw«ÚmØ}¹©]Hì Z=çÓebµE¸AáLº®vH”FÞ6ð¶o›ñbu¨˜Ê&2 D¾:!¥‚¯áwªb†•¸@±Õòž÷ë$\¾áƱÆ+n¤.\¾ÌÈwq‚`|qܯ÷¸áòà8mÄïLEgÅcoC,XƒÍûá4òÒž—ÞÕ> T½:Ûô ?#¾´»+–é{Ëô¨Ðª-&Þk;«õ5§ÌðuY7Ï%G¼u ¢uyºÐ‡µ»¶D[gk@|Ç©`S(Ô‚tÇ>‘¯%l™ AÕ˜˜N/O5 ,Ë{ñ•Ä +XìØ+îClµ?©,ϼ »qA¨½ /&xgZ[|æKlÄR¼QH|Cgsc´Cb‰yOÌŸJ¬ÙDF+ζxìRã¢yú$}:ÆC™›&¶/¤±²J@|Ö(žÎ0¤}¯d6Põºz".Ô·!4ËälB šË±Æ†ÇÜéãöž ±½~4g€‡pVÔƒ¥£‘—ö¼ô8Xº+ƒƒ ¡E´wáJý_% Ž»uølú²÷wV\­ï.8æ6.Ô8]•$èÀÇÄ÷¹:Ò•)*ÞIwó £øª»ŸOHÅ~$QT.oè ·®9TÊÏ=—NÁ…6q?‰… ¼^K|©ÆéÆXP ©æ6”øIâ Ä¼2ðÊŽW‡Vì œ)šˆÇÍ +¼`×c¸Mp°#p­!ñŠùýØIÇΠÕëÁDÌòÆÜœ¾ñü®¿–ÒsÛf‡ÄSû3U¨6‘s·©ùê0[íOê¿P"Ÿ¨ÐªéZâ½Æ3þ+i,¡ +®Þ¼“ +‡>QX‹»Úý|BêË;_“CÌ| F…JýÇýòëÖó__W~yõ[Ôo¿ëOýÞõøþÇß»íèç-¾¸|fEwZÈ›^¶_ƒKû÷›íÏ-¶/zããŸ@0Ôíá/o¿¤”úöêÿØ/ƒäVrˆîçºÀ`@õ¡0ËžèMß?b(«m³æEV«è(øÿ•%«ªü'3à)=®~¼|Îû»ûŸxÜÐNâñºNˆËí÷Mk0–zRRýæõûÎÿ#ù´ƒÂ‡JýŠo¥p¸i°;­ð¸i…»ÖX7À:ãž…ª{jœ ³X-YÉÃK2PÒ}Þ'ùÿAÛæÿÀ5§H»Ò­9*i_ºÏÖ™=áþòº7Ôn±úXg‚¨ ÂeéL÷˜[`Þóx[R~Œ¤wàÏHê—©¹#"å¹fç»XBÒ=Ü"ÀÞë_ÎIâh×ê5Ô³°+—Z°Q‡žu݉Ã6üd#ˆÖsص^ÓSÄlj›v³ý3wfkPÏ9΀µ|ÆH5 ö&|=I /VDCûãFûN;±Ñ2yªá¥ö0ZhlO2.\ÝA±!¯¶¼ºåÕc¼/&F¸L¶ºïT4<\Òöýá(nO ¹ª¡¸µ°§NW îD¿ +ĺG+íÑ:°`•Ô±àw\jqi‹K î0ß^Üአ+ÏÛu¦›ë•æ«óâ¼!ˆÀLûrx|Ï#‚hfÙ=pÚëXo3Q@Ñâ4öp\R½[öÜ(brÀ3ŠX6À2o%Bâi4àIÞ™¿ªà;g/â®7ßp©Á.€.û¥}"æR㵞ž±³Uðj9D+Á¡:¥$…ºÇõÎ7¿XÑÕOž£ãí*ësÒàœ½¤„eK$û9|5Vö”;ªmT0ÂcÇQí3Ç%òjË«[^=ÆûbB„C´¾¬A +H6ª ³Ž»8Щ!T“”Š·Ë骻¼=z3ëLw‰óRL`š™0"0S¯}èwÒ|gô« °n€õ6áfEÀX†ûåeú9—Tï–ý +ÙLxºòŽ', °l€eØ \´“ƧMøLŽp53¸gjçï3ñ]fËšSÚÃtb¬®¾l\0ŽŸEÛ-Ø,•ðÁ|[n ¨`ŠÃéžè½su²ëF@:>oבoåT—a¥¼Œ£I®çÆxzÂËCfl9pìZ¯Ñ0jˆ9ƒ¸š°3 iŒ¼`7ÈȽ}ó$s8ŠÛ5†)ÛÀfQ ?Ué gbZ<†jÙ„±§† n%Õ»Åw·™nƒÖ•ƒ4À²–ÛDD`­­a¡ãC¿ðFr\.Üò¾®Ø¸K zC’áÂL;Q»’TíKòwʾKžë ’J¶ÞJyÒ);Ëô®ØÐî“¿.€.û–Ðäï¤fò—`ÞómF¾ÑŽ[,ÞPÁŽ`©¬,c?³2xICk˜ïŒ5h¬`NX°—œp¢úéâÂ{V²…So 6þºÖ@ -mhi8[ɬtf{1$ë8îç\µ¥Õ-­ŽæzfÁ ¥L )w²÷b°\Ø{ª= ö'V.c¡@V0Åá„_n<·Kô%ì€Âà _g[3-Þ3ˆÃõ|?… +â»è·ºP–¡~§;ÎX3ú}"Hì‹ ä™V¦H&Pƒ.°¤"Òqˆ£¸Cÿƒí:„eÈ9I éÛ0ÙRõ +䥀[Ž,¹¶Jò¡$^‹äS%Q@ÑâL˜]ë5½=ãzg.Üžá.š¾°¶¿Ñ€%Õ‘l©"ZZjhiCKŸ´Ýá"X*ù¾£R‹J[Tº +ę֭±;’™®*P²ýh{|Ç#笙cX`ÙË pQð”÷£âšÀ(<\/¤–-°Ü¾2+Š€±ڇȀ¤W;o%CA®C×QƒÕ\+H ¹^iÞë’+šÃL^<«:‘ÒØ ´xY» +ÅíCe$†Ûdu˜ÉŠ9)tµ‹TÒJ)œXÑã-™‘š'0³ÞAû˜î‰+æÌJñ,( +—ýnÛä|g›6ÀºÖ‰ K* " UïêÃæèØ+ZY¼µ-ž…Ú3˜Jœn +ç’j•¤NO¿܃öXŽ¶«*á2+›$,ÚÛtôië]¿T³^ÁžqPfç»Xᚤd‚ºº õûÚŽyj¸)P²áž9 m³¹LòÎl.SÓý&.&T T*#Ý^%ÓTê’E¡<7Cé:Ù±¶Äº%ÖñöÄÍèáɉ‹—k–jÍ—Õ÷Ô&™¡<ö—Uit˜¶ï4ûjGÛsCÌbž!þÕÔë7\?3dûðe<‚1wUqAb¯Ÿf[íÃGy»V0Ååó=ÓÕÂg7ï("¹$~»c@¬ ±nˆu†8ÖväbÅ¿r;zÑ#Šƒq‰Ô.Ar÷u¼Â'^s¶x}B2ƒ'JC¯˜ìl3^17ã~òûr¹ŽOTEaPÉ6$žnò{Äg&ˆ$†”yL¬-±n‰õ15Ä´!¦ bö +ŠÞ#>!¡[=HÃ*Vù`ý>}] vÚÏ=BPÀˆ¾pç˜Qo¾œ'æ{b_›ëÃýùx¶^νóRËK[^º=?m§öˆT´wâ.G­½ "(é¯ñ./)(¦Þ|/ff’ ,œa2)öÅ@‡GÛ…­½¶~É\#~€®k9gN7 ¸¤^S¿P'ã’@îÑgo‹e +É€Ì;[楔`I|ùvyfúÆÛ'Âìj¹>GJçî{p¿²¬ÖïQ-ô”  ¤9Ðic+#%”ž÷^-)"ÕÇ@F–P¤¬#mÊïä\û{„0;ANÚ á KK,[b¹}aP°;ˆ.?“3žY~^%ÎEzÞð© +m‰uK¬#Ulu….` Xûs/íðfîaj4ï Ë!ˆ¬PQA¼Þ̼ª:;;‘ *Ëùýe÷"y÷•z¨t„J·×ÞûK·Ê`bH ©’Ó;´Óö;n”3ùöªQ&0â@ý,bk·>Ã4Êx‹È X«ãk:廬`Y½‹Û-ãT5ýaEÄóàj ¥†r´hË3T±ä,`jŽ„“éiSÓ§ˆûرK‡Ø_qájDœP– +YÑûÙ§ hìØC7Œ¦‹û3~;UO"~\ÎÑo¼¯\DNµB•ö÷)3þIÝ'dªiµ(NÞ‹:A“¸‘÷ Ü#æ#b¾ äÚó{¼,?¼žã9Ux,™UAÛãœTóÜíªZÑ3æ ÀL +RÍÝGtZO%|¡ R¦G^¨JíÐþ¿¶¯ÿó·¿×ö"ÔÇϹ @Müü·ö²üó·öÞßÛËn¿ÿë¿ÿ·bPñ.6«õÈc~0aéN~AùëC{0qÿ6Aiÿýó‰šî0ÿ¿ÿ-›#ý´=§~üñõ×›¾¾»ÿ!'z6_7ŽJ½ýû`D´¤;7mÜÔû›žÿKNošgÿ’×.Ý´ü±Ÿ ÞñZŠÖ–§V<ŽW´Ø÷ ‰smŸ)i1âï;»‘±uM.Ú‹ÜèÂ@åd`Fô9~ßÚ¦P³ƒöl¹Zéô)·Z…u€t–Õ§*8Õ_·ÕZÈÔú»ºM_Õêõ¥m4 îÕJeuZôª±Ëm¬Š{·ÂšÇÞpᘙI‹•È­µU %cÊæÖ´½9bá¹O„2æWzÄrD,#ÄÇ£›aøÕш*¢Žz¼tÄK·AÔ]©_1]]x6<§¿ôD³ˆ*À÷ͧMÜž„4Pc‹wxœ +XI.Ç+.ï½ð(µßí?PÿÉP3záqQÜ]U'b­:ÆŠæ¨a·`æ¤`ê_Û†þ@ ˜ëŽm’à™cûå&((aT~âqœŒ’Yt¡#Þþ,ÆP]vw¼·PzÆ.c­i<>§õ»¾FT°šFm—ÒC +XóxM+â™zÃsÆ~Òð VÚHk‘¼m‡uj¼yH3Z{QKÀ¶1>¥‚w§….?²³äº–P@²ŽMlK(fPmœjûäp20£Õ_%“ÖrÌ»µÍwbî6Þ `$PB—ß-T…̵}¦¸f¶™~M¡ª«†³ZXibÒ>g'Ôñƒ®û^i ¤Þ‘íÈoR0MË­÷ºY4 Ú1÷ˆùˆ˜Gˆër†c]2U@!~Žøñ܃è°-Š·`]' ˜«ˆÓ;èi_©ˆRŠÕ@>\ª×Pˆ­BuwW7‰Ø»º^ÅÒ!–b™p6F5s,=b9"–ÇGÏÜÝ+´b¹º¦]Ú'T0RÞ™A5—âý–F¼5WTPskÛ5rUÉddЖyAÂ9ZbÀâ ¹ÝÀbÍèYÃY¬¤Ü!åR"-j ªNþFJ=R:"¥ÒK3¢‚Ö4¶Ü÷ìàJÄ$€mÊ-TÂ¥ N@Ø·Ûï+ÛfÁÅÛœ¥fhª#Þ¦™•ÊÀEÇÞ» ÇLhäj³ÅlxusüúWמ¶J«÷P¯ˆ©Ìða•ÍsµÝÒ8Ru(† ¦Ž¶œA5A æÕü^ʉÀ(­¶à«j1h;sl …¦<.=Ò#–#b9‡xF/*„T·àÙ|û@ Ž”ÇÁÐæ ]´—Ô~Ë®~7³ßp†¯OrB0L%ÈÅ¡€ +zhw¼¸pˆc•Î‘ãhÝÅQ–Žhévêâ¤Ã+¼r_\±wœk-â¬\{(`ŵ‡%…gN¾?ea¼~s^W(‹ˆê¨¢MžÛêú[¬@Í–hgÙ]o”ñ£^ö®êøضihL¨«ãøªp 羱7á¸êLË÷âdzZ¾ú#øçgÆP½h[rnïâ Ô%#†EÌÙmgû "^b0"(¢FIä +V“—Ûµß +UTûÃ!1¤C,Ä2‘¥"4Ôâ÷c­É ¹îâ¦/÷Ì Ù‹åK:D‡•;¬|ÀÊ·ñµ)˜únv•N'Ü‹F©Ÿ¼¶œ !¹mCETÖº\ÃW¦FnÆ1ÇÒ#–#b"îðR‡—xé6òˆXh9˜‘Û(7k;Ä€Å3³`ߣ6R5 †6H¹ŒKú[Gvœn3Zð§[±wœk›ïÙ”p﬊—jÚÉÕæõôt¯/ˆpˆ‹ T¶îÌ·RM $©g¶Î)å†Å;É«§3(¡Ëí7ÞÉk[¿1ãé·h{ÚªÓÌ.KŒbîó1Ï ®µ=]ŒÛ‘c¦˜³Û~7ÔqUàZ%ÇX@Krsî›cîó18>VµįªZ(/&LyìlûTaQ(UR g UÞsmŸ(½ÛËx¡ +Zm¬êÓ1ÝNÉ÷ÝÐ0`­%Ç Í‹¹“ ¯eF\Îïi‡pC£¨6 æ†Æé{^|Î2ì¢Í ¤¡ôm 1àrŠ¯D¸\Œ¡r9ö â›áéÖ>n•ÿc¿ +’ܸaàݯЂ ç<ÁOÈ1©\üÿªP+{Í©–œ¹5tY—•´3T«Õht¿šÚ µ@óRe«amë±Þú&,Ù-/GܪblmÄ*Þª¥TCD +›çŬ±Š!ëÏØr!&<Ý¿'ýùÂï¬}ùþ«bß®¯‡á‡Çßû7”Ù¾¿ ^/{\üxþ㜯îñ¸£åáñ¼òÃåöÏa°+sò=רA+˜•áfólVÐíäïøvÇóß‘Ä$|±@(T ‚zÅ8X{nNo‹ÿ)â Nõ^KÎ]CÄósÊÞp-USÑìYLÚËg­úºZ×^B;qÔÜ !ëêQ;ª>àWjÔ¾9 OÛrÄ|ßåu“|Ú´½Ò +î³”}Á.´pgâF£ÃJ'£Úh±¬ž¶iJ(5¡fÚh¯a=ÉÃ9§¿Ì¢w¯¹ërÑšq"S¸b†¬@KŽÔûh"g7mg™ñÖ ++éÛk1ÒÀH#;›1p³œa+Û*ïJ&`äÕÕr·{¡ÝnGHv A»½l¥~Âúª6oØØ m¥ãNEkp=¿÷¯)P}ì£! ºŸÎ8Þ™8iðʯܺ·—~K‚ZÙ6òA„R$Ìè§^^0Ù¨.Œ… rÌîà†ýôÒRnæpÐÕ³¾èaË@…|EЂ«OâWÈ€Gô{™­,\ÿ[4B|vÞ:Üi!äÖ5Jh¶ñ`y ¶ñ[mðꯎp»Ÿör3WHa>[ö%ý&síocmÑê­öÐwÛÞvr=)îïî -b9"–['ñ ÛiÄöë¤Ê­:†d…ÌRºŠÎg«3°‚&Zž'zpÊàH7Šä8ÚsxqÈqfÈÅú›ù:ˆScŠ6ÇÉ$±\ÃÛñËž®öáïK©}»‰c ì¡Ïáwf–`S úØg3³åÚŒhu󜊘D‚¾1-K¥‰| aœ0¯·÷ãXR×éxÊ®;Ý‘b~Ñ"Ÿ8«‡ÕçRΡ«]/³×k„óFn¿Í¡byy瘩 +…¶Ðymoèh[¥wràЛ1ˆ7Ú-»Ú ÖbÚq»Mœ‚`Ù¤opqÈœC~G;ìÁ«Ó» דâœvÅ­A@žvòà ûÆvˆ‹AûTį6$†d«ëFw¨…6QÏñ¾¯i V`µËî$–ÌK¤…†ÚÁì>Òäƺg¬ÞRëFž¶WRÛjÖö3_!ªµ(RïY¸OÁžnq. +Ù-\“ÝZ:3G¡ýl@[>jRÎaÅxÇ;h¾Ïå\+#pòòycï/Ä/‚s采kT8c ‘Õ»bj¬×‡ü^¯Â 9°æ~@ŒÇ­&´A¬Äzë/ A’»žºç[ãt†ˆ×Üv>ÁŽ€YVûðLŽ !'ë«â2Y‚Í­„Eオ(ÕŒ+2¼Ÿ£ƒfë϶ˆõˆX{7=¸¡{à9Ç0¡î’(êu´Þ×f6‘LÝ´ ÔàJ@Úœk¡ÓÐÓ®•ß%%ð0û¼»Ã`òy±Æ¹‡r½»ixÚ‰ºÍ ¹X?Wn·‘ì>– â}œ +Ejøí ¯zЂ«ù´)öBË®B%\Îw¡‰œìg.F»¾ýN’«“¤$'_Ífi80òê¾9ËŒ$š¸i›â0qC»âš86Ê«õ{œ¸1ÄñÄep¤@×Ìhû©ÂÜ0Üux’ãUŒp«‚­^I²Ú‡§v¼x¿ô#HP¤„é’Nkxy^+ Ø‹n¤aR¨c5âY&qµùmñŽmŽqJàš£>÷/µx鈗¼]´cjóZQȾœÞ‰g +T!ö ˜p—K–¬Üå«‚êVåÍ ´xYÌñ$wd,aq{çW[´zD«=~enäÇôìŸ X (i€/¨_IܼWÞFñ>E;1OfÅÜWÃDýŽðë—Ýë§H”Ðfð;I»ò?ûå’$InѽNQhˆÄkaŽ ¥dÚÌýÍÄ윙Ž%Š %£ŒœžU×'3Ò íp¨T¾’s†¸ìO‘» Œ5¡Þs—½ ½Û Sá AŠöÒÙÈ„G²ì“fC„jžX£ÙœÁ¥Þ~iNl6 p´ÛÏk76l’»Šå¨XΊ¥§xj»Yîóä2®Ø-פˆD6á«©vcÇ U0F¼·ã¦5²(*w§ïÔ†«Í _ÉgïÍ7@IúY¶NúîE”-Ç +âFþ4ˆÊw÷ñAï[¼È=<ñÛñQßΟòí(àÛ©uÓùêA¯žôêÈ|‰A+ÑWÞïу†`ë+^ÂR¯À¾#»xÄon\¡Æ:‘Í÷êtïÎß `¥,Ñ"}”>PˆR&»¬õu§ý´-!@Ñn®-˜ldž@(¦ý›b 7`ûXJèwlÛXææ7E´ßJ¶m3bÖl›@å»7mªwQ!DïN²© ,@¦;!/Šôg"fW0MmÁs- O çà†AÅ#nƒb9)–7`bÝ9g?C8ÚFy¶!ý’{åléüòÒywÆcK÷ÙŒ÷¹1÷£ö%±¶n? +Þ¯êAÃûwÑðŒowÅ~·g`ã>SÈQ±œËGÇLJ„Vìi?^ƒIC|<芿˰R²yLxðàè·Ç˜Úâ <’r^ÙØÔ"-Ëõü:Š¯êMÍ°¿3xÉ}Ì 5€JI{y’â«—Í7Ú{3µS’á§æöÍÜPAä+Õ¾dÈÖïáA÷Žô°ôêI¯~Œdƒyve¬èßÍò ¢òÝmqЋ½xÒ‹}ÿ +%e¼¦} ¨»ìb…½&oe»Ãb/G(L7súTü-PT²ÃmAüݬ0¨=É÷P»á1TŠi6ßÕ +ÙjñdÛù;Œgýüó<Ø8aˆC¢ÉQ±œËG'ј9èˆ'ʾvAxd|Õ/ç;¯‘9X)Ëß‹}üRíÕ]K•"HÑþé6ªõå¦=8ÛçÖ¼Î^Aá¯Ü¶17äDÉPº°3ͺcÑ›­= ïŽÞ©ÀŽP­Þ ;³ÊÂÔÂn†ÉIñ ÅÁ,[¶%Ñw+d³@œ¨]ÈéëN7=¨Õ“Zš¯’m5_éÎè°’íwƒVÊæûC±ëY±öŸÑl ÒS4Û t *fWÛ¡Ú†É÷î²tpË-¼b; [¢ø¿ƒu1¿ï†T-”yx’+¾ß¹—ÎÓ`S0•‚m?W°x¤¼Þˆ +÷«c“( 0úv\¹;Œ±DN•è˜ÞpŒWŽŠå¬XzãÙÌ›]Õ ‰Úg^£v¥öcÔž³ðã5ø¥~3!j•’\FwDÄЄS6`¯I¯è6kŸÂ]žû)~\ …wBøzYªSÉJãêpo®8)ñÉlW¼ŽˆÒL›´o¹CÔ“¦CÖ˜Ú¾Ý=ß©\¹ÝŒ¹6ŠˆLñǵCîö…ÛîŒ+f™…×Ì´ +"_‰•ï;r +¦’Kzx¿cn»cC +B1MAx-®d£ö:ßhë¤(¸–Û›ã2¬åŽÀö[±4‡ï8Þ„ŸÝÊ™C€,AŸ^ÂÏ^êA°žëˆ`-hw§ÄTþ!(D©â;\ü.b +xñúy¿£ƒÝA-Òþ˜DÅWõ~âáð Î‰4ªõæÞà``¬ÑuƒõêY¯~\êæ–ø¤›‰@EzóMˆ;@ÒÞk)W®×RŒ2^‘{8ˆú#F÷—#¾*7…4·š–Ť ›Ê<Øc# c€c¦xE KˆÂY -è +©"‘!ÄBÌní9¸ïWÈÑ>E²›<µ¦›Æ­â¼)Exœ?„ÖâǧþûoßÌ€¿}ÿ¹8–ï?ÿ¥=ëïÿø¥=ö×ö¬_ÿùŸÿ¡>¯(߇ÀˆqBûís QýñM”xŽáñm{o«‡ßÞQÛ’žÿ>þHiÿ™¿ýôûûž/~ýû“~ÿîñ!Ïw‡ñüºŠ¥´W\1ÏÿÅ<ì\¥¯x!CXx¡3°StËQ±œË×*ÞíîÜ/ØÅŒY²]DŸÛ1˜Ly£r–Ê@Xú¨¶  :P‘ÌÃ3P­\nº|¾„PÈ’ãó0ßáT{¥¸†_N5Oç»Û$Õ!½±«%Š—Ì5à*©+ap’,&VT‚q“`ÛK­`’!÷ aZºmí9ByWJTÓ®b=*Ö³bí)>gðY~–Á{ù׊؇[ÆÀ}üËn€þ_öË&¹‘†ÂûœBB‚¬çs„,“Êfî_¶ä2EvÔT52Þx,%‚Þ{ãñEüÓw…Àó=ÐÑžk•TÂòÔØrÿ#ŸðwÎ1Ðrl8ÙºP~syñÙ‹ÛCy®õÏáNž÷Æ{¨E¤ú±»H,—/Y€stdj–@»UíöÙì!®>ÿ"–†Xffœ3D{%1WÄÜó ±*`ìŸÑ†}d ’cw¾Çû𔺮!d?Á©üÎÌ|Ÿ*—5/V¼ØðâÄ|Lr/çN¦]”"/×ï‘ÄÞü—S9>Mº=âƒxzãÖw5W#0v=x¯‚‡þ;§†~G+jÑIsÀ¢EGùˆ¹·mG¨á0Ýz»á( ‹Ý|;_ZpPé_'Ô¯»#H”;Äg¼á8 +D%ñâÁ6Ó¦±œ¥Þ|O¨agŠ@„<ÓÏÓ(Ý]FþfLjIÆ·ÜS­ýXUxjîþ\4‚h¯ Ÿ2™1CÊ8&žtâb©ˆ¥!–bw}‘€³ôˆØºŠõ™ É_³ôGÌh€IWßt{ÕûÿH W´d8åñqžŽ–L²:iíî:0eÅØ›ï§7pMÌ-1_^Ø(Ér²ÞŒO·q"ùÐ/儶¼éI¬ º¾›Hlxñ ÷óö3Ž +¦Ý;e[gà`c>¬Ÿ=¥cíu´SzèÒ&ÐÀù•ú}îÚô•oŒDým;_ãqÖ(C‚ˆÖÙ¶J¿“¼ëõË!ç®~Ãn¯W•ËMTÌ¢.YBaûËþòkN h·Ÿ3bºþü{y­ß¾}//û£¼ÖåÇï5_‰ON%ìƒ瘚aðû0,nï†Bþ|`ÁnÃØ–VV¾¾=#‚Æ éöïö6«Ÿ–çå·_¿}ÿþJïèú•ÿ±Ð·ïË(_þhø b¢2› €Âò¸¬`]VR[VRmöùíÃÌÍy«pJU8¥&œ®_»ç§òm;qï·ë‚õº¤v]Òçz·´Õ{ø^ª¤—éá`½3dQ¹OMÛeÁzYR»,éòþŒ;ÄXKE, ±TÄâ?P +bø¾ jÜ9tÓ) ¨ZLÛŒ—*^jxib¼½“"¤È6$暘[b·t['D¤ÎÒý«³`ÝY>ˆ©&^mdÅÒ÷¶ît¦¶)BºÆÝŠX?_W¦æM¾œÜµˆèjáÜ…'É–‡ž&¾;ã½îÑ¢¿–æMk„?WóFLêÊ'¢»dvx°æŽOÜ”´ØÏØß¹á1ïŒ#úÚ¬K <‚+VnXù2òÒm¶/•ïÜhûáe´Ü-Zpuf §0&½ª!®®ÀE¾ªa\ÏND¼yCè(b›M9D_Ãi;3¤{}hxúÌX¿uÞN9NÈroóNæj¤ +åa®ö¥GŠðæÃœÜt4t¥„|õ†å›v ±ŸCÈ\)Á_›tGìçÒ,º…,Ú¹4ë½5¯T¼ÒðÊeœÀ¤ ý¨ìQ/[s[ü,úåè¯AÄDãN&5±´Ä2"®4RÅK›Á5-·´|y¥ Л H…F5ãiE,Ÿqp§ŠàÏØÜÅ]tS%‚»šFÞ\ññ¹¡»g¬Cý>yndÉÖÓï Ï >ìÅ#È®jÈ‹Syïd»ÞëO Èr(k^lyñòX Ò’l¥Ù“7xëdî2Ε†9ù»3"Pàäd¾n²Í¡7ä-߸«Ýâé|[î¿ÉÛÅé¯ÿ’¹»ã’§Ä s§aÛzZ/0Ž’p…;S ú¥Ý›|ɼ“§ +ñ%߯›ó“3dÑŽûFÓÝóÕá²IE, ±\Æ˶É×INîŒÌ]gç´uvéèaº³¯oÀÛƽÔЦDüÀ"|š¿Àð&an,8zê:þ¤›—2AL´Ó{v¶úäxo¬ó=CoÅòuÙ–¸l”‘:U½Ê ª‰©%¦ËKsÂÛqáËÐÌ,‡¸G{²I扖ÉUC×Ö¡n¥æ•–W.»rxF¹ý&}TÌ*çÞ´õ3ö–nj޲£*ÜÑ*ì1ñQ3>RÇW¯ûñyš°;w#ó×ݽ“¹ër%7x®‰¹%æ}Ä33~@œ·“Ù‘W|]tË`]ÝHQA²å×ÍvŠ·›ÉîöÌ_^ècEÔßR„y¢åàiÛ8z²]wg§³ ÞNN‡ÄÉ]U÷ÔÌ8>²ˆÛ›Ü'»G{h;s'aôÖw˜Ü-]¾Î8zjÁ)–Ïu¤ +®‰¹%æWª‚r²ÜÕñùfL& º3>Š¸ö +ªˆ©!¦ËLܹs·à)î’7AP¾Zñx¾Ó61¶â™¥ë[1'oÆÆñjl½ð¸œíêPlùu7ÅÛ­»òƒ Æj˜î`¶\±rÃÊãÙ¢»šf^fK÷|÷džàÖ +ܹ—«,#}œe»µp¾eY™ëÃrn;i+gmæ{`9GW¾ ×v>γ˜ŽŽ2wÇ¿… žì—ƒ·ÉÁKuð¥ÒmÓlõ¢ÕÀs‹Ö—®«ñº32?BŠÒµV®Y¹eå˨Ci»äïª0`Í/õ‡g‰ýE›§®Îññåv|õ}êrËWý.¯¾GòvY û!f|¬ˆÝ™qßÕRÄæÁÂoÛ&¨VÑi³–D¸üù˯™ ß~Î ™óõçßË‹ýöí{yÝåÅ.?~ÿ«ÙdRÚÔVb?–‘Ô“àn“°¸ ŸBþ|`Án“Ø;(_ßžA£n¯~ýw{—Å/ÞZž§o¿~ûþý•ÞmäöŒz·ïËŒ(_þhv;ossûòF"ŃòIß>Im´§GlK9m1fíïmËi¨ ÷æû_wûÄ{y»Ndã`¶»riálE .í‘ÀZþ—ù!Þª•Ž–í$‚ØE)È+iw¯Z÷ìÚ¢C%,WCML15Ä4CŒ†±ÿµh·ÄïEûFü\Ñöf¿XÚ@?þ@YzîðÉ;Æëý¬^œ¬p ôÀ/7¼|W_~†lÖUï «¤7õÆ­Þk§ñÜ\pÏ„+§]6aÛ,?;r4Ë`†«[åa‰¡€‰¿:ÄÊ‘4æqµu“3žÙº©Ôx aÍÚñùœ˜CÐÞŒ+âiÿ[óè–›M»ÕóÅãˆvVÁC˜qµ¡ œyœsOu‰–xf¾}b&„”<é—c‚COÏxýÆeˆ_x}Î$]ÿÚ í/,n>‡&³»öCF@„âªKLÞt3]B*biˆå2±u)É05žºAÜ85ˆˆÑ­¿{ÎW*sB`=5œÐüµÊØ2‰£[ ØÌq + AÇÄRKK,/%vØ%Ü5x^¢¦Å:>rÆ”KB[î• GºÛö;ã?u$EÓÝ#Ö•Â’öŽ¤#*ÛÞávå›C/Üi‚ÃÙŠmT.gY’’1¤4Q,§•°:,È„Ðíé”àêÌ@”݉ W³Ã< c×s?h§+Ãò"i":&>ÏÑéoÆ!Rûïiji$Gç"(Ê }â©Ä%5^Øtžq5oiìì¤ E°Ø¿3Ïgœ2„HâÛ;ÝC\M³\sCÌ—‰ÐH©ZU´³”ž( 1;)=Ï‹Ìœ{úµÝúµ{óm!±4Är™PD`°ÜÛ¸ÊÕ¦g¼¾¸ûó…ü7ûÕ’$GnC÷>E]À0 ¸öæ^ÚáÍÜ?¬.iœé(ˆL'YAŒ´P¨Õ]•zýêá}ª+ãƒÃ€²ô[Ú6Ý=ÞÚà’¥8V±e8ó×»½n¹YÔ=»¥U Ò„cs0´dÐòÂQ´P¾ê n 0‰S(W  +·„qmiÜE;è +Ÿ(<‘øåŠP,»—¶a= X(ƒÕ3É-Ú’õ)Ö#b=#ÖRL Rk$Q‹¸$Õ15ºŠµƒ”Hé„”úHãi7ñ󧋕pˆ‘A†_Q¿ð°å¦ˆ” ¡œµô®m“!$ŒÀ²Z¿Óü*TÂÚE;ì¿®í\([a¯%ׂd¿›ÍG{k …R‚d$s/mE'Âûƒ$Î1;ü^îé+u§¥ +Bèqº0‰ÃëŠ »å±6dó7Ú¬v™Ýäg™a·‡Ýñƒ©;Â@3{h7ëa\2 ”¨•Çâ×Ôz§Ù‰Þ±cóé a˜­¶F^Å}ì5&¹20wu;ˆwD·z@¬'Ä:€XRtÏá÷²jýHSkOâþà µ·Wv`}ñë“}¯ˆ +Eù£µalFøµ@Õ>".ÁvKs]¡Xv‹ïŠiy³<‘~°ªßm˜!•”»ü+b=¿Ï׸&10V»lkæÆrK>Åûõ_® Ú| RÐ"ÆF¨µIÒ"C¼Ú³%¿Ñ!¹@BñË[®8ë"q.âX#®4M4,ˆ@5;ÕrKE`NæŸÃ ¬j#ƒîf΃Z馸xŒbߊ šK8G7 ñU»h+¤ìu÷5‚;:—ßxGGHj¯JŒÚZG ÷–FI·;.¹X5ø¹äª(Š¸p¡Ì5ƒˆ|41ô€XOˆuÄÑÂq,É@3{Ž¶àêî¸[©Ôçwt̽E{ÐÉ K¼´ø±åXs.ÜÕBì¥òhÒu1¯¯ˆxÉÁ•@ÕÜ.ñ ñϘÎñö—Ö‰kÎqÒC2Cnf#Ÿ>\³yh¿c¥#V:c¥Ç}xZ{wm\Jbýd*˱œËc •1'û¨?Ü[ ’˜ÄéÓ8¾Ê°Û, d®Ë{Ä<~¦2V ¢ŽO1èië»0WÂÒë£ ·\½Ž«m©ˆx­'Üþz÷Ê1UÃ9c߇G÷çZ¥19^Ñ*ït5®VüÔ Ëü®V„ Õì Æj—{„u/n¬«ù'H©z©±ÙÎ`cP+ªp¨ƒ‹(ßh̵@­QñD‹I¼@ÞÌ$#h•'0Øéòaô3#Žçj’3°v§Ü¯üÿzpÓpż||NÔ01H­.â -VÎY̵¯á}Ê#„3ù63J)ù€ ²¿ó»ðÒ /=Fº•aß}åVÎ`å +Ø[·†mÖÔJ&°ìEñÕ+ëšî˜j]” +(âEÄ,!L½³h6®7Ä2ª áÂ{›…4´…H]éóú-V»ˆ÷ë‚L“”ÀRê{Ù4´÷Bͱ¸jø­Ñê­~ -#puµ;áÊxX·õ·Ÿç–¯N³I–Ðh+^ÛÑq»5™£…ìTÃȬ¼ÛÇB¹.1`QíU¬o¹=båV>aå·¾|íùS¯ÛL«Žó 2¨øö0ëâ&úY¨ŽÃ֮ʹŸlÛŒ ɘÈõàý4Ì–¡ý©8n}§Ž,¶8V¨ìúð†³ êêâ35™C9[)À”#ñ‹í•äööM¯..÷â‰W¯ÀWÈÅ­lûcnZ'_IHæóevߪá,ß1ľ|¨¨ÌßñÒ/ñÒãÇj˜jhŠwn¬à÷&bFháixµM$üm´W‡˵BÍìU«)±Òu“‚5”q\7·\* HT ·…õõFK*ᅵ䊃ÜjQ¢In?ÍöA_¸umd ‰½Æ°]þ –~#Ó#^=ãÕq¯-´þX«öó»q~uûㆳ!”{­Ome)¥ÔOM-P- xpÔž„¹7Å´²ïРzÜî¦]ÊSujï¡š –‡‘j¦¼z«ëmE=iq±ñÝúeZÄñIª¥6É­G&ì·Þ=l!\#“ÔŒ¬éHw”Ý·h/‹7¹±ÎÄ+kùÔƼ±Ú.WMâiw3oàZ çâœË·¶~­Õœªã½;–Áäèá€wÐ}Gðò/ŸðòÃá4aÍ!LWçñÔ€ÉSÅ<ÄGŸS…?Þ +.ÞnÓL¸4®Ôßmû,Í$P«b÷èôˆXψõñÑ£ $ˆ'½HÖ÷´‰øž G„a{iF‚JØ·‰=ºšh©^kŸ•ËÓ.NÁÒ@ ¬¹+pIŽvì•B’Ø»¶ÇìÕyÓ8’›J{’zh·“n¬C‹6‡3+ýê0±ìülsHR3³ŠÖµßAÄŸ°ßö$Ì=ûÕDçânU‡,Ày Únr{Ä«¼z«ê` +Ép¹~g&ivËä^«¨ 0‹;„öóßxe’k…š¹×ÏäˆWÎxåCn–2äZüÿ ÝÀ›¢ §R^§Y M4õ Š{ÛPÂ^¬Hu4í«ivZܤ¤¼vRAGÝŠ‡¥©eÜþD¼Ý¦^„X¯&Žns¸ØµMYmü:´OùB¬-¤Ôs{¡}°¶6œ!߇ÅÁ„R5Œ¨ß©r9J”oçZ]â­k¼u‹ßGýïsÄŸì+@FÉÅ-öáN ïÙ‡»2ã y°4Žýl›èYÏ HQæ f%•ºÍñîÃ;·¬¨<‰§‰µhi™§èJz]«™|Gã7:2é[HŒ¡””ÛŸ‡¦K´ºF«—Cë™pÊ +RëvçÙøôLna¿¸#0†áX ¡î(ÂÃVŽOzjÁ2yxOb|B±—8¼ø5s ¹j`XÏr]„Aì¨e‡êœXñ"˜wÝž`® Äu…¸î⸩¦Q7XKChÚ£zxÈíáXÆm!(&YÌõ@»Àº« ¥º­PÐïQ·b.­ÌÀít¹fõ7[nC΋¢P©dj8!‰eWVxe[¥ÅµI2߆›­–퀽1¼ÒAôÁ¯,˱lòûK#¯”ÓAÔIÃ]OÕÖÍ€U^êÁÏ6É5¹ƒâüƒ«`Óƒëej‡##/“X@š¥E}D‹h jiñ±²IVƒˆu‰X׈u 1¹D|{" g„àùärÙ•ãÂÀÏœp ¬O÷ù.ÎzRÕF,îâSƒ¶9¢ ++4$žgÊi‰§‹g¥g kã¨gm;‘w{ï6·û¼7綀3¥¸¡|Ž_ Væñ†ù:Ú|óž-QÅHþ HЬ¥óm¼4VD@×$ÇD¬ñ;ÛÑz®"æðà¬ñ,8®KÄu¸nqÜ55Сx;³ÿ®øݧˆÔÑš‚FlLähÍÀU¶Ñ0ˆ'ÜNP‹¥W׿ùìiÁ©†½D*cš£¡e“³[O'´“uàVÀìüFÙñÒLÀ'n6dkg‡êœp¼@ÌKļFÌÇ×âºB\÷ Ž´#1†i=êØx¢„Ób@š3|¸§˜˜jÊñ‡&v7áSsƒ+ôm_Ç%¨@ÍŒ˜Â=½ Y½==Oj jº3Ž^ÛÉþ@¡!ñ¹þ»Þ{®í“Á\¬œë]WQá@Œ™ŸõPÄQõ~¬˜±{M7Ü€ˆÉA¥n/£Aò¸…",u´~u‰V×hu‹_r;ì–FœƒGßÄ,º¯$J8'Ÿë:óÕ‡iÂBœALΞn½lAJ³ÔÄÆnâ5€ò6âa‚Bœ ks(b>k ´T—ÃmIî>1äô ˖ŘüN·…¡ZËÂb@S›¯ýJ ÄQ7U±»Ož½7Å4€ZÒ'G¼N¿çu‰«¯…àø±WþE7ßz:„¯^Ej'œÔ´r§•GÃÐtp¼ßžpŽ,/Wï̼ òtôf<:á¥Y‘!Pj϶[ íܧ·g…œð NÉZ6®pœ®ut +ÄóO3B\ýù]b©ˆåF,Äèú¤ƒj;›Ss;ĆÀÙ@4%ãŒÑi–;Êø<7>oñ¯÷´EÑ Ü#Š¾2á·K„ÅY¼gm“±¾$®+EªˆÓ8UÄ?Ï$Ázæö˜qo W6Ÿ8'Ÿitº‹i«?ÇÝžšÔ«Ã›iᢠk¡Â¥ +—n¸ô×…=åŠÌ‚¸)¼Ù\ÿO»P³¡™µì`šyõ×¼‚‚`ô‚l·Ùb‚œÍu¯aGxÙu§¶óh õœ²ËË'O¿;¶…óê¹H`ïÊÜ®àœäh¬cû¼ìVC{ã¤"–±ôÌ—”ÆÛvµîk5O<˜­$†‰“;:š ’[hØïLà€rZmÁ“!È@–=3›4<_—8Hyu1ðÌÁV€ ¿RÁŸEŠº +ÞX°„œÅVÈõJb± γ4ŠÕœTÞÒ$ˆÊÓÑ›ñcðÒhp—xÝe#Ð5|xé ï³y{ò5Á…ËV϶«y³Í¥MZ^®Û™FF8¹j˜_>ÑîY¶ËZ6ÍœCsK1ƒX|·YÖ;7¯¬×rè;ßü…K@JÎy±åŒ1AÎÖ>ß>´ß™uÁ”=od¿×%d[¤ê}]r†­ìvX:¬·[ « ‰ÁP›þÐY$=˜X$C‚¹)b¢7Bd¿öîXÍN +ä³üAH °ó›U¸tÃ¥GÓz)A2iÇÚ67&›‚˜8ÕaG3;¯Ožçg±€RÆÕ3®×®On‹0&r:û,â» ÷¿;‹r]íkSG\Þñ QHÌÀQ½j¹YíaË“:6Q9qç|ן‚Hnsß0ìŽÛ9å“‚W,7 ;6NÑ3âÍÊeIe0¦¥Uxæl æÕjåý)f+!fst[¹o'oOîs_ŸXÊ«_Úx~¥»óÀºƒR7çÛU¼tã¥GË$j[¿Ýíauc¢òtlÕÉÞ+n©õžv ]gÞ²m–¬%‡Móê¦^KE,7bé >ËzälnO^µ—‡ÅÌh;¬õ*AHy±=ÌÝ8)íŒÒ9ÄBÅÐÔ[¸ÍªºDó†;šÃ«ÅkÅÊ”[VÖ;×ÆT»l×j„dyLÔ¼}'…O,5»wX /wîÙ¦ o×yjèWL¨­¶°_ÕsÙJ‰ÄL§ÐUpŽ»XJ#s}l8×^;ï$5œåcBšÔÛ´aæñ $ù<Ëvkâí¾#fÀÈÚ$N5qº§ñ}Ûzôðî\;Ë{3ä¤N?ß³G&Hãó `úÃ]»=¬¾v*9¤áåŠ]¿åþö÷L€„Ïï C0úöýßʇý㟿•Ïý½|Øã÷ý÷VýSùÈðŒÌˆQn“òC¿MÂÂõkpyß÷/,Øs×—Œøøã ÅkϯßRÊ|þøî·çžoþÿÏOúó«ë‡<Ÿ¨§ñü™çÇ¿ok­åØ*?TJ[ !ëkÙ=86O­ÿŠñ­%ˆRâþ5é_5?לT´r£•&í÷ÌÙ›ëÚV½§-Ïš%ö»¤¦•;­<ÅMµðí G ÂÙšóíUî„rßZ&ëµÁåǬUÄïöîÛ_œ¢ö6‚€17‰SM¼¶Rµf\J¶àA3f-%E¬=ãîÍkϸoóÜè/‰¤DÑûÄèðËùŽœÏù¾«U%È[´TÓÒ–Z´ÕPJ6&^­ßY©Á±tn§F·¯žïyŽ&¡¼ÓÒ¶žO:š„ )i;•?¢™ÊB¥KiõßMü¡Ø.`¦Åóë¿Ù\CÛÓ"”܃hKâ“,‚CˆÔ¶à*šeásÁJPšñyÆÆ)ÓAÅ2„DŽO<ŸÑqÅ檢oƾ*X@oóF÷®©ˆ> »ŠÈQS[Ûl[$rÒ¹RDgýéQDªˆÓ8u "äàØDÜ9bxTÀ? ŸW~¢BÌÞ :êÁ 1|t¤Üï8dÀÈÚ$N5qº§1bªˆéFL]ħU ÄÑ ¸i¾÷Å…K P£cóˆ'Vžã6s„ì&ƆG HØ›ð`åYdPŽÏöl'zÚ‡'FH )x…}GO;*–#CŒÎG£³mNöÃs¨ƒ×~§ÐNt…ãÒ˜5SnŸ›½åw¹;pÍ«—mª* ²áAçÐq3ƒ\oýBQHE,7bé˜1+ABõŒmÃÊÃzÍ¥ã8ÚÆ*Î+l ¢ˆγˆGUìVË !‘C[m]§³­?Œ8#Ä‚|Ž†Y ¨®–ð¨Iüò½º%9Á\É·óŠë‘o_̹ÁLy 7\$šföYwBà Þå98Ýå¥'–W-º½R‡+„. ‰†ž~·,–(]wØ7dHIßs÷¸èÑÄ»ÊC0¶keª‰Ó8SEL7bê"VàìUwð¼*Ïšy¤?ôÛ]^ÑV¾Ñ]ÔÝ7ctÛÊû° YËèéw»Ì0A¯Nî¤ÝPÞgé ›Ù'=R"•Ï ®‹m¸i$Àœ½®³`¾=®ë«á¼”H )¬¾ƒ&¶3Ö œÒjELt³Ã®7PA·ýî8ßÉÔK‹ 5,Q!æV5ë5á•9¸·› N¶r.¶k®nVz—朎3$éH!esii˜veegSȼÔÕÂBR‰å5óœ Mçú퉥 âÊ7‹ÁS¨–û‚€ ÒBÚŠU*V¹±Ê£©Ž@ÄnJlè`ˆƒ+]–îË¢3*\W¶ÂÙ« ?ì¶{¼¯ìöì—M’#» „÷>….`\ûï^ÚáÍ»„©ÖtË!ˆ,‹ÕAÎx5ý£Ò|B'2Ígä}Ìéym0 M¾Om'pÂ0„×#V6`•+‹ä¬ à ž©_pÞ à©³- îýÓÍZb;ÛíÔÆ¿Ø8¯ ~õ4KµñrØÑg-ۼ栘ÁÌûüñL ¾/Z4ã&âC#ˆ¸ÃÒÍ8´à‚`Å£¾³¤*Rÿšh#—Ð Ul·y÷ÎNÌAx4: º[Clb»è8CÉÔ»2Þ æ©Q§ ’ûQ7-9Fªa«˜ÃìÒ;à‚†DÎö‹W[^=òêí;[š0Wç’ —3d»úê<k¬`™0¨z0â%›;:Ôë3">ËÛq‡¡é¾(Î/Ÿ”ïõ³70-ýº3ìýºóÞU¤‰ë;aH<ÇÓ¨øib7ŽA)‡·Vïèûr /¤ Xñ«Ãyj*À.ñŒ*ü{'ÇvVv°ûðé£ãùŒÏN8T„KTןò m3Épã¬áµ¯ lÜý¤#æÀƒâÁ‹ˆé4qÜ%8k˜sëmr´èmfÌ <…}ø¬CtüAV=°ê­ë‰€0RŠ‰,…@ï ûl[ÕnÁ°ŸåíÎwŒ6T%HlWw´†÷¬©þ®¤ ?PñÓùæëWÑÀ /¿Š&ï¥"È +bRá9;ÜV!‡æ»ž•‰ß'"¡ù~IA[b=ë­#…c]!~Uט"ƒ˜S景xáÜ_µuæ»Ý±S9H)²‡ 3{2 ¥Ü•®µ¼väµÛ)éŽäÄ éƒR¶Mr­Þlž)’-žÖÃõ½ë+‹]}[œå Õ°UKGÉiw)Ûí¬žpeúΛâÝH«O—:Ù—†kÃ3E4Ÿc¸6ø/St¤0$²ðn›3ã©þ[‹r¸yË9Z3Šú$Ÿ8*bÄ'^Ußíˆ)Abëoݧ6Jg |¸Ù¸Q_¾qâTA)ظyÇPK<”ͱG$®ï„ak_/96kíRM-ÔH÷úþ“–Prýú_ùkf ·ÇÏU€RùøùõÍþö÷?êûþYßìöç?þý_þ“MeШ&¡Ÿ“(xÿRÿÆ_ß,IÜ¿%Šõã §û$ÿÞ?¥ÖüñS(D?^þøúó>¿»ÿ''Úi<¾®3ªöŸ‡D­?«ì•?é}ª‹vX1…¬IÒivbö ƒ¤dω¯q¢±Ö{§ƒå’£OºoÏNøE·ãÒ¥µ–ÖŽ´Ö£Ù_5%ÈÉÓÅž5_!¨'X ß†v8û¯îVR˜ñž~gz`ÆPëõ«ýˆ%[í°eÜ‚É!4eÝhÄ¥Z1S¸xóí*¡©>›?N°o¢}«¾Öƒ‘\"þdå–•¬|{]ÑfÚÈž©«ÝuŽ™T›»S¿X.sõH€ÄñŒgŸ$~üuŸkXAU£by–·K;¦áðÔp†¤¡ý®—J4yØÛ¿ˆ‡›p_Â#–öª©¨;7í4:;àÐÓ¸žEß™nïäÅ~åÁ¥¾“]ng3ëŽbêßëÌx¯‚&HaåY0àÄkÀÑõ‘<13¡ ‡%x= +$±^‰X¤×JùñôF‚0pÃˉ'.]!p!ßHÂìPJu§›ð7,2Guâ,oWï5w¥äap,f{ªÁ)õÔðÎ|ϲþ2Þp'FÅx~E{ï&ª¯ÃÚ‰'çï‹“3sÍ7ê‰,Åëk¼ „½€d GüE¬-±‰µGLÅO‹Â;X.ý¿—Ó\"ƒ\}5´ÜÐò–»´â°äà$z8ËÚƽB5hë^½4Ö`¼ ð` ¿kiRŽúÂû¦¬€’vp­¿aûý ;l¿—gr1PNÎi 7ÉÌö«”Ê Ä¸t‰‡KÚó<ž)ˆýfÌ5)œñZ¡h€C?[q¾¥XX!&ž©>žÞæÎPÌ`JñYI<¥=mÂKX ‘„ÏN·khÒÐÊVn†¶U_ßÏ~%;^n¿3·*hòP_ÄáÜoi#‘kXSδö+jÚÈÎÅ%¸€dìoÜp ~î~RO<'6Êéê#ã·M É¥N?®ÁëÍw«»H‘Èù:1̼0”kÄå‰á“–[Z>ÒòkÚ¹‹ÆP0œí‚¼WX즆:ÛÚî4#;=ݸ¬‹€£Fa¼œ7°§f#ÝA9Ò*ˆn!%ƒ$ÖÃ"Ë&Ù†·Ðz­a¿°Â`)¾7é4qÿzSÃHj¾ícÁâôñô>2æÙã/xÀy‚’‚ã½Îs˜±6Äz Öï' +RPí‰7’næÅ©©žDº“+! sPÛW›¯¸Ôw²Ë]xbÒy÷X —Z†‰£ÓOkâÚêåí,oèµIX¾Z³h¹6µL¡æÓrCËZîÒÞ•à÷Êý·:š‰EÂOWJÜNx¬B„ŠØ® ßï#¢ÐƒÏjâ íñÒ+•Ñ¥!E1õýw! #8¥^‡à–—¼üz¾ÓÜ p¢ËûïÄ+.(«a½þ \ÓØ="ž¡†Ã|­¡µ­x{ýmt­–oÊõu8Ðt¬¥µ#­õhgºÙ^ó•ì xyÛ™ºm{õ3‡¢¡βvH‡œ7$Íri+†ðvµLÜ«tK¾øÐ<;áÐ 0]~dNT„xÉØŸ¯¶Äz$ÖÞ|›ƒc8,<Ô°ç’¢c¨œœqdáŒÇ4θ0q¿¬¿§á©>ÁP0<†Vt6J@.ve¡œ[=—KëïL §·15e”À!þ_wþ׺³_{PrÈ”£<^nϤ¾“]>߉‹–¸‚î”›õÉí!žKqM;Ó†XÄ:@¬XŸN±«-¨a«í9ܺ/U wögªh&?Hüøë>¿‹2EwÑŠªRg,^r ª¢ö²¨¯¼•+)¨jD;£¦áiÖ°øˆ$ô~p,c÷Îîéê#c’Ä”uöýl³&¼Ÿ—í'ˆZ-M‚SñÓÄÞõ´1âpéŠB.©t-bX}O9?_xZªµ§PhjëéXE)RżƒƒOÎ8V…2×A}UL nxùÀË·^p(g’«ºI´n¸áÕ5b¢~ïQW4JŽ)½ò,k¨Ýbªá‹ÕZV;²ZÏͦžVk×pÙ¦K1Pä;­Fœ‹0Þ”Kºø€û{¥¢çhÄ×ôÊ1?û•ˆëÓ)‡™¼¢* +:oD¼]vÜ›fì›ÛB3®M¢X_ÇËرbª÷Q¬ãÛš3$íŠ7gŠ‚Ý£Åûäå–—¼|{]/㵆Ö´62ÞLÀîýós™Â¶Û|k8§’÷ѯd)¹¯ˆuˆK:¦0ê&7¼ÚðêWòþ´Ê –¿“–ÿÃ~$7rÃÀ{^¡!HÏyÂ>!ǤrÙÿWc­½œZÁäD¤ŠÜäbK²H·ZîF…6žÐÆ6ÚÄbG…èv³éœ¬XRö_ewªnBHíB¹N=à %Šz‹‘^d÷íÄÔ²³_¦"ÀJ“wÏ«p]°2uôõuèU²›|Ä †±&(‰ÄÃqBÜekŸHØ".¡cÇݪhWà›ð+ðVCÇÁΦ¼ÓÐ…ž„GgrWb¸ÃÆ`)·“=lØ"„y¢ÂåYóD´íBb›_©ñʯ´ø=›YâÏÌLí=ž 6Ìäý†.ZSÓŽÐxj‘« +}·ŒÕCLŠ–{ug,\!F=^±Çýòk&kørͽYÞ^ÿb—ýöû»÷«]vûúÇߧµNÅínÁ@'6ì¯w6J8>…üýI åÎÆñoßN (Ÿåþûøœl÷~{õíÜýí÷Çï7½?;þÉýDÍÆý±±Mùöç T;Â&Äì¯s:á@¥tgüâa3^áÞxÂ;j@MZ´ïXc5ž±ÆÛË"Š +BRvÔ0Î?kÄ}‚X!Yénê·Ó?{vš®ZøéNS9ˆ/»gC»Ï­Lè‰aE£73.ÙC€9X—øÂ6Ù¥a72„Ùãw±€#M 6tû¨T ·®Û"!šË1ª]µOÒmµí×QIÜ”û°ÔˆåŒX^*áA¹^«Zërq£ª=î©=Rá•^¹õD\ÂÜÚŠzÙmpËV>aånw+h›y™Ñ«!ÏnìãS±­Óì>y¯ÇoÊ AÝöpyԦ뗣ݤ¹½Ãu¶‡3{¶¯›"2Î‚Ñ@flóûäÄÕüví?‰£‘Úi¦vä·+à|~sżÕN´“"8$ÈBŽßkó5EhqŸ"~žÒ“é0“é5bàÐíF1£­D%ÒÌ™(£WKöø½êh³‚Äè9D¥†ÎÎó5„¥D'åftž®áª!);ö0.áF:°@ˆÅÝ2ìí[ùGŠÅUÄ ~¯âu§ÍÔ ~C[O ¤0¸ò]¯RkgÀ4Û"*¼O-qŒm2l¤dÖ6R«ìaò¼U%³ð½È>.À HöyZw÷ÉGE¼ÅÛYš¥†JðLbJëéji~$£+ŠÅLhL³;ðH~S„T¢·g\Å;“ÛP XʽiWWwU @"ºQ7+0rpwTÌ_-ì¦\ă&5b9#–káÖ#^?+öÅ~S±V©¸Q¼Q‰Pµì·wî¦öÔÂ-Ú4¶õK5V:c¥Û+õ»M´*@.Nm¸ëýÊöV͔˭Txå„Wz¸EšÑ ã +q'»=ˆû&ÍWC‚B¾7ŒÉ8,zQ¿o'œÂƒ@Äîz±ÞÄíW#ö£8Èž3x]]Øç8ÚMšÛVÑÉqâ'9Ö Ü±rv˸Ý{úœÂí=j½'&WÆ£zÏÈÁ‹1{mâbÞÍ:Ѽ½¶lu +Åÿ¾6Ä×Crmb=Ž9e‰4²çPQH¦†æœuʶgÎúÄàÎY¶9KÉåx½¸ ÍÀØÜm¾¯(¿&=7.FQü_tN”ØíêëuÊBÈíd[hàØÔ-^º-‰8‚fqwŒõ3Z£,âéøo¬ñÆ3Þxk4ˆ‘h8ø¡±àÔí§áB@ŠÓ÷¸©‘“i·r¶šÔÓñ©»œtŸ¤rÁ4›ß«xšbÉÉzš·K¬7q›¥F(€êñ[-GüzËѸ‰ãh7ivšûœuîYŽdñš;½Ì±69æ +1ŸsÇûåÜ¡ãÂìísWñ6<¸‹]×ÑÐCãD¤#§Í÷ÄëjßÁâ1iýòkÛâý5[úŽ×¾Ø¿ýþÅ®ûjwܾþñ÷é«ŠïWdV=`Ãr§ à¡2kúxRB¹SpSÃ#K<ÞãêxAÄ´è|Ž?ÏÐuü‰×'{'qÞGÇ;zE<ÒßåxEg˜Úˆ¥F,gÄrãžÄûŒc«*ôV0 þ|§yÄqφðc#|GÌ=›oæn¢‡»9¯ˆx«ÚfË`˜ v¤¸€–€ûÌœÕ}`Öv3îæxzk+9̶µ‹Qç/´Y)fL ¹ÌŽæ«x]f(´k\MžE\··]X=¤Ä`µ§…4ÖHãiìGúLNìgbŒñX=g‡AüR)•¼c„†D0OÀÚ&l¤"$´­ ã+Ÿ±òí•5a»îh@m—p)…ørµ ¾|3Líª 5b9#–â*’;mìû·„ÈäÙîàH{ªØ”$¢ûÇõ«ÀÑ5µá±&Z9¡•~÷[%þa¿Z’ÜØàÞ§à\ +õÃÚGxGðÒoÞý#Œ&% ú™E ƒ´ÒÌMåädå‡ðâíKÝ¡Ñö‡Ä/ü!(H´™.;„«_,×#›jyúœ\L¦s;±ÞñFi¬A;šÎ2NFÆ ¤·ç®¨¡Â檡k`¼è[Ìí®í›1³»ˆÆL¸˜í²†ÍÍ79&ÜfGe§£ÛPÆ I6…éññ‚ÄçO¹‘ˆw‹»‚±˜ºæ6ŠãºQ…˜Nˆ©BìÎt蘼? +q…+¼x‹_x]Eˆf·²]sÏ}⪂]W‹ a¶|¯JÁÍe¶ÏÛ»¹Ì`!¸Ýg=CãÈ9¶Úp/Þ†º¬ÌCºÍŠc +»pÓKóoµo™—•÷{¼.x]ûÕ^©¤ïÜõ61êfˆK,ü +½ULÔ€+¸TÁ¥\ú‚ûƒØ“ù=!æ +1Ÿsb&,µ­9:ºÛS _eØ=6†Ìqf¾Ê¬‹TD\뽌uú˜ãíò§–†Thå„V*´.¿oø襽É/%@$·º´_º¢q”}âcM¹Õ†\µnÛ±; óûDÞw§ƒx½fF[©A¢é>ÕŒC‚ É«_ˆ»í÷âJÕîð¸œçGˆÁÄŠ#ƒ…0{n^Åë +"l„v/{Ø*‡d‹‰Ú‡öVÍ9;C½¾3pˆÀlí*¹Ì¸ EPùh[³<ĸuo‹”‡½ÐRæŠcdòVд¿d¢qÈeP kb?ÐJVÎhåšíb…OxñÖ¶]R†@È;52…Ë#­ èŽ¶ß×ö…!ÄÔž@Ëè÷¸¸RtÚþ° ⣚YNR¬Ø¨E¤v5ëž™óÓ8áiLj´ãê–)ëdbh¯‹eBƒ2‰¸6± „õnÅž„WÅv3òFå’LŽA4íH~£ö)¢ñtE¤òNb׊×Óð†V,›´aÊ +*æôžqM­Æ+^9á•ŠÛWˆ÷êï”#hpÄ0Œâ +.Upé—n-ApàÝÜ¡Íi¶=\fØ•0„ÅEüƒãîÞ3=3bÑÜ>º%Z“°“"ƒr#0zñN¶àõ^éUˆ<´ïèñ'”W,<ÇÊ4»¡Up{ÙoÐÈ›‹‰_64»\l²=%H*ž™-(ß­eF×}‡Ë·O ?µ’AÓôš3ÒBfϪ(îF<ÝÏ›ÎVÄPw@&ñƒ»ŠÕå6ìöôH@Émé_ÇF5b:#¦Û +Ðlq+ŽïÜjêÖP¿~äîŠAK¨ªlˆµÐ³ Á>çïÚ~ü’!H´**¤èöÉA­ ,•—çyD…•+¬|ÂÊ·fÆ¥»ZSs7ãD`Ý2ùC»Rã•3^¹5´[¶Îñ(…ÏkyyJX¬ñÊQÖg£Úh§4¶IÅíg ò«‡÷²7-¾w{ïô´HwŽ7ØBQ@Ãì™Yíê½?Å1Þ}Ì͉Ëxç7†7Ûš”És†…m/í’ÄDî¢ã¸çŽÓ·(ÜŽƒhÔêï(aä¥Å¼•(°íÓPÖÖöYD d¢Y''Å 'ÛgW’&()ÜîËè–ìžÀ]‚Dsµ»bz n%Å"ÞË!@èâ÷è­àbOpñÖ.92ǙԎ²†l‡5xUwx@H…UNX¥G²é^ÇÚ¶ 5^9ã•Û¥:Ö£ƒu,`²‡n-*Uˆ£Ã·ÿüíïÊe#ÅÇÏY@Ž-?ÿ£|Ø?þùGùÜ?ˇÝþü×ÿr$xØ:BŠ'6J<=ØÈáøE(è×79>È8¾‹@1Þ¾=P\7d<þ=~M.}ûiy{þööÇ×ß>èû7Çñx æâñuášôöï¿ÚOH\ÐÇòE/ì©þ[ÒùoI·VØ´x-fñ‚Tîd#ŽsJæ¨âqgW©ºåYˆ-AŒh;©Â ™xAUX™‰Ù•ñjá ´‰¶›ÞvHQ…—NxéÖ)Ê\>IÝ£³‹üÞŸh´Á®Òâ·Á!qÚâø­"0J\’^ÑçôûÞZÔ’ë¾òe5´-¸O ¯,ØØm :p(@ÅUïz¼aYˤž W*îDÜ£â~…!Dk{Ú›2ÆË»¾¶›Œ÷£˜´ Ýc ¶s˜Ïˆ¹…ø\&z¿X¼±” ÑÉÑ|FÜίêÏnVÁX6‡y½äåYyÏô44ñ +Å\ÄxñüŒÎLóFˆQÀ²+ã«xg[±!$ ÓÃcdÜ•§aƒ_¬ñâ/¶ø«_Kåå­¤w6Y¹6ö9´]ìzhEÑf£©†Xª³Ê#¼ahé ’èƒjxG»Œ i“Kc,Û3å–ö¾zæ^[Î@Éœ\« +e§óöÊw“Â@²z3cDSCy-ªwiÃ3M*¬rÂ*?¯ÉÐu°'…RyÕ»²Ê¸FÌgÄÜò…‘)AY‹vÑiè•/têaþÐ$ÅòII± Çœ¸ô/-æxï{ÁAÎNã‘ù¦ +9z»mŽŽ¹BÌ'ÄÜÁ1åâ$.Ç?ÜMjÄrF,·†»Ål—ulbK`Ü6·e +; ¨å‘-Æ&CJÙC»"¿V€¢m„˜AÂà•Ÿ¯£ëÙGÇ(`Ù3¶!uídÃ}üº•m«Ñ¹a]3Ί;]\VmW‰îß渧J¼ªkûyÅŽJ¼ÆÕm—$¥øDuFÒŠˆ9•YgÞÕUu¸óêæÏ:N¡Þ~†ix·*Ì©c‚.3 ’¡Û$𢂟»ðPŠÕ@J8ïÃ1™–§y'_à Ý»[Q +9zõ}EQp(@ÅqŠ5)@Y]Ä ª8!„ìzÛÕ~9›ß,P8nûÚ2]bGÄEѦk¸î?}ªðÐnK” !iØÉ'B‚ÈÁíÄxñïôÿªÈ 9m2;ö3¶ý*&!ÅÙCôdÅ}{ª` àM»Ë1=62î¬o]x]´Å€£?BToÈ`©¼¼‰Ÿ%(!çºÃå*ü4àb¶‹üÞŸp!`˜^R[b ˆ]~œŸV€¢MÏ‹_9á(—Z™Õki#2n£q4ÐD³¹­ÐvÕ_—W.Ÿ£ìõI»ˆ¶rZW }uÝG¬€Ę30ÞlÀ™ ;Š˜Ã±Tˆå„Xz8Ö²2Rr:Ä’#N3Pˆ]ïÎNΊ¥ÆV+C Xt|mIvCËèñ»Zo×âiÚ-¸»·?C[ùF'¿ozîÂPÅËåïx±Æ‹g¼xû` &D³wç(5l·â8–MÄîÊàfcµ[ÐF›í ý—#ZrÓm=E”Ä é½} GlØ„•ËŠó¯˜Œ +`7ç.;ÅS_¾»ŸÆ'H „=~—\Ûõv²\².|°K¼£áÍš•ÖÎÍ RJ)îspœ"$ŽmS“±œËÇ‘sá×ETüv~ÿÇ}Ù$7r+AxïSð†Bý®}„9‚—vx3÷xÕ¢$£_40ˆftÍjD>•²2³^·±cß,)Ÿî¾‹¼ ÍÓͤ7ÛgYO•mI Ük¿OŠöt¡dƒ]oì F貈e¹”½ß¨t¯ŠE}¥å²$=»ã¬TDÎ~M\n /‹¹[³ßÌ8)Ôîåv½£H*B´¸d5ËœJÑ^¯È·•·f¬;¨P–“=xŸs3.ü çü*¹ +y?›p5j‰iOLÏÍøµ.AX’Ôn[¿ØÆ@Bì9Z“ÌØòâžoïLfñ\-PjxMKÞ€Æ[w!Ÿ`ïk…âÌxKfóh”ÌÅß-ÐݼõY÷ZƒÖ.)פãt¾Æ|ÁçÛc½Zfx§TÎG ñ. Êâ µëÀ×Ëeª”4—NÊ­sàVÜóŽ˜o¿šC aä2TÄt‹8RD1}Rïèd2&s!Çéî(–0—ÓSn]‹@ÿ$ìªâz3¦BIXÆ[w6lœPz:nœmÒ‹gºå\ÞuU¡â醴êøÅþnšØ¤×†W4 E>¼55(Ò»æ¾H¡%…=) Hws˸¾,eÊãÛsYÆMé ;[JX&Ü쉬ި[Ñ®¸dn½ â{?WÑô¸ð\¼õGœ“ªÿ-â̘}áJDlàÄzv ^x€¢H²Ò×ñªSceMó +QkÇØ.Ilâ1 +qñ‹¥Ç¼¼W«b2šgˆ_Û<*N,üÆtJ] G;5P9e-šËéhÃûZŠ6߈YW’ééŠX©á,Z»ªø>‘°%Æ=1¶Äã#éEâJI]gg]«Š¹³®« +CWá;›ü«Ä5Q®]«b:=ŽTÑüÓé¡]/¶¤,g7ùgUüÀÙ„³ i§·nœÎ3}íq:+Ô1ñ…œ fí*âšÎ–É:ywN'žó‰~Bkb“Ú™ñ³šlÜ+퇲öËûõÄÏ‚·#Ôˆz'Çb1LŸÝ°¨ÉÀºfö4ë±…AI’a|Ê-¬ÁSÓíÖªšJÉ÷ÂcLÚKÞ’ýç~û]$©ÂýyÒ„>žÿáöÇŸ?üsú‡Ý~þõïNeæ߯÷½ÈD²›}MÃòæ}èûýÀÊ}Û£òñeŸo(IË6Œû¿Û¯é‹÷õ¬¿\?_~ÿùóƒ¾l_qC;‹ûÏ>#”Ûßÿ·#˜É S- oȤ½Ÿï@ê•jû+°^Pu¨9±œË»v¾¥¢x¹åå=/x÷p&@ûŠ¯¨ùîFЮê¦9žíµü6{Â:˜Îù±ær¾«ƒZ©ØoSR§ÙqI}õàX{˜jáŽï®é}Kç[<ä©ûîâÖG )íHé6Ü3oÔÂÊç궥;®ú¾ ýö‚yFâäƒWOá7ZØ”p™ª€Ânat8ßU‘¶VºÊrÑr¨jîWVÊÆóî“âíß®J +Ts(k Êqš¹QˆfC5çÖhŒòáßþœØk`}›Å0†j$Ö&0LrÅÛ.I˜éx¶WSl± [¶™ŽÚÀenÆP ’Í[ZÜÓâíÍ0Ú†Š¡x)Cí¢ÔP¾@™C¸hŒ7ζi!Ô…[4Ž/¨ÒAœ*¨Ö Y"•ÃØ=çlxµ†ÕP¼È5¡S¯½h9–Ýb qšEá ÷÷Ï'dkáǬ‹ÊÊf#]cTK¨Ù¢–P×#*¦Zèp¾ /µ¼´ç¥wòä0-•’ð¥;•eÚ %ì´¯ïÑbË‹{^Žv©t?¤pÜ®¸jB›•a^Ê1Ze +S¶Æ¨œOÖ@;YlxqÇ‹ ‰—²zœq‡÷[ Óqv¾4Ö|bñÖXúEÆP™¶]”ÂzØŠéÓG‡ó冗w¼<åg#ÓJs¢¡qœJnõ^Wuòuz% ”ñ¸Ú¬²ƒXØÁÂp´Qê"ÆY-Õ8«%æÿ|ÈzÅs7Z•A-Û™£QªjVe¢øW  Ǿ(—8c¥P¥;Ú‘@YS-ÜI†oÙRËK{^ºd»Ò¹JÝ’áX»Wk4¡RÍ©ØûZÍ«¼þšŠ£–À-/ïyy4ßæ·˜t²û¤Žµ+al7ãƒ4[ÏúZ¯¡ÊâVÆCÉ6s(ÞP‡¤ÖÍrO>ÌVÆoIxXošÙbË‹{^Îv%oå8Z0 +r”•nMX6Ó•ðk'R%VkPÅu›wìœÚ87ß¾jˆ=£b!8QlË„%ÃÐ4Ô~mz”¹(œj¡N>|Ï—Z^ÚóÒh¾Kyõ£î²—x÷z˜á}à·&Û½sÌûE --ìiáöØ–fo°ÛÁꃮ°*ËVv…(1PwÄ(ûµeï{»×” +Ü«‹+¥Œ@QºM”nË$V¿ å_›VÅ+ÚjM¤‚a¤àõ ÔélÕ¨X» à ªP6¯£Ëñ5¹6°3·M_êÛ$ɺ¢Í7œÕÖ(—nb ¡Jx´&cš”óÉM±.6¼¸ãÅÛ8ÉÐr,ûMhÒÑÃõìk;t2Åáýˆ³‘QËK{^ñîõ0Ãû .d¥_Ê5˜ŸÅÉ +‚‡5Õ‚a|²$R±ã Ížäm6ê4³`57‡ê TJ0ß7îÌ÷›w:×NçÚöíd=,äU +Õsxë‘ÇþðE --ìi¡¡=5N®ùLf:î›ë¦Yá7F5¸´Ã¥\‹ñN5Kæ='Žâ¬ÚvöxÈ:«„}MMµk è5=¡ÑìtM8=ÆŠxìK`ÕŠ5°ÐÀÂ&F+o^/nhyGË¿¢h Õ)[éRæT*ꀕ[VÞ³òˆµÈ$í]„¿DòZÙ¤ÛqÝEwiSXű†Ù´@yfÊ(«WîäÃ÷’MW›ó¯3 To1±ØaW8C·S´ÝãP: г]‹f‹ +›'Œüë¥óaï 3´<¡ä­(”;aXQiÖsL9Ÿ|7´´ØÐ⎛Ùvý 0–UrLñž`þââæð±·*Û ÿùíwÉÞ|àþßP’–m÷·_“rùz6YÖÏ—ßþü ¯ÛWÜßÐÎâþ³Ïåö÷n2>CµíL‘¤¦xyí¡QB‚‰¸¤"¤Câ…=õÅLòýfÅŽ*šûjÒëgî+nˆyGÌ·™drUÔñõ²Igµ³5¼ÖA«X‡ø’ŠðŽ] G|5EDôap —³‰^hxaÇ ·QâêŽÆ= ~uJ (í@i Zj±Úëšrµ4,²w@ß´!ñkU{éƒþIEbXªG›øP„*§7xÙB`«~ÏT +"qA¨Œûäeæ¯O¢°ÿoîYÄg\ÜÔ2|íƒc&‘ûÁð’:–1ñt8güj8kí{¶Ä¸'ÆÛÃÍÃCú·Ñ‰Å¯9àNz4î6©ãw›ª˜f\’ªŽÝ[bÞóí­^‘òDÉœ&>½ךŒº~ü¬·)âÉév]M5U€ÞÉñì¾ H_9Ž&F¼òN–²"×ÕÐ|ã2v‰Ÿv‡ãŒ{–·KëͲÚÈ^q²ü4kwã(cÊÙN¾ŽÖf›$²Ò%¾bã‰ÖƒQ9­§'ǺSõWªq¤¬+É2¼yKg\ÜÙr·£]Ñ+Øß]Î&^êìéì«è: +×Ù,±poó–'ôk>A  †‡´°°‡…ìBùªGö¢®‘ï$ïŒ|¹!æÿ±_6ÉqåFÞû}—Býa=G˜#xi‡7sÿW“/‚EàE +€¡•ÄÖëîT1+ó«‹bRìDtÀWS«Ðqñt…²F¿¥âÓj†¬$­b¹*–žâ™X| ù1šP¢tÛ¬=8ùi§eyNÌ„ø +©P x˾;nëHj.Ái·'+HŠúwOÈâäXliîHAœ|ÆÌýÓn›¬àä}‡YOiïºTûÞ§-CM[·ONXêëåV/_õò½ ¿ØNØS¢âIÝqÞåáÔ¦uÇžIb¿¢#u(抷Œ 1(<lÛ(>Š€% 0¾Q<Œ˜Ÿ)ž[§•iêïÝ>AìI¡»xÇÕ³-Qñ{7¬øÓ¤¸«7J‰ì;‡Ëç;Kmrµ„tHœ×Íœ +`•~7÷FÏ#G]䪞ÁŒËa¸ÕK^ºè¥½)Vì–øàØ°—UAÐ]ØÛºÁl7Šù¢˜[gJÉâ-[Ã:«!¬í(˜ Q¼¥bÀlåsR`-Ësb¸©Ç±éI¸&ŽÄãÚ†Š«n™a¬Õbf÷x(ÔïámsÉ.?äf²ÎI&ÍP±„ô°_sò>.ÑÖáM¯N´³X‡”@•N*äƒ8Ý“¬XtgÎÈ…FéKX¦Že(gw„ª>[åÅ>õ:}+ºâ|ÈiÁ˜ÁJÀé+Ä 7¬4·/sb;bÙ0§Õó‰ nˆŒ9w¡aÅëÑá¸Ps|H\[š¢T®‘âíXÒY'QD³,<)Ô¨:K–Ú#³]î óe«xRÈêÙJÁ*ß8 4nóU1÷ÏåÊÔ¯Œmôr*€Uú~©ä¦]FÕ,!ß>7×3„UP‡µsÈ’‹qÂàøœ­%¨QLÅô¨Žê3.iµâF/7zù¢—= sö…Ó°–?<<Ÿyx.UúáYŽÂÊäŽÈ1Lìxkœ„–œXËrGÌ̈£æ‹ªæ@í–­‘Œ0Ÿ›zWoƒJfðüÆx z +”\¢~Ûl¶¤¾i¥R×»ƒ³ñîPÑ T(¢ÊÍæËÉ Âþ|·Éª>_ÆågçĶ0gàóÆăb‘‡·t…¤“ ’¤BÒU܇âapÿLñTpw×Ä}Åû̸:F¨õÁZÅtUL¦ME T¹–/žsvÛÎØϹ”£ºÛ ~Ìá§ä~¶ô0–Áå]½ÝªSŸr®£Sc7ø9íŒó4ÃÕwmŒ‘]û¢1j3 çûS±´ŠåªX~¥â§Sª‹;nꌵ‚ŠöqxŽàd€+Þ¯•ÉœÕ +›·#s.P+ö³bâæ½J—¾yDÁ!ºe3[:‰ßUü[R?÷™°³OB‰<±M˜@¶ÒOâmæ{^sA` ix±M±3X¿;GÝÑRæXw„7’fÀœŽJbçxÄÞ4êâÏÔ6Z¹ÑÊ­ü¡5ìeÊýÒx©–[±#pùŒpÖAWü9«²z¾­^jôÒE/=¢AÊÓ€!— +Â5áÝBüÝ™Bˆƒ¢Ý *QöÞìâM{bCfæºåɉ:euYÌŠÞó¨ì¸ë‚¬B*ÔŸñ>>îzÎX)R¼åŒý‚«ÅØû°µQœý•ôüêÿþ㟊ž&åýu&ä·×ÿôû×úçþåöøëßÿ»àŸøu˜ùm…ý-í4ø}õù @I?~¨ù}ÏŸ²ó9>Þ÷ˆÈO5ï>ÿ‹ì0üãU¸þxøýï?>æïž_ðþ†vï÷ù8£þçRü +)½)H$5Únn|ý=ò£³ÝÍowÐyïú|W˜ßàõ3Å»•‹d˜ï6éÉø ¿šï+¸Òh}åLä’¡”`´[V©ÇDÑvIÌÑ`h_õ¬Xϱ/iõ…S:Hqõ–ZV+¾}ÏÄ7BΘuaD\ÔŽÍ7ÞºI5ܺó}í## +ý­Û¦”ÉÌp¹‡gn*Fż™‡ÑÑMúÍ1<ßåàS .­ÛÎûg¥š_h)˜ï–w +§ U$œñœ­›šÃ•A4¯æµFïI„óE‰.¹I8œ«Ý¯…‚ËóQÍMˆ×0‚{Çð¾aih¬t¼ÿ†ËÕpÉ©‚°áÚœ˜[u +õ¨jN®—û°6¨xÖÆNÐo¤¸VÆú{7ìâþÞ$ÅW0‘4îçù0^¼èÅ k(ÚW+­Z¹ª•{óÑûÕ|²F^1ß¡”ˆæ› —ß›ôïÈÆ5]¼qXKØvóqüùQÜÍsRmîŒ ò@ ï3â¤À\£`û[/¶zñª½‹Õº Xt"íXÌŒH"ü†g’P#= áÅŸÁþŒ÷Ax?ìT%Šâݶ® +Í¿t¾/–³ X¢ååꉻZo— ¥ðêEkK#X.‚e@0U‚ª9:†¶³®‚Š˜³ã|918¬‡Ë¶æœXod¥hÜ*æ«bî)¾ÂïÈŒcø%-€•¢ÂØñ* \bWüô1µŠéª˜çj·gl¡â꟤Aoéãã6s†ÄÜkiå<æáx¾L,šï]/ÎNâjÓòŒ˜é_TŒ6n77X‚j¿¢—#$‰Xx7µgy÷¼6>k¾çÝÏnËb}vDŸGÚâ 6ѱìËè®'Â4S`®#öK³ßþ]î_­À¦'Ýp¨`%œñÏä³ bœÏá3Î 8 xpÀ#‚Ç–.Œ c0ÃrŽ…© +ÍÁŒgÏUñØQ+f¯¹Ü¶×f|×Ä¡#Ô¢“üpZÑq®@d!ºÏ)º«â1ÇÕl@¢+¶Ì5‡ “pÆw'ü‰Ú+HŒFH0Š;"‡ ±"Ó^Ü:К¢cnÇœ0²ÒOanóU1÷OuEiÓ½šÅÜщ´ é°Ñ‹½øè6]%@ÅÈÃwµv3ø5>0#Ĺ'E¤¶#¾ŸÇ$–¨Ïåpu~OÐ }ÌÅ ”æð^©ÆÈ.rõA7-‚ýsT¢P»‰•ËͲ•¾6Bˆ U$<çn—ܧË6W1y=Ä¿Rƒmõ¶ME4…$u¹âvÂc¥ÏX $ìWÜ6[wXæ ÊòfÌ…  +í§¤Õ+W½ò¸å†‘„ø*јktí6_o íŸpÛÌ—Ì@´†1§ãnï[¨¶€õûmŸ4s¡l9J³ ;ŽIBN›äˆ©­\€µ,?ãZS£˜.Šé1Òˆ¬¯xøŒ[¯˜#WÌhå›™ö]®¢ bÑ\ßsåÎd›ì +å÷aR†R±yn“Áçµ™ÿ«I@>[ú8û“æĆ­AÆ`†Ë¯Ï™<\žïˆÏh©ó-ŒûŽØ†.ÿÏ~Ù$ÇmQxŸSÌÒAý»ö|„,“ÊÆ÷¯ +¨±l25-‚E@$YY’‡ôSûõëïq2ÈìçY|Ï“8dˆ¥Ü°q°‡ÛöCo3£ g ­BÊr‚¬9ºsÝѦ6Ì5@ó…Æ»\’ ÅóòÙqéÚb"V¬ bÃÁgocÙ)–ƒby4ØXªâ”t3·ž+s4ã ƒÍ*Y.”lJ ž—Êb¯Ž¯Ç|8Á ÁEB¸¼ìâ—Šûâ0A’r†y¯7õæÇÉÖõœïö´Fuãj +¿R{Uk˜¿&a>\uîpHU›ÎkÜÍlèX5R‘!zEº]±ýkÀ’I|0ú„YßnÄ Š£OÜÕ ‡Àã@ԀͿtë9"ƒitÝ&$2´rû|Mƒ“ó'îܽ³\ߣrÿãÎÕ¹Ö:„1©Ï×-ä‹Å|&U¨N×QÌ™ PŽf<[6 ×Øų‚Ñ:Ý“l¸Ç9õsfî„å‚\ (†Gx6´)ŽÝP™Êg¶‹ÿÒ¶­Æ .^‹>œÞ"×Û¸õ@Üëg íVß<*n™ñGÕÂAØ¢7c}S¶Øg¤žå²bSœECvÿ1cÙ+–£b¹æã¼SœŠs“â²=\ç.¬Ö“~,Õ¦Á#Æ°D_~pDqtý¼ª7ÌñÂFõ®p´ÚýŽéöŸ¹ýv/ïni£÷Zn©ìËA°´¸ë¾¹ïåˆûdº]Ü—·'‚í.€ÅF›b§·…Ã,âjˆ7TêàŽÇÉêþ*[xÔ Ì’OgÌ{Å|TÌg3îYiÖ3ÅR;Ç)ÉB)œȬ ^º«+FÕsþÖWñoE+¢…"B+RI´qsÆp©°ªç1<+”@0>žrÆfPJkWüRl¿Æ%é`²ì{å2St—/^ájE X:Ï´‰ö ­h9£âZxJX@¯:xôͨ”f¹„e¯WŽzål¾GÅ-œöâIÂ!å|Á“8‚S†:Þ€„wÜ<ßÑ©¶žâÅ®†Õ7Y<ß 7n­ùªA¢†¦1Ï|ÅÁ0WyN +È*#¦T\]¡e!O,×å¸0ˆJDWõ¾T»¯F´SKµ´SV£ä ‰ÃnÔi¾;½-œªÍÜܲn²“+¹òh1C/e)ˆ`0Ãá ¼·D[¤E¦ ¯ŸôxÆ#ß\:B0Ñý§âVx©øˆï-Š?Âw2 G·CwÕ¡#2ç 'ftÄz°ÆhP-*ž1ÙÖsZ®¸£+’£EiÆ›‚WŒ—Ç3.@%é `¶ÞŽÓËÑâˆ.GHšGWŽÞ;€IÂRTf,t‡¡h˜j‰øe_M‡… J¢À·#¢iÏÂk¡à„ç÷­™ÑFß7N–Br¿ºgƒswÁK¡\ý›F'YWâAHÕq5ÇBšT@·­GŠ¥Ë9öw3(•üY›vS-&pµ°möI2t»¨øí‰ÕoZ0IÃ{[OÞ%ÈÛ_Ÿ)æ½b>*æ3Å= ’4³¬¤x¹¦ÉY(>Þ±Yãεp¯ìËA±4ܶµhgAG¬[ç2ò"wdߥø¬—4¡I’ÑÁ\†˜­»1HEÃmûá‡æ‹1žx$qÈh±Ó›wzóAo>Ÿo¥TŽ²÷§ZÙ«•£Z¹¢ö£%£ Éf¼mä +Našu"ö®MS sàˆnùpPÜÔ7?˜q,6:ƒ»mœ“øjÉR…³lvÕ\ŠZ4#LF9¤Z¢†¢U/‡96!õVŽ´¢ÁžÉ±6Å1™Õ¿õ`Õv‚OÅxÁ V¡ìÀQšÍȵ[€—u·t9ÇóÃr¦X‘ÑL"♑ј +ä‘ûŒ3^¯y®ÅÁ«iÏšWR¼Ø„«Ð¼­É™âæ{¥x—uÍçÿÆLÛJŸÖ |88e¨~(_žï躱¼“HF{€;S4 +n1E›àØ õ#R†’Òh¾ìšÄ«9˜Œ—š1ƒYØ‘†ÐD[‡)‘¤ÞŽtžÄóð& o Ši\Á¨`EƒdsŸoFqM77î㎛W‰"«|êŒo2ÐzÍcAj+`¹Òø:írmùª#NýжsñíX­)q60”ÐÁ?&ÜÌ@¯gÜ“( +>qDㄇ«µú&³…ns% ÈLQë˜n¾¹~Ïç;O/§x#bÔö¹u3ºõÐõGa@’g¢1»ì£}ÿ§ÿüåW%ðÄÏŸóö_òüù×ú²ß¾|­ïýV_öøöû_ÿØfqÚcáZköÓà÷|÷íw¤¤?¾öäÏYÔïññýãXÏ…n¯~ûsû%9•÷ŸÖÇìûÇŸ_¿¿èý»íŸx>±Åóë:"ÒLJӿ=‡ÛqÊP¨Øë(j=M§ÿw®h•J vÂSÊ!%|-x ­ÜMûòÎÛ+žªÓ¤zN?Sñ½¦»Ùø{T|Uo¨¶†¼X´sÂ~'¶¥ÌÄuÁ‰F«íºp«)f”ÙOS¸Yñ«î‹Wõo³œ¹Yx[30jp3¦4ÄjGn£žœ-à)9b-0©¤yæàiúiÅk*³_-É•Ü8p?§Ð€¬}a–31ß?bøZ–\åxYñX +²íMwKýª”ÊHä')–+¶Å6ªdŠ˜$a +¿Ì±§A§®¸µA[é8 XÓ´ÇÊ +(w>À}¥]*(ܱáQ¬O©åËÔæ]x¿)ÇíM˜Ü'ÃÃw»©U&L8^ñà$ 0«>óDq”±Û ° ɘ€wªÃb%s‰cC±‚–ñ‚õ’Óý¹ "Zõ)ÔÄ2€·JåýJ˜·òn‰§­™Ìh–æÜœ¹1UÂÔþ—³ [±x{:jb+ªB‘Äî.¼rÀ+'¼òÖõ‰P’~“°#Z;£µ·ïr5°â;…*(•¬½_ÅÛávH¹)ÒUIwÆü|b6Í7kh}£¬ˆ­£ïÂo…À’ ]Ñw®j|#¿¯8™b‰Ò[¯ø^ÖB>7ƒÛ›0õ†O¼Ãëíb +¿ˆøÇ b‹û“ârço—m‹Ã¬Lγˆ#Åvl'À6BquÐZm'Šj‰lÆ­f^€Ûêìò;lÏø=èdØ&"µao?%îm¿3‹+ÚÈ$“3¤£àÑÁy{Ðí{‰½J°KÍFÆV>bå3Vîq;ñÒŠx–ïUéZûSÄ3óÂQúö»Ž›¡yM=-ÂSD5PõLÃ+rÌÅ£ßÒ†9î‡òˆÊ¦Æv:Þ­ø<ª;šeÅgIŠw«ï-›Á¥¤‘7k‚9Öb=!ÖŽ7«ÃÖ*…Z_Ë\’[ÍÂcF¾ª…/®-L%¬¨]© +L˜:Úzj70º‘£msÛ¶ +T¶RqTmkì^ļ|ÀË'¼üÖóµýª¥·*ÑÉ >âå3^~ëdò̃s°š{ÚåŒ{ÎïU¼if0(¥Ü.xmŠÒ:%¥×öÉïpf<ãwff()IÒ‚§tž‰ÓSÁÂoOŒyˆµ¸æKnAÄ *ýÞ3-1^òoÏFM±dÞ­ô(:xm¼ô( ¹Š_¹íD±UM ɱ¢†Å¬Ü×né¼b @ñ¤J¬yuÜÛÝ:žuu!€–W‰Ç?€†íƒøQ0‘5áø Õµ¯Ò™±/a;¶3`ëIxêâ@gÌÇ‚¢x &±ÄŠ§‰âª$¾°áʼSÔµF®w—Ÿ™Š ƒ0N¯Ž/#~¦á©WW¨9Û>;t?+(:Àñ°³õ½xq® +1ÑÌÙV¼¼ ‹¼)aßÝôˆXψµ‡xnB#8 žV‹‡ÎømC)XÓ>±ž"éÁ´ÇìP$*7—x +¿¬_ÿB¬´‘«)VÐ"™«}àå#^>ãåÞÛ=ØÁjÔ{ÛÏ4ˆ%8ÓïU¬·^ÚV¾»¯T@Cûzý{q¾ó?5ß í~Û¢"HÔ4ÓÖKˆý¶…RmM]27›ìzÀª'¬úÖu²í¤T&”»iÞ>/³‚Ä BRý®Èq”ÊÙ®X¬E*¸Ý¯á¿tjì¥2ã¸wWLõˆðÖ|l# +*´>œùðJ©Ü¸­ŽY*_í;¤¯-!ƒªñ»í•5$Áí=Ø_CÃIüüÊüò•yê»Zwò]---6Zœâ +…xŠ¥¨zm+"ÞnÂí83¸n$ +Åöάmµ‚Æ +(Y"¯–sµ4icÚ&Ô9ô4çæôß¹&, ÅÄïÆrñÁ¼RÄCò ƒ`0ò4™TW@ËbãÀñ`lŒp<¶1òöà zw™8݈SäA·Ñ*r«Ño–¯yÄUõþ<þP ¨R¿ò ¯£¾vÇÖQZÒ¢@‰n…˜¤ÝWYYÚç<ó…Hñ²r1ÕnTm£t‹¶£€~wSŸe V ZÙim†@-‘UßÕ¤ë +åîüÝqjÑÛ‡æ‘ⱎ“ÞÛ6A‘ åpU öÇçÂ/'š§ò-&‰Vl r\Ü%3´=‚¬©‚ãÞæ;µ™íhÃ{MM BÛ)8ˆ@kÖ}Þöš¹yñ˜¹å#®´Ÿ‚éá­§c±ç4œWDÜú%Z®ã921rVÙî é½Â L£¯ +="Ö3b}ë¨bj€ÔVJüxE++àí­â—pù—ÿ€ûÓä3VÐ"â¼|ÄËg¼|À{7ÚVØ؃6C(ÁY…¿ŠõVÙÍZÚ×á¬èû؈ó~ác-+,üöK›×ÒÚ˜k—f‰Vœ â¥Í#ùÖ<~ ±bvu=7{åâNŠs³´·³C”ú~u`©y{úí¿ÿø§yûyúþ}mM_ôÇ÷mïú×/¿¶×þÖÞõöÛ¿ÿ÷§ò÷û$ ¨ág"ôã<kC(íÏÏ/­ü/ „èí÷'œêãí?þ~üšîïBýþñ÷¼éã+ùñöÇG2ÞÿÝH’úöŸ#~ö\<¤× æõ‹• ”¶vB€Ø¶^ñ"a*ÀQãf´ _¹…jññÁ>ËUfŸGÄv@l'Ä6Qònø·r<±–6‘À ¾}ßîgQÁPu‹¨ªõïm™ºÒ@BÔ•pzµØÈŽm1´ûå…¸¶(}5,d!œåÅjök­T?Jé6éö¹¥ÐÝ7UÃXµîñR€0߬ŠóÕpüUoo¡ìßJñ˜(RŠÑÀ o¯•e¼_xüÝ}nm»Ýœx€Uê+ØŽˆíŒØzˆÏ¶6BðW¶¶]t ƒG¹[Â]B±‚2%{nšM\Å›¡å +åñð6üŠiKºïõ‰W+æV~³Ðh )ó‡UC¹P~qŸzž ·+¢ áÛ'ÒÄÔ Ò¼ óeÄwsüèïΙŽý²Ž½ëÃc:N“cÃQGP‹úF^QªßîÅS/Ï Ö(÷ºÛY#ˆ¿REb$ªX-ï ¨JÒ~–k—ä@H}ý¾´¦u‰j b;ùƒ7@éó;|m}~ñÚ¶s´Gj`Õö†@Ã~_[GáÀ6 ã‰+ôµö#µ¥FP’sKzE(SªŠÏd–#b9#–·oìÄÝáÈi'^c¯`þ­V1Ï_P¼Œ­‚kÚ/×sãG#&ª‰Šïè—CxSA8H¡»ÑÎä—¹¥]•ñ^>âå3^>à½ÛÓ\ 8÷õ»P6#D”LWSãf´Š \(Q…_64ªˆyMB±‚2é‹NB€£Æw6µ±ˆû‰šÚ~«n¿nÙ8FáäêV̹ý6Ò^ζ_rlØÕ°u Œ^—˜ÖÕì€ÖNhmèâ"»·«Üvµ0Ælª Š¬¯˜Û©÷Ñ„KÉSnÁîãXµîñ + ÷UaGÄvFl=Äs»Ao³?+˜« Æ$œ®bÒ7¶e$,VÁ5Ù+Vz|& ºCM,ï#é5M(¶Jæݹ1LñÝg·a¹Œf¨w¤^>àå^þﶆl±QýÙ͈·s ©"™KL›Ÿ'Äc7—SÌàÄéÍñe?óµƒw «ØS—hNµwËTbe…R9)ñU ¶UügG-ºÕåÕ»ÇèUM¤ü*T”Ä‹—L»€AI)^Q⥽ ïVÄTŸø?ûe“äFnDá½OÁ (LäÖs„9‚—vx3÷0(N·P“@™(Ðã…¢Õ-õuòå{/wób6θь%aÐÓt|vÂ/¶Î$WÇŠóåâ@:àl5üæä Ù)p¶5½Ø“_îU±ÝŒ…r%.¿TÇïv6½¿ò—¤oªB3¸k?=ÖQEÎPÔ‚^üyÝ ^Ïn»¹[ç9Öð'¯¶¼zäÕv¾W_£‚˜èbg;*bdë^(b«>q¿’ÌJèߊ޸犘˜uµOÒÞÆêáb–D@ƒ¾öÐý95x—ø½ö#©ÞÎ7žðSEÌuµ +Š9pµ%/ÑR_™÷é‚Ø0ê«åÜ~WÒvÉÌ.˜‚œ[sÆ–.ÑeÚ%›_Ý%f:ÛvÄ’\Óå^1ñ®3óyÁ½ÛÏ‹€RœÏŸnÌ-1‰ùö ;ä)EÀËÅs5b×¾¯#GH&QýY‘Ø 0yÙˆØK•p¹ÚØ^jxéÀK?x#Z-€ÕÕ6šï~Ä¥ž¢Å.×ðÄ3)!ˆÑÕ3ž¥áê¦Áx—ìj¤ %–ð¹<&ˆx+AHÊ ÂAÌMSÄÙ醴”1è•Ëõ­wíaL¿á‡BEÜY-\lf{Ñ +z5³tyEû ßqµ ©a?Žµ%Ö#±öˆÏt³‡/=Ï‹úN¬ý;n˜øòÓ¨VžFÓ7nŒ5Ôï^…½dÐìûÃLõr) ÕßkúÙ{êT@4úuŠâ õ‹L.OŒ™î` Idb0¤0/NûÙõîk ¬4Ê%¡‚ùê›:cæ¨U.yuVW3+ý«SZb9Ë­£ãcrŒÌøUr(¦HǼÔòÒ‘—n1³WäåÜ’V׫»ÄlbJÞOŽa ÷ÛÏ»&(¦Q^,ëX \B‹XO’(c`Xü´ ûSâvÀc6x·¨“äàÌYÁá'‰ŸnDŒžÃ¥[±²Õ#´`°ykÖ‰ l©bµp–%]}rÌ$®å‡<ö‰Ï sKÌGbþ¥Þ/<$Ü#›ïQç%6µYómy¹áå/ßúQ'¤2G^Ì"$!ˆÑÕú¤¶;¤]®†‰öà–Å÷‰8vƒDÚ¿è–¹6 0ÑÅ7è‘xÄ#^'! ‚yš*ÎzÚ '‹«ð‚[g +\oŽ¶Î2x¢ 5–$.\Ë¥]¼u3“™ï u‰%gl¨xŽ¬'hÂ~>kK¬Gbí7¼oµ‰" „a^ðØp½?±‘  $îÎx˜øò—¥„'èYM<¡Ú}êµÁÙMÂïï󃵞Nu›nÿúÛ·z¥JyüXh¡ï?þ½¾×ßû½¾íõ½nüã߇A(S]f+Pj@!)?FQÒý÷àd?¾)©¾»ÿ''Úa<þ^G]÷âŸót(¹æSýª\Méå®P«¼übWìÏÏÒʳà³Ì‡Ï’:Ê«Ÿ¥Õßñ)q“OÜó‘¸ÑÞ‡Î^ÿœ¨ÄJ=ÒT9È&+šTß^¤é®~‚™‰ 1¤é5í¼xr"– ±¼u,Þ~Å2+p´‘*4ƒqÚÈ+ç”Ú^1PÇ}3®ê8)dËmUt÷¨¢oóêå=`® ».ÑÞeýÿña f•º¶¢ØR¥º/É« ‚_t§˜¥íÂr&–+±¼Ýê?=.ü¬ÿìâÇ1’¿yâ±1²AìD»‘ +T bØ©çd ¡â»ÃˆO¼=Q5‡ù¿Ž¶kºUÝÈóÌ-»ÍZíB¢H{¶zæÕ+¯ÞK‡-ÔÓ3ƒ„P#á çËI@s¨©aÉô%P­TÈÇ/z§ôž†9ËÌüŠL³Íl(ñ»¡m¼ÕÎmx·m5ßC¾)W{ä’úUà„iE-"R}ÆŸšèÎé}=@³#é2 r>“ºßáÛ_¿üªìã£ÇÏÙÜÃûÏ¿ùÃ~ûý›?÷»?ìíûŸÿ~–!çøhØ~̦Ë4äCqÍÙÿΟßdÌiß0ÑÛwÙñô÷ßS0~üÔýƒ~¼üñõÇ“>¾;>äñŽó4_û”8½ýùýáÃñÕWgÒ¾„Ûê«o¸9&Ê\Þ‘êBÊ%ÞÓvwòölw×½øÔï i®N´¯\_læ¯Cn°ì¯=Ú}vdÿ¡"ïˆ$5Wˆ¹5ÖeVL0AÅÆde» ûþŽJHäðT½´ tµê[8ä2ç”Ýzí6älþîTím8Ó†+møš¹ +ú\À³6°–õÄð³¹—$Hu¾KÖe Ò´?ì⻚ÁÄö©»õ±Mt DÞœ­¼È‰·Ië^àˆ!&ÛÆ vÓlP¤m:¹G,fÈ»ö„Ö'=Á{˜Ÿ;Å=[R»ž»Id£{r·; çTÞµ!¾;pÏZZèÝ´ù<{gDÒ©Ú=цm¸Ð†·fþb‚Êñð)ƒîc§lböv×Ĭ*ZTÙ§4&®»î.¼‚bÖÖ1©g^½òê½E{-Ô½zÀÃLLO¬zaÕŽÙ²&ˆh--tïÚìÙ²E•^1Ð$$n–Ý—´;êèáœý*¾p×f†¹b®”»­+±^´žà}r å9ä²àíÉól˜,ƒF©°ŽÊ†³Ýì8;üËòF÷ÃfUÄïÉò½3lÕFÎW Äb«Ú,3ߣ.dfÛ…WЀv²³€,õpª77eO½éã­ûCÖ°ŸIpýÏõ³í+5‡ r¬xÙ'ëBÕ\ÝÐöá5È9=¯»Ãδ}7G`ù)k§+̬‚|œ“úuçÙ‹þµS5W?ÏŽø²ÙʉV.´Ò1[ þ¿’*~p[µ]ìU-ì±cœÈ;M¹ã.© ³¶:®žyõÊ«_š É;£PQkÎw/Ï=:yJRéŒ Þh Ás¢8ß;.§LÔâ]§‡%EšÛɇÎ7²µzù:¼ÞL¬œk+òZ%«t²y3asßÖ¸)³ÿ_ +Å,—gZ=Ñê…VO³­òú+Y1ÃËz²­îe»u!ô@þ*í¾vÿ(¨æ–ÖñÇ´ÔÔÂ2¼‚~WïËÛ­¬é }¬u_pݪl“i‚4•oŠÕ2Bˆ k,³~†3i¸’†·/ÓÁ1WŒ±¬ÙŸ·ŸiùJËç¹Î¾%¶»}4ÏM‡‘Ó%o Š¼§vÓ©ÝZ»9óöµ›*o`˜ËÍqȦl¹¼”·šcç¦õ̶§‰=»"")oÚ¸¦{敯\x¥ƒW}Ó¨Õnºl~Ó+—›»°ÓC"S m¤« "Z‘wÎÑóâá6F•›t^ɽk5 $’òLW´/¶êù°KU`3È9•wl±è• þJ¬D™ÝÖ‚5ý¶Ï¿ê;† ÖȆUf»ÑÑ+‘!G,ïØb¬l ÐbY úÁ~õk³CÒPenG|îX­'¬Öi\ eröŽË‡­²ùèâúu=ìÕ³Wü5y£³— I²†uûî|S`Ö +ïç®-s›qöOI¡˜Ããôpö=ñê…W;¼AÈï¬õ†1z85àîùZµ“‰¿;µö­ÓÍzö­o¾õ\c ¤¢Ÿ­–kœä+¹6¨ãÜu†ª/¸nÉ&gðH#È-[ˆ–AbØgºIÜŨÜpþãý÷¥°f‡mÒÊ8g0åùÞÌ´é,ˆŸ@_•h¯¥„?ynúœ­ ‚)ÛÍŠ—åq­eNq‹v“05›Ø2&ˆà­¡¥…îfÞæíÑÂÏ5CÛ'Ór/­K­s¾=Ñ·kU^ˆy²5Œ¬ ÉŸŠ¼"¯„!Ie¾ƒŽŸ¡¼–µ(ßåbØëM@)[Ã]Ò™aæ¯kÆïÀˆøwY®Ÿ•”Z¬g^½òê½ùö¨áÙ¡€qrÕ½Ì÷Å3"™câ\O™I@‘¶Ñïn™ÆŽiirF õ‚´<ßÁ9ѵi5ÎèÕ\cnTÇp& WÒðÖ¬ŽgZ=Ñê…VOs­çªyWÔÁv>–ýSh¼_ ‡Í|W0‚&š«ßí+RнÁ¨Õ!;ÏÊ/èÛtóAÊ÷Ù¸ÙÅ\³–vY±mdR +ûD™ˆÅm¢l;ûÒ &¶²ëASy¾7‹ckϺH«œ „¤;Dî^¬™B¥z}* {¿Š©×ÍNÁ17O^=óê•W[¼Wÿêá}â_›åÙQÅ1Æ°~C Òêaræ•+¯´æ;Tš 3Û.z`cöé¹@i§^À‚VömµlÛ£Ûš{nù”ã‘ÁŸý•[×ËÛTDmµ®‰¤iº«T„¦º"U«»¼Õù&ÏIÞh¼ÞU<™«Ä+Z„Š'þ66Ì9~tí-‚Ùi£êžY%"$IU ¯GÌ$ïT×Жvp¬3c?²-ï4ãý +æng‡Ÿt@«3^øؼ@Uw[-ï’÷‰°U#Þ. 5ƒ%܈XPÁ§ù%Ó/;bÜIÇ›€¢n¤ŠýZÐßëç]¸=ãùµ-CàX-šë阓'Þ©h’—ùT ÕE6H5#¾;Ú¦Aô±Ö B!Džmi'Þpâ Þð“·Z}<äM7à‘ZpP¶°OdpJóN#NBqúˆGfœ‡ÙÄwy«Kg )WómP"£u5üý2H²ä¶èÞ§ø0L‚¬uÁK;¼Ñý#Œš¯±©ªh²ƒi£™nýª~ƒNd&h¹¡ÍÔ¯:h•D=˜Ø-¢ÕLÄ&@Ü—_Gó‚9_G;ˆ­ÔLÄæ­²†×Ñfµ2WUãÒü==ªì›Ñ’º? ·DÚõT.\5Q±TƒV8êOyWû/»ÿVLÔ#¼CE‹üw37#‡D¶Lg¾q +b³ìª=ÑQD].7´™®¾p”©ç#Ö¥-¯S‰³s\„pµWLs6…î·Fžù’õÃí¿ôøü\Uã⇅Uí¬£‘˜ÎÄôºÊº¿®†{iœ(ë¸8¨–Õ®6ð~ Š¡~÷›/AC\]‡'Í—+—zðŽþàóåêwCbdè]—çܼÔÈ—s¤„œê5h-n?“®Ð™ÄjÚ¿!±_IÂ5QƒOx%%ôŠl3ö„ö7-'x?ÕÙ„k[Ýà§j¸BUIÔ)ÈA‘-UÞ5èFˉçùc+êxCUtW&;Fs•yR77"Ê4c¯mÖÀް¶™—yŽ‰WXÅ=âÐ*ª4K¸yê8ÝùÁÅŸ¶z=ãˆ+` UñG^<óâÀû7íɇº˜,VÃSÞp¶ +B¸ºO¢MX.S©ÄÏ ¤°õl8ß.Çz'j–ǹQºD=m;7ó³’H\J-áÆ­èhŸ=çØ8‡3z£T[ÝZhñD‹—´Gb¨öÕùö×M w³n´<‘çmÛ1ßÂq[ߘ[}ƒæH ë ­$ñ‡#-zÓÕi1ËÍÌû™J˜Æ?´@#-iéuå “ûƒÕ˜xCÿ5ëÍVnÛc÷ݬ#˜Ðêm›9_ñÄh˜é†3O +ûnœï„®-UEsb¢PAÃåK7+æÄ+0IdÁ[Î×!ËÏŒIóåâÏZ\'9ÚÌùv¤¶º¦M$æR«D3žR#fê7ß×ALÕˆãÔ(µ,×ðÄ B“¸ùì7ãd9—ï8RƒV8ÒðSÞKý~ò82š­'ñàî\j¦S®W(ÖypÂœ3߸wá »šxWJÔÞ¹.ïOyCZ!üÂ[ã3´Ç-W0“©Y­- +åÝB#Ÿ¡¥;åÎØ£*5UqwS‹\b·Z)®‡¶üȘÉÄïÏDĆ@+ø‡&h$¦31½¾°ö0¶ã3aÒíGLÚ ´G[ª"‘K¨+¸X¢œãâ͇8$ÞSÁ½·D +vöìÐÕªxqàÅ/þÁî[?~‹ËÛûÜæ#¶ü”›ªaÏfÅD>‘ï¤EƒcGb3°Þlå:1êºÏ·±æ™ïuX%"ž2߉´X|ázT†7£=ÔP‹FÚÝP ¹j¥?šj×·ðøÜ°VŠF…ÃãsÇ7ÓòSnàýT­ìr|.‘†I ÐJ¨á ‰»JIt‘20Q¢­ËçÇA§­¬n³|Â\âù›v:-ÖjèÁ{Ϥ²÷JZ®Ý©ÄM4•?øÓlQj¼6»4RuùÆM¯õÝFSæ;óÖÈ–ÈÜê4‡~s¥±6è½ej”†@TCýîwy2-âÄ ® ˆ+ÊñÁÿþ㟽BQyŸÔÿÇ÷õ—ýë—_ý½¿ùË^¿ýûòö¦*ß¦Ñ ûi~A¾§aõøç3üøŠ½§q|Yü¿¿?QýGëñöoÿN.õûwý9ýýãï¿Ó÷¯Žò~bœÆûï>%’×þ´-M¿5¯ÝÚíÄ_MêïÛþÉÃo“O¿M¾ãŸÞ¥Kÿ˜x»ý– +Ò³NMƒŠ/‰y$æ31_W³‡ÄßžûJ5 +¼çŒ›D°ûÙýQé]?"Þ®î‰ÄÀE¡F ·[ÌgZ­f + SP²0’çxÄP-n‡††•Ð»^“šÈÕÔ žP@üŽÇgEÍ.‰ïµ˜˜½’r¦ÍKs]ü +à릶Íx¹úÓ¬×6q›øzÆ4Ó‰˜î—îS ÂyÞÒu¢ÄýDÜ_7êD& s1h¸¼û ¼Ÿ:åý'D§Ñ–LÞ}XBEìgdìÄ…¾Ò">K\¼N¬žñ¨â{¦é˜K ûå†3–ÅÅœIÇþ±$òâ|3>ÂY{ìûm Bs³H” â b”©Ã«@mººSÌ$ö”!ËCÌE¡Fªø΋#/žyqà]îlÙ4Ì…¡£†ŠØ0= ¡t ¼xp¶›š¸ãl÷¥¸+t’D[G" vw<󘯀‡Áß~ÿr?¶b‚.-,šû8ãâ¥ê˜ „’)›EK|+íGÌ AH¢{ô©&>¢}Ê‘V¼"Ý¥E¤K8×-4ì«·màÅO¼øºRõµÔH n©’ã°Ø¸¨–ë +± 1— +­6NâéæKÖ¡i n£júøÛ.Á1Ÿˆy }B•ë­Û§›»[DvâŸTw…bs»5 ®žËv]-iÄ¥3.½-ܽñƦæE­bž}#)@&«÷m&±1TŽ= /Wq)Ð-ì—OyWú™6 *×Í}ŸLV‚.-Qw§^ ÔLÇ‘‡œR\Ô~ø¦ ¼pÕô±(4…@mšÉ†­€¶åí}ô‰{Íòg=B‚`~,ˆKÖ{Ã[7ŠäðÔÓVKA zÁ@ ;vJ’MÝž]€*/ŸñÌž–¬Xú çoª(v;4H+°ÕL5B%“"J g¼_q'AhÄÁŒ·46·‰j¤yTAR¡V ˆwœñqέQùÙ1 ­CÓÎXÏX/‰ïÍ8®— —WŠ§³N 5 nº5¾§ˆXÙæKJÐ¥eJç|%^ ˜Pàj;ú0YçD>œ°©€0ÓåŒy$æ31_ÍxÐÊMâ·?öâ +b×2¦˜ÎÀôúB+>J¦u¼ñFæÆ€ª=1¦ô4â^<ñâë:îÒY±Tì×q·M$+@ÙêD²ë +¢¿¥£ùÉaÌ«ËϬù¦«j$:/÷‡‰Ì… Ù þÔŒgz0ƒtYÝ#¦i¸A+UÚ‡½ò£â~žíýþl¶t‡+ã.êò+ÃJ“Ðö#&#àFx!†»ug9mm3Ìó²qÓúÜOÀýŽû¦Ro)ÐMÚ…îšØB ãÂÐQÚ³ßlSÓ +G¦»a1ËXÕ‹ƒÖLå,•û§f«‘ýþ Å‘Ï´øu´¤Øjäfn\BWË¥ßÚýM5JäÝô+jt)ß»ÃýP¾s¯ „®]AÛ×@(ÆökÙH¬ãµ~7šo¶ãB +÷H[ŽXAÉ"‹˜”pÕô±©iH\uÊl)—͆ùÿì—Ar#7…÷9….`„\çs„,“Êfî_õ³[ã1;1Dv©©"üÏ&#Ë’òéùáá!VPd3Ø~*,-±‰åÖõð…‹9Sý-yº=‹iˆK°2”Àžäu7tT +$ë4º$Ôð4­¹˜Y aôäˆÚ݃d#Ôšò3¨°U~Zâ±òc'(Ó%np±ÁÅ.~àZ;#D(h…Úeݲ¡ê-Ö}µwhŒ*;}»¹ 3 P*òìK£%憘Ę2O»!獵©›&eaK(D À½%±ÈÀq`V³>žŽ²ùW»ŠÎ!¦Ð[m ,‹´vǾ¨e¥#+Ý^醒!‹åßËò÷°0¤!–±ÜFM4 Á‘·²“ˆ³'W¸«y¿Ø‘+r®¯IfV¬GÌA¢Î,í—žožŠ¥*„œ,i§Ô´ÞG5€R6nÁPËÛÍŒ¾nÕµÄCeâAUÛÎ\+F„?Wì«Îȉ5vèãÅ1àôåü«NxªþQ‡“— +Î/òWº¢*õJ&¶¼xäÅ[§dþßÒúKµ²¥ÅÉÄ /6¼xàÅÞ¯£¯&@œ®ï¥ŽØ28Î<ªpgâ†læC†êSÛÓ¬/èj®n¼9!×ç’‰VöD›(ïeË‚!÷£u‚¬.‹¢ÓÏ+ëYÌRŽ;1—" qLPbuÔíïßÞ˜A˜ïÏSÝá”öç¿Õûýoõs¿×»}ÿóŸrØÄ Zø ‡t£ÔMêq¦?”x×bû©Þmq×i{Cº}öþïö-¹~³ÏÖ——/¿?þñAï?ÐþÙü/)î«D”orSë7Þz«HZ—“‘›Òþ)åø§”^n^º“ꋨðzKt_M,±K¼ÔiBuJxØÓ‹Š&èÉ›S_ãe2”JªhûøgTPKLGbº½°bq@%š®X°ˆÕ4Ÿ/V +ë’JÜwÄ:úÖ梔’£©s˜ œ¶ÃƇ‡ýeD®O­Œ¸ÈÇ]7Ò'ìºë+­’‹ž$ÞßÑi@ÒËXÍ›¬îK¼LÚ*[ =~3âS4׉Ù6®§hv³œ#ÖųW]Ë /xñƒ÷« )ÅÒ·ï:{Y3L_×»;êüH±@Éut¦Þu)Q [ß«<|a‘¨ %ÄþÔ­ãaÄZ€s²Ž)®i¶+’£ÝLÈ:‘î—3©ÖüíÍTÓ×ÜEê' ¤ÚeúrÃË^îë+œhš¸ê_7MØßV&‘š);êjþ<ìÏî +|fP(ð + eG6怊µœk<ýäˆ_[⟫k¤Ð×ë+YMOJ¼¿cêÄ!:jÿc¿l’+Ém ¼÷)tà €ÀÚG˜#xi‡7sÿ£¤Q‹5ñ ²¢X +rµ~Þ+} %2ìiGÑűm%Hu«6aþ$¡§ûûL‹8@S¤ˆæFÞ¸þ4ts|Ó& ¸–HÃ+ÎX $äǃc¦Ž«÷ø\:>1ÊûŠöªBRÌûøof +mRé¹Êê–¡X8ÛuË™ü6Š¼až›Íë¤ +VÃûs¥Ms@KØWÃ:mr»ú»_´A¡èŠkŽZb:ÓÛ¥ú0F[°AM?{ÅÝ=1Ç3^ð(BÁèŒ[SÇÆ}o“XÎÀÒžkÅG¼“¹qBð¶.Þ¤î3µ­àV2>úRåÛĉvl¾q÷Ù.Ÿ3Ú゘(a%ÿ©F‚X’As O¤‰ÍŸ$UømbÃk‚Th#bÎþîšËÃÄ onxó‰7ñFóåêghߊ×oÊ %ÝŠ‡'¼™M$õŸfÆÇGÆÜó‰˜fLj¾t%ï4ã +¨ýÃcÅCt'ŽF¼äâíUŠ÷kU!Sí/Óã9U ŽOÑg, XoS[±bKÎØ­¸êN“”ÁŒƒÍ[2 k²¯XgÆFPƒj¼dÞ%…Ä1±^V…v7Ob9ËP‚dÈáæ-©ccàBQÑüäÍ-o>óæ·N§˜ésÿ¼[&¡Ó#•¼xÇNQÀJpz¬¸tœR KÐÕ¿¢mXsÚO¬ù‹õCS¨kë,\5 H +îÛÑ/kúÙ}»—rŒžrYžî>“$¼-Õê'Ìãõˬö#y`Àl‘E¬Vyª‚Ré;ðBóõ' =~Í,†Fû4ˆã˜³¢ÜÑðh*w mH¡ý$,QžÜu†¦Î4s\Õ/³¦'çJªPê6.v@¦(Ö–Ü0?5òãµl¦ïV(ù§®Š{›ÆÀ%,9«i·2d©}%¬sIñt¬aÍe`(9ëŒØ + § 2L ‹™2VÍa¯hhJþÓ°ä¬H¼]õå”!†çÛz:æÄ ¢Qñùš1µÄt&¦ÞŒÏ^12ãï¼b?U$°´“»qRHéM/gžvg, ±œˆehÆ»ïèÇäE($¾Ú*^Ñ^e K&ˆ©­3Z­P•¶ªsu –LM %²á‹<§Z-ÒñÛj—]õN¼‘"ªñV¼ß-š •­ŒÍŒûÙ!-°œ¥ñæ/Þ0;ÄŸó“´CéÎÖ¯¤üh½¼ªƒ”|ÓJä W§úàLIØÊF%˜ÑÀê€foùî¼ C]|Äéå¬/¬å•†WN¼òÅ›bâã5Ú/”7=·%¦†˜NÄ4Bì –°O¼Œ†IŠ…N¶`®‘”°Ÿ5—µÄt&¦·FÇýKnLqißÎÙCª9"žœ÷\­BÉ?Ez+ߪ•­Í1 +Œí—SÑ”ô%­A˜ýEûX +˜IxºýZ¹áÒójéf›™ŒÔˆAUŒÌxDß„r-@5H¸­‚S­ÞCS-ûÒQt¥Ë©ñR³.82ñç \÷Ô0-åȗ͉j74Œˆ›Ð¾‹ú¡14áo¶Í Ó€ßÓïÔÛJÃZ@0÷ýw™P&+PG1qO+‚‘AStÅMéí3‹%"¤R‚š¶b±dÌ ñ]ôÀÆݹâ8 ¨ìujT Ž7n=bÒ +UãÖ³`2oÖÓŽW œ )"¹«m¥5àùð’3ödFŽmÅ®æOzº«M±âNéAÊPÌ÷Š‰}-'«}¢ž€‘—öÏÿó·¿³BFüø>y‹f{ÿþoþ¬üó7ìïþ¬·ßÿõßÓŸí½ +*h©v§ò1 ;ž ”ôë ÃY_!¾Ïéx‚úóÒÿÿKNøù]0ÆÇË?>ÿãAŸ_ÐûGþÓ(>>÷¹_þûOÕ%W>ÄWŽøÄ‚O=*¾çÔKàõ´G®‹ZªnDì9¥Œ_å}EÛ°Þºu}ùR~Z¾Sg[Ð÷Ö²‰8çOï|’¸á½s‹‘1T/²¯i—¼uSþlÞßÏwøõ|ÏZqeÚ%êÔ@#E\ÕÃ+Ú†•V>±òë_£BT9~aK†²"$¦¾ý®Cl‚‰~2”¥!–±¼õÝìðß’¨>›ùê„#Z°º•„  -bEb—pÊH¸Ä0ñÓƶ_ ÷‘¡…3^PÂQË>ÄŒUJdlKÕ÷ˆŠø“ú½ë +ÂQÌ­èV OӬ㖘ÏÄÜ#ž{Êmw{î¶xœœ˜0Åz‹ÇI קëÄTU¨›[µ~#¾7ã«5œ¡jhlo‹Ý ,@w*>{ÝG•@ÒN--% d=ùŽfÜÓb¨"Qoÿ°”+óml+$j–ßÈ×ç[4ºV³‡ªPSH» ~I ¸†WÆŠÄÛ͘“ùO%¬i³ˆ[¦†˜NÄÔÇ¡Ì€Ù¢*¼ØÖqAð*ÜóàÑévg;FÎVÝÑDwʸœA¬>MÜðæ†7Ÿxó[¯BlXØÍ ;§‡‰ç–Ê­RÙ<ã¨Dn¶¢ÿª÷4JAb¬ØÓ8ùÇ´Ibì•o¤rÖ®|GŒ—òkh¨úÕ¸E`”¼UÞË~Õ!SÈ+Η¡¢×Ø/µÄt&¦·Kö;!±$ÿðxÈ#ªÏkÿ„[g¾Š;- +ÚFÄŒì½]ƒ»ó›¸klªöôÒMl Z£¨ûºg¯­·GÀím#ðVÄï”ñýËF]åT­%ÅŒ2f%P¼|…þ§ã£{|°öDˆÝ)jÇÀW‡ÇkÄüˆ˜ß^yxÍ7^aJtxÞ ö㟪5byD,oªiÇÌ®ã‚a€L¨ã^€­_žÑãKqÄÅÓQM\~uþjj™Ñ *ÕD^,h^)ê]jþõ~"Fîòö÷o¿·÷ÿcy˜˜êíñïþ^|ûîoûÃßëíÇŸÿü²v¹ÑòõùeëkE†·¯;†Ë§á¢Ÿ¿Þ¹X~C`¼ñ´¼½Lèòæ·¿—O)?u÷Ð÷§ß~£_øö§üBÅýg§ˆûÛ_Ä8t3P¦Øæ/àZÝ^YŸ#ž3¤¼¨k)b?ps’¯VÅHK"0»YRĽ/¨bNÄ î9•°õvÈ-¹¹mCk!à'C¶»ó€ë‘(Vn¼“ã=n|1ƒ‰GG¾X¬ Š¢äQ×ix¿#]ØM­ìàwšÉ»˜ZQ‚㨧mêw¿±~ „ëå17ðâ:–F™.Ž¡W‹ºÏpG;©ˆt·ô÷Ê©º¥ŠoÖ,Ž7’ /÷ù2 ŸôïiŒhxF~Ù|ƒÖ°¼½¹ghª7ôDNÔv´î¸FËhVýÖåå‰z„/£V.G…8SÊujdyD!¥Bµ.9r™M¡kÙj¤œ^Úå†6®A$SBS@Muhž/¨ì#Ñ«n b‚µ)Å+%×(‹'“îb H±v'ì“¡ôš¨O.ff=pSvkÀ½_ƒø¤*<Œ]{‰".ßô,ݯoþ¾ÃÝÛƒRÐÌfä6¡©¡ˆ¦6— P$¸´Qõl¬ýÔååiÌ,aH³ÞýöŠÛóboXü×^0/þˈý™ÎŒ)=‚=10òá£x/FËÚ ‰m'ò©ÔX5‹Š¸·—犨îha?»ÄƒÏj¸BXÙ‡ëaÖX½Þ)­K´lÔÃñ–Öhé-m¡é¾ÙÚo¹ټï4¹ñXwÈåg¬·KĹ¡qnVXwÜ<‚(nŽŒ£r¸Ü‚ý9´o3 c¶5…&‰6)þj,—ëv`ñ¥¥QPî…îˆV¥1¼´}ˆc##(\¢²3¡7,×ÖLÍ!VõÉÙ·æÐÞ¬¸Ôò8Y‡F-¥y¾üLFJÒ¸À”NÛ(÷mß:ÅïêsìdøÎÕsŽ +rtdS:­pz㌈ÓøXïÀT£ê8eQÐ…øpUN(†FÀ(Ûõq'â=¦&+Äò€XöpÜÍ^~pU‘ІŠjÄñˆR6p´-W×µlMÌ *¤ ^sm'+„5à^z¦ÒS½ý–íR9‘?¤s4CP¡ 5¦Ì¹.€ÈŽgäXзõD]B¨B¡PÓ¥†£-M_Éï¾æ#f÷ Ûʹ½x/ç·CqkË£_Võäè‘"Ž¶´gh²ûEãI¶3ܛѶ¦éÀì@«ÛY¢Ä( +bèwÊv©Ü8QWòæÓ4RŪa+~u!Ú}"_³L‡XPÀ—h˃˜•¡:ѯt¶}]-t6ïjþœmÄ;ÛðÄgWhj™FhBQ PoQÜ}à¥5^zÄK_‡ÇXAT¨JÁܘ’_%Ÿår+Èqóç”TW× P$IŸˆOù±whX¶ÏÃq30´Dµ˜UÝ+,S¥èØúåˆÇq,…@©~|ÿ¤G*ÅŠÍ«c+¸•w{ñn*bÚ°“ÿ«ÔÅ‹›ÇÛ +­7ærû¯ÿþí÷Ųý3ÝgÜ‹ôòøw³?¾}÷÷ýáoööãÏ~bhýþÝae}`B>¾;s—rYúŸ?ñ~s£bù ñFÓò_¨Ë›ßþ^>¦øñþ¨?ÝÞŸ~ÿùý>~áÛ{Ë/ßÜýggûÛ_èýºk_˜© Õ_u}8éGæM@#Ä«[Ù}Ý—·-ï.LFâùüˆµ¹ŽnM b?¾ª\7Ÿê.+uïD|¿ ç)åÃ$‰8VyŸ‘/³Šs£AJm…¯¦x\u‘ ¡¹ýoÇc¬‚@ÒžÖ~¹ŽG"fè¥ô<^‘ÎÜXq1·LíMÙ£tï3´GÙlˆ¸mšÚD{Ìü™™¢ŽÛc̤ß½i Šq±æ¸­·ÄmÇ ƒcy§Lªbu)\­Tl¡~bݽ‘.¯jÝ `ªPN×"²6NtR*pŠÚÃÚÀz&óeUhÝ‚1l}Å)JKeÀ ‘ÍÐzU®›ïÅ3ŠWŸc'Åw®¢æÞ$(¤ HÄñ^Zã¥G¼´aÁ#%Ü%Ðð(E å—tî‘MLÆï¢ßÁŽ[Ù0¯ñò#^~{¥ ·MD]Ö/ƒyâ£x¿Ð/¦©¬„3ù/«ýË~Ù$7’ÜPxïSð#‘ø]ûs/íðfîá,qF“eªªP£ÐÓ‹VKj’ýññáá¨L>Ô«ÑŠZŒGb¥@CŠí–vZžÑ„K+\zlæYÃioµð7 1,lUä­W€Ùûxv¥JÉA€žYø´•|jBT«•µÎ"A¦*•’Cu6ü;½•ò©U6q##.¯錰X|\Hãeò°yRzZøáÉó—Äs®éD¬+bˆÓ]ç}<[’¬˜4–™XÖÄòNÙšEVÓîèŠf€¥ò¸àTêå@)qj¨Ã6©3m¬2´Å¤YÞñ:b‘Z›¹^—pàZ®Ž:7Gú–H4WàRÞ”ñJœ´ÊçNüe^”Ÿ?LÄ<_¿ßTªlci Â~ê{ÝFŽñH,4q +Úy›Xgb]ëñ´C¦dýYÍã{*»Šl|©£±4â:û›'ú¶ðÃýÁ_Ï[N'b]ëDœí¹%Õ¸ÎEdâvùÅyfªÙ’Á…RMÚøW-åajÐðãúäñßužˆ›Æ¨{ÿí/èôü= ÛÇï/ö÷ü:^÷·ñbßþùŸUÆ#D£gþwZ©1úìSÀåMòøúùC´§ËOcÆÚ‡PËx[D|þ½¼Moí÷ß.O{>úãÛß_æ÷ïùã…å„x~KL>þµ’EÀë-ÍÅ%+,2²þ åñÎÂ2ίN¡ñý†…ƒA¤%Ÿw0ž7,":%Uøj}ÝÆÔaêá:ÂûÒó­ñ8Üd3&ns×P÷~±Ä/O¼¼âå?y¿è„Jä«»KÃö êWk{êÒ5Eàóx– XVÀ²Kâ1oÈYßPbAæ=ÝËŸ&Þ}è^ˆ>EzµÆ/M¼´â¥ÇVD°KšFðQJ_õÑ®-êd„4…n-[NÜn}·'n×’û‘b¸\Q3Çl«´›5† ‡A`lG·ik:ÓÒÅ|C}ëM]è¸6ÚÅžòng?3õuNPÃJSWУÄ[ÚØ>ƒ‚g`^ó㘭ÊåíT‰ÇÕÑ.?Eò¦F@´JËÙ ¼Çå1qXaüq²©´äò˜ˆe&–5±l¯—Çâ/–‡ò(@ñ-‹¼"„‹"v†±ò*¹ÂxF¡ÉSoVÉÇ6\ÑúÏ2©+˜¬R *xâÕkB!Ûq|¢i#ØÜ+YØ:¸$~¸c 2 ö¬gþÁK3/­yiøjyc´â¸|Þ&^šxiÅK-ûJo0ZñÕyvmÁ¦Vo'—ò/A³,Ín©oµøå@é›X¸…&ö—Ät˜8 5TpE¾Ú31Oļ"æĬˆ¸²ñ¶ ^jð¬‹Z?Ãíòp+x8r¥ƒc4 +ÎZÛãfýÝGÿ!Í®[ê n‰¾×LÝ÷ˆT<õð§'x&æ51Ï_î + ˆžv ›2t®´Ÿ¤ÇÕhâýÖá +ÔÛÅsÝ&öt̼M6 5Ý$Ö™X×ÄzŒxÂ_ôg=3[wllÖ[ø~¹&HгR|ÔÄ·+ÒÒ@C`²J½Ç †{ßz†î#þqB­X·´(ZÉÃf`úÖjù݃΀³@»¡ÄÒx\~påMõE@´B½r9"%>¼ä®?6ªµö.·ðɦ··Û÷/Ðn~y›8“˜ a%S(Cç^)ÛT`È\É1ö‡YngÏûnOÅÌK± Aøå>žxiâ¥/=6÷stˆèYÅ<ÊúÓ¿ÿç†ñ¶Ì §è{âAçŠ-™¶[ö÷‘ÚÅ2b?Lì›ï#þ±)¨´¤üLÄ2ËšX¶ˆ'¯ì$~úñµÆŒ˜æÄçÜéL¬kb}lTâS‰Å†sâº"FVØWœ¶çvÍÝ´­]ÞÕŽª›ú×€½|ôªÔ…¥é8²]7eÄnâíö³¯YæxË3âÄ> +ÔÛÅÄëÞ£qžÃÒôžÔµó +Ð,±NÀºÖ=;þBËY:öü¤£Ãį—³&ö§²9±hbA‚`I5þtÏļ&æÇ¡8þn-vpwª£1ƒHKjÅÓMäD㣠+¿¢Xib¥+ýÉúÅÄ9r!7ŽJì=͈sŽ¤¿zª9Ht×D|–‡­6µ:]¢ÞÙ±t Q+Ô×W h¡d«w( *¸â[‰÷£ù¾ Ub;‹w÷µmó´ÃŒØÞwßj˜§ÞÑ;gÄG“bcsìrpFªª"u2BA‰¶š%ͼ´æ¥ mOmî½iš‡½ð†ëHFó¡J]Âx€R©='0NŽBSWX0‰;‡‚åÇ9[î\`í’$Ås;‘xÚÀ+ây×ÉDü_ö«&Éq›‡îsŠ¾@@`#̲L*›¹Õµ§{¨¯“*K]äTÓc»eùùõãûábnÿ:;‰solÑN:+â.¿¯vKu›XèЉA©z{¿Ò‰3d”…œØ׆ïФ]ÄÒ"–=bùÊS·ÇT (6ñø¢ç¬Øº€Ç¬8l@¤}+ž†âŬأ.±¬dÅH, !¶ •ÉÖ˜¢œ\¿Y´3Ö5N YK¨ˆO†‡ƒã~ŽWCL!×(9æ’D¹xž>¬äí²D]bBUŠß)§î?Ž/áØ[¼d鯤y¯§Š* œWR…9ǘ[S€íø +× * ³¡=‹5ŠºäåÒâªv ·ÍtƒFÜ +A¡²Pç$ ’ènÄ­&¨AL;ÄÔ U´ý6¬zÚÔ´‹xÌÔ"Ä› gOŽuTA–—z·Ž¼ØàÅ^|ëúDfÀ~9¸9FRN¸²ƒ+#ôŠ‚æ¤Ü”¹ì)‡%ßlû\±‰';ÉE¡y`æTÀÿ…ÝçÄcV#Π(A¿œÏ&œßZîF{aÔQ%Š·#¾28¼²¡…Á§ßê–+™† u!cÛdL¹,Õ*hlÒ"–=bé!ÞÇ݈µ=›¡+56+u¥þS€ +E‚øÀË-^Þãå†ÜµCâªgíKwØînj+vKļé¡PÖ±×΢ÛGÿóÛïþ}˜èñ:ùd}ý›ßì?¿ù}¿ûÍÞ¾ÿõïîï§@¤Ì§âÔ²ÁlXÚ…üççË2¶gþÖüNÔö/iyûäÇÿÛ×ôšùñª¿-ÿ¸üñøÇ>žÐû½·7´\<;×Tßþþ?«/¼¹ó·1?ý¹VHôÞ¹ëiÀzO·%PE=,·/HJ½;‘/\!¡tsc“X°( !¡†¹Ì;Àüö jxÛœ)•Hw$ó«3.Cá¼JowýæÛCãJKK`◮✠¸)7g,#p ›%žføèÀeÓÓ k8ƒ)>Ëoç° ¹o$DÐ͸³FÖ•ÁØA‹a±ÍI&Pìîd»ÊwWÛ›œpJàëÙ‚†Dñ+l¡TsíaÇ°…‹{¸øÖq† ÁV„L¶3xÉ©’ïŽà+“WÈãŽ3å¨p7+%G•aÆŽc.áz<Û¦Kb󤵻€¤…+{¸ÒËŠ++/©‚T«=ÀÃr蕲—²BÄÙ])+Ä<+¤›Äó, DÞ$¥Ëðp×éq‡'ú•âvÆ]À1ìÕ7YP}§«–xýnû’J‰†ÅEv¶cx,Ýb‡JwÇñu’àŒPjØî`øõ5„A{˜p¼Q5P Öæ”…RÙÑ‘›OÁ¤X×9qd +l|\ÑE JxD/zZÍH7Ñ” {M+Q$ÿ—r(Â*ø4Â/4µW‘ ¡v‹Ï4æLÀ5`ø:Àí’“D¸å4ç¾ Osè8g@Ñ®K¼4.eØкEm¢æ#À¬ ³"HÖã`ž°(¨ÇRÝÒp!À› 'ŒæÆYAt bL¡AHuJ’­£ßÅš;'oî¹Ül \làâ.þ„‚õ¸¸Y —–àÕv'gõÖž5Ìæ –@£|øÒÒ¾ZpPUÀœhI0f¨…?¾ç9—ÐCÀmÒIXv€e é8p-w÷à £ÙƒÃ”Iœ…{ö¬?ñ_ ÏÚ|Ò]ÏÍ|Âe±uÌD éJ€½ó”ŠÝÞ> `Nþ[^gÈ©AÕtÜ)?áb ÷pñí¹—]ª^,ÙÖ)ÀâåÁ9Ìx5õZ)7÷õ}``w€ñð“À¨ÅùÍÃóÙi üaÂHvrA*wˆËŽÜÙê—A)G…gÂW+d/ëèW¨Ük×,À¬ uv­PºŠ˜Æ ¶ÌHZ#ÀŸgNZÀ²,o3wíÈ@HžQ«®…3nÆ–F!“-D°Põ‹–1 W„¥ EL Ø’3Œ 5 -~Ñ:Vò’K,V%8«wµ”µ³pÁâi°QuçTœ]:{ÇΠ.íàÒO¸¡vÜÒŽ¥0¥vÕ j +fç\láâ.ö¤p¥3,ÇîjV¶\g76îºÃ`0<ä¿Ns@TîIb¸¡KBOKBCIC¹—á.6pqò‚%ȱ;›ÿÖdõff/ŒPSTtfÌ +¥JtØæÌÉ@2E §§N·ÇMÀ², ม¡Ö…$!ævÖ=sÃö{„÷ÊDÞò¢V åeyqe…XÉ‚ÍÏ›)Þ,ßÓ{(>oæW–|ÜÙ§\+ä¤QžÐ –cx¹çl$ºŒ“e0¥`dœÄ»g¹Â+T ÷æ'³ƒóm„Ùí>aV0å…êÃzQ@ÊÍm/‰‘÷L jצ‘'ÿm41>ÝaøÈÝ^y4‰D…r>÷åÄPÙnÄIýÆœ¡>ŽŠ§Ìtì—µ‡³všƒRŽ¤0ßaã¬@%î{EsØIa l,•Ôœ³m¹¨XIë ¡Õ¦&£_™~Ø™Ó âÌ@i‹‹~û]²W8|¼Nˆôþú7¿Ù~óû~÷›½}ÿëß]ÌnAĬ¸#ƒ?È°í#üƒäç“íç;Ûƒ ¾+¼!ƒfÙîýþÿö-=;>^ËùqõãáÇ}>žmñxCKÅã±Säùó÷NzžIþ—d¬þ-æמn5ïF|mm-¾¿Äx±Å‹{¼øÖ1£íXM [k-€y˦Uø%õb…x»†/D\ÍïäGxÄÊ FÚE<ٜ͘-% +TÑôíÁsôíK9¨UûÏ£ +S¿SŠœí¢™ÐL³aUhÈ1‚­Ä°&ýÔwŠiÎ'ƒTJ˜Ïxñíšð­KåGリqŠ±çGuo³ò•ˆ¹AÌ;Ä<€Øû($A¾×)®=yø?öË&9–ÜÂ{ŸB0Lø]ûs/íðfîa–4UM4š¬è*ñäÕ“ÔÝ¥^"óC¿ Ãh[0*¤BccÐ2Q±Ù˜;¹%š±c¿w1ˆã%£BœIò̘Q §qäã“ØvLôWEôæa‘ÛÞºÓ[zëׄÌ^Î’¨êÈK Ø !˜SžˆH¸tjPœ3UÖ^uÛŠ‹Ç¥£Ý^uûh›+ç8ÜÐ0“+Üú“JˆÅ×pü•áÆX@Ø£¯† 뮂&ºë¸0è&t¤xzçî÷[ g¼`Ûƒ8Y"Å"€]mž$æ‚à*w·ÝNïKïÜë.O732”!æjµáŽŒ÷£ÏÕ† Ç;W1ú0xå è–Œˆ^tµÈøè¸ÐÂs®ˆgœ­8+XÃñŒ§qâv„OXb6>ì&³m1e§XŠe&ݬ‚§š0µVó‚ˆi +­b¢o×4j¼ÝŒ§³íöà ¬”`Æ—v;½S ý ¥„‚ i¦~V`®5ÓÖ5¨>†¶EnŽ1ýœ•z³”bº\°3¼@i:VüRï.‘iº´P±ªD-w¹#^=@³±p>îáÒßIuÆÉŽ«}µáT-¥1vòLÉ ãk´p—©=ŒwnáBC¨AqNÙ°´vWЄ/tŸ?™±“†3¾„_+B ‹cA³÷Íóq9¯£8 “Rë”i¼µ¿óûK÷úõYJtÌ­l­™ùí1ñ“ž´¹fŠbé3ö¨î–ô1j¿Ck¦‚6‚"ȯè +. +T(H·oQ®’hÆd=±ŒÓmæ)Þíã¤âÿE@S¸ož["ÅÚ bÉÄn6«K&ÅVš&¬Ÿ+FE·*š)ÜòMb`b™|l# _6;̃4º»@vzëNo=è­_zC; aÍäñ‰ù®“Ž Bãd[Â\ È<ùO­´×JG­´Ó:œíÌ¡ô,ƒ +•T=×úÙqÿ1zÝÆuµ eâe¯XŽŠåÜŒgüÌÖ3Ø¥—þN’¨™?õÖ½ÞzÔ[ßžnÝQ­ìÔÊA­L¨Í—ÁŒ +¨÷oÝ>…g’íýa3k½½5®læN>Å1tÅéî(c¿Êà EünV»4'*0Ú8‹—òñÿ ón¦p oÑŒÏNx船ùÆŽ °æ”È©n:.ÔZ˜§ýp³€WgÄKwmFPoNEñ\ñÛóGñ° +ôì1éàG¼ºq#Ÿf÷á|g¨òñTÈÄí¤Ö Â2QpºÛˆ»ÐqH,#˜ ƒnBó€š#ˆÐÝ3Þé} „3Acƒ¦<4ÃtÇ=Î`;Ýqf0Bc Ì°"õ÷Oké9ÅöPq=­8$ŸT—çÖrÅ9QËqh¨Q_?é*Ê5[R†hÿ.èÝ-Šc˜ §™ýv|Èvctµ%föõæÛg ä-R|ÖÁÃn›Sw[¾6¦Žhæ÷2ÚÏuD²~Ã.’}Ìf²×+G½ò6hŒc¢ÍÐÙ“Dìj3uœƒ9â²Æ˜»ˆÂùºõ'•HíEqé §h˜ˆØ© -%Ú’W§XóˆƒWœ±VQΣ˜ ƒnBG›7­øþ{£ôfVÉ4c$ \qÙæíôÎð{ÈjÖ€k YmÍùŠÙx¾“ü3“l¯YÃünÆÓ<<& :7Âã~‰0÷zgøò½›ùí‰v:!â{Îcx.ÈÆàqœjël\ºž#Ážjc\[gÄŽ×hïø¢˜ 1h5<éV4D?B«´±â—bø舙 ?q„lO²<#f(¦a®­Èï +¥xËÔhÂÅ˘"_=sh¨Qw¼øÛ-ì jäàåjÃû¾9†™öçpi¯–Žjéí; œ1º5–›oº’ËÇÂ.À·ÜU|á…”¯åºbæz÷Öýàœ(Pš†ÇÆŸ9<½urÝNo…¥¬à¤7÷ܥɦ… +gJ¶l® g ©Aß“lsY愈۸¡—qņÃ&%ÂáûÎD(ôñZYÌhÐô#&¤ug|‰E£þŸýöŸ¿ýýý]ï?'nõýç¿õgý㟿õÇþÞŸõöû¿þû—R{¶‚¶žEûApiƒð²¹…Š|}ãÅ>±}‹ÐgùÇ e{øû¿ÛßÈ}:üôýcïïþøòó9Ÿßm¿âãûQ||ÝDúöï¿\6äï @µÙíÿSÆ=÷«±àÍj¯D–YDïQ”Fqº[íÞíá o Õ\8ÉÖåʈ-Õë§Õ>¬ëf«PÓp¶´WKGµ4šíUfŠÿr;¦±Ö«ÚK+߸m¯¡ +¶°1Îj½Ui?e´´á¦M{÷¡ÚKs·¢Þ½ì”9¹kq6ô׬…›¶Þ|É +k*ÚéÄì*‰»€–Ûi碌 g(Î#v7éá`ãó;lŸÍ%4Ä‚K'.uŒËXx‹aaŒê­{½õ¨·¾=¯¸RO« k®"X»{¼gå†î­]$ú÷Ðï”òA)•jë96q­Ã‘iÈ,_$wÅÅ£V;ë…;7Ì´So7Úk y˜íÔž=¡2¦‰ûg™MÛf,Å¢[Ñ¿FÐÜÅ+º‚K'_Š2b§x²†gËN±ËÌŒEû=d™X ´…m¼¢bsPRÌä +„n–gÆ\´gÅù,A”¹ÔnT‰ž º¤€uÎÓäÔ?]CGœ¦µòˆ×ÐíäŒß?(Fh+¾Ê{ÓN1ÓnÆñ—†‡¡´]EKÒ¥R»#®tCg ZùÅs©_Iý=µfb5¨h-Q§»9H Ìë˜.×Q¬ª”ŠàJáDÄXûÍÑF]7«÷îöLÌwEwðÖè¦[²ïÒy8ßÝÁ¥+F ¶î2ŸõÄfõ2O§ÄÛã2&N—¤È5¯qQðV"G|꥽^:ꥷïk ÃþjÍÄ=Ñ´tóä¹ëœú§k¨¸žVüØvZ±… qÚÀíG‚K…BzûÒ]>ŽÐ8¶ðzŠ»…à½îõÖ£Þú<†¯õpWkšÓÈšŽ3m™˜à* ÅÄr\©"¬eêe£Î=|û5w¥…û«Ö¢ˆXÐÃdJÌxçáÉX›áwÙ)–ƒbù%gÌ…A}<âIÁ3#~Õ +R,UT(mÁ‰´æJP›'RÌ¥Q ˆbŨب˜mŒ@²,GÁò6°ñµw]òfÛE‹wví"µl  3Å„´~' »cZñÃî¸j¾V¡ +Þí†Kc¸AkxûQw¥#jzø¬Þ¦8,Œ +X0 w7˜H¸m *v©>rÃdÁÝÏ•ÔŸ„Ñ|SK꽌uÜÆK¹¡8íBp§b:(¦Å ó7ߌódÛõ4®à¢à­Œ’mÒ’íRjïŽb™88a+¨˜Ü½u{Z›;>C^s-·ÓûNoÝé­½õKo¤VþÇ~¹$×’Û@tîUh†Iø½„^‚‡vxÒû0®ô¤fE\ˆ,_RA¶=zúU)…—È<ðˈÞeT僫']î7î¼S#P©?vj¼ŽÁÙÖÏwf ãÕÇÑ]½ßô[2 +R­aàÁÆaà1ÿÆó% .¹5‚_5iÄ“KøµK®J‚jrToH•¾)SmÄÜ(æ‹bRœýMÚ1µ‚é*˜z#žk +¯ Ï¢ Má%Ìш7"K*j´m7ãì™Î©6°êOcÿÂ6îsÅz[±†›–€INâvŸqBŽVm;B+PJ^Í;S ¹¸#òÒùÞæ³ox½@ÎðzÓmƒó º­Ñ;Äg¡wŒ8hâ5÷Ðkó­ÊTlÕŠóFÜnÆqùPÍÀ’Eó½Ûp+gkì?‚úmxxZÆsGKÀè tDµw¹q«)ï–»æßÕfÙ†ö[séYø^Ÿ—¼Ù½‚'¹A’”€Õ§±ÎEñÐåö'ŠˆóêXr-aË­@Ê!þÙÏ90ª"ˆ…ç掎ð#£bîEð¨ÞNDä„œe}Ïóîy¡·¤Õ‰ÖèÅF/^ôâ[·”Y@1ª¸-·M +Hâþ|G¢õ'ÕYâ¤W÷°>•„ÊQ­áŠSOÝr"úÚäˆã8­šøÖQßÃÃÇg?ÙFÇÉF)ååí1ÉÔ’ç0óm<>ö yšÿó²re_Ëö¦{,´ççŠ +´ÝP`róq¡`Æo÷8{u'Q¢Ç”“æ[‘ûžv×¾E¸ Äž^ Ít»’RLÙîÝÍv¨QLÅô6PøV¼FÃDÛlÛiV%IäÝÛ×Sfͦ·óW#ÅU€ ù°#RV¨DAcì–üÕD#æmÜÄŒ odâ(Ñ6tÄãîÂbáÖí¨Øg¬ïgÌAŠëQ®8Œ#!Y>(‡+{3œÛ¦ŒÀ¤Ø-çÚ*®WÅõ­SÎsqB@5V¼ßŒOŒ‰ dY»®VüÙì¦â4xŽÄ^w,‹7ïªx$Ú¾Q,Žl)ŸTwæ>Ö\#lÓÛئO·õQÅõ¢¸6ŠãQ°ŠâÝ%J>_ãâçlÝìÓÎBÅó@¾U<æˆØÃçåÄiíQÍ!HC +ÚlëªùÓˆÑ|ïN·›h/¢æ­ñY÷¥—[½|ÕËÝŒ¸«7ô®³šÔ`¶kò½tÑKC‰&þ“)$Ÿ ·íÀ#©B–r’b÷q©6ó—bjÓU1õÏåá +˜1¤ËYŸι×m4ã£zî0ö§‹ôY¸¶zëUo}ûAÿRÊ@–Ã昳qSý{\;Svz·ÕÅÑÈA÷~8AÕFðŽ5WAr;⬦„Àµ,>>¯ç7Šù¢˜Å1ÀÈOB5ó–¸8V̸6ŠëEq™±2h)Åða[‡8K,§µÆÞp¶–ò!˜VÕÀŒƒm[ãݱm‹3ØO9U9„!„xjä† ó÷Dp÷È%÷Ý6N2$¬}ª¤V/]õÒ[ÇsÏ …šòI¬~fP9hëªxŸukøŒES´u;*„$²œÞç&[­K4í<˜ÅëÛ¹ªÏØòI÷†P•òÄW çñ³ɦ·óXCÂd(Ù‚ª=FäÕí1ËæW¢ŒÀ»Z»ù06Û02ƒ +ÕüiÄHñfã}”2g=(ýHR +ãmÆI×Ηµ|QËCó-À2€iÃ…ÜÇ´±BŽý«`Dy¡­CHÎV@Uñï>f[1.ã¯ér«˜¯Šù­—fwõ†óõè-%H²=½{TöŠoÚQþõì¥åh6Ë¿†…ì°–±I:É ’(…ÇæŽù`P5nc½­X»1Ôp1þ¦éœc“ÝEû‡Ð0­/÷0+”!¶ô°`‰b¿œ ìŠÃ{s; g« %œïnÐsÎyq\½Q’‡wWGäM£T‘ûe±‡Úœn8}!‰¬žíÌ"öc³$ra:4;8¨øcÏÿ$À®ÞÈýo¤ØŸÎ¹?ã}\¡¢ËsbæŒ%Aµ“²â¬£È²d;Cm5„œˆÎPKÉO ‰Øw £ 1e¼mæT)²<ƒoSpHì”Ýh‘?õb«¯z±Ñ»<Í<yý|'¦b´qŸzk«·^õÖïç;µßÈ ¢¼åUTüÎຼßæm\UŸ±¤ðŽûòÄ0õˆ*©8£U Zc#¸QÌÅ<âÉ°ö9mŸ[ÃJŽégŌDzø»­+Âåí²{lsÏÀ´¬†÷™Š™Ï:@µ€[Å;"ÅaåáóÍü³Q®!ph»á˜è+¡‰ï;±iláýø‡°<~KÀñ³f<•Ø<Š+qXû%' +.½Ëîÿ1ñßÆØ@7ïêÀ–4Ÿ3cJŽñÉVÓD£½xÑ‹_zãˆ@H"}oU¬â)$ÁˆøwKR;ð¨; %ªúÖYÎÐ=·î¸‹C<'Ðú¸¶ÏŒâs¢Õ¸6­9ŽË aP8’¶qewZ4ãݺN=‡%I4_¼íˆgŠ›tv„†§PÑúŠ¹UÌWÅÜSŒw'ªuδƚžËàHñƒ…©HHï_ó¾7~ÂÃf?Ëkc,÷œ€J ZcÇf¦ä>.À/¨¹W–Žr,ÑÒÝ6p·âFÌð]ÅÇ ·_Å–çE„¹‡#º1<ìŠõ1ì‘´ïã}àÒŠ„ì¾aÓ1âÏÚøÕÞ𫆴¶Ù}¤®–ÓA×F6-ý‹nÅ”4Qàˆy¾ !W.órÏœ1 +X +zËd3.¹¿yÊûåñ"¶‘gq®«‘xjV0 ¥XÝgm^2¨!hîˆm”2$.}êÅV/^õb£w¹‡ ÏqD?–è?ì—Ar#¹D÷} +]`0 €ÀzŽÐG˜åțïñYRÛfE.V¨¨ {þ¶$«ÊÏP23áKi˜@<öâk4|i‘·z5ѱ*¦Y=„êz—=œºÞ´u%–¢+iXÁ‡g]:9ã¸e +Ö–Yht“oxŸÙ”¶ùæíÓí×–t»ùýçöoÖ–ùöj}·?ÞýxøvŸ·gÛŸx\ÐÎâñ¸ÎˆËíŸÝgɵpç­¾¦:l,Óû';AqõCâIòÉ@Ëý¬|J{ÑŠ{ÑɬE[sH;Ûl«ý¤4Z Wæ’ 'Y‡x-EVHZƒ–Í«ÏY­†ëÖ®-ùÕ;NÜ4H‘…B™m{§Ž®Á—® ˆ9TŌĞ$/Dì +\0PEãéÑã}î×ßf=ã³þmÒCˆ@r ÐkúDót;›…ŠÈEäPÚëžXÏyqjˆÓŽ8ÝŽ½x«Ã¦QB_çª,¥žºž ‡ ¨&‡¤5Ì)}ØA¬Äc:Û³Y'€œŽOÝT3F-ǽ¸sóxÁŒk“/Á™›²Çöî¢j¢Zv3ÎXÐe´µph”1,#ñ\½¬ (£‰/ +:!ãp©;ihŸµýlµaÕ«vÍ–¡XNc«å|u'>Öï4ex#ΞC£[ÇÄ} GXß3A*ÑRwý©{R"À9+BZ^ÙóÊKç‹Ä:ºZ^•q%Š†®6¡G¨“/äj[*S º5NÜZþ ¤(…ò·;1>#¾ÒØꪴž¦´w&FOi®UnÄn®rvòÄݯø„¸õ´¾®»Zt9vµ‰R#CJ¡GÌØ.—Ó±¤ºÏe?îjO&G:MoH’KØ~®QEs»ul‘*,+/”Îì 2…y÷1ãn¯xÅ^')μùf,Ä ÂA‚\5ãkSš ¸ŽžqÃÛ³‡†y·\B %2zïØ+¢gÂ_(¢8X]—Ö9u›³YŽѳÑ1úÀÕñæºwÖ‰n × iˆeG,=ã5³Ñ¾68jb ëÄâ'WM@&/%~vÆê×BáÌ…rÎïÄ-Kõ·U¶1q÷\‘gS@£È‹§TEõŸ9íx9s[/òV…`G<^îºE1|¹sÔzÛûŒSKœöÄéÜŒŸ_Gs8ã½m[G³­“x[•Ï%^£ãnâá:VS<žñ<ªð Vˆ¾fÄMÕè……2POÇUs"ä2Q4¼©áM;ÞôΕ¶k¦f(œËB‡Î¶wêRÄ…Jdl'ãy¸ ›‰§uæ+hÀd£=âÂS'$@¥Ã‡¹%æ=1ï}¸‡ø ®®n4\Î TƒU© çîïñ N|¼ŽjK¬{b='Šž°ûBŠ IÃ4£U'>Ëû{G!@*ÇúF \2(ñq•˜¨; –°`úIM4lÃf¼E]Î ÍX,ÑJ{h=y’㬛Ø2Ô¯á•íÂä öÐݦób…œ¹Æ%º×Ðc—†Wv¼Ò5]‡œÆgG:Mfsa ÌKùCÒ¼Ðb·e‡zÇš4ÏŒKÄôËOC NޔĦPÿ¿uŒÚ:œ ¸ŽÎ憶g ýʇUòq[›È# ’YÐÖ¦v3myuÏ«·Sͧ§·ÿ&‹'»—ùvÖ´ùöÙClh(áqž&Þ 8bP!š*ÜM<\µXz’¼ÎŒYî" ž²¼Ë½X¾´Jo϶?ñ¸ Åãq5—Û?;áÈ%mƒA0uú\x©ý ÓþƒLG»Ò<½ŽXísÚÆŠºÍós+jŠ6ĺ#Öó¬V”kà +æ;¡m«Fê1q§ÝGÄWÚQU…ÜOàתèTqO@õ©"®-uÇ ˆç¬†ÕéÍt!—ªE"ö5¨Bâw7Ö–X÷Äz{a¬²IMO©c­ÄfiUÖ“§¹ &nxSÛv¼éƒ7,Z[õ.az¼k¸;=ÆwŠºôŠDó=;ÝájpàD¾†XdL 6ö”<šïY?;˜mkè½õwÖ;Ïh oÅ2ˆ·ëÊ{K, ±ìˆ¥ƒXP §<\¾­$¸!æ17Ä¡(Ö[Š‚òBMx…å:ðŒ-m¹înVS.N¹+Þz3®û‰, k5á-îÄå8<¦q6V…ìa÷™P¬Õ'ØF+âÒ~¹Z@ %`JÐŒÄëÍ­QÆã4Ž·=Ôsó.&þûeInCѽO¡ L€¬çs/íðfîaTË­fFŠÌ©Ìr¢WÝR)KO¨ÿ?žÞJ⹄ÎgìÐ0ÙgÆM³x2ãNÇÔÓ‘˜>NéxnórwÃð +ÅŸ©Šw›&?ÚüF›ÇM@q§Ì U´’©‚{b>óÇÏTE«ñ´oÕCÇHIæ­8cA~Œ·7¡+U±[£¤4ÞÝè;Þw.&)•²¦yÝÖõ¼s"ošXt§‹ÉâUÚÈØØâÄ#º}ÄŠb»ô(šäm§o·x‚Jiéæ}©b:<îèíj›)D—OKÐzª`W¥ît~µ½6¯G£kO¬GbkÛL ÊkÛ†:æÅêNÄ­ŠìÔ„šCCëxâб™Þ^è/$öðŠ†YæÍèg´gY3W+Õ[¶qg³ùé\O³¾èÄÁ˜æÜ‚]b?°öPÄFÉ›Bé¡´°T·\ÆxZÆã*1s(½¨.Ì8žñ[Ä—ZEœvŠ–žë©‚U"æl£˜4@²Ô*V´c¬e«CÉçÎŽ÷ˆ;Þ™£#Ý:Ch*yñ†G’Å«´S£Ø¦ ohÊPe"˜×!n â2Ž¹Y=L”ŸâWå'ˆµ%ªø|î·Þ¿¾èˆéqÇ–ÎX;b=ëÔÆÑ£§¦öµsÚë‘X?Á|錛ÇoaÝH­ÆÓ¾“qÛÉ+¬B-%)?ÝæMÏlžtÄr –bo Lc/S×Hê8ïÖÙ:3`¢ôä¸JÃý„¹#æ1ÿ˜p~ˆA3»[—nÆ!ª;¢åÛ'p»³]¨ +(6ÑÛ¸'æ#1Ÿ#ž›ñ+SÓÛ7ïB{´ù"wŸvWyñfÉ!PÙý®™Ì¥hÒ×0ŠÜYbnÜq6ã ]­5@‘:±9¸$¦v™ŒÏ8ƒÕå§îT‡÷;ë<Ž¤ZÓòC§ƒ™†3~·üÔfIJü=ªxséÔmT0Y+Xõñ¡´ñ~›×äþ´»pñ°sKì¸#ÖžXÄznÄ3핹pã»e|’÷U›Pmw÷÷KmÂÀµü²‰[m¢ÆÓþ«cÞÓ1 ´úÝgè•G‡!ÔñÒ-$a¬[ÙÄv­˜M¡6Þ)<,£¦Vü—z^:òRÇ{3­ F•ÀÛ5|OH‰wšøð5ó¥ÓóÍ]-^¥RNËœ ¯C¼EH!hZÛý]J3éÈÐfY¤Ò‘ÊT†¤ììšÞž§Yï7(†)ñ—¦yl¿oZ\ ãG·Ù6v‚R4ñ`Œälq·áŒ§Tü"4öª%¿‹î0³)Ü X8m+ö”xºe¼š¨‰ß]. +ŒÍ¤k€¡ÝÒͬ¦Ò]1+ £™É8×!öÊ”eÅb]’Mrâ’žVŽ´2¢E÷“óýöDÒwbëšÓFŠØ®¡Iq`ŸèÃoiØ pÃìz;«àC°–*Yóõs×E·W©æÊNª]up“üA¨€š%3^­ž=ÜL½$›Ö)bú+bîʽ!¹zæfga¨†ý¾H 5`¶Ìô^v!Ìôû£UjO¬Gbý´ÊK7®Ä;azÂ]²q§8?ߊ<:pšmëÍ7² JI7nE A3»»_I¬ Up§;c»VÉ TJ¼xŬc(6¡ŠÉ¾–ÍøJwc0¤qzLßÞ€¼†*jzÏ­HìÑÙ÷!ä˜qu¶E:±” +Ô$™ï=>ñ¾†…Ót™÷>1w×e>ÁMâÕÛ‰¯Lª-u¶‰­†§6± pÄ8Ù6W8â¸dJÏ+G^Í÷Òct?›pŽ§ÛØŠ'51cÅÚëX?æTQ=?ïܺíŒM +‘f›w–÷mÇ:Uá³Ùª‡$ö™-»‚bKêðeåç¬C¤´B8>7´§Õ#­~ ªðуgæûƒ[8šKznÜ‘oEÞªªiøC³¬G¬8ãɬ>&^gƯ¦UmE`&ˆåÃ}ˆÛ +¾Œø,ï A´h>7Ça¾SÑü"ê"îREœ.OÃãêâ3®÷ŸkÏ ‚R4ñ ·;«{:ßÓe-?7ÌÀ+Šå¯ô/*B(~²>ÚZt%î€Q@%Þãã?ÿøM ”ðóû¬à†ßÿ#Þ럿ÿoûg¼×ÇŸÿúïa…äóRŒ·¦Ã0¤ÔÏaļ‚‹þø‹}ãñe8~üÿÇF?ÿ}ü•±ß¿ûí±o?ýùßïïóý«Ç¯ø| ÅçÿcÔÜ>þ}L zŠÉpüØô¹ð¸ÿ ùøAòHx§>]“X?í5í +÷—1h5JH }Ö +LmL¼Lw}„’×1Ím-ÒîÛ´«o/ÄGÍÞF¿J¨5SÂĂÏFÞÅ{ÛãÖç´÷”*íˆõ@¬“iQIïöàŽ—:^:ðÒÇ(1¤8˜ÓX¿ÚÓê‘VG´G˜á}á-@­fÝaÅÛOÃÄ µ%§;n']b温Ú'fupÇ,™W$öê÷·Ë^ÇsªHûp3ÖvR…K\K5™q·yÓ^1Þ¼9¯H‰EÁ´lÔÙ¤•Ä?Õtª•ç-èJU0´êñÙ ·îÝÎfPÓ¥û¸à@:‹šÆ\!UáËN¹7Mx£Ûí÷ÊEC°âw*áâxC—±-HÏ+G^ÙBWÞ&‰? âsëý¶h;Uá­ŽO¶ +J–Ñ.9_'ô]ŽÏxÍkB{Ïaô^¡Ü˜kv|vŠ˜vµgŠèjæ´«yêÃ5ÊN»šöÄz$ÖñUæÖâÙv÷Æ]™sæ fÙ|KeAç41n)ës—÷ˆ­ô»•6LäâPMÚÝÄ&Fc‡“ŒóÓçÃKG,b™˜ñ~ÄR´øXÇ‹x–q…Xhé¾F7zÚYÔî‹VªrßM7„VÒ|ðYÜt¼ +(ÕöQ.;Å;•4.¾Ä;]ןɷ;;&‰?O›¿IöMíö¥ëU¬±ˆµ#ÎÏNÓr{í¹²D6ÜHÚÀÑ>ÄRj5÷YÜ¡ æ`s W¨¤w·ã}§ñ=e&ßÎ"&¯ÎŸ‘Ë +´ëwÁ +Lš…òÉÉ>7?9×ÏOô¹‘”VÇ÷Ût ?Óí‘x.3bAWJù´3$â:bÖ^p\!–™1¢U±LXp« ¤;Õ´¸Ôl”oï8Ú¥óe(•6RÄ^õ œ&,búeÇjÉÚï³íH¥#•© IÙ+qr ua1ÇOÃâÚE PKu»à¢=¬·PÈëoe l-~¦¦^o¼l:^“Ä3×Å”I¼ fÀÊu£†Ö +ÓN6aZl«¼±‚ŠotÍqkñtæKêØ4µÄ¯s·>A´#Ö±Î$H3(­î¤Š¸?ÉvR…A³’%ÈÙšùŒö,ë RjÂÃJ<=ÛÛ+ñv HŠB¹;;Þ÷Ž$…&~÷¶u´ïŸlŠ×qWû¥†¿¦†Æ `Ù¨½W@¢ˆ¥>òív _•jà†u4©ñ´{š_7Ýxže†ežm<–z°CsψŸÊj–™Úw^êyéÈK¯ Ï¥ìPMÆøM ÷+Ç1ˆ¹#ΖNŠ@åœx=EHA°’.ÝbŠ`/ð?öË ÉrÜ¢{Ÿâ_À0  ¸öæ^Úáïa¨ÊÕC9„O*$ý Æ^Mwuýê7ÙÉÌ„4Å8ŽØOz|ßHl‘ÕîÏó±ïŠµ¤ñT“žXöÄ2Ô¸ã½2…9!”,ãSîRÍÝšÈÀTÇSb:ÕŽôí|2éˆo/{X@¸›cZã1ñÜ”ð‰¤úÄ¿\1‡®8ë —¶Úwx±â¸Üš#7vÇûŠãR+sâš#îÔØŽÐTðñ½v#±4J=’®¡ñˆ9)hmq·'&7æÌž¸êcÕ2ÞËø˜3åñd›,èOL6ÌųñIKÛé²{3‰ r!·<œ5CJÙ±ð3#þb°54ÚqÖ®2ä46Ã:é +h±?~/í,ï@Ú)¸í¦Ð4´Ý®îÊ +(ôøîž‹^WãÆ€Tð“Ñ ±ìˆeÆ¿ˆZÆ»RzbÙËHã}übGŒ;b|Mį4°I† +û÷ç‚ÄU€Y½T[1+!g»bbF®õqïL7ÊíiO&Å;Ú £§~9áñž»óµÙ§[ýhÏ]œÀ6Ú9Õ@Ë’jµO×H{Íz.s ”ÁÛË3SDjfU0S¸Ä§/Žôl²eH)sœœà¤PÜ(^©4”AÈ‹‡¥¥–¡¦§;Ü©µó&}“D*¸@s§k¥@5! +v9Sýÿn¸ä††€¹šhsû÷@Âç]qçqmïpF ìLɘz`ÚÓ9àk¦à\€P¼ûí$ïñ£k'iß]BrrSbAÛ¤dñ¼$±I,IÇÄÓI|D¼7Å\»¦¨ ‰Ð98WÔ˜‹€°Ž/eb"`?ÇYÊ Ykÿ¼æZ¶?eçš»¸ãÅŽw¼ø;¢AÖ2ž7îž«3‚€Ju3øô8̇[38)”êH¼T<A£ôÑ qmS#¨¥yeq–÷ö´ºþé) s 0cd`÷,ꈧÛx¢]Ý홋we,¨1‰±•ñ†;§Z’WÊwäÄÙL{£m¨»““€Jz<Ôzç„+q¨…Æ¥€ ÿØÖÛ;Ô + ’7x–$®PE_Á½'¤#–±Lxx{u…ùéÒ¸)Ô8g Ä£™veß™h9AKîL;ëÞ¡®JN …¸ÆymœJ·1~Oχçó!Cõî¢ÛâálÁ¹ ‚ OˆeÖY(yã½·­ÝPü>^o¡1Håï#®¨Yãwâl÷ÝæˆüéÏBPY¾¿Lj_ýúúoö³þò×ßìÇþË~Öë_ûçN l_­}Áwbð-m¢$¿ÿ¦%ýcû­õY~ýç4ëöÿþ»ý_Ú¹ñóÕ¯}}÷÷/~ÎÏﶿâû½ß¿6‰¨¾þþ_ÓŠ2nÓµšŠ¼§ b;ÎMO?mZïÚ°"1àÖØQx½û‹ÄœŸ˜FÀë¤}­öðìàØwmí^á©íú¶ý[Ö‘ÀÒóÊžWÎ &ÕÔJ®ÄxsD³ã3 0çšqxe,ÃŒšÒà +w¸Üáò—Çuß›BaöÔ½v¦“]ØbV=+œEÃœ |e‹uÅж—ªâÞäÍ µ9Ývwà‚)T7¬„‹SÂßsîÌNï&£ëépe‡+¯¹Šh…#ÝA + ’w…B¶;‹7Ó\ µ 'Ît2ùîj‰Ëûd˜|nÏAán +Ù¾ÓQ÷Çv){±Y{ó|9+°Y!y×ÚzV jÛ\K `+ +ÕöpQüOg¯ 0J KÔ ÔJ¬Sàmð”‡O‡{mU[gÉk·_•A=,ía©‡}ü +7'ã u>‹;TwÖ<µ+yڿ㘱ÛÂÐbvÐ@q–ì;ÕóïvèP¹Cå*¿FQFšl;¤@Û!ÚØÙN!Px™ìåÔ@ÉÝ¿ëµiƒ†xg¹éI…¿>1PX:`ÙËL»5Ê‘VXŽÓìÛùçnO l7')šÙnÎ,^H,h‰ªÃr<ï³D°$ÌaAµB $p°PÛ&š*CmxFà¹^öÁЪ²°š…KþäÕyí. +wfP%hqZŽ$—¸PRÏÁë…š{rÇKxE9ÐêÕò.ö¸¸ÇÅ÷ö,êeQ’Š9ã´§ +Êî~¢-æúØ·Dªé8–\hU ˜âX‚*Z½Õ@Î6pËO+Üáb‡‹;\|"mËÞRyÔmܳòž•_ì6FôÊ-Û :ûÞtsï͈pï-ÖœŒvq"BIyxq^,ŒûŽÚ:s>›ƒ$»4΂T¡¡|ÒÒËXf’¬5PåúÁmv1z£]šœ4»ëw=s6Kd·u€±BÕr<×—Î ”œG×¥Ä$ðÌ}qu>$h½^ïÑ‘2¥ãE¹$pÍ@­<Ã÷N´0©ÍÆ8þå¤P˜½ ^KÝP°¤ ùá…ÖÁNÍ?L*¨ëÃV¸5ƲÅØpMJÏ+{^ñv™4ï·a±«5ÎüÝš¸•HE\ÁæÎñ˜¼ï‚ëç"·*r¶1éXø`ê€iL3 +[F$ï úe îy̯SonÆoÞ\³PÃ<ôð2!Á©€Vt¶Ù.ö¸¸ÇÅwÐoSÏ͵‚Z·á!t[O9÷±¤ÙÅÖ"±Môì-ô_¦¥ž—ö¼ÔóÚöV^JnŠáiŸæTA·?ëˆÓ¯-¹ŽuaÚŽdŠsaƾ–¾BqV'´v q–vàÜk\€H#ݘVmˆÇs,7=ÝÃ: 2é€e,¯‰ «Ån¶@7ÐfÝRÕ>íÞÃnëtŸ~kúÇQ˜LáìuÛzëš­‡Vžî·Ó¡öf=ÛgTZE|ö¼ØO¾‡1CIìÇY}¶'…Âüð=Ôá^“‚P‡ãl™8Û›¶ê¨»˜¨Vh¢%ÌC£Ö@Õ{hdï°?)É&%ò¯4H©Ä9.^CöêY⎄8ë^WY»0"C¶}Iâ<6Î +še¸Ì¨¦=0½>¹Ì¤Z:´H…a +kûäX§˜vÀôš) …†Ž‡ïS¸–XvÀ2ÌÖp)ÐÁ™´Ôcàg<,º³¸®¸öÞ½’ÓÓ%§ÃÎWv¸2Õ¶z—cup±ÇÅ=.vÚ>É&„w½N^º€“lßçˆz׻˲vÙ¥©„ÛqâÞ6$O„ÿ¾¢]A`‚4rÃì+›èß`¿9ÿ›ýjIrㆡûœBB‚®s!ˤ²ñý«‚–³²0Ô‡aF†DWîàbwpñ6ªXœ*”‡y>EûéžÓfôÌ=sÓÃf¤®{²]o¾\Àg”Ø+ï÷ñi¥{wrsˆ–“ÛZ!Vlq3{wõ‚ã/öxq;¼WókE‹ïëñKU¬v‹ss+–,jmëÝÞÕexèBÖ:ÎuZ·Ú+‘k [5t‚®‹I“˜™ŽÒ–`™1µbAG>Å+Š"CIšãˆ‚³=Éu‰ï€¥,{À2ÜÁ}«]æ +RóÕ¹|Zs_sèŠa=ù†šKšÉ7kòü쨞 =³@p²’–š7ŒN@{x`¸åŒ åæ•ß•/'H°¥H•½™™'Ñla¿P¿œ-(ŠŽ«ä[!¼÷†ç}1.Tí_$5$*ž›†ø¼Iª™Q#à*W â$´œ24ªQŠŽ0°–@ÖËI@%]È'[(EÛAÕÔ Þ0Åñö^õ¥ZM¿¼ÌÅmþ›Ô9¸Ç/zpG¦#ˆ©ssÁ*´VöÛ¡Å-îÑâíŽ^éðʯLÐË™ìI䶇Ãmò»uí$¬‡%¬nCC¨Š¡$\ §|uC;Ë‚-0ˆÙ[pG±r‡”wHyˆt³ßÒ.Ïâ… Õ¾ëÛ‚ˆ›@â¤?NºïÌMR››‚žt¿›õhi–n3;•ßjÇv5»§ö_*ê5ö£aq©,ØÌ!âp»!Fæ««Îñ”ý¾PC´5P• åH)ÇÙ\¸Ll é˱ŒïWÑLáyµŠ¤ä]ÞŠ“ÀŠ-â +ÒdœuÓCc¬Š¹¡áª"\›àTA =ŽoÇÆçåÝG¤6×'Oçüžùp*@˜¯ö†ƒîë&rË Ób¡Í{ÉV\óZÏb¾°U6fu[å‚Ivu9ÇŒ +­R$Ž­g/1.ðá·R#–GdÌÅóàSÐföEbԌε=è%t-×å—;ļCÌünÝ7‹:ü榇ëã9Ä>ÇöJ¼¾GüwÛ:¶tµ›‰X*°•µ8ˆ¹hÍãÅùÞ":“ãÖÀ¼Âãø(Þ¡G¼ÛÜ 9”'Ð̶F<Ž9e fïêÎÐðQ¬.Òp˨fkíˆCÄÜ#æ=b!î42©ß‡Ÿ;šíŒV5túÌåýJ‡XvˆeJ¿–mbgHXöˆåGslZöšÏ‚:æ, ªÇ‹uµ€>Ñì5LnWûdxÚ'žqÜ­i «Ë±Õë÷Æ™í'[HÔ¸Ê8=ÞCÜáÅ/îðâmœÎñ|˜ éÕUí¨€]ùF œ]ùž\,ß“.•a¼Íšïé«® +ˆ WÖ¿õXi•nƒ 8UÙžÔÜd;ÇÎi*îZðȨ2´”[ ½™ÍȤỂM¼È ­ m¢¯¯³ââé¸10««Š 3äiepni¢¡Ö'ß‹:„ª©¯Çó‰x»+¸^Ñ$Š½»z&ñ{¼¸Ç‹·×ÍòÔÆ^€Ð+ë Î +…ËX ˈ7žAp"Ð6'–µw«@Íè\Ü’…8ÇÛå)¡§ãÅ\4CI© +A¥‰‰´âjߥ@ˆ9Û“šÛ|Î9ºó¢N¡¸Iw”̮ۧíîÌ e¨cb—QÂ6=Ó¸£Ífò@oM¢Ö iOÎéþ;NŠ™ÉùÓ$ECÈYñÊ;û/çÚfcŠr%¿§n¸ma.Ƭn"žö†Ë×&VH©:ÞÐ5õIÄ3M}ÆÍ^\\e œµj +œ&盈ñ0ÇnÆIƒ„Øq,öšZ=W[qHfÆ#>Š÷§é“¡ZD¸Ü V‘Ýü‰xzº=Ïæv±ß‚IªÚ£Âh8bÿ±ï2¹>±bËePIã5·N67®n¿ 7Þéð¤ DÐÝG :[­¦ äñ8æl^ÌÞêXqB ¢žõµÁŽÕÔbõÊjþ«n6ÏОÙ#¸b7”O)–=¹Ò•X¹ýlaÁÙŒ¬LXït©‹aï‹RìØ2ÐÕXÏ4]DH]=¬W'I¤¶1âiŽ¯Š ¹øü®X~ pCOÃx±Ç‹{¼x¸ï™Å¬Vlq.ŽÔ^‰×+âLÄ +Y«—Ç VIj šæñäœF9–±ìˈã½EÌDò‹m[ÌÔò„©-ƒ˜”!r × +¨©Xj¶×÷òDÜÄ4Cãí9ícÏ¤Ý W…ZÚÿª¸²§´U6¯/¨ +N*éò”>ÜÚÜ‘D­AN×ûñ‰ˆ¥â±U¬#ãL Y¯\u;zçÐú‚´:¶ª%VÇ;Ôž„”%öd{[li †VÕ_szX³:<²¹5çªP©®ë.¸¶`j5Pß¡*P2;ÞÛ!æ1ïóEÌ è_ÞIi±CñòO)†x7…2$B·JîGÌ)ñÓ#^dÀT34NŽï¸sŒ¶sJ^‰Ø­›…CKGQ§§w­ç¥Ž—N¼Ô×íVԛ濈%& R]Þ0äÆrý¸ KG,'b™"n Úœ禗‰u¨ã¹àð£ÎzpæñeÄ=1Ÿ‰ùõÉî#)1§b:Σpžõ¶AÖMéÁUC:|x<Ûmz%545ˆ›xY Ïû0A-Ík?+Ôpò‡9Z¿ýT{†r”®–AKòhoÚTƒxÓxR.N¶us•žUά2šk—x““ýJÕo‰s†škXÆ‹ÆKMA²>i¹K‹£„²Ý9¡[ÿ*ì+jƒ„;<3$ò’m³¬8`mé¼ñþ`ÅžϬøºÃs—…K‹ Uô£—Å=bªÕˆŸÎ‹Ó¾ÍB¾ gª¡ˆ ˜õér¶ÔÓ"9R´Û¢ârqôOÁT +±×,w$¶Î|Ík>Kºð ³ÃȈG'Ü­X^©ßR[ 5pbІN‘ØòðĬ¹SCДôs17ÅëÒ2 ’«ˆ ç[ji‘r®‰)|¢øLÏx¼u3·œ¿u¤ TÛGŽ¹6ìrlÝÓår©*°~öâ¸I,¦ã2¡ãéJ<Öñ ñ›ôH R-ã„Þjó(±7ãÝe]°#©¨¢®³­Úºµ¸ivg¼ÊÙzâ ÿ4-¾âÑ0#‡‚dõLí*ïã´Õž!O ÔᙃïÃt”Ë‘ýÞšíåêþ¦ô´£¼?=Û•jP9ÌÌ)=[‹bìÛ”Òj © +× “3ãgªðܹás¢#4xX|¦‹åã>l›g^ìŸUÁ9}Ô‹ï•ž€5‚™<+^ÑÒ®²º¤´¤QŸ¼#„«2øy¬7q¼Ò#VS sQPINÎ`½]5\{``”P½½D³ Í ænqZðaÅ5©£ã=‰¤\0Ð5WJæñæÝ"^[,ÙTñ´Œ¯FÇ›lf­GÝÂpÆ…ؽ4ö Æ-îšB.¤CUHO,gb¹fØã‰_6ÑÄ^¥qÉœžñ˜xfï|bF†ÒP~#V´§ÿ$Îæ ¬öõþöwËñTðëûTmWïÿböþbŸû«}Øë×ý÷4 ûÈz|4BËzšÿ˜EKö€’üùãÏßfq|‘ÁÚÃïo°4<_ÿI¶BÿûwíG䯧¿¾üñ9?þuüˆ¯7ô“øúÚ&MõõïÓ\2`.‡Zȹ|_e±ÿ=âù÷ˆ¯ÏUÙj“¦Ší†Ê ™êøžã_°»×F›D‡´ûìuÊÀM¼ù.ÑïB§¯õðMg¾;VØxó•ZJœù’êñªëh‹ÚÊÅäwý!-g²0oyèfÛô*Î JJcÿ]–Sê}3ßÖŠ£†uÛÖóJÇ+'^ù“×ïí¨«Ã¶3«ÞÁlo%±"+?¬„•wWbk¢äxoç ÓÄÏß]öî†Þ¶m—m ¨8n’ût_DNGq®Ùó‡ü÷^Û5ÔÜñîhÅÙ ŒeõaåÒi¤òôù¶ÔÔÔ>ÉÒ0D…8Φ<Öð6'Iƒ$®„w„€ftšD×Ò&G™µÚ/‘œûhËLF»6 +y±™ ¨) ÕñÂMòÎÌw.,|E(dÎ-Ž"¨ +`©‘4œ³=ã/K¸;\<áâk”ÔÔ5µg2c®¡¹‚¥ìÖö  +˜»Á±c &;’ÛÒþ0bé‰åL,¯AÔuZ™œñ—Ž¨;¬XŠ7ã-‰µZÜEº?©!4åñµ1énߟu<³y¾Ž9™‹¿y;zE¼W˼êïV25§üxz,Ì»í ˜wªÇÿ‡ÄÓ[÷­Ž;Þ[-ÓJ|Íât¶-³Îzq)O‡óUv ¦‚Öì,\'†i‹xÚÔâg‡Iýé³n© ÛšÕ³ˆ«¼ßÒâeZWÉ͂É=ëöS§È¥=lÁ+5\‹=©ãÏ=1Ÿ‰ùu©ªÝ9T‹Ö0[GÚ ³»uª‚³•ŸVâuáÜ{…tÄr"–×Ø+H ”ýôØO‡»òÓéq•÷"8×ñÖM×á±OÌÔËw'iØìísó½U‡%Ñ„o£_jhG¨Œõ;íjcEÌ4â7ÉшWÃOøðT‡ÿIú5{&»}m7ÚZAj‰t€j¤Ê#J¡‡G|uÝÜñª ¢¹ã]tn\®k ÑN kgöÌûέ<×'©ª]ÙÄŽ~Æ©@Óö±¼˜Ëb¿¡5Hâqû "be·JÉôtÀ-r`R*É"Vv;âRrD—rÓþÎ&ÎÄ33~G¬VÒª£ŠÎ†±'Æ31¾.Ù°tÄr"–׌ gà&ÞÖ]ä}¼E„¢¥Ú€µºúÝÑ#¬W&×ÕV„òżðpµãB½¼D ÏÍpÇÛQÏR)nãÙï fÏdúX¡¼©ˆZÍÝÉIã- {FTøYEä¦güÛ;ÜŽ†*ã¼ÏÖe*i”o³þv¾+ÛN’2òà´ËÚº$hXÝo¤Ú¸«oÃ{\o©ÊÓîxï´j z¼9Ì-Ä(ÐX¿7ñ"ñ›„kÙ^o¦ÎlóÍž~7ß©$vçj]²OÌIé·9!¼³2;ÜÜâ°Ÿ™Å$Nˆ^ÿE¼„XWŸ>‰–Z¶'žn«`íÚlÚ>v»ÝM64ZÔ5õª %9³íâíì—A’7E÷>E]À0 ¸öt/íðF÷d—äfNšÌhf9ž…-u++õ…þøÿaÐ #õ6ÔÆq,” +b¥ï†u‚¬ú§+EÙðS/µz鬗m›§Ö‹íN2K—Ýfƒ¿)dÃ:œ®”ÃlXÑ¿û¡CUÈùîP»j‰p¼ ’ÊFã=ð!å|7™Mµ°@¦ªûÌø°°!7Ñ’wgu^ç‚]ŃE7¢XÅzR¬#>FM9¼;çø«]tÅÛ'þP‚‹Wù«z['­^9ë•GgëÎà>6ßÜ€ÅBG,˜E¡ §ÜšPsrbÉûÖ!r0ãÕ˜­xçþÖ-4_rÀ¬Ñ|Óå ßÎB,d¶õH’ϸhÈl“\Ñè¥F/ôÒ»Þ0#<‡û¼¶LsHò“ÃÂf^Ð\3T¦àJ¢«î¸aHk8[& g;ß»ŸS[$ï” äoÊ9aZc´»5Â|Ø«‘K‚„¡!,dGˆBtwYLµ0û§ÃSî±Öa$TÀÝû¬·ZXµè=Bǃýò«÷S}~Ÿ êqÕú÷¿ùË~ûý›¿÷»¿ìñý¿O«á“x{qRØŽAR~¢¦ã$å¤ï_ÿÄñôò}üø‚áqŽ>=þâÿ®ß}úüžö¯x~ Äó÷> .?ÿËv‰Ô%W(RmùÖçâ?•Z´«x™Ey³‡!Þ­¸MOmëI±¤§`ÍVÅ3²¾Ñúj}ã–Íö2S½l~¬vÙ¿ÎVÀ2ßl†«æ —­‚W)í³l‚ÙcϺ‹´ƒªÈ>ñ+È`öUÑ V9i•G߻ޒœ‚j{þ ¯hm¦ºaHïEáOæ¯-ŠOV!ÇnxW¬­b=+Öžâ³GêâÿÆ2§"Bë#Ú:œÌ…n4á¢þLÞ)Û+G1-Ú®Ê íà÷¡†Ó]Ï +ö?Ýhá$±þ„‡kã5µÏÄž¨}?ªôÃJý@äöVÓF±žëcdåÓÝŽ˜Êj¸–`é–äa­´Óõ¹ùTÑ;œ¯cØ.ç„…Ü“ýÞ¨·“ÚÄ­ó SÑ('.æÚý$\¡2õoešc?Å’íëP‚¹t’KÿÈíë"o¶ïeì —M’‚éN¥,9AJ¸I:Xö7¥úØy̬ì±l’*a¤v17ì×Å‚ù+ÑlLl ¿Ù­«ýe[§ØP!'éÙwÔwwfùRG|Î48b¡ø ÓaÎm1÷vCPí ^ÈI(ðÃsO¯ø¡É‚P±4Šå¤X†³C܇õ…L^É)ˆõ\!‰¡–] bC«øE´•‡­:¨ @°¶Šõ¬X{ŠÏ$1‚Á1Ip) †²ÓŒéW¬éc…‚ðÏŠŠ… sHls||™0#µ™ý=¼OÔ–¸ßuÃ[÷Rñ¤ù²Tüÿxoo®%˜ïŠñÀ.ýã{€Oå£âðîŠký b=)ÖFqèeÈ¢;Uœ;¢„1çEï5O¼}"¨ ³fÚžàF1Ÿó£ï É ü¨»9…gΘ‹€Vêãû°+ú0<¦8‚aÁã™~ŽxdíÆL¯]ߟڹ™9,‰¡ŒZyµÖ0UéF ¹—ѾŽÙG.Ï0ÎRqD“žFÃìîÑ’ZºjGË¢[cÖ²‚IíáÙgÔ6Z‡À!Tª ûKöÉž Eý™|;8ÌÄ_Ëþ΃Éyø+I€YòF8™0[xpNrŤìÝÑ~ÂÝK¾sCÂ@ˆûä»NHx¬éá}{ÉeX¹OáÎ"F–.†6óX£^-/ÿ~½%ÛÉÃÛÅ[®¥p~Rq;ã!\û`ÆD)ܺõ²ø¨ŽDzëÖMD÷*„ûóÞº¾éf‹ +¥ÔÛAmÞ!·!¾— +\ÒFÍ,XA1÷„èk©f/OÄK4ÿ[ŽeR«?vÝH"`÷{Êã“ìnì?ÚÊÇD©ß õ]ögv*èB`b™BÒñ&ŒLq5(^©½ª5¬:M³]§œ-9_æÀ¿+–³PÓÇ?3ÖV±žë—Îx+$–”A$R;ÍÚ¡ )R‹é#ð¹:ÙŽÒä‰/9.Qµ5slŠ‘M»=ãMcÈ™¿Îÿ®è¬€¹öoÏatè+1ÄAVÔŸ‰ÊbEt`3¨¸Å~Xñ"HaU¬Vl¾P‹ÿÛ$«£ŽéFŠ÷©cIÌbäœmCïÕÙZ˜e¸–P=(¦€ æõÅe˜L1¤%°mP-qäˆ%ûx«z3q@‹âwÅ…óxÞ w²?³‘`AÜ+ÒLA„û±NHXrGgÆ’{ç +^rÆE€h†×Q\&*E›÷S/µz鬗£åTïWÍTt›ù²ï5Õæk¥p xÉT«ò60,TÁÿëtŸS;•%ÌŠ'è2ôÃ¥&ÛhëÅŸÜ‹×TEºŠ‡ï¤WŠ›ôœñ3¡^Î8¡+Þ âSuøÁ(Ø–«:a³0†ÿ1„¶zõ¬W¯‚ÅtRLCà—fÚؾ…fÈ +˜ëí¤63! ˜·!aï 1ìçÙ2Á&î n£%I­Tà²Ó5'äìƒ9̉9¡6‹-vwîÏw™Nf•®q\åæûó²â Þ„“‚mFÂô‡—ÌáJ–)DµQ+(F®@ÿúꌭë +mëI±>\Qè朘˜jêŸ.÷Óå¿5‡%‰³°ôïáf~¥¸qõp3[Ø …ËFŽ8XM,ŒˆI1|µ6Â@;ž¦ÛˆLà‘ÎøÜýɆe'’`K`ÝGk*Þß…\h®žkìQn£“§Ÿûë—_Õ@ ŸßA|ûþ7×o¿ó×~÷w=¾ÿñ÷)à=2ÓÊ'äó0Äÿàmõx—?¨ï_ÔdÏa_"0>~|ÁðÈ»ç¯Ç¿RþüîÛÇÞž~þöç{~~uüÏ´£xþÞGÍåñçéGÉÀ–u)Ç h‹%eË]ÅŸ[—Iùy¬ +:Þ¬v*°dÈìN ¯Ý\Ù–$P|uÂ/ÕÎD,†¤¹§và–”Aª–=Ô:Bªxw6L­Ò É„7Ê_?*ÕÈU¬gÅú¥Š©@.„¯7;èâˆÕF±žëc`ëÐOd½ÛÇmªI£XNŠå1’jæoÒ»7z©ÑK'½ôèµ²Ó–¾Ú‰Ñ{˜UÀò@N,“lÇ™›“ôšc•VF‚%¢žÕz®*h’ˆ!&ùwÞ¶1ÔªAþ6D9ìÝÛ©‡2(ç/Íß¡+#ô/«Ï8EwFÓqƒŠG:n¬1b¤_ž+ÞVÂ¥[O°dg÷]BͼâŒv‚÷RÁ£ù.ïÇÒÕ‚åjŽ¨ %×È‹!× +œ0B´Õfk^lý3nmóøåCh¯âów¤âþÃ~$7šÛPxŸSèAõaŽeRÙÌý«BÙí ÿŠaò/‘.²{6ݲeÉÏÐÃÃ÷ÆŽr˜¿X‹Dà3ÿÖ×í¤úöL1ïZã„Á]q‚6zõ¢W#ÞÍ`aZƒg/*6Å“òA²y ØnÏغãEh‡œ,,Fû͘KDtRÍøëÎ-¿sOΣG|ŸgaÍ )(¼eL%<¼¥b0£¨mè +I©BP +°mdé ÕVŠ‰ø!1˜Â 74bÆ”ûÎ1Ÿ‡šæå1Ñè}‰á žC9ƾ\2žbiËU±ô7Á1ì‘ •²œ/'±)wcGS:0G°Ö(Ž‰å#>+&J¯‡ù »|^E:°pÅ…À¨„8±a²e‹¾¬­`½ +ÖﱤJ:0≊G¢í S˜²¥cÏ(¾ºsÜM¶H,eÀ¢Q߸«õÓ}›‰>u´,}·¼êÜ—ãåD„?oáAˆ"ÅÓ=<6ߘ-ë«9ì3‹†¯óÙº/"X8¯†á©.@–¢PÛR1ƒóòÂ1}jtÛÅŸíºÝN ],•Õ¤kÛŒ˜½¶$]Né6K„Ùvž)ÜÁ4ªu·õ®>tµnd-ýJ7 -‡ Î6ƒ% 2m ¬i£W/zõ1iU¨’G§ùC/µz骗˜ç¡e10 ·mCÅ‚IHb>/ œ°¯xZªQ£—.zéÑM53 ¤Píœ÷‹º¤õ*§å¨ÖzbÄÃ_€'0Ï!ùì·u¬˜ú¦Ø(Š+NH7818âœ3EÌï +˜——ºYÁæVBCì—k‚na=º«wù•ÃJ Ó]+tóll¶±Ž«ž9gŽx‚¦õ¢âå ä= žö­bÃj´_˜gŠZŠê;iŸxö8n…HCC¬˜ïXž…†P˲œg:‚Á=žñí·ž ªb¡èÊ5H9¨x=R + x‰®Ü–\*VRYS¹²b»uI‚Z½tÕK©Íôpmž)Ù÷åðkìSEÊJìã†TáÇ1Èá=7ŽAüœ³ hÁÕŠ½C·9T[_˹¯v.?S;³{>·®B|Ô=wtÄyŠ€ŸBÏÉ w0ß®H]¿XéŒeyFL½'5$I‹½m‡OáÝnÂBΠœ—ƒe;à±… ‡9(¦å•n¢â‚`~»³(,ý~4±Ñ ±Ä—®²q@Ä{*¦g¢ô‡´ŠåªX·øçµÛ!I qŸ&´U¬WÅúŠŸü“(bø]!HuÆßÉð¯\;. ØËAÉ&I+­u<Ü ¥¸'ÍAŠ_œáÕ!¹ã9>fg(Ùs§uŒêízxLíÏäá –$¸uk.‡6Šõ¢XGk/)ê¡;zØ2ˆ¤ÈÃ*T@ãèÞ}è¥V/]õÒ£³u3=\ÕfëóÚ,q^çp©Ïjÿj §Új®ËHÞçáA¯O5ÁšÃ’û½n–¨©–Lú„¹O¯C·.KŒº¸«vd¾_y˜ê³]îHð’’FÞíjHFÀD‘Úç{^Fœu™kG’3pîrÚ ‰v»E³-Qÿ"ïC=ÆPo\Øåö»olŠ©‘÷I42(%ÌàéùE~¨CJÜãnëM«oÜÓÃÎËów¦â’À•ï˜Ï®!®ÑŒ7£6Ãå1Q°×á!´/ µ1CÄ¡†5ÔbÅt[ñrF†b%Ÿƒ ž¿æ[­s‚}œØF±Pãc‚í<Àt~ +=¦Î x‰êÆ–Š³‚z‰²øîÎ}¦ö® 6ðo¸Ìóབ#‰qxÇDã +ð]Én F+]´Ò£ç†çl“Iß •Ï…¥Ÿ ûä¯JýɳʑSîoÜ>®ð©Äd¹cªhñГèý®'¾ ¶Xí~–T3˜¢v´&'^dˆTÂÁB”sÃ{nÜq—Cr²å©6ñr8CÉÑÖM!Ÿt;ÓbG”“R QY¾uƒóYôãuÆh'ÑAJÙ»,Á­b¾*æG%¦æ„ÔgµŸlÊ—ϸ0¨S8ãý|,™€ž-Ô€ +J£+|²ÖÇÿþÛß˳¬úû÷EÀ3¿}ÿ÷úfÿøí÷ú¾Ô7{üñÏÿüßçGïŸ_•“/ÓiÔ9U‰œôÏ/žÿ¾MãùññãVw.ýøÿùgV úø.8âûO¿?üxŸ¯ž¿âýí,Þ×qyü뢾ÔOšŸWJ!‰êþìâoÓþLïfWõé;Ío‰¿pº×ݦF1]Ócd·+$Œæ»iâ#†ÞÌl +XÏêAó­ÔR´åˆÚ1[‡n7=ñöŠŽ+ÆÚMœiTûîg}:ãý¨EAÁ)þÐK­^ºê¥Ggëfrìq©f ”XNR|Z² þÀ×c¶Ž‹A¦8'6$o¬]Á*_Yì7“¢ùüCÅÚ(Ö‹b™±;¤ß;ºíãÏ\ÑÜ”a[˜Å9Ç›w›¾¥óf¡~ºmÓ:$Õ:ÈÈ縂EëæÇì œs;Æñ‰á¦@Eú6ÖV±^koÆ¿6Vœw¤¹$pÑ Ž¦¾Ç +S¨Øž?gÅ~3–ÄÜOJ·”A³•Å3nôR£—.zéO½?#°æ„†õã®ÞOÕÒmµá|‹”Ã’ +–(‡oÞæõÛv”ZÌÙ0íb4z‡ð=¤$¼»#§ +hÒÓf¥ÙÄ‚tVšUª¬óí;bâB©rVÈÁZj×àþÅØæ"ךĹO<ÛÜ8vÃûvW#%` ­YºAYº±P W¡™R>ÚŸ.‰ÂàgL”,a°m¨Ø +Y_ñK1ñëV !/©—ûäÄa8\Ÿs<(ÔÜ]ORlŒ%Z¸-CMëõ8ˆ}ÌÀ“÷BmöaK Ä©m:_æðhLóð¼z˜#J†‚À厔‹A1ê÷£R !YØ6T,HÏËÎxέC·Û9a‘âœ!¹FŠ§o6jõ¢V‡<ì@œûÞ&‡…Ä1¬t[ñ玘y9*›ö/Ç63fP;)Ø +AÎ…Ï9‚% â ^ ´`0á5žxñ<[·ÅŽžx®Q\ì6Ü;{þLÖƒ»BɼÚÇ^jôÒE/ý©÷ ÄÌ»ç›Â\kvn0×Fvn¬$…9œX‰ <Ö^®ƒËú€˜ÙAJ½±OQpN~ÎÊ Yu…¬vŬH3‚”¤Àû8¢Fy8Þ YÍKýs8ŸÇ™â<ò©3v’官¨¸0¥>ýlã +A¬>Îáñø++&dEeâbõ­ÎñqŶÚ;º B¤d:ÈÊ ¸^ñLW T2^ šÞW°í¬žd•ˆ“GfØL­P Ib¿t`Ïu×RÀèvÓ¹o¯è¤ƒ4Šå¢Xép ­Õ&[Ì>Smœ +j ø™îø¸á²e>®ï$ß©wìÆý$±–2`ñ>§i«W¯zµçà©ôžJ%˱ðôùj£V/jud¾˜¡(/Ï´™ä®àœVÏÔL#Ðl‹»ÆÕÃ#”ö…‡+Lô9môh|6޻à Ã,C6íûKnf<° òÙ/ƒ$Gnˆî}Šº€i‚@bí#̼´Ã›¹Ä'KVË!Y!–‚˜ïÕtk$õ”ÈLôìaT +Ýe“®:_ ‚(ËÖÄÛ ÄÛ{††©de¾ ñp­ìÕJ½@GjI[°º—Zé9Y²`(¯V—nðUI¨ ¢t`ï° ú¦6’É'¦–’C–á©´ÀîÒ Ç«¥knÒáàÈj&'É+-bÍK£´ˆèás[7Òzô*.ú*±Œ†QÄ¡°:ßõ‚Ô £ ÃÕÓhÁñ†ì„Èʱ”&Ì7ŸEsŽ]Š¨†Æbó-¡\N#µW~Ñ.t¥ò¿·ûÃá>‹¸³ÐHœú·ÎŒ3 ¾]ÃS]-9Jñö`ž¨Š$.ù &Çz3FÆ”7årx¤\e³® +_ˆE,¥³çr$ùþÉ1¬Š»‰1''9) ²¢*0g‡˜-yEöŽ’¥aÅâì“—d€xØ+úÄ#ª8kB寈¡ËΞ(P¢“Úùñä -o8ò††÷öùš³ [Ç’ärŒª§ÇUÖnhŒ©A/˜è Éí1÷ÿí貨%~†".Æ…¦ŠåyQ³†éÒ啨< ] +¥¡ ÷£[^>òòÖ‰¶Ùí!F]º öv Ž”Þ¾d}H¡ÎX ‹/ òRŸ£è¸!œññ»÷§µLÆ*Ä°Wô‰GJÄÙm”œç¯ÌåÒHJvܣ⡨;Qq¬ÕG«í·hâÍ"aO‰Ê«½šÑ çìÄ«…xûï˜{WÃìس¢á%ó9æ2cèçóDâ7 ’CLwž W§«z0;ô^Íåq, j#ž1ÛÃ4¦u¾P ™ûmx™TÆä÷{Ä2þ€™ç~X&â(„êÕ£nñUÞ SÐ$<'/³ª g0Þ ºèQÑï4â«¡Fp’ªÝ/= Ÿž·F +.IÖÂxA@Éï¬S7]âÔ?1Ö©ÀB.CÔJûG›©ßRÑ2ôÎuækN“K´£ó†D o8ð†­ëÁ]¤Ð?:‡=¸?ß‘Ì8Û8[ŽV9s_ Ëè³w°¯ˆeˆÉƒ‹1©®¶âáYþWTS[¯øPD‡)©—\¾\,swñÆnÏŸ§\–+Î  ŽwN9LàrÊÚ)·`&_Ê÷*ñz6AÑ;Þ±úß`H‰ËÏýò+K© éñ8…Gì—Ç¿•÷úí÷oåm¿—÷Ú¾ÿñ÷¿zkH]ò”—·Ã ç0Ä×Ïžü">?†Q…µý󂢨>ðø·~Jòñùhy¶<žýøñù>ÏßêŸx¼ Åãç2¢rÒþyÈ(q”wÇÇ2?‚ó¯G¿Jùç«”ÃW)C_%ž•PÁ»ø^ÃebxIâžâ©ÖŒÚ{ì+⫼¯hVjXéÀJ?XURt1wgË-+Y¹7Ûgcyðö:÷>a½c±w÷Ö}«&ê·Z§ØQChy{wî´áÌßË•ù6ßýMÄÕQؘ¯o¨·!ÝzoHä“‹õI½¦–÷ìR¼ßJÅÈ]bl‰ûGÁ›Æ»“ÝÞ&'sÙæ­¸¦ºq¤öÞ¯ÙoÜýj°FL­y„˜óáhfãÄÚÝFÁš0Ÿµõ†xxÆ·ë,]C(â bîj˜[^>òrOÃÍÔ|¼ã'o‡ò¼Ã´!¥^~ò~r‰Ó[»8íx0YºŠŠÿ&ÎJÉ—•»‰Á 1ˆyI Sn–³ã$Š7LK‹«¼'Úõ¨vV}¸h¼:¬µ  ÏÆêf2md$((kÖkîØ$ð†Â3VGëûïð1Ôw´â3GCcŒ¼×3Uó4aU ç´“nÏY´LÖ¼¼¡mÃŒµÿÞžÆ3³-Ú6Š¦Ô hìBû½[b>óÖQCó9š/äø]µ_ãsV¯õkI-]C䓵î£ Õ|ûš0¶Äx$Æ­—ÆSóͱGcQ/N)bþ¤]?Á5D‘Œb"c*¨ þÑ&‰36Äøò&Û_¿üš‚CHÇ ]„°?þ­¼Ùo¿+ïû½¼Ùöý¿ +KN<àn™ÌÅ5ÚiÐs‹Åׂžü">?¦Q-qÛ?/—¡FÂãßú1ÉÇç£ûËög?~|¾Ïó·ú'/hgñø¹ÌÓöç¿’)z©®\,\;G–!ìWZŽ%E…ö†‹`ÄÝÕ­ÎÙyr3íÔü'!ô‰‡¿ŸŸØã·±üÌòkâ%’ƒœH›ñ×ÎQKLGbÚ:­ªé³ƒªxtæ×é”\ˆÐWÅ0q_cÄúåUì<¡æÁ“šëÌSB_ëTíÀŽ5+¾Ê{³ PÀ‘p²s•Pµˆ«±ñ’6\¦=‹9$#¡ÌÁeFM +†r —€•ˆ[ÓÊ;%VJeʃû6ÊÜó˜‡6]ŠÒs³e6®x/I_ÃËrõñjZø˾]Ã(ä8æþŒ¹%æ#1_›ñˆ¯•.7lP}x=Ÿ0–æ4LÑŸ°DlðÔ€¢Š JÖÍë­Š±!Æ1n#éá] ô‰&‰GÒ™b:Ó6¢ct¹ïlëèXØêð©{ãÍöé@ªÇçz•stžSß&–!¶hÅÙAÈ·ÛÄ{p>J¼àŒíUŠýýjIŽ$·¡{Ÿ¢.`Xûs/íðfîa¦4ža: +Ef$SAÚÞtKꬪ×OïSrdl Æ$Îù«x»hïM;Áúê¢OóÛà½S‰`V—¾~×™^«„ï´‘<¸öä;­Iܵ`ªÝwD9)E7Š9*àÞÅìŒÝ çÞ[º¬‡~\Ü4àT@3ëh +¿ Ö¡]ÞZR{\¹£˜jm'Š†ÆU-<®Ýú¯Ö¯Í{ í×+:¾0ÆnœɬÇî"IÁVŸ,ÜÒâ•3^yuÔÛ°>ˆøû7û_âe¨À‰¶j; +nüôèlðÞ©¿l +*u³5,hõS¼ X[Àz¬?{tX†m´7÷³‰ý6‘yöˆIŸe<"ŠO2–Ú*­ïoÄÙ>!&p¦À‰›þ3Ø'Fú6ˆõ„X_#Ù‘Á8EÍ}A Õ'3ö­bUÕgüé|žÚ(ˆJØãí"â¯WtìxhÕ}XI ´H¨ãùhˆáP\;f~|…N¼º” ×¢¹Ï²LÀ…CŽç8[£ìáÚf!Lj9,šëyñŽ>‘Á“¯ˆ˜KÊ©??ÖÙKUÇŽ)Ê»«*îò{¯È 9áP v¶â€¤}E¬“Y@œ¢t¾ªàwh¯b S#CI¥‡tP ûo!(œú i%ì·7ØSÕ®F/¦IÙ¢ž6Oí½õ´Ø öà÷h“­xqV a”M¾ 7ž~¾5ž8-Ô%ïã’ ЂÂ3âi'€šÃÒ¾bá©ãÓŸ¦w¢‚ÙÈÓ>fó +”M4¶6Œ¸?2FbãÓÈpàŒ½XµánÈÝluv*o$aÁRg‘?tgEPƒ˜NˆéÕW;ÖØ°¨H,X}6,ªÀ¢}ŸXqÙ)*Ä3|⢂ã"\ŸË¦ÆïÜj‹UÏXµÇíÌ‹;€:bàjMÎ #~Çïñˆ>¥FÍ]Üd5 9pè F)@ºdbl7=7œF 1ˆ—l–®à5Ÿiª˜äÁZ´þ4º)ˆîØ4ŠÇ\.ÝA¤Ú¯Z°…¡‘¡xtt« â88ÇÉ÷*»]5Ü›ûÄ›¤™£°h.mÙë ‹Øz·œî E¯óÂX°úB*=íR‹—Îx©ÇïÄX³Tß ›ó r}æé­9Ív+½^Âff—åkoéØ%·;8v«{3õ÷æpuè÷õ»ñ¶›*„r­g©Òâ•3^y ò»¡=Ô'(ê‘‹¹¯Ög6*½G\PéŸÚ:i‘ˆCÄ‹éMAÅ£3ûƒßÑC{ËocÉÂðÐ|’EKs=~wk;l ¦ôtÝ™‰Ø$.=E,²/+È•‡yugÞ~c3@ä <¬©¢HÏÔiË ±¼T±YjP}Æy'E0”ìy`GP·ÇScâ$*(§¾G,Ó#8Qñ­wF<Âñ‡æSŠQ¿«-tu +nü´O4x©ÁK'¼ôÞЃkWó(â™Ô¸yu•_Œªð¼*ÑÖ°žë àAõ¹Œýñ©-Z=£ÕÚ³EŒàý`jäÑ4BL—?_% X¤ÏñŠ`(š6šs‚ŠøÃsnª†{Ž8¾Ë]´÷j$Ýiiõ`”‡1WÃ*Ò+ïÓÆÑXÆ}*=[…òqpÈy§&ìT-BÃИsM¶ ƒ9‘†Áíhè¹ß'–ñ ¡Dêx’O4xïtøêðMnIj ÔTéØÿøÓŸÕ ¡}ÿ\R­wùëç¿ÔwúË_©oúk}§×¯ûçé‡À,‡ÔØq×- ‚ù›?ÞõoŽ?¿h8¾HÀéõÛ êû¤Å÷ßÇÿPêÅüöSðôýð×Wÿ~—ß¾9Þÿûé–…ï¯+7\^ÿ»Æ‚ùkæ/ +ÎZÚ_ œòúɳFå¬àß7ìC7Xç*â·€—<êªf•ôðœ$mÙ“CxÓÕ<m°‡À^…úAf_Cæ£n—I#.^ÝSð2PPÁÝN<Ïí¢$û¬ÝQ#ëÊaì‡rB¹Æ&y/(†Ù}>(j’{dc+ÖTGWÆÀÊèR#þÚY©uƒ1’Ã‚î ²y·7Lt‡¡®ú¡7p'ú19ÜJ·Â5†ÓÃ`'ÊkϧZÕ{€‡{o?ŽG‡»õ^Ëu …Ëb=IHVHdÝ„›c ‡vÎHbF÷ypÛõßÝv›×Wë>…ç`1W øÉpsJ¥ÓÓïý_®½ìXUàÝ$^£öîvc‚XJpdÔÞ›µa»a $ûà 7p‡fŇc«#èç6æ-ß5Ö Wìèl)c·2 ²;RÆ6fì½E£¹ ;8ë“Á¨¸ +÷a9Hªì¾¯¼ÃbD÷…`=¸´G 98¥nN,´'6»56$Ý'‰÷cx·‰)9Ig± ¢}¼ùfƒֲ˳ímSOu¶\M ­@Aúɦ>Vb0 ,Ýz¶Î¹?tþ>×4´Ýü!UÀàæè†~Þ$r͸PÃëf7àeÜbÌ®@©…òª?.b¢k¿CpC++ žƒôØátë·ß{[hCïÍRÀp㽃€zmawH€-·×µù¾èøE¨Ÿ¤ `©¼ßÓ˜=Ia¬è„RÐÙƒf¶"`I +šÊV&èPõ+{€%‡ê½]°£§6à»7­F°j¸*.{ÃsÝCìU ÏÖÇ™1,¹€cÚhQ ÕO ¯©ß "ò¾è<w&`’÷Ýቢ3”m!»µFu{ï4w ,ÀR¬ G¥l5¬Ù x7&†÷Ä{#³ËFfrm›iÉVO¬àÃ}lª‰1˜Yw­i XÏ€µøœk#âýPs¬~Šä(&ÖcXA²¬½ƒføéæphI߯¶%Þ*×*»žB9¬Ènô~Íìe#5箥í… $ÞÇθ8X¨?,x'9Hb`Äggæ\w0ÐÌ›Tßje’Ãî;ì Ø +,›@Ên§EðI·CpcÝR®¾KQÉYðÐ’í2L-`:¦k kXO€uðNÎÀV 8É6©¶•;lX!k 3ísl`3{Ïp#‡á‘ùNç‘9rnñÈðÂÑ ¢‹’ø‰¢#€V6 + ª–†ôtQ¿ìzpÈ…Òƒovˆ” dÏŸ—Ũ‚»Ç X>åWÿà¸8åì¢ ·Uh"hpŸå0ïÝ.ƒ #¹º‰íì_ì—M²¹ „÷>E_À0$°öæ^ÚáÍÜ?¬×#‰å(4YQä rìô~º«?A‰ÌÄ]1\ÁÞŒ +42D‘É®0–-AJ®ç®˜j•tA‚DNeøA*5©œIåÕ-Ù®±ºC5°ª0Üúšã§n¾Í!ÁÊœ–[EB'kO$Àeº Å|·é Û•t ’ ãr=ÝéQì,nêw˜÷>jeÄ f^P¬7]VÑ8¹FŒÀq‹$feHz­ÜaÇÏi¶]çÏ1”ßJÜÇy9EP–jzNNó]2ŒM FtÊä/ànC›¬ +7*”lãµ£ s‰»¸žûF†(29.Ù¯ A"'‹ïnZƒóIiØO²%'’%ÝÆv·;Ú3ñzäkÄI1rº!çfF,4]+O +ÍbÖj=ŬØï9ZžÄÍ /T¤DðzwÐqefö4¼Ø±1„Ð`] Ø$(¤È“s¢‚}Ö¢z–;ÅÅú®µO×%qÜë¼Ü«6D,Àr]Í—t1,¶‹™¾máž¹Ÿ0öj=þð)ÔTõzá*àT§3púNàãBž¥Ñmà+ýŽ¬ Çy™-Û6M’³3jJbKc%ÍžðHK ÀA¯]bNW$»É¥òÈyA ôxÉ6i ©·k3€Ÿ™G_GÃ}&\6Pʳ;ûHûE“n(°•wï´t$`d^"Óí _²46œ¥9ÝG°C rIã0x¬C0Xœ|dü;„BÊ»,\Î ckºRÃÊVZÓºpÛ•,¥çxÔ.'œ„ ¹‰m +{¦ßVØ©Â¥.½zÒ-Ft&û ¶[»³—ËtJ赆™.¦E²Fûd„PÔTÂ@S +XNÀòê0…h@‘=Ûý œjàtN÷¤Û³iŸ¤K’{k®h»²dÏÉn¯›S}õ¶9¨«a-ÅÌ™ðû?æNRTÿùî„SœNÀ©gÂdå¦$–Ñ°Ä ù- MRcËÇ ÿõ—¿fÕüþ¹D0”¯ŸÿVö·¿ÿVžû{yØë÷üû$7,ŸŒüžŠäÓ0Šßðpè…CúõÍñç×0Ž/_¼¡@à¡•÷ßÇ¿²|ÆŸ¨÷‹¿¾úñ”?¾9žÿ~u=‡÷×eÎœ_ÿü¯-o§/&)·×úðë#ã5ñ{Ãî˜QµÅ³V%ðîù}ÄÏŠ5%xÅ +À)B`uEa·G|íŸx{Ä®ŒCY<=:ÀÔßåu B9=Ú›é4Ý"ˆ!j±áÖlÞ=}åSÁ1´õû0ÿë÷™š?ã²q™â [. æEÝp ?œïVþ !Yžžã.¶R¸cÆ}Š[¹i0iÓ#:‰{<¢oÆ>12:Ä+θdHNn¿u=žæß` Jq6íЭÛíÜàT®EñÊûŠ]x·ä@H!Ê>ŠH@]âñóíâõô«\zš¥&­Ô´r¦•í¹§õð~èiJ©£½/´q qöÆ ô᣽çv{_$çrÀvÎ-skHDˆ–Ú1øáÖY‚¬ÜºŽz]bòÆ‘“¸í}=W, ªŽ"ªöÞyö´÷gè~3æl@b³]mh»ÌÀ±ÃÙ–™±„šÂNY‡‰ÈÓñͽ›ïlªþ…´ž†%%mÌ·—w²Ø,E†ÛÝýƒvcñ‡è¶÷Ÿ¼Ý=búu„ 1h›¸[¿mâ>E¸gØMÛÝç’Mo{°º9©£].“œKƒi§Æ2ÄË»Ñ×ñz9w8›Pòf¼XÎIˆ1;>\õáÎùöôág>!áx’×à—ô‰íº«U´¤‡¢¨—®ïHús,ç !™WÕ´á#œ•Ñ%þ9a®‰ùL̯o.@™sëÜèå½¢½Ëê.[yÅ¡¿}ì!˜[Õ$N4iÞ‡ø8çŠ {3¾ËÛôߧ¥GÀ‚q úC(ÄÊí*üL¯T¼râ•WÓ#¶+îlˆÐÛ¸ÕÙ²¥ßn5L'Þ®¢í|œžAÑk¿v®ÛÓ®3c¤ 3ˆ‘×ÒÛ9 ²Eçô—Éãæ+H€è¦ÜðLKRé<¾§­7_Öxü6íÕÒŒRkãii‚©Üäxp•rÝ-âŠËa{·E¨«ˆòî·êí»¹2z^±»SŒÓ¯¹Š—*^:ñÒ/Þ®–8´{Ä2fC°äjxH˜s2§<;5F©¡t4‰›t4  ¿qÓºx]ZoÑ-+Kh¶;Œ¯F[IÝal®t‚™»hc‚bd}@`~²-æ Rº¤âôæ0PÂ){÷ЊĖ «K|wå¦Ó2ˆQëºXÄÐöZ6-^FèBw¬AÚUÐÝPCHÙœœx»õ¹V‰0öÿÕqžf…²äö¡ÖݦX.‡šÑN‘–3ólûß&.!T^´E¬•!²´ý·3+ÿ=w9°O¬D£—m *B0Çؾ,RMœÎÄé;­0Eô48gv`c°’Ëh=b.ÅG¬wVÊ™µ§* æ¨ö¬ËH`XpŸ…c,PIû.üñ¤”Û«²ïÕ öÚ4ªjmÚ;-·´|¦åï£åä¹|ã– ñ† ±[W'¯—ÂdÌìö¤˜¹qFÙ6º9÷Ê6CPáà¼hhG=íSÚ™÷iäz÷|§vßü~UH¹hCœ +ÿ9ÿö?á篓¿ËÛ×øÃ~ÿã‡?÷§?ìñóÏNûQ!¿{|Ņiø)öœFM戔äã“ãï·idð ó×Ü"|ßÒ¯_“ýWûõÕWŸŸÓþˆçÚYþ:Ñ'ßn<¶Ûƒµš-þœ% ÍÕ.*ïí÷¶žPÕªFÄõ2qíΘb>óÈŒýNÔ”1PÄjîY ´¼yÑWú]åª5õ%¦îh_²úiuÐcT©DBXm´JPêÍ£š¢Þ«²›Ù{Æèß³ÔÛ³er‚ýÝÈÑl×ë¬T ¤%Û¼NÕêa,'Â…/$#·N L +øl_«¢ï#í!öoq ZÄz2æìOb e¼ ± õe,-±œ‰åš(FŒø QdóJ9Ð"&ZÅ‹%Ø£ŽUú•r¡{€d»;œ'Îø¸l‹bîôèÞ}F{uçB50Hâ0œ×*>{Uöí¬‘4Ž¸9Ö0­§ +Äý1M¹/í™U`¨;ëˆ!+ˆ•~ß&¾½=8h¡¼Qß!E¯”ùöd›9c†š,hÏ ¿2ã¦'ÜEœÅ3C#~çÅ–ϼøø:‹g*Âó8Úæ,"U ,e “e(¹†>± ±ûbÜ,Ý ðÈÒqÌ'`Þ1ówsR’ì½3nxGÂ9.lÉòíV<3îÜ'J-61ÊÛ Ž×Û„‰õëåp…ï×˱ +ÏUú®¶N½Ìþ$ÖÐ#Ö+@œŽWjÆÓ.iX^9ñÊÐ|‹ç\ŠÎÐqußÂÙnWÞ·#æL LQb|wˆÏˆÏŽ6Bü…£«ÒOå‰ü1Õ ¨©â¢CÜ®ˆ’¡J˜Ói_s³ã2*>à}:Ä‘o–R¿µOË·!=„jÀªõî|9ÃV¹Ÿ£‘1E3^QÃûµ/°i˜Ì³t<³KìtË­²TRy9Ú㕻ܜ2ZèÁw´Ê1µ+èû©1ìÁ·w4¨$w§òT0ÂÚ%VÅýÉÌÀÙdŸ.AUA%"ž—Ì-ñXÎ…Äê:¶¨bÉ.¡Þàk?˜—± +FR.‘¹]]»Np¼TÞs†l„ò’5Í2”\w²a-P%íT,…ÀÄv²ˆí¢ŽÌU‘Ã:¼¢*Ì$ +]mÁpfdHÝG7txlpñ„‹ž“ù5gØ—ð2‚à” õMZb9KøÌ#þ¢Ã»M¸\ò>ÞÐ&¼­Xñ:ƇkÔáŸï»6ã[KfI bAp]îj°î|ÇêD\‹ý•Xp#Ÿ¨ˆrèÅ—ŽÏ1uë +¤$·ùyªØÏ'81Ô*aÞý«Šá„¾[œ,k¤ãǵsôvZ,PR•î¡4È;r(IC,'b ¦JNjøêÎ}ƒGX\~þÅå—ϸüèÈ·‰“Aàgd}\!I$ß{ñ¢„K¼ëd†% ¦`ßDÿâDtqp©þ]=nPõûéñAœ+PušÇß¿ýOªÖç×Ù€ìùõþ°ßÿøáÏýé{üüóŸ“»¿Á/wGÿI§iðû4j:ôMI>>9þ~›ÆñAÊøøõŽìî{ˆûùïñ{r*ï_õK$ÿzùóã÷'½vüç;ÚiGûù#¹#†Ó=¤·O¾!½û•«À”‚µ¹&ÇÉ-"¬ÁS8Öb½ Ö.ŽŠÖ€ã#î¨lÑå­¨cMÈê.¡L j)aq_‘_ÞHRÙƒ9Öð¯ÑÜ]%¦‡³—Ë¥=@‡¥sÞÐÕ²'‡¶«Ú2®&Å “WwʺNÄ=Y×—±"´”Ù®6Ò'ØP²öÕukøÙÕ] |*â¯(€,“;ñqOv¼@œÔÚ%s à÷(–Z †qw{…>·âAÆv„³zÞ}_•x ­$!¬ýÙ‹µ´ËÎB „µýnÏ6…­ê¤ä „ÖqëúSã°ê,XÎPAprJŒÛTBõŽa«Ý¾7{QÍ°æ€Þ,¦„¦O¸õ· +˜uHx2I¤‘Œ¿àÒ.]áÒãu´ ]o ¬`€vŽ„ûègævW¯–ý©%,E ‰êÙŠ6aÐ0Œæõe­`+êxÃgÀIÊ. Ž½þpptŸ-äžÛ3´›èkñ6H”#E¬uÕËùõR c|pë¹°˜äøèêMGŸ.Ÿç âüèÉf©¸ǵ¸M`8:ֲ᭕¨^®æiÉÅÀQ;í(ZK1lWJ=cÕ+V}|g{ØÏ̪'\¥¨R.¦ÝÃz­RëÒzÙmh·+Ø¢+C ¤ÉÕa¬/$H(·Ã´;°KnkŠ>9ÉBG[OR\¹†“sAŽÉ —ºÉ‚“¢Ç¿0ýêòË l2['¼tÂK¼Ôæ׊VÞˆß$þI¡«-–ÈŠBaG[)‘ú焽÷‡/t·ÉghÑ­òn›´ðÒ”bír²¡ýÌóÍö¹6± +L)àø³éßIäÓšË ±\˱rñ§ùˆfƤ'Ä^“ÉüõøÏßþîu9~_Lñãû?ù‡ýãŸ?ùçþìöøù_ÿý¿ÖšÙ>ÝR]Ùð­ûÉFMÇYJÊ?þrüþÁÆñeýñË; ›üüóøºw|}×_^yùç×_Ÿôõ·ãù|Ǚϯ%‡ÿ¾ä¿¦FȪ–W‡m\½³q«;¾‰4?¹qí¿ñÇ«üÿÂÛÎM+ìÖ—¢O.å¹ßdÖÀ,Íf¶áž¿EüÊ‹üLËG{}‚øäEˆ{¼è·à ±ö ÞïÞ¶C¬nê%}´€‰:¾"îñˆˆ=˜’ð–v/Æ@+ÝÒ.ŠÀ&Nüöq‡ ~[Y¾ÿ¨,¯Bî˜Ýíèø]Õû–ž­áˆ½jAR-{„³b”|«má·º~+Ô\"~¿ðÒ/]ñÒã¥Æ^›'šqCoçhŠ4”ð]‚Ÿ‚¥Û`_ÜFfÆêO1\ë‰aǃËPÚ×xþÁN- /rqòKÄÖ®hùŒ8_疆ǖ>xÁÙWwVEßԈǑÕ:ÛŠ>Qv*jž§Þž)æ2û,2iÕÊw<í®v_4ˆšR ÜϽƒõ䡺˜•kV('â>wµ»ß,r ìMxÙ)VÀ˜C~g¸ï»Þ ñfþ‹Ša§\°A(ûÒpÉ-éæu¸‰XψõŠX[ˆ±ÚMÄï:€ÖÄËp,UADÚW׸­ã>Ÿˆ½˜€¹´›p·*ž!º6R£p|êÏo@ŠÅ"Ä¿ª˜Îx銗¯ÛåH —©ðt/ˆx? “¿²FxÇWÄ=íbäÃEp£„F*L7ÝmŸ†C®ªa[ÃÑãj±"¤’/Q‹ø]1­¦p%PÄ]õ†Ü"d¶Ù|Ó^µ÷ÊÒâu‘|Ó”AØ¢-w7+¼va S‚@“Ô=x=Ú:µïÓì{Ü*˜íraÇ®ðð4›n{×s¯Ä­”évÁ©Ég›Žxàn+UCÏ]°ó YÛ×ÝæsìK3…»mAŽ5áñk-Í^†›hßlÞÇ܇ÃÎ;ÈÕFú„7d¡O Iäq›â@ë+hvÆÜlÌй…EcϺ>K‹KZª8—b¬vÛÑ,¼ßÊ4pS <âÓ ïˆâä¸!â|Bœ/ˆs§( +RØ~ôaÊÀ©íçÄq§ÇY ÖXÅUôyqÈ1£· æzªŠy—M§È)¢wH•ij깑ê6#éÞÃnÁáU H8B|—á§hÇ•Ë c®('ÛGdzI„x„"îÆŦBˆùSÿµ‘’Sèß5Ñ·6bØ.5ììWKr,¹ Üûº€a`í#̼´Ã›¹„Q¯çyªmAUM*ˆ˜Y½ªK©T"? phªãý‡£AkºZ¯âM3.ø5ËøÒzæeÜqqÊÚ.ÐÞm+yEç–^Ú†m)Ê:¥i¼!â(ìñ]25,ñß{.UEÆ£¥ÃZ—ë w[Ë«ƒ!öKÄrF,ψå +ñ©ßÔñ£ŠxX •š ð×^q›ãϼb&ÇÒ;HkcóˆÍDüª .‚î­¡QîÜ +•ˆ†0Æøèã|ê‰ÄU¾€X­Ô¡ h³D¾'ŽožÚŽïuˆœc|­Ã±°ñêÕyÂK'¼ô„—>® ¡#UJclǯô*,Þ0´gû½ÓϾ°ßÙ¥%®¶lüøl{`hÊuä{X0yÆñžˆXðzmƒX˜ «¥ªØ04LÁzO«Ä +Žï ϯ‚Ù¹¥:Þc ÄÍ ]žôx¦éêp~ïQ§*׊g´ãí¸RÄÌmÄf@‰O¬É»qB<žv‡q¼êJ·¯î3EL-@-8Ö4ï~â¥3^zÆK_Öµ“Nn_\ªaTPmµGЋüæˆÙZÏÒELEl ÓJü*ÃŽv«_¦ÜÆsÚR5¼ŒuyÆ :t׬GÌàvâµ± µ´õLâwV¾u긒Ûiº-ç NàhiÓÙ¯MIAÖħîpñîð^cgeèH«ÛäTŽ¨¤:~UŸ Ù&¥0#+¤a20ö,‰G,gÄòŒX®7·—9¶/ÃF•ET§éH—`½]o·´J0»Î¸iJ ^zÂK×ü¢+'JØ3-Pûj~'*‚MÑÄ'Žo"¾Ãñ­›Ë×ÛÍ@±-ößçT¾sw_¤rk —ëøe'þ¢ —kïCÁ¦é±¡Wx4Òôò6äØz×kŽowµëË{³SèXnlº?Ûå×*N;Áè•öFL ¿Ž»·Ï3÷B6áŽ7ŽnQH·°‰<<ö+Aµl‚½GpàuÔm1”ØP•L­àì¨æjÒ;H%I4ðÖG¡>¬¢-=»ÛeØš´Õϲ53š™Ä´›BLr­†-Nú³Z=ØC ñª¥ü|mw 8¿6V¾¾¶mü=Ög—ôâö 96‰u4Ò"¼_jöYu_S}îqœ'³ '—·ñ8!OˆÇŽEÎeªxL××Ûr7À»Z:FI½âU§Xìl‚‘w#»ºyüάï?OKï—Ђ Ô´ÕA\¯SÇ“Ù ~uo6 NŒ)ÚY ~¦†©uKÿWãŒx<#ßØÙ„¾ xþìxgÒ !X4Ì ùÒ+=c¥/å;;â¢Ägh·44qO'džˆÍÁY¯ í®z/´+'¬ò„U>®´[[¡°_û>o¸…7åWAÄ*ñÛtôGæ~BÜ ;ã_ù«Úãÿ…¡[ûñÿ¿ÄËþö÷_⽿ÆË>~ýÇ¿ÿ'èýøÝŧŸÙŸløñÞÈØñû?¼=È8þÕ€}üöÖ{ xüyü˜ñM~þo<î¿=þøûo/úùã[<>pæâñ÷àˆõãŸçßeüÈm8?ò”¹˜3ñ k?rô3Ä3|hê8`à‡k®äwRêßñÇTünï)!÷! 雯ÖîD5PT*¢!ã9ú)Ú }>*6I»ï&¥•-B_1;¶éíÃ8ÄfüJc0lV#(ØT83³Ý¸å®U.Í ¨·å%g¢Œ`4K½a¿ZÆ: ³gŠØ± ø RÕ7ž9^UFÇGbÐдBlVxAµÉ÷¡½¥‡íXÊÕÚñd!W;Ñ¥§ŠØ°£…*$UÅ˽çZ¥‚æÁ±!ÅD Ü黊å=´ùÑ…©¡­6µ©ÁU˜Ò™±¡"Ø\u9ǃ=ž´">@¢R¯Q#Ø:˜ÒêÒ3S¿c€v±Bˆc b©*Ÿö–r¼_0©Ñ¨”®T³.ñ/ñÒ3^ú¸pµ™h ‹€$–ÜfÁê@Ê^Iºah½Zs!]`™¡MWÄ›hÉ{ýšÂ輺ðLõ‡˜ÚV‡Å«xÓk`=õÞÍ +¥P'(E»á R1]îf3õ[ÉÍýr+¥wPIy³¶sø/µQÉ;A?>^¦?T+ë1†Ä¨ÎÅkìåøe‹Æƒ¶ºñLÕp¥‹«èhñL”ˆ­²ÞÆ`7´´o&_V†¡šÚ~ô +Ƨ½e_ŽŒ?-øÿ9n1V#~o†–âk]*Yp(‚ )‚­ ¯?6â(—¢cµŸð¾Ì*€.•’£! ¢*ÉloÊõ»ßÔnñU¯G vÕåóa-tu‚qu^ɇVÌ}9ÅEÃ0¯â½Ä=´¹ âÓ‘ulBÐãI£"ü6‚páBÁÏ0­¶áI1ÇΠ=¹ÍÔÀÊ0T3ínéfÁ¯¶ÕûóU¼i…ˆkÃÔ{7ä÷(îhi žd¿ÓèUÓN¹½Bñ&© öë; \s \CcóxS>4ö£XƒaÚÒ¦§Ü»#£q¥£c –¼ï×ÒŽ•A£¯NºÞwZZ½•Á.àÞ—®Œ?h‹µ2 ŒŸX錕ž±Ò÷Q+m„5¤f6Ýzßœ›µêºGŸ•r8’ ÑWçÄ$×=ö³ ¶H9i«KÚL›Ð@œ;ñ~šà1@»,§x®(̬È22h:2~§7‰÷ä+4@0õ´Í2C0>í¹=LjÁ“·ãUe M°Sýöèí*«wÑÔ–VhÈIëQÒ´|<ƨSy¤# ã ñfÌCÀÜÿÃ~µ$9nÃÐ}Ná !@€Ö9Â!ˤ²™ûWjwOä”aR%ÊE&Yµí–ägðá}ÊÀ¬²¦…z†$*y•¼“¼uVË )°2%Y‡¬9IĈážÜ‡6–`‚"ñÆÍÇÉ…>U­$ãb4@ÆíŸ~®ž•)ß?– +Ùèãóoþ¬_~ýæýîϺ}ÿíÏÄ©\”üÑ®óæ·ì‡!_d³´ýNåï7†÷Ylï<’!Ý>o@PÀéóïö+%å¯Oýrý¼üþúóA_o¶¯¸ß°Åýµˆëí÷‡v[ý'o9À¶Ÿ[À£ÙÁ“ü¸£q’²;Iy8IéÙ3O¯[Þ~†xÔnï~Gg`¹Ïê9÷œrÂ9B<á¶$o¸ KsÆe¸<".oó§¬PªÕ‹ç{tºZ,o"6 Wú“aÛ³š³RÜIÝš"}¸M–¶]Í4Ë»ÈpÎöÝ‚(µ…lšêÅJÀz­UŒ^ÁJÙ\ŀͯË„‡qó'gBH3-Ä`cHN‹÷1┹eª5dÄ„ó-^e¸t¦‘6]ŠÂë!ÎPr”z®é=Bw 6²•ön½‡HQT»dÄ}fŽ¸`•0®Í§m’ü¿oðY¼´$^)!dŠÐ|ˆ·Z +ñ¬ ˜¹½w²G,ˆå˜´õ ~áZA¯Š‘¤XnÄÞ•*—¶CwÏør‡^Ï>r†œ$ˆm÷³9‚xwþ!Ëqy@\zxlëÕr|t¡ÝU *¡ÝýàpÙ£-hË­ÁáÑ–¨´SæD:Á$]mwƒÁ¦€šËB‘>Tm™ùV¨EƒùΨh’ +áB>'ù#K´Ñ­jm bz@L]ª†@ŒÏͨj[QJ™#ŸûÂK{¼ôˆ—vx/׈ +–9RµÉÐrõ‚dü˜Ód‡XKb#P$ijD7Ÿç=Ì_ ù«à8£pSƒÿkíH¸³M”,¨„1lëƱBA)…¬˜/«q­€IÛé}šºõ Î+6©Ô–Šaq¸'ú„ÎTbãÀÃn [ÏÒ½. KB(·ŽH‰gË>KÑ—!y”X£{ +*(KØ2æKilš#uÒú¨kƒp¹ZF)oB`µhÑŽêîåªk`ئñ É©T^EvW26±HÈîgr„ »sçÛÕã™!'?ÑâÎùö –by@,]ˆ“—‹zyt,Y0ãñWvhËÚÒƒÖõ×^ª½2[Ȇù¢ÃZlð€µh0ßqú@‡ÇŒ0À*‹8ÆZhYˆ1 ê?Ðvo[;íôm[˜v¼Z$ Ýâèt³=•{QÀ[º0i—¿H9¨¹­¹Ý™÷ê)I bq÷–]ž{—Û4®Jõ¶ s+Ztf¼^½° D¼’TdÌÜ6ä²G\—Û¡Åë±ç2éÕ4>:àp¼8«¼+ýž'CØ-ŽR÷)ÖMÈA’Ô¸®‘ß[\èu¸ YËZ¶F×Þ“-h?Û®„öÂÛª–Pxg47‚únÄÒÐ3â¾¢F@Ñ(°O¹p„0X¸a4ÞáíJ!ZÑjï\º³ÒÀPÄ»¥ëfD;;ôLøEv@Ê„—¼Ã3Ö¦Íõ [ÌŠÅâšqÅÖËÀ’œâ1b$#6ãÈ•V2ŽŠ)æ<#bI +˜°=ãSc¿s= # ?Þ:QóbnØÎP‘BÏ Ãì½zº¬4àQëv8F„#þðÕ€%äí¢‰{»Ü$"#cC$z'Üß®Èó‚ œÛ™r*wsœzáh‡îšAòÐÞl~ÑÓ2ÎæÉ +T¥½lÝé¡){ñ*S.Ga„T=]‹x‡÷\@s +'‹n2´[à!«—³a »yœÄÌíùžŠë ×3á çŒ`ŠC嘭µ‚P`Ç;îÜ£Â]¦ü"gÈ)’ˆ)[cŠ|ã /íñÒ#^º5|y¤T‰Mc¾ÖÉš@©F½sB›c%P ƒÄ„€Í¯Ì¥ö ½ƒKHã!KG‡ç‡a\i! +KÞ(œ/G<0M‡ÚJˆ}Æ©ÔUŒc¹´&¨ ,µiu²G,ˆåÖ°:ô‚p´Ðiˆxµ ÏU¡¼ºÑ @þ_Y'þHF /ïÜ»>Ç{Wý¿æŸùf¼^¯ò§Ë3æA-ŽÓÚjùrÁ4Á¦ÜJ½xlVyÀ*·6ÈÖHƒG ˜Ý%'`䈻ÍUr…D¥Å€^Õm íšjÄ50Ô¶Þv;Äåz‹…K˜Æëí™ù +%°dQf¸ne‡µ<`-·÷­ž!5ÐÚû™™íîÜCMèCÏ!S¾<õtDà$y®ÉªàB¶’û:P’ªëdÞµ¤$ç¯Z‹¿'¼m¤[lŠ–%tâù›hŽy§Á +q½³ðlv!#Fo›»F†yÜQ>„l(À\[³ ó®·i¬©Ôvö=‰x¤HâñdÙÁ‘B®v¹’Ë¿‚Û5íøÛ)e=€û("û“Òåñw$…ªF3ž±C¡ˆÆ?–Nöxå¯Üº%øLÙäêò õr 9ÛIߘ|ÏŒw#aYªY$°d‘< ÷‹“êë~Q-_îdz:(&Q:»„g CÁ#Om"îžñ¥‚f(ÚÛ„çí­JÌáù¯gÈ›Ía·nBÄËñxksµh; +wÎ8ŠÂ{¥èsX+2qÈã g\²S£ÉãÞhù”Ç»Éw"¾Ÿî¿C+ +ïZ¯?#­ŽüI* -œj{ÆÝˆÛ ××â…“”A„ƒ¸6L†â ãpRpŒQA:Êà¦aœ ï Áň£\¸œ â¿åbyë Â~Ñ:‚– 4§»W©ºCŒ +©úË?~ú¹Òýca ÄÏ¿ù³~ùõ›?ö»?ëöý·?ÿ±ÇE?´RA¹Ö‡aÈ×0,©#äTþ~ãñàcÛ;ç+ÒíóEÝþñwû•þ%_Ÿúmøyùýõ烾Þl_q¿a?Šûk‘ Îï{ô¸™è¾ú‘b¤óÝ1åù®èaêix¹–çx'²ü­,flv"UàÊÁd§,PðÃ?ŸžOƒ¶Þ¥•ð5wi—áÒ›¸‹âBfëPAÐEA$Z¶ATØÁ¥\z€KÍéú`²æ·=Õ\,»Ü~ÄêEüaË©‰£éª×s×[l"|wϹZ–H†iî¸"°Ô² ¹£‰`GÄHÞzìEÍM“˜fѶÒR­M…n){F…±-«xg1~ +ø~Û‘ ï …–`y,ôÂõ}ËvʆՀ¬‰µì±–G¬åzо`ƒwSát±O Ý7ƒš¼¥®À†­®UJÏËÄn×:#oÏ®¼̬t8:Û§`ÛZèÂF5Š¼b2*¸ ×jš‡1-é¹?ÌÆ$ù•”/V„¡éÑ5W,àíl ˜1¢Ã¸ö†@f +¤i¸»X!ƒœ›Â00ÛœKº’ýnÑ…º„UHÂÏãÂ0ÀGuì…Š¡DÂ0u‚‰-C]6ñ’–‚´0[´É ¹ vžÒ£Ã=›¯ôHv:TŒ&L‡'|ý¾­V|HSY)õ2(ÖEäדCeº8¢…ªƒƒMø>°çjeöokb¨öZÊ$ÞÙ¨`æÎÖ §ºšDûqÇs6`¿Ø/ƒäHvˆî}Š¾€a@`í#ü#xi‡7ÿþfI3úU&+šTÞÌh¤®Š&‘ù jÛ±¤ZÁŸ¿æ3œF9)uYCG¬GìXo6yݽþmºáMèÝ)x¹8¤Röq )º(~ª•³Z¹ª•×N•¹’”óìÁ$±º$% +±¬Û'8tSEÇuÇÔÚЫÁ@ÞD†uj ðxUCp÷€Û‚{ñB0Õl jb9(Ë‹EÓ½eó©¬N—ÉKKp÷tgÆ/[)ØdÈuz-çÚk¾+·1Ù·NµªÏœ&Û(±É žjÑ]ù5×îÌÝ‚ˆÀã¤Û+#CNàÑ¡6Þm`ËþN‚»µ¶`9 –‹`é,T/Kì°"EnUn@–"û)•ÎRé*•e™ ;å.V¸ñØj1VOJËـ½kås"ìÍ3rý©D<Æ·CϞݘ½Ö0I³†ß³ÄÝN‹Ä‡TÊä™»œA3E—Ä—:!ç².œbZmBQ¼SÁÂZ—-OœQ­–0ûl1âDÙˆfeƒä‘^XpÉŽ³àX1ÅêŽA.öN–³`¹ +–Ö€Ñí¦à'Gd@ËÑ® :$†N¸›kpù §H=‰Õ‹Xí‹P8ŠÝ»³]h5 +¥ç“=ñMg8ô ï»á  ¤Qš}¥C÷²µ‘·oÙBä­:Ùxrœä¾ÓÂ[y—Í ©F“]°Ø¶+ +Ò:á,ÛðÜ}ß\¸ÙjËØA*󶲷s¾Qöž³¡¯Ùât°œä],Ê„ 0…é°ÞAqL—1H‡Ï½#ø”¡`9 –‹`é|¤ƒŸíßd¦5ÎRnZbv zºµõêY¯^õêwêe¯pÆ!œ :,îpØõ +Òð +#ñ¡~&ù&$Y²á°ât4ã‚ßuc¾Ë:õMH%YÆŠ¾Á®ÝUûÿP¸¶7.¶w&;Rlòú¦ô|ÇNÄЉè=Äðnä*P¶üm‘ûŽw%¤ +d­öíÆ…ççåÀPHuÙ,\¶A¸04vÈ›nÈc=ü‚Ǭ:BÃèkÀûö .©D=±`ü²!x aE½ÎÕ/<9Ð.G&ŸóE0Ÿ‡¡¶U¿‘=O`t»9Ý'ÓÕ“`½ÖŽéÁ…› ¼L@H¦:–|‹Qz1 úâ„;Ývh㎜ËE°ôL7 hf{=ÝÞlx&ö®Ôpј<ÊÝAäp׿M©9kynƒ“o;׬Ƿ}1 6P3Ù"$gHÉ¿gÉzø1¾'ˆt²o‰eËÍtÑCÁMzÌ °†X3£Çú ñ÷9#¼>³Zµ¼[u‚RÐ BïñNœÞ©÷óˆ¬Ë&;%™£}çÍÓ¹1ŽíFå˜!{iÐÍ;Àp™nŸBhÈ ”%‡aþ= îëŠP0 +¤œ©•|ÌWÁüh$ÄÐ…3¤´O¹m7aIÐr4áA×åÐ #Íe |r(L‘Æ‹íšm¸ltÅI«žµêU«¶´ž¤s´Ÿ-õ{àCM3ŸíÜÁ¸c9᫶êw&ŸLæ›kêÊd+ nVŠP}†úØ,ìµL  '£Î0;HÅt>Ý%£L¼¤çE¼b:HR`¡Ù 7î¶8Ê‚Ñ¢…³Û¶¦à¾ ÇÇA æû¸‰éO¤^I§Ç½1éePÌM4[#%°käܯÙvsäô‹¢N—Òän ¾‚n©ß•;=D<赟bé,–®b©%v$¡ä»ÕD}SÆÉ9Ð’3¤äÁÑ6»7×,Zõ¥ÜÈΊ˜¬ˆ‚Á.ˆd’%&ôQ=1²…±œ&#Ù û²sýUx22Œ † +¼‰ƒ}; îE²Žîü–ëgòäƒmh¹Õ“"ãór[R° + M³¡‚kB$Lå—!gÙâ:@%BÅ@²’ˆãó6ž’oÒƒ! ¥}ÒL°¶1GwEºíÞég濉BÞYpÂTk+–Y¸J¿j³ý;òRP+Átô¯äú´„¾}»}ÃÂÕ .A/¹pÈ@Ø>9;W.*³‡õ$X/‚õÑáaFPýt„ר8 F?ûÏßþ^¤>¿- +E?¿ÿG}Õ?þùG}ëŸõU?ÿõß_úÓHVUp×ë,êO?gáÇð9Ù××õAÔ¿¸²îO#X5Búñ÷ñJŸ߭ÚíÇÇ?¿þñžŸÿà?å—ÿ·Ï¯ëx¸<þýKlª}4”šKôßعÙó»_ˆA³•çŠ×»lëZ“r vx/õ­È+®2L8y¶#c³8O²bÉTß”Bÿ~yBΊåªXjB·›Š?ž6®Âk¶=6n·|ØÎ µ,±|\S7n ¼bmE/Qª Ïà7ͽ2<ÿ]zÃü(ìå/[+ivš ô/›ogÄ{ÇÌ(Gx9>1›!Fµ"”„Ù ;Åø{× +¡’E,¹Z2¸rþÖ=ëK†W"%ÙŹTŸ­Çæ>äÀŽõT¥p¾_Š;oÍ Ç†v1AÆðz4ã¡×Eͳœ$ꊻ~ê¿©ö3FŸÏW¡H5ÌÇ&À¬³ÕŽt3¤œC–\oã„3(Yx]¬§x«R–T€”w‚_O n³Ï¡¡Š0Ñô“hœb!œíŠa1¼ÓÂÕÑ&Î{LöHÕ8|Ǩ½Ds_„ƒX™}¿,¸dJ\É_3î.¸Ù3–äU¨EyöS/õÒU/=^"åXdG¨>!mE€@H ƒùÎñ°œËE±t(RP‰:ù¤¸sÆ=Šû.Þ:Ž +nIÁX ¨…Ší¶)ì©âsuèI±^ëIqÜt6nŽ¸3'æ'1{9>(^­›Ù +°êl’ÙtÁ‘Âù®—Äv3eHÞwõ6#¢o¾¯ÈÝÌ¿5Ôúš.T\Ê¥é9+–«byÜrDÏŒ_±;µ=¼Ìy´Ïå)™¡d2ø®ÖÉÛvp;GN¸ÙÇÓ)¸8dÓÙ¾ÙTÀ +¶û­[ñüKc7†`Ïà9Eù;dãFªÝíö$¨§Æ.ù‹%yóÄèƇ§'ÆIl× ŠMœ"3,¿‡óìh¸«7\´^° «Ì–ج=[=ëÕ«^mÍv$DJ@γc!ÝÞµvðÀiƒú:Š·:Ý$ïVm: Q€g§¶èL‰ -.Šõ¤X/ŠµCñne¼ScœŒw»S4e,Z¢Ù.WÆ,§èj»ëƒ† ä¤U.Z¥í‚ZÂÂ%ÀÝ“g»#· =•öj$8a[ñ–¼Š´Ö–-â[6E›8#3h6ÚG±$²aAˆ+BNÄr!–q¬‰ +dÖVðÀÞÛ3ãozoòWV U±Và²[Èm¨åÂüAE¼WÔ¨låj¥@F N¡“«už=±Üçj¿†s…b¬³³ù¬â¾ê;[ZRD|—·IÛ§áøÛNÃÕ¿[KÐÖ²_!w»„5gÜåkßÌ8Ô¨¾¯¨áC~tDé|Sm~OŒÇ_‘CWÓ%N:év5 ³®EŠ>ßw›B’éåý Ü·pñ¹‘ÀR²Mª°ŸT¢ãhÅâCVÀ°ÊFŠ( L„ÆIÝ3nŸ Ž‹”ù¡1P•@Klxµâ£YK» +/4_õ§õc¡üæq„‘~Oѹq=ÑWzbWc0ÎA^QœÄIçt5.%‡ÅrPUºuÊ ä Û¨‚ 3…3^˜i§¾FµB­8;™Ñ2~•÷@¿+ú0ã¡ß¹ÚœØ#Ì@´jÓѺÕð’x”r‚šr«Cô¶àÙ³­þÝ)!W»9Û¯'Ä}wFÜ*3_·¦7tç[;‘{füÍQ3ÔŒaëYïúäT‘‚ësUbÁ¸§-Hœõø‘Áu4góäD,béØfò¥ãtÌW 1é‰8›»‡Ó<þý·¿k\ÊóëL`üõåßý½þñÛïþ¶ø{=þøç.à à9?[®³àTž³¨éP7ù¿??ñ6û5Šã3wÚd°|(ûùÿñK²èÇWýåõÇËŸÿx£??¡¯÷æÿÚócŸÿæÿ:/Š˜Ùa¬h]Q’ÿåkµ_/x `¡"³g9t'ñ3¢ÍóÖêx½Íã„Þ€$ôãõˆ!«¡»ÑñU}d¨Š¯3Áûök⻼³5옢´Àzu9±Ê…Uz¢øÉX0šì‚êåL@ŒA¿\Ñ…I«7â`Ý–,Ä䖆ܶ´îÏEò +›ðz¢àâ³pÃ%z·® Û7Þv»ãä‚ÝÕîN8l=î„»\ æ~¦dÆ8C˜rûÙÃF‚L]5صŽjÔÙ7´—ô݆˜Ô\óä+cè]džrVÂÿ$æ31_‰¹Eó•˜[ĹÚMâ¯'U(`°sKºDÚ©öPM® =-ßVp»öôÌ÷›Ú³Õ¡AÆ€†ºQ‰P²:™øªˆ>‡ˆáú¬©­áuf\]¹ÚíÔxI;°º#zuçPë¥Üql$NöÉcîM ›—aËix»\.¾s%O?çð6q¸wÉ5!¡K,¸w$ +šR;;ºÛåô½Û®Sõ| ¼í´yx&Æ+1>nmžœˆåB,ŽÍKÞ1EÚÄ›7ß+7&Ëu''Hªá%ºž»H´cÆÃz<ŸxùÂËñ†Š00µvA/®Â¥›1^<áâ;Æëò5ÎÇ»aas SmGÝ2æìá̸‘©qö¥#mv½¼MÚ7»Í*<–}vÎKˆq à9Õ§+澉 ó££NŸñØ"žIw]möΡ¸ ç0—taD âP+g@’nÝ›ÎVýàФûx1ï?%ªXò ÍîÅêø&ïüúîóÕéYwâ}«¿{jhàjKª!‘ç\i¥Æ2jØo¾îÁ¢áµñS¿r&–+±<ú=ý +~ÎêõŒýÚPjßG|&æ+1?9—«ÝTÅ×A»tUXjß Ë̘K,D{¸—ô„l)¢›öµ"ÎóíSD¨aU¿7àÏ ÎÕ«š¶«Ú2ƶŸSE¯þ3·X:2³éÅgd8›kXkû@zË&ÆHæ ‘OÜ>è^ÒâmÚ؆½Jžâ¾ã(&f'Γ) ¥ÀÕÖÜ:¯Fº1#ƒ¶+ñ>ì©A*xFDí*Ñik=ÁÜ·t¡„ÕƒÃl¶ F.—Ÿ$qÔ­glœ’kdÅ7ËÚì`>ækbQU»;ÝÙ†–3s¤†åfë´Ê³#îÄÛu…´âö›‚x[ÒͪWÍ<·_£GßFQ¬­¼Œ~wSÄÈDq ¾}hÌ?ŒþË~$¹qóPxŸSô‚@‚ëÁGÈ2©l|ÿª-͌ٱ ²Kl™?Û3–zÞ@ï} pºŽ‡ƒaZ"GqåŠN{®¨s-UŠÓAqÚÚlP Z‚Ãi3RC rZyÊÍC#KÎm~ѵâ>Wøé¶Þ¹AYÜt¾tã¬ÀZ\Åc6odº­ÅlÂ9ß®#¶EX©Ål`oJ¶¿~ù5#°Ü¿-¢zûö7{Öo¿³Ç~·gmßÿøûóvÛ +ß?ºh?¢žƒºÏ¡àþëqÐ_¼aÿÊ~,Æíã Šû¾ÿ½ÿŠðó»Pì÷—ßÿýñ Ï/øö§üÃi÷‡=y¶?ëOQí·ä ·ƒ¡ìc˜?ñí“L7ÖºTñiç=¹s‹±¬OñWI­XŽŠek’‹žÞmu;Jâ­UŸÏ¸;?Û3îkU—\Ô^™•×ñ1—™6]1MG E(œÉQ|v¦ý~‰g† +±:¥:ˆuv°.¬HE¼±Nh.T²W#ŒNO×_ëw$mÆ<øJÄQóí<®wÃJËf×W Ü^¶îž¸@óÕ»å:°}Gäñê ÙË–šØ94âY½Íùö©õ[#C@m#û4Ž!‰ëáíäáyñ|-Í DzfcJµ'íz#Cô1¥«8+„½m›03 i»ãR­8§–âjòÜsÿtoœý/ÇvFÌ£˜Ð^™ãûȲËÿŽÆ07ò8x\FÔŠû¨ÇŸ¯@A¼¼ãFæp„Ìårr˜jkÝr™Œ!ÊJw%(!¸ä~:%^Ÿc[Ndôfü©Wj½rÔ+ÛóT•¿…!Ñ°èéDÓf¢õQ¯XA¤x‰6UJ,5cÓ»½^xèÝjêŠïŸì㎳«3ùÛ6ãUQ=âÙ^¿ŠŽ|Ö7_Ÿ(Ú9-Ò»Zfï⬈§sº=WQŸü›ïÕGÑ ñ.;”!ÏU õ®ÛåeÌ… D¯â¦+Œåæ+¤ y•>¶ñÆÒ‘¾©Ö›ŽzÓÖX¸c_ô„ß\‚ñºx6Ù|WS»Kb†“¾“Õ_#3.Áâ}eüÊ-$D@=µ³¹Á8“ç†q—Å8òÝ‹X1_Yăœ°V.¬3W‰ +¥$lz¶;.ŸmfK0önË=(róbën‰Ç[í‰T)NÅik·„›qy_îö©}†»¬> 9¢ÐÛÙÓÂ~îîóUå7¶pñún°ìø÷Bµ×RðÌk¸L*ÅrP,Û¿mãX#d.²NïŠIVlŽhZ¦˜%f¨¢ ›ñ¸ch?ßô­ÁÖÄOŠƒìÝ9] ?ƒŠƒK±¥Ã«1J­™.Ëqþåbÿ+¥U½z³í*8·Þ +¤¨í4“Z«µÊÖH³ª¦»BÝÙ +äB®â ¡2 +¦E–mëR‚‚{]ÌWÄ\DŠ»ÃYòElÀd,ßXi]zÝ’PH¹¸È0È ƒÔî¸P2zjφî•s].n¹d ì^ñ´àwÄ&Æf ‰xö_Ž½’  ìÚ÷îú3n¨6ËoìºnÈ +°/âù@ÿª=iTkÆŠ{fÜE:¾‡Ú“š}1ËÆ;ÚZùðCŽí‹¥ÒŒJô½«§½«Ç“ó½÷ÔãDcHìòÙvkªí›¯« º×ÚµGïö¨}â]M@A±™½½$ÙAg/*6ž¤ÒtÃ+÷å@7pÎ0èBM +©M;/ñúØ|ÈÀÈmã³Xé½ñ‡^7X¿y´ó_[¼êS,Ñe‡p:!.¿†$FˆYøñ"±— î‰1çÁ™LhpEDª§£âô¾ˆ`@b§4F©=–rÞgA€œÖ¡ ö¿ÛŠ§± CNÞŒ¯Iâ>’ðmŒöÊÜ&‰a½ÜnD¨½Â5Ä|™&!¦àÔÆ°ñ¬f.ŠÙS<}™ABAÊ« %Z4„«ÕŒ. )$yæ 3V…¨ÞYTAZg>\ivd€jEÌáaK³CÛ§É_V±ŒÈWŸ#g´Ë`ÚÞÑ9?¯ðpWJ¸óµc¹x†z8BæÒ¾‹¦Q¼ƒ»¿uóå„ kˆùÄrJv•«n¨…3XL\?—l¸¦î%WN*öP¢ŽµT)NÅikÃ0Bbr#<íãvqôÀ_ë!±` e\#ŒäåÄ6à”;̶oãüÙš957#¼s‰Iœéÿö)öOºb(‘*æ½9BÉí“îÅ®÷e„Ù;’ÎN¸™Á¯ÁûZ‰Æj"ShoÜDÇÑj'DI=ÿ^àˆ.½®# +b›z¦!KAŠÔ>@_â´±­±\Ïi;fVc%@n—ÇD8!‚{ÒMˆûˆ…ƒsÖMYÐÁ°ââº;º¢'*ž„30Ñîã$FC?[J25Û_¿üšàM†}_ö»*ݾÿÍöÛïßì¹ßíaÛ÷?þ®Ÿ’©Ð{•2#¦!ŸÓ(aÿEØ–ÿë‹‚÷aì_Ù[1no@PÜóöþ÷þkJ ÏïÚËõãå÷<èó ¾ý¹¿¡žÅýß6kÎÛŸ÷Ù÷ö! Ú)åçë §'ž?>Ë|ø,³ã>:¸/6>KÌ%{Š¿6œjÅtT|p_| 8žÔû¬¤4åøXíO‘ßT[MÒQûó¦ÐaSž©È…7üjõ‘ÚPëý¹ >õʽ>2Y¥Þ ë‘Îz¡©¶Ë ¾ZKÎŒY›nˆµÞxÔ·–~ìàCdùTœ*ÅnÖs%nÆC÷²=Š‡QË&d©ìŒwˆÎ×5‚BÏ?aJ¬1åKëLyf„>ëºF ¶/v±(z¢ì +j´hP·(yw䌗s‚".=| NµàtœZ‚‡ÒCPèäÚx¾ *HÁ¶)^ãÿkSP4vMqÖWWXR¸†˜/×vÅHê@ð”GF,€œe¬4î±¥óæ;™Z.1†ö7OAM+EpÀ¸ÐˆC´ÎÀvD ;4b¥7ôÆzÝxˆ€Ú0Ü=ßËa¸»ã‚ëˆÉæKöºéÇFÞ'óÍJGñý}gWÚÜë:@Ÿ„Új3ÞOУçáO½±Özãö6L[ÛÕj.”‹1tÆ‘A9y(1›#"BþûÕ’\É÷s +]`0ÀÚGðf9³ñý#%ÙrU„ðÈr‘ +ÒÝ›nIO¯”J%òƒ5PÄÉ#:ñöxD9!.Ä¥1×rüȦ†#¨q¼dó!7Û%™T9â÷.ÖÒ®„ Oö÷–°£ÍPBOG{¥„ +¢àaâ®pÃx+@\Ú£œÑ–+ÚrÞ§›(V™mf£øõA$bÑæ\-Ú6«fþÕ"Ëv” +Ün1‘Ìà3Þ>‹}AŸBMÄݾ0{V°*°r‹ðV•—µ€¡Íæv¤7$WýL‰9j¨,Úa 炸«B¾Pƒ%É{ð+œ@«†Sb½ñÃf D-~Ή¿0'X +j” z/[œ8Dš)Y‡5t£N¯!ï’!âöÛÈq`x=Ëi6âaŠÈP3…Mo¢}Gƒß¾²ó[!©Lì’#³Ø®$‰Ð.&V*ü­]çé± aÀï°­yW¡²Êô®>Žß½ºÎ†ñ¶aWH˜gkxX¼àšÚ[³»ýÎ/<…4ìë3÷yDŒ¸ºoRP!Vó6¢½Q …wº¸nøêâ® ®ñ‹— H­•vÉl™öh•¬ +ɨ=:åŒW®x¥Éï]¼áÅ)Xí#5\õÛ“/ôKj4»Ê86‚lù[[ûSýúµ1OVĬì<½§ ElPDrsËu6‰`Ë]—ârA\z[-5Hë³+å"WcwµÕ´ ¦ö$4$˜`È‹Yð^õABV™n cë™j#ø=a•V¹`•·–¸fŸo”õa–p1±.¼±‰U†jØîšAQ¨¶½áQý9ˆØüå×úí ¶ùÕa«yáh½ì|c®=+ërâv‘,g´åŠ¶¼µŠä n%°R[¾»ŠnýÊ„p¶÷Žâ–”K¤„¹ÝÈÁª¹'ØFãG’Ï5ä²Q'#o:•E éíkÓéˆ*Fn¶âÀ”ä¯bn]Ÿñò/¿u÷ÞGn† ESËÍ~. ¿ªÝT@KšÝrF"F<¾›M§W½_7‘ì&› øds€?¬ôëêË^ϦW߶F +p‰"n~¿£ø$‹5¼ž"$P-‘†GDÜP´5IÄ;a•V¹`•?±†eG¡J8ÝV´ß$^!j0ßæ ØÍ ”(o F ¢Í‹¬x‡·X¶IlÕ³Ó꼶ž1ôìÚ$)0Ièhƒq—áÝLjž>1F¶ò'•ÙqÂK'¼tÁKM~… +$Â0->Ñ–3ÚrE[ZhOªîä÷ãr¾Ö¯ÿÌ­îû¤éŒÒ®1Ôl3s-ÝÆÍdþj™ž³Í{çyÃ~Gö²ýø­4²†Õä붛s ì£ý3,[¬ÛdðfhwRm6¨I"Sö„õÑô!k›íƒZ¨ú«Ä»Œˆ +\·©ŒÙŸƒ°t[µi>¿D¡vÓmõÎG¬Åg¥Eú]qöd†BÔr²E.Nƒ%iUóEÐlÒ>¸î6ß~ <ÚfwÝAѶ½Þ26Ëî"ꕤÀ´K}*  #´Ãû㳉¶_KFÀD‘v‡%Û@Ž)yó­!âõÚƒ$‹úäbþÀFP•i´’Õ£-GhWTÃÏ-4m ±PáÙhGº™{ oë÷+Ä׶ӃøEÛÙ«?¤ +…©å½Oúà í¹&\ÚJXâÒöê¼l 5[k_k‘}hã” qÝÉH€²Fü®æ è3¥(—\˜ªþýA|ÂïÏ–÷_éO>>vžý"þs9sVä=ÿI…¢+éþ3Î/* (œç";i3·=±ÞF¬!Çõ +ˆßÖª®Çì²|”•—h{ÙèòRyŸ´_+áÓ4š´»Ù +Tqe·(îŽý6Å=5å…=P‚„¹6¯Q«!“EǶ`î³E>¶bÅN.ßäѾ…„|ÔŠDY¼ZNÔc¤°9Œšˆ#“­‚ +òâCò÷V5÷ÚP¿TÝ~[Åa(–ŒPP£C»+…/i½5[&P˜Ú®»†-d†Š9ª9wMw2·Èj!Úa¶pFÜwd1¿Ræ–v±]!¬±‰émÓ&¿å„¸\—~½1@­Qëg»ã ÕÖÅ=RÄX´VË7º™œðʯ¼5Ý ÛœÃJ6fTÝÝx5DìßÉl %kC*´†|;çõ­VÛ^þÀf€‘ýŽ:¸<â”wšB’°Ì.iwá†` ²…uý.Ö‰ÆÀêUK[Ý·6[lPµ]Î:ͬ'Ü"VjmŠ{÷ÐÔ¤8ºoV™k+ëjg/Ò‚ÁeÌí7o”È% ¸OÄ匸\—â“°»¥ýTa V#ŽGXðmŸE¼R„aØÏñ{UD†_)b7Ì ï¸}"+X©í7ã¾Zùª¥)Ç>ñywÝY7½º'‚’¤íÅkì8d ÜÃӎ̨5šq'õv¢¯Õ;rw*Ô¬í¦¶L.  sã¦?´ñ”ßí2ƒ 4×0—oßÜt?óZ \:4ü0årLžrºÚ Ì@ÓÛW§afÐ’vZd>Ac¯‡˜•|ÕÙôÅ1ðòÔ€%ÖñzK2w t¼d¿¤ ólUœð>jk¹ξºAhY d)Úq}í¬9á• ^鹸Z}mÔé‹n G˜›Z´6îâmúÃÓ¿]NjáiXokX›÷i8ö`NjxLûÚ×’¿ª!¾™óÑ¢7xÜ(•÷ëlµR{×=LŽKT1–¶³É±\K›ã:ÎìˆsÔ%îºÄää8šOÊ»x›¿J%HÕzÚ±åŠF··‚”òôŽ6Ò+`¦ÉÞ0´õ @¯*ßØÓz#Þíâ2`2žËï0´ŒPj‰Ôp—ÙÉ×&YAt§~&ÙÕI÷Tv:£8*;xp\È뙆6®ž RNA¡\ÓÐÔk;4"~l ɤn4<©¸Uh«?*>ã&†$Œ9Òð´w™ •` V[H‡ÆÃiAþ$­A`Ìñߧó‚@¸FºýÓº/­í =‰ñªAîè;3y 5dÊ8ñÈ‘ ÕŽ•±H6 ëð:ü&ö£ k姫u¸¯| }sÝÍc )f ¢³'Ñ@ŠYÕ‡†µD7â¹)—!SÇÁ­Ó)«€wžöÑukxz§TG¬Q癳4ä„X.ˆå­#›]Ö¾ºu86ÿ)íÏÕ‚c¿]$˜AÿO~$IrÛPtïSÔ  @€kAGðÒotÿ£ºFSQ(2#™äh1ÒtWUöoÌÇÿ”i§&0-¿/ˆkl +˜²x­sÅ‚[Eq +h=KÊ …ƒ`{Ó¹ò°®â±ò£?)§þâ­ƒîŒÙÖ‹ +Ar[Š×K­^:ê¥Fo×cjã;ÉÙ$¼Cé´#ÞŸëÎï¤êwGg¾Üêå£^þ<ߣڑŒø –T¢P;ÂïÌpÖ +?M_ÔŒ!Už6Âû[nj0T \#†8dwCòñjTnkÎ×€K éô„oWÌÕwNKDî3ÑhB‡¥V +ß gÚ+7Ü6¡»×XÙÄr@¯¤>Ç»õÚÂñn ”ÁŒú‘°Lˆq­€úióÞŸº™@5jµ{LqQ1ù“Lƒ¥kšâ;3‘9\:)&ªMüþ ÈáëÈ=é{«øt·…¬Ã•¥=Ü8bpÂ#Ž(ârP\FfLLUofY5·_F¸â”8:‡Û8® lÈ7cÄaã¸QÌÅüèoœ$â(ƒW›¯$‰)mN)717(ø¥ï¹’zÃ]äÐäêu‘¢M›”dMb ·†‚ÌQßíײò^ÙàGQ’×:Š ¸”þ‰q­‰§¦B ølIň€¨Ÿ5Ž(­ârT\ß´q¬.2ç0ÑfmÜLGø«ÆÑ|kc6ÃÖñŠóÝŒØ2®;Y³‡Z +cx±RNÕ?«A)/ypæìï :£Ì­`> +æs‚Ç("N‰ +,!/È=\ XÂÈÂgõÞ¬ö)’“…L'ñ A|Æý^‡{¨<ÊV/ +Ùr1v÷ùVRíµÒ¨•ƒZéªõ>¤ð,šC³ ˸“}­@–pOSsƒŠGjnÈz¹øÂiäŠé¥1æˆx¾þi‰%çëNbaD,XÛmÝ~ç‘· GçÑã¼ßm6Ì”»†žï;C4«8<߆Zrv¿ûú<;àp¼R)Á-·$g„‚!º/Ö‚þ¤œBîùà ¥Õ[ŽzË9ûŽ@el_®ª©Ík¹vÆ¥Q\ŠËÈŒ)A¬û`û^g‘d‚\óhÆÆM›­x·uÓlxÛÞ—ñIJ ŸmîðhøÞ-6`å>N.S®Tðö0›‡ìOÞ©ÎìwÇÃÌ;B$íÚ:ŠkD5T¼ÞYÄFà¨vwÅM±AöAw7o0+F6o¬æb°Ü¥æXHo'ˆ‰ÌŽˆ1û$ +žuIò׌{µZ騕Ÿ05~ õî{sj˜ù§%šïŠ¥ìbÁŒ^¥\ظQŒ‰Ÿ’ÿûú?V{}_íëû¿úÃþõ˯þÜßüaßþý¿¿@•Z~NCýT´|˜†¤üšFMþ,`ÿï_T| ãùã× ž@7Äó'¿þÿü5ŵßõ·×oýýǃ~ÿ‚¿ž-™Åëï>#ÖÇÿ–ÅåT_l˜sYß}~ßÖ§Ð@ñzå/ÄLÁ3z)ŽÎøXLRþ²óçñ®s#Ô +U“¾W|©\ULPª…3ÆÓ3~·tÇËq„­âËñIƒœ#73,Õ‘—Fq9(.#3Vó\Ô¾âuJ +ýªaíGñ2®ÄPùër¼³<½—¨Û28Èö·n¡ªS(J#^¤rÎÃÖm±­ g\3pÉ‘‡Ï:¸ã†KG‚_‹NlÖí9iµÊQ«<¾µç¶Ÿ,þiåZ£ú“^§ã'ÿ.r:JV`Ãp¾wäÃXÇÅ\@4¬¶fû}(ҧˉqÍÃBþª $ÛD‚ሊ“Ï8ÕPñb± [fÛhëý)ÚºÓM×Mµ1µ!K@A½›,Ïê ý+5Àˆ%í»û©a5èå%÷ÈÙRƒL»§3®²¿Š›äCFP¦~>”Vo9ê-ïÊCz{šMu/B"ŠÜ»˜Ø L1òîŠw"XÖ €g)nŠdPñ«¬~FÛêò|V2ÕÀÂÍxëbd¼×NŒýOI hiN^©×Ç«¸×ñÌ3m«†S¨ÈagÌ¿0¨ÑK½ôè„dqëòN'†U Éý†[†ÙrÞëÆ`ࢶIF(VîÏWZ½rÔ+½ùÎd¡ +©„¼ ‡…2dJy#ÅNÂI)T¼Vs© ÃT[1#Ð)8Ëåæ»Wô÷D ¼Øt% (ÒÍWçT÷æ ¤aŸM³·jg"»ª„ ·à|ÑS ¸òÿJ£WzåÑOƒ$pM< ªý +Þ)Y+Ëw÷ÅÔ†+ ^‘yüöìßr]Ünݘ‹Ã½³ Îi´'ØüÖ`¹;צzÂß™¢l;Ý·7CeÝ…Ú«sÔ(!fÌvVÃy_(ÑN›¶]_pÍ`\z›&­^9ê•Ç°†´†ô+þY è¡i +jµÒQ+=¾‘w$û«‘Ë°çéVŸ"÷¡õ줓ûv¸\näòA.?ú¡»ÍšB¢î‘¹ˆm…’m"–´Ô}ÚAH€2ß}±5z¯‘¹ÈÈ +6« +Ž˜wý´Š‡ˆ,vÄS¨†·â}™="rí3Yi—£âòèx¸™ü ‹_ÿºQYpÉQNœðeÁÕ/ŸšB¿Ç¿W™ŒÃvûÓ¾£M|»}¹TÐEÄš¥á`f˜KF„Bª5€ßÆƃŠGl±Ë­3ßäOÊ1ö¬·u’20†K·ÞuÄÆ@Zú¦X'&œ,Íbb¹˜84T»ÛÂÇ¥±ð§¥sÎ9"÷=,˜ýÝ[cTow¾#j?Íw§ËèÉî’4ܶõàÕ%ª¹%q"´œ§·õDiô–ƒÞòð + $Ä%O`µÓ;gáΤTwé W›+Ýî“Ôr%(5̳?Õ÷Åí ·W_äŠ%ðn“ƒzGòl ‚cBû?÷U“ä¸ÍC÷9…/$Xçs„,“Êfî_õAv&#¥ S.S]Ä·˜ž¶%±Ÿá‡÷c`µ^ž)'ÆöR{ŠÜb—K¶¼ãÿËV÷Pëj½ âÎÄ(ٚסÊ×IÃÔp†~R»º\L]´J€:ï"Ù—´B'¾zÏff_(*ÃŒù¾K…ºhÜó´Ì-ç´"Ჭׄ¸)Têôî’ÃIñ=“Î5‹¸ y–ÄéÃ$VLmUAºy|Z#F[wŠ/¼X•Òô DÉ´Ckv¹O”ª‚™Òô‡ñaAÓàV ñ VȱËpƳ®y:kmÜ$´;9‰÷aUÏå—AJ¯_'hÉoAÆße@8¶¶õÌü*cRüýÌÚš…A}9#öûøêX6UwɃŽõânb;Ä¥ûÙå¯_~íVúã}nPTïïóÃ~ûý›ŸûÝ»}ÿãïÿºP»o1{š’~˜ÿøî ·”Iþóß®¬÷al¯ +P¹j{ÀÁ–í/?þß>&cûñ®?Vþ¹ýñû?ýxA÷³·ö³xüŽ[¸ýùŸœR¤mÌ#`­Ë/µó„î_åÀ3vúPΘpSˆ¡­_öÔR¿ˆS&¢&U—©úÞKë#î.OH]*£ ¯·ld k°l VÒ²•˜<Þœ¿3Ùk…ø$¾ 5œ¬S72ŠõÔÁ8àvç.¥Y6.°Jxw'Z1™?Ý[`Å?§{:³ŽÍâÌt_˜…·*×ÒáMo‹³C³€B…™®V 5€T y•Py¬¹éì×¼õ@r23n˜ZŠÕ"½žç á!ï€ÝIT¸^§8ûXe Z‚H³Útíò†63Ò4Ð ÂÅůI½Šéۜաp}– 8S•äbЛ6…·o‹í‹é&)9\ñj5˜8Õ"YbLÔÀÁ–lbÔ VVÇÓ]á+Œs•›˜Io©¨ÌA×ý ˜÷€ù˜ß|†/+Z +ÆF¸~UŸ—s3@BÎ’²V· _\$Þ”ˆØ‰ˆË…N<ÍÜ yÄ>É63Ð +–¡Š}VÍðm„‡L@iŸàâtH5á® Õ¢ª¶ ìzÖÑ ±—+R ³˜ð&qã=£áÔUÄ¡ìNãî)¸¡©U¨i¸ëq«þ0=.ȬÀÊí\\PÁwÒ"^…ìcÀ§'<|nÂ!`•¿ש&Q ¦È¹éÒ˜OV ©°Ì²16ЬÔ:§Ib`¹6‰MŽŽ–kÂXåâê35;0h±ì2v0ëQX$q­Ð%سG,zÏ#ô)àýleX€e8œ®nV#aXÏ#¶@FΉ<.ŒJ·a‚üL¦-›Ó¡HÔ-犹²ëÓŨ-¨ºŽWóÄsêÄÆ!r™ÄmcD’ì ï7Žv€é˜nc &ë€e\1ב`ó§{«#À§³Ùð™ ¿¬jA¯XÕ38U\o%SÕL×q¤ë"® +˜J%¬‰D^pˆ@µ\Ìá7W.t9õWK”,×[82ÊL÷6¡w¾ 5Ô^B2ð  S9ë4°þÜŠW+E {—±OÁ¾M‚8F*CdhKfœÂ`\.î»PC(´d±…t ]àZ¡YRîz€©+‹BžC‚ÓDRLU|°6øÙ*¶¥[MÕÒøC)Е@W‰4­S« Ü +¨àÕ•a÷LƒŒ#·=EeðH“èæÔz"ëUi–©¹\„¢ ÏÙÂɬÀÊíÄ‚!‚"ê—É×GKæòEZ2É—V O7²sTy[5Gðò¾f}t•xP:H´`+æï gîd×T²Oozû•€?ìµgQ…t-']áuGÛ\-ˆŽ 2†RôÂ9SΪùÕ‹Åa‡öT`™à÷ƒ]‘ Ùo8Ó°ÁjŠJÙ°·aCã=T>BåÛ€»YŸ„ûø>Ÿg2W\ä–#@V +Òî¬ÛÁ­;¸õ·ÞFTàb~fjhÛI4L ËÄ®”¦ü´šŠE¡æ¢ƒåjk\+`›…ìË°ÜÞ2‹3‚›)>_¸ëe>À^1IDÓ,)ƒÐ—.ÝgæÊ@õêŠùæÊ…œ)£ë=>\ΦR·‚Êï2€7ê"Q}5æ¿&ú<=Ó·©«O‡»‡+;¸r€+»á¾ª˜Ò(RÞõ̘Q `ãDVáUS¯VÞ™ûæ ®7 î]¸Cþž··ûtóô ²– 0c‡úutølë`Yb‚q©×MvôT|Œ€vE¼Ø‚gJš ú܆Wt52…âcþ¢%û,3l¬‚™$ Ó$È-.øp‡l™]#Uh8|:¦{ +nÈ„ c¿¸ZÎœ®Q¢0V°·ÀÐ&Qá(»g„áE™H—U +õ<êÐ;´ÂÃ@Æ{À|Ì_ x£D.sk +Ò-¢ÄÛOUb–þVNãÄÜt¦€º? Ö=Ôz„Zo¯¥wš©áÏ/Ž “À’y—èA2_i¨­‚½°œÍ4^ge©½\Zò|íÝâ q¹³€‚eJj@-ª¹?½êt@|¾X3ã‹€µ¦í¯E·Ãïÿo“ý{øçÝÝ퇃öâñÀ~ß}F^ìþ<Èe‡Ne“ŸêŸÝ?ðõús®ŒÄíÉïÁÊW#žXŸŠÏ¸J„¸:Ù¶ÇGˆO»è3ÄÅìMÄ÷'‚WGlWÏx’-‘ÖMé¿të>•{õ­;Áˆe8LF>cjâÕ¼_ŵùkuøCFx´2åTŒP¨M#F\ §ð†\}¾ùÜ þî~VbùÒÅ´—«³ öm1}íý‰oOM÷…6˜Õ:œ¯ì˱Œæ{tã3Úð·L,˜JÌ~¥6œRß07O;'2ð2ù,™özÚ9•×áoï eˆ˜÷ˆùˆ˜Gˆçj„_--ÉÆ‘±ó×’¤I®-Ô‡k<îó´®’%­çÓß-M +r†4麠’Fº€kÃXw×émÍÀQ_x‡÷“´NÊÎéyæ»)Y)Y”,WîÝ\Xò̶{ ê'2Ù:ÜU¿J-Ѷq%pÔc'^Cͬ¼H9×ä2Ùá•^9¥ +¦yô!UËD×ÁT-=íôDŠÆØ\8˜ñŠÇhžN°bn~µdIìܺ7¡’$ÿr1W´’H#ò4MÒÊ—¦s³ýÿèŒrNÉþG~µ$IŽÛнOQ0L€H®çs/íðfîa¨äé¦&)*DeíEªR™ýêõÃû¬£ÝT ¨—³Ïõ^s³X#Y"óÓˆgù/Ûk¤çi¡=Z=¢Õ3´GEŒàõ±y„¿1–ófÈÜ\~àn;¯Ol”(€©ë÷–"¦é×üw´¹.50Aû¨£Ýk=Ù£ž·éÑÊ­œ¡=:ÚÈŽs4|Óz–Üp„–q­}™ ÇMLQR# †+Y* ž¸5næ\â7Íò™«»éÙ yËsÅäÈbˆÑk?3®nZj =J¿¹—æ¾ÆÎHh=­zþûÚ!v]5(ŒUÃØ¥yj还?Ü*ïèw[~G[®?CKæ -ZAK +iAt+9AՈ̒‡x¡Î Y“ÛnVSÂ7ÈÖ­ÑêÚ¹›"Z +o-§Õ(-G’5È*çNÆ=Z>¢å3´GEŒðûN +ôaEÜk9ܶ' ººVA1Ñ0%:÷`éÑÊ­|’_Éy,‘—¹:IbO¦§ÏÄÁ-Ð8R-5Ðá[½ˆ÷ûÏò[ÅÖ¦òaIɲ.L2cMa6†õˆ:âë8m‹Ó»¸sc㘃8W´æž#ù"d‰rq\´‰_Ö¹ ô´e Ç…Äû¥^ñˆÎ \Ä7×'!`Ò‡5<Õ‡³½šºðBÍR·'Ï|x47Nù½¹5H,çÒÓüNr5I +ˆ‘v†¤büJ Ä\ˆ1PrH6U$|:9&ixã·µXüæ`kqs5uÑõˆA´#=B:¼rÀ+Š`ÍÖÞÛ㊘Ø.›!Î-È:ª¦_ïâ°ÕËŠ¨§ˆÇáçmïðøý©íë±^¹¸!†=5¶Œ“H[ƒìIyº¹ÏîêºÚšë4Dj6k–I­ÐzîÓø½ã›•HœZQÏÕfdÜU¬R&¨Ü\ÿý•{¬|ÄÊÖôíÌþPª5ž¨£ µí“>ªß›þP¬TJåÍцZÏŽÆ5Y"×H‰œÄ€J Œ‹µ<%ã›±$¿¹ZƧ=b¿\-ç4ÒÅqÉá<8oÚñì¿ýnŸû‡}Ø×ÿüÏ_\3QÛ=kÖöîl´í³€SýùEÃŒí+Æo¢¶7 TÜín?¦$üó»Ðì3öÇ÷¿ÿïƒþü‚¿—¿8ÐþwãÚ~¼€Beû\I j©ÍsÐÁ{qÐ{ëö»³´’_#ž²¼fyÑv¥yHÓe¬é%Ú·7W­5ز§ÓKijÀ<ÄÛú¢šé”cé˱œqÜyê âÝ·½@šËÃOÓpƒTK ¤aó‡Lê)b²? µA7•Ä¸Mø9%ÜZd¼Vr’¢SÂp³z\ Å’Bšsik®ƒfeä“Š¸ã Ö‹8ù¶"¿Ü¶g8¿Bd•OÝ4^ðâ¬?äÜ"õŠ5=î—]Ø__”A¤jœDÞF—Jœc´Që¶öýa¦²¡%ôÚäÕöû´?„ÙnÜZÇÉövÍêKn{¼ÚáÕ^Q$‘3%Üà¶ó¶A%ìþù:)2Ø/wW¬—Ül iqñ#)¨GLGÄôu©íÜMãLø4ÇÓ.κojN®­É¯B¥ì]Ü‚N äU‡‹?^H­6¸õw1´›R}¼äLå·€fïàæ!î ‚;Ä|@Ì_—íÕ\½ú°X‘ÜÁâ^Û‚Šàjõ¬4×Ð&M‹Iü +6@k<ŸSƒthå€VÐ"dÌÚÝ,–vƒE[‘êÒ;éЦ¶_Cœü¾~yi¾DÜ­¤AÄû{A¹œÜ­™.[Ù/³Þ¢•® M¯3—¥ÐÓëm¦«%¶BÉ5ÆÞ474ÈqzÆ…ï9D¬ý),&†ä¡.Ý›ÜfÖìi÷bZ<ß‚ãi×ø%õZðUåžæÄZ?'6´IÄióÑÞLµšÁ~…jg¹6/Ö~"½·ÿ’_¹‘Ü<Þç}0ERÔ:G˜#dùÙÌýŸåÎxTƒfK…’ ÙŒív»ðšóøÞGGq½q}þuÓ,Ú…‘ÔsÄOÅR+–³bi)>»¢'}ßx8$»‰‚Ã:ÏOzÍÓñ!1hˆÓï¢t†¬4Ú>¾¹y}ŒrÀ¸b* ÌËnº}ú¸ûÊxÇú¸šÇênž€Š¿y+ÎX!¡´XíFßÕZ¹ÒÊ'­üS«Ûu6[Lí^§ë´K|»Š‘=²\Ñ»Œ"r3ºQbzÍÙÇÓgi¶¨£Ùö +—û„™!ZÄ­f[ Ñ<à© kÅxVŒ&¢Ü6†€ÜÆànpŸ~Εã=4ÑåS´÷éÌm;•EŸÞÁdLÞ‰±âáIJPDg·Åzã $ÇÙÐ3jãÐúMýÖX“x +¡çˆ‹1]mb œ£ê¸N7xWûA*ÅrR,ŽŒÈ Ba/ƒú—kÅ|V̆Çn\fu8¢òp÷ÆMw…m]æäfÄ‚[¶;åB ¹=ãe\qðpì$Û’SÎþŒ$J Ö>* ±R-E²}ìÇß¿ýnÄ,Ÿ¯sÆ—¿Ù³þøó›=ö»=ëñý¯~VóÛs)áiÒs%ÍHöïç%>GqüË>ÆtüAGó>¿ÒTÿxÕÞ^þ}ûóûôãúx6ÿò÷üÞ&Mùñ¿S"à"ùiB´1¬]§ljQ÷PK9%ŽŽÚÓþ8qƒLW<.íIŠ²çˆ%gl˜˜'+®ôÞ¹Á(gSk¿Í|©‹pÅ}<Ì!©z¼š#¶j *9•ÔP»È v·RØS;…]û¼ë7ræèäoÅ®öصž±TŠå¤Xº£@‘ä%ÚÿŽsÄ!RÕ%ž¯X([ó½³q•V®´òI+7“Œ£¢ÒÌÝ[WÌPÚ)…vÉ^…¬¡•½½Óm8¡K«› X‚ÃdãR¬žm—sýÙj†T<#ü´.ׂù,˜ ëV£sÀÏQ½Ž•ÐV¼–a2,+íxXF1)¢WÆkºg™ ë•Þ;èkœéË`ò¦SÉèq,z9Ô´©øšq°ß:!¼$ê`† žâª6:÷ÔÆM\h áVòŠ3¦ ’ÂLœyÀíæà”!Ç}Ž!‚hªÚ‘‡Ð^^ Ì â>LIZ È6îÝKmÛµì6ÅŠ,ISù2:»›e…л‡V˲ˆrt³áòt秙¢±ºæü»áõ–ÁÐLšüÛéâþ½ÛqbP/ƒ—œ1erf¼$G…¬îqUï+µWµºJÑÞá-܈¨„r%”OB¹)”S²Ec'̪EëÔê-Z­W*½rÒ+=õf°ÃE¼ø]¬Þ‘ªèFïzKƱØáæzwEÅI¬•gGoíaªÓI1=z<¬Ñ/‹gŒ¢ze1§ûrâ+‚ú`¹¢+°žÅõŒ»ºã XÚæÙ Þ·;>9¡ý–gû¸Ò‹•^<éÅG“'C*èB嵕³;õ>·çuC BÚƒ'˜Œ€Z|‡,O‰Ö§Öu’õœhkÖœ‚!±‹ŸŠ¹VÌgÅÜR‹^TüñNÙ·ÎÞ-\@ׇ´Ûåé¾Au¶ôÅÉ(9²Ý8$`&'~‡áäU?¸e¡P4ÎΆ‘ÇE,Œ€÷) *l…ìðŠŠ9 F+"z-1;"ö³0ÚÅéÙaµéîeÉìÀäŒìåJ/Ÿôò£M:¢z¹P©íDuGí)¤Ò+'½Ò“dÙVÈ…õQ«60ɶrÄ~·f(K.Þxõòxµ}öG¬QÅK–q"ÈY÷úé€P¥“ õØòr[Ìž¯Ú¡AâìÚŠé@Ù¹f§ÃPJ³w¦­˜'%HLçŠZ±TŠå¤XzBDôf¼X'÷'a™=ß«~ðÔ†døRq”â F\#0£a° £â¼"} ˆÆâØ+s)bN2IíT¬#H'M¿ÃL" ù’ø¹² qbÏŒŽôH/yobHa(Çéä§'×u7Íž ·7'ÍbñUæØ‹vö†<ßlË~]‰ë«8LÈ# ¨Z…xòw~{.0tΛã¬LÕÈ“qUm—c¬c‹/™crQbÌV£²Ê#&Ä/7oLÂ;ÈaÐ3ISÖVpÇÉp²‘xñld@MhÔ±áø¨1×87cSF0hiH¶x]×µx]wÜÏÚI™é Šä7ë‹Y„¤Ìœaò&sS>·žÕ9¦ +15ˆiBŽ…”âÀèyÄÏd…%E +ŒŽäw61k~‰9¯¾<_èjÉ„Î0XÐQpä"K0¸´SÙ;ÂÝIâ;„Ôgm Ùr$„Á†¼CL5bjÓe;Ó¨š…qh‡nDÍ*Õ˜¨g½2=Ù0¢ŒD´ç:ˆ¨ªg%ò€©LšãÔ}¦û±ØXДy5lÈŠªŒÀkB뼊¼¹=`õô«ÈŽc"e] SüÚòëC,&W#È¢²!s0!æxf_s*ÞÁ¡ ­SÆ‚ãù¿¯=+¿Ö*Ë/fRÓ‰ƒ¶Üƨ¬Ë„ævã]Ž±FŒ-b¼¨>¸¤ŒäHQ×—^Ìɤ`ÏUtu†±BŒ b¬æUMn¨-½@Ê4M_Ž1{=Ž! r:mY1’ÞPá Þ0‰ÂV!þ0kç6k˜"[w;0AÎ'ó8"žÆãágC)žÇ3š5›…CʶÅëj¼®Åë*¼ggD0 t°Õ]a~½–ñ“t|Éb›w8µà5Q—=x—ßPã -ÞÐP·ÊúDÑïìï¥)G=. SÖ–\^PRkœZ]3¨›á@Ic#•å–¬5!æã{m˜„w0¿š,¤2Û³:îF.ê#Ÿ‰œñ}Î.ÇT#¦1]4Çq<³õ·Y»JGR´Ùf9=„:##¾¨ žÔ:ŽÈÄq›6)N¥Ä`Ñ%E¢F6j±6i“_ç41AÕ0„ɉ¡†öš0™ ã†r +ÞaC)²ËãÛ¸¾šÖ†Ñš¬"ÄÊ e”ñÍTÜ5vbÌI1¨Ás1¢V ¬cƒ»q³CpÌŸ'ÇÏå0(3”äâ9>sŽ1‘±èH‘ûÒï†:ôÕiqq팸Æüb&%Î]êaŠ³w=¡ÆZ¼¡;ÉYº +±k»â#Î2û£j6—þΩfN[µE¯Ì½Ë<ç! zµ]ÝMžÎ?fe]™üñÊ»BÄ`MHäœ:-&Ä<0ÓUU7Y'Æ:ó¤ ñhºø‹ÙiS5ôÆeßOGä3Tˆ!ñÇðáÝbÍýÅ¡ë/š¼¹þŽŸõâÕ;~ì#?«{üù¡c„l.÷¬s)7É myd+»‚üww"(›30%O²LÙõþW¾’¬ß^åe° ï7Úž`y¶,¨Sñæí«nñâû»Ÿ~¾}ÿýë?u/Þ¾rÝË×|ñÏòøîß]õI¼µ†@™²É¼ÛûOâoA“œÛd埋̎’X€©ŒÆ2zçy×æçÛÅÝÃâåÍÂnžûiñâþžùèæÂ50K³…²Õåg{Yì”O,:ù»y®½¹_üuùí·yÙ}Y­Á-?¯–··ÝçUZþºZ{þã—_øpùÓçîýÇÇm oñòã?Vnù/¹b—}Xýí曂l§×ÆÞð—°×–g=~ïÒ®n~Y¬“#Ë6¸îæýbIåª(¹ïø‹–«(ùŽ«b l©\¹þ榤;æÛz‰s%&1²%Ûå›Ç  + û£5ïyâs[¿kÈî˜ÑÉqEÈ<•­óõöõa®ËK9Ã__°'ííA]””Âv‡{@üŸ¸4  âÌDè³úéÅw’”T¢R”9¹!E~ B¿å`ù_w+;üŸÕ:-“#>¥íÆÞßÊå‡/]u«{üøßò‰ìsÁ°†ŒçœyW&ŒY*ËK„Ę̀ÍÒøÍ–¿ek˜Ãõ¾eà˜¤IHÊd©ë¤×#d–¨H·?¥ú7¸¹]ªVÊ™íÃÊáöú^¿î°;µ•$ +¢@}˜,6Fj꽄ûq ïÅ:m$<5M=M’pÿDSÿJ=ëÕ¹$Œ¤¢U@Lö]ÁÚ®¸oÞâ×|ÅЦ«BqÑx&A"ÔÝz_x›Cæšß—Þþä]òHTôsìUùcGAÔÄÇ‚ö·-ï|*1qÃE—ü¦Xú˜'ž­ ɇžÈݬƒqùáÃjËÇÕ:J=äå—W;2µçg¼et¿t®û¦‘"níä;"0žˆj)⛫ Ï¡O pÓ3HØõ!ECŒOüYú4î‚ä6ŠÜɲhÊýa8ð†E¶ .âÒ¼?X!¼ Š‡Ÿä½+8ÂCÑo'’\ ´K$"Ï™wœ@'í +@ऎ‰åÊ;šr?0§%ÍÉýA¼dJ/®êÀ;Ì zЮà¡GÆ:¢Y"Ñ`¢*¢]"n†bÑ,‘–­«ˆvÉÝÂI{+’øç~Qr·çw Þëru¿‰¿[pƒêµ£¿Ý†ß-ÐØ,ÞÇÉs,l)v4t²Mu¬|¾IL .[þ¹oceiŸ ×wçû6\î‹åî¸üÊê&\hÆmŠ÷Ò[“ +½›r?qÍ¥Ž™ãzž¶ „dÈjÂKð…ëí‰ÈÒ;!)Éo—Ï8]©ÊþÁ!W3RÑ.‘ˆÀ»Ú¡ƒ%’I6“ëˆf‰D#ÞyÑ.驆Ö×Í’Šj»ˆvI¡$±W+¦õ§L4,[»»[ß-8µ´¿ÙÄòƒMJ,“ì°„Fu¨l$ßdb°zÈÔ¡|Sb;‡\ ½T±Â!yìxveƒëè^ÊÄB{¡VaP¾W2¾ol”l¿ ²ÈíŒe)!UB¶Y!\Ï,É\UìË6JV-1-Ã.1 ä~æ‚Œû€:þ®Ì@1Wë›p!†-%»»ßÄ÷įµ»ßÄ÷´ên½§Ìî~Í„àoä\üëjIv‡aûœ"'HYéSs„Ù¦}ÿÍ"%’©·y6;AÄúYL-rù¥ÿ’£@÷µp ô\¥j:Š´ÕeÐb¬¡þËQd˜.¨ë~çEÜù„0D¤w3ÝIÿPœ‘2D ìd•§Q<³¸±©××_Ÿp„s6ÞP@ÞF ëÛúžÙ)<­.³ÑC­Œ Ë!ö/dÅêøè;MŠ$Rn,\uÁr›k\KŸj-PÎßž¯û!Èáç4"RÜá"PpøX( JØÈá;^Ó¯>˜x7á{…)ÍÑ\ú¥„áT“¬/µ¡yŒåãJƒ#‡AíxôêZ Ž"ýŠÓ³ÑùÈQŠl ÊÈ´ºM–£ˆ‰`‘Þù¡ð°á²GDŠ;싈6må7B[êZ³2ço8ÂwãIËÂíæ>Zé™èà¦éÑ?¹%?÷…`S}´Å?¿$ž–ÙÊruS] 6¶ïo "v@lCwˆ)8D®²ønTlhrý}AÙsX8ÂOS0¶Góè3úeòL3O×%wµOY"è@¸eÔϾ—¤Èp{íù ‘á× ˆ wH)w×ÀkîŒär¯8·3ôÏS—ì'¤ZXHåJ~[¬9ýE#‘|”b-ï¼ý‡qÝú¼}÷{øµeÜ,|yéõõ^˜a#U³fW¯´`wd¨‚y'|Ð\Ź+e˜3º¿á‡bÖÇ‘â¾ò""åLÄ e—æ¾S®¯ÄóÄÏ.w,ZØÒҖӸ⯄ïó6š î. 2N«Ëm÷•kkf‰Ç÷ÌÛí  ­gu¼(»nvÖŒîK~8îg^D¤ìJ™x\v?Q®í¬Aîb0,xf5ÛÖpgxÐîåç?œïëß×?¯¿ïô~ð‡"1Á%«ãÿñ•,D©ÂÛ¾÷ȱÇèsÄÜä®n ûöAð6ÊIï^„•…ÜWˆì‘¹½} n£¯º< +NŒmï\egöÊì)°m SRWkx±½ÏPÿ°nyÂÙ]vÃÖ Ô½ÊâG%±Åq*x—KŸ;-‘qrK@ÓÕ50lûáhp}ì0€ÇA²¥7·ÿ(Ã/H½Š6C†Ä@¨~ò¨aC"álPozÉ¢Âà W¼ û¤j ”Â6U7Êî’v¡Iìàx¿}2¾ß¿ÞG“_Iï î¯üékéýƒáýþ©êêb(ÃGL›ܦö(Ñb‹]k¦ Ð]ÔÕz°TI‡y¹aÖ•ì½Î8RÖ]ØÃY +¨âÇÓœa·Õwÿhy´¸â)[g©pxYO˜ïDÉ©%vxÖîu|FOºŸƒu^öXšâf#CÌ`¦y@*ʶ:‘Bã¼9ÐUt ]AMö’(¤…Ï´k/§»€^‚l¨¿¿š_ÿç—AÎ'Ç.[uAu Ù¢Jci4i@‘”]øxà\ºB^jå©ÅÉÄã©ýœ.îñŒãà‹“YÀKý4.U7îñRG5»÷¼ÔSîŽð®® à »¾2z~A¥÷S_rA ¡ýÆt‘ŒŠ¸Q³™{µ°G3Ì­cX8ÀŪ£-ìá ãmÕ~v€3<÷Éé·?:ÀYxw·„y'O’óÞ\–ŽšÀY”ÄŒÎ\§úG‘a”Ÿµå¾¦#GqÓh}–ža °D8—:-'?Ž„BšÂÜ”²¤FEü\B[FÑT©Hcž;Ž9¯Hùîe7±jªœ@`™à¥¨;ˆW:’Ç3Œ76—Η*J8‹{¼T瓉É㥊Rñbóx©"8`÷x©¢”–ÞU‘nˆKxÙ7&Û]8 /~¨ÂÓeͬ ‡Ä-Ô3½½IdH£ßM‘.)D — b,Ñh¤H·‡NP£ì&ÒìV\,+«-möÆ `A0c7ÿzz½cˆ×aOÇ Œ±?5RÄë4,8ã^ŽÛqY—ËH¥¡U'•?m¸°‡3. èÆ^TþL÷ø€•»h@;Àà ð©hnl±ªp½Úb‚%ÀûÑ»™X<à ÀhëD@ùøµ¸ÑEª‘"Ö¿?8íë"EM§ Éêþƒj®{übi†A\·‘¼ÍÆŸ_†tõÊe½/‹ýkëø™ÚÖEÚú‚‰Ä}Ý^#å»÷ÝN‹ûÒø#E¬ ݆RÖÆ(DÀÄpcœŸ>†zGï2–Ok¤ˆoÉç-R¨Ù´(‡"PÌÍ#"…º…i(¢ì²<"Rü¾kÀÙ +ÏðPtå*|_ð°8òN( IÄ@ä†wÂ,íÓǾ®»7¸ôg¿jŒ©;­#ˆK_p¸_ZR£n ³*pMÍx`ˆW™Xt¡çªÂ Ù[ék Â*_)Ò§9í°‹>ê6Eút‡K°¯Ó¨…„p8t2­i£vÙJ–CL‰Ö¥SŠÔÜ*]·RG¡,Ñ=šËG ˆéæ†{/[g).Ý.Šåp»ñ€½æ<\ÜãE­É…ÜKõ~ë´òi îÚm½ÚJí£X4¢E¬³{@ Ø.™˜‘¢zuŒïëß×?¯¿ïô~ð‡7#¹%c’7ôÛÑþçº\’¶u :÷*î +\üS\F*KÈÔ¼ýO^wC&Uª’øâ@ +h40Lÿû¾ú¾pÞøê ßÞJý„ÿI™ÅAF£cA÷_#ÅÃF.üï}Üec‚Y¨ 5x€˜ao<Ã=b +=IÄRÌiMx÷!ÅöŽsDH±ù4Â]bÊçuÍ ’Å/C—üûõyÁmÐnï g…ß¡0ßÑ#še¨vÔßWç‘æõ0¢Ð‰z®`D 4âJ½„MÖ‚p„+\1ά°§åÄ®tSy°nF+à„iÛ4R#Ž8^²0¼•*â›G–npô+Z‹ç¶Þ<∣li ®ÖîGÜìì‚ Q8àŸ×%ÉáûòâÆ©C-Ùÿ³òÁ<ŠëbD·A[$ÞŽ”‰©M•¡íÄ£tšï†>ûÕI`éÞ°Èœ °íšó:Eh†!=P¬smßî¦úÄ=o=_Š»|à­çë<½yëy®?'îùÓô'îyt½}TØê¹v×Û/u=ÊfÇ<ª¦oeì¨gÕóƒw=‹¾ÅÄ…¿ÝQ#ÚÐHeGŒh¦µÞAϪåKÒ&ÄÛ}Œ(JÆZìšÖðF8«»2u€aO£#Ñ×SÁ¤¨‡íú*ø8MN+КíÀØwŽ´fû¬Ú'¨›ßˆk¶7¼d—Ív‡ïÙ^XîÕf»ã5Û^”•‘Ïh¿q„q>ƒN`ÔËFû¡-¨—F¤nõìç…®å®}Ððv({*S^!âÑ"èꮓtÊG‚j…鑦:;ç{&Â¥EÏ“ZSV?EãYëá¼N%Øz¸µ|Âg|¨NÜóŒ/Øåâž·Îs¸¸ç­‡›{ö€Ÿ>q‡«ƒ¯œq€Óyxû¥nÃ=«Î.5ÀˆÚ±£V7Óõ°z8¾£Fð~Èo„чó]Q (µdsÛÓêâDߌ’R#Z&}pÖ%ü¹X\&½¢çÐ[åªfÒ®±¼†zÖÿûà5˜Áq`ÎnsÙá¨ì©B§ÈÚX>°¦ò‚óAû¦"î` å>ACÿ5U#­©\Ð(ÅVÉ¿lJOIPäåÂ{ÑAÒ͆;u„¢Ã9A1—qGÓ‰_8?¢¶ÏÒ‰7´)dzéÄ)+~MUÍeVü jÚ’×®ƒÀ" +Ç4\ÔÃlº‚qt°§­gËpá€[ÏŽÜ]Üó|î"Ïtâž·ž­>?ð§iOÜóêÚ‰C­ížµ_êYžÝ1èÚ<±€ªckvQ£ëÔ°Ÿ¨‡…Þ¯±£FW-¹–õ0¢¤)kœµ\a¬lxiªž*;âÛI£‰ª¥^N›.¸§uœô# ã]Yçl—o¤ÑVØTÙ¡“Gü°F+ç 3ÊÞƒã8{°…9 ™G—÷\Î`½q ÖÊüutäå“/HÒÒÕl¸:žF¹%S«Ëœ²ÃV™CwfyeGÓ,7tÛX D€e—×d—^vi¸ö¶ÊèЩøí÷¢ó«…[_ÖSGf#ëÓ{Úº’+Ü {ܺrbòž¸ç­+¹^íxàOWž¸çÕ•Ý„ÿù5æýý5´!pÀÕÌ;q´˜à‰{\ýYƉFZËî˜.;àêÐäŸ-âZwayP×u·hòÏ?K—­i0mÛ=¸Üoí²œM39âˆcC‰ A²¼uäe€é¨0̚ů¹9 îh õˆ#Œ!ŽÛaÚ–4mr\£³án°Õ©²É#Ž^Àk`<ó÷°ÉépM΂-ÜÔ‡§Éå€T%ÙØt0mn†kØÝÓèvÜ(›ýFVM˜ð?h´Ìí:Z[ëÀ-ð‰8x¾\}ȵiñÈóòYžì!Áš±6Ä Ø`J BŠudO)Ö“¬CĔӕŽ)Ÿ×¿¯^ÿûË ÿ`˜˜ JÕá‘ZÅGúÎ!!ê»ÁÈfñ{üÁι0R7oæDi?Ðï*—`Û$*Ï…©dOߦu ›}{“8¸xGCàS–Ô¶d'Ø£¡p׺ÏÛ%ðh´Ç¾eUÁÅ [6jÇ#ãð¬)D°5a¸óæ³_÷Êá“È\¨ÆüÇ]§ÞZ³¸¡MÛ0fd11‹ Ê*ç˜Gx#ô«gb”Um‰YlÔK‰×‰Yd é¥{æ‘Ef¼gɉYdìSx÷G *™Ã»?²È4­·Žyd‘Iá:,2À301‹veÕÀÄ,2Ø–GI²c\[X+MzªCîûZ¢FZžˆ)Z£V»<S Ø«y"¦È»RñH‘[Ã?é#E“#\!&héìÝmG¶ +NÊÛÕ#GîNòQ:3ò-ú¡j# 4GË’¶\ej²–æ¯â¯H•w ßp‘ÿ—Œßñu“ FX1ÛwH¶Ø›öê-Õð¨VµÊmÿ–8V“háà!Æ&Zžµ94ðå ù¶„‡fQGö{Ú¹…=—2=Íó9þ^äX}óÞä\‚¨²:¿Jý·Ëø.m¶§ˆ9DÌrðñª¦õ3‰˜äFU&‡1‰άuWr$"(Ò4“L ËX‰YT(|Áš³ÈT ?ßÏ,SÃÒ[`b|Óžù‘ejØ瘘ejXZxæG|ßžù‘ejØG8æGÖ­†%<Ï#Ë©áFI¦†TÙõnk:1´ßÒBZ•¼”prŠíxृ &öÄ/,ÓÝ?òÒÀγÙñÀC-°f$÷|‘—&J•SšxI`m­,y-¹#S .uMĹã^ØRðGmš–·nÁ¡'ó(Î ÝÒÿàÎZ5g½ÉÏ n ó»¨'e ä…‹/êQYî‰^ì»Å+kØ¡IXz3¿}`³†¾çÛnkxèc +ÄoÝÖðàf §dͤ#àf ›jN±ÞÎpó|-LÈϽõÛº3†+IÒê4ãRÌ©ªo[®|ÛB—bN½N«ŽíÔ]Š \†¹ßõôH!žªžˆ)$ptcz"¤˜¶q sDH1eKÕÕý#…DײãˆbªÖ°8"¤˜¦IRHà‡ëÏGŠéÙ š"¤˜šQlRLËr÷'SŽ’m fHÇ2‹çXœŽÙoé‡ú‰^:Ö©å;xè6%êÆŽqLSÁ/yéX¢SÝñÀKÇ +úðÄøÀÖé +¸°}<âp4²;‰ÇiD1㱆 ˜ù<SÃ~ÑuÈãyôóBÃQ"Ø«4ì x§wëã‚©–÷¤¬Z… „‡o—ۃʪñãý'°Zpébç»Ù +ëa™µ‰g¸¤>ß›Yë“w*&Sž¾ÍDÅd‹cÀÇCÀSå÷üYµM›W[KÇš‡¥ÜŒÚd‹BL"o›ëàWç ÎÛ§¹Û[[VݵÞïµÕ¥ØÖZîÊûí¬.Ã*WJ1ÃöÕ«,„ ·Ã ’S=y÷1£sTr:÷yV$£#:ñÙªûŒìdüO Û¡ÝáÉ +"=-ìì¼²,>EAħ‰S°oîð´ñHOC±þÕëž<æÃŽ ‰Çf„øûàc:¬<öÑG»‡C«°Ù°¿"<æ +Ü”cï’\®ã=ðQCáU›¹ ~² Þ×€TA™ö°Nù(!–\þ˜¹$\GÌ&RI¸Níþ ¹$\ç¬~\®SNÒ\r»ÎáOšK¶ë<@®€oðlD+Âñ®n¶ײƒ¯þ艗ï\ÞGO¼|çH÷O¼|§øý3/ß)ûyþ>xO±Ûg\Æý‡ik\a<ÅnŽ:ëDÕuûΆ¿hàìÏUGøÎf9·ÕCÍ9Ov“³ÜjÕåPêI,G7«Ù­£g×14¼%‚$SØ´#¦7£|:z–Ù-z4ñ}ú/sÇT᧱‚ÙîôcJ`_ãºUð ðÌ°Düæp¼ †´Êó鸆ÓxAÌh•ÁþÄ_×=£YEÌhJ¶´‡vÏhV3¯ù^ëѬâ÷럯ÿ}ý÷]¾üÁÃ7ȃ£êq¼æÄûþ‹¥‡ÄTZ¦·z¿œ.™FuâÑÉ0JÛÿš)v!N¤bzâ¡ã×ÏËôÄ߉p©€@}­V È$0ÌtRE Ö¯ˆï:‡?D®ˆ/{0íuH%nëôÉ%qÌŒåšKâã_—¿k.‰__ï\ùwøwü(A#ÌvîIöZ ^æ} µi¤|T‡¡"Ë×µU‡1-]ØaVë0Ô©óú­&jÇiwmÕa¨èÑËj†ŠWC÷pfdË$ai"LP]2ŽCÅq Ùiÿ2 µ²×pWZab!b9|Â…vö—§MW¾ºøÀ U .ÈNÖ;?¬Î%yêŠ4¼Y¨0­!Óº”ñCåR´„<õ¶‡>*]ñ’e^‡íÎwÞ>óбn°zè×¼-ãqî`‚ ¡Áx™‡>ãÄ@‚»tö$:@äRèM§ZÂu¬uôƒ,[åŽ+OŸH¦…®»âd3œ‘z¡g9FõÈÔFc½:ÿU¦Þ$O½­XJn ã7×Ân)Ú†)nwôÛ{Ë:É.űµÅÄÊTéèê°NÂIöQC=ŠÉN‡Öi?ìt$ñy^¦Nz,—#mÍuç©£±ìÙZ†•;Úýáö¹ü韜Í^>ñÛ:÷º;Ɖ^Á÷•ÍÜÆ—2Næ§Gu*"À´Z‡eœ~ö¨Ë8KÛµ †Úô ÕagÅyü¨ÃÁpxÀÎbŒL¨l³¡ihyr·Ê4y´Í˜† ÝÖ ëí™*Ë<1Y2NÆ]E›¡ëÙÞé(ÓJô Oˆ=Ù媙‡—»ù®v'zã•èû’[LÞ>ãð6EhzMk‘ç7 ãQáT—vG¢!£Qäcoa¨ð°³rªØh%ý[`šì2åDCZ÷ÂãcEÖ7:²`<éкezQ†‡=…+&ü÷káˆçs-©sh8-ß–é(¾&¼½Ó ÇÒ,°Iü&Z‰m)ë;‰FÃ…«¿7¥£²Æ³ìýœX £î^H°¬ñhVë0ÝëÐaøÈNS†ÛÌÝÁo¤ÓnÝù¦½VæË—;ÞÈ\ûèŽSÆQg7OtxcÍtÃÃþMv<¬±ø»%~[ã^wçemÐ5=Ö—²Æs–­:,k\˜{ÕaYc=çV†Êx:5Á²F†“Gu*\¶ìßM°¬‘ÛyÈþ2 •ÍÍ>æmŽ†zÇb̶§ ÒiäqÊ–™AÆaS4ø“™iÌ&i¼lòÀ·¡1IÏ<ô¦†¢ù(ƒe^6Yx¨`lÎÌ+C*“ÁàÎÛ'‡>•T±×j‘!W†œðkÎPUf—xeH«°eîÌ+CÎÙ¾OÚþ!ßÑUFyeÈUe±~™Wˆ¬]ëÑj‹iüï× +N¹äßÎÙ°·/͘¦%2âuÂ8Š÷~µÉ-_ÅIÉg:Åƽ/C<žøÃúú‰ƒ¿ü¨CåC›êpø`íkËNSærínÎxØ`=šéÎSççê¦;>ÈϽuçÃmE2FHgÚºáa„cøº9~aµ§Kü6ÂGO¼Œîº}PW²ÁÒË£)ç#(øX«È÷ŽMóºpJà¬Ñ·I0Ö>6°K–b¢£ð6Eä{³9H3@<{Û@ÜÞ¾Îýrä}k”µ»ÿüÕ°»Þíø—аµÚÖþAc©";¬²UƒÃÒZ©[5˜–S4`<ªÁag GÀ[u8ÜìØ?ëlxYo{Œ #;æ^ g·½U‡ÃÄ +¿ß©6½],.ecŒ#ê°Œ¬Õ-:‹-„Ž­Vj¬Ìì¬ûW µª ÕaÚÑæV–¥5$4r)ái›Ö4Ë\X8©Î05Ãåj41Ä›qO´†k¦eüA›¶ÂÕ6.S;î.=j µ†ÇPËô‚µPyæ•ÖÖÔõ¡´’ù߯¾þ÷õßwù>ð‡! ¦s`õušì_¦†CÁ¢`D'5µóO\c›ËLÈDÓUþãŒ)Àµ]íœz/wß½Y^mrYò–ÄÆèÕ/ÊS¿–èˆ>Âè?îÑkãïÌq~#e]óΛö¼ðCEÏû÷ÁGƒrQ1L6Åù\=Z`0˜'Ëœw—Z 8ׂvØïNµ óû‡]TE¤’èæÞÆ7ÞþR>ü(Ùñä‡Y·ÜMm%ì\,ø%:OK(w ‰ +û-FäC£„©„¶os Up£àúrÂ+ b]6+HpîN¤ô–îD*!ÁÃÝ4—€è8Uz"R ‰+ç+šKH ×/_¯\BbÂ#‘JHp6½œH%l/¶´¯X.‘Óœ\ã…ƒkÄ`¨õŠë°šnrÂå4 òžðˆO§•g\ñ‰9bë‰×ØX¯ËôÄkl<«=}æ¡ÓPƒï15®©‘¡âgÝS_Â!ð!=í!›Íx„+œöšutûÄ+\¡Ïa[‘\3®™ò„ŸýttÒˆlµq”2$dvÉßΑò‚Ñ1•ì2Α’ŸñD^Š‘Ò`æ®qpË¿ú=Sn–¹‹öt`%»ŒÄCÁ1šbªUîz@l5lpœKÍ@¶>GZïÕe„ŽrcOqÚÑAšXMurVšC.l¬’YGÚ…èyÙŒaºã[„³MSÆQ1à÷qÄf:üÿ8+σ._uœ2v®1)ÞÞ¿az.VgÞ´l<æÑŽ¼†%¿VXrâ# œCxߧ[.!D¨ÝTâèÌáû܇ ÖyÍ+ÂöË°æý¨Û—[¶´ÊŸoÔü9[ +¸çCŠâ`3è挩§Ùa:zYt,ç1-º£åÑ;6O;¶EÍ(>ª ³JhYô‚‰BU .~ÚÚ”–§Kß¼\ú`;Ô–\‚0Y.ÇY§K_<㨠<£X1¦\»8'—]²Ü%è!E&}Pïsÿ–"½Î©y"¤H° Ïò"b +‰=º<RHà¾õ@„ vö7ø-E‚]ü#b†ôºUÿ)!ƒŒ¤¡· É5ÛG„Éu ßS$×Ö)m"¤€e,~EcŠä:ð–âäz!Åä:¡îã,T;>·^ë·éuç¼W<ð¦Øõ¬;y“ì\»‹qœæêžy“ì³øçÞ$ûÀ_ñÈ#mÍ6ß<¦d;qØV Üéj’x“lÞVܦjV7òˆ73ä¸lf…"Ž0¶ 2€E5hDsÌð æjl’°Ýl¼¶¦ÉÆ6Ö¢þŒè×C’Šw‡™ìEb½_ù¤í…!Òc,=ê9'ãA³ØµQPG’Å^$¯-¶ÅtÈ´:Ö,v‚̳¬T¨€›É.X|ïPä§ÕÆ^eÕKnÛ%Èr_(æ´Ûsï Ùî’(Ùµ_Óv» ùnLåüêÓvo^¶ûʬb)Óv/œúyØ¡ÊVq¾áŒWÊbMP‘zú„¯ÇçãÇãïg~&ü‡ýÇ)©éD ¸¸¸¦`ÅbßÃmNª–Ty& TÛ°¤â¨˜ú›¢Á;®ÇÖ¤ÙÖ b1Ê85zZ\îfšë*DU‘U2Íå£rÈÞ Rþpq*…ÜHaê³nV¥]"âæ"¯u•|ëw)ܼ֙—ËZó\æÍ«µ¹..{W·xÕÁ„ŽRMîÏ7ž=›8Á阞q´HèÃp ‹Í/ðŒóX¸‹½é&x^-MÁ—´×8­P^ Åÿªû ülg +OõÐú^µ±%»—ùט0kãÀç5K£KPmìØilj)ã®+ƒ®=¿¯Öfit,Zx”úŠ˜Bñú8@#bŠJc‚ýü†LOL! +[¢¦k–F—›÷›éÓº&3à’b÷a…l3Ï0fÓl^Ö<Î0.q¥ÝîAÀ§™Æë^9ÛüOG‹S›2ÏvÕë=Ï8º»)‘e¬¢HL-XÇqRŽ;çf8>`_ڿꚇ1åc1/¯_‡O󴟇a·ó|ÊB8ŽúyÖøÍЬgØÂû17ÃqÜ£:•h1?_gž_µŽÓÄÎç,†ãVdÎg1&€ÙJŽ7dMKªtÜ—Ýji°~™çVV0°&ÊKÕõ°‰s¹®õ°©4§¼¢žU±¸°§%Û  +\ò̓¶ãž—ŒKú.îÀ«"fl>ènj6ÎU¦Z™£ßqájjÊÉŸWÓºx\MM5aíéîi6?[ ,˜t,ðòžÌôèò^BÎæWî¨SÈ7/!¿*ë2cyµ2˜½R¦o^L&¬MTðýþñdÝ·úMs6°²ÿüùøýù×ã—ÏüüøDàùùñÛƒÍÞó_<îùýéŒB>Ÿ‹ºÜl‹Øvèî·¢›“žßúuLÀþ3G‰Ý£O~n{Z¹köû߃œ0ð!øã†ø§0~]ÖÌ“fþ?™ôÇ:qé[ endstream endobj 298 0 obj <>stream + + + + + application/pdf + + + RBPassUp + + + + + Adobe Illustrator CS3 + 2008-07-03T09:32:55-04:00 + 2008-07-03T10:03:55-04:00 + 2008-07-03T10:03:55-04:00 + + + + 188 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAC8AwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FUj85yXo0ZYbJrlLi5urWD1bRJHkSN509Zz6YYqqxciTt4V3yGTk5OkA47NUAefu2+157L/j64Mm 2qILq1dXC/WUpqp9b0lSnH0reP6xHVxxjb0+rftUerzdqPAH8zY+X07X75bHz3ak/wAf3HOv6UT6 1ausnH6zHTVj63pKlOPpW6fWI6uOMben1b9p9Xmo8AfzNj5fRt85bHz3ZL5n81+drHVrm20nSfrN taJGy8rW6la6JT1H9KWLjBHxFV+JieQ2BrTLJzkDsHD0+mwygDOVE+Y2945oGfzp54F3evp1rHqV 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 + + + + + + uuid:DAD009446E4ADD119EEFF96D7801BC77 + uuid:dbaaada4-048d-4642-b37f-5659c12203ae + + uuid:D9D009446E4ADD119EEFF96D7801BC77 + uuid:23547E781A4ADD119EEFF96D7801BC77 + + + + Document + + + 1 + False + False + + 12.250000 + 20.000000 + Picas + + + + + Minion-Italic + Minion + Italic + Type 1 + 001.001 + False + MinioIta; Minion + + + Minion-BoldItalic + Minion + Bold Italic + Type 1 + 001.001 + False + MinioBolIta; Minion + + + Minion-Regular + Minion + Regular + Type 1 + 001.001 + False + MinioReg; Minion + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red + SPOT + 100.000000 + CMYK + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + + endstream endobj 295 0 obj <>stream + + + + + application/pdf + + + RBPassUp + + + + + Adobe Illustrator CS3 + 2008-07-03T08:34:59-04:00 + 2008-07-03T10:05:07-04:00 + 2008-07-03T10:05:07-04:00 + + + + 156 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAACcAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYqwj8w7rVy8UGi/pGPU7eKS5hltorlrYsikrC/poYZGlYAUkNFWtKMRypyk9LdloYw5z4eE7bk X7+8V5fck+lwebzr6RB9TGnC7t5NNa4a54/VFkkF210z0qzrbrwjl3HqfCo/ZgBK+rfkli8O/TxU bque3DXz5ju5pjqHnDzpbtczDT1itIr2SChsryV4rSN2iN07Bo45BuknGM/EhND8LFZGcg1Q0uE0 L34b+qPPu+8b9fhYXR/OP5g3EGmvLp8ctvftHK999TulWONlEssfpoXaoWQLHIaKSp+11IGSfczy 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 LaO4aTQZxM3O3t2tlt0gS3ESBfTXkKmVloTxQElsCpQ/5N6lF5f1GS2t7Ea/qmtnUL4KzKs2mG7S Y6eZihZVaOJOS04luta1wqlWnfkN5lj1SdL26s30+9uba+9aJ3DWBjv5L24t7KMxiglZo1D1XYEk dFxVk2n/AJaa5a+TfO+nGDTRq/ma61Ca0dAwjCXTEQes/AHjGvEhAppTvWmBUj83fkl5gm0y00by v+jrXSoNIltZIp+Y5alOIoJbxgqNzdraMoJG+Ja1GKqF7+SPmb9NjWrGPTY7uLUbC6t19WUKkGl2 ZjhA/dN8clyeZNPsgCo3GFWQ/lT+WfmDyba6haX6WGomW0iW01ElvrQkaFfrFoz+mrfVhcKzr8X7 VeNa4FYzP+RXmWfytoOmumnfXNG0vVI+YkkCvqGpEhGJEe8cfqO52pWgowxVl/mnyL5luvJ/lHy7 p0FnNDotxp02pJJcSQo8OnBaQxn0ZC3MqPiYDp032VUZ9B/NCfzzH5qk07SWltdLuNP0+3+uz8Ip bi49QSv/AKPV+MSqrceNTWlKiiqVaN+VnnGHzpH5r1BbKaV9bub+709rmWWD6tPCkNvLEjxcFubT gSrUqQxHIbYq7TPyn81y+b01/UEsbG5HmKTXJb+C4lnna0MPox2AjMMaceI+Ny237IxVNPPX5a65 rvmfW9WtoNNkS78vnSNOa6DGRLmR5C0rUQ8aBl+Kp2HHjucVSaD8jLyz8wxvZw2S6Va2Vn+jZPUZ Db6jaoQ1w8SxFpneUI/Myr9kcg/FVwqgbX8kfMw8t2Fk9vZR6vJNBLqupPdtcc3to2jV5YZLX0bi OQTzViZeVWqZGNaKvduCcOHEcKceNNqdKUwK/wD/2Q== + + + + + + uuid:23547E781A4ADD119EEFF96D7801BC77 + uuid:d1fde563-235e-8e47-a158-ac3cc76aa98f + + uuid:0742cf20-2206-9d4e-9e3d-e542f631a88a + uuid:B7D572641149DD119EEFF96D7801BC77 + + + + Document + + + 1 + False + False + + 12.250000 + 20.000000 + Picas + + + + + Minion-Italic + Minion + Italic + Type 1 + 001.001 + False + MinioIta; Minion + + + Minion-BoldItalic + Minion + Bold Italic + Type 1 + 001.001 + False + MinioBolIta; Minion + + + Minion-Regular + Minion + Regular + Type 1 + 001.001 + False + MinioReg; Minion + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red + SPOT + 100.000000 + CMYK + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + + endstream endobj 292 0 obj <>stream + + + + + application/pdf + + + RBPassUp + + + + + Adobe Illustrator CS3 + 2008-07-02T23:27:46-04:00 + 2008-07-03T00:02:28-04:00 + 2008-07-03T00:02:28-04:00 + + + + 256 + 112 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAcAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7FH5G856W0v+GZ9O0dZJ rhpPTVGMkT3PqW6sWtWK+lE7rSpHT5ijw5Dls7c6zDOvEEp8vu3/AIupR1z5d/MC80nTo76/tJ9S sbwag0qu8McjQspghPpwj90wL89q/Z3O+ExkRu1Rz4IylwgiMo18+Z58+VM5y51qXXfmTQLSVoLj ULdLhNjbCRWmr4CJSXJ9gMVUf8ReoaWemX93QVY+h9WA/wCkxrav+xriqnFqnmj1JGn0NBbhgIhD eI9wy0BJaN0iiXckUEp6Yqq/p+aOhutIv7dD+3wiuP8AhbWSd+/8uKu/xVoikfWJZLNT0e8gntU/ 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 + + + + + + uuid:1C547E781A4ADD119EEFF96D7801BC77 + uuid:c81f585c-6684-f14a-ae05-056a473a74d0 + + uuid:BAD572641149DD119EEFF96D7801BC77 + uuid:B7D572641149DD119EEFF96D7801BC77 + + + + Document + + + 1 + False + False + + 39.000000 + 16.500000 + Picas + + + + + Minion-Italic + Minion + Italic + Type 1 + 001.001 + False + MinioIta; Minion + + + Minion-BoldItalic + Minion + Bold Italic + Type 1 + 001.001 + False + MinioBolIta; Minion + + + Minion-Regular + Minion + Regular + Type 1 + 001.001 + False + MinioReg; Minion + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red + SPOT + 100.000000 + CMYK + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + + endstream endobj 314 0 obj <> endobj 316 0 obj <> endobj 300 0 obj <> endobj 302 0 obj <> endobj 304 0 obj <> endobj 306 0 obj <> endobj 308 0 obj <> endobj 310 0 obj <> endobj 312 0 obj <> endobj 313 0 obj <> endobj 398 0 obj <>stream +H‰|•}TS÷Ço„nG…ë]I®æ¦sݺ£UkµSW‚¥ÃQ^ +ΊB€@$„„÷Iä=/!ð¢€! ‚”V¥Âjµø2±žºÓÊ:Êz:ÝvúÄÝý±Û­=;;;÷œ{Ϲ/¿ûý~žïóüXHà*„Åbq£’"ÄEo<,É‘Èr^ŽIÓ¢”B©Däø¢dùÖjž]EÇÒ ëKžÌ£ëÄT»Dk 2d|öPÿ‹šý²ÜB¹$#S)xIô Á+»vmÝä?o„§ÉRÅ‚øB…R|R!ˆÊÉä¹2¹P)NÛ,„K¥‚8ÿW +AœX!–«˜»ß +H¡@)¦‰O +åÙYúÿ[ AXÌl@—äU‰`!XÈ› 1,$> aÌ"«Ä‚|Ͳ­ŠXu' >àq  Aì@vuP@ÐÑ /8xµv¼£P>žíõŠ†0|¹úÇà`ß¼ßâºDÍŸxï>o%b<²•_„/]·>ÿ3oR=œÕÅwdþÖüI·³ñE]ö=}“NE#Ü(ú+æR®Û§çâK0ç;K4t4´67bKœšQD¼ž³’²»E¾|û–tóƨƒ[ÞQš>²P^ œß×NøÜ,½ÏÁOø„>{QoøÁÚ•º_é¹úlÔ'e·Ÿ]±ŒdÂÉJI¾SÊOèRÉ×*ºï¶Q7à; fÃb3·Ùr ¼²·È­VÁùð>µ+.~Ô'ñÕQ9o%fó ¤9út2= ŒdKs×/ÙAΦ¢èLZFô°]fm¶™ÂwÛÞ¶ÅÚ…®Ã¹¨wÕ„ámÆ^µ±ÄRìä–v©=Ê÷T“ŠZö'Ç–xð<õÓŸ6²ñD}öíÿ²þÔxÙÍî½Íz£šË¹lRù¶O•©C‡ ¸Œ/ú +% +”j-©«3Û)|Âh/uÿµª1 _,>­®W4aJEC)¹cÇñ”dê×o¥ÒÈÞž3iCg.;ûø®ž±©/VÏ.z ÝSì*o'½—¯Rt$l""©P!ÃR3óË*É +½­wÌ|§gŽê™ëqtZ0³¥³ÁBÚ:Né,Tu–|ƒ¶ãLj¦`ùn­DcêÐ.bÖâÓ¾W|G|êX¸xë.ª†} ¢C†êŽrRûSyÑn*Ç4T«ë(|zÇ?•FžVTÜŒÖóùç®™§¨W怄gxó'‡ŽóñOi.Ac‰4~"—¯ÕU“Y +Ç= Õñ·z“wuO ÛH›¹@Lqn2ÜvLV«!Ý/é,àðpJ€Àø´À& +™*ïÅÏoßôÿ&£†â**jËÉèYÇPcN¼°‰·Ó#ô ¾;diç_<ç™èõ0( ¶¡Jìå½dïCï•YŠ~|Ž8o¹í¼Äw\r t[1£ÅÖÐFÚ»«*Û(]²œF +sTYò|&LS”iÈ2­ÃEqÄš»ðå$Ëk`#`¾ÕF$'%å‹ÈÄ™óMµ†º&jeö^[áMfŒì3FšÊ¾¸™Gœóþ»ŸÙþòŸißÂÜ[)Ž¦lRítn²·k6µ4šI½“¦†/tBã X/ãkˆ¾‡ÞÙyª¤UÉ2¿‹X…/ÿ,茥jXD&ï?CµÉP{·§ÇH6Õ–gTRø£8Z,¶«\$ÓîÄ“hâHnŠTìÌ™ö ªûÓ(ŽË¤êSý5Äøk[˜SâËþ;¡Ì/¬¨ +´[9Uâ,ò•Œiû-­í»Ñnt7ŒVa5®ñ.^—¼]z41)6–/ËUæÉ2±v?¬ž xØYã©ŽRRûsyÑΧ¬óW0>&¢“SècF}°»š\† æK\ãX³ÝåÂð‹¶èÞƒíéØÛÝùƒ¤Ûk½?Kq–Ÿâ …µ°æCX{žÃ—!¢¨c.;!ÐØ}:ù‡Ån²³Z%ò;O¤KçŒs†Ýåüì˜x1쪾mÏå÷¡ +ýÂ.jË% •º’\*·ä@r|#Ý:‡^µœJ'…ÿa:Òc"›¦Z*ƒÞ¥IÐ$”%p9nÍv5!°B ^C\¹îòœ§®_=·òo)áÚfá±RE +?2-b+ÆÛwf`|x æˆzz]<ÍÊ*Ãjôúš +R’3~¶Î.º,T£ÉXg"û${)N„I\ðM-ã·@:Óº¢Èè2úueé( ½»<^¯IàBH_ƒ§u¡í°Îw ;0g§µÞLš¬§*[(|®¥Ò\k6˜ &c›Ãdmî©hÇ:5rs>™•ô›íG™‰Ðq“ùÕ˜I?”CršÁ ‡çCï>¸·„OÀ'°“˜>>œàâK;2ºûyk_ŸK©¶ññEƒÖRÝiÅð «¹ÕÖÁ;#t&‰Og¤ò¦èR³yѳò±<þ´´¥@Å;™W¤”‰í#~ykYc¦¸¢HQ§ÀÒêoÈFÉÇ>_¢8tSrþ…”ñÐfÄŽ€ž'ªÐ4¦¬%sˆìfò7ûïüé¿ÛnÁ#´ŒÍù+Ôÿ|šùšûu—÷@Ï‹÷ƒ’ü|— Cyÿ ¾ +÷ Œ ÷pø] ̆4« endstream endobj 311 0 obj <> endobj 397 0 obj <>stream +H‰„”XÓÇÇ¿¿!ëÖtåÛXÂY.u¬Óvì¶çjõ¡?P)Jå§" A@"|“ð›@HB!ü + D~"Tt`ukh×ù¡Ó®­Uçtc½/û®c¡îÙþÛî¹»?>w÷¹{½ï}ÇÀ6ø` ƒ³?1⽘¨7ò¢ümû¥éBAÆú@0TÀÕ|hH7üýîêeü ky¥¾€Ô/Žlúž¯ÿú<Õ;¢…Xp"[ÊÛ’±•·=,,ô§ëý›¼ðLÑq>/V!‘òó$¼ýù"qHœ.ågþŒÇ  +y1ë«$¼¾„/–y£ÏÎÀHxé<©8=“Ÿ—.Î割þW&Ì[ر1 ÁÞÆ"°H, +;ˆEc‡°X,‹ÇŽ`G1/+æƒùb›096ÈfüÍç°Ïœoá†ð óx1þ˜™ÎüÐ/Ãï1›³ºMÎÐP¾“©´´š„G3é¥o“pö}Uõ‡>ƹÔ½è‹ÒÛ8¯P‚.èm—PÈCð ‚¡aô¶D:d@~Ô?9ô–7éz³7ºEä ÷!oxë=^sCôz¯½Moìûu3”ušA±–}ÑÚƶ3Ž¡¶‘"S@BvYe< ã™h +ÁÿúpaîQàWño9’"ËÍ +Š ³—àÃýg®Ì;®øØWiÆÖ={`tô¾Cû>`)ýØèi]—F¶ÊîòGqÃÄi„­q*¥Ÿ×ؤúyn:-”oVÆ“B®2[TW]% @L}W¤^Ü\š[ßkøuûÊÔPÏ$ +ÐÍôáNæï©Mí+¶)³‡kèk™jÐwÐÌ*éL•SY#àÖµqÅ›Shc@ “ž¥Zqö#ÕlŠŒúÅY¥Üpí^$„hl‚sTí ­À¶|îâ$$ìd;^”w¢P4õ-žFè@L'Â;ŸVêÈ’†$„zùɆµ“Ÿ’£b“iFpà/‡ä­“ý-ö  gÆ'Î^fÕ3ó‘‚3ÐVYa‡Õ|i°²Eô—äf—²Ò3ÓóJA±Ö52`úÔ} öÍô»Ý6!4X[õ6À6©¦Ñ·£Œ³ (æ–/z‚Øœè¨ÃŠ,IÎ]j¬oÖàC7zë“/Gs§EŽ…Ǥ‡ÒÏ͈†n[Ÿ> ¢•ˆÅiC¾ç/zì¬F“Mo½ª¬ø´4‡l^“ŒJ•£íýg—ªï¾ÿˆ¸OÜd,ÒŸ'Ç‚9ÞÙ}Þe¦:-_‰'ûh~TeSµ‚¾Gó$þ˜E•pNuº<µ°½VÙ!YrAA=,ÒÙKzû¦ê·Çe÷º×­£r~—(%.P;ïpÄE +jsw),;¶R|u`ÐíèieYÛz;°kkŒ°¥ª£ßh!í‚Œ]ïì}?¨XV,—ä±j˜_Sxw£ÎNõ{’“»¡bÒÏS_qLóè×réJ&’ ªÃ ®€únÓ¸uªiÔÔ<<êÜ×uÀ™ÈŠuuª;@Ç€mf²©{•û£Í‹(ü³•¥ªyb… V¥áåeI5 ¼Þâ1BbűܱÔv“õgg¶¹%Õ9<&{+iG°÷8íwð/;rÍ%@#«T{ãE{Swü„UÍìü +ŸjnXóÝäظu1ΧWÌj…WL>V©IQ&p\†©äctp§úÑĹ œ5…™˜I‡)ã”qeqÜE—iªû‹¦aîtb!Î%ÐW•›âµ&uÖâ e±´Ü^·3=ã©óªÍ[|ºX1OŒ¢WlœoÀ"nN{Ðsè¥KÀU‘›BBâÜ!ºOPê%=ße¸ןC>ÿ¿ä£ŽeÇ3ò/¡ú¹|Ï‘_ý¬ÿ²¿¡µkX0‰­­-’Øú`””QoœõGÛPßmbeQ<Ž±³]צ'¤¡ôË¡ôÆ]yEÍ­*xŸJà¨b¥T.+âªÓ„ª@ÁÕKÝ枦>#W@¿{⻪>¬-ßO²¤~HmÅ;ýˆÔÄFACµÙ|™ëD/ãÄ`¹£»ÆfZoŒ]˜b]í½}-p)ùò$Â*uv[Ò$CkÞðE±T G¼?96á;ûwu{yj‰$Ì¡·“ d‚2‘»äj¶ý®ãOÜæaûPÏ kÈÕj0ss•Ö MåfÙ`66Y Vƒ¥®¥ÂÌjÑž´¨èÐ$XÃlþ >eÑ JûjÑçó×>¿ê‹|Tœ{÷îÞ$]F¡°=­÷Tài·ÓÝߣµ´]‹ÅjÑ7ëšY:¾3¤$çI`rZe†<0iR:–4qÂ(fåŠóE¹¦¡¼ Y«S–³J´JEi`®î£Â!ÀÞµþ#®1½W½JbþŸÍÞ¿Ù„^àȤG“¥@]Õ9n†¡Öo{=8ýóÚ¨1„GïÁ÷2E£ +_d GðÝ'Ùm`â‹…±S½¬šÛû)š¸q=rÆk½JJLD13èçÃ1‡ÉLæZIœ¤ƒð± áy@S®7TBCe¥Ud'e…0¿Ö)õ€ñi¾†ã4ŸhnuÏxÿ+¨-±ã‚l¡¢•œïUÃ4ôý6—ÃÙÞÍíwu··³©ªÌkÕãZ½¡ÆZ;ÛÜ]òîÜÌŒc4+ Jfñ+råP(<’›ÙvÕ,å/ï“ûG‰Ó†8QÙâ2!H ë² + qýé´þ„EœVYq⺲DVAR\×"e ‚qŽÿy{~ap}u€t€lŸ½¨¡«Ã£¸Šª–œ‹š3ûûû +kh§i«Ž¥‘™—‰ž…sÚÈy´²¨¬ð¯|šùšû{—÷FÏ—÷ƒ’ü|— Cyÿ ¬ +Ù ÷zø  Ñy=Ü endstream endobj 309 0 obj <> endobj 396 0 obj <>stream +H‰|[HSqÇÏqîRêDçll´s’t^{H„2s`^Ód`¤M=êt:=›–)©sV^ò^Šó6'™š%¨£,Œ´ ôÅŠL(±ž|ûûKµ½ôÐïáûð»|¾ßŽyz`8Ž&ª” ÉŠM¹FWžAUiÕ´{B²2œ•x¢¨ýÇ—;÷8†õ,øÀ_(ö{|âïÞaâu5´¦¨Ø@žÊ!£cc£ÂÜzšŒ+ÐåQdfÞ@•éÉÄò|]¡£Õª ‚$ã´Z2Ã}¥'3(=EW»º=©& ´º€*SÓ¥¤®ð$ÌU¾˜æ`˜ã»^Â8X¦Ål¸ïÂ7Ha(>ø*xqÀ›OÙ¬3*Ç5%•tq¡Mÿ2“ìçI|z˜˜,âp=D„"¿íYQ$"¡G‘ûÓ…©£àe¤„0P,ƒ‚!XJ¤ „-cìÌÈòu¨-ðØU±ówôî=s‘ôð> endobj 395 0 obj <>stream +H‰|”}TS÷Ço„nçŒ3×Û’\½7gÎ3wlÕv¶§º:-J"¯Q&HH ‰$$!ð^Þ ä Þ +QZµ¾uzÄÚÕu²²®³;=þâîþØEwvzöG<¿sîýÝç~?ßçy~ (t Ä`08QüÈ÷㣷ÇHs¤Šœ7"rQ”F — +W_n âŒàÆPÃ×Pq”yShÑóx3ÙëÖáz`Ü0± ¹Î^=h8¤P¨¤Y o›ð¼7÷ìÙõúj|‹wP¤Èó +Ôñ5/*G¨P)*F,ÚÁã”Ëyñ«_©yñbµX¥¥Ÿ¾“ªyžF%‰ÏT2ž"ó‡2Aôb@?…¶@o@¿„" Hè(ô ÅBÇ¡(J‚øÐZ…@9ŒFÊšWÖ …°C…Ƈþ n€¿aª˜;6ÂbŠºAs9Hè’çdXyt2-ƒI–‚¦¢eN8¤‡éÈ/§¦ÿÝ̳¨ò¸‘c’Á@OŸR›ÓšjZ|—8ž@ç…¶~ez(–õ´©L\ÉQVÁ5ÁDÌ̦$0µÉ™u`| ”NÈÙÁ@RkA8º\ý*ð2?}Ôì¿B.œ›üðw%b"²…hC—n¹žLü;­Îî$¼’“ŽÃ8åf¢‹FÙCS“QKAœ(êkz+50qÐ%0<‡™ÛÌ-–F¤Ñê¬oÇ/Ϊ#ÞãÇn!åÌ.!†.ßû½|Çö¨#;«±ßt’ã@ +³»n2xwa +†€µÏ Ì$[4Y¿—¼Üø+Ó*pPÎtŸ[qŽdYÃÕ©ižѨN3ðwʺ´’·Á3€ÖE Ç2H§Õ”÷èuZpaŒ¿à•š”k°¨œãÉ2"_žcÊÄs™™Öì´˜9«š½ø˜è(II(ÖÍô;*dÝÛžÔçøcú• Ôä¯ G[m=:[‘³ÐÇ)îÔj>ÔN«oWx‘¿zïß\â‚×(¤‚ÊÆD“M²{ÿ‡sð§ë·ßb²Òª9¬gvmp÷Å{°¬EƒÆò5Yº +ÜXïð4’è¤À= ¬ëŸ•áèba­®AÝ„4jÔæbüí·ÓÒSÉßÏ  Ü}gECgg†}½„¿;p±i`êß÷úKݸïÉøÕ9’Š¯cj¡\ V ’¼’r¼ÌÔÞpÜïž'»ç»½NÄáì0;ñö¶*£“¬ÎVm©ÈGXNÃðÕ4c¬Û\±T>?Oˆ'Ì^hª³Ö7‘+`ÿ'+Ü鬑CÄÊeÄÁ8ÁÖ\jíœ.Ùþ¯ ºéf1GO¹8^¾E@ºAØùéž6Äbontà¬)ªr:øt¢JçÓ±U‚0)x½”`7¦Vz¯Ouu7†ÚÅ©[Ó¢ÓIÔ’:‚u˜üÅ:$Û¦ÒrÓ’óãQž¹Qÿù™<faèu½QjÜoDܹ]„§Æê²RÉ$:>™{8~§„HSä•Ôêj :4Þ]Ø&9–’Äø*{iìk.eÌðf‰¬6]«k³455hóïLGw×Ù¾á™Ú{Hk«ÒEXë»û[‡F8,]Q‘Ž–Ïe/vÀ(lF—ѧß°Þ'ã×È¢>X«ü·¾M$ºü1p³ÎÊa!žzèT|,Ùª€=]£Ý6¼©®4«œDŸÆS&øH¡GëÇéaÞGc'”ér±/odr`xt@×'"YŸÛµ½Z@}bû:6ØIxQPö¦É+(+ÃË*¬í¥d‘O?ªèEŠ>g‹Ûé±ylƒæ±J¤£Æ?ÑÉíT¹å)Éü¸8B¡Ôä*$H ³lî\?à"çlUmÅxÅÏUúwÉœñ°¡z“ØHŠ¨SB*5:e3…fg“ß:å¸Â±,¿AgÚ£{Ž¸3‘¤®þ¼|pÜõèÉ?{álëo€1à'è2ˆhÅê™Ö«>jëCþ0ýx± ï¨Ö +WÑ“©"½ƒF§Í»z}Õ¼|õªy•/‡cù#P ÿÅ#lUâc‘’T½ŸšAkwÍÃsΪ¡L\ñ?SGºí¸…6µ‚Ì¢ö ‰%‰Ö†© 2Å€ àØ ØïnùG/·æί|É]Jüd‡àT±:ˆEì¢Â¹ξlóXµ)bd— 5&SM.Í™xv][ô;ÉF»­ÞŽôJ÷“¬<»ü ¼gu47 +`Ô 2ƒ'0aä÷tÙVueI)µ·4Á`Hä€ ½æÑ–»­·9h¿k¡sØ×ø:\ Üîª*o&ÑùærGÃê°Úm­^»ËÒ]æF: *GžÍ?¶;…¬a¶}Jÿ*`7 åà¬à 0Bcؾx¸„N‚ÏÀ»Ø¥´áD?!oËêêãö{]½½~®@­Îê‚Nº-ímܳ_|º0+ƒHI7fȸÑ×T\â’¼9_Ë=“«×(Äž)QÚRÒ˜o(,Ó«ëÕˆ¨á¶b ÿö韖HÖ^ºâÄTúû.}¿€QðVm†sÕ©’ÜPí´’W€{Å28S¯0Á¦bŒÞ¡Ö¾§? Ç1ÏdÛJà»ÌT#LAy>É(>ûô³Q?ɺü²º‚'©PŠþ$0ôÎûëãÏ‘+wÝýÜsZ¯L¦ÈQ×Fg~m.Q+ÑŠ¤|¥¨T/?MwÈœá»ê9âfué˜Oÿõ1¾€t©á÷<Ãÿ••sj–9–û-Ž9|šùšûu—÷@Ï‹÷ƒ’ü|— Cyÿ ¾ +÷ Œ ÷pø* À O endstream endobj 305 0 obj <> endobj 394 0 obj <>stream +H‰|”{LSWÇï¥ôÞ;uU©ñÖõ^uÁi)  ":–H†¨(0ñAxTäÍÚ¢ `‘G°…-B¤@yû:Á > 8Ÿdb êÔE£Ì˜ü®;ìѺìßå$¿?Îù_Î÷óýýŽ9:`8Ž;E®Ý(Û”˜–˜ž&U$d¦Ä(í'‹x λ8¢EHÿÇó…_`XMßç°c6dÎí](lt²'iüÓ3²•‰ {ÔÜWq˸>>žnö¸’[Ÿ«à²UjEªŠ J‹KWf¤+cÔŠxwŽ[—’Â…Úo©¸P…J¡ÜkÛý÷\¢Š‹áÔʘxEjŒ2™Kßý•0 ·-l®#6à [Œc^ˆaa&²éØ Áañ¼ÓažC–à JðÔñG3'âDš.þI~z4“(j å*ðØðøíU ò@,bUÈÃåÿrDn‘(¹"×n €@p×HD2VTná»›öá Á_¥GJ…ÍeÚfÚ ÓjWKÕÐd!W´•Wþ,¹93däJT>ÂW ã0ú@À/u6õ0Y•U.¡ê¼²H Š @ +ráä뾛Ϙ)ßk^!;•ÉiÒðµæáéŽîÁ’Gç"Vɼ¶²Û¶Fl ßB Eš 0Øœ ÿQì¸ø,×У5 +Á£a·eÕ¬ŽOY-íGëŽP棥™¹~Ñ3rWfjº4vC£­r“µï²äâ™”-ÁÁ +„G³µÐp´½¦K"~uûF2ÂÃúˆ­a)íf5{°:ÿpAq~aQ~I¾6_¯1PY'³­÷ñ2’®û ÐPåEüGÂh!×~"a“&ãeѤ IÝÐr¥®7ÒÃﯽ»1EéÐ a³îõƒ~Þû4ã~ÍGg:¦(J£È£¾T rDJy>w˜óx +f¾ ˜@Xæ¾â‚,iPRpÏn_ëZÐÓ`57Pè›é×´OÔK˜Õ}¸­²‰­o9UÛ#yi]½* Ë{+2ì…ÚË0Ü…[CÎSÁÍ\ºs°¦ù ’+ommáÏÀB Ð\äì‡(÷Å·|o2WÔ6KG¬‰hõÒåhyÒXÿ¡§,ˆñÞ_¦<”ÍæîUäí‘xGÝyu¥erœÁUu?g^L€ŸÝxÐZˆM•ª’'âñ@¨‹ºÅNwìYYX¼¡h’,dª~WEÁóЂº3mcÆ6 +¢‰ÿNß*•1¥$wIr‰Ë¾’ÖÏP™­'D +?ÃPÕéN÷<üøƒõ£”V“Š E‡N¡iá…EÞv[ö“÷®;úÙ¡§.üÂLù\ò<"µu ¾vüì3æBöéÄ©%)¶Ö_²l3ݨ¯0è¤úê:ý Ìhý6Ägû.»‘J£ÅÞ?܆ðE1Þ¬_ÙË-ÒH4Û¦äÅ üt와ÄV¼åÿ¤o?+Ê:ÊÖç˜ÒÛ[õ.Ú!íhÙ*ÈÊÑ/™v'2ê,¹lQú]qpÉfª•¨ý±¶ÃTG™ëÛ<—ôM§vr»‚sr™¡° +pF4®¹;{aÖI¼÷.D=ð³ßÑ q©š$‰¿|–éY˜SsŒuzª¡B¯;ÆÜÚpÇÍ’#!buÏ Äí#c—¥¨¢é»Õ?— ß—Q¢ÍcE]6ï¿]w×éý˜xDÜ Ap‰hk3·HLš:V> endobj 393 0 obj <>stream +H‰„•{TWÇ q¤mzÊ4]Élsã.§[×ÇjÝ]WZkEQ%¨øL B $!!yAä’ð’‰ $&BÁÇj­um냗«u]»zZíñœ:¶î=í»gΙ?îÜùÝû™ïçþ†L + "‘ÉdzÌžèñ±‹·eædææ,s²3S"üÙ¿ DñzðªïÎŽRÞ%‘ ž7`ò›0ë-Ïo_ ÌSlÈÈ„™‡Ä¬÷S±V¬^½|Iàþk}Z.—ÇbËDb_ÄŠÉIÍ +r…1/m‹µ>;›xKÄŠç‰xB 1úr¬L‹Ã 9i<>G˜ÅÊMÿ_•H$2q‘>FH±;„ôAE +"“œä¥äÒ ­A'ƒ£BÞ  ¬ |IeR¿›W2ï>R‚ü8Ÿ?ÿ\(;tˆF;£¸š$ñÿÙ'—†œ†k'ÑlØ7H߯jQÖc¦éþá³5+[)ùüŒ<5¦®ltÕ€HµCŠõéÑêʪ*@³«¥Gª +±ØyI{@,ûNŽ`ü¥Gjm:ÛÕhfô"•Ô(£w7ÕšAO!ÏCЮ¬t®(á¤qøEX¦ÝÓ­¿Þq8¯tut˜4[WßTmÂhýŠSðçqÈiöJÉçov݃ó'ƒïÍú0õD•6E =ÏP'— j%á¼úÓE¬{¬Ñ{ܹð ‡o2ÆÄ]‡8KR­b£NŸ(¶š +³S":² ?wÐMßì=ýH¯ëÂXfo*JÀ_ÛŒ¿µTE!–$pN7ZŒâ¼ømr˜w +í…0„.ÎÝ›ÂÆ ú/\k½éî6‡µkwŠÌ½f,n¨n0 hoS]ÉÄ°ðm1±‡Ò¹Ìèmé ?b¬<•ø÷¾=×®0i×—9ÿ*O©ÊÂ0÷4Ü>Ñ{ÍU‡ä(õDeMQfã+)Äpµ¸à¸‹‹<˜‘ +¶ìØûû…ŒÕî\GÛHO}sÈ=púôçHU„#”èâ¹gú‡‡ÁËÅjLSYçÒï†;OÁxÄVSiV`š(Ñ‘uíQâqϦç+¾Ó—ÎóÀ1Òá°6 S›Î9Ûµj3Ð$Š–I²<áa±áp3r$«‡?yɾ ;>4z\l¢,Û¢üb¤¦²¡BuÀ5Ÿ=`xw'Œd¦0×Çs"–3ðÐ+¹îî™ú§O˜¸"ôf|fØeFjô¦êzÌÒ©Hßu𠸀†€çIf‘¨$ÿÑï ¾î¤ òªT”ª|…bM&ÀãÄ1…ˆV«*ScŠƒN:U‰V‹hÔêb%CêP™[Î4ö1»}=PRëÓûÌ0è©qÕAÁC©p›Ó>Þ‡9í +‰Ô–Ô7ê}m}S#£µB`ÍÄvnÏÜËiòÖG"49~Ô ùÿo|êîRiXÎtÕí–z.Å}^‚ ¨§{Œ½ÍNf·ÅfnÇFZ¹ñK¶mMÎÈéº +Я”ƒÏSè±[,—úº}7;€¾ÔVÔU€ +:søŒýÑ¢]Ì;³L:Qç[šÁ{¹y;[=©çåÌÙEŠB†Ò$í’2ѯ•xH;)‰±ñ›Ã“Wà_½ßŸä{£½LŽ=®³Qa¬Ö5ô^ÔÅ6ŸÅaEœv÷à?͚ͥ&¦¡¢¦ÂP —£Z*;šN¸ŽÖ- &æ«ùÚµZ„Ø I–g`´ ƒÄ.—Âü€œðã©‘ ÕMt¾a¢ëÆì0H߉ ·Ç]0†Ž`eYIJ€&àÊn…Nhà û†æìË Ø§ªªsÕtøS¨¥üÇ’a,”ò2 °…›’Ö­@ŽQgüLŠ½æqB5DG¢€ltžkÎÿeϪU‰ŠÄp¾œØS²®ø.ìêTÙݭчè¨$ôNŠWÔÛt}øì ¸ u'˜xåöNP'¥XmgÚë0ýq 8QO6ã.Ê~…IÑ„9ßr¹z?Ý_H?amw•ƒÖr¹%K—f +*A~…¹ÐÑlŠK\‰?üÚ\' +ƒëï¢EèÿÃ;ta¾L-Ç”*£­äõ¥<+¸Ð}²£ÅÑ„Ô7·T›1smù±ZÐXjé21ê”æÌÔ6lÚÊ,HE|ù[ô«¦¤Ú(:²ÈξBæãïeáÊÄ—+÷(w+'ÚTÚôõc¯¾ÁíµonÛf߃°Û­* fé6]$Éfƒdvq O~z£ïŸÁP_§‹ûx +¬¤¼ÎZ ̓X«<ðycIJÈ_×ZøÜHY[Ø(nÅÌ.Œú >› > þn®¿ñlªôú õÏŠ çóÓ‰$K*ç’|Ö2m™jþ +ùÞ~(fa™Z +R$köEFd­w(,YÆBL-9ª"Æó7%Gþ)£ZÿMk¨ +äòÉvB »Ýc'r)“¹ððÕE[ÔIòÝáíº1 ªm ë‚!>ŠÙ奩A¾Zž O(NŸl×Ùþep‡;!é#˜³4+‰ø'ù· ,Ö ísž´G¯<ƒ¬É§“Ú[¨¾Px®>á;¡p(|{k×Î)Ü¿/¡ì–W‹s^6ÐÞ¯àÞ–é–—à‡ @ÕKp麽ûÿ€é¿ÒŠ^ÿÛ½äÓS0g*ùãéy\…ˆ ¢¹QËpccך‡§/wº}ÌÏ/z~¸Ï˜I_ÅÄ×á:|ÿƤ«Ymh¬6büµ gÊ)FÊ4òRÆ_¼hçqÍ R„’ô⍒ä;¼J‰±/l\ +3ÿ¥²ì_šˆã8î’›WÉç”íàNñ0"ê1²'„ÌÂØ–ù8ŸÝmkj»m7]«sºs·çÖSWÓ-e Yˆj†eR¤¦QùKÔwqû-øüŸ‡×ûó†@Y4MDûú)/òlÏdS3Ù”¬•ËC`ߢR‘nÔáµJl(®&ÆJ­¸fí÷hq%{²¬ë¿V…xôPôˆÈxQ›Câ°0"ÅY!{T†4Xƒó.ÎÔ¦ ÛoûëÕ©ÿÓnÞ=L!.gK¡tåøM'2ìõ ` ‘™¥ÉœOԱɱD÷!®O»8u»8c‰¾¶!_@Ç‚™2ÁaN²ÑÂÛM8¿?}ÓHF5ýª ®¤P“PIJ•…h}‰B^u‹ ËWóOóüº­5¬A*Ο“_Å-4éó8w{mQf-¥Ù íÜïméþƒv³ÍNpºwÉÉ$ý·Å™€zOhSw÷Žì[Ûš’£Ù¢ ƒ¿™E endstream endobj 301 0 obj <> endobj 392 0 obj <>stream +H‰|”}PgÇ7À†­žñ`Ù+Éj6=Ïž7Zµ¾tªwŽŠ/”Sª‚"Ú‚„ðHš„^^ o $€„×€" òâ»õ½Ú1ÖÃNGzG¹Þ½›ë/výã6 ×—¹»Ù™Ý™gwŸçó}yâ烰X,nØÁ;"v/KÅ2é[!2IB˜R(‹¼/—zH–'ÈOû z]¶È/ûù8ºĂ Zú€þEóîz?Ôn“¥gÉÅÉ)JÁ2ÑïooØ°z…÷¾F°5AŸ(ˆÌR(?R¤"™<]&*V +[%A„÷/… "Q‘(W1£s ±B (å„Ąò4,éÿÍ„ ,æB– È[ò6‚¬EÙÁBÞóAÂ}‘H$A‚½ˆâ‹T#c¥úûŒøfø>ös¢ëÐSlû¢ÿ(¶ »ñÿµ³ÎW†~è= 9ýižp èùŒOý +œìOŸT¹®Pã§.=áM‡ôï¬æ—úã“wlÏúÿÊTw¥žä;SY¶“t wëÒë+t*á†Ñß0Ý=Ÿ„1Ïi¢¬¶¬ÚXŽ•›¬%rè¢"ä÷,¡$ìO=| Y¹<,tÕJóm+Õ b”c4 xîw°ôž_˜ÿœOèÓÜzÓæÎÓý^ÏÕ§¡ »¦ëô´µ;Ù¬ˆQŠ3Ô˜R~DO¾“ÛðÈNÝ…ï걘ÜF®±å\7tÀÑ!™U*õª„[žÛ^8‹±«`àN’ºÅ[ÖîýíJ¹ºÂ¨¡òŽŸd£Uµ†’Z +WÿË ¯ón§6ò›cÃM‘$]ÈקÝÿNM#¹ºm³pp‰mìXmÔ›.çŸyÍG;Ô*8× ½³bàâ‡=bO1&Ý•ÆÏ”HõIäÇì!(cˆ¬Æ2®×.'9~6á=ŠN¡eDÛeÉO³PøFÇǾz¡+¼-üô®â`Ü^Ù¬®Ì¶kä?©îQ^R *îæ;±¿8?»=Ƀ×i¬•Føt%Ò§=ü™•[çh{Úͯh5f•gÝFØ À…ù¸Û“(‘©LV瓺K}9…ÔÚ þ ÿ((ÆÝÇN¨KX¹RQvœ\¿>6.†Úµ7žFVñ6Jè<5ÜÕØÂw5õ µõb¥ì£ï ›Ž¹rjÈÆg½WoPôNXA(D¡B†Å§dhòÈ\½£¹ÏòYÓÕ4Ö䬳bk]™•tÔê¬TQª|I~&Æ)e ש!©­Oxpx8Ù@àO=ùÀ&2)*[å…Ä3‚všŠjsÈüßÈn¤¤½þ}¢Ž’Ño¢øÓ²Ü\C¹{}jl4ºçÈ+xïö{Ú/tZkøÃgzš{îÌ5èŽìúœf²ùYïµëýíâœõaã¾óŠ³­Á†UZev²¾¡ ÏNébä4’%U¥fÊ3˜0A¡Ñ’š|§‹â´àëAV,„å€ùz@0sð`†ˆŒÊºx®Â`*© ¦Ûaó­iÞ`r÷¶?Åó·î.]É£çß“^¾ð¥ãïßð™}z‘°4ç%Fã–©ð?3Ø\‹ÍUå’³•.ôÌôªÕrÀD0(`Óè4> +é°ŽP¤;GÏ7À‚›ŽÄ˜¥±»ã(Üuˆ%êô®ãíj¬ïãZ¹Š•! «¿Ñã:3\LJ/<É>zT'ÖmÖa5J‰9ŒÙ£NŽ¡Q¼í}q÷4üXY†æ„úDVÒ©Áðñe)ï>À ù:uÒ ›Î‚ÏHü°à"?¹Vm7ó*å|¼êžs¸®©áTk×ð‰‡˜½ØV`ã›JšÊÛìÝ\Ž‘ 9A "oÄ° +ˆØ ø÷°ÆN”°WÁÏÔŠM L¸Éú"•(Â_¢³ÑÐl‡ÊE¶0ýºNe·¢L¼Í-›mî÷—¡pÄÛÓÉ,¥.SL¥fE&ìÛ‚³xÿ^’µ/>ÈÎ=”ÍåÐê9¤yÀ ‡ÀH hãSøÌ·Z‚Yðú¸wA•,ååV© ð©OÀŠ^´t‰È˜mFì¡ì2´¾¡§©’¬0ä$3È3´ =VÏ 3G&ñ|7'IlÌèhïêiW·&Pš±â9åõagj>ƒO=}Ž½ì9D|æÍv4TSûƒî¯îLÃ0«{ +Xž ?ÑÇ6FLà„17ˆéc,¸ A^ƒa›0yí­lÅðÏ'†Ÿ¸¤£P’UH%ѵ‘šHí~.´˜®6y?áN ýÉÝLÖÌ%0õ2vïN¹::›svèÉ‚³† ^†ôÏõ"»Œ<š¡Ë–RÒì]q{7—[¯¡uñö,RŌ˨ôì1‘!L2¶1ô†­ 3‰ŒÝñ»›Ì¤‘10ŸJ¦7h÷kö3HœÆÙtfåÜ„ pø%#;ÄÛ•Wb&¿p7us¤3³¤Çê^z6úCW +æN¹©W¤³]ÉNÿ)‘µ!†ü/"/—“¤=ïÁγú ¶@€/Dj‰kw\=ç¨;7ÎLÉ›Ük¥ðÃãŠ8þ΄Õt0oË©5€ñaŒ¥ô¢Hš•ªÁŠõúâ\R,í «¯»]VªÜ\Yb&Û[Ä›™füÚ¬‚¯|çÍ·B’'šíüX¥,UG‰é9‘Ú—é•õTß·ßåâm¶ñ“]mXc­ÔBšm…yU>V•g1XL“¹Òî4ÛŒM¹5XVnÉ S¾¿î0UÌ®ý”YªÏ¬ï”’z»ö&ô‚_øxࣧ'ñøÞ%Fb»ö»ø’Úä†V^›ÓÖÒâRª|ÜmÊ·ÕÙ0|Àf©vÔòþ V©þ¬a£We_{gbZ`„bkLÅrµq½l–xvmqztoeŸ°i€—~x{zsŒsdÏo³ñðâäû]”vø¹`¶Ñ÷ °÷²÷ˆŽqs]h~ˆ™«’Â÷›ê‘«³û «÷}™Ðû > endobj 400 0 obj <>stream +H‰„”{TSGÇoˆ7ÜzlÜ%^KrÛÜÔõ´Öî9]e},EQðADPÞ^ É%‘€ŠŠ +§ÚíRíÃz(®ö±®µ»Úåì\vÚu/ºg÷¿Ý3ó›?~3ó›ßç;¿²Ê a±XxXlèžÈoçŠ%¹~aTr¶8ueb#M°hßUê5^„Uÿ¸¿|} AjF^Ç×Í/G^}Éã³²N"‘ÊÄ'OQ¢M©o‰·m xge|Wœ&IIEÊ©ô¹(,7U"“JdÉTzÚ‘(8;[¹²K.ŠL—§ËŒ÷E"±\”,¢dÉié9ɲ,‘$ãEBÓ—XÈ/¼ e!árA±‘(/ä(‚CœAE¼6²ÉELÈÖë,·—·—‹½–=¼J‹ú¢>Çâí凭Â,\®q9^Éúá›.ÇãpKÈfø^& = ãÆ`ð®mòÝ~; ÄôÝ} d¼Ö|½Ø×Ø h9 Ÿ > dÂÝ™0d+ôƒkvÛ +|Á–/ƒ÷ú@è ˆKqÐûKŒ½ì§déh_öäq,,Ç£¸ðs<Ê}¤öÐô°ÎÏŽy6HnÂ7[? »HÆ®ÿï‰GèI)ÉX,ô÷#€7ýOnz†Â Œw“¤îŒû­ ¼ÑM‚Í=Jð>ô#¸*Úé¡Ö+JÖ]0ÊïÓásemåUÆ’“ü­?…h¢Æ@ßD¡ ci´«Sü%úÜŠý…á*>ü­¢]§Xæ¶û€èaÞ@–…¸‘úº¬ž’×ùÉ0[¹AuD“ÍW’G—š(_``â„[d®Ê!~eõZËÒ%Pç[ÉáIÁíŸ<¨›ó%ýjËRý”£—ïì÷ÔMUYÚ}¡c¢fLnU™˜_–­.Øm¾ex“n@¹õ4øy”56"ï²ÁÀÅ#Äfáš[Wª+]f+ù}7Øñ‡ï£™ýqIRñ apdòÆ\=#î_¬}úDUÛûâåÞF¬Ú^o©%Z{ÔG’’ ™BrE0O±Œ Ãk3íaNáÒ¼*-ºÈQªw@)Œ Â +Š0ƒA[ª#Ô5V©¶jK L¯ÓkÊNmcóņ«ãÂþ± G€Â6fk^O¾m(\Í=îéqÂãV+ÚH[‰³ÂaÇì¶Ú†:A‹YÚ&&M&ÓòvaÜ 5 +ú¸þÅçæBéýýyyO€†af¦Ju„Þ\Ûa%yont¸Æ9 %¨_'D&J´­ãb—“°WèÓu$ïÉ>Ø‹S׫ÏãÙÞ^’÷M]„Ÿmëê-'[ÊU­"C)–V’ùæÆ¢N‚{GýûÍÿ”)ÁQ¥¾Ï;ûDÿö.Ë/Ô©ÖÑq†Ì?±Tp½ »¹³«mj¶4¶ò2Ygjí«85âÔí!{÷ JyVÆù3ŠvT›5„vüôN²pÒ»·ÒpBGæÀ7² ¿hb51긹.ßÊû…Ú©šQ»kxÔ½¯ý ;‹êjÓ¶­ýõ3$—~“Q†üØl˜Áw–L³¼%½LýˆççdP:¢¤ÒÙk#yKÍ_µ.4ÝÆþê>å8ChŠJuJò„bG|ÐF&–{èw­YŽ"B§0jþÞãAob¥œ¶?¡S®ª1w'DE¯ˆév¸1K 1Óá¶3áºDU ®Ë:Õ ¼lÍü©>° +àW wY^šŽLƒÛTѪèâhþ|—}ªãÛšaþ´`¿BxLY‰j’G‚z4¦Ø*su‹ç/O’\ð‚§‚Q[4ÿtÞ0˯Õãÿ>ãÝžî«Áº+D—!+QCòΆ%hŒÊ"ï|á2©iAósÓÿK>ÚüUó òL†Pû‚\¹ëèÖÿO˜ñBî¬zˆ^7Ä:·rØà‰ç¥¨å)dhÊï¶@‘`Oߎ‡ç>î~rcäÇo‹'¦#„»à6Ý™ïu -5uq¹'}'Y ×ï…«“‹±R½Ê¤%¢¨wlÔ?C6jgÏæ5Èø`T£ ßó9ü€g‘72hnkk1·ÓT|%®ßž“ïjP“é\k“©(¥"Ÿ¯MÊVgêÄ…| Õíè¬ñØøb¸ûäó®Ó—„i0ÊhkÑ6oÞñØjqU©Ãq•ï¯ ¼’掲zb¦á³ñKSØõ›=‹7 W%Ï6iO ¹ù5 +ðì Ÿ±Aƒ/ KˆŠyþ¾ÚǺÁÊ +c5d& ÔÄhbT±ü…®ªáúOZໆ;°Á®«ƒp¸Lzi/q˜V‡­Æi­µ:+ê ¬NÚ™O䈈'Ë8®Ð)§y€"¸QêI/²fo|} ¼Ôøƒ÷ïhºŽ’Ù-I=gCÝîî¾ÎBEƒÐªwšëœµN‹ËìÂZÍéîL"1!'_N&$S•‚øIj> endobj 399 0 obj <>stream +H‰bd`ab`ddó ws òÑöÍÌËÌÏÓ JM/ÍI,É(üfü!Áò[ñw߯'?°Ê20LÙÅû=šÿ{ªà¦'„@jêó *‹2Ó3J4’5 -- t@¤‘‚cJ~RªBpeqIjn±‚g^r~QA~QbIjŠž‚‚cNŽBHW±BPjqjQPâ…Ìb…D…’¢Ä”ÔÜÄ¢l…ü4|&1002ð3022ˆ22°ýÃÀÌ Äð”á c°ŸVýw^Æß¹™¿óÔ‹®]ºxúÂ%™Y…EiK‹×ÈóÕ¯üñ`%ãú‡ßë2o™+ª[ü]ÿ»üwùÅßõ_¾Xü[ÿ·üoùâßúzò?þ±üÖ ÿíö[í·Úþßnßu¾kïÿîö]í»Zøw·ßÚò|Ý‹~lX°¿œñ{êMæïl?Nˆ^èd]ØÕß–.õlj=¸­Í°U®äû‚Eì†Û&–ú±Ý¯Ô¿*¼Ž¨ñ»î®Ú@+o0/úî"ú}’)LÃÔEìÖ` _ïÒþ¡Ï®ý[Nç·²öo5ŽÓóE:õþÌŽÞßGØøê÷~?wô»êÆïn3gÿÉ"šý{넹gm‘þαßSÏ<ÖÅ< kÙ¼ùÆÉ =M­ Í- í@Ø[?µ‰£bþÚÊ­Òg{Î/=°“ãؾeGÎJÝ÷}ö["?®¾&InÉwÖï-l3/°òÕÌú)7ëwõÂï6sÏw³}ožô§f:»ÜçJñÿ<œ¹nrÿ(ùþT ÀÀYF endstream endobj 283 0 obj <>stream +H‰¬WYoãF~ׯà¾5Cš‡xh1˜ s%»H‚Ùµ€ZiC3©Z¡òÓó:OKêkþ˜~ Ó WjÇCM'+äKFáKèT´œMc%ˆÒR5=lG•QÁŒÌŠxž• âr=S?…Ë_}íïDîQToÆŸv{vpgÉâê¹ñ`¦†àÑãÈ®¯•FáWaT B¹jVºt‘ŠðH0a\æE¥q†Ý©c Ky Z³3Öu­vôÿFM¥~ Á$Œµ¢TÞ:ö4<ï@oäèkY ¦Í O©:Šœ0C¨vÎ…¹Ý€@ö|´=!tçfІ¤Üã)ó¹E8´´ —@ƒ¯ãpêð‰Ì Ó(pz°¨A»\ÉI…H,bV¡/!-,3íƒH—O÷q[©=€íÞ÷/Eô×á5cü¢°C6Ýòïh³ÑŽ¸Úmä\èxÎs³Üð"3­Æ÷ã¾QØÔc¼GQȳö"€÷ˆ¯o—á¢$“Bωw`ùdÛ~ƒZö;N¯8£yá^û ŽC2!ŸÏ÷ÚØÀ¥:jõ; Š!Èò8oXµÓøŸyÔÌn‘\ìøEÒ£PÞå¤0G¤Ü¬5G—[àåÔSJ¥~÷á‚á²gÂEÍÓJðHò·½]r5ïyÉŽ DV¬/ßF—1Š£kµÄó2õŠçjo3Ã8ÍIÔ-òE¢Ç‘÷­‰RêË.¯ÏŽc˜}õÖ¯Ï8ßà`c¬„Ýæœu<É1Jª„k”OC5UL?(ª €&q¹î4Óf3ª8/± „^Ÿy¥‡«cj+4ŽÚs’_epÂkU™!?ÿ!ž`ÉOÑPK€ VT`ü£Ù9)lO yb”TžhZ)ºÚ8ˆ´Iäeê{6ÀÉ Gt ³ æ1q½îÈ Á±…Jh¼Ô%)¶¸{¢=¼0½GL} €Ç q>ÐDp—f¿pxÜ!¿"¯82Éì©8gìqÔËÚ7‰}âDI\\ò¾LxãÀÏ+©|¥*Nãy*ÕöÚÚp‚,„†ÿ¬Q³Þ•ÒC.™– IE§ôà¾Å6Â&è §ðÄnKâ²,ÿBí?ü)µ<2wìHü:9˜DýSzš<#Ûœ½™Ló?z%Lž4Ý1hR;&7Õ6¥g zÈbÀQ8R$à#ŸgT1S'umJ‡Û² šg–£ù1Éé~œGðjÆuŒMîÅÇî"s²ù« ÃtRy¸»Ÿö®ðR®÷üÁ:ž½cA!ö‹«2F—3÷$q‘{"’ï¶îá;¨wE%ÌÈæ(Âxé™»¹ŒÆR†àyCÒòÔ [ ,;íƒbD ?‡˜¤¡Z¹„jìÀ”ŒEùnOO˜·q؉ +hp(¡I[Žÿ´p‰¯™uƒk k~X\`@>n'"XÖ¢jE’ ^aUÀŽ—r ×È¡¯FüŠ›™Ç‡l˜Á%ëÀ UI—Ÿ¨%¦ãá ª\W——ùe>ìúÃüZæ“k‹g˜pUv0+nRò-Ýqh)X'ƒc„»ã1x/T¾¬g‰þ‚bEò¨Ã+¥Ÿ @ñk>K•ãë0Ì +/”ß­‡¬ðr÷F[Û¾önÌ¢ƒ2Í./tÆO:Ñò½ðúÂág=¿ÜýžIΞ_“——ø’ƒú6 VB80«nvót·†âZ8šPW1ê¾ «­ãÄZؤ„Š5M” ´ÃeâÍíQw/_Þ|»ê!–›ßû—ïß½Ÿ%IöêÕ«àõÛ7Ð|¾H™m¥Þw?Âhào|BÁR+˜pÍ L„¿ŒÊd|íXªá¥HìRÇ5\40Œ¤‚ª¸‚Êï9 Ê(·`DÀèèUù q(àÅ×ç…”•ðý eóicμu¥hOeP0Ò“ZMgy@ðïÆù{õÍ4záJW™Ù%Å€ZýH¾Œ Œ3h•ÆkŽ-¬ôÔÞ¹©Z#ëlüg-“7àr)›aKjÌé•9¢:hei62ÎdNÉCº‘u–ü¦E®haÔ¾ôó`#ß!N[Ñ‘ÃÞ½0È–Î4LÿÌ]oMÓæàé,ìa»Ñ¤±P»ùëuM{œ¶¹¬VȧB„Ÿd®°’{Ýv.9Uè“+a¯1˜0×Ôü>“ÕÙÔ¦5ËWg"™¦ ßi~¡òŒ ¡=§L—ˆ2 #°†4³c€p%B¾"3—ŸñƒN£Ùc3—¸¯’7«ï.†lErŽÓŠoI.GLr°'äúƒÙaî¼%É íŒ¯Ê(³Õ Æ_®F=ôÛm0­½árõSx¡­ÔªàV,ßž©Z_0ħvÍ].ŸMè©“‚ |µLž†JÈSÿ^·º†dÁ)²¬‡`j( cKhúÕ/@ñ Ɖ:¾ý Í1îËs4Öl.7Ȇùˆ3ì–ã€WšFžîôÚa²-èÁS•Å€áñ ƒ…æ¨þÐ ³£˜òè`G¡°ùÓÉúû0ãב«ÄžŸŽó8)E:N ‰tlÈë¨ÈFåÙ¾|ºE ^[×öì‹( mHà+mÈ”“ ÄC6ùÃ]†#ɽK Çíüq¨=‚óÓ÷^˼ËåNÐgÈÐ~€‚§›Ï'y—OJ.6‘;¸»wÏ è˜³ÔÂ=‹¸Óú…·ÈÓq“íΩ>8ï’nëâãAb6ïá$x;°¯?WrÉÉð¥R×zú;«’ è«,ÝÙÖ†WS©5*¬¡L€ ³ŠC”`ÍÃÈQ²Àæ’Twe?¹r7Š¯±C& -6sC;ãOÛ=“ç­üE!7CÃè½´ÆéG¨n²‹'7¤Iœ,6R5ª&CgŠ¨L–KA5M6päPMco\¾”=P¶I …”­nÅëÛ%7>ª¿} ãA? -[éÁæ "ÔóhQŽmш¢Ã’œÚ˜«¦q;Ú‰TÄ*«8`üê3”‹’ ;á¨y:Êeó”©Mï­ƒô€?zŽ^<ÆôʤØå°Yˆ±Ë=?³ãr$‹-JJˆ'Á0ÃO•™0}†cËùs¡É«¸Zd’¦pÀ”y°\\Ÿ¤ê…}öÀX$[C,‡²ê±­¡>¹Ðî'aMªðùŸøû3¾' E:%Ðì’Á¡ü9ùÀîÝ f†x—/‚uïÚÍ÷ïÎ,¤SKúé—"½O/zïºoº){ÛwVNFßÿ!ëšÈç)Oy1J[ßýÿÿÕÙîÏݸÿ`©‘E>’áΓS‘ðçãkÞáõÅCšx$ÒZê>½¼—G’üZ×,&p&'Ý3aµ2Âk㳓ç Å«¶ƒ¨,X…®½¶°°V…`¤ÄL*•‹Xå,‹…§ µ ,œQ1æ…`òµ‹X°ò.ÈBŠQ,j9>¾Ý*Ë>[T.bAŠ¼ òGí ÒÊÈctùµƒ¼÷ŠrˆBãòcyŸ”ÕQÞ{ŸÃY;À‚ +>ùÉ•‡Då P{¥c¶¨<`ðµ`ÅÀÛü¾rƒ€7, ó• ¢D¤{OÊd¦4bÀŠœ Ÿò7*aˆ+#lœiU{ˆ¡9a•E¦_[a–FìdWVóWjŸlHä!³òuâ”m’r:ˆ ‘+6•—Ø€´‘±Ñô¸ØT^Ù&*—°É'j|Ä´MpIJë²ÉØ%`7Ô",¨Ð£vÉõf•¤; _L*§lƒÃI0aÔG¦q#â‘xƒƒ”s7~ÙŠT¯Ä*q±jÅ +,¶ÓXÔvù`㘭<úÌRpÕ«Æ1[%åµT®G(‘lÅ +¤NbD8V Cã—WüÅ´ÉÏÚOŒ ä+äëÔ-aTJŒ‘0“ÊNµ_îtV™ ’ÂÙÖ/[± +±èŨñ#Ý¢çH£+¯qË6¨Ôã{L/êOW»IçÝØb:÷1oü² IJˆNé°c¶Ã4ã|ž¯SG±Bü% `‰-çký²QT,!æPŠ¥ñúôò÷µ²¥ÌBÐ öçÑØs qpèì.JÛÂQ†±§óøBáGû<¬ÊLý||ÉŠGË© ¶ÞSžt1Ë•¥®wwr,ÙN>Vu±×y‡嬗€ÆŠ™¯p» +·kp» +÷ l;ÆMcÜT㦷].¬H×qßï'â>,SÚÖ!#NÅ}<ŠCʈ9"U +"@ê!G»Pœû⸠Üw•éüñZn*Z®E쨬bjg%!Sû›?âúñWìÔýúñsµ1.cИe>xÍzcÆø!9&$¦£òNO8îj쇷¸u7x–§“þ/ÖóVâ3Ú)ô9&òµò¨{‡sLæ¥sÄMÇˉ¢žÓÍ©5£Ìš!±fÛ¼¨­ª-*ÉŒ ©Å}+ì%ÔHáVòDÔo(þQ¬½Æ=èÁ¨Á&ûpÜàˆãÅ|è'Å7ɸ…^~.jô>ÖSÔ»gšö¾ÝÇÚnæ^ç ô g^[ã[á ÷³~°*¤TV1–Õ©ÄÑå`DãÛ¡Ûª‡Ðüôêá,*V¨‡Ðõ>kÕCX¥’Š^ËA¢boç¸X§Ó7\St¥0¤®Ú¯J¬[•ØxRÁê¹6ë*:ú†Ž4¦ãÓGE!N¯›öî_¿C¬G¾ñk’íAÀݸ«/èŸ1p¶Ïˆø#ÈÅçˆ1÷ÆOc¾ÿòYlœBûã¼Ú/U¬Ø.4ò}M ÙÜa2 ¡{eáØ”EÌï°¬-°Y›r"mj+‡m>™Û•Eº[Y˜Û……õÊ%è.ë”[ÌêLUjq]Vù­Yp{(Â;G_bãõ"Z{¶Sì&2w]]„ý¬pw2ÓKÅîãí¡…\«ÿAocÜTOì·SÚ¤i¼Ë“û‡Ûáq[)LëòýÄß©—¿F?q*yì(…5·—+6á¤&<‡“šˆ´,&Hé òhgÔ„r4ý¹‘¾’¶’ö,'ìXNø¬è´ay(r_+·è‰ˆ%9CÑì¤ðUfi«Ì„©*ɯ©¤xPÑØÙð à4N5ðJŽ"în©sàD³"nÇT!Lœª¸í_ê»WC>×wÇå™Üœ¤ÄùfÂâÍÀ­;b_ae ?ƒ,ÛwþUŽÐW0¢ŸM•7÷ÉsAä'}…¼9‰ ƒSõâ‚­[V ·MãJ§å gÔEØL] ; ûÕE¸E]8¨#â÷r¢hZùµR7R•ÚX¥6žSÇ ŒºjÃÛïºö>=úùýWŒ1ðáþdà÷kõ1pcï¼c|}®8šJº»‘? ¸CÇY)ºkªÀc*EpÂ!.üÝP_¸lU°]Û5°Ý“‰¢}r™(œLÛÅ)œ¤…á$-‚¡Eiá¼2‘s8.H–•Ê‚îP´±²ˆJS49>‰ýÜÅh‡‰€‘½ê¹p«’¥#F\³¨‘ãUlzö´xCÓ·ŽI•DSÍ¿[Y1¦xxŠvÞš)VéKµ¹àFi¶j*A±ö¥‹ûÐ2%0aùÁ¦¬b”§Â"ⶉ%ñ†'Â"a+EÁ°ð—„E˜©ë}ª +a+a‘Ö os€æJïòWË·'–¯PÒ¯è]𔦽«Â=Óøö°÷L)ƒš³—ÐGÜ£DædÜžÎJçj9\ÀYáJ7eÊþ#N×î ûN6M…óÝLy"ðù+Ö¾n°VÑ!ÐÞE¥“›ccС¤ú¼Žkk¥¢¥®Ú¯J­[“Ú3ð$”jS;”ÿȯ+Ú“ˆ!w5òëŠvñäÃlßÚ1ð b´³êçAÀ×pe8™0í]û¥WMEШ’tœê CD<ñܽÄUcnz5n÷uÚaTÑØ#LjŽ~aí ¸ LyÑ„âŒ=³´°Š¡;zi‘²à¸.-Ø I9›3iµE’¦’ÃO¯,΂c…²]ï3«,L%,Â*aAH'2"y éÎñ\©óu€ßÚÜIiŠsB÷:ùv>®Ç=ÇÇxõ4âG~ð¦Ê¦Üˆ*6¤©’»÷Ó"ž”A9¯6ãå€ïŸ)ÐCŽ¦ÓyÿÀÿO}¹¥9ªÃ@x+ÙÀø³,ɲ÷tfÿ¯G\B|`HÂà§n: )¤’ê·ò„Ø¡U¢‘;³y§mHêp£ðè¤NOðä +V˜xr„}®ðÆzÇVz +[\1¼f¾ ÊÀÂe`á^`áR° GöÀ,ôÛŽ“…£¾):º°‰t¥'©Å“OáÚÚ€uÎe²¯±$5Y2)8‚Ý:[œ¨÷Uµàt…S¾_sP µõ±¨“{‹;f¹£Ëš#¿ÅÏwvy01^í”u¶x^¶:…×»(¸·5ÝX8-ô°TúŠD3if‹ˆaú«¹e-doðmyñݲ…¡H~Œ:rØæIþrkùDkSáŽZ£®Iù-ÀÇ·@*)–ÖéDø†®9è>³Š¢EàÍ3Ý*Þ¢|¿â¢ßÕ_ÁõŸÕàßCÁÙÅ2/:؆ÃIk°î–ʤC”õãq‹qZ*à«üÁˆZ€a™þ¨ÿ'aŸ,XÿMIeܲÊeå]\# )È‚×È"¾' éa¹sºÈÈ‚‘E4–Âô",´µ½0ëly.⬳!ílxu6¤å´³4bSgáúÎún#l±\>D%¦§«á__]»î´r·!=U¾~¢Ã–í•x<Úê|ÑGÅ߬Ý; (Öÿ­UZ”ï j&ºÿVq&w8›ºTv,~§‚ÃQór(¸'W½¦öHúiðÓ_±à÷ÑBkª‡‹¡œœ†¨Qø,h ,ä=XÐ#{àò¼éÛ¦Ë`Ðx;½‡Ù‰ç&?6ãÇ}Mu×m=5HMˆþé %º™v"®iŒ./7~%(®-·3Œ±Á‚p ö¹BW”÷<íª:G +H¸‚3¼à'Wðòi²Áñ1ß“Ø«¿Šëð¼‰r÷|D§u_fÎ|õpbªsåïá9õ¸@Ø<®|Qø/Æ“]Üäþ×Ük±Þ+wu9DÃ"W G.œþÛ“-"ú]¸Ð‚ˆ³n,H´Ûp2ªðÏ«.hù´.ä1ß“=0ƒ‹Á…4ÁŽ8Á—¸Eï£.£FH K_aO R¢šcìP5GçÆ?;[@:ý¥îTö³¿¨á,ÅSýA.'µŽºSŒ…kký ‡x#êX;+úºêa¼½h±'ùþ_n´¡Ÿm 'XS°/$¤¬ÿß öÏì@ûäÀšèDÓbÂ*p7È rÀä€ì“C4@&´"[wuÕ‹\x‘›½¸†„|¦¯‹n…pOõŽ=+û2ÕB®tã׫}Tö¾jpýÕÚ“û¹³SÙ˜Ê>¶eÕhuZ»S w’kÇBts6|w«k}{ÕˆRÓÃÍUM4l<5ýs_ã#Nª1P(T£²ýL,þIÜ>?DœJã+Ji=ïâÄ1ã_ðeüËÓÕÂò=ñóÅÌq¾<ÀˆZf„9Ñ|=ùs_ém_%í«icõêÙÙá×¥µò¦µÔÐÚLx ekûa3Ön­[­ÖgÁýfJœ½¡Ú¥²×Wîó$ôvå¾tëòbÜBä; ã<_añ_H×óáÕë°EùžðhlħS]Žv =é-IŠC×¹Ü)Q ºc´åQÝŒ΀>ïï“2Â.Z )ª`˜ò¥û´à -¸@ ž`Â-wNW Z¸ÇŒ/´-$G ™Ñ"6¡…’âðÂC…hlV/]„GƒÛõ [ ><¯› +÷¶>Ý_x\?ËÝ6.ÒŠ[WÏæý…G#5õ`€ØQÎ%Vñ€W[å;[± è\L°šÕƒS‚¯œÂžda5¿ŸdÁ¼OJ*y,H¨ +ò ȸB +®àŒ+0ã +|q¦\Á)WHÆp+È™ÀÓ n;QaG^³ãû¾ò#{Þñ¾¾„ ¶5¢¯’ +CòqC~Q¸VÜ…Æ”k*ùÎyî‹ÒuyE .kÞžsÕü¨òýŠÓ0Òýg4ÑÅFzþZÅ1U~(ç2« íÑ*ƒpßv@¼Õp²5ÖÓNÝK8²Ð(\\(…ë'3YD}ÒßéW²K„†"ÁØIW>u Èbù1“…_þ<edA/² ”,ü²8ƒbÐ{7­qõ +X¤’týñÝå?EÆE¸ö5p¬c®‰ÑW•¿_þCF ]ºÒaŇ˜ ÔåéÂ__´ +(a‡Âµâ¼¶toïñŸ½+Ïs¿ÞRòý­äþ§¾Ì²åu(<•Œ€e«q3§ÿÎÿõʘ78vrej¥ ³#mIŸÌý¬"WìjáÓG\¬"ÿà>íÐ,^ËÈ%†…=ç}\/€É‚¤Ë»x¥ýpŸ,Ü¢ÈøèATå:ñd å"pü0Ï«-hÿ6 dl/¶€”-(e “±…¼íc¶NûøCÈ«Nj‡˜Ñ¥©u¯ÔºS™1®´ít¡íâbá⡳:—u ¤ ˆºƒÍè|éŸ*ï›Å[Õá¹]vQïÜÅÇTùGt‘F\ƒ¤‹™¬f‡º!ÞA¸AºÚ*ç‹ßª«ay.Ð@.œYGº.„°1‡aÓ¥ ¡£ä­kD¨Z†VóÞG +°ÅÇF¼ßû“ñj§ |lÔŸÉNÊèÂgta‡èÂ,dÉlàx°Õ ožÚ!âÍRûñîÂ¥}É ôäi¿ßêRáhúî׺²&Ý7¨þ.í€ñËuôG\ó(ýIøé1—òD 1øß1è‹.6‹Waï¹ð°µ€¯Í2yJó'ÕY·fŒ¸X…ï4”ö¼vCçT‰N¦öŠ(ŒJñ®0è>ZXiRb·B(+g-ÜZØZø´pïР…æÅðC8„êعKh¤,³C+=²ó²Ìâˆ!_Â%µ¬ëJ‚¯•¿ÇÝç0K”c®üý K#no¡f-`o¹nüWtmÀG„÷Îí)7±Å¥ç‚€Å=-®«¶{«è8îîh–…å†—â´®Ó gŠxÐKdD3Vh¡v´)€ -ñõÐB"" §ˆÈª¬úúha2´ ýÉxµ£=6äˆÏ„G8E ÎÑ‚7´°ChÁ o–tØð6³eÆ"³0âÈD6˜«u7]iº›nñ£"WO¹Ùãf…i貪6¢·²[ ÑÍÜœq3Ç›ð€›oo­m]—™î6sòíÕº×~"Sá†ñOµ¿gwØRŒ¶wŠ·çWážKÝtä Xœüº'´Ì§.O‰›HXšË‚_§Í¶à Êx÷'ãÕΘò=²“öó^xñ-;Ö†èM$+¶†h(Wí9ü×øàGðS|àø#| Åx¤hFåZ DžOS¤Õ~hFûÈËÌÈCfÜUëÅÕnÌTc¦ ÕÃ…ªj¾Õ®&ŽµR•ÕokOšZýêó`¿ëWã²ûªÑÖ[ÚEc*sÑæÙEËß:Õ ó†Ú*lÏĶ6a߬…¼Ýöæ‹5 Å¦d6.²C˜Ð6ÞÕëk»ìÀRÛ1…†{‰6¢ƒ‹#ž3tà':àþmx¿ÞŸŒW;:èdžñ™ Bv‰o‹—j{`¼Üs«ðìUO—õ*éU/͆L‹>×ü­iȈOÑ°X[æôHŸ.[f™¢æ0›V¶œ*á^ѲRêÖJI—5ØO#mÙ·¦Â¬¢ïÙõÂç½4‡¦‡5¿ÏY†n±VÑ*~·J?‘Á)FºÈàå<¡½È U4vfð,ì3Ð~; dÌ/f€Çv?>ÓfŸ1ƒa‡òÓÕ6€­oñ+d5¿liM9ч߼çUù=±á¿¯ÌršYÌ3 #™M…À=…[‡Ðª~È* ‹JJŠ]94¤§Ê1UŽ¹ò÷ ~„=óG\öÕÆ_üB«(C5ßÁ*ÛîDῈ9)UϹ;Ä|s)ù‘÷«¼kQç”mÉÚØV¨ªNÞÙBáÆ|—--r6Å‘ å±%Zpü0Ï«-x-üZ˜whá‡ÐÂ-È&þ§\«íæ¥"±&Mì1š4«”g‡²šª6ج£½rRÙ\ȆsóÈb?Ž¢ÚkÕ„ŠYU ž£oη³TŸï\ت }.û2g{ä:Ú“×£lf¤:]dÆX[t7ì"†©ãëù"¾æzœ3ÔVxpm!èd¼S^ó“H~ÒFŽ¨O^xÃêX/ e×aŸàƒÍ(Â>ñ÷o%èýÉxµãƒ~lXŸÉ|ƒv¼Ì­ã!0ÒbZ)3£)ÌhS3Žq¡Mýhr?ÒˆSáº]E3 è£;Â9Î…pþg‡º̯[ŽMhûBøû•Í>2çeÍ‹šWoºciJÃjïš3;ö¶cñ)#.]üÍbò#(ï ƒM¬˜Q¸üInK²Ñÿ"N„)½Ýu"ªG^–¯]ì²®ÚVHÈ‚ ÀØÈ‚öo²° ²ðí™ä$ûŽ,üYØ… »ØÀ´VŠ¼˜øäbâoŠi.Ш\G8'µ¯¿ D÷0؆”0éø‹I—wt°\Ìo)VtcL4—UFØbJáÒ'©ÇSZEŠÓŸ¿8aqÚÑ-…³¡r’þBø‰fQZŽ .7–K³ùÉ+]È“ÿAÃYߧ ·h JEÀúà.\†æy•ÓÅÆѼèÛýŠ.LN.£ ;@¬@"äyB¯Ç’KEr9K®Ë’ë^Éu‰+9u%}ìÊD¸t^¬«ékÙ ÕÊæTöG–Ì® Ü3àlFÝ„øÁÝè4á#^é[E9u…U~árv“™å`bÜA¸DÜ "ô\ Q"®¹ƒÐ˜ ÇB8^*\ É“+\€.ËWŒX‰BNØØBc—-B@¬ÒAÑhüŽ-ø ¶à“ÙÂÄA$ÿêþõyf‡vŒ¿gö%üŒú¢ô?×ÿ®YÊȘ;Æzq̃ÛÅlGª'Å׺/Œ¸Òº3)¦´ŠtÈSÅõºÙÐ=-›Ê„Û«ãýà7‹áüP™ÖêR8I6¢xC +²‹VÞÉ~‡ç²âŸD¡ãàç (¸ +ŽPà (påß +ñ„á -O€õ¸46g3¾Í+eybszcG°c*üp‘ûZwC6¤ºýˆ#+nUñLx£å¦ ùzáÒ´é­¢¿£p‰8ºŽU&õ¸q¾žó{Ãh¸ºŽ(ï wZ5çóÜwMÐ*2c¥(E8 òÛäHÞ°ƒ…ÞÁBVƒXHDÖ †T‚ꀅ->r°°C`aÀ¾ ;,•&¶‚S8wÈåÜT¸œ\ò·Â¿'ÝT8r'ìrC•ôç]î%\*ÉÑ-ukkËJý…SΗŽ "×Ht‡˜ƒ©ºî=ÚŠAS›eþˆãb:Â? ø…ÂáHøÄVp¼zœªÚDѲE«X(ãú`a4¢}Í$Ý Ùì.D yÛÇlrå ë¤Ãæz‘'–ß&Ö§–ô¯¼ú¦%ù K¦Â`-†”CCú%ùsK¦Âí¤ßA7ÖlqáÎSsŸ›Z8×kѯ…çHÄÕ… >+¬YîVqJÕ ËùÂÑÈ-ß(æÚ/ÖÄÅT!'ÙB^ëŸ7-A-$^Ë#+ÝZ,Ï5àÐÂha2´ ýÉxµ£¥haÙF Z¬×Ut ÒS„d]JýX°.ùñ)[Ö9:ØDo Ûó-eV¦»±X¤­árݼh:qÓë–îÂ[Ýö áï7¹qá]ÝŽ|'ÞsúÛk(Å_Äûtå´0]!üd£ÈØ óöVG4~í) +lY›ä]$ +-Dñ®–»ÔG +^È¢‰1A]¼@òDpFüD +Þ¿ ä€û“ñjG +|l¨ŸIN²9R¸ )üRx™É2ÜVä¢ö*÷>¹eÅ'f¹íðy"ÜûÏ¿–ÝP}ç_Yr×Í‹Q¾CqS +íÀ4·Š©b|Õî \º—²7&4gúz«°QW7•?LºD8’¾cÄî‚5[ÌßU„BñFÝÐ-Îk۸ÒžY&éJ°ˆ‹6°0È]°@% â0–ŽÇÒ;Xø·`AXüŸýªé‘㸡wýŠ>ζ]EÖç5²/¬Ëî-c£X4v ¿>dÏLWÍÎ×j#y„°š©²úÉz|¤FXÐNXÐ\X„#¢^.,…è àŒ jRÏIí¬»YL©¥3Xwshñ‡æ¢gྠ$c[’tNIÎ#\8ØçþO?ùiàOÍE ì– +^Œt?7à™Ëu¼úzPÊý‰ï&"öÛó5œ¨ì“á5”xæ¿F2¬œ¯*âA^)í‡öK¼TÓèÇqó°$>­+@­…lʾÏãVV”£²‚YáYáw²ÂÏe‘å ¬øËý¤, aø ïñ÷ã0ËÕnÍw—àÆôñ¦AïÉl½ré\™]G–+MAžP’ + ÈLPËF5o»á¤ŸŸÒÌìY%ÅaÍ\``mföý€f&h{_óÒÌìYË$³Ž½2J_ŸÌ$Bˆ+ Þü$þ?ÆûÚÑCÆ?û¨&\×9+á–Û$gµ¥èÜ4³ÁÓªëÖ¦´ug%LÆhez•j·ÖA ¤Óh[¤•  2øBGF‘2ëÞC oµŠF?Ö Üteô¼uï!ÝF§Wi7ëÞEŽ’á*[ÒºˆEBOöb‚Z´.°ˆ"ª<¢Y÷.b…ñZÌ&èïëÞIH,ŠEÒh´bÀo0€äËú’ÆC *z>‰ADœ×½,ryëjGm=ÄŒ$|™ fã\³ ò0éMY÷b{†ìÜæQ1´RX¸hJø½zR‹™ƒüŽOÑb:ƒ&½uÊ’™RŠ±€PÕ¢qQ‹$Wh@QÊl¶î}ÄÄKס‹cå×:©MÔZ›œô¸›‘´a¯\\1£ÖO­"F)©]àÈfÕ9ªUEÇ.j•‹7«ÖQ¯^ÐñSnTô«sT+(¢Ó9Îsî>pLW¢n¦Ç„¹’¶ž¶Ò L_ñ\ÅG\âÆÓy›-Ýä° ÊaU‘Ń"Ì6£GŸ[²ä†£ÉMóäú™cõÛÜúa“q±?œÙÐdö@b7¨#4eþ’¨yŽš[Ô|êëŒõu¢^*d©oõÑV|9æ'!Ó¥˜õáë 5Z{qèñ1ŽÅ•Ô Ppu’úI>Ðx†xÈcñ©"âYhT:ÄF:p#x'x.âÐì´ÝO_f« ”aËLõ%“º‘…t@¾L^¯øËõ´K€?¿­-À¿ð¥Æ—ˆë¿BàÐŽ\ œ!bhqL¡L‡åtRZáí!ak€®Éïi‹¬ÚBÎyD\„F\ÐÖÓV[qAsq‹ ¼íru[ä]:™\n²ºäÆË“çÉ mrùœä.ÀàO~LΧÃÜônps‡›Ü`ÓwœãŽ-îóÜñ¯ñ«¾”Ê—ŠxkLÀÃX +6Au‘GW‰‘L|‰©ÉV]”FV¤ÏQõ u‘ZuQuQÏQìG*ŸJnh’»ä¦Ë“{¾V?ÜëžÓ˜#×ãÀ/ÑêKÄà ð—~¢I?ãvoÒih"Ñ4éMÏ>Ö¤w¯£Ï9__į®TÐqk ðx]*¡å‘£© ‚Òp4©‹­(ÒÈ’8ru}HHŠtTRP#)h')h˜žïIŠtLRäs$Ep#ËÃÌm™ç¶ìr[^4·ßðc¯øyÀssäzxl€Çxü:¿Ú_€/À¿MVá:–ŒÎ/¬â·êªþª.þÇ~Ù¦+Ëë`t*Nàä¢ùj2ÿ‰(ˆ”ýEÝõí/¥,r§í0Úd +ñ\p‚aÈtR.òJ.ä ¹K1ÒËrÁàJ|.[ÙÍö¼8Ê3M9ƒŸ˜M ¼ÙŠwðþéàÍ®*Í‚·×*2X(@f@ä²âª£[$÷™Ñ-‚"û±\(KTDZé‹[x[ð¿ÜÂ÷Ý‚oþ K·Ò-ä”[x´"¦£hy7Z]F›ɦ9Ø´ÌUwråª\;u§®¤Þ]kÿ*u¼ e‰%i—ZV%µôZt_wê N±_bÎðR@3Ð&{È1`šìáØ$îi±w£pòõ,¿mõ yBä.2ÿzuš¯fy Ë$ã5…†Ì2ò‡<Ƀ×ȃ„U‘çs±ò^¬u^X$ËO$ÛÁ;xï༃ÿ8A6Ñ‚7­x|? ÇÄ[%XËÄ´÷ëýh’ ž½:2™À¥Lð¥ðe™0°œ7äž%íf)E–¶ÌÒYÚ2KÙÉ’ª²¼ƒï¿´•V;¿Â•àÒÁÏ€÷VéÿôŠ7 Þl«4ÎHtA‹±%aNàŽ7£ø_ðœÆÓ)Åw?¶ OÑ…®j_ìÂG»°óváv‘—v!K»»]Øt8LTØ…HÒt.\Y…ûª)ÊáÎàgÖù£—ÞÁÿ2¸1 é 8>MŽègÉ?µâÍ‚÷Vù¹Š·‚+¤”¨àf@÷I.r x—‹…CµP†äÙ¢ 9*“Ö;òM®›½j‘kÔ"רÅ<Ò<Þx·ñðŒZ$!{§©W%û²7vð_?µzU‘ï¯^õä½â½â喝&Ð!iÕ›ßJð3oZ}Ui<ƒºç˜œ)î¶äÛ0Õ2ã¤"ùX. , c«$w¹H»n!…[Páôp Zº…l»E:¯!{æ Y.’ýfiäšd;xï༃—àúù¾…Ö“8Q渊aN\F·Hñ€9§ÄøP-2gNÑ„¨._Ôâö|r}Ìj·ÀùÊñhv ¬t‹¸Ûy¹ÈÀ4`{Ú8ƒ·öN×>xo•^ñÊŠwðŸW‡tÝÌvÁ©§8õŠ×€+xÖPË`’´ç0¦4ÉE¢:žN±e:¶ ƒ”’´ ]Ù?a|)|Õ. aP³ö\½ƒwðþ×Á=ÅØJ?ü>JKr*Éi×çÚ¯x³àêÿM­RC¾ž@]Á=þ³ª¸„Ðh8vÝhćr%ÉúƒÙaÀ¼ž=r‘wå‚ +¹ ‡\ÐW¹û•ãA!rJ.ôZg9™íZ_Í–ŸÈ¶yð3Ë@÷‰e`—{kèà¿~j~[Ó’üÜÝ'go•“­Ò xÜ‚\Á(—­¢ t— ¡»\8˜Û±]d 3ŒéC ¿ÚEþ—]è®]à|åx4Û~µ‹yÀy¼‡]ä3v™3M'ÚÍVŠlm9ì­-§“ìL'ª™N3øÁö9n Ÿ%ïàü=àÍNÎÞ—ÃOíñ!L! +f ˜K pÇÑ.’€ç4ÙETxÈ‘]8€â1tìê¼Îr– %@ +¹•\H•\ø±\X!^%ñè†~²)eî«/òDSÞÁÏ4e÷ö¿^2v¹·š²ƒÿx³=ÞÁ;x_ÿx8…}‹\(¨²É…r‘ß-¹” ?-<\ÿ9è[·j6½h¼ü÷Àß÷ŽQµ ¼úŽñï༃ÿ9ð¤*7¹ ¥R.B>F¹pÃñl†dv¤<$ 0&Œ´á©pŠùcR‹‡q\ ‚ +µ ‡ZÐe:?^³©©0‹\e¥s: –‹`¿ÙÓ¹&ØÞÁO‚ï+ÑÜûJTϽ¥D½â½â½â´â 6ðU(KÁM b£X$-ùv:CÎÇj!à¬hƒ¨n¨Åõ1wÜ‚ ·ÀÂ-ðáxs¿L×lºEÜm)^%æ¹Aiœ¸Ým¹4aSM+l:1—ê±·æÒ;ÅкVÒï®7-Á©§ºz7ʽ¿æ>Ýûd—»Õõ¤UîÞ'?VoæØZiˆ‘Kp¦É)Pb½ÁÉ)Â>:E¨‡dÓ¨‰AJ±ëo8…2¡ïv +-ÂÎ;Eø”h{¢;ƒ̦o]Z’SI¾?›fðÖ ½ýVi¼ÙVi¼ÙVi¼Áu|°á +~}‚D+»ÀÙ.Ð|új ©Ð‡ôЇt™Î×ÔêC®ÑF %: ‹`iì2v¼pC¸¡/²•e¶Tf‹Ù¶~°Ø~¸,Á¥ß_oÛ¯xï=^ÙãÍ‚7Û*ÍoŠ^åÂ%­åBÅ&¹`ÐØ“G¹ˆì‡rÁ³Gz\‹¶e^h…¼Û.¤´ Â.2 ƃ¸Û°Ö¤1 +¸UïG¥5R‘íF´¸Ç¿Zp1›p#Ü|¿+¹èÊ]ß­ëÊ=ååš®ìÿ­Šlß^SòO­xÿap⋨î¯*g¸jUinr*ëXqb* „CÓh˜ÁXÇÓ8€™ÛE5ÒèBNîv!+ɘì‚ç_¯…]àÃ.ð& ~™®YŒ”÷ìÂkìB(z2\^…ûª¬óùpgð3›ô|TrŸÙ¤ë¹7¦ÓTüÌÊû6pZ‚ŸZy;x? ÞêªÒlÅ\“©„] Z . >ÉEüßog“B·n!×ñÝ¢LlüÅ-¼p‹¼RŒÒ-rá¾áùn!{n‘«ÜBãFoíI+¢µG´öΞœÁ߶ +Ørø‚ý¶UàþÆÉt¢â/L¦ö[¥YðV{¼ÝŠ7 Þ[å‡*.`ÈnA0 ä8Cö4ÊErHª“\Ä’ŸåØ.\c7G'àäþÅ.òÍ.ÒÊ*¦£I.tþõê<_8ÍrÁ—I:Æk#åB.Rá^ã%OǺK?™,U$Û¹;÷‚{w« ŸÜ*¨f«h¾Þr¼¨|wM£|\½Y“ß&æÀf8dœŒ‚M&£ˆ§c£Ðâ¶Y“›Ä&?xáÿg¿ v$·qzï¯ð±çЊ(J”xÝA. H{X¹dd± ɻد]VÙ’»Ê–ª=ÝQE‡A•\–ý†¤È×óGTŠÅ4FsÀyç´š•‡¨ÓžÌQfE™Þ6-uÜPâN9'ÏÙ+Jó–EiJŠò ¾S•Ÿ ürUš’ªlµWÚ‰Û^žs7pß>çòJ¹6çZx?œo87].r¿ËýEj¼ApÍLÒbÃ>'Eˆ“]RN¾OvÁŠ÷Ý‚”A „a£ˆÌúÔŸL`œöar—¹…;»…MÜÂ_q âžÌRfW™Þ6-uÜPà^+`´»©uYji•ZŸ¦ÒÌÂœXHòêÓ¼RžWW×™z§é~j—R»œz»ã6ëív›6ÔWИB_d6µ¡¾Òk[¯ë~ﺩ +!Veú¢6 +-„ŒZ„Âûh(©0ѼˆFØõ HðcµBIãŽ>øÕGÔœ/–™>À¢0ÄëÓžR}ðEú`UóYåâóÇEç¤ci^¼¯º8Þàâ xÒâª"s¥å´$_¢§ä˜’W)í ^õ÷æaà%!ïï?&⽫ôˆßoÄQ5ª`q펣ZˆyDµ åe˜ïª…째a£ˆÌº]Ý&p™Z¸³Z¸ù×Ñ 0S \ÔO¦ÀCÜsU- 3 .2 )Db¿›X›%Ö­Kõ‰¥!«,±¶$±üÝÀ7›—]ý¼yQ}ó¢! @Ö¼lQój>â;Jô™ÀKB~¯ïཫìv –D-@gp.çUÃäàå‰g·0ŠwÍ"hNvÌBs¦´R ›©…ÉÔÂ,jaRµ°©ZP¦ò¶j·®ÚÛÊš´«š|­4Úúšìàü/^击¼Ê-Ú¯™tó*ç®™tåÜW&Ý€·v8Q‘C·0JkǸSÚE·0:q 'Ú°/VùÀp-$'q“øÌ-üÙ-Üüë¨8oœV³[àcÚ“ÉÊì*§—M+ï/Q‹ ¼updI†´$Ã’×plIÎàÇ•dÈJòúA%ÙÁ;xÿ³ƒ·Ú”¹Šˆ¿Bæ.a³ehé ·ä@G³Ÿ˜…Q¼/RyÆ{ ˆQDfÉ“Ȭý)^E³°ó¯‰Yø+fÁCÜ“<ɳ©Lo›–:n(P F…Á„ÝÌâffm–Ù"i´™Å‚Ì.à›M7›@Ú" +5Ýn%,iwñÞÁï¼Ñ®‚Ú+툶Ákþfí°µˆ‹'˜à%â¤ìºÆBÙr ¢ +Ý‚”ö»rÁVi&ÃN£Ý‘ ¿úˆr±8G\ø!î)• _$Ai®.·n•[ªÏ-¥¹u·ä6‚W¦ù#¯9M‡7ñº‰Qòí‰AC‰ú‰ÑÁß ¼áÃÙhÄo­z%•m¥ÆYQ€¼ÆI¤(V±LÝI.‚òûv!·i‰‰~!<ÉEØ” {I.x[.ì†\„j¹pÚ("m^—[Ÿæ’ÔÂœYHë_™ØNý.Ô¯i[>m[v­5wŠ}sÏj>ÖmR÷ +é±¾+j£ˆ>X™ÂÎfÔ(ï2“>€SdCÔ™Ñ'­ØÔ§Q¡•ym˜C´ö?ùgâ@+ÀÌ`Þ9­f€ÔpȘùßà¢?L¼wŠLvŠæ˜X—\æÑ™7 ‹†ô ¹!;ŽÙA2Eiß.I³:øyI¦•:“›+è)9¦ä˜“ïTeûàÍ–J³àÍ–J³à– +‚U„&¼AÄ{•“ +ƒÄ” ¹x&½0Aù³^¹“`_/¼bÏNB"±‘±¾¶ .± ›Ù…™wN«Ù.LjöX»À0’Û;Nv•Òü8eŽ®9=N¼$–K5Ý–Ôä¾]“6CÞÞ3¹¹‚ž’_v^[P“wÞK¥GüÞ#Þ,x³¥Ò¸ `ԨȳÏÀQ1ÛI.À‰)àtyüÏzÞ• 0Š@ƾa§ˆÑ¾° ³]ø·µ RÎ[S—\»J®«Onf¼ö–ävðw¯é¼óêâßE7ûãÜjk:oï༃ FƒØ…h‡•\E·°Š£[è2·ðòNÇ«À{Å-`S-\¦˜©.j'Sà!™—˜…eøÈ9Ò9–´†CçÜ~\E†¬"_ S‘wÞK¥GüÞ#ÞÁ{o׸<Åù faäË µ`0Ñ-œ"¢[ÈGÚu ‰I`ëNnÁèÖ19»…æL.üJ.l\ø!îÉž”Ê…¼-µ _dNË´—\¬H.§É}!ÉÅ¢ävðwßn`XÑÀ^ý–4°öÁ›-•ÞçÝNdy#j+3Zžp ]rhŒÄ„Ct“]¸ìÂk(a +“ëVÉ¥úäRš\WŸÜ;¯h`sÃʹk YêX?ðfk¼ƒ÷®r·‡S#± TäÙ¯í‚íl,#ülìy×.PÆ81KLÄLímva3»€Ì.`± HíÂlNÜy\n!I-Ì™…cÛ¡;tôaÒ±Æ>h<4éÝ¡ïå Z‘`±«Ð9·²`­Á(ïýt™• v_œ +Ú“ÄÃ+& +/¤/I­¤/IoKžÄÀ8-2ipUÒÀ£ˆP]5ÚM# ©†ÅÃÕ‚´·dGí•vDÛà.¿ò·ÃÛ‚7ñÞÁ;øŸ¼f@õCsýÂŒ¶7Ìè¦Àÿö¼–‚/žá'‹çŸÂéÆ0XÏŠˆí`•2¿ŸyøÇ#h­‡OžðñžÂã¿Ço²t¿}x‚ðøó/ŸÆË¿þç÷!ùiøýçÿ°²øþù«‘ x´…Ñ“Üðüã!Oýòùá˯?cZN‘'‰F@;üöéáïïãÿ†ßÉÃw¿y€1 ÿ•Õ?åßWC’J! +äï ÆÈýëŒ=­ ù´–¼z6ñ†Ó×éžxu¼í|u ñÂ`à´«á´~ß#W L7Èçt‹|9ß4~nM&x=Á7ýíà ÏsÙ” endstream endobj 264 0 obj <>stream + + + + + application/pdf + + + RBPassUp + + + + + Adobe Illustrator CS3 + 2008-07-02T12:00:47-04:00 + 2008-07-03T10:50:43-04:00 + 2008-07-03T10:50:43-04:00 + + + + 248 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAD4AwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A61H+bWqXMs4srK3njjnW 3j9NpHdnuI5Bajh8DUM8Yjdio+0DxHfGGcl3R7MiALJG1/Kr+zcK19+ZevQ6jcWMdrYK8F3FYFp5 /TPqvLHE0hiDNKIj6nIMV2X+bCcsrrZhDs/GYiVy3F7DyJ58rUNX/N+503Ub2wmis+dqVjaf1H4J IsgjlqjBJHFTtxG3iwBOA5yDTPF2WJxEgZb/AICc+Q/PeqeYr+W3u7a1gWGIs/ozxvIJF4dEDuzR n1NnpTpStdp48hkXH1ujjijYJO/d+N/JI/8Alb2oqt5JNb2kKRRSyW6u7fG0ctuBGH5cXLRXPL4d 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 hj/KCzknuHtYI/L8Ty3MShpI0WyBZ1U9SAOmAhlCQBBIsdyeaLpOmw29heRKJbmOxitI7wgK7QKA wBA+EVPxUGEIkQTYFJrih2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV58v5VTm4t5ZtWRhHqF5ezqlqV9SG71SDVvRBMzcWSa2CepvVGPwhqMFWXaj5X8s6nc fWdS0iyvbjiE9a5t4pX4jovJ1Y0FcVQ/mGfR9O0RNPuLF57C8A02LTrRAOSSRsvpIoaMKvpqRsRT FVCLzPJFEkUfl7VVjjUKi+lDsFFAP77Cq7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/F lx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2N K7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof +q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/ 8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1 L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NK7/F lx/1L+q/8iof+q2NK7/Flx/1L+q/8iof+q2NKq2PmqK51OHTptOvbGe4SSSBrqNFRhFx5gFHfccx gVO8VdirsVdiqld3KWtrNcurOkEbSMkal3IQFiFUbk7bDFXnWq/mj5Uv20OQW2oyLLPYXGnNFHCF lvL6BZLayJklWkrQ3Su1aIB1fbFWReXPzF0LzBqUdjYRXKma2F3BcSoqRuPRtbh4x8ZcOkeoQlgV A3IBJVqKsoxV2KuxV2KuxV2KuxV2KuNabde2KvOovMv5lQ6bFO+nrPI8frzepZzq8ZmujEkXpxOz ERR1duKs/EDbflmOJz7nbHT6cyq6/wA4dBfXvO3d9yY6P5j863EWpy6hpsdv9St5BBCLe7DyXKAB SDR+cUhqQIg7Add+sozlvYasunwgxEZXZ748v1++ksm81eeYNWMkWiyMDb2xuVNndsZWSD1pIomE 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 2DAr/9k= + + + + + + uuid:B7D572641149DD119EEFF96D7801BC77 + uuid:b46d8aee-c25e-b541-956c-22fa803ac69c + + uuid:d81eb84f-0775-844f-8950-327b309a2838 + uuid:BD14D8DC7C16DD11BCFFD65EC7B1D34C + + + + Document + + + 1 + False + False + + 23.000000 + 24.000000 + Picas + + + + + Minion-Italic + Minion + Italic + Type 1 + 001.001 + False + MinioIta; Minion + + + Minion-BoldItalic + Minion + Bold Italic + Type 1 + 001.001 + False + MinioBolIta; Minion + + + Minion-Regular + Minion + Regular + Type 1 + 001.001 + False + MinioReg; Minion + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red + SPOT + 100.000000 + CMYK + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + + endstream endobj 60 0 obj <> endobj 266 0 obj <> endobj 271 0 obj <> endobj 273 0 obj <> endobj 276 0 obj <> endobj 277 0 obj <> endobj 391 0 obj <>stream +H‰„”{TgÆ'@Bê©é‘1•dÚ|©K][ë…v/Õ­wEQ\•  r   $!1¢¹ +„@  ä& ЀEwźÔj¢Òª]—Uw«=žýâŽ]wÀžÝÿvÏÌ7¼óÍ;ÏïyŸ„H$ztBÔÖؘe»øyüü¼åÑ®€höFD#ÂC”oá¯üç½ÃäwÄÔ3¦¼U zÞ™×6»O¹9_(ñ³²%쥇>`G®^½ê£ÙëÇìùé<6G.–ðrÅìè¼Cù"a¾ˆ+áe¬`³7 +ìØÙ§ÄìXž˜'’Õ×Ø|1›Ë–ˆ¸¼\®è0;?óuBq HÈJÙ„ [$ +A¶!»BN²A"@E‚`$i ±I—‚ØAÚ`~ðO!’!²²„Rº$ÔN}‹Ê{cÁvmFé |ç%õOÀÖÉ`Èm h„+!pb Á•±G:|%„€X øÊå ü‹Ž/ýÂÕ¥ùøvH”?¸£à7€zdp¾£Íœl t9†d¤;Ð 7.Ó'ÊšOT–g1>}¹YWR©cè%dh£Z"%U–ÆóÀ™=Òò + >;Ù¢‘¾ µ„Á¸n´ "/XôɃ2«DŒÏgpql±bŸJÀPdç+ÕK¡Žè³Ã ª«èbTxŒšžŸƒõáTo¼ô’”›wšž[GÌ>†¥Ã[?Rih Çu½dLïT”ñemÜ‘ÅÉxux¿°‘iO”W“¥_õ*dawáºITûèÕªZÌz·ð<@íª&ranVÓTÔûª@#¤8!¹ùY‰!\UTY©¨À ;ZY„ÅüŽ—œb8I8)‚ùëÓ²fÛùöz;ëÜç_ ôS+(yPNïh(ÑÙA)O¡( ¢íE‡3ÓÅTn7÷vDëêé¨ùÆ= +¼cín·•Š +Œµ6ƒ£UþŽþ5¥?Ì?EØ4Cè’üý©,ñHÿ¥kM·¼ »¥­Ùƒ¹ÚŠÄv€^3¯3Ô™¨h—Íb±Z™ŽÜÖ¬è˜ìÌtVÔ®Ì÷>c~òyâ徇§¯±h5Ê‹ð'?©wÆÞ †O!¾;&Qž‰íP}=TUQWnÝpíŸ2ý9‰i»…üTÖÆXnÄ*&>o,¿»cºöÙS®€Tz >;è³S«j¬†ZÌáQfîKKÃA: ÆKºa®4°¨WÓ¡—…åÝ­¼ÓX Á—»o¢ßl€LXCï1w5xYŽV» jJýh×Δ¬¼ö«½¡x™JÙáø²¯£÷–Ôè[µ¡=y¹ÌƒQâ}¬o‰Ì}²9²,.ØŸ^°'Ž¹³çЬ$Á1eSe•µËXèMÇINfn}39ãÿ¡3×ågq»=-Ìr³ÁXo¦¢÷7Œ¶ô:Úš©^g÷Àufƒ¾Akc™Ê«ÊMåTô栮 +·í”¯ÄNl,ÔäêÖ騄@«¼À,Ähp¡IWNÊ`aƒ_7M M¨o¡_ÀùVºqÄ ƒjAgЧPE K˜sH¨Á´åµ­F€Î| Ýän“¥SˆI>Iâì¹¹õ¬Ë‚ÕœÔò4}º÷‘*­Jæ}rÛçè÷™"ú©f—ïh:¡päc™2¾°–Û‹Ú0¾È$}±Œpta¼ï»`(†oÒÅÂ<%V|ÂÒ\ -0Nn­:1«=Z"_äçÖþÞK3y]Q½¤ ³?¾4Ü h÷ç\ ƒ‹'áÆñçSúÛès4ðBò#½07“°©¸bΦçwS 7¨?8³g**ÕÈ@ªtí5„SMß’:›‹0´DMÔ ·¥¬ù%µ”ÒüòH]å,õ–$NÜ,µÓÙã$¨Kå5_}l‡&YϘpGÚ`Pu#c¤†@ú0æ,+ÈЀ |µ"Nw<Ž1éªiý³©›qÑ ©>„yõ‡“‰ÿBà÷³ã=n9çÆ{Ðàû?§$ ²'ŸMên£~øîl@æ^@ĉÈ<¸pséæÒ¿/&Ç+ ⶹƒ¯Âû/¹¿ñnãkò‚Pýš\¶~ÿ§ÿŸ0ó?„´qeW`aéÌÌ› +†ç±ô‚t¥8D¥oX³™[Û×Îœ¹âéîe}5Úóã÷ÌéÔ‹¿eáëñ:\:>é«cLõ36èá­øÛÛðyÜãÔR­B¯Æ8’Ñq@û®}…D¨W¯&UHÜãWIËzÃöÁåÐ;vÂÌ›^ÝÜTîÀ.HVá‹Váo–[XgS‚™@<]]-RHdÒB†:M ÌÑðå ƒÄmn3y«||KÖÜ©NÔG«¨’P¨®%7‡¢) UüÊR³y˜á„‹Èhgqck™³]ï;7B½tÕ3=ÊœJþ…X Wg³hb“¾zD‚àz0äô¢è$NüÜwÐÒë&ü*“'¨@©ŠWÅ+S®ÊnëWŽ¿1êºí§Û:©§]6£3×éµfPSl.7ÍÕ&‹±Öh9Y¯3SëµG-…XAÌîU@¥î2yÄRÞ)Áh{•ç!~–t{ôÁ¥`¤¤ß¿ïN§ÊµËMižSÌ.·ÓÝÞ&—ÚXF­åßúþŒ™–—–˜Œ˜ Œe¤j]\mus\`†cwZ¾t¶jºg’srfkrnok“¯m‚•ƒŒ~„{ƒ~y|kŒÅq¯<Î]vÿ€ÿ!€ÖØp°÷“÷vt[\t‡¡¹•Å÷›ö¨ªû«÷‚‘AOx?Gos’ÛMû²>zžhºåÚ¶«ÝÏGÒ÷ºèFÐJÌ‹w†ørFRÌ÷Ù·¶ž“’“•Šs”¾û:SVAm‚„‘†‘††—‚vzvqnŠ¤tª¹­Ã÷é¹ûg˜Ÿo¢ª¹¬ÑÄŠ{œihly|u{»¨`÷ ¦ž¤Ÿ£¬¦£Ÿ™•“‡}’bƒ‘‰‘›¡§¢w£kdc_û9sÎÄw~¯pqY\SZœÎøw©w’´°ø÷Lhr}l^9¢—iÐñê÷;÷N±Ë°—Ð~{v…€€r‹ŽZŽJvŽiy{~ap}u€t€lŸ½¨¡«Ã£¸Šª–œ‹š3ûûû +kh§i«Ž¥‘™—‰ž…sÚÈy´²¨¬ð¯|šùšû{—÷FÏ—÷ƒ’ü|— Cyÿ ¬ +Ù ÷zø  FÏ endstream endobj 274 0 obj <> endobj 353 0 obj <> endobj 390 0 obj <>stream +H‰|”{TéÆg ÉŒ]6^rÆC'íLt·X¼´UÖ*§ •‹Dˆ¢ÜL¸E„.aA¹&d%á"”;‚E¼ÊŠPÎVÀݪ-ZÝZ×¥ö¼¡ŸíéDÚÓsúGÏwÎüñ}Ïó¾¿wf¾Ça8Ž¯ð ñþuÐ?E‚"1Á-H“©´Ÿ¬´‰q›“Z‰Jþ>;?Èÿ1†ú?„°% ]Öý£ô-·‹4;“ÔJELl²ä§Qk$·lÙàjþLâxD.Ù§V%ËãUß„¨DeR¢22Y½N"ñŠ‹“Ù]*I\%W¦r» …J)IVFFËã#•Ç%‰Gÿ_% ù…-Æ1!£pÌ Ç¶cØN óæa~€cûøX#†1ܬãc[1%–Õc×p÷ÄõøÌ"¯E9nc>“ 5Vbc¹®ì&m»Dø§œ É"…§Çm¥#8LÌðl«W»+{Œ•NAÉ™E!b,ÜøOÿÜ?öGúÇÝMáÊã Œtku¿ãBçð¨øë¾àÍn;7íõfî Þ+ $³ŽÜúm.LóÏ +;)¨Ø$øC¥•Øúž+êbs‰ \ãŠ>rAÎä= 52w÷»Ñ7d15×àþð“qÞ<â1ï@G}ü2s—©G ä€ï:÷ðîÇ«“Y­>ûLN~vn^v·Š5•9dº¥MÝ+;ó að2yëzãðýØï9rJ<¤9u„©O>ä ªÆùBCªíÞx¶qù m•h|œë¢;üYD®Œ¬Ü1—”ŠA)ØŒö¬A«™Öi¦’/ê| ‘Ï!ê[ˆÈ3:-|Äå×f‚& pòÀ¤hV4ZÛuµÿèv落Øìž–=­tÃÍ1F4k|÷„Ú-½þl´ùê6öAìdø'ô/Ã"ü™ìxê1à÷`Ùüû¼zYÑÔõöÆš +=i¶šëé™]÷\%>[>ñ½"{Ë•‰JÓf“i)) Á4¾ |Ë_kn@R*lº„w=·‡<ÛŽN*§–Ÿ£>Y+>•u¾“…¢C×~¬1¥ÅÅ;³å*5™’¡ÉÌ¢Õ猆ŠÏK˜^cMïUñ`Ó1?VAħnI¥‘!©*E8-혨êjìeÊ•&E[>)}I¥&U'‹ãcê;Î[Ú«ÙêÊ‘ÆZ)|¤…¹Kx÷#žœ +ߟ¢Ë$Áˆ/{µ¥57¶›Í¯(-*ŸµÔÖV~VžWΚS’Å +ïlY+=ó©'=rÑðÝËwzáï5÷ ¼ÛðîI=áÙ–|GÅDÅkŽ‰w¸ Àš––ÂÒʪÒ\ZRüúþ®ßy G7ÄG4"º‚¨qÜ2}ƒAAMê®^´„F%è2Ya$w‡wÏ«ƒ×N§-Ÿ›Â›„2–—ÖèŒ$ZÚ+M=1 U™IóÙs“¸µ9-µ–ÍrõEŸWVT*Kô¥†b½Ö¨¶Ä›’Š#t1ÑǃÃ3CòÒÈ|uAÜúT‘˜Xªå‰n ¤:w#2­„{…®ì ·!|€týzï« Û]p!]¿¼mÊÿÇð«™‚»¢—ž¢ï=mlË(Ñ3Ϫòš}•NïÄíEäGè IN`RÆbÄ^«÷£E~½²‘tVôb0U}ø„BS¤->¥Ï<›Ò”ÒCŠ¾•$¤‡Æd"5Y¹'Utð 7a /ÿú—ŸW…1¢7ƒòÈ¢xq¸ºÊbj´ÔêÙ"“þt¹xæÅÀßš²[R­,× ­l¥¾èôÚ$¿1=Ù{±‡å*7½›§<¤½·[Î[-çÙs–F}‡øbkavÛ¬©QFÐáG?f„p€{á7@niOßMÃ!.¹¶ÍË(¹vwFX™FŒçŸñ§ßØók=;b­„ÿûì=QßÔiê)&'Âv°h×%u„Ù{I,12¼© . >®ˆ!…›O[çí­f§y³Ï(Îàc7$[ Ÿ÷5ç1"F»+#ô}g]qQ -9GÈ»‰Ï-ÀùÚ¤ÔµL®%ÕÄXnqQ2ì½í…â¬Dà\9ÑÐ|±¦[¬d…Í\òN½öš´ÿ¼ã¢Nð…!j ¡¡ºNl6æhªXÑxY¡ÐXFÖŒÖó´EÕ*ó‹Nf +ç¹ÁÂþw°Ývì“VÂã=¶Ð¼@84 +?üŠ×4].-?ÅdT_N½.~ø¤ïO÷C»·7³æÃzèÖšö¾®–dßf¦®¼ð¼ö¦ö_÷ý¢”wo“g4MPCIÂiÌnÂs¢nbZhrgP^ËÅ{o¿÷ø±èÙ÷?ø ÷—–Ž›ƒ–û÷~JIL[noÔû³;®bË’˜Ž•Ý´¡€xuƒypf™Ù÷_Ämv¨¢÷õ£wêÙ÷^ÙŽø ëhbe{h^`¡è÷­e…Bm‰–vª†¢ˆ”ƒfût'ÁfÒ¤¤’œ¨N¥š¦Ÿ¢D‘….©•ÔŸµŽ¡_vŒƒŽ³÷òe…B]‰–v»… ‰•ƒf÷ ™vø6¢Œ÷,÷^÷ ÷‹„À÷%½÷ +´å¤ÂŒÂ‘¢û>t´…˜‰mn7j1m:jÚhíkÞ€©‘’˜­¢û[tÄ„ˆ U÷!ûö÷é™vÿŸ€ÿ€t¢÷$øD÷¸÷t„µ÷´î°ì÷û˦·÷µ÷®ê¡Æ’’»“¢ûFtز†§‡„oyBj"sD‰û÷Îu^û +e#g/‰8÷Ž‚¥”Ÿ¸´’¢ûat¾„ŠV÷ ûù÷¬÷’¸½ø™øË÷’¸ü™^|šùšû{¡÷<Ï‹÷ƒ’ü|— Cyÿ ± +Ù øt÷å %ßú endstream endobj 272 0 obj <> endobj 389 0 obj <>stream +H‰|” PéÆ7À.«œ±²l›d5›{önüöÊõü¸*Xàð°((z +H€ð•˜`ùP HˆÄ@bðëDOh=õN¯rZì8:-Ò»+¶×{ã¬Óé½ö®ÓvvfwæÝwßù=ÏÿÙ‡…A ƒ¿'6&)aùö|q¾D¼2Z"ÊŽ—óEùY—oø †?"DóZµ“2-Q?Ÿ€—@P£qÈZô‹†/ÀÃ5[%…%ÒüÜ<9ïͬ·xkׯ_³"p_Ç‹Ê–d +xÉ%2¹à Œ/Î’H %R¾\½ŠÇ‹‰xI¯d¼$L UЫ/Axù2Ÿ'—ò³ùR!O’óÿN‚ }AK!h­„ ·!(šÅAÛ (†’ƒ¡‹Ö AÁñC´*èNpN7¤ +&` ²©Í ýÝÎÌÏ{:Ëüa’°Y&¼mÞ3 bXØîßH* °°é#?.ä³Çnõ~yã'6Ò òaæ´q´_¼¯ñ#ªÈÛØ· ¬Äéƒ+uQzå?„4œœ±Ê5³dûåB¹-’Ð¥ëªZïÛÉ`3|yTkؤ#/(€s‘(©ÁIlCî7×Ï'›ZUy¬Ìr¨f߀‰e¾l¾gêB_ìC°¯ÿ­ˆù;ãˆÿÓ>†Þß žsq½pRoþžØ*ÝF=[/„ý¢ïA¥É󋔨\z@—I¼SÙ~ÏNÞß:d5O6°ú`&ˆªr«ú” +pöðÎùŸØØ>¾¿ïHr‹Eb}q&ÚC[ƒ‰ðÐELœÉ~Ÿ¤ò( Þ‰x¬Z¡•Ä68v;v:ùží=… Dï©fav‹[iQÛJ;ØemÊAùe…OvKëBÿäúü“'ð +í¦ .eA°½ðîȉš“¼HCßæ½™¦f3ÇþŸ–+ÃûA8`ƒ0lÒ_`¼Xž«Ôº«³ŽÄFœvƒÐö¿êXØdéQe­¬­“ËLeDddzFùÁŽL +ZÍyïDvÿ‰ó]\OçÐh­ETïÀï•z*š‰ŽÇÞ±ë$ Và²,_&A3óŠÊ«ˆJ½Ã=dý¼sœìïtµÚP«­Õd#-‡u6òHt©¶eú4£`úžQ ²z†”á—@˜ +à“ »à_ëß‹c£©Q‚5ëÉjäxLgàHK¡ý©Tµ{CûzŽÄ.D¾x¿,ö¨Ü¬`ç6-ú˜8}Ã:ú)ùðê8 À<ÎÄÁþt.6•B±q +M¡°…\­Fe(% +d®/ldËßj½Ð3}£Âa-ÌÏhß"}G” '€t`àuÀT{è×/–å)t´Çþ]ÿ“PË`ì¡©²ÒXA$D¤ï%ã¼¾‚óî °÷b¿­™{þôàˆ{¶²x£vV¸ ÷cïÕk$õì4~Öv·ã +×uÅÕÓ~µØ&;ál7TÙI]š”‚JÄŠ‚bi‘ ågËÊ5D¹Öå!™Í=ðÔÇ Ár€ûž¶gOQ‘Rrél½Ñ\SOÎô‚Í7f8¾ÜS[·%Š„™Ü¨ü7Vq¨°Ûâ.>rüåK.Ý'—p«»JÄÏXÊ'›AèiŸ»mh7ʽ8êûªlr>mºßtû™•Õ1Sóé^ûûÝô(Üi'‰M7iÚj­¨µ±Õáæ´×ˆ;øDÜ6~:ŸLß/‹-ýšˆˆrM•0“ZGO-[ æNøO8%Ø46ûLƒw=ö^› ÕÝ°B’÷*ûõôÙ¿6ø’Í0E¤mMMJ$íØÙ>Øi!ê¹U$6›Déá¸R§ÂCÐň?OÀ÷fˆE§Fz{•ÝÙ$ÓÓ¨èRêk XM—±Ú/ü—•TV•Z³£‚Tw¨UCª!õ¶ÛÖÔlsZœ–>ÓÚZínã´I›EûRöìÜÉ•ÊIòÐj¤,éà '-‡[ÊíϤªwç¢UˆV6•šE¥eP©= mõó9ë¶e¨Áéñ ØyG‚;®9ÝÝÞSÔKôy?¸F2©„FÅs2Àè Ëè0ÏbÓŸc¸yõÍ.{a‡ãÊ[h±´]c×HuLG½˜¶Ë8WÓ€á¿øƒ¨3ÁW´éáSFZxº°àˆH‹0ØjÇÍc ÄÒb÷§Î?˜tŽÃ¢’ÃdµA“\ž¬ÙÅ‹ºÌc-ì©ÑßOº‰æ#Š,Úöó)”ŽS;½ÿaìãÀ॥' Gççûà?:³ìBU¤S‹I±úƒŒ›«kY¶«ðTk¦½„PÐë²P“–Mûy|¾~ÜПC¤ÇükЧ:‰zÐZ2—Z¯ÙU¾‹FbNÏ¥hNÎoAÄvð#Zv´¯A¾3åûÃd;Ñú’tvŽ´´õ•g/Ieˆ^Öëôw¤…D‰\§.ü!‘í0MÄþ_D&6³OsΞc E` X ’5øÕ›žÁ³äÍë§gqžìº±ŠŸZ&ËàÆfG¯¡Xœ-'Ö” Þãx-µ8™bü“ɲi« +ã¸&;¥ÛX5\+kÏr/úÁÅÄÄEq3ê‹Ñeh„Å" £¼–ÖR +¥”®¥½-/£PÚÞöö¶–RhyYÇpÃÁŒ“ Ñð%ƒ…è²ÌMLð‹§Ë]¢ga‰~8_ÏIžç÷ÿÿŽYØãpôX¡R=¿…Ž-oN(ãu2p2¦Ì£Dwxúúp±UŸ~i9K†J×ïr¥³Å.–íÁ©›º<ŠØæ%ÇùçÎéŒÆNî¤åb‹§ª½TÕØ$±V©- ¶:ƒÄ«Œú¢Þ¨[rô±›–[é³6‰*ÅYÈøÌ¥ê¿Ìzç%Ä\½ˆŸìa®‡ƒ[¡õ/nÞ®¬ß½#½_ök´bôè7Däüý„-"€j±ªÞÿß°¼O†¥²SJþŽbËS¢úSìFpMBĹÕá™H\âú|áºl~ŠøÖoóõú<>ã Ž2œ;j ‡,M¾¨’}”[Š53ø~êã˜VCQŽå;4‡ö®fÝýeë!qÝCo‹/Ìœ› #ãÒø(‹M4·†IbÓCº‡8!qó±áAi²""«)oWT’¥r{e½ôìrÓ5-¹Øà7襵ÆfMÍç³J²ƒ5» –v«QçÔ «ûÖ4Wá_»â´Æ’7äóYØÛ³(…²ÅÝý@«+«3CK7—ðP_£ÐîÄUÀï$БK ÖùƒïOƒOU^3Ø”ð.À?Ó©KÁ[»÷RØ¿ïÑý3zþ„o>Dì¤_NŸ;Š[_ïÔ sËO¼¦…çØ"ÕæRƒå@Û˜žÏû¯#è¹lÅ„;¼ ð™Ú9S ›ÉÃŨ·ñåíXgíùàc³¿nŽìÉ^(Oÿ?¢]`ˆ¦-¾ŠöÓ#„ž=ñ+^³3ÝE¼ò=Ú§®„½ d¼¶ê 5Ï@tžú´¢Üí¶^—ƒ"Î ÐöêuÍõŠ¨~r)±„mSS¹ hdX“„‰ÕäÖ +Õ +E³ù4™'“fJ†Ž€oægfÃÐïutâ +yƒf~'tÑêŠÅÑÊ°néÛg°¶è|Q %¢±ëiÍ*Lñ3xŸXOÇVk5'egLi­±F]BêämŠœê® »—„Û¦™zX™_(“SA˜œ +±Ðק«vSîš/ï.(>]q!çM¶å0:ÄÑ~ ÐI|Þ•$¸‰˜ôJóˆ–™‚È ß¢üðZ¯ÑžÇ&6ƒ.hËþ'sÿÒ$:èÌ¡ÆÒeâ!è%¬ endstream endobj 267 0 obj [268 0 R] endobj 388 0 obj <>stream +H‰\ÁjÃ0 †ï~ +ÛCqÚRv ÑnÃÖ±làØJfXd£8‡¼ý7´0 òÿâ·ô¹¾Ôäè¶Á'Ç8†‰-B‹½'µ?€ó6­]¾í`¢Ò7ó˜p¨© ª,AŠ8&žaóìB‹[¥¯ì=õ°ù>7[ÐÍã/H +¨*pØÉ 7ßÍ€ 3¶«è>Í;aŽ¯9"r¿¿…±ÁáE6Ô£* © +ÊW©J!¹úJµý1¼¸OGq¿OÇì^ßN¾÷Pvb–> endobj 269 0 obj <> endobj 270 0 obj <> endobj 387 0 obj <>stream +H‰bd`ab`dd”ò ws òÑöM,ÉHÍM,ÉLNÌ ÈÔõÏKÉêÿþ!ÓÍ#÷C–ñ‡8Ë9ÑÜßi¿j~Îg•©]Æ{ŸGé{>ÿ÷RÁïE<ªßOò¨0°22²ñeÕ8¦ä'¥z¦¤æ•d–T:çTe¦g”(h$k*ZZ(€å‚+‹KRs‹<ó’ó‹ +ò‹KRSôsr‚@ê‹‚R‹S‹Ê€¢úþ@ÜòóJB* RôA¤¡BJjgA0ˆ`bddñÿÞÇ÷ã{ã’òK—¿ÿ^óžùÇíŸ³ýæÕ±ü­ð[ñ•åwÞOî~W<^¹'wƒüw{¶ßÏ÷‰Þ[cò›é7s–‰…EÖ£ïÌß™Ö<º'Ï +Îò>stream +H‰\ÁjÃ0 †ï~ +ÛCqêÊ FÇ ‡m¥ÙÀ±•Ì°ØFqyû*nÉ` ~~}â·ä¹ym‚Ï /m‹zág²>ˆ£çm~¨Òíh’ ·Ë”qlBE]ƒ¼²9eZ`÷âb‡{!?É!ù0ÀîûÜîA¶sJ¿8bÈPÖà°çEï&}˜AìÐ8ö}^ÌüM|- A}¼‡±ÑᔌE2a@QW\ê7.-0¸¾ºS]o mÓÜŸõªNO¬T¥TaSëþ,líLÄéÊEJ¬5¸-ÅL­OÜ%%rD endstream endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 356 0 obj <>stream +H‰bd`ab`ddóuqsÑöÍÌËÌÏÓ JM/ÍI,Éÿþ!ÓÍ#÷C–ñ‡Ë9Ñߊ¿û~=ùy€U–aÊ.Þï>stream +H‰ÔW[oÇ~'Ðÿ0~ –…9žû¥©b9 KA,³ÈCŠ´²˜P¢BÑj‚ ÿ½ß™]R;Ë%¹l‹‚¤ qg8çþÍùÎ +&è—ì—Á«¯?öñq5Ããs&pÍæåàfðë@I†ÿN*棢ÍïÙýàÍx jžTŒå?“l|3ˆi;2)=óJsoÙønP06ÿ\ËÔF%-ØÃ|òt¹(Ù·³ë’ÝÍžÊóòú´¼Y\içöbXIŽ$Wlü–T±?X燎ÿšNàs5›Îæ_M'”|žÿ8¹aÅä¶ð+ŸO>Þ.ø”¬+{Ï'ÿÈ—øÔçÙk6Ÿ-àú9­VjÖL‘ÄêlÙº?»üý3_ÎËŧù=»mžú³Î“âf™§®ÜÖÞî›Ü–»[me—òº!¹Ùm$k™Ø®líð •¯Þ ûôÓtrÅžf“kv]NËEyQ¼+g¿”¿w¦ªU•ÙŒP±¤åËJôóõƒ<€ãoN¿8y·O!—ú«¾dý¬ +ƒ³0~÷p9/Ç3*Pfgb­<Jô¬ëEVehùì3ö¢Wå›*yvõ»K^M +!°ÊCµÓéN0”ÓÇrß@[qî §‚wVäõktK$tÕ[hçþÓtJö/þ²Åƒîtv«áy l×o[_ÜTÀÿ>ä­–6iå ºœÂ›åsK~Éî&÷ ùF¤äšpŒâZ“Ý-¹$ˆ +¢g™†mÒm¤.?„Ø5µø¶C?ï%ô©ñq3ùíþ™÷Ž$JÌ.+fÇØ[1e5·VF¾‰ß(ÞG®(‡#SLñ7‹¡.Jv5”Ål8Ò:ÕÍPhx§§ço˜i¶Ž¤*æC)‹²|þ8þfðåxðê»éåUyýÝۯث³ÁÞ¼=aƒ÷Ëi“ƒ¶‘+ËŒO_2’;’Ç—K×ÕàòêÃÎÉDÄ>œ|;Ðì_Ì°36ø;Õlb…‡œd^j%»ºKÖé¯T\kͦƒ+—${7ÐÒÔ`·Á0/$¾õ³) nØȧ¯JËû>.é¸R¨L|V8’±Ò_û8†Ðt4±IŽÄ˜¦& ƒøey4KEÍ `HR(îDlJjÍ•v,ráãRp{z‘QëjŒ¾™m€6Jú«­g#Ë•s­¯«Á(péÍjQX-—’õJйú?¯¤2]+•½j)j‘”ÜPr¹m%õ¨B¸MõYï²ÞUuÅCÚ ŠáÞiŒü"ðȤþ’®hU +°6°ç^Œ lnTLQÖQ¥*\;ïñ­29O°ÜmÈPM ©Àr+­K¦3 ˜únôS=Á#=÷Òj„dÑ—q!`;Wq€ÉßÀ€ÇB_ +t5jŒËwb7êŠGRWé›…CáÀcò½/ ºš t ÛIÐr%cÁû>4ˆ©Ùƒ ™hÂæ]#hOüTOT²r€”)%HWó l°jîzÐä9XÍÙ6 š,¨–Œš:1äahH:ŽlS­‚ÛÁ‚B dÛ­ÿïß6/¾Íac÷gÁã ¦? *[6bF’ÒneAŒbQØó CiÍsv‘`¬±ëÀ†Öø¦ ÇH$è· MÖÛ’i‹ñu=÷Yê[™ÏŸå½‘ö,ëMêÈ™c_î;Ïû6L˽ÑTÇ£S1k˜Ý÷ßol”}ƒ7yðªüŠ2Œ‘F“/rºèÍtÇàrß%½¥@mã»ÍF”µ×s'᧵‚ çM¯÷<Œ>Aºô>i[ÃmÀ[RÆoM9z‰Bÿ 9çElöƒSÏ Æ÷ãEømˆœÐVð`2–ÂÕQŽ¨ét8‘&òänLh³[U±`·Žæ(Š¦ø ÅدE»Øí˜bé‹Ë¥–`Œ¬„ߊa¸&‘œUºÅm¡ÅmÛ1 "l¸®|Å{+]4TvóIŃôväãæ½gì¯ÍÉ5-šH÷ß·ßûvó" ú ÕV^ìâ@ƒÂ™}9ìa°_{ÃÛ‹É6½G2qtèG¾Ü'ð t꣎íÈìÿ€úLÀû¤hNÏûR=ߧ ,óp{Ÿ‰ BùþÄ—b7ö _Ÿ6ß!»¼'ñ ÐÒ:xïê‘.îãÕ}†Wr×1>˜Mþ@¥© /OYêDæ%Z„qÍŽÉ%"ç:MaacZ…HNÍ À›´"˜ à "’áðè5MO‰GT‘ôáA9KR6¸zZZß&?[j¿@?¬ê}Ô)Pm|\XT „¡S¤"¤…J ‡Û¯d¢V,±H†ŠM™Ñi4PÂ…¬r‚နyZ¸@f´Uœ‘軕 JÖi Ú¢µ×«<- ŒøRÕ™U¤.·¨ïô-dä¹T©Ýcbãk`g6Ío¦“‡‹âöbHgžñ—Ø ½œŽ;ŸŽßÍžÊóòú´¼Y$FäƒÎqj”ãH¦L•„yøðCQGºøm8’²¸¼{ŽT1-ÿ6üqüM»]ai™"‘8ò'd¨°¿æ?yí¡Q.Z¼¾åóÉÇÛ{Íæ³Åå¢<§ÕÅr»Žt†:náuZÏ£ÅEûòì„ŠR®ƹ€az^¾g÷ˆ$lŠ +›À/‘‡ì¬É Ò² ›c#6êê„WÓýÉqÕôX©wéØr—¹„s%Ó»¡Â=ÙÁò•à»:‚‡å!z¬ŽÑå¨o•¨>stream + + + + + application/pdf + + + BSTsearchHit + + + + + Adobe Illustrator CS3 + 2008-07-01T16:47:31-04:00 + 2008-09-14T13:33:33-04:00 + 2008-09-14T13:33:33-04:00 + + + + 196 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADEAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9FeevOml+TPLN15i1SKe aytDGskdsqNKTLIsa8RI8a9W/mxVilp+fPle4tpLv9F6pDaQXE1ncXEkVtSK4tVWS6jdVuGkHoQt 6rtx48QaEt8OKqPmj89dBsNNnGlxvJqsunXeoaX9YWP0ZFgW6aGR0WZZ2imWxd1ZF2UpzKM6gqrL H899AstN09vMUga7vfrcguLSIQRm2gu57aGY2txMbpTKLepjUSMn7fEYqj/KP5l6tr3m5tKl08WF kXvwkUwU3SraW+mTR8zDNPDVjqUleJ6BehDYql15+dn6YjtrbyTZSXl9cailgZpVtZ41V4J51cRr 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 q7FWuK8uVBypSvemKt4q7FXYq7FXYq7FXYq//9k= + + + + + + uuid:B4D572641149DD119EEFF96D7801BC77 + uuid:852ed07c-1a0d-af4f-b9f3-759b446c18bc + + uuid:1674efe0-8233-d14d-b102-fa10d8fdd283 + uuid:92F9E1E974FFDC11AC15B6426E08541E + + + + Document + + + 1 + False + False + + 16.000000 + 21.000000 + Picas + + + + + Minion-Italic + Minion + Italic + Type 1 + 001.001 + False + MinioIta; Minion + + + LucidaSansTypewriter + Lucida Sans Typewriter + Regular + Type 1 + 001.000 + False + LucidSanTyp; Lucida Sans Typewriter + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + + endstream endobj 121 0 obj <> endobj 199 0 obj <> endobj 235 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 386 0 obj <>stream +H‰|SmLSg¾.Ü¡ë2n:,ïÖ÷º‘ìùà²ý€M¦Ã`ðc€ˆB¡-TZZÚKk-öËÇ„Ò–R(ý P’‚“¨ÈÀh²f1Sm?æ\ü1]LÞË® +.û»““óãyÎ99'Ï9,!ãp8¼Ü#9ŸæçmÛ/­“*ê¶çÒB™´jƒHg‡Ù’`ÜÇB¶ã¯_Öæñ×0¬kâEtü%$9újÂ…”<ãn…R§’V×ÐÔ[UoS;233Þ݈ïSÙ"E¥˜*Щi±\MåÖU)TJ…JH‹EïQT¶LFåoT©©|±Z¬ÒÄÐg ¤jJHÑ*¡H,ªj)…äÿ:a1Ø'X¶;€}†ňØ^XvCœcœ¡8M|jüUtŠ‹šŒ(ù ZAÉŸkS¾@q%(Ž,& Ñ&‡'U)%ÉúéHdd`B@F5rÙs€]yNþÇlÀËÔo”i˜¦ Ú”ñûh×2)CÓ³¼cæ€É¼÷¿¾<IŸ)ˆ7È«ë-ÀÒÞ;Ú (1ŒðЛ}‹IßÑa„¤Ì®=Õ¡y‰ËŽÀ¼‚R–“žöáym¨o.Úë\úrfvjžhO¬C:Þ˜ßvÆ[Ätº¡ž £úZI¥ºžŠ„òFpÒ:41æº=|F–¢ÃÃ^‚”9<}v/à2<ã"ú{’3uåßG—w0¯X'ûL7¯t¶÷œuÀGÃhçwÒ&OŒWTJËÙùÂôŒ46yIqalÕóä±€5 ‚çGñ/úˆN—×îý#FÉአ+VB.jëÒ¬móOj9ßÜ™þ9©ÑfžZY"6‚¦¶îP'D\æ>ØÙæ3k.­Ë‚º¹¤Ñö3å¸õ™ߥ弄À÷èÚü䮺4 ü6½¾Œ²ï<]iþ‘|J2kôŸ¼¹„¶€¦öîQ'$Ÿî÷¯ø þ׸IßbÑÂrÍÎ’¬t¢51øþ ¿Ö­ÍÃöÏz“hI ý†/ôtŒ+½§´ vkñpx"Ü \-:±ŠÙÌÆ}–2CÿÞcáŠsø Q”€xó ÜZ/²@›i(4ž.ä/¹íºÀ_Œ ñ®€HsmYLMækÅ‹N;Taлºq\æ$k]ÇÒMØúú² ›@‡&MfÛTÊa´EVÉq$a(ž3<Ûgé 65ƒ}åcyCOŸ>dŠxf§Ê@k5 |s…ÌxÂ"Õñíô°û\WÄÉ—²{ªŸ»¹ØÚ”k"è$döà¡$òø‘NiG‹Û=Ï£Tœo + ¶zÁRß­éK ĵ#«×ÓVJçßPËšÍ5.Sn¼¹÷6š}˜óý¾¥ØSØ™Cæ/¡»¼¯¦.'p¹ÛÔ]pŽàYEÙr`i²;lÐa³y,@sJSëÚÂô(˜[Dàw8Ã’xuOP1Fg¢·®B²MïÃ¥52]#hÐ_1à +´É?ùÑ¡Á`/p»šOÇ­´Ú­ÐòhkEUå,‘ Õ7ð«ZÃy%¨?ZZP¹Þ5—Õ{PŽÿ¦'YÏ=I‚þݺÔõÍ/D“ïnúG€ +¯ endstream endobj 236 0 obj <> endobj 385 0 obj <>stream +H‰„”TWÇgH2»˜žÍ03˜™ö¬›SVPÚãO"XÔ-.4«‚„š`0»¸h<Ò´.(l„.ZÀbU[¬¥Z( md\ËnA¬ÛQ»é¶{‡}œÝèûgÏÌ93ï½;÷~ßçÝïà˜< Ãqç£Ó®-_«Œ‰É@(R‹]BôlŒn&övŇåçdVmbýÎ[Ê”ÀB ä9»Ð ß +Ô÷Ô*çšd7‘žþ fªvfZ9;{ hX¤…È ˆˆ™Õ­˜^[—^­L"{*‡‡6+?M8‹dH¡EòHž’¨Û¹9±,«R©ò‚èeàÒ€ôHO¨€å÷‹ 2?°´ØÀÏ7‚üñSååçX©:.È׈ <šžc „ªÙ C<¼ÍãÓØ‚²iCw Ø‹†°€@aº£á|cG×âÎÞú«ÝÚÁ±mº¦}9Þd ÁHý?zQØs{Ö£ìBUñŶqxq~Á«GÂ!*ƒ¯á&¡(ÒħNß¼üöiÖV×°Œy§ùDíi–꫸¦¨ªp«`Ò¼þ÷Yx…„pËZ·Ëù»,Ý:òÍ3Ÿž™bónËc3Èd9U†´d¦)ãp³Éõñ{ÿ‚•Þ‹¬ÊÍïwŠ¹“à*Uß 1HõQew<4OP}£ŠÂÞ|aß× €} é°l(féîµ6ë!j*Àc …ùX:ÈyëÚÝ·õÈŽ\ ë¿8ÀÀÂ×Ђì×X©‡ÄL<ERwi1jxT3J\ñÞ‚È=eå§u_’µE9¾õ *ö".‘MEz#èI2ó°xJÔðîRõ`šêþ÷(þ}Ï•²[ÌÕ‘“çþÌ~õYí$¨µÔ„¸~ IÝOögósº70hãoÐ&¤\~ŪÇ›f.³5D¹A±©²l+ZÌÄïm~3…tÑÓ“‹³˜5&…îê‘w/³-M~&Гæhy¤~÷ŒD¿'€[Ý“ð19t©¥‡™òÍ,’œñ_ò‹Ê6û9]gñÞ†l&m£3Öôÿž eØÏÃBWC#„#L f¡C¢ÐŽüF0Ô?Ü`¢!\Z +n.Y"å—HùC‡Œú`M‹™·%½S  ÝQT_¯ôöw‚šnïé?ÍÔžª<\ÍþÁýzEºv^6ùq«ø,sòT¥»š=^ùz…U;1%F’ÃGßr·êZÝ…ÍùŒ)3i¿SÒú7Oæ{¦8¿<:EQ}’ö5Äã^Æ? +B_Pýn’OÁ’$àÐN´M∖"f= /°¼Ér¿þÐýHÿ‘îeO/Ïç‚U¡ÍNHâÅ¥7&Õß<òÝÄ7ÈD DxøŸ°u_b ´™¦&~Âx¢¬I pðÔ8¤£z@œišzÀ4ÖU;ÅnâIª $5^í(<‘ÅXWU!ܪÓû¨NhÉþ‰þH¡QTklóõ{}cº¿–œ£9Ì+éÇ[‹ØC Çš®h¡ÜŒøŸt'‡? endstream endobj 200 0 obj <> endobj 384 0 obj <>stream +H‰\’ÏŠƒ0ÆïyŠÛC±U“´ B±-xØ?¬»`uì +k Ñ|ûÉ”.l@óKòMø&3QQžJÛÏ2z÷cSÁ,»Þ¶¦ñîW¸õVìbÙöÍüX…3ÔND\-Ó Ci»Qd™Œ>ðpšý"WÇv¼ÂZDo¾ßÛ›\}ÕZFÕݹÀÎr+ó\¶ÐáE/µ{­QÛ”-ž÷ó²Á˜?Åçâ@Æa½c3ÍØÂäê|mo ²-Ž\f¹Ûþ;Ob»vÍwíE“x»Å yϼ'>0ˆOÌ'ä$ŒrÂœ §¼ŸÒ~š2§ÄGæ#qÁ\ +Ö+Ò+¾GÑ=ŠcÅê]`œY£I£Y£ƒF1+bͬ‰ ³!æ¼4å¥9/Myiö£Éæ5å¨ÏÌgâ 3>ffø­ ½•aÿ†üöfÈ›ao†¼öfÈ›ao†¼ö€èQ *v”|öAs÷[ ´]¨=U½·ðìL7:‰Qô‰_¢ ¸ endstream endobj 383 0 obj <>stream +H‰|”{PSWÇo€\."qå›äº¹±êjW««]|[Dy¨X©Bx!4 Ix™@« ÄD <Y… ˆ€ˆÏÊN)hQ·T«3«®ÎŽÛµç2§ÛÙ@ÿhgÿØ93çÌœs~¿ï÷û™9‡†xy 4¶;2<8le„@$È}˜•‘*åg’f—QZड़룠~‘Wþôý÷R¡óIó€~~÷¢ßyùÏ\TîÊ:‘#¤¦Iy+’>â­Ý´éO«fæu¼ÉY‰)¼˜‰4%S %e‰Od‰ùÒ”äÕ<ÞÎŒ ^ôL•„"IËÜ»¿á $<>O*æ'§dòÅB^Öñÿ× AhîøЂà4d ‚,C•ò1‚|â"HŠDx!1^ÈYìŽx žÈFD„h‘'´4Ú<¤·<Ùž÷¼"¼úè ôkh6:á-ƶ`Ã>»}*çdÌùÙ7Þ÷ßssð ó{ÄØŸÍ`,™>"§MMxRìé#L¸a×áÆ4ž +£`4À¶V7°BÆÒA¨ls‚¨oÁràñû¥È&<Á²é@æH` Âm©0r\=‚ÌØðÍ°± ìuWÑ›Ä<ý˜ÖZ<A 3;XÑÊÇt†S÷–Š›¢ +Ì÷¤-¬éª»ÕÐ/¬`E/8CÀµèä(, Þ>^œ·;n­Û'¦pƒÖÔËèWÚ¯všRBW|´<|?¹/*$*ü&óf8•C”ù?xèæáOÁ‡T½ììéè!:Z³ã6à áÙ¤>•Ž?5ÖÙ Ä_Ç>Ý‘¾uWp|·9ŸTU(‹U§óÔÊu®ö”.פÂÖ›ÒëÄ©‹ÝwÈ‘þ«s¦ö÷‡¹Å%t|Ôem¾PeÆìµ5¶6Îw›Z÷Æ +R¹Q{è °^× \—ª[èð§" } yf!°¡žœoºIµö >á¼ì6sK¼ñ__xÞýN¯Ü™^ǵ¥}f +"`Šk„Ú2 "ìPøƽ¨4;´lü¸Gµ2õÕz³¡+5ZŠ­DßuIàÖØýKÈ ´>‰‰¿û&cõÊÐ5qÒŠa é·©f]uwÖÑ8àá£ÀošËÄÛ•Øß+V¨4;µl¾@Áœ®?%ÇÈ@7Ç]YÏ Ÿ²ùWusq| ×Â8®Ÿææ—òHY¹®ÞèÄË!»e:ÑAãS|OÀtKj…O´Ü-_ª¢Š’ +ØÒ ÔÔíE¥BÖ¹r£®”»cu]!û{¿¬y7L!¬Z€˜Œ#ƒƒÅ˜p‡¸ï i)‡'ðí6®5þ†P‘f‹–­Ò© ´ÊÙúÚÒžjdIŽJÙrL*Ž×$ë ëW’#àÇÙ¦ã¶ÁáfTdÏuÈeàJ;pÍ"6~„Pg™¡¢ÈCB®"C¤=NœDû€ÞÝbгgÀÛˆ¡ËÉ{H˜³˜h“I-4‘øfëAkT-¿)âÒ à¥m:ËÂ+Ëíòò|K^» NÞ)”õJFÔ6ìﶇÃ/8àˆ]„–£ø!­pìâìœ\¨Á±Ý 5º]³½ù=Ô÷=¹?ðùÌÞÊ6|¬Ä1K‹cŠ³1Qí¤`’ÀÇÁý°¿?0ÜEfÖÐcÚ2}œÁæ1.>öª~KT9Ù¦§ã®âaÝåÒ˪ÒS††›ÓŽ2 ¸`éÈÜzûó¯Ȇ<ú­Ô¦”Î!ÑÞ€å±Àçf!—6éÔý5íô¤Bk cÛÞsê0Ý…ÞmÖæ\ ͹e'rœúŠÓ„±‹­@r­ö$ñÓjôDa‰­T ÊÃŠàœ Ì‰Ö_«¶WVbÖš&óß;úÉO‡góo˜Íϸ[!£þÜwJîßüøâãT 3ÒT¹šÐ›jKI¼§ÐíÀ»þ_§KYøxÞ9y‰¤ +•JôD@À±„£dxd"DÖp¶µ$·µô;þÂmjìê»äÂJÐÜõômyMª*¢á¹ëÖ—$ «˜’¤ ¾$ KLË>UDj­ö.ÓÃÆ{dã½F[3YjôÂZý…ÆBžI/Q+0F¤ò1p8xÿø»ŸË{àÇÌ•I:@$K/ “xûuÒÞÇí¬«;_E\¨UÇ·’ø¨±¨FSWÕT¯ªä´|ÞøYÔîôäxnpDÚ‡Û8«ºcŸ>sÞÿšËxè&Ð{FŽ_ê’û·,Œ|Àħ(5@™ +IšLã&q~†Ä5€P×èmÆ3Õ*B½Tœ»™¹¼ÛtÚ ™ÿ@ǧô……:±7 ýØa2düâUœüÎæ6K·¿£³ÇÞ醢XGß_«²öç®ÛwHø®ƒyÅ2Öp“k»i»T+·Xõ•Dmýé¢JRsT ‘‘,]!Ζ`üdÉ)%qJmk"in(¯zi`X 0OÊ°˜Gcc³“ˆC9ׯ”éŒÅeäëf°ý«×œÞÔö]aû3„‰ÜQüe«9ÐwTtcà™õŸo¸îô:Ód/J‰æ',á“UÀ»£×^*Ηš\ OʨŸ¯‚°÷ûîù¯¤ñ—€AÍe¨>Í…~R¸%w·²SkÔg‹¥¤²LI*ËT§ÕE§µùg31±M]ÓØ[uµ;Ð×û¶ l­}ež4¾3±œt8Çýƒ8‡õ¢•°Ú•âFiVÖ•˜*0SEÕΩ/5ð‰0þ1>y,Nœ÷_º«6¨ëŠÚ¯¼ql%fÙÚÒ¦»n2mó£­3‰›Ôi]lÇu‹íÆÂæ# d‚$’²„@ˆod}!­" !Ø€18†€Ý„&n4É»&N3n‡ºý¡ÌtzE–™ö HÌ´?ôgGsß9çžsï{/á§xEÒƯç,ãÑȵZM@Wx.ìxö˜ UŠ®™±NØu{ =/óYÉb†§sÇHMøBŸU¶•¨…Ygµ§³ẇ¯Løi¸•’ÄŒÎ\hN0ã¾Ò"§„Ê<¥‘f2g²U§Ï +ŒŠ t–¼ÌРi(÷—vpbîÙ‚“g„I“=X‚CWá;“9ûnÒÒ6×)tØ.^´ÒDëBׄ?Øy©gp¢ácÜ[ÏZXÚÞ´öz†ü;È} äƼûôÁîdØM|Ï{É&žm*Ûì=øòõå¥ÕQ§Î­bˆµtNÓ·«ÃT¥jšÑ÷`È¥±¼¶¬çõ«wÀŠ-·çxTy©Y[ÈÈÊE’WñzÞGÑ-ÿÛ½/¬½fJ3¥›Ò|nÿ¤ Œ›ƒ8Üø±BD¾4’èÀé¹ØjyÁ怸ˆÚö>x°›Ë`.•yøõÓ§¯ëè:¨‹•R9rš«ÁŽUt ÈhË’«ÉdšB\”(ºÞ78ܧé‘0|î¸S½ÊÄt‡'. üEˆ•ÏV r„·‘ˆüpÍ‹3´=âŠñÖ"ë¼W`kôÆ·øñ!‚ÈÄ-7"qãQPâa×<ÄLJÃ^Ò“×уw—'þ´ÔEµ×•×2ùÜËF‘AdLÀî}*û‹`ùí{KÝ”o£g7;ЋðÔÌzÐĬ¡, ë‚Œ¿ì¯¹^9¥+3ë‹™býoÅ¿K¨oÞëy[öçxË)5ú.gú£™¢$Ôö6ËZò©¬£ÿp(è¤lHÀjFÊ4¦R$þß×»³Nç6ÄŸ€'í¤˜W¾&³<~©“òo ¬#­ðoj6óÈ+–Ù¾ò5Òu¯èßFä©Eˆ²“þ¢&À8ÅǶŽ¢™ˆîž 2’ï}~‹ùpöÊÃ? ¤üá§Ù¯_P‰éW$IÏq{…‰—žœ†gáÙÌ=%â¶Ê x}MM½‰*,¾vž›^ +{«ÓÑä¤úB… «ƒã“uôûÓq©:ˆ'FÀÝCZÝîuyB•À÷8Á‹Ü)*Çi¦W¢bÒhÏ­È)J¦ÜbcQUVà( º‚Ž Mð£5[µØT\%m‡^7Ö¿=Ý*kip;® ˆ‘|#>6·³õ,uÇ·ðÖÄ>;ßóéÂÏ3ÏaŠüšj-Í?êTÃ_€Ø÷¯˜·ÀäGÓÈÜW¾!–#&–ÌÌr/WŠŒ›Žjv/zçD/;÷æ` øÙfådk«ZâVk•«ÑewÙo—“µM>Üo,q•Q²Ô“2˜z^ÛÑQ£ÎšbŠÿŒñ6ŒÀ¶sqŸ~vçqîÂÏÉɬÁ”0]Ô&íìöv±¡P¸TÓNKöjOŸÅ‰ë¬ËÝÞ&¼”HÍ;W!Í¡3ÄæœóÂäé’Q%=YÔªU ßPêJåyC…t¥Û`Õ+L:U“ +—4Ï˯R_F¾x€ÒJ"Òcâkq‹èÒ0ð‡¬kÁ”ªÌe¬cûíÌ»à{hë¿Šqñúá© ,ºÛsÿRw{•÷†ÌaÀyiœ㶔 +†©›‘»Ãh©ýcÃÝŸÀ“¿Ty±}:zˆ¬iö[Ôøs/ýXIi›º'‘TKãPŒM{Ê»ÕÔk †NÀNÙLÈ¡ÄJ6—Šq;•#úZ¦v6Ä„ØÅ·§¾@¸";eh- :¿9@k6/<A3ðø-X:£éÜ6؆^>gŒèásû“ûÀÿþ¯WxYÝuþ¼¼XÕD›=Ú%ÝP –¦*$•º¢s(C³ÆÖÍÒÔU^- Ä¿:™šÍ°*¬¯¯Ûç¢\Í*™•i=ØÊý¤å η E»úM܉h7‡!7}N,D_D~’(åò&ÆìÔË…ùº¼â4Z%®,—¦¡Úµ³Õ€×ÝÀïYôƒç©œÄ©bÆ‹ª_öûܱêcË pâºÃ¢#ÙYû^p—í…—PH†^‡Ðï‚þq6^)íTÒ|½w•örenHlŸoäAµ}MïÞN¿y¸|Ï¿w>vcðoÚÉE|4ƒüƒG— endstream endobj 122 0 obj <> endobj 367 0 obj <>stream +H‰\“Ñn£0Eßù +?¶ ¶gZ Ej“VÊCwW›ö8)RcCò÷õåV]i‘‚¹sƘr½Ýlc?™òOÚ]˜Ì¡] +çá’Ú`öáØÇbY™®o§ï«ù¿=5cQæâÝõ<…Ó6†¢®Mù7ß>stream +H‰„UmTWžÉdf‚™&ÚD3ÅjÙ¥âÇÑ®uÁ" µE¾"Ä‚ÐA¨HAm“v‘(ˆ€XQ¡`…Š_ˆ‹Œ¢PEü€ºÖ“SÝw²7»g'ØžÓûãž9çÞç}Þç}ÞûÎÅ1±Ãq|Jèªèˆ5+¼Ã²S“ÔQêͺ5†L^›š¥Ñ:ÏU¼ç'‹è+þ¿ÿžONÅ°šb7ˆ™_L¬ž2!ÔÃ‰É ÊÈ4hSS6f©f%ÎVù.\¸@µ4)cƒFeÐeiÒuª•›3´™Zu–&ÉG¥Zš–¦ŠtâuªHN£Ív_ P¥êTj•V“’*j5Iª,­:I“®Ö~¬ÊHV¦¦hÒ2ôª™ªié†á‚ŒÆ0sa1l +y’Ø_l†-a,ŒÄ¢h,ÃâÆvpL„Ø|ì>>ÏÂ+ñ&ü²È]"J}&:*ê'âˆ:â7±Lì'Nç‰ÏŠ‘óÈU¤…>`|þøÎñO]ÿêšäZé¶Ìígww#`<Ò{@ ¸"ÌÊ 3½P RŽ*ãÇ‘àå¼hfx«£_ +®€!WÊÝÀ­l~ŽÝ—óØû¢Ö +Ì“ Vf?³ˆO•Á›w6¯2µ¹hÿ˯K¼)“Δµ3­xANÚ–¬¨ÆãJ®Ôÿóâ+ù³Å-‹×Mûà€ºfµ’Ù©Ct4š)ŸÝ‹d°¨ñÎ?.ÝVª/JótêŒ÷Ó£m·ëKkªªÙ#u‡öÞ{¹w-¹$a"wž’Vg}ß*o:zêô‰c™1ÙÛBý•îö2=ïZ ¾Æ^&]¿ÝÛ_‰O,zM–£ImHúÔG9ê;Tô]‰ä°'¤<¬_Ù»  å@׃èb¯òZoyËÉk®Q+q yIÏšì‘<}ÚR˜$‡É±ð†ÏSåœÿÒõ_KVÒ-E½ÝïI.Ÿ@"åH¼ ‰#C”aï…ä'|& ÷ÂÁ^ÐéaSÓ—M-’ÓmæÎòÇÈ yuÑ%a;4KÜ¡‚Ãm¼'aƒ +)ïÉ9<©?ËÀ ¸³!<âðN´Øè4H!þ[ØSA%(ÅÅ¡bÄ"e+Úq,'Fž;!w𖠶 ˜aBŸ.þÐtÖIÅÿWÝŽE¹ºä~›øU9¼E7ó‚¿$»G#B@Xä=ÚaAe¤;°œ•;oVÊ[8‡…²Š_ÿ,,i v‚„Eм„èªPs|¤7ó³lˆº j*¨›HMÚ(d´§ÞÔ)$• +×ó&‰Ò“88Ò&ÎcÔ +úçËlÌËQDPàZ]zè$ÛQwìêey}á÷š•ñ­1ûÒvKþ„¥ÞR[/©«¯hi•_Èì^U£Ü·¹ÔOâ(k´•úùhaÁA¶ÆP‘®‘'d«?Ö+s6¥þM±‰ +7PÌKnžµ&17I»…Ýš›³Í_1_hÌ ÿ’ÃÛmÞ+=±zo¸bÕô<¿@öýà͈ž%GK†P<|ùðê¡} ÊAúÓQÙ+H†&ŽÀP]†÷`Ñýžô‚ãBk8þ‡_³Â%qM~xt»vÜS{äg¶Ûo+;Ó#@á”l3õ˜:’$ý¥Èm¥µ££¯rý˜9µäsø++ñJÆGpȵPÇ¡:ȇŸ8Ç"gK ƒr7+n2+ôA‡: lœ# °§èñ!+1$³òb +Zb$ºÀO3<#ߦ àM ùì¬0;¸À„Ëø`ØYï1 +âÅÜ'm7x|€im“Ý ˜»vÂDÃ4G ybZa¿Š4ýÇ}Àž"üvÐÇ;äšÊ¿C"ɸ¸0@p²¾ÝDÁ·Žvò±=å]ÇYx†?KΫ¥›ƒÃ>b… 1"Óýˆ‚P7 .ʆ‘:KCEÝÉ7[Ë/ž’w¥õ…V++cá +äôñ +ÕùʈD.F.ì‡c‰YÁ³PYfµ³PÂ9úƒ Ä9‡v_=Þo…êD¿=EêÐÑãÒo>P.o¾»yPñâ»–†¶ù¼¹Ã*çýŸÐ¾éÙÊM9ÑyjEB²¥AËæ-<úDÎgѿ׷‹&à+Ù3 +LÂ5_H¡Ç(ŠáGIaêŠ~\~ÖtÁÛœGϯkeòá!Ü’¢IhÊZ$›{7jäQWûáZ6£Ôק8RµkO-Ëœ+ºD~^´ug‘"ÚØ|†…OhpMº‚Þš»:gK‚r!½ÿøå〗§°±t¸˜ÉGr:~mlAªb‰áü7ÿ‚yÆÓ¬ûV..‡O¾½Ç°*lÌ9&¸Dx3˜s=¤™ÒV5ÅŠZ9éú„œ܉ò±ÕxLþw­!©ë–«ñ$Jò4 +í¿cï6\ÒAö—I³‹³ •5¾Ï“(ÎÏÛ-£3Ê"N$²qí]Ša¦›!·x«ïV”T—6rÔØᄦFS_M÷¦÷¬>Ê6lªÐ·9éO©M•tUQCAKu“(./hÒуêK¬á_Y– m¡Æ'Ñ\q7IT·_à 'ª:Zi}¾°ïÎzˆwêttÿù¦>¶ƒ'ׇ½~¤D«Ñâó«%åå'›èú|ÓžVÖ·©Ê›Ù"9‹+öÞ_œU°—Ë +…éûèO‚ïÈØ´ýiªÔ§ÔÝêð:û€¼TÆV®ÃH”¦)è¾êMl,v&µ¯âkQ¼2µ¨VM¢H­ˆŸby[ø}ÆŸ îç‡ endstream endobj 223 0 obj <>stream +H‰œWKs¤È¾ëWpÇÂPU@o^¯½1ŽñeVŽ9HÔÔìÐH+èyü{ç«ŠuKŽ5õ®¬||ùåWZEð¿R:²Žž»«OÑxõóõÕ»¿ÿ–G»)RQ4íÆ«w¿B÷aºzw­þ›Ãàõý•*¢þÁ§1‘5yVF×Ç«›ø—.Iu<À¯‰ç$µqÿ˜˜xL>_ÿë*ç-Ñ´î 9ƇDËQ=/?¶c¢Müƒ:Ó$UE|¼Ã3‡tnïâì[HQqš\ÿêJU¦£ë_@ <ÓO ½,-AÎqÏçDi~Ü>¥Ó[lïàa_xP«ºIà!îŒüíà}ßQþ]¢ôjG‡2d‹ï•Ç#êö4É%)ìêÛ!ÂKQMó÷¼bÀɽ\ç4:Ùá +‘íEúš¨ŠÅƒ*Ï#RÜõ_@WC?ÒóTÞ¬\vlðTÜÁé§X™Ø"×@%Ì2À¦£Ÿ/îh2:Š¼x »DB†§5tÇ´•Ð)»ãÐy_w?ZÔ+Ù kèxñâìàæm?°c8 ´“» ¤âÓ¾ïœOq”.n²£¯£ |ƒ-ˆñ€{m|âÇrï5ƒ:_e¿&ðsêïÚ‰û¢qÿF>IR²Zý}Î…aѽiâkHîeƒ?çÃü )e|oìç +¹C?‡?tŒ¢Œ{÷ø;>Ê€SøŒLbb Ë!Í‹“¬h°ðjñ‡q/G;1q5vâoðà]?R 4 Ž`ÄE\äq ËnÔ£è²@§†! °ôæ;§Ç#ݼ/y<9¹Qs>K|9GEÉÙFŸs ˜áßk„:ÇÇiæÖ‡„ÉihŸe–­{àÓx¬__ãÅæÑÓ$“µà ~è`L,måÞvQáZ¼k‰Dˉ·1Ÿ(ÝTŸo“À“H;ßP㇞ÕMšßƒ't¬»inGöÊvˆ6P‡XzèxC„³OJÖ% Z,Èx˜Øqf„»Nœ5¸@8˜"XA¨/Ù OËHx-a°‡7x;Ù­IqHiã,"$c)Äp+¹Ò’(hC0y#Hí +èP*dšDC¢‰Œ-²ª¶Hk2Ý45òˆxß ÝÜÝÆ· ¦Ö³¼£Pu–›Ü¬6ÞÄ$`ÂFÆ·ƯN =r›YÅ«-¦FÏË[CÑSm³¼®µz¬%=˜%³ÛÐÀádzüᾷ–œ÷¯Ã7:ÅQQ•©¼%‘ý8¡4žÈ‰möD§7"LïCÞ…ñ›²ÓªRð]€*Ó­ݨ󯸙ç¾ìò¼0a–‹ì”½âàÝ/È…ÖD—-`oD©Š©«þ‰ò•7rÉ;þÖbF£lŸyÙ²pêJœöáÛ™žÝ(BOËðˆv~㬠°Ïø-çí7²SšgXP<=¾Ìy,€¶NýÐÚµ#}O +¤}Ô>Ÿwµ |Ç% /§ºiæX³ø +€ÄQaãO0–Ë.Bñ`Û6\…"¯2›ë2*«&Ë›Æ*Ü÷ßÿóô:(&ÚÖ«}èß(‚XšÓÁ3é@¶بWPâV24™ÉõeWl*ñEn3chªKn3tkà—Ìà`Ú_Úz ¼Ý‰`¦Ç72ò ƒ4ÖÓŽIúLššà-gÔ¯s•ÕÆب,rÄVV?@I÷<¿ª]”™²ë}/$ÊY:Á‘­!¨@Ÿƒ|ípIB¥l¦óD—YÞdeu‹¤ª²™2¦ØàbK×¹Ç/lSA +h ^E¼’qL*†ø@¢S~ xâò&Ø9²=‹¦ k@JˆÊl Å„Öi¼k‡V8aˆ!.àÞ +ò9!Ý=†!hlq†Ô܃i…ó$ ‹`ZMùŠR4=k÷ýÆ›ëÚy¯¯:`È×SÐFFý#Ê+ ®è×J¥»à6tNOü•Ù—=¨vocÑO-ßδXðNí€(›Ú’Éú½ÃÍî䇯‚ºühË—ùÑéæÂêÄ–Áª?§{)žBQÈ+)vùd¬?yô ´ðSØn`ÕÑ–•ßòà +øýÝÄ\„ºàþµ;QzµµÑÊ#3‰À(ÿ†ÚB/ÑpT+ßo-s¤û&ºXâ>‹§M½/Sdn…bŽ©¬) `’VqŠ¿©24†$€+ Má¨ôØýÍrVæËàI!äпዹshà ;%6Â+¼½ad±·fãHÄ$‚½žÜUÞ•¡ÓŸ\|äøCwq…³ò¦×hyi êÐuéªÊ*GË_ƒW4YÙP¾­(ÿu»ý‡îþuÚ® + öQ‘.õ†·¿¨ØVÕ©+rG¦$Ô~j’…†ø;.ñ]ÊRÕzu=¾ëO o,äûr+»Ï,^Æ·Š¥­6DŠŸ- è²…€a¨¼\¿dß ! )ê¬i ÍÝ¿ûñuó˜zñÕ¾”…±‚—¢|ÅX¦ª€ýí&QÆdOTÃâ뎿à%[T:(…F—xFªW…̹ú³†W +lªMVlâcÿpxÃ#Ê*«v¬¶{—(7Ð]RÆÆÓû´RVËÊ‹i;Èz áIðÒ—/L5x(„í¢_—˨ˆÕÁˆ$ËÔ׋+¬Üó®¡EžÎ©uMë•Ù`Õ¦ TŠêÁí™  ¶žO_.âg*Á¾ótÔ«–"Ѫ³´×!¦ò_Ê.ØL%µñHŒÚ®.õÅ—òùÉzÝÂû·tŠ‡ÎrËŒˆ}ÿ‡»Vä`5 `ù“lÂê–ßOî¶%SYÔÇãä.Ý p uÐ1PÑš¥U’-Dºsuœ;”b[ƒÒ´dA¼×%ÔKu†#ÕJ¶E +7ûHqû´ë-âxÂiØGËžö9d„H~žÍÊ 4•™@žælã)ÒØ0` gLtHëœ ÆBìǾðä@ÎQ)Tq.4ÿmâk!ë(wîOÂÐ w¾ž{ìŸI>…ÕYmË&RUéÓ%Ÿ¹{/KUeZAú7ÞÄNOÄð ÅîšELf* û1…q^3uV™2@9©bˆýß måêÔ Ï÷2µï§Ý ¨ª{°‘ð†/W A®^–«Ùšx ‡0ÃlÙŽ¼Gš¹ Þ0ýújéiÂwÿŠé©1ñÚNŒ‡ªU¢¡êzHƒÁV8‰Úªâ¿÷›Ù‡×ro±g<;;³ûÍËÓU `’®‹F­EN'±9Ný q:¬1_6û•ßÏöàƒÔiàãáL)Ð{‰K•éàÂH€, ¦àLµ¬ÆŸÿ ˜Ö: 1ç,ÞËy«_t’ÕUJŸ ÊÜí.µ¯‹è%Þn¹ßQ˜.oÔÛn÷8ö‰ä›ñH# +o\\ä4‚t5Oní÷\þ½xšOÂ$k©^ {q º|•’2ñ,9á{¹Š̵âÚE>‹€Naow]T&:¼ZêQ¢äQˆ Hòê)TòñYqn¼œ Û©Í´M /Ʋßž-*7téFCoÚ… ?LªÜ=—2nØ»KÖÜvݯ€`I*'QÚ3ÓäÚMs•¿ÈÅ ‹¸–µ­zÚÖ®¡ìÆ@²ÁyþÎ-Ìý ƒ—L§Ÿ/¬ýšÓ:8æ®ÜàU.ÞÅêK•¦»æþÙÓ!&JqÖ$>@nN,±õ»f{¥]¹¬äO™ß+sš’jØ…qíÞ·¬~Õг‹ìÝ¡nïß_WÁPÒý0ŠéGpòa6¤‡6Pù8R%JE˜.ÆI4Æè¢Òi|[÷Á&PhÂc¡JŒ1V‚ù•VÁŵÑftŬë¥Á.ŽY}¦N(Fëý÷®?6ÕéÂäÍ>CƒÛË ücÒAHDÛ¦Ùѹ/ÎœÛã³™hÑÔÍ’Ów“îë“Q­Œêõ¶zœï +úÔܾR¡ËW-©îé6,£)ŸÓj_×·Ç8“Ý~»êÌí•Êb»æMÕbp±k±æèˆú<óáÙö$¿^™égÊraiÜïïeMóݲ[¾ n ¿¯~}Y÷TÚÍŸlÇ>›°â4RiS©n.ƒ‡iµè¶1ᶨ4áÂA¥B\˜„«$´“IJÜmÜ€m”¥”'©…àɨ›Ìðf“Oàì'Xªg”Ç -–²z‰7óF*z”œ + ÙZ@^µŒá²˜åÒˆL€› =à}ÀÁÀ)>stream +H‰ÔWmoÛ6þ. ÿáú¥†ˆI‰’¦À’vÚ¬@cû0ƒb3‘VYr-%N1ä¿ïŽ”m9R^¶o“ó"žîŽÏóÜ‘¢èÃ8|uÞþ|Àuã¤RÁbU*L˜„•v®œoŽà€?Š ˆSAÆß rŽ'NÐ%‰)É„ÿ‡É•“s +\Hˆ…da“…ã.o.Ëb³2k8==?~÷Y}×êjÞÀI½Xf«ì²Ôd~¿få~ïMþÂi|ÎL>8îß4žüà¸`ѧ#Á‰„»\·Y«¡i³§»*ª¬„˺.uVÁùÇyíêFör=t|úãÉg ºÊÊÆFíïÔC”‚…e/á—z®aU×íØlV +ry@}úL{!$ÙWýýpü©Ñ n³ò‘çM©¯ÚX×y{8®á0p#Ŭ.ëÕSp–¨xÃ/šqêv¨v§Þò5^m^4 cQÿ!ïÍsLˆÏ7¼Ÿ"´‰0D0âQ:»¨ûÞ´÷ð~±mg[rÎV³|ËyŒè–¦*wæaŸàµÎ‹RÃÔ½ƒ×GPÝ”p;‡¡bEÕÂl±´‚!QZWzRcfð 5,®prÁÔÃÞÞ¬*¸cÃNÂKã*Ø…¼3„þŽQg=çÿ¾ç¿ëÁq©ñê óÃá¶.æ(A£WíXßÝèÄnÒÐðÀ&êR<ßg³í2³ƒ<×g÷[\q¤F÷‘ 3Èà¿Ò3ÅÈ©Ú¶£ö¥ÖënÕ¾€ð~ ¶¹‹æ\Ïq +Ó˜ÿÍØšLѧZ:?•ÅÍ{3<¶ oí¼×ÚƒMeÐßtå»McÿUðX‹[2±-ƒµŒ4ÆÃL{W§@¯½:Ë‹:ì9Á;uIñת`‰çfŸÁל>%+)?}õ”nOÕ’L»ì»Ôçæ~õD]‡TºÌGàl·…ûq]èøÁíñ)æ©s–JiÂsùÝýä éfÜ[/v3˜yÜ­=_º¸¢ZOº5‹¥ç ·Ôž¯ÜþM]ì::¯ ƒÏ…»ò8wµnP<.Tó ÊÃñÅd/]QÁ5p +iNåÒÛàÉ'çí J0k/4³j«‘ nIpb¡&“}°±çxð>ë¥â + +ð`.”%\ò><´K’Z0…o ªŠe@ÈíÁ˜Œ3žp YÓÜ ++K£$Q1,ß)˜ä®­”)Îã]J<駡ÓM‚a¨ðH‘¤;ðHˉ$ä>öz(¿3„”Á—,‘)(&Ót˦>$*ðh…”dàÿïŠb‚TB‚9ºoCØœ)°Ä©ækàÁ~C¡nX»N4Ð4J„f¬djƸ÷Ñ7-ë`n­Og%·À®Èš˜±Oó …'Öÿ[¼Ù8Ñ­u#º%XäÿÐgÎ? ­äŽ‚ endstream endobj 179 0 obj <>stream +H‰”W[o£H~÷¯àF¡(0fEê[F;ÚÞyhKóÐi*IØ`ìqáéî¿çVP€;³ÛSUç~¾sΟ«Lðo­² ¬²àT¯~ºÕÛíêêݧ4ØÙ@Ýu««_àõÉ®®¶ê6·+•)ü…G¥ƒR§Il÷«Ïá¿ê( û¸­£¸M×tOÁ)*Cx͇ø¾¶fåáKÐGqßj}ÙþºJ™lð‚L•cª„iÆ_3bªt¢˜éoçSe*´½9E±*C ­Cd»G|9D¸ÑÓFcéÑ?×ôü5ÊÒÐDpí/¸>³?‚ +:ÜãOצˆT:úŽ«GØKCǹ{æ +”¤·Ÿ¶Qµ™“}>Dª¿ùµÜoº‰ OðI1â Kòvw‘BÉó°«ÆÓ»] 6üª±ýb•dÁö=˜åhžÀÜu‘”±¾¤*îš»T—;VΟ¢"ƒ˜œ1&§x²"\®•®“u•o‚u®’´ª*ÄgHR[Ÿú»ð.¤ºˆçª®z£&?cv–©â¸j¹™dÙ®’h'4ölŽ¶ ¤Ï_`š¯|:šîúúêÍ®?›v[ë¯o?ÜÞfiZÝÜÜoß¿ VÀÄúð–žl:É«ãðŒ¦¦PÞoŸyƒ]E› B†ÀaaM¨'vf@Oxë c€åWöé^dÃ}8=÷.¸hóÕç¨C‰¨£Ý’œÃ7xå´i<©Mã*ÉËÒóóÙºt¡d x ë!Þ‘±|&ȇ&-Ýkåâ#œæØÝóÆLÿ²èŽ‡Hyü&FBõ]ý‚í[ÜtÅ÷)¦áŽ«»?—>S‹ª\,:¨6³èØ|€Æ‹T8QñEmBkö²" ˆ2Ѐ1Ip”±ùàv?»H¸tèÙêÎv› LÎ X»¬­7á)åfcyµ,Ò(¸ h¦$€­ããÂ`CÙ-‹‡›ÇïLŸ®Ï,6°7tá+6²¼˜4L…k—ÄYþb¥¡GóŒY37Ži-Z<Ë0%yaøñ7ˆ'^Õx]Ê Ï”g›"ÉÖåÅ¡°¡ÜÖæ´{~Êu¶IÖ)@¹‘ <ãë1~d™3.©çä%Vèùž³WnÒ݈]”‹jø|€ÒLhéb–º ;TU²Ö¹âA ÚèûFšÆ =på~ó» èTÚt-ËŽb‹ +PûÞC÷…SÂt¢ï?EùÐ$(”fOÇ<Ï-ü~¡ ž‡´ÜIr‰šÑÛA»Á I$¸¸ˆ·¡%tòð|«(žqAv®B¹zo ÙæÚ2g >÷t2ŠþÙ¬?žï½ÑgÒÏ7öYš‚W€ÅN¨ ‡Öƒ¤y©iÍØqcVùì N‰¤²«¬]6ÉCžPšásƤ3BŒ÷DÃÜ3Ѐ¨q!izVÛuòs¬EkÍ¥¤äÿ(ÃØÈÈeŸ¶-,2Ré`ÿ¼”B™¼´õv0ÈB#î=v1¬Ž ©êe0ž’‚¼pkÄ:Ó9¶Œ÷þ97b€RÇ^]¶p„ã_y6¢‰´­Mç3ÔH ÜQ|FC\å#É E‚ò÷]úG:äoYpF^§i©Søs3-$tbÔ†J@Ä°Æ-å,èÌ#ÏZhk÷Õâè:qé¸(à-1@p>Òë2iþEP‡âæçëm³cà;ã·¥ÿ¸Cë +‡žØ©£j–¶ ýªXÑsG9¤¦ÏnÈ% pÇÕWÀs +qR_†ÊõëUù#ÌÃ3‹uœÓêB¡qçФ۟&ëE:6U®õ*ÂEZá¦_1ᕳ‹n æÅhƒÎØAi,8GÇÔBJˆALÅtäâÏ@ŒàÊjÜc`J¡_*9Ç-$MFSe­7ìÝÍlr8ƒŽUxîF¡3w¨ÀWåöû»ŸŒ ¸ßßSúȵI•9œ-eÃqñ¨0ˆª°3nõZÜq±ÎœíªðßøØòx‹_€ +‰LT"놂 +´$TTÞY£%ó˜û“h>(hûbaj뺻"üœ}¡ó<Ú¹á/—&|Œ¦Ú\àÔ¡ê š”X=ëðynÞY›IŒÑvßé…pž~[: >¡9”Ÿ« vx—Ëðcä:_¢OüüÆ?S$\¦ Å=¡bcÀÓìgXNºNµ Í µ ±Áà»ß‘*2t)2 =xKŸ¼MÄe×u-¥pr>˜Þ0Q—k%ÂiOÁ©¼¹Jy]õEæQÖ`ž"ØX bËð[µÿ)ÂÊ6FÛv&aë ‰ÖXÛì‚˽»D°4Õè´M$<íçb3’ýhFË+(C¥.]­“¬ªJšÑ s±õ©uH+t•:¯¦7:ÿîSì,Üì®[]ý¯O–ȸâ§KhݳÐÚU7•æ<Å\³±/âqŽòFJ¬ztãi(.–µût4ÝõõÕ›]6í¶þÖ_ß~¸½ÍÒ4»¹¹ Þ¾€f(߇°LY‘àåSN>Q³JtZ¸ÁSnÀC4Œx¥¤t.ìà×!./tùÃœZ p­›£­—­1skþÁ;\P^a¢ Õ¡—µÖ™1ß&ý•ì¹B ,!w]Ëã§"s¤\½¡ÕP¾æ“\šèÁRxW\6¼Øô1Ÿ÷Æ'âPêE™ç]áRsÇË‹MœÐãÀz:×ÀƬ夽;fÖ6{ÂßêRšÓ%"´;ûmÐØö ±jÚLà»×8H7é  ‹G§^€ HëlÇK6Võco¨*©R7°ž³äýzdðf,ç'ÓìÄ w‘€cIÿ±æ•¡Á:ĵýA©ÀHX†Ïx€ÍÛ€rhᨺ‰[Èl,4åÂYCWã\,}§”Eк4êjÖF‘š I¢ˆØ[|í|zÈ€/´³½Æ$×ó¤dÚC/Nm +³wýÏгLna³Ôq£ˆº+ÎÓ6ÌôýhWéÁb3N½£,ˆFz3 (ØÀ€rh¯œW°à4!²´Ï9|àªø–_†Dƒõ3Т‘ˆˆŒŽâ¶ Kñ4«sì`p€€JGõS6ý ’6 ?¦ªÀÆ©¯’ÝF’#zçWÔ‘:0;÷åêö°1Æns Z¢Fš–Z=Mÿ½_D$«²JT·l€‰¬b.±¾÷‚\‘oÌî뇈òæ6jíîÞt¹¡·w4Õ"…Âf)‰ÏýíóOòî®~V˜ôëë»í/"¨ÜêOòY¹œV ‹žÔp‰üÿ3™Ö#H{î¥}AlºÃJÏáã3dD¯¯Ïø¸­-»©\ kÁW*§ïDI¥©ñr›¬Þòÿ¥ö +ý-Ž“ƒíØFaßµ’øwZs»«ßé¸eBëîYÆÅeˆî=ôº¼üïÕ…S%õœù¢m2üfª¸þ¸å¦ =OƒR ¤ë‡G‚š¾‚ ¤¯Hî{!Q5´D†C³|Wç8…LbÔ„˜©E?NU™4éU¯œ28µ&XöŽï|9øýWh†£îa°¿ª•6ÐÄ5ÿúi9!ìë=¿Û~:é’f¾‹íÝ׆t~ý#œÖKb *.œ^oáû.ñ¦6¤•†DË=Â,‡Æ´=Ê[[©© /ûF‰Å Iì…õ‡ÊÀ;êöñ¶ñ€e+\à #­Mmg!Îd‚°2þí¶÷‡ã—(‡ã©s2^ŽÆ’Ö½ý#ŒîóH}^Ý `É KGî·»î t€ÂÒó‡.`íohåÔ 5¤-IÚê\·g8µàOqk_·!O÷ûÇúuÉ­¹€£•M‰ñóžjòî¦-Ó+½~|ºÝ5«¨›év.ø© åõ­¦¤Mf7ÓéSVÌÊúðþVx_o9ª#û‡n„W>˸ké¿ëA¢—ïªÆ’72ëà+´‹,þ>èa‰ „­Dj‰ð¨_èÑm;gáÕö_ûêqkCük›<Žãbý8’tÁ纂¼ÜiK…-£3îñ÷ïƒÂÛ¹æiCÅ!ú€/áõÇ L;²›õM//š!!ls¤`†l2x¶ø&¿ÊçV> D&ÔÝÏ‚8- i¬yøfæMP£jòáøÏ«wÝÂlGX!$s °éÌï.Wï~¸ß^í®ø㟺wß¿×ÂÉï©ø¯+ß}ßõ2à7¼’¼NªäÎé |Œ®»zà=ø¯t6°0Mw¿ú€Óšm ÃSñ¦s.ªè³?yc†èˆ6tÎâÆâÒ°1¨PºMQT,ÛXļÿ@"æÃû¿­\÷{×’2‘l0^Eíp”ÅHh”.¾4„ÁLψ*ùHgXÉÃØ“³”?M -EŨí’i¾-¥u¢€ke\LË÷¥U1‡ì™2FÞè„,X•m9˜±r­5Pb9 }¥31w_v«»O5D¢­uÒ+“` YK{‡$w‹»é¿ ¸'(ãäãjµÉØîû×FCošÃÎú¤i]ýŽ4–Ë®ÑYý‰rŸ<êºAó!7£<ãÀI°ÎÉ—ÛY×P{z”*ØXŽX_䎱ib}z;ëËÑLœ«í³ÈG£b*‰AÆÅdªõãÂy•ù'ÚZûørÂó±?3ëoOA=U²7¯¼--„“Ë {!Ç—Àße«P¾ƒkÊ×°ŸW)ò"Ç2qXP|È°¸k¦Øo^ƒáGçcg³V9lj7àexã•5åEop’‰uKë`ÆIŒä°áŒ—_b¤ö>DѧëbÌÏwuœÔW-¬0ÆS7êj×Ô•kë*t£#OD¤#œ“SXB¢ »Bà¬exp’õÏÓtBc=žzëñý á¼lŸºÒèÀècìÿ_F|œ‘åõ Â…5 ðe‚m]`¨*¯ÞàòºXèÁ ‰gƒ‘ˆXÄaTI/á.*L™-[…q$¶¸›½%£¢w'¥¡Û££LÇØ`a²Èˆ ¨ÈFXí]d¶döEo`Ía±Œt2ΩÇ,Ì50<]‚ÈÓ¡,n›ƒ!xÉ“¹ËáY*mƒž•+IŠ¹˜6NQH U¸¸1dJ*8¿¤Í»7QDcAÔ´Á·÷Îʃ)z´ÆâPàèš2g]ªW­­F–ÃSµ=õ¿²‰¶ßYëmk~jÁ¿ŒÀ?žÀ[çeû,òøajÙ ]þXÙäW”ÍvOäÝåÊÉ'p×¹Y¿È_Þå’† +Ói,B6 ²€®VÐpÏÆ—o Bj°ª8B¸—(F7s”*¼Ï*¸LîÄñIˆZ-ñbü‚?ó•µlC±º¼E'¹q'ß_…3>/f"68ªqA gsL‚çQõ P­w_%Á]7:r$Áó 0|^¶Käÿp)]yµ§®Ü_}Z½»4ÿôx¸¼Y™ÚaªÆÓ%¸hxm0]>¬Ö7÷wŸ/.]m hÈ+¼½^ý´¾ºØ¸õãEXß?~¹Ø„õþâçË¿°Ñ°`ƒ·NâW“×w¿àíoŸd™V&g}¹È8Ê­Ÿ¶Oø¿ã%ß]ÖÖÇh~;m~M¦¢,“Sà† :Á`c½I'}lQÝ$à‰V z²i$wáØPiǹ ƃénœòž~q@R‰=d#Þ†BˆgùÙAÓÃO}¬A4`ñ­aayµ2*"PX‘i¤ŽæŽÃR:§¢õt´ÕʪTh¯ÆF†Ä«4YÐç‰éõNEÄÄÐÒ(†ôþ´¾ß]lòú¦OL°æ¥Ä´y Ù9(V¦ aQ…”`º—Þˉ@­(ãIMƒˆ’kò‹“åÈw”„Ä_"„ÕøZ2ƒ|ÀL%ã„]€tpú Ò©‰UÀmP‰ø™ÃŠ4¤Lgª~Î…Ež(—1ËÉpŠŽ1Qú|äÄšdŽNfO)MH¼ãV¶1/°f.ʯsÄÖ +k2ÅRú­cCŠ'X`áÀñAôð¦b6+T9U„ZDkhŠ‚uÂ…Ãà»aŠçG1DI®Í)FT…Ø°¯¨p…lÇíá¬b-£œ]Ž„ƒ.°Ùs$’‰­GÖ +E;OóÞ<Ôš6Q]¤Ïø¶$t 3ì‡q@H¤„ëƒÒ„öKŒ‰²Øy–[÷üTF‘ÊÐÈìbxWË-,F™Dö¥—u ¼€Ëâ…ں̃¡ÑÁ5kA¿ÉkÛ†uÑîÊjÁ”n†é‰ìGÿSŸ7 5"U7´÷„1%IWP·IAPKæfö–ø‚$yêZb+øP¤!¢|8‘Òj¹£‚–ÐÏx*?ÛFñ¢¬"Z)Í›%SÀ!àE5‹‘LFÅÙF§! ¤#5Ñs¾½Š›Š…/4aªáýD÷>æjª':Ì¡½‘xñ˜‹‰R(¡}etcDhD²+ÍŒÙ^£T#Íp@#C’vY¸g·8n~$Ü\«ÛZ½<ßb;¾õª-.ùÏÈþ™ÞÏTÀˆwâÌô“¦•8žVìxZ±õ¶5?~ÍÀu®¶Ï"Ÿ(#KѸý‘¢)¯)3ªÓoN­›rJäÏÊv‰üD‡·eñGœ‡fÓ¡l…JS ž +‡ F†(Æ ÁeÛŠ‚Eœ›ñ2ÕLò¤ã )òœ?³¼%4‘'à>¨ÌŠ8”š%žs"ˆ™îJø/õeÌÛF Cáý~…F{H#òN:i‘¥HŠ¶> Câ$FR£°Ûÿ_¾GÙpí­2ÝI¦qz%~Ý4ª#'9Ü«;ÿÑ]ùý4@´@Å u0!‹%²\|úÇ„œƒ²Y§–Ø´£„À›AS_¸ Aæ¬÷;}/žŽìšµWÃÒì…:Žô]ÞÂ{2¥dM êì97ŠÛäËéÞ¡Ž¨ãl<î[ã‡jÈYa϶<¢šCc‹ªßàh!}S䪵m±Ðœfr$ ÎaN±ØªÌl,¸äÝàI‡æ(LwEX.îyI(%gjÃhõ´Xú?º—gº­.la¢'Â÷0Õx^“ ‰Hü˜¹“¶Ó£ñ-¢Y…ˆ_™¹h ^§t ÌIL^üÿ)ƒxå&Õí‘ +@sÅ·ä üj:`Ýkw9ɽù¦0=u‚lVÖ\”(¡=öÓ}à:K½å«BÀô£û>û<Òìa·[ožÃCØÎEf«Çð¶Þ¼†ß?Ãzc“77_¯Â¯ù…èÌ_Íï¦ÝõÔ]ß.’ÊeÛÖbX¾]u߇Qp£Fì«1†Äp{ v&‹{5´IÍ:pœûʱ]£Rà«Ç´Y„ígCÆ„ÉäÀf Ç…UœÏ`O±—}^= µÒ®‘è+'‹þÒý`DŒ endstream endobj 168 0 obj <>stream + + + + + application/pdf + + + RBPassUp + + + + + Adobe Illustrator CS3 + 2008-04-28T06:36:52-04:00 + 2008-07-01T14:52:53-04:00 + 2008-07-01T14:52:53-04:00 + + + + 256 + 232 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA6AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FWCfml/vd5E/8Ce1/6g7vFWd4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUq8z6rc6Zo0txaIkl9K8NrZJJXgbi6lSCIvTfgr yBmp+yDiqXJ+Xvl+eNH1lX1rUAecl/eOzP6m/wAUSKVjgG54rEqgfPfFW9JF5ovmAaFJcS3el3sE l1pcty7SzQNAyLNbvK5Z5VIlV4y5LbMCSAMVZLirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs 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 + + + + + + uuid:BD14D8DC7C16DD11BCFFD65EC7B1D34C + uuid:d81eb84f-0775-844f-8950-327b309a2838 + + uuid:BC14D8DC7C16DD11BCFFD65EC7B1D34C + uuid:7D197ACA7416DD11BCFFD65EC7B1D34C + + + + Document + + + 1 + False + False + + 15.500000 + 14.000000 + Picas + + + + + Minion-Italic + Minion + Italic + Type 1 + 001.001 + False + MinioIta; Minion + + + Minion-BoldItalic + Minion + Bold Italic + Type 1 + 001.001 + False + MinioBolIta; Minion + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red + SPOT + 100.000000 + CMYK + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + Adobe PDF library 8.00 + + + + endstream endobj 170 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 382 0 obj <>stream +H‰|”kTgÇdÂl]Öq*ÉÔL¬kí­ö¢u×UñB±Pä"¨+HH¸äR“@Œráb0ä +¹$¹ˆA­.*µ®ÚÚ#®»v÷hw©Ûݵ{é;žé‡`wÛÝ;fΙyç}~ÿÿóÞ(.Š‰‰aíÙµ÷ÝÝ{V¥ Ë…Òòד¥Aª’'ò£Wx ¹8N÷ÃX*“²¼§}6/… §yà'€†Ç^~a[bt¡n‡TV%––)¹¯ñÂ}sÓ¦7VGïoq· ¤EÅÜì*…²ø}7µœ/•Ë¤rž²X°†ËÝ.‘p³¢)¸YÅŠb¹Š~û„+Tpy\¥œ'(~Ÿ's¥%ÿo'ˆ¾b åÐëЛÐÛP2´ Ú ½íÒ t(Ê„²¡h” ¡´d(ZµBŽÅ&ÅN-¨Xp?.³áËŒ%ŒpüÏ㯠[‘–¼Âd~n‘3 fLÜŸH¦‚Z’й†—@€ññƒ–ðebf`üÒö“ä±Ý­œñèã_yý‰=¡ure\;qÊÇ@gâû&«QEA¬TêKúQcÜfb¡Áur³´YZmÍH³ÝÝÔŽŸ¿¨HþY^ÆrBÂèâcèÜÝO$kV¥¦¬ý…ÒyÓMD€fÚÌãäþÙ¿,|ÆÁLâY“ý{{ë?5±Lb˜”0|COÜÃ¥ö$E¾RX¡F”òÃÆ"|Cm×=/q |íË>kcÙúaæ´¹h΃©y¥åQ•à#òfÎe³"V®ÿdX¸íí½+×ÈÕV[5¡?Œ}¨…[ÚÌMmXÚúÏY°„}S|–ät¤Û³qªžnßùNMAµÆópàÃÖÿ†Íd§XÌ¿ë»5ýj8; "óBÀB’B²K-ß›+æTJÊM%øÆy`¡‰Ü6 +jWŸ9#x‡ Ê()b„]±‹@7·ïkÏôóÂé½2g +7&¡^G·Ú¡u ²ŽuªG”—TŠ[†òÇÀ§7³Á +é¡ å` ¹&ñÝÿ±rûsÚM»õß´ÕN¹î|µ:q$XˆÎ’UÆ*•¥jnlrù› tÜànßõ·ºæ$töèqõ …iV*,Çðõë +ó‰w÷QÐZö–S‚ÁS“CÁ“œphô|o9ÁÐl€· ×øðà£È•kµ¬Æ| O!EŠÊ*ªõx­©½{Ôõiè:º +t¸—»ÃâÆÛÛên¢A$_n¨D˜'hÈõ jPÒ;ªN(X˜Z€¡I``•Š2•‘†m‰ÂNˆœ‚í m5¸áÇrÍf¢<?h6 )õ*Œ>´ÔÖškð´õ¢‚ýDJÆáe«ÙGx#}Ý>Îäé‘ñîš»ò-x—Ö_Ów?Šürš ¾:uß ^æ.z»<ˆÃÝnñâþ®:½—0æË)¨ª\%ª”W(ž@Q­Ã« 0Áäêî/&bF@Xä"„åçåUðñܪ‹g­f{“•xÒ¶~ô„=Q:¼cO†D\ÄÙžÉ[±†M-¼]þÁ…ß·ÿõK=§1W·¾8‹W¸œGø@üé‰î6ÄæliváÌíTÝùt¬^T'ÊÂ/0(ø zÈÀ:L! \=×Ýl/Î_QVH áT +Öa +ëS#£GÚä*vAne/Õm$|z²ƒ>#K1ôªÆ(4n5">¥Ä)Àó3Ô¥ùÄ>ž"+—½s´ðv5§@ZQ}\}¼ªC¨FЙ×ÊÞ;¸ü…èñ,ØrÄNMr/rJÛÔ^'Ûa³Z›9hËíÀdG¨ëTÏÐäñ»ˆ·ÑSçáØ›BͽÞÁa“RÓ]¨i~vâ HÌ¥èúô+vòQdz†ÐöÀ*iÙ·Á´è܇À _t× ññü‡²2¯öw„¸Õ\Sª'ЧY” N9êW…qú€Âž¥aûe…’â`ÅðxßÐHŸºG@0NÕI þ2¢ákéãBKŠÿ)+ªjkñZƒ½½†Ð5#šQͨvÔÐãnõ¹ý¿£ßr¦éh u²;å>ÉÁܼÌLŽT¦<"-C=`i/`‡pÔ·à +åšóQlŠFQ@âSù…Ô!‡) 0:­aû9×e–cÔæ‡t²=­;ÅW‚ìëê­èÃû#žÓ“²9Uψ(ãH8F‡ÿ):÷ðŠEÏÓ>}õ/œRÝF‹¥íº2MhOÂôhTÒv™ççxÄþk4˜ÁyÏÁbp,N?¢%{±&†ýJÄ9zßN|6Û…w4¨øQ;s)-mgÇ·®FBW R÷ü¤˜ûÔÁðó½2¼JiÔÊ™vW~v2í‡ç:|Í]?X‚ó’ÿÓ¨á·Ñ2¥Ô&]Ž.§:‡Ål  ç@ê”ZE.›NÌû,F# ™\‚5·¶Z|øÀ¤b+þ†bm r·ÓÈ™# 1ô H&gÕòËu}Y%Ë! ¹BŽµò›¡°Ö¦g‰âAo+Ü Yd9Þêc¡‘ x FïÛ=ü¾ïöÙÉ+ȵ[=÷n²—‰‚e%&C%‡I½âTÏÊýÚL›…uƒr?Æßý=1Ž¨‘‘R›k²uÙºxñ¤e¤õŽ÷ íõÌt{‘`‡ç„ wzêõ-z½Eï2»ì.»Óá 8=¶P­éÐÉ]¸(ï½u‰FFÛÇt©Q§i°gR;u7@Ä¥Ï$Þ{xÿ1:~ 6bSC9aŽä_š“¾p¹ÔŠE3—-[YR>WNøƤæófrï˜9uúÜ9Rk‡§ÆW§'ÉE%´$eKù-ÚZ(·7gZE™TnaUI~êü ™r Óëú+ê««Š{Š9RzÏço–þøáÑ`â‹&¹ Û„.ëˆ ß7}íèc-,ŽÍ¨“®ï˜¹z’ü¡ï³_M\½™õ7'Ûêï2µ3Y…/ü涩ra dËÍš\Çz‘-âw?ëo†ÒÅ›¤÷¸µ X@.$¿«ß<¾Mæ~ñC釭hkp¹~[‡I¼¹N¡tEÏÒ½À°º±ë{ëÑ•Kˤ£íy}ñ$éI]À$$ü"ñw8ëožÂ-5Ë€ó¤™Ëä—ͼ¸ûð#`i^íÀê_7-côBH¾€¤ÚVhývùûÖ:6¾šY?åfý.þÝaîùn¶ïÍ“þÔLg—[à\)þŸ‡s×w>î¾ï"?‰×Ó< endstream endobj 171 0 obj <> endobj 381 0 obj <>stream +H‰|•ipS×ÇŸl?ñJ‰2õC€õ’wÅ”™¦%aLé2¡¬!˜ìšX,l°lËF¶emÏ’…Œž -O²%Ù–ð¢ï±›'”°MÃjÜB–! m¡zEWNû¹3wî‡{–ùó?sIKA8ëæíÛ²¶.Ï•ÖHå5ïdSâjiéœaY‚à$–¤Ñ RXÀ¶üëñËIôMq½÷¿•?{cž<}ÎÞ$WèTÒŠƒ”ð­ÒŸ W¾ûnæÛs÷/…Ëä%¡H§¦$2µ0»¦T®RÈUbJR¶B(ÜX]-ÌŸ‹R ó%j‰J“|ý/ƒPªŠ…”J\&‘‰UUByùÿË„ ä=yA²Ò\ÙÎAD)/Y’ŠD9iœ +N"e&U•úmÚª4º +pß઄<ø&}½H“øUÌ Mz×=Ä«áDœ¿ÏÔeôÞG§Î¸ßØÖÊ*”fÂÜÜm]Û Ñà‹#­KŒú–àÕ­ÚC-z"çw’¢Ý GTÈr– ~=¬ úÎtøɳŽÇ&±fn Ôñ;Xý IB-3(1|@_U^¢Vbâ2±¬ž¨³ô :o‡¦@äÚ@(äÅðj»Ç×ê%x'è?À©o÷ŸJŸÆGà˜Æ§ä{ˆˆ‚ºSWnvßÄÁ艾`˜èïÓ«ý¿ÉnomwaøˆÏíözYOEvÎÁò2+·|éÁª +>øføæ5’w†¾ÿ=Ή=€ù÷SásÈãçåèʉ­ÆÚšÛmvð}®ýã7‚ñÊÁ‚â<…ô¹1_¼,SÀο&œñ¼xN²ˆñ;aê™sQ?Öæô¶zˆ@˜.ßY\Ì‚ÀËb•š—Ø0´Æ9¿HDRo'VóÊ:Ã5¬¤×Ö±é +6Ê®ÓcV«©ÉLÐu.»ÐvSƒÕŠYÌæÃF¶Ïäï:㛜 c§ŸA#æŒùaÊ fI°eçsan¤÷Òé¥5Aàhpgœ˜ÓáñuºmŠ ”øð÷Ò=bPV¨\x5ƻ˅2MbqÌ<بM¯yÔr¿ËÁgy_à·7@tòǘ‘Î9èñ÷ºKòßÎݶ¿¢fà:ÀÿdŒ¿:ÀÏÙølb0v7œ=õuX\®‘ öe©w’~Iò“yŠ´b°§D¹}‡`ÛXéeYX]OëF¯v@Kâ_Ù´¢¢"Áæ/+^ƒ¿ÿûlVô»@SO M©¶­_‰åÎ$H´·í¨ßHX6©mºÉyÑfë3XñªØT`*  2x$‘ökáÊ¿¥_Ÿnz¼íþÉéQT–*Ì„Åæé±üé BG]î!A­*}ÜZ4Øs¦ßM8[$f€?ÿ€¢ûh/í#"ÏîE£ÿª<¡çŸ öGîc†€œ(×JÍ Öæ×÷¼L—æåòd8ŸÜ™øK*TÃ|µb¯„&Ž¹ƒmòwО¶csèÙ”n5ÐÿúÒW ºNßAuþï¯LÆI,á|< k¦SáÙD>_YB«K@VɆ¬P°y`íÓ¯†GcäçScÿøJ0sàÒoIv=;ƇoÝym'[]­ q.,YšÙE[ØùâÃX“ÅÐh"DÔÔÀƒ?c-³È2#2;ûЈŒÁíãFMby,}'|Ffð!XžòÁn[€¸§2ÙÅ™ì¢5²Úv ž&vñM•Òjj3LÅÕt¥YªËh¥BLŸ+âȲïWüpL–†l#F̓&œ‡ïßÝ&mib˜ÉŒ^¸ŇºzŽz‰k¾[g/bW®‡g¦Ó…“?UW7š’<ŸKg¿ã@p+Š’嫲 E»~ÐçD,”Ôç¨n·T²+»Œ» »3¦û[F½ŸþšÑ>êî†û}v†`Ú- p606ÆÎ8\n»Çî>Þae°Ë!w-¡ÌÉËÜ ŽrÛ?E/ºmCÁÓÑç!{†soêË+©0…æ?yòøþ±?wTw‡O +FB½¡>ÆGÚ-n[‡Ûãnm·µc›¤·’(*”ÕªAañ‘R­`ïyj¢’ŒW8Ô*Ay•ªF^å–‘fÆb34`z‹AW/¨²]V¼²¹½0ËiKJ,5"éwîáŠä×넯ó5Ô¾BŠ05O3à2ôý³-EÙ…Ü“p‘Ù¾1¯n=º…+W;hô!7—C×ê:ØIÄ¿~0qðê½/I/«÷À¬Î.´8^Õ{æ‘MºÅ³ ~40ÿþ á×üÿ0ÇÔÎ endstream endobj 150 0 obj <>stream +H‰œWY“ÛÆ~篘G bç0€sTE+Çe—­XZVùAJ¥`’»DD‚Ô´¤¤òßÓ×€Cp¹*ÙÇrº§ÑÓÓýõ1fÖ(ø¯4VùÚªÇõìÕÍ^,f7·wZ-{e”ê—Ýìæ; úÙÍÂüKsq?3¹Òð/üÔNy§³B-v³·É›Ôºd?4C:÷I»O]ÒõªéVj™“ì·ÈyTï´óí¡Oÿ¹øa¦Y‘zǘpŒ‘c,ïZ:ƸÌð1ÿèÖ*­“Mj|òY¨!5:Ù ñüI»NMòQX©±É:Ûd5ÿ5µÉ¶Áõ2-’÷"ñân!«fûæ  “´Ãf×Ë^MX욶àÿ¶{¶l‚÷ c¿MçE÷“>»LN’m—Ú‚ÌM9«éÙ<-)€%k1ÉÃuç.6°'ç&³jñtìV E’ªíúé'Š ‹¶k܉¶¿!¥V”®@é«ÔVàÝC3lÔ½Øä’› +9Çè+ òesHàhIþêÕð‘ ñ{2hyLƒ=øño)øŒÎ TÛ¶{ßgdæÍ­ÐœëÌ0ùÏZ6៿.þÊ$N÷Z :°µK}rÜ‘Åì9´æH¨)ZèlÅ~\#ØÙ>ö³EDö°>.Aå†=˜A‡ôÍný{lFsŸ0ºGzžÆP/›»Ã¬ùÌÔ°i†°’¯·hx÷VÝ›è§/H[t5±€þy>Õððt^FRb‰ä*%,;ŠLYˆ“ŠçÞy+–vAu¸{v䪳‡ÔJŒé˜¹(?¹œ„÷ñ‰¥¿Û‡K{2oóçÌñI–² =ÿá‘A>aÔ“;mÒÄ[6NŸˆ {§Ù¶ÿ±/ÿ8ª¤ªÂW˜ã®O>5çõI¢å4ô÷ w£PO6{9uâgöéè¤íº!+?®éš°0Úä~¸”høgjAuVCÇcÎÍp…˜A+±À'ý.´bW„lÅbUd`&¥.d¦åDœŸŒš3D¶Q]ËßSMâ‡Fs3Ï Ì`G—fÜd€Tâ’9)WÁiIÞiCNsÊ`'Ló~­œ5™Ö¹«³¼®=ÎýÉ«ýj=é´§‚ËmVú²8û„ç8 +kdFò(lÈ4äK>‘(ΫÌÅÍAƒЭê@ßF…ÐbžSe 5k?ç©y ‹È@ +` ¥À°›è÷Ƚ&¬ÄßñÙÛàydá Œ«oœöâ csE:Yñ<,DÏÅZ¨Ós ‰MbTm ÇõõW6Ó.7ÊÕefC„ß|ûòz€ë*³•¯Î¾ Ç¶Pô ¹kÎNñ“„4á9…Õ–f^Š½ uîÂWÖLÊz$ÚvcPwô˜; à»óÄñ(¿¼ÓS&´º¨ ãš“ÔE•ŽéS¢Qɹ‡öIh¨¸6òlõ0;ÑʲޠQûaš¸¬Ä +êP|¦I¿?öãë¢ÒS?’¯äõÆâA\ÉÛ©«o˜ñ’ýÀ¹%£?.Që¿œÅBOŸô†'ú±7×û±k5£m¿çÕ1ýóéLlo®5®žïÜ(1nx¶ñqy´!2ç\˜p–|}|Ó„wŒc(ÏÛÓ%]CEî7“Á +Ù\u==ý #ƒ£¾Œ“™§[rã#ÇêÞ¥Ùɯq€N3;vþž™g'mçnž9^21LÒÙSå+Û¯[9ƒï ‹u/UÔlƒ ÏEð¼èâSÇÑ[²áÀá‚OVáÜÍ°îÛv_ á#òóÉà‡¦ïù£xص«µ+¡/¾?žC2J’7Æ:Q$ãí‰_3úÖ“‚Ø\¥ë>6¥>Ù4$2gôAûÇ÷#>Øägø0ùåÓŸŒPŽûQ¸£UÓá[õ3­ù% ‹ûÇ ´#šŽ‡_aS +ð†¸,’¹È#mÁìRÛªåŸ `l@Û(ç§ ì^[xH¨“°Ž‚ýòxñl#:ÍÙ{–± ‚ Ï<¼Ç4¡ø +<ඵKK({ƒ’©àI¤³÷çErªÕ‚ iy~ƒA¸Z’Ë*yq·àŵç,l­Úûûè%ZVc׃%ÏSË&áä‰Æ/P Rü³(G´ò’ÃsÑ!ce“´§ÅX™€ÓvOôŒ}hš§QR0¶ƒqGF + ðLùÕéZÃœ´ÉA‚KÈ„ÔVQÎP½Ç´ëÛÅìæçm³\¯~~ùwuóÓ­V/^ÞªÙ뙦ILgF½ŸÝ|w§ÕC?«²µÍL镹»„_ç +jBëÙ}ø¾°6v® +[eõ(˜ÐjCŸhp&}% T‘À‡³ÓrŸô‹êf/rý.—®i˜ íOY¥A·­=‘óù#?P+·S†z¹¡¢J€ÿ +ho% ¡‘*ˆ°tÚ’Å¡ÃÎ¥-Œ³e]œÛ‚a¬xŒs8ÆÑÃqŸâKìª)Ö€“r]>mŠS6¶¥SæFkx@i« +m2oªÓãK="þ×?®ï‡wÌØ°-X~9Kþ+u(QJ}RQ›ì±}Ø ŠØ‚ÍOÙtÅ{ÌÁïιË=N9¨ŽVçêÂ&<âÇõp|ìÔ§‘÷?\À_Ïnn¿Ë.®úe7û $.ðÐû‚ ºÜ v3cNHÛ _ˆ‘6g3o=¼r<Ĩö‘NÈ#Øϸw‹DQU®¬Ô\gÎçDÁPUm”ͬ6èk +7¤‘ÚZµœÁ{ÊÒ¸UæUÕ´ç<< 2_ÐŽ®+ÄP•ª,ª@HçHoè’â£Û;ôÑÝí+°±PU®~R_á®»¯vWUº«¨Á¨È]º(à&eíÈ_º"ÂQ’ƒLU*Ï!Q2ƒî‚ûk‡.qDÔ¥/€7 ûÕ:RE(áct|Íî¨Ñ]ÀuiKg#;¢½ÝÅ'J%O‚ÛZŒ©uä#]8N¥ÍÃèê5ŽîðÊ­jH¾útñy aÛ\Vû«XY]@X”ÞFŠ!êìÄ Ž)€]²‚Û#flÅ)tNYž6ñd‚aY#Q™‚€W¼à"†ß †¾¨8®"kn}ßÄØëÁŠåÐÓëk£‡&§xÒbãT:jèÜCÔ—”4`VÔmá_m”jFv&|‰%=í\F{{¦Ê¦¢$°»4–- 2(M¿0ÎÆõçuE1µê¡à‘P Z/ðd8´<ê8¡Ñg„Œô¹Ç²}•¡nP¾5èÌûþ•ä7®¿ÑÇ».yئ`L­%_ï19Ô±ÿ:¹ÓbVF²+ªƒŒdqŽÿHÏ(ÇÇvžêãqžÑמ1<¿gÔe$ÖŒ=c¹÷aÁæÕpõVd%»‘Èà5Õø®ç@]äbômwÑÄrãÒ‹ `b‡?ž!«8ém—\åÛhQ¤v‘\KV²Ž;¬ÕÁïÄÎæ¡ý<›S»Ä8µ·³ßÞý8Ù`‰ bï°ë>R©÷©uŽÎE7üº9¿½lúãøÈ‚ 0ƒ;ùˆ#±;óFUÞò0oóFüñ0o<ÎóÆûøx’[:å`%¬ØàšríÍòáArÙ{:L¹Ž8oícå2±¸bcì¤û—9\éÐM‰ÓñàV +-ËÉ=¸µO÷àAÂáO +fƒ#›·«ú62a±S·¥ ™ÿ–]é!ûdó‹¤$ð0£ ³Ø +-jù}ê”Å>‘­?Åb3"F†ýôîp‹ÍÎáž¿igpœÉ>…“i³#º3Ú3}­ÍƵŒ!ã}¤=6;¹á×ûm¶MöÆGb9û&H.ØuçºsÝ¡_ÿysÙ”C6÷hå©ý(ݵ×ÍÝ}s£G½zü«Öb§¾kèïKÏ<.åË3joÎÖ·Ÿôã–?#už·³è¹¬M›þÙü‘¶_ +œ+bkûƒ”RÀNÛŠgËej—oþ_‚jì +V;IŠ“Úü‘¶ßK2×w¸ç´ýØ;^_ûæúÃëÍÙw?CS–—?¿üGóÝë¶ùûK<\w,éÚ^¾k(;µ[e‰^¢Vþ~‰\­ .êk˜ý¾ÉVÿë§ýÎry™äe(/ÿµo©6·›†"—3ÛŽ-¶ÁÅaáÐË('ènQof–+彟%çÇÛ¾ÓXÓEëÖ0‡¯$϶×®Çrú}ûkÛ?ÚÜOö ã}n¨þææãí§æy¾Ú± ÚĦwAÝ.®7÷5[=råQÖ˜¹ñIŽ°?[bþtw‰>u\–o>þ~ýøkyr]âÕÔ¼{yÖþ[Æïþ‚]4Í—æûæzq³¼zü[õ´<ù¾ù²¸—Hõ«îf Ÿ^ÜÝ ÓI0ý7ŒÖ¿|óÃËúÅýòñÏûÛæËêÙ:~ÿ2.¾µ¢xfåÚ6ºL¨4×w—S¡C(YÅ ¢7"F¸agRåÐ’“…K¢CˆwÈ1¤P¸Ü’d$W,ƒÂ…&#΢YR}à “(›YD1úX/«²Y¹Èè%è§uS7è¦vg;E¥‘¶Ó„…EúN­m*Øom´<ɼCÐ9ªÁ’4:§è˜ Úïk°vÐ`Ós4Øô¼ –µîÁ¸`IݸÁö·×¼:£‘Q‰B¸d* ½â­^W­é]O’ÜðÆ”ÞõôwWgv¸ C“½0Ž3Ä9ù¸,’’ 7¥äpmÙªeY‰ ²ÔZV£Vø\~'æ!mZÁ mÍÔÝL–J&—%c親ý}ñVìïÛ?¹Í *.ÇSm#æ.@ße„ò°Oáçú.XoŸXH¡lÜùT[Aé ¦è¾T£¸Âè¤J +eÜ=¶ ›³ýÌnd´6˼~Sf b­"–õÊÐtŒ¹d}Ó/ŸÔa®5s(·þDŸ…—ôi‚–€BÈ ‚É)¼ó®ð¦rʲ»Œü {|Î| ~ ` \Ã@y åj!Ìé©îýÀ2,®%¡.rœmIá‡)ôÐ>›PæìÆ"(;•oÄr/m•a‘¡ÌPNTú tQÖ}Cç]•‡£ +‡ÄP²ÐJ4M|mIM ¬Eˆ,Ñ’ÕéŃzÃn±ˆ8Ö—y›‚ÂÕ¨ 5¡ÑnBó‡ù£9ՓɾnÖYVѾxÑ~¸¸-©6£jQ”Çc´U›´M¾G®ç®]Îæ¹}œÍCûy6§v‰qjog¿½ûqºã"T‚•dO«H¥î'N°I6hðys~{Ù¬¦Œ@‰Á†øá”´äŒ-ÙgLžû/õUÓÛÈqDïüÛ0ÇýýÀ—híC‚5¼X>Ø>È"µRV‘“KÿžWUMrz8’(nì]^D6ÕÓSýêU½W¿7-O4ø#˜çñÒ„©kȼîvõøH Ýx=<²œuëë‹»§i 8d ÷‰÷”àÀ“ä‡}Šñd@›GÐæ +ml¡chÓÚ4„V›-¸f’'w×Ó#Ê*‚4¹á²Ò˜>ÌÆtóÒ­.ÖsîQKêI2©˜àh D=¿={ÔH66ÝCt+ A'¢¼¹1ëd_É9k´ùýA!nŸk†7AʳWŸš0È壴XÔ¯¹ucª[OºõŒ¡”Ž‹Aêž[GrunÆ–± ÇU uDn/įڹ¾hÃOé2ÛðÒkã`6’‡»ñ‡Øp$½äJ‹x +_‹ ?¡Ð6áè.6{ÜÉbŽJSMjlÂKs Y×_È¥ÆßÁŸÆ¥Ž±ÞhÝБì]ùs¬w¡kÜÇmzÎ{»>$È^³ýï]zS‚ky–·"ûêЄ¾Œs}O/îcwêK‚íq~ã7´%‚(Œèö¤ã†%”3¥õ>L%Ç1°ñpBœRìÇølÊe)œî“)éÿ골Ũá¬Ýž½mß½=S³o~¼½¸\-|ó½úæí™U}ƒwâ@â"˜“*<ꨅIÖ@ÙxX!_;Î…à8IF“—&PmTõ Þjmz˜_4¥ªÈ†¤ùlÞ0mGƒ.«ì¡ ¹G³Ý¹æŒºÂI8ÄàÏü™· ¹‰ØÑ[~RíÁš 9Ÿ¡ûûÒ'Ow?ˆ>Xjr$½Õôúâù½4¡ñºØDk'ö%’KATdc\oÁÈeO¸…ÿ‚X“ãé‹CÖªýa'ƒC-9Í´Æov£•NL4ºê»}K}0Tï€ÊZ/Pù†P9°‡œ9Pøº‘'1úb ‹cªèy»¶:L ÞUP_ˆ{éIðÇp8^Eãë[­´À14¦˜4‰l® íÜÙ]â¤#(ãK€95Œzí]D¶Âë$cÙñ2Ô‹[ÃW ÁÊ:—Ê!Kœ °ÑÄ jHàŒ`j7ÍÌ"f‚ òÉ«¯Äˆh†Xð[Äð#j Ék©A$êº ‰Mx©“h,Çêa7™¥r#ò5©3$à._;0^óÃV3Ž §f8/¼ÒžCבø 6ª섉g⪪X$+Ž .æiâŸ{K`˜\æ7ò„ƒÜ”RŽi6Á£©ÄÀ_‚oŠkˆš‘ÀDw¢ÅH½…š-³‘;:š‡œalˆZ$V³˜qö ÚÆ=)΢îVÛxJId¶Trɉ±TbZÇÈÆ1¥F½æ`¨^Ýl€P.òé©[¶HI6¥´5¼ª¥ MÄ8±HvŒ€ QÚU‹×ÌÃì‰!@" ¢trªíËJ+–’5´Ÿf~:+Mmû»®LòOšì[M6ð~–Îá*1V4ùºjò»™#økdÏan pù‰ìaŠÝÖë®1c@Y ,€&¦ì s½'»gãŽi|P–Lêc`Ë‚F¯&Å‘-S}íù^˜ˆ Ke2‹–Á³–©ÚQÛ=ÐÂà€ÓØ̼Œ™¶•’¸ª‰(© +®°4röD +\-–Hjb™OR÷P^Ý +RÒè¼Rt¦‰úq&ÉJ]ÇXÉ +QŽ(/Sbj³*JÙ–(òB 6Å +%³§m¥.nŸ…÷V0/b&­L,R(™^e|šl‚¾`NÍdŒöúL•å0E"Jg®6¡AVù¦£HV-{vÄòjÇ7"b®D$Pš’ö:añgÂòz…%Æ”8M›˜ çjÓršDnsÌ(m³?¤E˘!™v#ò¹J>ÚÓP“˜+½3 ES×èÿ>3£êÂ=!4ÞG¦ÍÁÍ #A¬CÌYô“¸[/èsÿ¹èèZ¨èèqÛ¡)ØýLšxW@_GœMºZãˆXeñiS¬ò|röžæ“÷g?ì7l\:Z3ѱÓ·~‘ »ájðG„°4ŒsjnŠã ý¥™/ÍÇ%ÍWÝül¨´ÌæɺÒÜ}廕§š³¶'Êûd©ëš¹jX²o Né.×{”ÃDSUèƒ÷£àm¼ÌŽ›à±ÚoË0x«š#Lĉ†.¸:ŒÕèù4ì÷‰Å³ÂjœíìDÍO–ü³’úk·˜&kƒÙˆª S¢xÚÐtÈÒ–¤/ÔÛ^•Bä’e²ÎÔd/©É>^Þ‰“â¤3ï…6ÉŠŽš½†“þ¹»œ/\w?wÝ¿n—ê7Z¬Ôíj¾ÈÝÕzþëùßxv «ó%¶ß?¨‡9²ÝÝ|À‡ë®×êöæî#ïô–|('Ç›æ¥ÃQ¶[î6Ñq9lÏ»X¯/‚ï®W›ÿgë¶ÿÿçÍrI'Ü®ÔÝ=E·\ñ6´@š¶ê®5â¿WŸèÿõ¥¹»«ñGŒ·<ÅÑüÆÛ›ã@yíGŽìQ=~â·Ü¬ëé…g½áév± @Åø1ð`QU†ÊÄ¢CÇð¬ ?¯‹¾ìIô‘lÅ“Òü´Ÿpp‰Mç —Î¼¤ÔC£ÑÔÒ£{VdZ•§4ׇØ'ö3x¿×ÆÕB5ÙNë +c­õÝÚÁsƒýºëê„cŸT[Ý—œÒD;x^mƒ…Ñ(•umá¾P·Ð=kÉOóõË‹Öd¥Dä[¹ÝôÜ¢´Q”ÖÐàXŠbÅÔ4!òÇæg‹fâb4ªdüÃVýý~¾HÐO¤O7wÔåÜ@ŽCw{ Ý£õÙꓺP~ÑH!‡à%„Âá]Ü+šÄ>ôɤL/ëþ}³TWxÙÙ=Žü¥ûá~¹R׿Ìççÿ`]é­:3ëþCëó?Ï:¥ÔuI›Õ·êOõë_šÿÞ®®ÖÛ-´g÷C»ñáæÃõzxØà‡íÎÿÒ(ëwoÏ{t.¨}ï œ†„S‹p"hâ’Ñêmãß‚ÊÆ K.àóv­çut…׸v*¶n௲§þJÛ6¿ªH?(½H¿f^/è=øÅdÙ€OÙ‚/›MôU¶I£àȵD~"A¿›ýO€Êlj endstream endobj 119 0 obj <>stream + + + + + application/pdf + + + RBrotation + + + + + Adobe Illustrator CS3 + 2008-03-30T09:43:48-04:00 + 2008-07-01T16:04:02-04:00 + 2008-07-01T16:04:02-04:00 + + + + 256 + 80 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAUAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9GWNmLkuC3HjTtXriqL/ AEKn+/T939uKu/Qqf79P3f24q79Cp/v0/d/birv0Kn+/T939uKu/Qqf79P3f24q79Cp/v0/d/bir v0Kn+/T939uKu/Qqf79P3f24qld60Nn6zzSLHBAGaSZyFVVQVZmJ2AA64oSa484+VIJBFJq9oZ2k SIQJMkkvOScWyj00LP8A3x4E0oD16HFVyebPLclpqV7HqML2ekM0eo3CtyjidEEjKXGxKqwrSu+3 XbFUDpv5jeS9Rtorm21NRBNK0EUk8ctuCy25u2P75I/gEA58/s074qirfzn5WuGk9HUonhjaNDeV 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 + + + + + + uuid:39AC52ADCAFFDC11AC15B6426E08541E + uuid:46ba4750-b6d0-a148-b72a-6aac87b46fcf + + uuid:11ce5472-22d3-2e46-9483-571136a36a67 + uuid:96F9E1E974FFDC11AC15B6426E08541E + + + + Document + + + 1 + False + False + + 39.000000 + 7.750000 + Picas + + + + + Minion-Italic + Minion + Italic + Type 1 + 001.001 + False + MinioIta; Minion + + + LucidaSansTypewriter + Lucida Sans Typewriter + Regular + Type 1 + 001.000 + False + LucidSanTyp; Lucida Sans Typewriter + + + Minion-BoldItalic + Minion + Bold Italic + Type 1 + 001.001 + False + MinioBolIta; Minion + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red + SPOT + 100.000000 + CMYK + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + + endstream endobj 116 0 obj <>stream + + + + + application/pdf + + + RBrotation + + + + + Adobe Illustrator CS3 + 2008-03-29T22:52:51-04:00 + 2008-07-01T16:04:40-04:00 + 2008-07-01T16:04:40-04:00 + + + + 108 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAABsAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9DQQPPJ6aU5Urv7YoRX6 Iu/FfvP9MUu/RF34r95/pirv0Rd+K/ef6Yq79EXfiv3n+mKu/RF34r95/pirv0Rd+K/ef6Yq79EX fiv3n+mKu/RF34r95/pirv0Rd+K/ef6Yq79EXfiv3n+mKu/RF34r95/piqjc2U1uoMlKMaChxVU/ 6VX/AD1/hirtJ/3sH+qcVTvFXYq7FXYq7FXYqtmlWKJ5WqVjUsQOtAK4qstbhLm1huYwQk6LIgbq A4BFaV8cVSPzh5rHl6C1uFhN0pnpe28XFplt/q88vNFZ4x1t/wBo9Aab5Cc+Fy9LpvFJHLbbuuwP 0sgRw6K6/ZYAj5HfJuKRTeKEu1r+6j/1j+rFUL/0qv8Anr/DFXaT/vYP9U4qneKuxV2KuxV2KuxV jHnrzM2i6VdPGgb0bK5vruQr6hjtbcKHKxBo+cjFwEUuoO/xbUKqX6LqV9rulRaXYaoLMxAGHUYr WSKWWG1la3miNvdUe3milj4SBw3UU60WMgTyNNuGcYm5DiZZp2lWGnRslpFwMh5TSsWeWRv5pJHL O7e7E4REBjkySnzReFg7FUu1r+6j/wBY/qxVC/8ASq/56/wxV2k/72D/AFTiqd4qgNe0W01vSp9M u2dbefgXaIgOPTdZBxLBqGq9eo7UO+RlGxTbhzHHISHMJbdnXdCSJ7KF9Y01RHFLZqIYriBUAUyQ iNYo5F4r/dcQa/ZNPhETceW4bo8GT6jwS796Pv8A1oiTzPB6k4tLG8vobVil1cW8alI3H2kCuySS sn7QiVqH4ftAjLHESDVvzi8nWki22nyy63fuP3drp8ZlJJG3x7L9xJ9sqllA2dhg7NyzHEajHvKA +v8A5w+Y/wDeOztvKmnt0muj692V6GiUIB9mRfnkbnLybuDSYuZOSXlsFaH8o0NveNqGuXmqX2ow SWd/JeFngltpgBJCYldJFU0FCkqsCBQ0qDZCFdbcXVaoZaAiIxHcibPytq/lSmo6Sx1WNVdb3Sjy DtG8sk7yWss8k0rXDSys8nrSt6pP2louTcNlmkaxpur2KX2nzCa3clSaFWV1NHjkRgGR1OzKwBB6 4qjMVdiqXa1/dR/6x/ViqF/6VX/PX+GKu0n/AHsH+qcVTvFXYqo3t9Z2FpLeXsyW9rAvOaeRgqKo 7knFXlTeWPNGo+aNG80W1k8EGlXV5c2VvLa2qz3Ed5JcH99PJPDc2q8bpvgCPtxZl5/ApVl/kE6d DBc2D2cVh5jt3Z9ZgVERmeZ2cTRsoHqW7kn0m7AcTRlIEaDIzkQATsGWYWLsVdirHdQ0Z08wR6ho kv1TUpuJ1RCOVtcQCigzoCv70BaRSL8XY1UUxVNWubu1Km7CPAxCmeMFOBOw5Ixb4a9wfoxVG4ql 2tf3Uf8ArH9WKoX/AKVX/PX+GKu0n/ewf6pxVO8VQrX9ZXit4XuGjPGRlKqit/LyYip+X04qkMOm XWt6891rYCWmmSq2maNXkPUG63lx+y71r6Siqp1qX+yqyjFUj8z6HHexR6jb3A07WNODPY6lSoQG heKVaj1IZKDmlfAijBSFURp+p6nJYQT3+nPBMyA3CRMJArU+LgDwkZfCqhvbFUyiljmiWWJg8biq sOhBxVbc3EdvA80n2UFSB1J7Ae5OwxVKI9e8v6fPJb6jqtnb6pJ++ubeW4iSRaryA4swbiqf1wGQ HVujp8khYjIj3FVk80eVGj4SatYtHKWiINxEVJAXkn2qVpItR7jxwcce9P5bL/Nl8iv0PUrS6g9O 3uo7yFKm3uonWRJYgStQ6kglGBRt+o98kDbVOEompCiu1r+6j/1j+rFihf8ApVf89f4Yq7Sf97B/ qnFUyv7iSONY4afWZz6cNegJFSx9lG+KugaytTFp6yqJvTLpCzD1GVSA8nH7R+JhybxONp4TV9Ft /DIOF3AvK4t6/AOrxn7afTSo9wMUImGWOaJJY25RyAMjDuDuMVS6S7tbvWBp3rRl7VRcS2/Ieoxr 8B4deKGhJ8eONp4TV1smeKECv+h3vDpbXbEp4JMd2HyfqPevjiq+6AkvrSJ/7sCSYDxePiFH0cy3 0Yq8l1+78tWPnnWl1+3k1C0uuYu2jRYmiaKOB4grJcKzD0ZACSoNV+EVLnMSVCRt6DDHJLDHwzwk cvtv+Hv/AByXLqf5dvYPNpWi3KS6RLb3kZup2Cf6RNaROyt9b6+mI6FyEBXc9anihWw5I8PUCVSk PVY2HcJH+b7/ADekWDWDaBot5psbW9qsdqLKJ/trbzBIxGxq9fgYftHcA1OZMarZ0ucSE5cX1WbR Wtf3Uf8ArH9WFqQv/Sq/56/wxV2k/wC9g/1TiqNheNrm7vZ2CR29YUZiAqIoDSMSelW6+wGKgWWE 6rf6X5l1OLU9P81Q6VDpUn1MqWQes09JF4yR3ETenMY0op+16ZHSuUEiRsGnbYoSwx4ZYzLi391f 5p3H6U88pyWGm6fDHc+ZotZfUZSLG6knB9X0kSJo4eUsvMh1LNxP2m6ZOG3W3G1IlORqHBw8xXx3 2CbSSnT2vAgrEImuoU8H35r8i1D9JyxwmL6/5TFzrluYvM50rUZ7VYLe2jYpNMyzNNcSUWaJnEik g8RVaAhtqZVONnnTsNNn4MdGHFEGyfhQ6JPc6Pbkt6X5kNFKkTtJCl2OJczcpHKtc8gOAZKchxPx AjplfD/ScqOU9cH2eX9X4qvkmyXUtQjaTzNeXcsNrHLLpty7rI63Mf1iO4ERuZ6emLqNa8SAyZLG N+bDWmoEeGBZ5jyNVfCO4/N6BDGL2yjNxtPGzKZEPErJGxjZkI6VIP0bZe6hd9UvBsL1z7skdfwU Yq39Vvf+W1v+Aj/pirksf3qS3Ez3DRmsYbiqKelQqhan51xVQ1r+6j/1j+rFUL/0qv8Anr/DFXaT /vYP9U4qjL3TZJVuUjKtBeKUubeQsobkvBiroQyErsf4YkWmMjE2OjG2/LXy2xDHRouQ4/EL+8BP GQyipA3o7E7/AKgMr8GPc5n8o5v532D9SLbyTpTfo0fouBRpEz3OnUu7mkUssonduIVQ1ZBWjbdu m2Hw47eTX+cy+rf6hR5d1J7HYl/Va7YTSTp6ThQVQR7/AAqKk99zXfJuMlV35WhuNVs9UuYUvL7T gVsrppp4JEBrXkIyyOTU1qu+RMATbdDUTjAwB9MufJKj+WPln0fR/QsQj4qlBf3gPFGLqKgV2ZiR kfBj3OR/KOe74vsH6k1sfLENnfG9s7aK0ujCLczevcXFI1SOP4Y5OCBuECDl1NN65IQANuPPUTlH hJ2u+nn+sp5bwJBCsSVKr3O5JJqSfcnfJNKpirsVdiqXa1/dR/6x/ViqF/6VX/PX+GKqNtcG3l9Q AMaEUPviqL/TUv8AvtfvOKu/TUv++1+84q79NS/77X7zirv01L/vtfvOKu/TUv8AvtfvOKu/TUv+ +1+84q79NS/77X7zirv01L/vtfvOKu/TUv8AvtfvOKu/TUv++1+84q79NS/77X7ziqhd3z3KqrKF 4mu2Krv+lV/z1/hiqDxQ7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqjP+lV/z1/hilJtZ1nTNF02bU9T nFtY2/H1p2DEKHYICeIJpyYb9sUIOLzn5SkeeP8ATFmktssr3MMsyRSRpA5jkd45CrKisp+Iinet MVW6F5z8ua1FbPZ3sPqXjXIs7d5YvVmS0meCSWJFZucZaIsGX9nfFKMvPMOgWV6lhe6la219JG00 drNPHHK0Shi0gRmDFQEYk0psfDFCD/xv5O+tWtr+m7EzXsLXNoBcRkSwoxVnRgeJFQe+/FqfZair Y87+T2nsoE1uyd9SV3sCs8bLMI39NvTcEqx5/DStSQadDRSozef/ACbHJYp+loJV1Ln9TngLTwN6 TrG5aeIPEgDyKtXYbmmKFa385eW5bC1vXv7aGG/llg0/ncW5+svFKYqQMkjpJzK/CFau4BAO2KoP T/zK8j3un6XfLrFrCmrkJaRSzRCQTeksrQSBWYJIgkUMpOzEDqwqpXS/mD5agmkS6me2jD3UdvcO hKXDaeD9bEPDm59EowPJRUg8eVMUKuqeffKOnaRqOqSarazQaXzW6SCeF5BMiswtwOYHrPwIVCQS cUppY6vpd/JPFZ3cNxPalVu4Y5EeSFmFQsqqSUb2OKEkX8wvLz2t7cxM0qaZevY6siNC0ln6c0kH rzxiTmsLPEeJALcfi40DUUsy/wClV/z1/hirGvOMWkv5Z1CTVw50y0j+u3aoqszR2bC5ZeLhlYN6 VCO4xQxHSPyc8tjSoEjuNUtLZnF9BYzSWrvb3TIirLyWOXk6JEqcTI8e24JqcKpppn5V6Lp+t6br EeoahLdacZm4SyxmKeSeS5lMk8axqpdGv5uBTjQN86hKb6t5P0fVbjU57v1GfVdPXSrgKVHGBTMa xnjVXP1lqmvhtihBRfl/ZQtayQanfRXNvHfxzXKm353A1ScXNwZawlVPrKHX0glOnTbFKFtvyt0y Cxt7M6tqU4hW+jknmkgkmmh1Nke6ilkMNSHeMNyFHB6NTFUPpf5PeX9Pn0+6XUNSub3TJpLi2vLm aOWbnKYefJjF8QMdsIv9RmHWhCrWu/lzLNLoyaVKUgs76W6vZZ5lDGG41OHU5oxGLaX1Kyw/BSSM rQVLioxVH2X5baTYx2K2V9ewS6fcW9zbzhoHettp66bwYSROnGS3X4/hryNVIxVR1T8rND1WKW2v p5msvVuZ7KBBGrW8l5cLdTskhViazJVa9AzLupoFCHuPyf0KeyktG1HUFUoIIZFa25Q2yxXUH1dK wFSnp6hMOThn3+1sMUpz5Z8jaZ5d1TVdRs7q7nk1Zw8sNzIskUP72WcrAAqlFaW5kcrU7n54qgn/ ACz0kSagYLq4iTV3rqsZ4H1YWuri8eFSFUoHku2VjueA49fixQzv/pVf89f4YpSLzJodtr2gaho1 zQQ6hbyW7OVV+BdSFkCttyRqMvuMUIuyju47SFLyVJ7pUAmmjQxI7AbsqM8pUHw5H54qrYq7FUMm pWT6lLpiyVvoIY7mWGjbRTPIkbcqcfiaFxStdsVUbvXNNtNUstLuHkS81EutmPRlMbtGjSsvrBTE rcI2bizAkDbFXatrmm6SLb668ga8m+r2sUMMtxJJJwaSixwpI+yRsxNKADfFUZBPBcQxzwSLLBKo eKVCGRlYVDKw2IIxVfirsVdirsVdiqM/6VX/AD1/hilB4odirD28u2Vz+Zh1qO/QXun2kIudM+rm npzrPHFOZSwBmqrqrAfDHySnxcsVX6rpmnXfn7TmfXdYs9RhtvrEOj28ksWm3EUElHaQekYpGDTK HX1OVOO1MUoLzLoGjL+Ymh+Ybm8aLVKJb2FtHaS3DskKXSTcpIq+lEx1BDIzgKOAqd9lU01Py3Nr +m6M8mrAzWiyynULSMKJmubCa09WKjuI/wDen1F3bpT3xQkGh/k1p1pp+k2esz2utLpd7cXnGXT4 YoXjuLYwGBYQXjjUPxlNB8TLUiu+KU08u+RJdB03QdNt/qE0Gk3bTSzram3laP6pJAsgAeUNcszr 6klRyFdh0xVlltdRXKM8QcKkkkR9RHjPKJyjUDhSV5Lsw2YbgkYoULDWdLv7Cyv7W4V7XUlV7GRq oZQ6GReKvxapRS1KVoMVRmKuxV2Koz/pVf8APX+GKUHih2KsXvPI6XHnm382LdKlxbxxxLD6ILFE hu42T1eQPF2u0crTrGPmFLtZ8nXmsRW7XWqFL2PSr7S5rqCH0+T36wBrhF5t6fE29QtT16imKGNa b+XXlix8vaZq3mCW31Kw0bT9RkuZbnTFgrDdyi75/VWDNB9XVXCxBNuRAC9MUo3Q/wAtbfT7fy/a f4hurSXSo0aKz0lhp1tfJAyFpbq1LTmV3qomfkOXLtXFU48zeThq3mDR9cN2luNGb1GhMHqeuvqJ IVlbmtVThyjFPhko+9KYoU08t6b5mutB8yX08Gq21rFc3OmhrYojJfSQz2soWRmKvDHCFqRVq1+H pilifnf8rbyTy1Bo2hwLcr9Z1F4IRb24trZNRmMisEkuLf02tlbjG8auQK/BviqJs/yN0mxhsFtp bR3sRZMUubFZoJprWK4imlli9VKtOLlWPxbNGh+KmKs80nTri0vtXnlW3VL67WeAwKVcottDFWcn q/ONun7NMUJnirsVRn/Sq/56/wAMUoPFDsVYxceS2l89Q+a1u40MMH1f6l6FQ3wSKJS/Mfvl9Tir 02j5JT4qhVoeQ9Pu9cXWteW21e9Gmw6cfVtlCAoZ/XkRXaUKJ1ueLJ4DqcUvNPzA/LtriTyp5Ljm kkknsoNMj1SSyDwRLZ8ppXilM6ejNJFG3KPi3NVAqKVxVmdv+UdhbNpZtp4E/Rj6gIWNoC8cGoXP 1hRbMJAYJbY7RSfEBUnjvirJPLXlb9BaXcaf+ltR1b13aT6zqtx9amTkgTgrcUog41p4k4qxry15 MtfLFzougW93bXMsU7aoUlt2jZYbfTo9Pmkt+JdFke4kSRqsP7xup3Kr0HFCA1XXNN0o2gvnkjF7 PHawOsMsietM4jjV3jV1j5OwUFyBXFUfirsVdiqM/wClV/z1/hilB4odirFJfKkE/wCYS+YotQgF 1aWyRzaYIgzcZFlSOdyJAwkqWVH4/YDoOpIVQmtfl7e6vctdXWo2z3c+l/oy4u3seU0TmOZHuLF/ XH1ZpPrH7wfHyCgVxSg7zyPpf6L0ryrNrsFnqCvqVxawQKkDut9b3cTLaWxlZkjtxdkoAWoqU98V RWg/ldp+n6lZ3941pdGyN1JbWkNmtvbQTXMlvIr2sZkmMHp/VTsGNS7Go6YqnOt+Uv0rrOn6p+mt VsPqDI31GxufRtZ+D86XEXFuYb7J3+ztiqG81+RYPMGr6Zqck6RS6XxNtyhWVlkW8tbr1EYsCjFL RoqjejnwoVWte8nXmsy6dPd3Vncy6dcXEqw3lj9Ytmjmasf7n1kpNCgCpLy8Tx3xQlmj/laNOtJ7 c6kH9bULC/5Jb+ny/R9ytxWUeo3qTzceMk21djx2xVCWf5Macssa6jcQX1kl1FcTWhtAi3Ihju0D 3VZZBLcOb0F5qCvBRxxSzTSNMns73V5pEt0jvbpZrf0FKuY1toYqzE9X5RN0/ZpihM8VRn/Sq/56 /wAMUoPFDsVYlc+VdbP5gx+ZLW6WOxMMFvdWollUyxxRXtVeIAxN++uIWRjuOLUpWjKUNrXl/wA8 ahctcxXMVtPNpf1aMw395DFZ3zRzB544Ei9O6Vmlj4mbiU4VXfFVC88l+bbnQNKt11FINWsJ9RnS 6aee5aEXdteQWqJPKolmMH1qMc3AJCk9dsVVdB8neZYtSs7jVtRmWxtTdSx2EOpX1xweSS3a3R5p fSa6RVimr6w258QKCuKpzrejea7zWdPu9L8xfovTLdkN/pv1OG4+shX5MPWch4uSfD8PTriqUeeP Iuo6/wCZNB1i1lt1TRD6vozj4pJBd204CuI5Gi+C3f40+Lou6MwxVhen/kv5jg0zTLJ4NKE9nFcR PqAkHqxyzfVeF5CIrC2LTQ/VXKeqzPVt5SNsVer6TFfpfau1zE8cMl2rWTPO0weIW0ILIhJEK+oH HAdwW74oTPFXYq7FUZ/0qv8Anr/DFKWX2oWGn2kl5f3MVpaRU9W4ndYo15EKOTuQoqSBihXxVinm Hytr2o6tqF/ZarNZ10v6rpMSXE6QxXrfWA880CERPtLFxLciCvTYYpYtJ+Xn5gyWFjM+poddi07V LGS4j1PUo44ZLqYS2ckRKyPMIl+BvV+L7JLOUXFUyu/JfnjULGT6zq72l6bfV2t1tNQvFSK8vLhZ bCrosHqRW8XJPiTb9lcVZL5a0bVtM8uyabf3T39wst2YJpLiZ5DDLNI9uj3DgzckjZVLbkU2rQYo Sfy1oPnHS7TSbbVrltVuY9QklvL5LyegtjZusfOOTjzCycY+G4JpKfiLUVZrirsVdirsVdirsVRn /Sq/56/wxSxzzdb3lz5W1a1srdru7urSaCC3RkQs8yGMfFI8SgDlU/ENum+KEw0+3mtrC2t5pmuJ oYkjkuHChpGVQC5CKigsd9lAxVXxV2KuxV2KuxV2KuxV2KuxV2KuxVGf9Kr/AJ6/wxSg8UOxV2Ku xV2KuxV2KuxV2KuxV2KuxV2Koz/pVf8APX+GKWtLVWuwGAYUOx3xVOfQg/32v/AjFVK7aytLWa6n QCGBGllKoXIVAWaiqGZjQdAK4k0yjEyIA5lT0+60zUbSK7s+MlvOgkicoU5I1eLhWCtxalVNNxuN sANpnjMDR5hrUJoLNYG9BX9aeOCmwp6jceXQ9MLBFehB/vtf+BGKu9CD/fa/8CMVd6EH++1/4EYq 70IP99r/AMCMVd6EH++1/wCBGKu9CD/fa/8AAjFXehB/vtf+BGKpfq8caRxlVC1J6ADtiqH/AOlV /wA9f4Yq7Sf97B/qnFU7xVZNDDPDJBPGssMqlJYnAZWVhRlZTsQR1GKQSDYSjUfLNvJEr6Q66PqM KMlreW8a0VXYuySQ/CkqFmLcW7mood8gYd2zfj1BB9frieYP6+jE/PXnS80TShd6oYYLbSbm3jvr xBHJ6l0IvrJ9KGa4s/3YTieKu8jE8VQ8eRmOW7TOrPDyZro2qtepPBcKkWo2Uno3tujcgrUDKyk0 PCRGVlqO9DuDiijVpjih2KuxVBa1rFlo+nPqF63C1jeJJHqoC+tKsQZixUBVL1Y12GCUqFtmLEck uGPP8FFW9xBcwR3FvIk0Eqh4pY2DI6sKhlYVBBHQjCwlEg0ea/FCXa1/dR/6x/ViqF/6VX/PX+GK u0n/AHsH+qcVTvFXYqg9W1fT9JsmvL6X04gVRFALPJI5okcaLVndzsqqKnFWJnyfqOvJdXeu22ni LUJ1uV0LUbRNSigaOL0YpWrIq/WTHs5Q8APhFaF2VW6j+UOgXsgvheXtrrlKvq9vMY5Wbt8A+BVX oqoFooA7ZXPGJG3O02vnijw0JQ7iEJ+jfzh8v/7w39r5osl6QXi+hdU67PUAn3Zz8shUxy3cjxNJ l+oHGfLcfj4Iiw/NOaS6XTNR8uahYa1KD6Fq6qYZOILMwnbgOKqCzHj0G1Ttk4ZLNEOPqdEMceOM 4zj9qM0jz+dd05ZtFSzvJr2MtpdzBdGazaUKrNFO5jimiljV+bRNHy49N6gTldbOJjETIcW0U1tv L093AH8w3BvbmQRNJbRM8VnG0UiyqI4wVLUdFPKSpPsDxyIhfNulnET+7FD7e78UmthY2thZQWVo npWtsixQx1LcUUUAqxJP05ICtmiczImR5lXwsUu1r+6j/wBY/qxVC/8ASq/56/wxV2k/72D/AFTi qd4qgzPdXM0kdqyxRRHg9ww5EuOqotQPh7k99qYqlf6GCeZIdU1SVr10T0dMLALDbOwIcrGP92Sj b1CTt8I41+JVkGKuxV2KsV843dzcXunaTo6ifXElF3wZuMENsUeCWS5YBmVXjkdYgBVn3AorUVY/ oPkrX/J9vazWyHVLKxdZJ7Ezia8kEdnHYxyRSLBZRM0FtCqLF6Y5/ExcuRirP9K1bT9WsY77T5hP bS1owqCGGzI6mjI6nZlYAg7HFUXirsVS7Wv7qP8A1j+rFUL/ANKr/nr/AAxV2k/72D/VOKplfzyR xrFCR9ZnPpw13oerOR4IN/w74qhL/VtL0GKxiu39C2nkaBbmRkWOMrE8xeZ3ZaAiM7/zfPIykBzb cWGU74en66VkvdH1RJrW3vIbllH71YJUd0+IgN8JJUhl2PiMIkDyYyxSjzBCrYXEjo0M/wDvTAeE vYNtVXHsw/Go7YWCIkdI0aR2CogLMx2AA3JOKoCW41ee2kksYYo2ZT9Wa5L7sR8LNGorxrvTkD8s VQvlbSbTTrSbizzalPJ6mq3c9PXluKCpfjsFC0CKvwqtAu2Kp1irGdb0eewvjrWgMkGq3Lqt1YNU W9/QUpKFBKSqv2ZgKgCjclFAqnJvrmFQ93bCKGnxSI/qBPd/hSg9xXFUb13GKpdrX91H/rH9WKoX /pVf89f4Yq7Sf97B/qnFUelG1abn9qOFPSB7KzNzI+ZUV+QxV5v5p87eUL7U54fMOnXMlhpqytYt G/B3ubW5MVytYrhF+HhGyB/fxUHGnOJO7u9NpMsYg45Dilz9xG3Me+0bpvnHyH5d0e61q0sLy1t5 r5NPn5t6sjuI2ulkAeeT93xmZ6g1PKtMlGcYiw15NLnyzECYk8PF+ju57M7uAqalaOh/eSB45F8Y wvKp/wBVgB/ssvdQh9QvbWTUrXS5Hp6zFnWhPIopkWOoFBXiWNewp3wXTIQJBI5BNAQSQDUjY+3f CxQV6DbTLfr9hRwuwO8fUP8A88ya/KuKo2opWu3jiqCsv9Jna/O8ZHp2g/4rru//AD0I+4DFUY3G lGpQ7UPevbFUHZE20rWDn4VHO0Y94q7p8460+VMVU9a/uo/9Y/qxVC/9Kr/nr/DFXaT/AL2D/VOK prc2cFxxLgh0r6ciMUda9aMtDv3GKqf1B/8Alrn/AOCX/mnFXfUH/wCWuf8A4Jf+acVX29lDAxkH J5WFGlkYsxHhU9B7DbFWE+btK8o6lp+kJ5jvZrWTUZSLUwDd7m54cfi9OXgYyECtUbbHaoyrKImr c/QZMsOI4wDW593zDHb/AMv/AJQw3RsbnVbuG5tnuI3aJHjCvHGsLFnit1j/ANH2Knop23G2VGOM dXPhn1ZHEIijX6+pvdry/wCWvI9rr+kXQ+uq8810bKWYKQHtL2O1jjkQWyNGJGAI5FeJPHq2MYxB Cc+ozSxyHp5C/jEn+dvT0mjCBtNUkR/WBbK1dxEYxMVr7ISgzKdA8+/MOx0hfO1rc62Fa0e3it7S O3ExmiT1DWbaGWNShd2AU8jxHSjVxctcW7vNBOXgkQ52SeVe7mPL5pZeaD+VdzbXP1LU767ubWza 5ht0QRK0dpbyLQSta8FEnpsSe7b4DGHQt0c2qBHFGIBNfMjpxPQ/L9jocHlo3OhqURZri75vH6Mh nEj+qkilIW2oYt1+yB4DMjGBWzptXKZn6+YA89q+PvTbV2DQQsOjGo+kZNxkN/0qv+ev8MVa0tlW 7BYhRQ7nbFU59eD/AH4v/BDFXevB/vxf+CGKu9eD/fi/8EMVd68H+/F/4IYqlF9oWlXZT1Ra3EcT mSGG7hjuEjdjUtFyIZN/A4CAebOGWUPpJF9yhL5Z0WVpGltNJkaVneVmsYyXaT7bNWTct3r1wcEe 5mNTkHKUvmVVdC09TbFU0+I2ZY2jxWkavCZDycwlmcIWO5oN8PCO5ic0zfqO/Pfmjza2P1X0BNQ8 vU9bkPU9StedfGv0dumFrQN3pNreSLLexadeyqoRZp7dWcKCSBUs3c9sBiDzDZDNOIqJI+KjD5e0 iAEQ2GkxAo0RCWyL8Dghk2/ZYMaj3wcEe5kdRkPOUvmUVb6fBFapZI9ra6elR9UtIxEpDEsy7NQB iTyou/jkgKa5TMjZNlU1eSN44wrBqE9CD2xYof8A6VX/AD1/hiqDxQkmo+c/Lem63b6Je3TQ6jde l6Mfozsh+sSGKKsyoYl5yKVHJhviqIuvMmkWmgNr9zK8WlpEJ3laGYOI2pQmHh6vfpwriqYGeATi 3MiidlMixchzKKQCwXrQFgK4q6eeC3hknnkWKCJS8srkKiqoqWZjsABirpp4IVDTSLErMsas5Cgu 7BUUV7sxAA7nFVl1e2tqsbXEgjEsiQxA1JaSRuKqAKn+g3OwxVC2XmDR73R21mC4H6MQTGS5kV4g ot3ZJSwkCMArRtuR2r0xVDr5t8vtY216Llvq93cx2MJMUwf6xMwWNHjKc4+RYEFwBQg1oQcVV5/M GlQaE+uzyPFpccP1mSZ4pVZYgKlmiKeqNt91xVMEdXRXWvFgCKgg0O/Q7jFUhufP3lC1u/qt1qUd u/rva+rMrxwevGjPJH9YZRDVBG3L49j8J3IGKpxaX1rdiU28gk9GRoZQKgrIh3Ug0PuPEUI2OKpn /wBKr/nr/DFKDxQwXWvyzn1Xzk3mWbVV+H0I7exe2LxrDDHMrK1ZgHdmuC6PxBRhtXfCrEdN/JfU n1uez1Oj6VbWlpaWerEqXeO3+q+ukcIkLxfWFhdDU0T4iORkNFWUaB+U0ekJcH69FNcTaTJpccwt FjMbzTTzyzgCRvttcbpX9n7WKpNe/wDOP2mzxJbxaksNrClusERtg5HoxxxyqzGUco5uDuV2o78q mlMVRJ/JFZNc/Sdzq63C/W47r0Xs0JEcMtxIkIPqcfh+sIqnhQCNRxpsFU38v/ltLoek2EEN8l1q VpqI1Ke+kjdPrDtbtaO0qtJMS/pSFvtULAdMVY7N+TV3aabcWq3Z1efUbWDSRM0QhFpbkxtdTHlO 1VcxF+KKW9RvCpCqcT/lIp0R9LtNQhtPU1K71N5Y7NQCbiOaOGPgsqbW/rAjffiBQYqlbfkLCIp4 4NZMH1mBrSVkt9xA31ReCfvaLSOy418Xr2piqa65+WEt55Y0nS3vTJFo8Eyz29rbpGbx5OLepErz JHDcko3GRnI5Ox2xVDf8qiW+8pabplzNFY3cQ1Ke99OFZla41W3nhY/ajqYDcAqe4QAU2ICWZeWd Bl0iO+9WUSyXtwsxK1oFhtobSPr3aO2Vm8CSN+uKGS/9Kr/nr/DFL//Z + + + + + + uuid:96F9E1E974FFDC11AC15B6426E08541E + uuid:725ae99a-7e76-5e45-a638-be54a8b3e099 + + uuid:713cf01d-bbe4-1349-a7d2-b732843c5112 + uuid:C78F7A50FFFEDC11AC15B6426E08541E + + + + Document + + + 1 + False + False + + 11.666667 + 28.000000 + Picas + + + + + Minion-Italic + Minion + Italic + Type 1 + 001.001 + False + MinioIta; Minion + + + LucidaSansTypewriter + Lucida Sans Typewriter + Regular + Type 1 + 001.000 + False + LucidSanTyp; Lucida Sans Typewriter + + + Minion-BoldItalic + Minion + Bold Italic + Type 1 + 001.001 + False + MinioBolIta; Minion + + + LucidaSansTypewriter-Bd + Lucida Sans Typewriter + Bold + Type 1 + 001.000 + False + LucidSanTypBd; Lucida Sans Typewriter + + + Minion-Bold + Minion + Bold + Type 1 + 001.001 + False + MinioBol; Minion + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red + SPOT + 100.000000 + CMYK + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + + endstream endobj 113 0 obj <>stream + + + + + application/pdf + + + BSTsearchHit + + + + + Adobe Illustrator CS3 + 2008-03-29T22:50:52-04:00 + 2008-07-03T10:39:12-04:00 + 2008-07-03T10:39:12-04:00 + + + + 108 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAABsAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9DQQPPJ6aU5Urv7YoRX6 Iu/FfvP9MUu/RF34r95/pirv0Rd+K/ef6Yq79EXfiv3n+mKu/RF34r95/piqGuoRaSQxTyKklwXE KgMxYxoZG+yp6KpOAyAZxxmQJHRZYCG/JFpMshWKKc7Ov7u4UtGfiUfaA6dR3xEgeSZ4pR5+f2K1 xZm3DetLGhWN5uHIljHFTmwUDkQvIVoO4xJpjGBPJ1pZtd20VzbyI8M8aSxN8SkpIOSniwBFR4jE G0SgYmj0WTwiC8tbOWRVuLwuLZAHIb0l5vVgpVaL/MRiZC6THGSCRyDWnRLqNv8AWbORZIOTIHId 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 gQyX/pVf89f4Ypf/2Q== + + + + + + uuid:92F9E1E974FFDC11AC15B6426E08541E + uuid:f2359209-ca4b-f145-bc24-11a32d3118e1 + + uuid:C88F7A50FFFEDC11AC15B6426E08541E + uuid:C78F7A50FFFEDC11AC15B6426E08541E + + + + Document + + + 1 + False + False + + 11.666667 + 28.000000 + Picas + + + + + Minion-Italic + Minion + Italic + Type 1 + 001.001 + False + MinioIta; Minion + + + LucidaSansTypewriter + Lucida Sans Typewriter + Regular + Type 1 + 001.000 + False + LucidSanTyp; Lucida Sans Typewriter + + + Minion-BoldItalic + Minion + Bold Italic + Type 1 + 001.001 + False + MinioBolIta; Minion + + + LucidaSansTypewriter-Bd + Lucida Sans Typewriter + Bold + Type 1 + 001.000 + False + LucidSanTypBd; Lucida Sans Typewriter + + + Minion-Bold + Minion + Bold + Type 1 + 001.001 + False + MinioBol; Minion + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + + endstream endobj 135 0 obj <> endobj 137 0 obj <> endobj 139 0 obj <> endobj 141 0 obj <> endobj 143 0 obj <> endobj 145 0 obj <> endobj 147 0 obj <> endobj 123 0 obj <> endobj 125 0 obj <> endobj 127 0 obj <> endobj 129 0 obj <> endobj 131 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 373 0 obj <>stream +H‰|”}PùÇ7ʆ=ÑP²îH²šMÇóêWÏzÚV{VÅŠ‡"/â+ !AD“@H‹@€¼HHH$¼,`$(/Õó®*ô®ŠíÝ”^ëÝÜÔ¶è\[ì´÷Ä[§m"NïúOggvgv»Ï÷å³?µa0œC¾“xhËaq‰XZòÝ©D”¬HÄÂÈÃM!’Z¥[½‚N£M룴OçÐ bmZÂXÐÆM¬¦Ù‘…ºRY¹\\P¨äo¾ÊÿÞ®]Û^œ·ó÷‹¤yùüŒr…2ÿœ‚Ÿ\"”ÊeR¹@™/ÚÊçï—Høé‘·üô|E¾\¾»,„/Vð|¥\ Ê?'ó¥gÿß—„>7$A£’Ê@2ä‚Ćm"+•H€qœ1½"cåú•£Q¯DÝE7¢ÌuL'ó ‹ÊÚ>Í°ZWÇ`|¢x˜?‡‰ä’£Yż2I‰ñ,yž9 &S—ÉÞnâ´šíͽäÜÑO(º–>¦ß¦/¶Qøn×1WšGà?<(ƒ(£¿1wXúÔ­½ÂË©ìV”益÷ô½ØŸ{?þåC.¬£±áÑ&že,þÈh6¨h„“L¾Ôö9ÆbÆ™íÃ{Ûf Ö—VUhÇt•š=là@ ¾*”(S¨õ¤¡Ùæi¥ðk@û ºçïu­ñøBÅu‹¢ kU*L•äÎ9¹ÙÔ;Góhä îžK¢‘K3£Þ~žßœÇZ˜šï£{*üÕNÒû‡ñ÷ïPt"¼N(„BŠå–VÕ’5FW_Ðö±o–òÍúzÝvÌfw›ì¤««Þ`§ŠäõeË®û <šb ¶¶2´â‰ìãÇK…dVù«mMææ6êñìýð1wª`ìÀ¡TIqoš`ÓV.3_róú箿}Á£càaë«ÍOänPNˆ¾<Õ×…µ[/¶ÚHÖ·éóªÐ¿&áÐ?̲·„ÞÅZMTî¬þ±†^£¤¤9¨«Äô}c-©S8Út”®­ºN_[g¬Ô6žÃä½z·oÊ99Í»>=õ—xËó¨ã“Žù'¶xï(J¯bâ pzØ5à"]}:¹Â;tÝ-6+f³º]}ܞ毀L:$ÈP9§‰?ÀR™’S Êš¤ë¦BKõj¯š-L«€&>Æoƒ v +YïíÉXóÁˆ+?{SNJ.…ûOÒI„Ûè¯RcÁó]r7'«,]ì¹ð_žqóà³PßÖĆ½Ì©”XEdvªº ›:&P¤gqßæÎWñr¤¥UÔÊÝÊÞ* ŸÛ\xäÔ1n£¢‡ °ç +¬øYÞ ÿ¯ Kí°r-ímm­<üâ|ïŒÛ×si`tæÂG˜£±³®“gnöµ:FÆ8,`‡Q©A8T³á œ—qøW°ÝA43Ûß÷B”y{píÁ‚—ô4¨„µþì$­E“´.•Ÿìt‹Ò eŠÂš¦çh~uZÑ®<‡Œ,WÊÄTQy†(mÖÈüuAGÌ ]Õ¤þe¹f7U2=ÒdÌ7Po>;]s¢ædÍ ‹¿¬hpÙsÀ΂F`¾ˆ/=Ñáy·æ"óTÒ¿B[¸¶_€½a¯’ÙΤ§R)êé ø,d[SuAXñR:mD“*ˆ[ :âçwý«ÔÝ;—Î}˜ùáVÁ™JE./Q”°Žçî»´0l†Y¢…^ŸA3Šª°F£±±†—Lü¶ÝZðÛ©V«¥ÙJõ‹÷R¬R« +þ8ÿ˦°oPÜgC'aâ7tY"ºŠ ”˜Þ]¡ËÐer ®ßè¸ï¸ÇÁ;çºG½ƒ˜×ÝÙb#­õµ)|öb­­Éf¶™­G¯µ³ÝWãÄÜ:¹­”,:~dÇ)ª‘Ùõ«ð¨ Õ8RB²v‡cçMæN°ï‡7ù1À:¢Á„žWdV‘º†Îa3õ8·_A闘ð¾²Åç阷4o£iÌsE–*ô>óÝŠÒH©·0@ÞXú$à§XZÇSžƒ.í€}®{MLЛŸi;¢yÝÊ×ý{õK×W+¦y5 dkC¯ÿ`${¸u endstream endobj 132 0 obj <> endobj 372 0 obj <>stream +H‰”•kPWÇ»™éža I-q»gS¢qgŘUãÛ1Q"Š ¯áa@pÑQEC£‘AQŒŠ  (¨¨Ñ ¢Ä6 +Q‚@QiŽ®{š½Ôf{°¶²ûq«?tÕ½ÿsîïþï9÷â˜Ô ÃqÜc¹Ïg~K–kVlŒ‹ +_¾Ù°Æ˜¤KÕÇ%ëôŽyµ@ã‚»ÔŒ +„ýs:1ÃjöŒ ïAáx8û¸94Û´‰IF}\Ll²úÃÈÉjïY³>V/ŒJŒÐ©W ɺƒÚwsd¢>)Qž¬‹òR«ÆÇ«zƒ:@gÐéSÄÑwê8ƒ:\­×Åĉz]”:Y¥KסNŒV/Š‹ÑÅ'¦ª'ª—%Æ'è ^†‹æŒcïa˜†1æ‰cÅ°)ö†-’cŸb˜?Ž­Æ°@[‡a0,T”‰[Çœ0 æÙ°SØ .Á?Å“ðl¼Î sÚîôDâ-)’¼‘N‘ÖKßjba$.’Näb2—¼,‹–;»º[Sq˜ËK„ša«"xïÌŒ©Þr/¯ô>rW¡±-H1äÅ zÿ”y!K~[V´¤dÅ}y@÷&¡ÙIpºÚÍܼß]ÒT$—k—ÜCžŠó–þ¢ÁùÐP (`¬ +ÜCà}¯!fêÀÌâàB¹¯¬)³{GÇù·>'*$Ý„¤K˜ –˜ÂvË]Íà‰ƒ<%`T‚'x"OÒ1{~GSUùõ_Ö7ÉÏ´XÚo«ž!QuC–=;Í-2¤ÿ‰–ã9¼Q°IU6nÄFòÒwW3'<àð›<\³Kn*a nÇnv²½?Áø.ÕÙ½öȘö„€^äK£U$¯UØó»ò/FÉï¯*Fc|U¨ }böf‚™à(&ËKÞ*…U²ÃQ¨åP-˜à!72Û!fE‹p^¸RðáÐÀ0«!]+R†cRq®®ôJ8e¯Ð–O¹‘6âÙpÌÜ‘óy$:+œ'¦:tÐÁA‡ðh— (yèxJÂ:ÔA€3‰¶Â@­íTYíéquÍ%WT7âïúaÊ7Dšýi¤u _'Ûßš‘Ó'As3DºfÞYÚknÀŸ9·®_!§Lðî)ÐX䈔ÓzV<½ÑVu”M,¶…Þ¥Wì+:ÊR­™×ˆÜÌôœLz½¹ñ, [dàuMšöYÊö0f–¬ôø·ÇûiÀÌKcØ™¿”2!•lc`ÈŽ8z¾ñò7ÿ€ÌgX×t.4EˆîcªÛcÊìT+ezœ¥àHªµ¬‹°úŠú Oh û‚a’H9aíÌD#›EZ~% K#ãG¼v˜±­51‹wùEG±)iñÆX:yý¾[þŽU/NŸêöÐNuS§…#B‰‚ê>hõ¡Q¤1ˆ]eyÝŸ8s3HúqÛAë)ölW’ÿVQᶨ(pºò Œíº–º£^Ì×çó½0sPwØ¡œwP ‹”ü°UƒŒ¤EKd‘GRt-ÓH®Ö õ¢Yhò-$Å›‹jË ™uOá©Õš3h$5ƒ¦îîקØŠCµeuteëžåß9aÓ8¼û-ì·K„cpXñb,DÑ´©h<š¸ÖêÕµ’‰h¾eà韮•—4ŠÀÑS–›Óiã´/¯³±¹çskå0B¢aN(¾}æ: còsD+ÖÀA ‡C‚X… J^ ‡,]ä%ó}pÿ¾É”q”y +Jˆ´Î¡Q’©—°«‘§þ3é¼äg±^’}-•Mt¿YÎ"±3~“ÝÙ}D’©KZg‹ ×ÏKñü½fB9.nP.ã©!¨]¨AZ$©Wé¨qÊe´1ýE§E§‡ŒÚµN¾£=… zþ +ªYä;~´.ñ‹vhµK =]¾Ýà‚ñ¾ F+ÐRÑ4ÑèXÉrR$‰~mÿ{ÃKILŽU#bÔŒ°>4<8ª4"È òxeGÿ º¬87ç;Ÿ“QÍ ‘Q=…†ø}a´nz.µÿ ¢w$î0È£Ú–ZÛĮֻ̲́Ƚ‘ô–à‚ê6Í–S~IÕΡt 5ˆDîZp—¹¦®JjRÝžŒšÑ, 5 + zIþÍ/$-‚žaæYРßdK÷o©ŽcbjZMôÙ>M¬*-ëC‚u´&o¯èfås&C(ü…àB¢ PËÀ&Â" +B!ˆ@cHB6‰­hçà5çYÏüû¨!!G|Å>OqËlsL0µyçÆxÕ–¯ Ûjèàt"?«ÀdRù„lõc6jÏ‘-ßy;sÒYêÕ¶éDÞÞ¬/ ª´Â°cñLtÝ%S?}™‹"×Î6ÿ¸?¿ô«J–úú6Qp°àP©ª#¥}Áa¦j_ÕþêSòêæ¦bÕÜŠì*†zµë‘gÉ®²©õ˜¯0 äSö­|F½z&(.“ÔÐáGæº lñ玫ª³«sJÅèíOÅè›MÕÝRÕÉœã6’ËCw•ä[ ¬âú¥O‰|‹å›*Õ¡½M›3 Ñk̦ÿ­pç@ï¿ÝmÝÒUÝ^*ßèÎÚQÓQV%å» ôZ±\IKIsQGQvw|£T]oy±ÜT`Hô—ÔHYÙu‡È¥²ñUÎý™>÷wúôï•ÓÏífû8ý2×kîïD  endstream endobj 130 0 obj <> endobj 371 0 obj <>stream +H‰bd`ab`dd”÷r ðvóÒö)MÎLI NÌ+©,H-/Ê,I-ÒuJ+ù!ÍøC„¥ûwß÷¿LXe–µò~ãÿž(¸òûJ!’*çü‚Ê¢ÌôŒdMCKKSÇ”ü¤T…àÊâ’ÔÜbϼäü¢‚ü¢Ä’Ô=Çœ… úb… ÔâÔ¢2 (Ä +™Å +‰ +E©é™@E©) +%E‰)©¹‰EÙ +ùi +N™é©9ùå +j +ù9¹©Åz @àÉÀÄÈÈäÌ· ì‡îwÉï•åŒ¾«~÷ø®Ê|A ȸ˶jþŽ=‡¤NLN–ÿ}(òý]ÂßìFa‘^Er­l?±~oý­ÊÎW9÷gúÜßéÓ¿WNÿ=·›íwâtö×\ßU¹{xø~¼0tuç endstream endobj 128 0 obj <> endobj 370 0 obj <>stream +H‰bd`ab`ddör ðvóÒöÍÌËÌÏÓuÊÏI +þfü!Âò[ãwŸ KõÏK¬² S:x¿GòÜðýªHQ½s~AeQfzF‰‚F²¦‚¡¥¥ˆ4RpLÉOJU®,.IÍ-VðÌKÎ/*È/J,IMÑSPpÌÉQé*VJ-N-*ŠB¬WÈ,VHT()JLIÍM,ÊVÈOÃg#'#3##‹UÑ÷¾ïŸ~F•3ÞºË|ëûbÑßÞ§~ë}WQ•›¿˜ÕäràwûïRߎ~·tY®|1ëoUŸßz¿½¥ º¾Þeþ¾¨ï»·Ïw½ß*åÊ‹Y9ýmÿÛAê·Cào{g¹ùŬßU>žú®÷¨¯fÖO¹Y¿K§w˜¶›í{ó¤?5ÓÙå8WŠÿçáÜÇõ»‡‡ ÀySŒ¦ endstream endobj 126 0 obj <> endobj 369 0 obj <>stream +H‰|”{T“çÇ ñ•Õô”·Ù$ïš'žy¶º:§uÓVE­(ˆ¢ÄrM !!€¹¹ !7r’p‰ D¡XuZµÖµX¹è´žÎª›º³sž¸—v{ƒž³ÿvžsž?žËïù}ŸÏ÷÷#“¢"Hd2™ž¸u÷ŽøÄvæçñ‹— âæe‡7–†0rhq”ü­àÚ?x5NyD2.‚‡Þ†¢w}5&|N¾…/–æå±ÞÏ^ÆZµvíÊåáùCÖ¦#|.Å– +E¼"!+¡8›_*à—rD¼#+X¬M……¬”ð-!+…'ä•Š‰Õ×9°ò„,KTÊ9Â+â”°ø9ÿ/‰D&i‰´!%‘IÉd;’”N"Ñ y¤R$i-é>9›<¡Œx)ŽÊˆzNÉ¥.¤¦RŸ,H\0Ž¬FêÆ.÷/cáÛŒ QïQÎòìek˜uÔiø#ÅÝÔàP`ªO…ëÁ蜗nûÎèéF|—'†0½*ÿÙvüE@YU®.Å2=³V@K¯üph8&0ƒÀ)Eñ÷g±±ôòáË·ÚïôŒ‡×Õuz+…€Þ2kѵtÀn6Ûl g‘;7!éh—¿3gÉ'ŒÕ§Óÿ<ô}ÿ­ëLÚmù5Ž8´f°F¥„Âÿ,Ü55ðå+àcBä8õdcX$š¥(ÄWSˆe¨ü„K^w87$îÞÿ«%Œµ~¾·c¬ßbgž÷Ÿ=s梥 +q„lžã½áÑQðš¢H…©Í>=è‡)~¸ç4LAÜM9¦ŽVlh¿Ožû‰^¦ðÇlé¹¼c]^W b´uè½XO§Fåêtá +q€Wš/!nn±£qåárp +¦Ü„/ žœ”.ÍÁ_Ž55¶4èÁÓ.¸þ‹ïü¾ôÃÉ‚¼,æ¦ÎÒ• <ú:ßßwÏòò—A„Þ +#ÏúH“Á¦³`ÎnyÎÞÇqÀ4üC¼Dü +釚òoC=‘·Cëè‚­’r*[%__ŽÇðdQBy%¢Ñ(kU˜¼Ü¨—¹^Y­Ñ j•ê˜‚!ñ*mçìãC̾àÙgƒPÜ40â¥i±ËKÁ£©pgçâÖã‘‹] ¹Ú|Âd@ Í»•ÑÞ påa{våíç€#%­Ch2ü¸‰C¿ªúj$1ųڻm®&ƒÞŽƒ h šZ{˜}N·£kç¦,ß¹ãPnqïM€~­™Ë¢'%:¯õïtC»ª·t1Æ ÷2ï¿bÒ‰8GÙ’\ØÏ-ÙÊØ1˜}IÆÌ(¬’W26I¯„‰~£À£RÙ™™Œ­ßåO_‡ Øñ }Œ¾€ +Â>‚ülañ‹[ÐÇ_Â.Šßh>%ÀD«3Ø{€YBq¹Ïuš1à 5¨¨Ûqå Ü&·c=Ͼõùú('TI?éêôÕƒöz™“åHò ¬ÁQéÅhnùU®8{k¾ÅÀMÐ*ô|èãûôÒ2©J†)”&w(ÊúWùå¾S]m^;bimÓ90Gs}]3°Ö8{m ³Â‘—ýÉ–m;˜åâr‰°ˆüC(þMSRnVlÒ o$á¿.ÀŸ‡¯TìS¤ÉÓ§:7º g-Æ€¡ÅðlïØéÙ‡°;]J'æì³]!Šd»QüêƒpŸülr译Pߢ xr¬ºÞìjš$Þªo‚Hºîo-™3Q6TZEí˜ãéåñ  =}Ã=²¦_Nk¾Eð½0r/Œhn#üA †ïŽašyäÃ{ðjJšL'ôÎ#ÝpŠyòêÆyä¶Ù¶™Ö¯‘çž|S%¦¬¬UI@–dãþ?ý©¥ºþF™hцA}šÁN ƒòx=¨Z)*_[•¨Ê”¥ÅÒ¼òлä33°x&ž¥ÐK¸r!ÄsãVà,ÆÖÞõÏ\ëö™7® þóã^ÖÅ5L|#>H‡ïONûZ˜:£UgÂF»y@#þómx4çR«–Õ(1¶èÊ$ m6Šáž!ø*²‰è¥ ì´yãt»ˆ|ê¤û _¥HS¤ÉöÅÎtjý¶οǶøýÞSH§]oÂL-5j0T›LzS³Ñ¬·èÍ'¬bUW˜Ë°ÿªÐÇß J¾“mÆ ÖCÓzÖ•Hó)Ôïûþ{7ãã1gª}ôèáÍu Ë|·ÈçÌOX±ZjÃò%Ë×,­,›-7±yZÏÌiÓ§õÏè™Á± 'uI–tlLni±|LB[r¹TÔ¾’mYr»Ò'I¥eåågO^Ÿ+×4µ¹§®…£º¹®²F*»çházi¾ß" ªÿ?ㄆÿ Š B×nk¶ÉßùEËJ¢cJ¤Ûîœ*ôûìoV¬bý-¶ú»XÓDGÿ +{Vw¶üâIõ¬·Ù|obµ«š—1Wz×Ó[ÛVËó½WfqåBw¯×ßþzC¸ä‡ñsѦJ§æá-a%¿…[„Kö­>>Ør8ð½™uÓ”®%Ò¥®(?¥ñÂ%1¿SY‹7ÕN—^ºzîìÅò'·:¿ë°~Ëÿ-.aJϸJnõÀä–JnMàæú÷w¬l|ß뀩8¨|50+ÿ!Cxƒð…Š?ÜD=³úþfòúÍÌ]—Û¿3tãÞq¾£uC©tf`@T‚üÔJÖ5›çΙ!=­¯8²O¾7uâoïI&KÙ<¼ü]àüw`“fæoÆ)¿™¦ªE^ù.ø=påŽ%ç.])µ¾lAYiiq©\Ó”ºR©”‚èâd¹œ°¬¨ât …Âê¿sÖ}ç©ÿÊÁW3ë§Ü¬ßÕÓ¿»Í=?í{ó¤?5ÓÙå8WŠÿçá\Ãu“û{•È;Q€æt& endstream endobj 124 0 obj <> endobj 368 0 obj <>stream +H‰|”}PwÇ7†­h<²î”d5››Ö;[[ëyÚ;m=*Œ”JyðŽ #Á¼BH"ïy‘¼Hx X@$T“³­ŠgÇ—{™r½³Îy7ÈôîèÍOè:×Ûˆs½û§³3»3»¿ÝçûòÙ ‰^…°X,^ÊwßNJÙòŽ´L*/{5A.“T‰dRqäá¦0É +¯Ö¯YE§Ó­¢uË·ÐbkZ âu ‹›ÜãçFêåå• +iq‰J¸Yü’ðG»vm{%rÞ.Ü/‘ 3+•ª¢SJáÁ2±\Q.WˆTE’­Bá~™L˜yK)Ì(R)4ÌÝ!B©R(ª"IÑ)‘â¤P~⻾„ ,æ@^EIŠFRYH ÉDòŽ±‰¬B¢£È7,1‹^õQTNÔhMôm4e'²p›.‡ï³Ìáá(ˆ]æ“óf‹IC#¼ƒô—Ì¥Îô†™g>‰†el÷è{‹Ž±bK¼2O%Uk1•âç¦BòuCÏ'.ê.<öb·Ìwð:†QÎc›&¼ãJ–;\àA,>®”¨Pk¤©Ùîk£ðË>@û ¦çõmñøü™sÚe;Ö¦R¶V“;wæäQo¿[H#¯ñ÷\Œ\˜õ÷ ‚ЕÁ ¬…]õ:ºçL°ÖMúÿ4ñáMŠN‚W¥X&RʱÂuMi0{úBößæ¨À\ ×ëÀìo«ƒôt5˜ÔÙRÅ Æ +ŒãЦYã°¶^ ñD^NŽZLfWξßÞdin§‡`ïÇ‹üéâ±Ä”4ÙÉBÁþtѦ­|:ö^Ùµ«_xþþ¥€Ž…YÂÞWW”!*xAD¹!æât_Öa;ßf'9ߧOkÂÿž‚”šãn ÿ_Nx Q½³ögUôZýFÕ}5f4ëH½ÒÕ®§ôíµõƺzsµ®ñ¦è5zÓî©+‚«W¦ÿ:oúu~Úyï+{¼¥W³ñy86ìðž>½"@á úî» ³Û¼ž>~Os™_D&§ˆòETþ1eÒ™Ÿ`ilYq«åLÑõÓá¥É­_ËU&†Õ@›FñP;eyï©X{{ÄS”·)?µ€ÂƒGèdÂkVi±Ðé.…†ŸŸ]‘!:è»9¼8ãÀçáb¿Qe’šöš0·Jf“yiÚâ<ê°H™‘Í+Tp¯F/WלӞ«ôªzk0üÖæ’CGó•>œ‡=—`Õ/ +g„³‚â.­ËÆ·v´·· ðó÷zg¼ž £3ç~‹¹õN¥9Ð6èã13¨I´  i¹ðnˆK…8ükØî"šÙú!Ú2€=¸ü`ÞOúÎjÄuþä­C“uMìgºNéÐ +eIÍÖ§h~} ÚОBW9Y©2UH©ÒÊLIú>¬‘ý›0‚ŽXÎvÕ’ÆU»©²‰˜‘&s‘‰úñ“c†\ÃC.#\Q´øÜ[ÀÍ‚F`#¾€/}¥'˜y×oEæiä%Ï~…v¦¶_uԊɼÄãi”KŽúzÆV²½©¶˜Q¼”A›Ñä3>F1þˆåT"·¼@VäW]ÒH(Îmš~ Ѓ´gQÄãºðÉ*u¥Á@ŒO-¥óWW…ªBºqÀÑévø¬>ëpë¥zÌÛœìæw+ܲ£Ù9ééy¹ê´¼„1<>öžµ¡«š4þPQõÓ§¶›#¶%ôq1W@·šãÝÝ´LÙ?àYC¾`Ãg<©}ÉîØážAõ9<áüÃuŠCólše*¢qÖU/á Ÿ-ãÄ{%I|éO\hrM×·õôGê©`âjzZÏ°ÂWÿ¯¼ø4t.¬‡u·aý;ð=fUB„K„+CÀôçó=¤w…€¥ìg¼ÏFÜø–€ú•ÍiáÔ£ñ‰WЕSåºy™ L Î9ô¦£aä)JøoScÙÁ4e¤Šé]ú,}VMó™~*ŒM±Bû . +2õÄGw‚ãïSwn^\ü‚ÿ0ëã­¢ãÕÊA’$aÏßwa;`Ø sD ½!“f•Ö`fs£”–Mþ¶]Ÿ:¨6›µÙFõK÷RµM\ø¸‰ñŠ;àD8—'ý.kDW©‰’Ò»k3õ™ú,Äõ·ŽwÞwÝåáƒÎ[Ý£þAÌïu¶ØI›³¡î<…ϯ³7Ù-v‹Íêêµ9;7æÕ+ìj²4çÐŽ£T#»ë×̨ÍÏÝ&6-Ot1‚îÄÊç¿YóÜÕÕÀ‰m^Ãòõá—‰ÿ0„ü endstream endobj 148 0 obj <> endobj 380 0 obj <>stream +H‰|•}PéÇ7À.Û³†3ëöLVwc­wv´žgÅêMßNOÏP” +’ð.Á$$¼™I $Â[xG^" "øŽJ½SìЫJÅÎÞLñ¦í/ÎúG—ó¦ÓþÓyfö™yöÙßïûûü¾Ï><$ÀáñxÂ{¾ü|﵇S©¿ Q¤Èö«%)‰Ò…—«}Ï·4@ÿs?ök^óf] ¶âÅ Ó’Áåx­`a£~—"-S™Ÿ ¯‘þZüÉÖ­Ö-<7ŠwʱrqX¦J-?­ïO•*”i +¥D-—­‹w¦¤ˆC¾R‰Cå*¹Rí¾"NT‰%bµR"“Ÿ–(“ÅŠ¸ÿ AxÜ@øB"ÈG‚ »ýÏä‚BÃ~H˜"àêEüD„¤#?ðªxÿðëòßÿqÀ‘€t+êÂ>Æ.®4òù›!tŠ×]þ×ÁMælG¡sM¡ü±âNX5î[¡å¹}27ì"Á‚eÿ.ïDaá“ДŒB7VÞùiyI¹mXXý ÁªÆÑ`lÚ·ݱ‹YÄŠY’]‹¿l"ÍL>Ÿ|‰[°£¬å¿æB{®‚y(¹Sàkë!æ €ì‡d´Ûj.î£.a<†¬*¦òlÅ™’Èó2ëu딹‹Ó¦äI“Õ¨aá~ö{nÊ7îy'ç&'ç“r£µa;¬Eg±™Ò‚Lväh<¶Su® ˜âcÓø6]ÑiÝ !,"¦}™€’êx­2–Øë, 1Th36üP`YFLgŸ×–ªÊp‹Ze>KGÇD1ŸË"‹¶uɺ»FzšZèvÏÀ•¶~¼ËÚŒnËnÏ­¦š^ôߺ˰{a©’¦HT +<6!]—Oå™j›ìöÜc<÷Òmj?Û¡ÅÎÔ(5¢èc¡’ýuw½í}#nžùâIâN–1Ѹ݈W«Sl2*ê°6>Š9*Q…툙ÐÑÑŠtÝyíùL·ºQ‡ãk¾ˆ<* +ù.iv¶]¿ÑØñ5:¾F벉*ÊËÊ,4Q9Ñ8âö4tµöŒœŸÄ]EÎ'm-ñXÚ\ݽB>+äº,ÓrúE‚q„É"°‚˜#æ_ëÉ–ýcãLN+ªQ$üäú2†˜û#8ÐkŽ‚)µëdèaÆ¥@뼞 +ª¬87>Ÿ!æCYº/»NÓN³@¾9HO‹I‘7¥÷uôx;´­2†ÏþÖ¦yÃ,k‚Îr¦š'æž¾!È~ìkˆùߺÐ}º.'ãÖ“Ó‚r–Ëàdÿxøæ€ç»ú?–ãÃ{?#€¥t–‚÷¹]!.²³Þj‚€ŠVü/ÃϦ(w¡Fº ó›Ãétÿ”âÎB¥\ +®Ò‚wç{î ßÖI]iT¦Ú˜“Ƥåì‰ + Á‹0ç=ô®ã\w% ù^*ç˜xv«>\® òoë/ûð˼X;`‰?„éÉÛÚ½—˜wû^͈fÿZ/9yVCï•…l`—‰vtmœ†5p,e—‡±¼$^d2åQ‰©ƒaÃØt»ƒ±Ø*JlTGKâv†ÿ-k¸ ûGµßÊ1A‡,XJôƒÅ÷i©ª2WSFTÛâV¸™ +We9lFzÎCê­ÒìȤ4¥0OšªOÉOÈV$zìž +O¹ð£·å†˜<ÃÁ|aR ´U¡',IæóUƒB¢¿ ~“ÆZg‘“z\=qiä~÷aëÔ×¢çQ×Y4-ÎdÈ ù°ià%âsÍ %ç;NJ÷þ¬ŠXIF&‘ý47L¦Â’³·ê‘ë¡hsŽ×÷4µáMng©²9ÏåW2ĽÊ|{±Ýj·Ú*\6g¹'¯wë•öt*)â‹M‘LVó'.Õ€ÍÔJñ·êïC?L=}î¾ï"?\D aí3 endstream endobj 146 0 obj <> endobj 379 0 obj <>stream +H‰„•{XSçÇàÄ#mÓ§œf…œ5oÜÜVWgµnë U´VDQ. +*`€! È ÃMn!@!H!ÜE +^¦eê\½qÑi7ÛNŸWŸç ;´Û ú´ÿmÏyžóÇ{Þó¾ïç|?¿ß¡R|¼(T*•¾sßîðw÷ddgädÿ&LÌÉÊHñßÝdb8364‰VѲ¡ŒÑÓR¢12®x­<ź 2yÉ¢\”“ÊáâùÅý=º›—c¦»³ÓˆbYZCs§*à÷ÓÓ2(¥^¼Óý®žó~´ã´SÕš$5X·œ¦N¬ÔI¸†‘Â~¼gªiðxpé3_gN‰»Ó9ëSÖ}À*§ÍÁïöÚJ“W":¾Œ/ÛÆ/ô¶ÞQ´Ïyij·5Ư„oâUa~±O8š=Lq^þ:qÔop냳Ї!ΉOŠÆãòG/Ýh½ã®6»µ ï°ˆL»Q_ÔXÓ¨G±¾æ†£‘iá·§…E¤ó’Y!{xk>bnˆûãðãÞ3,úMÅUŽÄýA©ÊHB?×Ü;Û÷ËQ¯HÈIÚ©*$–¤Ì"6#äp8ÿ¤ :š–Â÷Åÿ| 3Еco›è54³Î¹ÎŒŒü ­¦‰ )ZÉñþèø8x‘¢XW58µ F¹àþ…¶×V™xñ6Ññ`€õ*‰ÈåïyJûЄñ/Ž‹À>Ñi·6¢zc›ÖŽ;:4j(Žmd +¸Âcb1ÊINË–àôdÅ4ün:4 £îyÃEHgDFÄÉxx¸òúDmUc¥<é„[>{Ì<Öw4R‘ÄÚÅY»‘IøÎä¸zîž-²9D-Ðûì¸Ó„ÖêŒ5ÜÒ¥àÅ=J€d@'Þ'r%Kh/ÔŒQívxßt1¹Õ*ä>M¾I±%Ÿð‘â°üT£Q•©qE¾^+ +­ê„Fƒ«ÕEJ¦Ô®2™Ï6O³z†Î<퇒º!Ý z=«÷·Ú—÷8lÓøæXA݉†“õ:TWghnb¶V +¬øþ½ñz$7¸(¥Ë‰äKÜo ©{J¥~Ù Õ÷Ì®DÞÂnnƒL²zûëûZ¬K»©ŸhMŽZ¿gwbZv÷5€}®[NbD„[® ÷ ÝéºÒöÂî|tLЕÍgŲ,±ä:éÑÒ4ˆOÎÝÃÜÝŸrQÎ:’U¨(`*Òn) »¥$|b¢˜;¿867?øÍiþ`È ‹c‹ìjcVÖ×h›êQìѶËmC»uØ\cf¶”¶7³ô•µ•úJ»ºÍ\ÕÙ|ÊYÒàONÌSó5[5(y@£,·^€Ógõ7¸zR +ó‚c)RñJC»`_]‡ˆKßpZ€‹7‰Þ¤ˆµýlG®;YÌ%+j1”p"‡FE3îxz×éØßxîÆ)k‡³´VÈ-98Oš!¨y•¦;NoW\I–¸n¬t"?¸ý!Vˆsø€!Ì“©å¸RUß^r‡“žç_ê9Ýi¶7£†s 7ÕU”צRK·‘Ù 4e¤|´c×nV¾$_*â“È_»C^6%ÕNÑñ­@vþ%2Ÿøe&ñ^±QyPy@7Ûá_Õ®;c˜Òê]ƒ¶Ð¶=¶ƒht‡UeÁ-=Æ™1²HBõ’¥w=}òÓÛÃõ†"ø*C$8ÄUà'*¬µÒݷɽ*<Ÿ7L, úq¯5ËõÈÖ‚&q+nzrirÐáó•àýàÏæàöÛÏçKïbÏ1÷’ø_Œ<>LòDÕJ’ÏÍ –ù–ÏÑoléž0 ÊÔR$Ùr(h-IÖúylɬ/ÀÕ’9ž·+1èWhÍú%2ÕXíÉå“#Ñ1ž\l¶~™K™ŒÌ…K†«äf;´SvèUg˜ê†>1‰ÛÊsSÕ •”ÇÈcŠbæ:tSí×»¦…Œ ÜQš™@þ“Ü{=i…¶Ïú“—ûAöܳ9Í]l¾íQxe}ÒwRa_øæÞ¡YQxt?q9 ¯ÙWxÑ@³¹?‚šÌ/À‘€ªàÒàø?ü@Þ€t»¢Ïýfudfÿ—ʲ{i*ãøLÎ\ œS¶ç(uData¥e©‰‘5£–™áÛÔæÜÙl¾lg;Ö´–º¹³·Ô-ߦ“™c™‰(º’L¼ñ%ÍÈ +$È‹ ~‹_°æî‚çxžçûùòÙŒ“+|Y¡F^ˆgž;„éÃgw^,¸FÇ°E¿÷çWáÖíÙd ¦B/]Ùb°VsG+¾v¥àO`\&Œ¾ÓÀi¢Ôz-šKøWp¬#$+Ü Y^pÙG*ÇÆb®ã`p‹çžÉÙmp ³DŒO‚qg*Œ]ƒïD|­©ZMÔ(mA…F¢+S Z‰ºÏ9ÙïÚò 7ÅÓ‡åzm)ÆM3+Að{À—#Anhûê,q®( 곱нšUy$.'I)Rç 6û[Fm‹ŽfôéHŸ‡3Òo7Ò(Íè)oo¤ ´‘6™-F«Ñò¸ãÍé j- +Tv)'éÞÌfÞ 3ƒ‡@¹ š)_E¬ù¿ÌG‚}þööçuÙŸíÃ+º \náóÞá>•ÒŽ)‹¡Ãbµ´2†ã0õJÐ[âJ…<¼[#¼1EŒK°‰“¼ZX\^}OZÞ>R‰éhÊ näÔQjU½°Ü0'A¹0vOµ‚m¡_°IVÌʯ*díà_IܨVï|IãsÀþ»Í5„ÀX¶ÄéŒçsî§"™l©Ü¤A6ØÙЋ¤Ôv•v¢ß>Œ»qînXòkb>®j6~­ñˆÀ©@2_wU•FžOD@<‡ÊZÜ~&djÓ€B¼æG½U¨"ý¿`šõ{ÁäbX„$ʽ V´ÏÝiïÁßúf–&B>!…±áFw¢Ì§=4!¤{8è¾ +v-›[oûƒÙ`dt.YÙ€2ý­·FaŽ ªøàÁýÃÑë@ml …ÿO€™Óš| endstream endobj 144 0 obj <> endobj 378 0 obj <>stream +H‰T”{TwÇgHf’Z§ƒtFgf»¤Õ“s¨ZÔh6š²$ëÛød3oàMÆÄd)ÐdŒç3L†xcªÁ´†OKà’)iþC~~ZJªÑìƒa¸ÔöŽÆ°qÆb˜7†}Œa$¶ÖâØ2,ÃVbØ* £%Ř&Ã|±ÍXÖƒÅ}qþmÈ,²6YŸìòy½üE"®)ŠÑ*•0YÔ#æ¦Q.¨€@:ÅhuH« Ù†:5004’T :-8ÌtËÄ£ƒNMäö鹓&+}|¢ÐäE£±mHÓïÃöM~¸å\žò¦"fßÜ‹:•¡®Õ ‚Å ðøÖÅþØé:кOù6WŸ[vi5g=ûúž(ûûÛ@ciðŠ‚1>ýì¤'ÓK"w+ƒ­[\›®ù+¿:Ždˆ ‘|5’‡ÎeùÏÍŽÙª”thq°‚VVOЂiÉalûŸMÒÔ5íljUžjs\ºI÷"ÉëE¾ßzsB¾RÌ•ÿ78Á-à-b™¬8X& •‘nùÛ¯Êz_|-àí2ñâ`”æàçK÷‡0‹ÿ¼aZ·$h-RL Ñì‡(v>¾Z]ÚÀÞWä$-Ë f'zï Äÿ=øƒ_÷ÔMõœª*k0Ñ‚ ÷àò=™àyOl/"áôP;Ñ;˜8sèl!‰þ"ž%&‘*› ú&‹úÁå¢NŠGÄÊUæ bPœ±ˆûÜ9ýJ{êÇ$ ™Gí ÜÏŠÍé!™’‡:àPàqù)Œ½ñeS§²uݽ°ZÔ× ÒM§²ÅO÷ S‡¬¤COä‘G²ŒmS¤äu(‚£Î£‰×‘ 4¿ÓUWÉ:ȼ;­^oÏeܺÆÛû;N6sU‡ê*™êóÛ\•J0_€)îúöJ¬ŽÁaÍóÍ0E£)“Ðxôa¸ÓçÆ6öÌu³›yø]å©á„ØmŒuÊÎ+‘\RËŽ³;ê”0D¢AA#JnžºÂÀ¨BôNlá091T€0‡T· R=Ýb(8ä¸A^°w‚×­Öìܯ؟ûR㜟1(ÝŽø¹Ü2¤ÕƒV¡BÞï=›EýÃT¹©g¯P&§õBv'ómÇÞ§¹W÷uƒš¦ºÄϦ)¨g!yŠãIqÍ34ë 4)'6¡Éà{îne_;ç suÄì­Ùè}&à˪òD\pR3+2$=†™¶ºÛݼ»ãX;×XÝXÙ¸Z#ÌÕoºï“è㿺Áæ–ýêé†ßÈîkmÕ­L]oàÐ7üKñÓÖ#¦lcú—e±LĬ¬Éa\éxA@žN1œa•£`¤ZšÖ7ƒÛu…£¨Ea$õÒaÃ;rxb¥g"‘j‘Hµ _2º¤Ã^þÍœÁ%›‚]0þãƒG‹ÐI°l4s«3ÓËiKñê£)lmZ³õÈÖß“½Îol±èC”ÏŒÀúƒ±ìp9O û + û +Õ qµÁ0ÏyÉî¼ÍþU±%>n{³.²¸6•[_VPy†Z° Ȥ‘ÈK^ +•ýõ´,ñ¨E]'6SéPìé&Aú'¦’ÔI<4Š3‰ ¤ +I£< À+AÚâ½!ÝT¿X ­æ/¤W°ÎÏžÉů͉N¡×í2o`©þƒ¾DQ^qv6•¹ÖŸ&;ÚÌÁ9…96Žz¹Á—(Üž·ÆL¯ßs,…Mh¼ÝÃ\âÉp?ûý½E廪9ªÿM¢ø`ñ¡rúZÖ%ÿÃlÍžš½µ ÊÚãöÖºtGU~ K½ÜüQèȯ)£»îÚ/³Íÿ×åîî%½ÔËWÈ[s‘¤úwÙÏqÍÇJO×ÓµùµåRôÆ_¤è‚²2ÚÕVÓÁž¢É«ß8Pä,vJõË!ŠŽ¯kèCÛ[×Ö³Í ËKý˜p}“¤ø»߶Âù™\î<¢ » k½¸*¬ÓÌflËØjJRšÖØ£s霖]f¶d¾DbWF6ýé,ûrÖ(­öŠÁÄ +”è«UØIdp*„îwÅcþ-ÀöM endstream endobj 142 0 obj <> endobj 377 0 obj <>stream +H‰”•TWÇgHfö =Ë43˜Éöˆ–Í.kW-þNk*JEäWøaA0A~hA‘Aj‚€bUAAE­¥ŽU¨PüQ8lG«q×½Ã>Îv'zöt÷Ï=óÇ;ç¾{ïûÜï»wŽ‰0ÇÝVø|æ¿l…zå¶È¸¨ð5á[ kÓ“t©ú¸dÞ¾¯âiœw›P!ÿ¯Î&¦bXíÞI°ñØÿûcnŽ.vŸíšÄ¤t}\Ll²êýH•×¼y©–D%FèTkÒ ÉºƒÊoKd¢>)Qž¬‹òT©–ÄÇ«ìþU€Î Ó§Ö·ª8ƒ*\¥×ÅÄ z]”*Y¥KסJŒV-‹ÑÅ'¦ª¦«–'Æ'è ž† æˆcï`˜†)1ÌÇ>À°1l©ûô8¶Ãql=†mÄ°P ›*Ô9`"L‹Y±ÓØ(.Â?Å“ðü¯QÝ"…h§hPì*¶Š GBEDuGþ™Ô“õ­ä•³ó¸%‡œˆ¯·È‚÷ÍÍœé%õô Aï"WšÜ†dcžÊQ¯³.fKoKŠ–•®¼/ èÛ "  9×ú”Ý÷ûJ[Š¤osr¢{È]vÁ<\4:"kLV€k¼ë9¦œ92·8ø€ÔOÒ’Õ·³k±ôŸ“H„oFâ€eÊ•‹—ÃöHMàŽC:¸‹ ]îàŽÜI» öþfG3eÕû[¤gÛÌ·O‘àuS’ãfˆÎ‘ò™âÿÄÃr,ÞÌ[EÍÀÈx+;a%9ñÛÕÙÄòX¼›ƒë6Q·æàÒu¼»‡ø¡¦ö*Îí³E~¯ìL@~4ZMr™­ ·àR”ôþêb4ÉO:ÐÇ&/e°=Ô±`dñל赜_Í"ÔA=‹êÁÙ oÒ¹2e<&gàꀈ•ð$œŸè žŽÇ,˜¸O¢süb¦ÝºX¨fñm¢9]OHXºp$Ñ6©·ž.¯?3¥¡µôZ“âfü]ÿcÊŠ‘&-4vÆdçkrø8h>rd‚Hç¬;¾ý°ö&ü‘uéýÒ8Êáž MFnH>«ÍÈ“›ÕuLb±5ô.}´ò`QCµg]'ò²2r³è ¦æs l•€SÔ 4cÖg);”ó$e'¾91LfòaB$Z1eD +ɦÀqô¢ô+_ÿ>4eœ3ØÐ>zÒS]qPn£Ú)ã£lKRí彄™ÔW6n|L ØÏ 3ü@òiëæ&¦3Ù¤ù²ÕnÂKfciFWóÉnÿè(&%->=–NÞpð–Ö~ +ïÉêS]Ú¨>ê Œ/•Q}%!Ej1«-soh™ˆ³Ý±@Ò:[N3$»“´Û—¥@ÃÕŸarïõÔB¾!Ÿïøi¬ºËœš_*çÆ-j”Nš5D6y,E×ö¤*5Ú ˆ…{ƒ†IùÈ1"Ÿzˆ`!Å!A‚œãÀÌ"s/yÙt\¿k1fÖ)HŠ"-ói”dBªeÌä®w‰3 +gaÊ0/g3R]nÚ ’£ž½B>²]-—÷ék=‡Ng~[4. +jŸ?GB=ÓfKNÆF6- ÑÂÏÑ"$õhD^0ûbÅhc&3ÕÄ¢=ÆOÐzéúʲúàŒla°6)Œž³yˆk:Ðs¼ƒi¨j¨h¦ûZ6ªÞЯÔÇâ ƒý$LÀ r¨«­ª…6iÂ$LƯ’;{ŽéO)’Ö[#è S¼ë{†P&“ ”ƒÂ8j êjQ³IêeÊÀIØrz3˜ZA©fA©fû%£N „“o) Þ@PýÿÕ*p¨É·}‰_²A»M2ðë7øLõZ‰|MÐ4D÷ ÷`Ê‘(ú•íïM/¼iÆ{±*D¼#lHÀ5–êµòœ7då® @¥e¿/<<öRjSñVá_Ü*F‚„ŸP(N$Ú•°¬,R  4‚4‰„ d%œ‘0Š6^±.ýT;Dñ¹Âsõ¹p‹[½M1ÁLÔ–]›â[¿4nWRc‡gÙ…F£Â'd›¿r“æ<ÙÓfðÛ•¿+7ƒ¡^nŸMäïËþ H;v<^ÝpÙ8L_a£ÈuÞ¦”}YÅPc_Ý& +)St¥t.>ª¬>X}¨æ´´æ¤©¥XQ’W™S­¤^î¾Cä›sª­ŠÁ~ÓUeùß”†V=¥^¾BÓdWHjìè ©á"Ót¼äü EMNMn™½ã‰kµ*úÚª{”çÙMäŠÐ£½¥–B‹p~Ù¢ÀlþºZqd_Ë–ʦèµ%Þô:M£Pñå‡&ï½ù;r¶1™¾Ä¿ÕQÓQV%å» ôZ±\IKIsQGQvw|£T]oy±ÜT`Hô—ÔHYÙu‡È¥²ñUÎý™>÷wúôï•ÓÏífû8ý2×kîïD ljv endstream endobj 140 0 obj <> endobj 376 0 obj <>stream +H‰bd`ab`dd”÷r ðvóÒö)MÎLI NÌ+©,H-/Ê,I-ÒuJ+ù!ÍøC„¥ûwß÷¿LXe–µò~ãÿž(¸òûJ!’*çü‚Ê¢ÌôŒdMCKKSÇ”ü¤T…àÊâ’ÔÜbϼäü¢‚ü¢Ä’Ô=Çœ… úb… ÔâÔ¢2 (Ä +™Å +‰ +E©é™@E©) +%E‰)©¹‰EÙ +ùi +N™é©9ùå +j +ù9¹©Åz @àÉÀÄÈÈäÌ· ì‡îwÉï•åŒ¾«~÷ø®Ê|A ȸ˶jþŽ=‡¤NLN–ÿ}(òý]ÂßìFa‘^Er­l?±~oý­ÊÎW9÷gúÜßéÓ¿WNÿ=·›íwâtö×\ßU¹{xø~¼0tuç endstream endobj 138 0 obj <> endobj 375 0 obj <>stream +H‰bd`ab`ddör ðvóÒöÍÌËÌÏÓuÊÏI +þfü!Âò[ãwŸ KõÏK¬² S:x¿GòÜðýªHQ½s~AeQfzF‰‚F²¦‚¡¥¥ˆ4RpLÉOJU®,.IÍ-VðÌKÎ/*È/J,IMÑSPpÌÉQé*VJ-N-*ŠB¬WÈ,VHT()JLIÍM,ÊVÈOÃg#'#3##‹UÑ÷¾ïŸ~F•3ÞºË|ëûbÑßÞ§~ë}WQ•›¿˜ÕäràwûïRߎ~·tY®|1ëoUŸßz¿½¥ º¾Þeþ¾¨ï»·Ïw½ß*åÊ‹Y9ýmÿÛAê·Cào{g¹ùŬßU>žú®÷¨¯fÖO¹Y¿K§w˜¶›í{ó¤?5ÓÙå8WŠÿçáÜÇõ»‡‡ ÀySŒ¦ endstream endobj 136 0 obj <> endobj 374 0 obj <>stream +H‰|TkTSW¾ Üxµ6Ž\3•ÜiNìØ5ãªu鴎ΪZiE) +AGäæA “\Ðò"!AЄg €€Hå!Ž:µZmµ¾;âšé¬vÍXÌœ8—Ö¹ÁþžuÖ:?öÙgŸïÛßw6 ‰e#,‹—¸cÏ®„Ä7’Š¤E2é›;•¢Ò¢üèÁêÁŠ¬Œ5,eÓ€¶ü÷ѳ)ôUq ¾ .ƒšåƒ¿Zd‹æ¶ËäZEQáa¥ð·ùk„6n\¿6ºÿN¸í,O,LÕ’J±„î”æËr™B¤Z'n+-¦Do‘Â1)V¨™è Â"R(*¢Cb‰HQ"”ü¿JÂbò> ÙÁB>b!I’Œ ©l$A¸ C„Ä ]¬7YOÙi1›b®Å®Œ £¯£Mè¿8V.÷†á‹luäía½&®onžÁKáÈï@U å&¼³£ã÷Q'P•¤°ÌHë=ÝVÐ9ˆ¶==Ú°’ª´X /mÐTX*‰Ýgï»S³hÖjþ;aM[óDÈãœ;}vlx +«çH¡–×ë?Zíµbåj}†‡*K +òÈ2LtH$Ñå¦öÁ^ûW—A×ÕPG‡ÃKmîæ/Á½f8 ºEþ! ëâÐ\<3÷ ðÆ9=–ê#X3_h‡ñpZ:,Z›¿æ]Agþˆž²š}aü€¬xŒÏyÞÇŽ@xëï¾4=BšuiôKÑË3% JWnRÙò®Yà~k¸"RGÞ¬Ñ@-ƒ#n`~|¿ÿ.£à?(Sœžú(<‡*¥ßB™pƒ²ü8E$oÊ-̉{öÿzã€,xr2ìnœ8{æÌ5ÌÂ!i MøÓB·ŽŽƒ½V S½«ÛÂ0eî= S°SÖzŸ0m%+¶½äªl ÷¡ûéZ1žÆ|:Þíìvoƒ›hí4|’›Kƒ<ÀµÓG DyeØØ[£‰“ÎZ!ø,ùkü«­í¼Ag¿¿KÐÛzÊ×NLžÈKY›´ë`¡4ôÀoQcó9¼Ý‰­ŸôßéöšSºP96&ï”JøÈOß<ð˜:‡S5…"°?¯lO×`þE½ «Tg¨äS^MH#À¿¦èØ´ÔìlþŽÇÅ3WáôI††¢@rçI¾ÙÙ`ó81|nëå“íÁ6¬+00ö%ß_ã75 f«ÙaÆð+[[ê;š{ººV2‰*£¤zs5ÆôjËœr‚ûÄ¡Ž€+Ç5Pµ|ÿÁäýª;øYø²—g›@¶½Ãï]è†l¸d’è¬-ɦ>–F›ÐtƒMqŠð0ZŸ[ÐZÕºÊâênøøyX~×ZèÔ”¾Ö¤©Š³·lÀê8#4`­c\kÚNVlÚ©EÝ n[7Ÿ[•Q•aȈçÒo9ÔÏÞˆþó·GþI¸”GÊ3ÅâÈ1W›@nä6cýcÑ";•ÚM@;ñs‘UóNts¥Gy‚ð}ijpáâŸéÅAáÌÓ™ê»ø|5Ê,Ù-LfKàŠI¢½zÙè^úš®o ƒ Ì^¸X*f˜©_`6Ô2ÛòÀ {(vVU•µF ÈÑlÙÿ‡ß`µœ¶oÑé&KŸœP~•š\4 ¸{­VlôF]¢1[ŸÏÝçPÃçß± ø2¦FRxŠY©éÑü¶“ÃL~vŠé T:•®ßÿ Ý2à½ÖúÏø¦_8؇…Û›mNÂÙTcrû§Ùis6:\6·ÍuÜSíÄ<¦ +—Š(Û¼>Ôqšþ‚N»Ì}J‚ûŽaÒŸ²î^~|)² ¼¹¹G÷ú¨ö¤!Pz"·³‡ßßèµêfÍä2{\nWC“¹ k5‹ÅDv–DE‚¬Ü£ù~æ„r¤X0VØH*ø% +©¬Ä–ŒN“Y«4éµ:~‰ùbY˜à +£Cù9ËJ!Ï‘Uwû..Çû¡.ã©•²”DUMÛY'¸›ÿcíìFéœøK£m[rùôCŽŒl4 3œ$zÝ\ÑrØOŒýíþH£ªQ5EÓèúÚ帋÷ã7"«" ¼4šD³iã´c7k Rw ÃG¯×V÷«ˆ¢½{2sS‹†Nû}M„ËBî·€z±ÞÕø6äL=º qÆ2ÓÝC³4Û¹š‰ž¿—ý]£X`Àìâ‡Õ­j•ŠT Œ½ŠH~€Ì”¦g’…̃ø \¬‡K ÿƸ:ï3—®tÃÿu7šçuîE‚ÖíÚWž/]Zrï%X±"²†÷?¤Í…ü endstream endobj 96 0 obj <>stream +H‰œWYsÛ8~÷¯à#¸2QÜM¥jrMÍÖQmìÔ,Ñ×å1¨Iüï·/€ %;3§D°Ùúüºû׫\Gð¡ó¨nòè±½úõWïVW¯ß΢µtÙuõúgxÝÚ«×+ýß ˆ«»+]FüÁ£)¢ºÈÒ*Z®®Õ/±ÎT?ÄI­ãZq±‰ uZ­;º¿®þ~•ñÑ=¯ÝñZŽÏùkNÇë"Õ|ü8>Sm'¹Vwp\P¨õÉ2¥ëù9ì:¡<˜‡8©T ¬L! ›œ´K<©Rf?2ÝÁÑ™’cp¬‘Kkõ[œèJu›®ßòç6ÎÕÝMVÔëoêçð°Ç÷̀² ìå{¼D¤ÛEÚÕ•úW.”¿ðWjT,N–ÊQU¯þ¦MtšG«`±É¬;XÉDö N,Õá¿÷Ñ`nA‰}­c]°‘Óõxã>rX [G÷±^®~²L¿‰Œµìtmðk®6š , "ŸZ›’œèêœ]‹°öskñúuœ”jÇœï3sI–ÖD°¾É2:ø÷Ô â¦HófÁ,×*âAÏ£]C1ž‘T¬<ìÀ@[Vãù·¨d‰Ö‹\i“äiU.• !0=‹cû B·Cá xúäÎç§Àl_Å%9 FÍ@ ΂}~ÝL’BÖNØ‚–[ý¬0 Õ·’©Ðsîr¤+ +¶ÖB$§Z𮲋êä69Ùq½³²îƒ¬vËfõŒPföÝÚ+‰Ô9L1• ˆ ¶ ­Šg²b¸SL'Ï#*‹yø@‰}I*V…v±¾@aŽqtèO)\è–b‰W&p'EµAŸ|¢J>]+á¼µ¦¨Ô´2Ú;ˆHoé&¨ž°óî$a½sÅéÀŠá‘Õ¹YL¶ÌÒË´^z×”„‡|V‰-ÍÛ>?˜þÍ›×?­‡“Ù¯ÚïÛO?}ʳ¬yûömôîÃûèJ‘E?þ– Ê´j<þ³ ¥j|ðÀr%@m·=Ž_ÎÔ€²œ6YÅL•ÆAáÌ/ˆ»?B Š=².¬ÖFH‚Wàã¢D[kuèú–¿Ã#wÌáýF×ayæõe¸¤OÓDǸ³üÜ·Öz¡zŸÈ'î¯Ð¨5B*+q^ª€í8ŠÂ× ny5ÆÃ$1Ï£Ëç%ŸÆÔ]õRÙ#?5—#z,]ߢ8 Ïu€K—ÿȉ®uòJb³ÎKÑ™×3Ž™gA._óŽxëFzßqÐîc‚¾„ B¿ :¿D.Cávð6ê«äôc»Î¬¥4g>!Ö²â€-¡™ÍÖÊ™5tžÖcº²8ýý\è$ áVëH½š£h†dhOòÆâš*ìMD³?|\YÍeÚb +ŠrxþyGzÙb\0`Wwdy¤õË(`‰GⶠêL9 ÀÜÒuóæ5†%52ºNË:¨î0w„é×8²´Øõ ô%Ž!—q©Åáî(ìþðò{@q‡¤¹{Rç`Ù˜ÁðÊ—£f>.EZ$™E,U^›ðûžç1?l »ƒl;zz…´³-/‡©K†;’@6í73‘(ÄIAš½¶s>M(PhÓùnŠÉx¨¤¸B¸Ò Üã´üb#ÞñíŸ"®ëÈM1Q·)ÜX‹¬Ó±¶‘–±).#Q‘KæÔ›=ÆE’«P ‡N—ëðˆ£I‰—M²Q„Í:‚ [•Ä-+Åï<Ì| ‚%5oEÉšÂS7‹ÌÒŠ¼H”:³’™…òn 2숺KS7P©nÃyÇÐïöd8Œz? 2|â9˜"Y˛٠}O^-Jqñ¡‘Ñ âTé4ÎÓx eªIe=Ö$Xƒ™@²í™ãéÂÁ¥úW<È8»ëiJÕGêüáíYå8%À9ëçs¸q®»¹¤û¸âÃò@#˦»ãYN ¦–Š]º4 J1ú+§‰Â‹•Ãë–2kdJ e[–FbIÖZÜÝ2õF½û¼¢|3E2y!Ü™â+X_Š+áât¡•H½~;ˆl“²°XL²…»¯Ùƒvç—ðÑÆZ}Ÿô˜½+*<ã±ñ¥VšážAÄV? +R`÷wÃú¹ Õࡼx6J]ŒÁ áÎïû/‘fbx§vÄù²ÒÏF!~òþ—<)œ¼Sç;¦¤ü1NZýøP©ÿüãe~.â¬ÿ¨2zfêë¸g»Ó±ñæ´smü¬,„ ¾yÜƹ+m…ëÿ9ùöwÉ›œ#§L¾9Í&ø€Wx0¦ØËÐqg ëéŒ0âBLvðzËåFkAÐäBŽÛEoý;™nb@Ø° Åþ @Ò­#ŠX¢t“ê&¥˜—èb"(Ãý†ã`q2PV€‚Œ‚ôsQelt½øÊÞ»ndÁÖ¹ÖÅ×óê’.oÔu-üøò3Ρ§¤¦Wr9LZïõ €1®>ªDVb ±„-ÖbìK_ ý~3˜ÓO|ˆx–ÀSÄÔÀÃÀ¯óÑi|¢tξ¦öÜÃB8üηâÏàó¿eóÁ× ö’Y¬Ñ÷³BBTr?<¥¾]â Ê)p‹Q£Qã°2öÚw¹ˆ9N8À;M `&Z^{á<éKf¬”µð,’ OqÇ 6^ÐrÂ1ÖÍœ.À•·0‘¦B"Å]û\vbë)Ë‚pº“Â$$ ôÖ¹Ms‘½¤7(¹ÏJëIÝEØ?RâÈÛ ™dK/‹©nâðX] Çyv½žI-S(<ûã ‹–CY¬u9ì:`ЀÓ"¼}ŠõrDÌ‚bwïvaaðû¹A–“gÕR²I²yÈRº@¬Héiè7¨ôìP MðÆP&ñ–Ùd!¢©J F‹ñ<¯|îç•·O(óìø9­ c“à Í£¥Ô¬’ô–ýå´M‡oCvåIÉ,Pœ—å`ÿñ´¥qf‡¯ïbW4¸³À"N÷\W_ñ„¡ƒÂ“ƒºÛN@ø`CO1wÅùR +ºQ©i””ùÕ4íæHc]cªP%GLÁŒ=Fg‚IƒÈúÚcDb±L(Ð,{¢—€ó4}“#j›>Î1.]ûH³ ÌÈ>˜1úÏ{Ã÷”{åtŒÑ¾bƒÕŽvàH<¶`~äO­™Îœ}±8ЭçÕn¶N(î +õ{b:³ÙðKt—ƒÊá`º€FÍxL-Ct›5ŠE™ÍÂ5Šk@‹M:f8ôˆ»yG˜diVD«õÿ©¯¶·$ú®¯èG é¾_ž±ìlàÝ œhâìƒv.ñÀ#%±f°ùü=ÕݤšEÓv0´Ù쪮®Ë©Slù5#œâô\)µ}j³Gíív»ˆf‘lA³l3ãšæˆi³¶¤Å°—ðS” JSE ¤}eeS€v<v(ö8²Úæ6- +"ߤcbШãÚåõöaK¿‡&+ 2UĨc¶´Åv Ê!©Ù%t¼¯í;ma¤Ö_}•.ûf%1ÚQ3L°šVßfS©Eé´üróŠýk¥AÖîþL+ÔÏwM…5ÃÙ§èV©Ö[ª'ŒÌ˜_ÖÙ»•`$ +y¤IÉ"ƒ 'àćbУ×m¹˜‚»Øíã}ü’¼K[FÜû·¸ã’¢1_.s¤›mÛ¤ì´KÈÇ8¦Q?­/âÚ( 8™ób)“áw·¿på@~ÒB;LľZI‘gƒÞ–ìÀÜJ«lýîãÄšžû1J« ƒ%&uÏv4ÆKí}HA+ +'N~Þï«Ä‚༒œgÑ»}D.):xœ®ú~V"ZŸÌ/¢ìïwWú8âãœvØÿ|K€÷xO¡ý¼lÜЖ´`ŽEŸ! _ŽyPK~M §Ãb>6l]Ée[ñmí»„äåk«LBÚÄñª¼tL™8m9·üEJEܬ†]Ãîm3q]g°K¯Œ§J¤Ið' OáD2?ÄçøEžðHm,…–R¦­MÊá±çȦÜ};ÙE]wé¸rr+f;|ɬ„ö´SÊ¡8q›4mékÞA½ ÊrÑFhˆgQ3<&Uœ7q—#ŠÉÐÐÝî·¸r“>¥®‡íÁ~HÏ.îìiúv•þ:õxWÒrk D®ÓKq»¶S÷Ì(IÕ×G5Ù‡…’Ò‰ÑþôsÛV½õÛ@ὑ*iε²èØ¿·CÊÝ!–À§E»LK‡]JK‘°Eõ÷Å89Ÿ?$׊s3¿iRé§Á-‚Z9Òb9(ð»1'Ž£‰ôÐãçœÆ=Ÿ•íKóZÓE-ØxmbßæöGÂQ:§ ÍEDíÁ¸»#g«.‰iCªÏNÂZ¢à(åCuDóèäO‡' n˜˜-ÐVvMàœ¼.jaüH³Ð¦ 3MÏ=̃Íb^W˜5¦ÉT-™úf kg“4æµ³”ùyx¡‡5³²}"ÖPñ6ä.ÓýÇÚ½âz ‚c-óyx¡×îgeûÄ” +sš‘±[p+c_-Ó +á™âƒ§N ›|×ÒÖtPÜ¿sýòöÝ˧s&Äm&O Î,:27µâ*Åk=/ßpTt}vÂ'í$~=+ÛÇ#ˆYR0‡Ñ!# è“2º6Î%–}1FdÎaŸiw£7 “§• +&—µMÙ}“ãÕçºÔ˜ÛÔ&¤.º„©)UCðŸ]‹LÀrE]Fê‚!ÃÆ÷KÝAÒ›û“pxÕñø•Ëùd9¥¹³ºÂD̶ª–A‡ÔbIÉóÏ3É£e‰0+©ÆÓK6 ¨8¥(µ4“ÓÎÃáâìy£‚Vó/>œ_Rv«gHQœ'|­5E XïÂÀÅ9ÉJ`¨”*Šz5 iRE©àkBÝVPÕ^ê(Fž===H­Çƒ°½öS)ÊŠ$ +¯ÎžT×9 1²OMu™ÑºKõ¤¢œÕ>œDQaîösÖÿÿ eØz6sµýÄó`m®©XTÏx<ýXŸìE£¬Ú'²È7/÷8TÔJ¨vm£@§ ධf'6hIIz›I]<5½Æ; {vöOlHÊ×Ê#l*X¨Häó5{CIÔÅ=áòz±üŽVe­ñÊã¹Æ°ŒÎJ`i o t&—ÐY+{ +³@ea“—CWø’ °ø óí  ØrGî–ˆyÀºñ©¨¼ðz¨s ôok3,Vu<#¼-}–“fÚqCë±q"€1£ö Rݙ霉DÐÍ—ˆhb©æ“÷rb÷GvK}†lHJÔ(ÇYcÎZ8Ø‚½JÒ§©ù û×p žÕúÀpVœVjÇúðÄÖ‡ -x^¶Ÿ´à ©®üh=‘õÃóT8;ÎÕö‰­×añ–F +Uçlì½¹ÇÆÆË‘bÔg¤Å +3Mý؉¸ü6·ß! 3å ýÐãaiÏc%_1 ]1ñb&?»ð-YÁjvY|ˆÞŠžJÜÅ·\…‘†FY¢&]¢ÝERƒE6çÅÙp6$129 «Z(Îöûy$~DÌdÓ•éµ¹‚qºGd¾iztÓLe›-Ù>stream + + + + + application/pdf + + + BSTdesign + + + + + Adobe Illustrator CS3 + 2008-04-27T19:25:19-04:00 + 2008-07-01T15:04:52-04:00 + 2008-07-01T15:04:52-04:00 + + + + 256 + 204 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAzAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FWL6pDNr/mObRJJZIdG0+3inv44XaJ7qa5ZxHCzoQ4ijSIs4UjmWUVoG BVeReTPNel+ZL/ybptvoNhouq6mtyddv9KiNncWjNaS3dibaSNq/v44ebLLzUjYg4Ve2+VtSvb3T ZI9QKtqNhPLZXsiLwR5IWoJVWp4iWMq/Gu1adsCpxirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVYx5r/Mfyx5amjsrmZ73WrigtdEsF+sX0pPTjCpqoP8 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 rsVdir//2Q== + + + + + + uuid:D604B9AA2016DD118D05AA6D720C964E + uuid:1f382f0a-0ae0-7240-90c9-052bfa9b93bb + + uuid:29342be3-7e33-de4c-b6a3-50180e31c442 + uuid:A55D623089FEDC11AC15B6426E08541E + + + + Document + + + 1 + False + False + + 15.000000 + 12.000000 + Picas + + + + + LucidaSansTypewriter + Lucida Sans Typewriter + Regular + Type 1 + 001.000 + False + LucidSanTyp; Lucida Sans Typewriter + + + Minion-BoldItalic + Minion + Bold Italic + Type 1 + 001.001 + False + MinioBolIta; Minion + + + + + + Black + Red 2 + + + + + + Default Swatch Group + 0 + + + + White + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 0.000000 + + + Black + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + Yellow + CMYK + PROCESS + 0.000000 + 0.000000 + 100.000000 + 0.000000 + + + Lime + CMYK + PROCESS + 33.000000 + 0.000000 + 72.999992 + 0.000000 + + + Night Blue + CMYK + PROCESS + 100.000000 + 50.000000 + 0.000000 + 0.000000 + + + Pigeon + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000002 + + + Red + SPOT + 100.000000 + CMYK + 0.000000 + 100.000000 + 0.000000 + 0.000000 + + + Red 2 + SPOT + 100.000000 + CMYK + 9.000000 + 82.000000 + 60.000004 + 14.999999 + + + + + + + + + + endstream endobj 91 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj 365 0 obj <>stream +H‰|• PSÙÆo€®º†šËÝ’\Í«»ëŽÖWKWíº*VðÓ 5fi-ÙXšíªjŒ¼2Ó20N}1:tçžp&p4 BT\‚âS}¶¶êÚ*Ìé°7v +l<·÷P¨*>V´sNb;,›¤—h8vZên‡í”r3>Ìù¤ `ƒQ`LD¡“[Þ¾©¼¸Ü<,¨}€>âVM¢¾Üiz º•Ë,døŒ#ff%ö]qûÑ݇w¿ÃJ¹™j”ª\§¶]£†ÁnèHlçÓñ ÀÐñt!±+ù@X¢(-)ÙCžäŽ€ÉTg²–›¥ÖâFrò¼t'ÅÄ1r¢™ë²-¾ÉvÐä¸öµ¦€‡ÑUèƒ×T:5•:kF“ ³^Ó«º¬V~ahÄþÔøÕçO„ðskaSÉÅÃŒ‰wyjìb~`?¹yÛ^Këc¥m)7V8ðþaVÓ¿ÉÒð;X€OÓé€iªXÌ+¶8J)ü‚P'x6ü5¿ÔŸÎ8­)Q–a¥*¥)“ôõŒŠ ö8Î k„›;¤£]MgE®æþ‘Ö>¬„«ý5º9Õ]K6=î»vƒbüa¡ŒN’(åØñ¸Ô¬\2Çhsö[¾jž š'šíVÌbµ›¬¤­îTž•*HP,3¤a¼gú˜½W¤èÖ~  h˜oü"½Ž>Là#áÛdk7R…Ü/á1ÚYQP—M–+´›¨ä>ÏÎ"£,Â/úþ´3Óÿ´ªB-ˆ­Lý”ì¹i¹MÍ\Ÿæ 'OtFŠðoÃÁ`a ~,EdÐkó3Èeã7Vªîo%澋Øùö‘.i³¤É(^¶þ°ž¼Âï>>?ÂBB«:JJU­ŸSx÷¤í¾sDÔ[_¦–¬vŽ£ð©Š\{^}f¯=S[#ìoþ$hG‚ô˜È_Ü;›…«=¼ü¨ëö-x,ßá ÄÌ >8,ž|†6—HSÆ©óX:gæè\„¾ø¿eË™÷P|Æ”“S”MîõMˆM](3Ÿ‹OÃÑv[ ËÙ©W4Søl•¾¾ÄbÆ,f»Í)l(Nn’»%‘*ò¨Ò?ãC,›kÊAyb–™TóAÈŸ~ KðYüù =qöqßø$¥kAÕò¸7ûªŒú3°¢cÖü®h2b{xp U#G ½Í•dYQvl.…?fŒh@†Cí"ñ'@¼ÜKN‰J’5¥v_hëêmÓ´H)ÞÌê³j`þ sQ5àƒëèÄ¿ªÔôœ2ÇPa˦tMÚ^m¿¶_×oh±VÕZ•ŽÊvÓù|Ì^è¨Ö+j“Ž„ + +ÉST'åqX!·–´‚ÐBì\婺LÒð¾B»áU°Šç‚%e£™ˆ(&¼ÒèÜú2WÅ媠²¿Üáraø¨m¯3 6;ØКÚF¶÷Uÿ~œâ1³ú%5·ÆaðÊd£üŸy‰}Ü7[ôù{?Õ Yu¬XÖ®kã”î,Ê=µ«èÕ14 úÒË_™Îoðúx±£üjˆbnŵ&ð¨lÁ¾~0Ý@Ú ÔÑs~†1:ÖOû›ŸÎaK°Dò_Ÿt³W ý£#º&…LWåéR¨ÝŽˆ?Öê ô†õTg )ñû©îf3YÎ’2P±ÌF}¨>4+TÀ›ÑÑاÁVö…=qý–«wºu£çé#á“Л«%á™Ê(‘¿Ôo-ã#ÜÚ±0¬€ ¢„YÂp²°B£±0‡ŒOøÖŽO»þ $Ûý˜”“Œ”ª¦i?÷ ûƒ¹÷I½wvø!ÅW÷X÷z÷´÷ø——Ž›­¼s?Üû6ûTsz˜”„èø`’c{Zjprcnl‚hx“i¤•¤“¤‘'ü‘ƒ`ƒL‚j÷¨—«YjŽŠ—“¶´£÷Ô„™‰™ٛз¼ÃÇϧ×Íà]Àûpf…ƒxu”v÷å÷ ö‹w÷÷˜÷føXcF\ROšoŸ¡°¤“‘‹€j„iû:€SST÷¦Ž²—њϨ™É ¯£¨£ž™•”™‡‚–È–‚•‹•’•’”“š¢”™‘¤›žr•ujWN4Z‰œÒ˜µ”…®nSË÷´÷MÉ×ÞÙä¸÷Ú÷8½^¯T©lœg¡§¨¢™¦¦©twØ’ƒ˜ˆž™¸™•—œ¬a£We_{gbZ`„bkLÅrµq½l–xvmqztoeŸ°i€—~x{zsŒsdÏo³ñðâä:”vø¹`¶Ñ÷ °÷²÷ˆŽqs]h~ˆ™«’Â÷›ê‘«³û «÷}™Ðû > endobj 364 0 obj <>stream +H‰$’oL[UÆÏéåž:§ [µ½5Ë–f¹M­àÈ`( MkÜd\Kµåâm¡vÿbÔOvCP3†¡èPF0†!Ž¹‘¹1¢câ1A6%sY?,—l!¾§;uñßç}ÎóüÞ÷Œ2Lc¼ª|Ç ¯l-q•7×ùë½5ÞÆÐöh“ÑüaEK÷%æÀìáŒoewïl³:þÁýðÚ +hÉì½S¶2-Ù[¬6E5¿¯!,¯©[+¯w»7É…õêE®‰†ÂJ0$—5Ö©Z“ªyÃJ}®,ruZ’«•¢µ§ÿçËþì•5Åç7.jJ½Ö¼õJЫ½%«oÈE~ŸP#òjy«*¡\dF¢ÇÑj´¹Ð:”‹Ö£ h#r£|d1D&$ Mè]ô%º€îb+Þãø¦ÉcúÈôÅòE x)«ŽàvvMh·Í‘iðŠ'ÓÜ+.KúDâV+ >-ò ±D/³ÛŸZØ™ä.kWÕKG*í}ªHÚ¶¥‘›×Øùss¼ÿ}áØÑçeóÁ†šæ2·ñÌìù<ù] øZ²Ä(ôQØOñ¢.,ÚXå Ðý”÷Ã~¸BSù$Í7Oa"‚©ݺ@m:ÌC7Ÿ×“>ŸàÝ0á2(»A1p]˜o³¾70~à¬ãÇÓýƒÒÔxûï@ìl'¿X ÁT©¹$–Ë3•æ{7;ô¤Á€u°m¡<‘”\éĤpë‰ë+G§žÍµM‘¬?’Â!3䤊Ä?IÖä° +ñп–Ù¤ßGøªTžø!áÙ,Oä÷,SøÞàÉÐá“2 æáirû\ßÀ˜tfèØÌÏvØÎ bn'¯%z±U'#@b|¹'RФ°ªì{ÖQ¹ä3I¡‡â„ê‚0\&¯x•OŠ°ŒðfHô6ï|äÄHçÙ!ûDà·{Ý;ëb•^œö=OÆcÜôŒ§€/“>stream +H‰¬WmsÛ6þ®_û^C†à›¤ŽÇ7¶·—I;™X~¨nn`Y²˜P”jRuÜ_ûE)içúb‘¸»Ø}öÙÝßG‰ð_¡1ž&âi9úUÔ£ëÙ(ø¯ŸG¯¸‹Åc3z=SÿÅ•Ùj¤rÞÍE’N¢DM31N¦Ñ8³Íè7ù~$rÕ†Õ2s©ë²~ƒ$–ðžÈ‡ð:(d¥A&?‹Y0åS0æ½eügöŽT)£*eU©H&q”áaO"eT} T!·’÷A˜‚Œd…j,[qGòHác€OJ>ÃV!ËEËÏžÄèQ¬Ü‘Qò‹iMóX±¢7AX ¸©Ü¡&j”láo,7°>‘u+¶p-‰›@¥r»Ùê} iàŠ'q·€íT–üÅ‚mDS’(Ërª(³Ð÷!˜ÐU&²´Ç@7JÚÖâ— U².áÀµX4þiJ6è…DÆQ\dß(òU 2)~~'âIže윈û¢÷ˆfQ# Tû,ÓTY +°îº +’DÞ7`ÎuN¥^´,õn§ë‹‹×W‹v¯«ÙòK{qûöö6‰ãôòòR\¿¹#)‚Ù§ÑÛŸàq† ï&¤?)¢´Ó?Ãû­—"ÈЯ,Â{ˆG¥ñ™P@û-†Öâ6[ óG¾¡Åú +1FoåfW!â6ø§nñ<"·îu¥ÁÇJ½´Ø,5iYJÖƒš›WA +Ø!áµÝÌdgʾ/òß_èñ‡`¿/ïuC¯ºæGi€A!:86ØxþòSCÀs.ÛuiR‰û«/d,Ü®Ã+ú1@ “Lãq±4›5¤f.Ÿù…¼·G»X>ßmÿ¯«í¶[ÞÛîŸøaAY„>ÞѶf/ãJ­+£«^=a6éÆx Ž‚th!9öìÞÈÙL”ž„YÖŠ §Íþ ~âDðsG³`&( qhB ý4-D‚¿âõ6˜Â±±üÒ¢‰ôÅwû¹¡} +þzšÚ5ÿ‚ó‚Žå2YÁà hÏw¨Z·Ú¨=í :àA³˜ ›S…­&ÏðQÆù0n öý¸À5Ò± ¨¦÷›ï¾3ø€—wX 4ö8&µÛù`®¼´&inëúî ýþd1ß·C.ƒß®1¶/ô²§ñýpÇËæ”ÝÂfÁÅStÖ”66MÔ ýmdøruBcUaä…tú^¢]Ï=x(Œ½¬À@6K~ì±Gσxbm<„Jy¥a¨ÄÍãt|@t„²ÅœPï6Œ”Gþát‚-FµY®ySkyel›CìDlL5, æzµ¯I%ÎùÆ”êÔÖË,Cµ—‘t·”;<h©ù—Z‹•¥emôÊs¾ŠÏù—:'¶Î‰=Ò_â7ûIŽå?·(ÒñÄZþƒƒÏxh]¦§Ý»jÔ< ¤Ðú/–у—¤H» ÇäÜÎql7Pý© ÂÖN;³ç5kÒ–5ÿÔÔ&ñseh‰ßˆÑá÷g5AqXÉÄ^·êhþRó3°@slˆ—D,y,ÍM†˜õ¤L!欮[çŒ.º½&ÀùîˆÿÕûÃâZ·ø»Yšr +A£ —úê@¥â°¨SAQGy¦zY¦˜Ö  |`CLÚ(Ù`?på…!¨+üÔ ¶-þŸðÍ@Îr .y sGY7^ ýz(8`Õ²i8¥„üeȵÝbBØ7Ðäï9úÚa|–aߥɆ³vß¾¨WöšÚ+Øâ›cœÓó͈/.»r /ÐDué–³5?žêùp/ Swþ©[ ³³Š +%YblP4â:) ˆè² ÐèžÐ÷çcWYcŸáø·0ŠÜ"æ^ƒn«hA-éÔ+ ˆãBâÿµ ncOZñiØßÝZÙÁ–áŽÂõîE—çÅ1‚ ¢¤ÂUa#Ux£×¸˜”Ç뢳¨íšþ’äêæû#ˆÁ´5æ]háÎ/öÔûUç ž#3PÅvr +c˜•`tùq~qq0.F,u“^G¯&Ò Kf.XãÆÓ‰»Mtƒe8Tc •BdAyÕ܈zípGÒhÅŸ<½ØÏï±{aIô×kèpl a~TGš%+6-­2]÷†z ítjt9U¤I6ÝyÞñsMŒÝÔ0T,–R§ßQU¦¾a&'œÉIÅã g;¤ñašÿF_•ugÁ@ØTô„çQVœ—ýÈY‹c¤I±®s3-  ²êÂBN”[Û›m鈫RPï£<+|ÏáL”7ao·ƒŸ]7ô¦"žùhC?°®!i»rqÐ6†¶Ó…‡Foø»£¸ÀÚJ7Ž®Ígµyàð +=¬ØæEQbU[³oX. •I„^7ø£ ¢ÉGá»ÛéúââõÕ¢Ýëj¶üÒ^ܾ½½ã«øòòR\¿¹#P +BÞþ^´Ó(™æg¢J;™Puü +4ÔÅdÒùÐ&×¾2Ý$CÔ¾8Ù‰ -¥iH´àæN.¿Kë.~ CWºæ°û&õ o5Øâv«lN©qUÞÊ5ôÀs0E €K`Ìåø'ÏT¸öþ )…ǹ_ +á½ÆbL(U¶ ¥wÕÇæí{µ>šäÖTV,pe¤A×FïœC5W.»x"ËÕAßÞ±[b2èOî@Pm¼Éë`\MŠ¯Œ1Iq|9QØ»c”ŽðüŒôÏ:vÄÉŸÞ’«GƒPëoóÎ|"X—eìúÎÄÕž7yÑó$]Žá˜Ø È2ùÊÝz«>t³.˜8Ô½ü‹vè‡w í®G œÜ %NX>J©î;ØfŸ¦OVµü•á‚\6k7RÂö߃¼× ˜†ýr$ØLþ€ ¦A ]Ù,<àœ-. ïXF>Îwh¾Í%jÑ’Xrä¾a,œ¼3žA”–ó8û•%(?&¶„x-áÛ‰Úþ×¾’[Ð!›hÑ%9¼$y¯Æ§“(g'hŸ EhÎ8¢;vÓÇ#ä•8ú†PBÙÃ)Ô4«}%Û,W]`š³ÝÏ·:æ~ªˆ&ÅÙëáBj¾i‡£x’Òó$)‚þLŒß€ºˆ ~Yä–;TÐÃ~ÃY·'çx(\#¬]¢@ÆjÓpË Ì¤ièÇ^­­¸3õѹÆÈ(µ3¨8Òb4½(±$¬;¸@Zdv­ti ³E û +ÅeÅ#ª:Ù@ÑÉlо²nºkÔË᲌ÌÉÈÉå­ôÛIEâ;ÃÚ‚‹*á.ž°ÁYñxZ½åžÄ±W8ŽÉ¹ðsºå'7à ²“HDVÝZ +†½cÆ…Åó” :*\žË÷ï?^Ÿ8‚­n¬½¬9¸H ‘ßoL9Šÿ£¾jzÛ‚è_1ÇXŠÀãk£¨·J©zÈ ƒk“bÔt±¢üû¾ùX 6Ê!=õ» »³³oÞ›ÁìQlÜZ¤AlljHpa +ŸWV›¡–;‹ß? h¿“ª¶ªÑ1¹ŽµƒÍk-s…¬¿©ü¶íþT»©ØN⃆B¦Y¨l¢}Ðgr_,®R_ò„J”Ö°ÔG­¯ìÄ6©e¶,]ï$!­$'^à÷ÉuT¶(¨Þ¨ܨuž|,°ª}ÉŸ>J“:ç÷YÜ5µÒîÌà»æHçƒ ¬Í©Öç{²†üè;»:3àš»Õ@ ôž„aœÖøÂ}FÄâå"Icµy¾qLÑ;f°fW +wöuNÔ/B²Kº¹íUß– +y:^$Iæ—˜í¯ËEž-:¸¥«Bªÿk/7ªñ]r—‹A«$“׋èºN˜¥Ñí¹G5~™hd­mUÔìtprÂn§F‡C}`S}lÏä{*|mŽ/£>M»O¼ƒÇõóˆ™0vïx@Õ´6iæÏpÝMÀÓ€•GÐom5áýï!ÃèTÉ‚sÙòT…$¢ë³Ç°Gž~-–¡mÁêsŽÂ…ÃäÝrr¼îÍ»ÔÔÛÂ>$½Àý=dîSkM͇§à1x®BJW eË„þì‚ÔãyD÷9>P~ÿ-Âã‚»¯˜Þ»àÈà¿€eÑ’Ê£¬rDÂùÐiœÈ8]ndÒ|½‰Í@^ÕÆfÙÌÏRÊG2Àl&ã9(S<Õ/Þˆ_Õ,ÇÉ"u>4çÿ§ƒ¿ _ / endstream endobj 65 0 obj <> endobj 66 0 obj <> endobj 363 0 obj <>stream +H‰\ÝjÄ …ï}Š¹Ü½XL, +([ +¹èMûF'©Ð¨LÌEÞ¾£»l¡*Ã9ßpyîŸúà3ÈwŠvÀ “ŽpY„gD«Ày›¯]½íb’ ûšqéÃ…Ö ?X\3ípxtqÄ£oä|˜áðuŽ ‡-¥\0dh ëÀáă^Lz5 ‚¬Ø©w¬û¼Ÿ˜ùs|î AÕ¾½„±ÑᚌE2aF¡®ô3W'0¸ººPãd¿ ýpÏ^Õ´w]!U!ëSÈ«§Ìà¯Â- Ýˆ8[ÝG Uâø€·•¥˜€©rįZÒqä endstream endobj 362 0 obj <>stream +H‰bd`ab`dd”õ õ +÷pÓöÍÌËÌÏÓ NÍÍLÊÏIñ,IÌÉL)Pþ!ÍøCŠ¥ž‡é·Òï¾_ß~žd•e`˜r˜÷{*ÿ÷ Áõß;…@Êêó *‹2Ó3J4’5 -- t@¤‘‚cJ~RªBpeqIjn±‚g^r~QA~QbIjŠž‚‚cNŽBHW±BPjqjQPâ…Ìb…D…’¢Ä”ÔÜÄ¢l…ü4|&1A>##‹Ì÷4¾ß#Ž3öý˜Â<ëûÑzÖlÓ³òÕÌú)7ëwõôïnsÏw³}ožô§f:»ÜçJñÿ<œ;¹>q÷ðð–½dï endstream endobj 349 0 obj <> endobj xref 0 407 0000000003 65535 f +0000000016 00000 n +0000024323 00000 n +0000000004 00001 f +0000000005 00000 f +0000000006 00001 f +0000000008 00001 f +0000024445 00000 n +0000000009 00001 f +0000000010 00001 f +0000000011 00001 f +0000000013 00001 f +0000138717 00000 n +0000000014 00001 f +0000000015 00001 f +0000000016 00001 f +0000000017 00001 f +0000000018 00001 f +0000000019 00001 f +0000000020 00001 f +0000000021 00001 f +0000000022 00001 f +0000000023 00001 f +0000000024 00001 f +0000000025 00001 f +0000000026 00001 f +0000000027 00001 f +0000000028 00001 f +0000000029 00001 f +0000000030 00001 f +0000000031 00001 f +0000000032 00001 f +0000000033 00001 f +0000000034 00001 f +0000000035 00001 f +0000000036 00001 f +0000000037 00001 f +0000000038 00001 f +0000000039 00001 f +0000000040 00001 f +0000000041 00001 f +0000000042 00001 f +0000000043 00001 f +0000000044 00001 f +0000000045 00001 f +0000000046 00001 f +0000000047 00001 f +0000000048 00001 f +0000000049 00001 f +0000000050 00001 f +0000000051 00001 f +0000000056 00001 f +0000165105 00000 n +0000182194 00000 n +0000164536 00000 n +0000187269 00000 n +0000000069 00001 f +0000165533 00000 n +0000174804 00000 n +0000195546 00000 n +0000561297 00000 n +0000573423 00000 n +0000573753 00000 n +0000573905 00000 n +0000574158 00000 n +0000810366 00000 n +0000810553 00000 n +0000195732 00000 n +0000138828 00000 n +0000000072 00001 f +0000806794 00000 n +0000024831 00000 n +0000000073 00001 f +0000000074 00001 f +0000000075 00001 f +0000000076 00001 f +0000000077 00001 f +0000000078 00001 f +0000000079 00001 f +0000000080 00001 f +0000000081 00001 f +0000000082 00001 f +0000000083 00001 f +0000000084 00001 f +0000000085 00001 f +0000000086 00001 f +0000000087 00001 f +0000000088 00001 f +0000000090 00001 f +0000773703 00000 n +0000000095 00001 f +0000801823 00000 n +0000805497 00000 n +0000802129 00000 n +0000802501 00000 n +0000000098 00001 f +0000767969 00000 n +0000025269 00000 n +0000000099 00001 f +0000000100 00001 f +0000000101 00001 f +0000000102 00001 f +0000000103 00001 f +0000000104 00001 f +0000000105 00001 f +0000000106 00001 f +0000000107 00001 f +0000000108 00001 f +0000000109 00001 f +0000000110 00001 f +0000000111 00001 f +0000000112 00001 f +0000000114 00001 f +0000712938 00000 n +0000000115 00001 f +0000000117 00001 f +0000687704 00000 n +0000000118 00001 f +0000000120 00001 f +0000668808 00000 n +0000000149 00001 f +0000600704 00000 n +0000610492 00000 n +0000740694 00000 n +0000751689 00000 n +0000741054 00000 n +0000748677 00000 n +0000741428 00000 n +0000748008 00000 n +0000741591 00000 n +0000747339 00000 n +0000741764 00000 n +0000744803 00000 n +0000742175 00000 n +0000742535 00000 n +0000738446 00000 n +0000765751 00000 n +0000738806 00000 n +0000765082 00000 n +0000738969 00000 n +0000764413 00000 n +0000739142 00000 n +0000761898 00000 n +0000739551 00000 n +0000759549 00000 n +0000739954 00000 n +0000756329 00000 n +0000740328 00000 n +0000753876 00000 n +0000000152 00001 f +0000660788 00000 n +0000025924 00000 n +0000000153 00001 f +0000000154 00001 f +0000000155 00001 f +0000000156 00001 f +0000000157 00001 f +0000000158 00001 f +0000000159 00001 f +0000000160 00001 f +0000000161 00001 f +0000000162 00001 f +0000000163 00001 f +0000000164 00001 f +0000000165 00001 f +0000000166 00001 f +0000000167 00001 f +0000000169 00001 f +0000626397 00000 n +0000000174 00001 f +0000655168 00000 n +0000658571 00000 n +0000655392 00000 n +0000655762 00000 n +0000000175 00001 f +0000000176 00001 f +0000000177 00001 f +0000000178 00001 f +0000000181 00001 f +0000620083 00000 n +0000026380 00000 n +0000000182 00001 f +0000000183 00001 f +0000000184 00001 f +0000000185 00001 f +0000000186 00001 f +0000000187 00001 f +0000000188 00001 f +0000000189 00001 f +0000000190 00001 f +0000000191 00001 f +0000000192 00001 f +0000000193 00001 f +0000000194 00001 f +0000000195 00001 f +0000000196 00001 f +0000000197 00001 f +0000000198 00001 f +0000000201 00001 f +0000601179 00000 n +0000605916 00000 n +0000000202 00001 f +0000000203 00001 f +0000000204 00001 f +0000000205 00001 f +0000000206 00001 f +0000000207 00001 f +0000000208 00001 f +0000000209 00001 f +0000000210 00001 f +0000000211 00001 f +0000000212 00001 f +0000000213 00001 f +0000000214 00001 f +0000000217 00001 f +0000618700 00000 n +0000026747 00000 n +0000000218 00001 f +0000000219 00001 f +0000000220 00001 f +0000000221 00001 f +0000000222 00001 f +0000000225 00001 f +0000614894 00000 n +0000027138 00000 n +0000000226 00001 f +0000000227 00001 f +0000000228 00001 f +0000000229 00001 f +0000000230 00001 f +0000000231 00001 f +0000000232 00001 f +0000000234 00001 f +0000577031 00000 n +0000000239 00001 f +0000601603 00000 n +0000603822 00000 n +0000601988 00000 n +0000602286 00000 n +0000000242 00001 f +0000574643 00000 n +0000027559 00000 n +0000000243 00001 f +0000000244 00001 f +0000000245 00001 f +0000000246 00001 f +0000000247 00001 f +0000000248 00001 f +0000000249 00001 f +0000000250 00001 f +0000000251 00001 f +0000000252 00001 f +0000000253 00001 f +0000000254 00001 f +0000000255 00001 f +0000000256 00001 f +0000000257 00001 f +0000000258 00001 f +0000000259 00001 f +0000000260 00001 f +0000000261 00001 f +0000000262 00001 f +0000000263 00001 f +0000000265 00001 f +0000526140 00000 n +0000000275 00001 f +0000561434 00000 n +0000572191 00000 n +0000572519 00000 n +0000572671 00000 n +0000572938 00000 n +0000561577 00000 n +0000568747 00000 n +0000561965 00000 n +0000565693 00000 n +0000000278 00001 f +0000562352 00000 n +0000562732 00000 n +0000000279 00001 f +0000000280 00001 f +0000000281 00001 f +0000000282 00001 f +0000000285 00001 f +0000506173 00000 n +0000028028 00000 n +0000000286 00001 f +0000000287 00001 f +0000000288 00001 f +0000000289 00001 f +0000000290 00001 f +0000000291 00001 f +0000000293 00001 f +0000457874 00000 n +0000000294 00001 f +0000000296 00001 f +0000427865 00000 n +0000000297 00001 f +0000000299 00001 f +0000396945 00000 n +0000000318 00001 f +0000483761 00000 n +0000499707 00000 n +0000484137 00000 n +0000496507 00000 n +0000484511 00000 n +0000494748 00000 n +0000484862 00000 n +0000492252 00000 n +0000485230 00000 n +0000491204 00000 n +0000485420 00000 n +0000488660 00000 n +0000485794 00000 n +0000486160 00000 n +0000483197 00000 n +0000505250 00000 n +0000483381 00000 n +0000502543 00000 n +0000000319 00001 f +0000000320 00001 f +0000000323 00001 f +0000195845 00000 n +0000028602 00000 n +0000000324 00001 f +0000000325 00001 f +0000000326 00001 f +0000000327 00001 f +0000000328 00001 f +0000000329 00001 f +0000000330 00001 f +0000000331 00001 f +0000000332 00001 f +0000000334 00001 f +0000138941 00000 n +0000000343 00001 f +0000166058 00000 n +0000172891 00000 n +0000166317 00000 n +0000169587 00000 n +0000166697 00000 n +0000168701 00000 n +0000166875 00000 n +0000167231 00000 n +0000000344 00001 f +0000000345 00001 f +0000000346 00001 f +0000000000 00001 f +0000029059 00000 n +0000000131 00000 n +0000811464 00000 n +0000182946 00000 n +0000188174 00000 n +0000175626 00000 n +0000565948 00000 n +0000183030 00000 n +0000182451 00000 n +0000574227 00000 n +0000573448 00000 n +0000188267 00000 n +0000187523 00000 n +0000175713 00000 n +0000175059 00000 n +0000811123 00000 n +0000810816 00000 n +0000805769 00000 n +0000802761 00000 n +0000611297 00000 n +0000610763 00000 n +0000751950 00000 n +0000748933 00000 n +0000748261 00000 n +0000747616 00000 n +0000745076 00000 n +0000742796 00000 n +0000766007 00000 n +0000765335 00000 n +0000764690 00000 n +0000762171 00000 n +0000759822 00000 n +0000756585 00000 n +0000754137 00000 n +0000658827 00000 n +0000656023 00000 n +0000606630 00000 n +0000606182 00000 n +0000604095 00000 n +0000602542 00000 n +0000573008 00000 n +0000572218 00000 n +0000569008 00000 n +0000566035 00000 n +0000562988 00000 n +0000499968 00000 n +0000496763 00000 n +0000495003 00000 n +0000492513 00000 n +0000491459 00000 n +0000488916 00000 n +0000486421 00000 n +0000505505 00000 n +0000502799 00000 n +0000173505 00000 n +0000173154 00000 n +0000169848 00000 n +0000168956 00000 n +0000167487 00000 n +0000000175 00000 n +trailer <]>> startxref 811639 %%EOF \ No newline at end of file diff --git a/vendor/github.com/petar/GoLLRB/doc/Sedgewick-RedBlackBST.java b/vendor/github.com/petar/GoLLRB/doc/Sedgewick-RedBlackBST.java new file mode 100644 index 000000000..55ac177f8 --- /dev/null +++ b/vendor/github.com/petar/GoLLRB/doc/Sedgewick-RedBlackBST.java @@ -0,0 +1,475 @@ +public class RedBlackBST, Value> +{ + private static final int BST = 0; + private static final int TD234 = 1; + private static final int BU23 = 2; + private static final boolean RED = true; + private static final boolean BLACK = false; + + private Node root; // root of the BST + private int k; // ordinal for drawing + private final int species; // species kind of tree for insert + private int heightBLACK; // black height of tree + + RedBlackBST(int species) + { this.species = species; } + + private class Node + { + Key key; // key + Value value; // associated data + Node left, right; // left and right subtrees + boolean color; // color of parent link + private int N; // number of nodes in tree rooted here + private int height; // height of tree rooted here + private double xc, yc; // for drawing + + Node(Key key, Value value) + { + this.key = key; + this.value = value; + this.color = RED; + this.N = 1; + this.height = 1; + } + } + + public int size() + { return size(root); } + + private int size(Node x) + { + if (x == null) return 0; + else return x.N; + } + + public int rootRank() + { + if (root == null) return 0; + else return size(root.left); + } + + public int height() + { return height(root); } + + public int heightB() + { return heightBLACK; } + + private int height(Node x) + { + if (x == null) return 0; + else return x.height; + } + + public boolean contains(Key key) + { return (get(key) != null); } + + public Value get(Key key) + { return get(root, key); } + + private Value get(Node x, Key key) + { + if (x == null) return null; + if (eq (key, x.key)) return x.value; + if (less(key, x.key)) return get(x.left, key); + else return get(x.right, key); + } + + public Key min() + { + if (root == null) return null; + else return min(root); + } + + private Key min(Node x) + { + if (x.left == null) return x.key; + else return min(x.left); + } + + public Key max() + { + if (root == null) return null; + else return max(root); + } + + private Key max(Node x) + { + if (x.right == null) return x.key; + else return max(x.right); + } + + public void put(Key key, Value value) + { + root = insert(root, key, value); + if (isRed(root)) heightBLACK++; + root.color = BLACK; + } + + private Node insert(Node h, Key key, Value value) + { + if (h == null) + return new Node(key, value); + + if (species == TD234) + if (isRed(h.left) && isRed(h.right)) + colorFlip(h); + + if (eq(key, h.key)) + h.value = value; + else if (less(key, h.key)) + h.left = insert(h.left, key, value); + else + h.right = insert(h.right, key, value); + + if (species == BST) return setN(h); + + if (isRed(h.right)) + h = rotateLeft(h); + + if (isRed(h.left) && isRed(h.left.left)) + h = rotateRight(h); + + if (species == BU23) + if (isRed(h.left) && isRed(h.right)) + colorFlip(h); + + return setN(h); + } + + public void deleteMin() + { + root = deleteMin(root); + root.color = BLACK; + } + + private Node deleteMin(Node h) + { + if (h.left == null) + return null; + + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + + h.left = deleteMin(h.left); + + return fixUp(h); + } + + public void deleteMax() + { + root = deleteMax(root); + root.color = BLACK; + } + + private Node deleteMax(Node h) + { + // if (h.right == null) + // { + // if (h.left != null) + // h.left.color = BLACK; + // return h.left; + // } + + if (isRed(h.left)) + h = rotateRight(h); + + if (h.right == null) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + h.right = deleteMax(h.right); + + return fixUp(h); + } + + public void delete(Key key) + { + root = delete(root, key); + root.color = BLACK; + } + + private Node delete(Node h, Key key) + { + if (less(key, h.key)) + { + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + h.left = delete(h.left, key); + } + else + { + if (isRed(h.left)) + h = rotateRight(h); + if (eq(key, h.key) && (h.right == null)) + return null; + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + if (eq(key, h.key)) + { + h.value = get(h.right, min(h.right)); + h.key = min(h.right); + h.right = deleteMin(h.right); + } + else h.right = delete(h.right, key); + } + + return fixUp(h); + } + +// Helper methods + + private boolean less(Key a, Key b) { return a.compareTo(b) < 0; } + private boolean eq (Key a, Key b) { return a.compareTo(b) == 0; } + + private boolean isRed(Node x) + { + if (x == null) return false; + return (x.color == RED); + } + + private void colorFlip(Node h) + { + h.color = !h.color; + h.left.color = !h.left.color; + h.right.color = !h.right.color; + } + + private Node rotateLeft(Node h) + { // Make a right-leaning 3-node lean to the left. + Node x = h.right; + h.right = x.left; + x.left = setN(h); + x.color = x.left.color; + x.left.color = RED; + return setN(x); + } + + private Node rotateRight(Node h) + { // Make a left-leaning 3-node lean to the right. + Node x = h.left; + h.left = x.right; + x.right = setN(h); + x.color = x.right.color; + x.right.color = RED; + return setN(x); + } + + private Node moveRedLeft(Node h) + { // Assuming that h is red and both h.left and h.left.left + // are black, make h.left or one of its children red. + colorFlip(h); + if (isRed(h.right.left)) + { + h.right = rotateRight(h.right); + h = rotateLeft(h); + colorFlip(h); + } + return h; + } + + private Node moveRedRight(Node h) + { // Assuming that h is red and both h.right and h.right.left + // are black, make h.right or one of its children red. + colorFlip(h); + if (isRed(h.left.left)) + { + h = rotateRight(h); + colorFlip(h); + } + return h; + } + + private Node fixUp(Node h) + { + if (isRed(h.right)) + h = rotateLeft(h); + + if (isRed(h.left) && isRed(h.left.left)) + h = rotateRight(h); + + if (isRed(h.left) && isRed(h.right)) + colorFlip(h); + + return setN(h); + } + + private Node setN(Node h) + { + h.N = size(h.left) + size(h.right) + 1; + if (height(h.left) > height(h.right)) h.height = height(h.left) + 1; + else h.height = height(h.right) + 1; + return h; + } + + public String toString() + { + if (root == null) return ""; + else return heightB() + " " + toString(root); + } + + public String toString(Node x) + { + String s = "("; + if (x.left == null) s += "("; else s += toString(x.left); + if (isRed(x)) s += "*"; + if (x.right == null) s += ")"; else s += toString(x.right); + return s + ")"; + } + +// Methods for tree drawing + + public void draw(double y, double lineWidth, double nodeSize) + { + k = 0; + setcoords(root, y); + StdDraw.setPenColor(StdDraw.BLACK); + StdDraw.setPenRadius(lineWidth); + drawlines(root); + StdDraw.setPenColor(StdDraw.WHITE); + drawnodes(root, nodeSize); + } + + public void setcoords(Node x, double d) + { + if (x == null) return; + setcoords(x.left, d-.04); + x.xc = (0.5 + k++)/size(); x.yc = d - .04; + setcoords(x.right, d-.04); + } + + public void drawlines(Node x) + { + if (x == null) return; + drawlines(x.left); + if (x.left != null) + { + if (x.left.color == RED) StdDraw.setPenColor(StdDraw.RED); + else StdDraw.setPenColor(StdDraw.BLACK); + StdDraw.line(x.xc, x.yc, x.left.xc, x.left.yc); + } + if (x.right != null) + { + if (x.right.color == RED) StdDraw.setPenColor(StdDraw.RED); + else StdDraw.setPenColor(StdDraw.BLACK); + StdDraw.line(x.xc, x.yc, x.right.xc, x.right.yc); + } + drawlines(x.right); + } + + public void drawnodes(Node x, double nodeSize) + { + if (x == null) return; + drawnodes(x.left, nodeSize); + StdDraw.filledCircle(x.xc, x.yc, nodeSize); + drawnodes(x.right, nodeSize); + } + + public void mark(Key key) + { + StdDraw.setPenColor(StdDraw.BLACK); + marknodes(key, root); + } + + public void marknodes(Key key, Node x) + { + if (x == null) return; + marknodes(key, x.left); + if (eq(key, x.key)) + StdDraw.filledCircle(x.xc, x.yc, .004); + marknodes(key, x.right); + } + + public int ipl() + { return ipl(root); } + + public int ipl(Node x) + { + if (x == null) return 0; + return size(x) - 1 + ipl(x.left) + ipl(x.right); + } + + public int sizeRed() + { return sizeRed(root); } + + public int sizeRed(Node x) + { + if (x == null) return 0; + if (isRed(x)) return 1 + sizeRed(x.left) + sizeRed(x.right); + else return sizeRed(x.left) + sizeRed(x.right); + } + +// Integrity checks + + public boolean check() + { // Is this tree a red-black tree? + return isBST() && is234() && isBalanced(); + } + + private boolean isBST() + { // Is this tree a BST? + return isBST(root, min(), max()); + } + + private boolean isBST(Node x, Key min, Key max) + { // Are all the values in the BST rooted at x between min and max, + // and does the same property hold for both subtrees? + if (x == null) return true; + if (less(x.key, min) || less(max, x.key)) return false; + return isBST(x.left, min, x.key) && isBST(x.right, x.key, max); + } + + private boolean is234() { return is234(root); } + private boolean is234(Node x) + { // Does the tree have no red right links, and at most two (left) + // red links in a row on any path? + if (x == null) return true; + if (isRed(x.right)) return false; + if (isRed(x)) + if (isRed(x.left)) + if (isRed(x.left.left)) return false; + return is234(x.left) && is234(x.right); + } + + private boolean isBalanced() + { // Do all paths from root to leaf have same number of black edges? + int black = 0; // number of black links on path from root to min + Node x = root; + while (x != null) + { + if (!isRed(x)) black++; + x = x.left; + } + return isBalanced(root, black); + } + + private boolean isBalanced(Node x, int black) + { // Does every path from the root to a leaf have the given number + // of black links? + if (x == null && black == 0) return true; + else if (x == null && black != 0) return false; + if (!isRed(x)) black--; + return isBalanced(x.left, black) && isBalanced(x.right, black); + } + + + public static void main(String[] args) + { + StdDraw.setPenRadius(.0025); + int species = Integer.parseInt(args[0]); + RedBlackBST st; + st = new RedBlackBST(species); + int[] a = { 3, 1, 4, 2, 5, 9, 6, 8, 7 }; + for (int i = 0; i < a.length; i++) + st.put(a[i], i); + StdOut.println(st); + StdDraw.clear(StdDraw.LIGHT_GRAY); + st.draw(.95, .0025, .008); + StdOut.println(st.min() + " " + st.max() + " " + st.check()); + StdOut.println(st.ipl()); + StdOut.println(st.heightB()); + } + +} diff --git a/vendor/github.com/petar/GoLLRB/doc/Sedgewick-Talk-Penn2008.pdf b/vendor/github.com/petar/GoLLRB/doc/Sedgewick-Talk-Penn2008.pdf new file mode 100644 index 0000000000000000000000000000000000000000..07861abedacbb8a39b6f8aedad0d95ea8c343ed3 GIT binary patch literal 11636171 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%0A!w4EurGF_YlryEfW!(S`e;^stHke{^ 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