[CRIU] [PATCHv3] Go-criu clean up

Andrei Vagin avagin at gmail.com
Thu Nov 1 19:49:03 MSK 2018


On Wed, Oct 31, 2018 at 09:36:11PM +0000, Radostin Stoyanov wrote:
> The Go bindings for CRIU and the P.Haul extension have been moved into
> a separate repository.
> 
> This patch removes the following from the criu-dev branch:
> 
> - lib/go/*
> - phaul/*
> - scripts/travis/phaul

I think we can add README files into lib/go and phaul which will say
where are these libraries now.

> 
> The removed files are available in
> 
> https://github.com/checkpoint-restore/go-criu
> 
> Signed-off-by: Radostin Stoyanov <rstoyanov1 at gmail.com>
> ---
>  .travis.yml                                   |    1 -
>  Makefile                                      |    4 -
>  README.md                                     |    4 +-
>  lib/go/.gitignore                             |    0
>  lib/go/Makefile                               |    8 -
>  lib/go/src/criu/main.go                       |  199 -
>  lib/go/src/criu/notify.go                     |   52 -
>  lib/go/src/rpc/rpc.pb.go                      | 1203 -----
>  lib/go/src/test/main.go                       |  114 -
>  phaul/.gitignore                              |    0
>  phaul/Makefile                                |   17 -
>  phaul/piggie.c                                |   57 -
>  phaul/src/phaul/api.go                        |   52 -
>  phaul/src/phaul/client.go                     |  131 -
>  phaul/src/phaul/images.go                     |   41 -
>  phaul/src/phaul/server.go                     |  103 -
>  phaul/src/phaul/stats.go                      |   32 -
>  phaul/src/stats/stats.pb.go                   |  222 -
>  phaul/src/test/Makefile                       |    2 -
>  phaul/src/test/main.go                        |  192 -
>  .../vendor/github.com/checkpoint-restore/criu |    1 -
>  .../github.com/golang/protobuf/.gitignore     |   16 -
>  .../github.com/golang/protobuf/.travis.yml    |   18 -
>  .../vendor/github.com/golang/protobuf/AUTHORS |    3 -
>  .../github.com/golang/protobuf/CONTRIBUTORS   |    3 -
>  .../vendor/github.com/golang/protobuf/LICENSE |   31 -
>  .../github.com/golang/protobuf/Make.protobuf  |   40 -
>  .../github.com/golang/protobuf/Makefile       |   55 -
>  .../github.com/golang/protobuf/README.md      |  243 -
>  .../golang/protobuf/_conformance/Makefile     |   33 -
>  .../protobuf/_conformance/conformance.go      |  161 -
>  .../conformance_proto/conformance.pb.go       | 1885 --------
>  .../conformance_proto/conformance.proto       |  285 --
>  .../golang/protobuf/descriptor/descriptor.go  |   93 -
>  .../protobuf/descriptor/descriptor_test.go    |   32 -
>  .../golang/protobuf/jsonpb/jsonpb.go          | 1082 -----
>  .../golang/protobuf/jsonpb/jsonpb_test.go     |  848 ----
>  .../jsonpb/jsonpb_test_proto/Makefile         |   33 -
>  .../jsonpb_test_proto/more_test_objects.pb.go |  266 --
>  .../jsonpb_test_proto/more_test_objects.proto |   69 -
>  .../jsonpb_test_proto/test_objects.pb.go      |  852 ----
>  .../jsonpb_test_proto/test_objects.proto      |  147 -
>  .../github.com/golang/protobuf/proto/Makefile |   43 -
>  .../golang/protobuf/proto/all_test.go         | 2278 ---------
>  .../golang/protobuf/proto/any_test.go         |  300 --
>  .../github.com/golang/protobuf/proto/clone.go |  229 -
>  .../golang/protobuf/proto/clone_test.go       |  300 --
>  .../golang/protobuf/proto/decode.go           |  970 ----
>  .../golang/protobuf/proto/decode_test.go      |  258 -
>  .../golang/protobuf/proto/encode.go           | 1362 ------
>  .../golang/protobuf/proto/encode_test.go      |   85 -
>  .../github.com/golang/protobuf/proto/equal.go |  300 --
>  .../golang/protobuf/proto/equal_test.go       |  224 -
>  .../golang/protobuf/proto/extensions.go       |  587 ---
>  .../golang/protobuf/proto/extensions_test.go  |  536 ---
>  .../github.com/golang/protobuf/proto/lib.go   |  897 ----
>  .../golang/protobuf/proto/map_test.go         |   46 -
>  .../golang/protobuf/proto/message_set.go      |  311 --
>  .../golang/protobuf/proto/message_set_test.go |   66 -
>  .../golang/protobuf/proto/pointer_reflect.go  |  484 --
>  .../golang/protobuf/proto/pointer_unsafe.go   |  270 --
>  .../golang/protobuf/proto/properties.go       |  872 ----
>  .../protobuf/proto/proto3_proto/proto3.pb.go  |  347 --
>  .../protobuf/proto/proto3_proto/proto3.proto  |   87 -
>  .../golang/protobuf/proto/proto3_test.go      |  135 -
>  .../golang/protobuf/proto/size2_test.go       |   63 -
>  .../golang/protobuf/proto/size_test.go        |  164 -
>  .../golang/protobuf/proto/testdata/Makefile   |   50 -
>  .../protobuf/proto/testdata/golden_test.go    |   86 -
>  .../golang/protobuf/proto/testdata/test.pb.go | 4147 -----------------
>  .../golang/protobuf/proto/testdata/test.proto |  548 ---
>  .../github.com/golang/protobuf/proto/text.go  |  854 ----
>  .../golang/protobuf/proto/text_parser.go      |  895 ----
>  .../golang/protobuf/proto/text_parser_test.go |  673 ---
>  .../golang/protobuf/proto/text_test.go        |  474 --
>  .../golang/protobuf/protoc-gen-go/Makefile    |   33 -
>  .../protoc-gen-go/descriptor/Makefile         |   37 -
>  .../protoc-gen-go/descriptor/descriptor.pb.go | 2174 ---------
>  .../protoc-gen-go/descriptor/descriptor.proto |  837 ----
>  .../golang/protobuf/protoc-gen-go/doc.go      |   51 -
>  .../protobuf/protoc-gen-go/generator/Makefile |   40 -
>  .../protoc-gen-go/generator/generator.go      | 2805 -----------
>  .../protoc-gen-go/generator/name_test.go      |   85 -
>  .../protobuf/protoc-gen-go/grpc/grpc.go       |  463 --
>  .../protobuf/protoc-gen-go/link_grpc.go       |   34 -
>  .../golang/protobuf/protoc-gen-go/main.go     |   98 -
>  .../protobuf/protoc-gen-go/plugin/Makefile    |   45 -
>  .../protoc-gen-go/plugin/plugin.pb.go         |  293 --
>  .../protoc-gen-go/plugin/plugin.pb.golden     |   83 -
>  .../protoc-gen-go/plugin/plugin.proto         |  166 -
>  .../protobuf/protoc-gen-go/testdata/Makefile  |   73 -
>  .../testdata/extension_base.proto             |   46 -
>  .../testdata/extension_extra.proto            |   38 -
>  .../protoc-gen-go/testdata/extension_test.go  |  210 -
>  .../testdata/extension_user.proto             |  100 -
>  .../protoc-gen-go/testdata/grpc.proto         |   59 -
>  .../protoc-gen-go/testdata/imp.pb.go.golden   |  113 -
>  .../protobuf/protoc-gen-go/testdata/imp.proto |   70 -
>  .../protoc-gen-go/testdata/imp2.proto         |   43 -
>  .../protoc-gen-go/testdata/imp3.proto         |   38 -
>  .../protoc-gen-go/testdata/main_test.go       |   46 -
>  .../protoc-gen-go/testdata/multi/multi1.proto |   44 -
>  .../protoc-gen-go/testdata/multi/multi2.proto |   46 -
>  .../protoc-gen-go/testdata/multi/multi3.proto |   43 -
>  .../protoc-gen-go/testdata/my_test/test.pb.go |  870 ----
>  .../testdata/my_test/test.pb.go.golden        |  870 ----
>  .../protoc-gen-go/testdata/my_test/test.proto |  156 -
>  .../protoc-gen-go/testdata/proto3.proto       |   53 -
>  .../github.com/golang/protobuf/ptypes/any.go  |  139 -
>  .../golang/protobuf/ptypes/any/any.pb.go      |  168 -
>  .../golang/protobuf/ptypes/any/any.proto      |  139 -
>  .../golang/protobuf/ptypes/any_test.go        |  113 -
>  .../github.com/golang/protobuf/ptypes/doc.go  |   35 -
>  .../golang/protobuf/ptypes/duration.go        |  102 -
>  .../protobuf/ptypes/duration/duration.pb.go   |  144 -
>  .../protobuf/ptypes/duration/duration.proto   |  117 -
>  .../golang/protobuf/ptypes/duration_test.go   |  121 -
>  .../golang/protobuf/ptypes/empty/empty.pb.go  |   66 -
>  .../golang/protobuf/ptypes/empty/empty.proto  |   52 -
>  .../golang/protobuf/ptypes/regen.sh           |   43 -
>  .../protobuf/ptypes/struct/struct.pb.go       |  380 --
>  .../protobuf/ptypes/struct/struct.proto       |   96 -
>  .../golang/protobuf/ptypes/timestamp.go       |  134 -
>  .../protobuf/ptypes/timestamp/timestamp.pb.go |  160 -
>  .../protobuf/ptypes/timestamp/timestamp.proto |  133 -
>  .../golang/protobuf/ptypes/timestamp_test.go  |  153 -
>  .../protobuf/ptypes/wrappers/wrappers.pb.go   |  260 --
>  .../protobuf/ptypes/wrappers/wrappers.proto   |  118 -
>  phaul/test.sh                                 |    7 -
>  scripts/travis/Makefile                       |    8 +-
>  scripts/travis/phaul                          |   12 -
>  131 files changed, 4 insertions(+), 40429 deletions(-)
>  delete mode 100644 lib/go/.gitignore
>  delete mode 100644 lib/go/Makefile
>  delete mode 100644 lib/go/src/criu/main.go
>  delete mode 100644 lib/go/src/criu/notify.go
>  delete mode 100644 lib/go/src/rpc/rpc.pb.go
>  delete mode 100644 lib/go/src/test/main.go
>  delete mode 100644 phaul/.gitignore
>  delete mode 100644 phaul/Makefile
>  delete mode 100644 phaul/piggie.c
>  delete mode 100644 phaul/src/phaul/api.go
>  delete mode 100644 phaul/src/phaul/client.go
>  delete mode 100644 phaul/src/phaul/images.go
>  delete mode 100644 phaul/src/phaul/server.go
>  delete mode 100644 phaul/src/phaul/stats.go
>  delete mode 100644 phaul/src/stats/stats.pb.go
>  delete mode 100644 phaul/src/test/Makefile
>  delete mode 100644 phaul/src/test/main.go
>  delete mode 120000 phaul/src/test/vendor/github.com/checkpoint-restore/criu
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/.gitignore
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/.travis.yml
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/AUTHORS
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/CONTRIBUTORS
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/LICENSE
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/Make.protobuf
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/Makefile
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/README.md
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/_conformance/Makefile
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/descriptor/descriptor.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/Makefile
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/Makefile
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/all_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/any_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/clone.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/clone_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/decode.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/decode_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/encode.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/encode_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/equal.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/equal_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/extensions.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/extensions_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/lib.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/map_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/message_set.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/message_set_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/pointer_reflect.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/properties.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/size2_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/size_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/Makefile
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/golden_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/test.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/test.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/text.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/text_parser.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/text_parser_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/proto/text_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/Makefile
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/doc.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/Makefile
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/link_grpc.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/main.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.golden
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/grpc.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.pb.go.golden
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp2.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp3.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/main_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/proto3.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any/any.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/doc.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/empty/empty.proto
>  delete mode 100755 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/regen.sh
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/struct/struct.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go
>  delete mode 100644 phaul/src/test/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.proto
>  delete mode 100755 phaul/test.sh
>  delete mode 100755 scripts/travis/phaul
> 
> diff --git a/.travis.yml b/.travis.yml
> index cfcc1fb1..7e47b5a9 100644
> --- a/.travis.yml
> +++ b/.travis.yml
> @@ -23,7 +23,6 @@ env:
>    - TR_ARCH=fedora-rawhide
>    - TR_ARCH=fedora-rawhide-aarch64
>    - TR_ARCH=centos
> -  - TR_ARCH=phaul-test
>  matrix:
>    allow_failures:
>      - env: TR_ARCH=docker-test
> diff --git a/Makefile b/Makefile
> index 596d8f3a..38887da9 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -350,10 +350,6 @@ docker-build:
>  	$(MAKE) -C scripts/build/ x86_64 
>  .PHONY: docker-build
>  
> -phaul-test:
> -	docker run --rm -it --privileged criu-x86_64 ./scripts/travis/phaul
> -.PHONY: phaul-test
> -
>  docker-test:
>  	docker run --rm -it --privileged criu-x86_64 ./test/zdtm.py run -a -x tcp6 -x tcpbuf6 -x static/rtc -x cgroup
>  .PHONY: docker-test
> diff --git a/README.md b/README.md
> index abfec1dc..e2896460 100644
> --- a/README.md
> +++ b/README.md
> @@ -39,7 +39,9 @@ injection and libsoccr for TCP connections checkpoint-restore.
>  
>  True [live migration](https://criu.org/Live_migration) using CRIU is possible, but doing
>  all the steps by hands might be complicated. The [phaul sub-project](https://criu.org/P.Haul)
> -provides a Go library that encapsulates most of the complexity.
> +provides a Go library that encapsulates most of the complexity. This library and the Go bindings
> +for CRIU are stored in the [go-criu](https://github.com/checkpoint-restore/go-criu) repository.
> +
>  
>  ### Parasite code injection
>  
> diff --git a/lib/go/.gitignore b/lib/go/.gitignore
> deleted file mode 100644
> index e69de29b..00000000
> diff --git a/lib/go/Makefile b/lib/go/Makefile
> deleted file mode 100644
> index c8551d60..00000000
> --- a/lib/go/Makefile
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -all: test
> -
> -test: rpc
> -	GOPATH=$(shell pwd):/usr/share/gocode go build -o test test
> -
> -rpc:
> -	mkdir -p src/rpc/
> -	protoc --go_out=src/rpc/ --proto_path=../../images/ ../../images/rpc.proto
> diff --git a/lib/go/src/criu/main.go b/lib/go/src/criu/main.go
> deleted file mode 100644
> index 96905111..00000000
> --- a/lib/go/src/criu/main.go
> +++ /dev/null
> @@ -1,199 +0,0 @@
> -package criu
> -
> -import (
> -	"errors"
> -	"fmt"
> -	"os"
> -	"os/exec"
> -	"strconv"
> -	"syscall"
> -
> -	"github.com/golang/protobuf/proto"
> -	"github.com/checkpoint-restore/criu/lib/go/src/rpc"
> -)
> -
> -type Criu struct {
> -	swrk_cmd *exec.Cmd
> -	swrk_sk  *os.File
> -}
> -
> -func MakeCriu() *Criu {
> -	return &Criu{}
> -}
> -
> -func (c *Criu) Prepare() error {
> -	fds, err := syscall.Socketpair(syscall.AF_LOCAL, syscall.SOCK_SEQPACKET, 0)
> -	if err != nil {
> -		return err
> -	}
> -
> -	cln := os.NewFile(uintptr(fds[0]), "criu-xprt-cln")
> -	syscall.CloseOnExec(fds[0])
> -	srv := os.NewFile(uintptr(fds[1]), "criu-xprt-srv")
> -	defer srv.Close()
> -
> -	args := []string{"swrk", strconv.Itoa(fds[1])}
> -	cmd := exec.Command("criu", args...)
> -
> -	err = cmd.Start()
> -	if err != nil {
> -		cln.Close()
> -		return err
> -	}
> -
> -	c.swrk_cmd = cmd
> -	c.swrk_sk = cln
> -
> -	return nil
> -}
> -
> -func (c *Criu) Cleanup() {
> -	if c.swrk_cmd != nil {
> -		c.swrk_sk.Close()
> -		c.swrk_sk = nil
> -		c.swrk_cmd.Wait()
> -		c.swrk_cmd = nil
> -	}
> -}
> -
> -func (c *Criu) sendAndRecv(req_b []byte) ([]byte, int, error) {
> -	cln := c.swrk_sk
> -	_, err := cln.Write(req_b)
> -	if err != nil {
> -		return nil, 0, err
> -	}
> -
> -	resp_b := make([]byte, 2*4096)
> -	n, err := cln.Read(resp_b)
> -	if err != nil {
> -		return nil, 0, err
> -	}
> -
> -	return resp_b, n, nil
> -}
> -
> -func (c *Criu) doSwrk(req_type rpc.CriuReqType, opts *rpc.CriuOpts, nfy CriuNotify) error {
> -	resp, err := c.doSwrkWithResp(req_type, opts, nfy)
> -	if err != nil {
> -		return err
> -	}
> -	resp_type := resp.GetType()
> -	if resp_type != req_type {
> -		return errors.New("unexpected responce")
> -	}
> -
> -	return nil
> -}
> -
> -func (c *Criu) doSwrkWithResp(req_type rpc.CriuReqType, opts *rpc.CriuOpts, nfy CriuNotify) (*rpc.CriuResp, error) {
> -	var resp *rpc.CriuResp
> -
> -	req := rpc.CriuReq{
> -		Type: &req_type,
> -		Opts: opts,
> -	}
> -
> -	if nfy != nil {
> -		opts.NotifyScripts = proto.Bool(true)
> -	}
> -
> -	if c.swrk_cmd == nil {
> -		err := c.Prepare()
> -		if err != nil {
> -			return nil, err
> -		}
> -
> -		defer c.Cleanup()
> -	}
> -
> -	for {
> -		req_b, err := proto.Marshal(&req)
> -		if err != nil {
> -			return nil, err
> -		}
> -
> -		resp_b, resp_s, err := c.sendAndRecv(req_b)
> -		if err != nil {
> -			return nil, err
> -		}
> -
> -		resp = &rpc.CriuResp{}
> -		err = proto.Unmarshal(resp_b[:resp_s], resp)
> -		if err != nil {
> -			return nil, err
> -		}
> -
> -		if !resp.GetSuccess() {
> -			return resp, fmt.Errorf("operation failed (msg:%s err:%d)",
> -				resp.GetCrErrmsg(), resp.GetCrErrno())
> -		}
> -
> -		resp_type := resp.GetType()
> -		if resp_type != rpc.CriuReqType_NOTIFY {
> -			break
> -		}
> -		if nfy == nil {
> -			return resp, errors.New("unexpected notify")
> -		}
> -
> -		notify := resp.GetNotify()
> -		switch notify.GetScript() {
> -		case "pre-dump":
> -			err = nfy.PreDump()
> -		case "post-dump":
> -			err = nfy.PostDump()
> -		case "pre-restore":
> -			err = nfy.PreRestore()
> -		case "post-restore":
> -			err = nfy.PostRestore(notify.GetPid())
> -		case "network-lock":
> -			err = nfy.NetworkLock()
> -		case "network-unlock":
> -			err = nfy.NetworkUnlock()
> -		case "setup-namespaces":
> -			err = nfy.SetupNamespaces(notify.GetPid())
> -		case "post-setup-namespaces":
> -			err = nfy.PostSetupNamespaces()
> -		case "post-resume":
> -			err = nfy.PostResume()
> -		default:
> -			err = nil
> -		}
> -
> -		if err != nil {
> -			return resp, err
> -		}
> -
> -		req = rpc.CriuReq{
> -			Type:          &resp_type,
> -			NotifySuccess: proto.Bool(true),
> -		}
> -	}
> -
> -	return resp, nil
> -}
> -
> -func (c *Criu) Dump(opts rpc.CriuOpts, nfy CriuNotify) error {
> -	return c.doSwrk(rpc.CriuReqType_DUMP, &opts, nfy)
> -}
> -
> -func (c *Criu) Restore(opts rpc.CriuOpts, nfy CriuNotify) error {
> -	return c.doSwrk(rpc.CriuReqType_RESTORE, &opts, nfy)
> -}
> -
> -func (c *Criu) PreDump(opts rpc.CriuOpts, nfy CriuNotify) error {
> -	return c.doSwrk(rpc.CriuReqType_PRE_DUMP, &opts, nfy)
> -}
> -
> -func (c *Criu) StartPageServer(opts rpc.CriuOpts) error {
> -	return c.doSwrk(rpc.CriuReqType_PAGE_SERVER, &opts, nil)
> -}
> -
> -func (c *Criu) StartPageServerChld(opts rpc.CriuOpts) (int, int, error) {
> -	resp, err := c.doSwrkWithResp(rpc.CriuReqType_PAGE_SERVER_CHLD, &opts, nil)
> -	if err != nil {
> -		return 0, 0, err
> -	}
> -
> -	return int(resp.Ps.GetPid()), int(resp.Ps.GetPort()), nil
> -}
> diff --git a/lib/go/src/criu/notify.go b/lib/go/src/criu/notify.go
> deleted file mode 100644
> index 8ce16b7f..00000000
> --- a/lib/go/src/criu/notify.go
> +++ /dev/null
> @@ -1,52 +0,0 @@
> -package criu
> -
> -type CriuNotify interface {
> -	PreDump() error
> -	PostDump() error
> -	PreRestore() error
> -	PostRestore(pid int32) error
> -	NetworkLock() error
> -	NetworkUnlock() error
> -	SetupNamespaces(pid int32) error
> -	PostSetupNamespaces() error
> -	PostResume() error
> -}
> -
> -type CriuNoNotify struct {
> -}
> -
> -func (c CriuNoNotify) PreDump() error {
> -	return nil
> -}
> -
> -func (c CriuNoNotify) PostDump() error {
> -	return nil
> -}
> -
> -func (c CriuNoNotify) PreRestore() error {
> -	return nil
> -}
> -
> -func (c CriuNoNotify) PostRestore(pid int32) error {
> -	return nil
> -}
> -
> -func (c CriuNoNotify) NetworkLock() error {
> -	return nil
> -}
> -
> -func (c CriuNoNotify) NetworkUnlock() error {
> -	return nil
> -}
> -
> -func (c CriuNoNotify) SetupNamespaces(pid int32) error {
> -	return nil
> -}
> -
> -func (c CriuNoNotify) PostSetupNamespaces() error {
> -	return nil
> -}
> -
> -func (c CriuNoNotify) PostResume() error {
> -	return nil
> -}
> diff --git a/lib/go/src/rpc/rpc.pb.go b/lib/go/src/rpc/rpc.pb.go
> deleted file mode 100644
> index e9d1f804..00000000
> --- a/lib/go/src/rpc/rpc.pb.go
> +++ /dev/null
> @@ -1,1203 +0,0 @@
> -// Code generated by protoc-gen-go.
> -// source: rpc.proto
> -// DO NOT EDIT!
> -
> -/*
> -Package rpc is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	rpc.proto
> -
> -It has these top-level messages:
> -	CriuPageServerInfo
> -	CriuVethPair
> -	ExtMountMap
> -	JoinNamespace
> -	InheritFd
> -	CgroupRoot
> -	UnixSk
> -	CriuOpts
> -	CriuDumpResp
> -	CriuRestoreResp
> -	CriuNotify
> -	CriuFeatures
> -	CriuReq
> -	CriuResp
> -	CriuVersion
> -*/
> -package rpc
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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 CriuCgMode int32
> -
> -const (
> -	CriuCgMode_IGNORE  CriuCgMode = 0
> -	CriuCgMode_CG_NONE CriuCgMode = 1
> -	CriuCgMode_PROPS   CriuCgMode = 2
> -	CriuCgMode_SOFT    CriuCgMode = 3
> -	CriuCgMode_FULL    CriuCgMode = 4
> -	CriuCgMode_STRICT  CriuCgMode = 5
> -	CriuCgMode_DEFAULT CriuCgMode = 6
> -)
> -
> -var CriuCgMode_name = map[int32]string{
> -	0: "IGNORE",
> -	1: "CG_NONE",
> -	2: "PROPS",
> -	3: "SOFT",
> -	4: "FULL",
> -	5: "STRICT",
> -	6: "DEFAULT",
> -}
> -var CriuCgMode_value = map[string]int32{
> -	"IGNORE":  0,
> -	"CG_NONE": 1,
> -	"PROPS":   2,
> -	"SOFT":    3,
> -	"FULL":    4,
> -	"STRICT":  5,
> -	"DEFAULT": 6,
> -}
> -
> -func (x CriuCgMode) Enum() *CriuCgMode {
> -	p := new(CriuCgMode)
> -	*p = x
> -	return p
> -}
> -func (x CriuCgMode) String() string {
> -	return proto.EnumName(CriuCgMode_name, int32(x))
> -}
> -func (x *CriuCgMode) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(CriuCgMode_value, data, "CriuCgMode")
> -	if err != nil {
> -		return err
> -	}
> -	*x = CriuCgMode(value)
> -	return nil
> -}
> -func (CriuCgMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -type CriuReqType int32
> -
> -const (
> -	CriuReqType_EMPTY            CriuReqType = 0
> -	CriuReqType_DUMP             CriuReqType = 1
> -	CriuReqType_RESTORE          CriuReqType = 2
> -	CriuReqType_CHECK            CriuReqType = 3
> -	CriuReqType_PRE_DUMP         CriuReqType = 4
> -	CriuReqType_PAGE_SERVER      CriuReqType = 5
> -	CriuReqType_NOTIFY           CriuReqType = 6
> -	CriuReqType_CPUINFO_DUMP     CriuReqType = 7
> -	CriuReqType_CPUINFO_CHECK    CriuReqType = 8
> -	CriuReqType_FEATURE_CHECK    CriuReqType = 9
> -	CriuReqType_VERSION          CriuReqType = 10
> -	CriuReqType_WAIT_PID         CriuReqType = 11
> -	CriuReqType_PAGE_SERVER_CHLD CriuReqType = 12
> -)
> -
> -var CriuReqType_name = map[int32]string{
> -	0:  "EMPTY",
> -	1:  "DUMP",
> -	2:  "RESTORE",
> -	3:  "CHECK",
> -	4:  "PRE_DUMP",
> -	5:  "PAGE_SERVER",
> -	6:  "NOTIFY",
> -	7:  "CPUINFO_DUMP",
> -	8:  "CPUINFO_CHECK",
> -	9:  "FEATURE_CHECK",
> -	10: "VERSION",
> -	11: "WAIT_PID",
> -	12: "PAGE_SERVER_CHLD",
> -}
> -var CriuReqType_value = map[string]int32{
> -	"EMPTY":            0,
> -	"DUMP":             1,
> -	"RESTORE":          2,
> -	"CHECK":            3,
> -	"PRE_DUMP":         4,
> -	"PAGE_SERVER":      5,
> -	"NOTIFY":           6,
> -	"CPUINFO_DUMP":     7,
> -	"CPUINFO_CHECK":    8,
> -	"FEATURE_CHECK":    9,
> -	"VERSION":          10,
> -	"WAIT_PID":         11,
> -	"PAGE_SERVER_CHLD": 12,
> -}
> -
> -func (x CriuReqType) Enum() *CriuReqType {
> -	p := new(CriuReqType)
> -	*p = x
> -	return p
> -}
> -func (x CriuReqType) String() string {
> -	return proto.EnumName(CriuReqType_name, int32(x))
> -}
> -func (x *CriuReqType) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(CriuReqType_value, data, "CriuReqType")
> -	if err != nil {
> -		return err
> -	}
> -	*x = CriuReqType(value)
> -	return nil
> -}
> -func (CriuReqType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -
> -type CriuPageServerInfo struct {
> -	Address          *string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"`
> -	Port             *int32  `protobuf:"varint,2,opt,name=port" json:"port,omitempty"`
> -	Pid              *int32  `protobuf:"varint,3,opt,name=pid" json:"pid,omitempty"`
> -	Fd               *int32  `protobuf:"varint,4,opt,name=fd" json:"fd,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *CriuPageServerInfo) Reset()                    { *m = CriuPageServerInfo{} }
> -func (m *CriuPageServerInfo) String() string            { return proto.CompactTextString(m) }
> -func (*CriuPageServerInfo) ProtoMessage()               {}
> -func (*CriuPageServerInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -func (m *CriuPageServerInfo) GetAddress() string {
> -	if m != nil && m.Address != nil {
> -		return *m.Address
> -	}
> -	return ""
> -}
> -
> -func (m *CriuPageServerInfo) GetPort() int32 {
> -	if m != nil && m.Port != nil {
> -		return *m.Port
> -	}
> -	return 0
> -}
> -
> -func (m *CriuPageServerInfo) GetPid() int32 {
> -	if m != nil && m.Pid != nil {
> -		return *m.Pid
> -	}
> -	return 0
> -}
> -
> -func (m *CriuPageServerInfo) GetFd() int32 {
> -	if m != nil && m.Fd != nil {
> -		return *m.Fd
> -	}
> -	return 0
> -}
> -
> -type CriuVethPair struct {
> -	IfIn             *string `protobuf:"bytes,1,req,name=if_in,json=ifIn" json:"if_in,omitempty"`
> -	IfOut            *string `protobuf:"bytes,2,req,name=if_out,json=ifOut" json:"if_out,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *CriuVethPair) Reset()                    { *m = CriuVethPair{} }
> -func (m *CriuVethPair) String() string            { return proto.CompactTextString(m) }
> -func (*CriuVethPair) ProtoMessage()               {}
> -func (*CriuVethPair) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -
> -func (m *CriuVethPair) GetIfIn() string {
> -	if m != nil && m.IfIn != nil {
> -		return *m.IfIn
> -	}
> -	return ""
> -}
> -
> -func (m *CriuVethPair) GetIfOut() string {
> -	if m != nil && m.IfOut != nil {
> -		return *m.IfOut
> -	}
> -	return ""
> -}
> -
> -type ExtMountMap struct {
> -	Key              *string `protobuf:"bytes,1,req,name=key" json:"key,omitempty"`
> -	Val              *string `protobuf:"bytes,2,req,name=val" json:"val,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *ExtMountMap) Reset()                    { *m = ExtMountMap{} }
> -func (m *ExtMountMap) String() string            { return proto.CompactTextString(m) }
> -func (*ExtMountMap) ProtoMessage()               {}
> -func (*ExtMountMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
> -
> -func (m *ExtMountMap) GetKey() string {
> -	if m != nil && m.Key != nil {
> -		return *m.Key
> -	}
> -	return ""
> -}
> -
> -func (m *ExtMountMap) GetVal() string {
> -	if m != nil && m.Val != nil {
> -		return *m.Val
> -	}
> -	return ""
> -}
> -
> -type JoinNamespace struct {
> -	Ns               *string `protobuf:"bytes,1,req,name=ns" json:"ns,omitempty"`
> -	NsFile           *string `protobuf:"bytes,2,req,name=ns_file,json=nsFile" json:"ns_file,omitempty"`
> -	ExtraOpt         *string `protobuf:"bytes,3,opt,name=extra_opt,json=extraOpt" json:"extra_opt,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *JoinNamespace) Reset()                    { *m = JoinNamespace{} }
> -func (m *JoinNamespace) String() string            { return proto.CompactTextString(m) }
> -func (*JoinNamespace) ProtoMessage()               {}
> -func (*JoinNamespace) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
> -
> -func (m *JoinNamespace) GetNs() string {
> -	if m != nil && m.Ns != nil {
> -		return *m.Ns
> -	}
> -	return ""
> -}
> -
> -func (m *JoinNamespace) GetNsFile() string {
> -	if m != nil && m.NsFile != nil {
> -		return *m.NsFile
> -	}
> -	return ""
> -}
> -
> -func (m *JoinNamespace) GetExtraOpt() string {
> -	if m != nil && m.ExtraOpt != nil {
> -		return *m.ExtraOpt
> -	}
> -	return ""
> -}
> -
> -type InheritFd struct {
> -	Key              *string `protobuf:"bytes,1,req,name=key" json:"key,omitempty"`
> -	Fd               *int32  `protobuf:"varint,2,req,name=fd" json:"fd,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *InheritFd) Reset()                    { *m = InheritFd{} }
> -func (m *InheritFd) String() string            { return proto.CompactTextString(m) }
> -func (*InheritFd) ProtoMessage()               {}
> -func (*InheritFd) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
> -
> -func (m *InheritFd) GetKey() string {
> -	if m != nil && m.Key != nil {
> -		return *m.Key
> -	}
> -	return ""
> -}
> -
> -func (m *InheritFd) GetFd() int32 {
> -	if m != nil && m.Fd != nil {
> -		return *m.Fd
> -	}
> -	return 0
> -}
> -
> -type CgroupRoot struct {
> -	Ctrl             *string `protobuf:"bytes,1,opt,name=ctrl" json:"ctrl,omitempty"`
> -	Path             *string `protobuf:"bytes,2,req,name=path" json:"path,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *CgroupRoot) Reset()                    { *m = CgroupRoot{} }
> -func (m *CgroupRoot) String() string            { return proto.CompactTextString(m) }
> -func (*CgroupRoot) ProtoMessage()               {}
> -func (*CgroupRoot) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
> -
> -func (m *CgroupRoot) GetCtrl() string {
> -	if m != nil && m.Ctrl != nil {
> -		return *m.Ctrl
> -	}
> -	return ""
> -}
> -
> -func (m *CgroupRoot) GetPath() string {
> -	if m != nil && m.Path != nil {
> -		return *m.Path
> -	}
> -	return ""
> -}
> -
> -type UnixSk struct {
> -	Inode            *uint32 `protobuf:"varint,1,req,name=inode" json:"inode,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *UnixSk) Reset()                    { *m = UnixSk{} }
> -func (m *UnixSk) String() string            { return proto.CompactTextString(m) }
> -func (*UnixSk) ProtoMessage()               {}
> -func (*UnixSk) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
> -
> -func (m *UnixSk) GetInode() uint32 {
> -	if m != nil && m.Inode != nil {
> -		return *m.Inode
> -	}
> -	return 0
> -}
> -
> -type CriuOpts struct {
> -	ImagesDirFd          *int32              `protobuf:"varint,1,req,name=images_dir_fd,json=imagesDirFd" json:"images_dir_fd,omitempty"`
> -	Pid                  *int32              `protobuf:"varint,2,opt,name=pid" json:"pid,omitempty"`
> -	LeaveRunning         *bool               `protobuf:"varint,3,opt,name=leave_running,json=leaveRunning" json:"leave_running,omitempty"`
> -	ExtUnixSk            *bool               `protobuf:"varint,4,opt,name=ext_unix_sk,json=extUnixSk" json:"ext_unix_sk,omitempty"`
> -	TcpEstablished       *bool               `protobuf:"varint,5,opt,name=tcp_established,json=tcpEstablished" json:"tcp_established,omitempty"`
> -	EvasiveDevices       *bool               `protobuf:"varint,6,opt,name=evasive_devices,json=evasiveDevices" json:"evasive_devices,omitempty"`
> -	ShellJob             *bool               `protobuf:"varint,7,opt,name=shell_job,json=shellJob" json:"shell_job,omitempty"`
> -	FileLocks            *bool               `protobuf:"varint,8,opt,name=file_locks,json=fileLocks" json:"file_locks,omitempty"`
> -	LogLevel             *int32              `protobuf:"varint,9,opt,name=log_level,json=logLevel,def=2" json:"log_level,omitempty"`
> -	LogFile              *string             `protobuf:"bytes,10,opt,name=log_file,json=logFile" json:"log_file,omitempty"`
> -	Ps                   *CriuPageServerInfo `protobuf:"bytes,11,opt,name=ps" json:"ps,omitempty"`
> -	NotifyScripts        *bool               `protobuf:"varint,12,opt,name=notify_scripts,json=notifyScripts" json:"notify_scripts,omitempty"`
> -	Root                 *string             `protobuf:"bytes,13,opt,name=root" json:"root,omitempty"`
> -	ParentImg            *string             `protobuf:"bytes,14,opt,name=parent_img,json=parentImg" json:"parent_img,omitempty"`
> -	TrackMem             *bool               `protobuf:"varint,15,opt,name=track_mem,json=trackMem" json:"track_mem,omitempty"`
> -	AutoDedup            *bool               `protobuf:"varint,16,opt,name=auto_dedup,json=autoDedup" json:"auto_dedup,omitempty"`
> -	WorkDirFd            *int32              `protobuf:"varint,17,opt,name=work_dir_fd,json=workDirFd" json:"work_dir_fd,omitempty"`
> -	LinkRemap            *bool               `protobuf:"varint,18,opt,name=link_remap,json=linkRemap" json:"link_remap,omitempty"`
> -	Veths                []*CriuVethPair     `protobuf:"bytes,19,rep,name=veths" json:"veths,omitempty"`
> -	CpuCap               *uint32             `protobuf:"varint,20,opt,name=cpu_cap,json=cpuCap,def=4294967295" json:"cpu_cap,omitempty"`
> -	ForceIrmap           *bool               `protobuf:"varint,21,opt,name=force_irmap,json=forceIrmap" json:"force_irmap,omitempty"`
> -	ExecCmd              []string            `protobuf:"bytes,22,rep,name=exec_cmd,json=execCmd" json:"exec_cmd,omitempty"`
> -	ExtMnt               []*ExtMountMap      `protobuf:"bytes,23,rep,name=ext_mnt,json=extMnt" json:"ext_mnt,omitempty"`
> -	ManageCgroups        *bool               `protobuf:"varint,24,opt,name=manage_cgroups,json=manageCgroups" json:"manage_cgroups,omitempty"`
> -	CgRoot               []*CgroupRoot       `protobuf:"bytes,25,rep,name=cg_root,json=cgRoot" json:"cg_root,omitempty"`
> -	RstSibling           *bool               `protobuf:"varint,26,opt,name=rst_sibling,json=rstSibling" json:"rst_sibling,omitempty"`
> -	InheritFd            []*InheritFd        `protobuf:"bytes,27,rep,name=inherit_fd,json=inheritFd" json:"inherit_fd,omitempty"`
> -	AutoExtMnt           *bool               `protobuf:"varint,28,opt,name=auto_ext_mnt,json=autoExtMnt" json:"auto_ext_mnt,omitempty"`
> -	ExtSharing           *bool               `protobuf:"varint,29,opt,name=ext_sharing,json=extSharing" json:"ext_sharing,omitempty"`
> -	ExtMasters           *bool               `protobuf:"varint,30,opt,name=ext_masters,json=extMasters" json:"ext_masters,omitempty"`
> -	SkipMnt              []string            `protobuf:"bytes,31,rep,name=skip_mnt,json=skipMnt" json:"skip_mnt,omitempty"`
> -	EnableFs             []string            `protobuf:"bytes,32,rep,name=enable_fs,json=enableFs" json:"enable_fs,omitempty"`
> -	UnixSkIno            []*UnixSk           `protobuf:"bytes,33,rep,name=unix_sk_ino,json=unixSkIno" json:"unix_sk_ino,omitempty"`
> -	ManageCgroupsMode    *CriuCgMode         `protobuf:"varint,34,opt,name=manage_cgroups_mode,json=manageCgroupsMode,enum=CriuCgMode" json:"manage_cgroups_mode,omitempty"`
> -	GhostLimit           *uint32             `protobuf:"varint,35,opt,name=ghost_limit,json=ghostLimit,def=1048576" json:"ghost_limit,omitempty"`
> -	IrmapScanPaths       []string            `protobuf:"bytes,36,rep,name=irmap_scan_paths,json=irmapScanPaths" json:"irmap_scan_paths,omitempty"`
> -	External             []string            `protobuf:"bytes,37,rep,name=external" json:"external,omitempty"`
> -	EmptyNs              *uint32             `protobuf:"varint,38,opt,name=empty_ns,json=emptyNs" json:"empty_ns,omitempty"`
> -	JoinNs               []*JoinNamespace    `protobuf:"bytes,39,rep,name=join_ns,json=joinNs" json:"join_ns,omitempty"`
> -	CgroupProps          *string             `protobuf:"bytes,41,opt,name=cgroup_props,json=cgroupProps" json:"cgroup_props,omitempty"`
> -	CgroupPropsFile      *string             `protobuf:"bytes,42,opt,name=cgroup_props_file,json=cgroupPropsFile" json:"cgroup_props_file,omitempty"`
> -	CgroupDumpController []string            `protobuf:"bytes,43,rep,name=cgroup_dump_controller,json=cgroupDumpController" json:"cgroup_dump_controller,omitempty"`
> -	FreezeCgroup         *string             `protobuf:"bytes,44,opt,name=freeze_cgroup,json=freezeCgroup" json:"freeze_cgroup,omitempty"`
> -	Timeout              *uint32             `protobuf:"varint,45,opt,name=timeout" json:"timeout,omitempty"`
> -	TcpSkipInFlight      *bool               `protobuf:"varint,46,opt,name=tcp_skip_in_flight,json=tcpSkipInFlight" json:"tcp_skip_in_flight,omitempty"`
> -	WeakSysctls          *bool               `protobuf:"varint,47,opt,name=weak_sysctls,json=weakSysctls" json:"weak_sysctls,omitempty"`
> -	LazyPages            *bool               `protobuf:"varint,48,opt,name=lazy_pages,json=lazyPages" json:"lazy_pages,omitempty"`
> -	StatusFd             *int32              `protobuf:"varint,49,opt,name=status_fd,json=statusFd" json:"status_fd,omitempty"`
> -	OrphanPtsMaster      *bool               `protobuf:"varint,50,opt,name=orphan_pts_master,json=orphanPtsMaster" json:"orphan_pts_master,omitempty"`
> -	XXX_unrecognized     []byte              `json:"-"`
> -}
> -
> -func (m *CriuOpts) Reset()                    { *m = CriuOpts{} }
> -func (m *CriuOpts) String() string            { return proto.CompactTextString(m) }
> -func (*CriuOpts) ProtoMessage()               {}
> -func (*CriuOpts) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
> -
> -const Default_CriuOpts_LogLevel int32 = 2
> -const Default_CriuOpts_CpuCap uint32 = 4294967295
> -const Default_CriuOpts_GhostLimit uint32 = 1048576
> -
> -func (m *CriuOpts) GetImagesDirFd() int32 {
> -	if m != nil && m.ImagesDirFd != nil {
> -		return *m.ImagesDirFd
> -	}
> -	return 0
> -}
> -
> -func (m *CriuOpts) GetPid() int32 {
> -	if m != nil && m.Pid != nil {
> -		return *m.Pid
> -	}
> -	return 0
> -}
> -
> -func (m *CriuOpts) GetLeaveRunning() bool {
> -	if m != nil && m.LeaveRunning != nil {
> -		return *m.LeaveRunning
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetExtUnixSk() bool {
> -	if m != nil && m.ExtUnixSk != nil {
> -		return *m.ExtUnixSk
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetTcpEstablished() bool {
> -	if m != nil && m.TcpEstablished != nil {
> -		return *m.TcpEstablished
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetEvasiveDevices() bool {
> -	if m != nil && m.EvasiveDevices != nil {
> -		return *m.EvasiveDevices
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetShellJob() bool {
> -	if m != nil && m.ShellJob != nil {
> -		return *m.ShellJob
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetFileLocks() bool {
> -	if m != nil && m.FileLocks != nil {
> -		return *m.FileLocks
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetLogLevel() int32 {
> -	if m != nil && m.LogLevel != nil {
> -		return *m.LogLevel
> -	}
> -	return Default_CriuOpts_LogLevel
> -}
> -
> -func (m *CriuOpts) GetLogFile() string {
> -	if m != nil && m.LogFile != nil {
> -		return *m.LogFile
> -	}
> -	return ""
> -}
> -
> -func (m *CriuOpts) GetPs() *CriuPageServerInfo {
> -	if m != nil {
> -		return m.Ps
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetNotifyScripts() bool {
> -	if m != nil && m.NotifyScripts != nil {
> -		return *m.NotifyScripts
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetRoot() string {
> -	if m != nil && m.Root != nil {
> -		return *m.Root
> -	}
> -	return ""
> -}
> -
> -func (m *CriuOpts) GetParentImg() string {
> -	if m != nil && m.ParentImg != nil {
> -		return *m.ParentImg
> -	}
> -	return ""
> -}
> -
> -func (m *CriuOpts) GetTrackMem() bool {
> -	if m != nil && m.TrackMem != nil {
> -		return *m.TrackMem
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetAutoDedup() bool {
> -	if m != nil && m.AutoDedup != nil {
> -		return *m.AutoDedup
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetWorkDirFd() int32 {
> -	if m != nil && m.WorkDirFd != nil {
> -		return *m.WorkDirFd
> -	}
> -	return 0
> -}
> -
> -func (m *CriuOpts) GetLinkRemap() bool {
> -	if m != nil && m.LinkRemap != nil {
> -		return *m.LinkRemap
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetVeths() []*CriuVethPair {
> -	if m != nil {
> -		return m.Veths
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetCpuCap() uint32 {
> -	if m != nil && m.CpuCap != nil {
> -		return *m.CpuCap
> -	}
> -	return Default_CriuOpts_CpuCap
> -}
> -
> -func (m *CriuOpts) GetForceIrmap() bool {
> -	if m != nil && m.ForceIrmap != nil {
> -		return *m.ForceIrmap
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetExecCmd() []string {
> -	if m != nil {
> -		return m.ExecCmd
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetExtMnt() []*ExtMountMap {
> -	if m != nil {
> -		return m.ExtMnt
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetManageCgroups() bool {
> -	if m != nil && m.ManageCgroups != nil {
> -		return *m.ManageCgroups
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetCgRoot() []*CgroupRoot {
> -	if m != nil {
> -		return m.CgRoot
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetRstSibling() bool {
> -	if m != nil && m.RstSibling != nil {
> -		return *m.RstSibling
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetInheritFd() []*InheritFd {
> -	if m != nil {
> -		return m.InheritFd
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetAutoExtMnt() bool {
> -	if m != nil && m.AutoExtMnt != nil {
> -		return *m.AutoExtMnt
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetExtSharing() bool {
> -	if m != nil && m.ExtSharing != nil {
> -		return *m.ExtSharing
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetExtMasters() bool {
> -	if m != nil && m.ExtMasters != nil {
> -		return *m.ExtMasters
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetSkipMnt() []string {
> -	if m != nil {
> -		return m.SkipMnt
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetEnableFs() []string {
> -	if m != nil {
> -		return m.EnableFs
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetUnixSkIno() []*UnixSk {
> -	if m != nil {
> -		return m.UnixSkIno
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetManageCgroupsMode() CriuCgMode {
> -	if m != nil && m.ManageCgroupsMode != nil {
> -		return *m.ManageCgroupsMode
> -	}
> -	return CriuCgMode_IGNORE
> -}
> -
> -func (m *CriuOpts) GetGhostLimit() uint32 {
> -	if m != nil && m.GhostLimit != nil {
> -		return *m.GhostLimit
> -	}
> -	return Default_CriuOpts_GhostLimit
> -}
> -
> -func (m *CriuOpts) GetIrmapScanPaths() []string {
> -	if m != nil {
> -		return m.IrmapScanPaths
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetExternal() []string {
> -	if m != nil {
> -		return m.External
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetEmptyNs() uint32 {
> -	if m != nil && m.EmptyNs != nil {
> -		return *m.EmptyNs
> -	}
> -	return 0
> -}
> -
> -func (m *CriuOpts) GetJoinNs() []*JoinNamespace {
> -	if m != nil {
> -		return m.JoinNs
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetCgroupProps() string {
> -	if m != nil && m.CgroupProps != nil {
> -		return *m.CgroupProps
> -	}
> -	return ""
> -}
> -
> -func (m *CriuOpts) GetCgroupPropsFile() string {
> -	if m != nil && m.CgroupPropsFile != nil {
> -		return *m.CgroupPropsFile
> -	}
> -	return ""
> -}
> -
> -func (m *CriuOpts) GetCgroupDumpController() []string {
> -	if m != nil {
> -		return m.CgroupDumpController
> -	}
> -	return nil
> -}
> -
> -func (m *CriuOpts) GetFreezeCgroup() string {
> -	if m != nil && m.FreezeCgroup != nil {
> -		return *m.FreezeCgroup
> -	}
> -	return ""
> -}
> -
> -func (m *CriuOpts) GetTimeout() uint32 {
> -	if m != nil && m.Timeout != nil {
> -		return *m.Timeout
> -	}
> -	return 0
> -}
> -
> -func (m *CriuOpts) GetTcpSkipInFlight() bool {
> -	if m != nil && m.TcpSkipInFlight != nil {
> -		return *m.TcpSkipInFlight
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetWeakSysctls() bool {
> -	if m != nil && m.WeakSysctls != nil {
> -		return *m.WeakSysctls
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetLazyPages() bool {
> -	if m != nil && m.LazyPages != nil {
> -		return *m.LazyPages
> -	}
> -	return false
> -}
> -
> -func (m *CriuOpts) GetStatusFd() int32 {
> -	if m != nil && m.StatusFd != nil {
> -		return *m.StatusFd
> -	}
> -	return 0
> -}
> -
> -func (m *CriuOpts) GetOrphanPtsMaster() bool {
> -	if m != nil && m.OrphanPtsMaster != nil {
> -		return *m.OrphanPtsMaster
> -	}
> -	return false
> -}
> -
> -type CriuDumpResp struct {
> -	Restored         *bool  `protobuf:"varint,1,opt,name=restored" json:"restored,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *CriuDumpResp) Reset()                    { *m = CriuDumpResp{} }
> -func (m *CriuDumpResp) String() string            { return proto.CompactTextString(m) }
> -func (*CriuDumpResp) ProtoMessage()               {}
> -func (*CriuDumpResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
> -
> -func (m *CriuDumpResp) GetRestored() bool {
> -	if m != nil && m.Restored != nil {
> -		return *m.Restored
> -	}
> -	return false
> -}
> -
> -type CriuRestoreResp struct {
> -	Pid              *int32 `protobuf:"varint,1,req,name=pid" json:"pid,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *CriuRestoreResp) Reset()                    { *m = CriuRestoreResp{} }
> -func (m *CriuRestoreResp) String() string            { return proto.CompactTextString(m) }
> -func (*CriuRestoreResp) ProtoMessage()               {}
> -func (*CriuRestoreResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
> -
> -func (m *CriuRestoreResp) GetPid() int32 {
> -	if m != nil && m.Pid != nil {
> -		return *m.Pid
> -	}
> -	return 0
> -}
> -
> -type CriuNotify struct {
> -	Script           *string `protobuf:"bytes,1,opt,name=script" json:"script,omitempty"`
> -	Pid              *int32  `protobuf:"varint,2,opt,name=pid" json:"pid,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *CriuNotify) Reset()                    { *m = CriuNotify{} }
> -func (m *CriuNotify) String() string            { return proto.CompactTextString(m) }
> -func (*CriuNotify) ProtoMessage()               {}
> -func (*CriuNotify) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
> -
> -func (m *CriuNotify) GetScript() string {
> -	if m != nil && m.Script != nil {
> -		return *m.Script
> -	}
> -	return ""
> -}
> -
> -func (m *CriuNotify) GetPid() int32 {
> -	if m != nil && m.Pid != nil {
> -		return *m.Pid
> -	}
> -	return 0
> -}
> -
> -//
> -// List of features which can queried via
> -// CRIU_REQ_TYPE__FEATURE_CHECK
> -type CriuFeatures struct {
> -	MemTrack         *bool  `protobuf:"varint,1,opt,name=mem_track,json=memTrack" json:"mem_track,omitempty"`
> -	LazyPages        *bool  `protobuf:"varint,2,opt,name=lazy_pages,json=lazyPages" json:"lazy_pages,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *CriuFeatures) Reset()                    { *m = CriuFeatures{} }
> -func (m *CriuFeatures) String() string            { return proto.CompactTextString(m) }
> -func (*CriuFeatures) ProtoMessage()               {}
> -func (*CriuFeatures) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
> -
> -func (m *CriuFeatures) GetMemTrack() bool {
> -	if m != nil && m.MemTrack != nil {
> -		return *m.MemTrack
> -	}
> -	return false
> -}
> -
> -func (m *CriuFeatures) GetLazyPages() bool {
> -	if m != nil && m.LazyPages != nil {
> -		return *m.LazyPages
> -	}
> -	return false
> -}
> -
> -type CriuReq struct {
> -	Type          *CriuReqType `protobuf:"varint,1,req,name=type,enum=CriuReqType" json:"type,omitempty"`
> -	Opts          *CriuOpts    `protobuf:"bytes,2,opt,name=opts" json:"opts,omitempty"`
> -	NotifySuccess *bool        `protobuf:"varint,3,opt,name=notify_success,json=notifySuccess" json:"notify_success,omitempty"`
> -	//
> -	// When set service won't close the connection but
> -	// will wait for more req-s to appear. Works not
> -	// for all request types.
> -	KeepOpen *bool `protobuf:"varint,4,opt,name=keep_open,json=keepOpen" json:"keep_open,omitempty"`
> -	//
> -	// 'features' can be used to query which features
> -	// are supported by the installed criu/kernel
> -	// via RPC.
> -	Features *CriuFeatures `protobuf:"bytes,5,opt,name=features" json:"features,omitempty"`
> -	// 'pid' is used for WAIT_PID
> -	Pid              *uint32 `protobuf:"varint,6,opt,name=pid" json:"pid,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *CriuReq) Reset()                    { *m = CriuReq{} }
> -func (m *CriuReq) String() string            { return proto.CompactTextString(m) }
> -func (*CriuReq) ProtoMessage()               {}
> -func (*CriuReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
> -
> -func (m *CriuReq) GetType() CriuReqType {
> -	if m != nil && m.Type != nil {
> -		return *m.Type
> -	}
> -	return CriuReqType_EMPTY
> -}
> -
> -func (m *CriuReq) GetOpts() *CriuOpts {
> -	if m != nil {
> -		return m.Opts
> -	}
> -	return nil
> -}
> -
> -func (m *CriuReq) GetNotifySuccess() bool {
> -	if m != nil && m.NotifySuccess != nil {
> -		return *m.NotifySuccess
> -	}
> -	return false
> -}
> -
> -func (m *CriuReq) GetKeepOpen() bool {
> -	if m != nil && m.KeepOpen != nil {
> -		return *m.KeepOpen
> -	}
> -	return false
> -}
> -
> -func (m *CriuReq) GetFeatures() *CriuFeatures {
> -	if m != nil {
> -		return m.Features
> -	}
> -	return nil
> -}
> -
> -func (m *CriuReq) GetPid() uint32 {
> -	if m != nil && m.Pid != nil {
> -		return *m.Pid
> -	}
> -	return 0
> -}
> -
> -type CriuResp struct {
> -	Type             *CriuReqType        `protobuf:"varint,1,req,name=type,enum=CriuReqType" json:"type,omitempty"`
> -	Success          *bool               `protobuf:"varint,2,req,name=success" json:"success,omitempty"`
> -	Dump             *CriuDumpResp       `protobuf:"bytes,3,opt,name=dump" json:"dump,omitempty"`
> -	Restore          *CriuRestoreResp    `protobuf:"bytes,4,opt,name=restore" json:"restore,omitempty"`
> -	Notify           *CriuNotify         `protobuf:"bytes,5,opt,name=notify" json:"notify,omitempty"`
> -	Ps               *CriuPageServerInfo `protobuf:"bytes,6,opt,name=ps" json:"ps,omitempty"`
> -	CrErrno          *int32              `protobuf:"varint,7,opt,name=cr_errno,json=crErrno" json:"cr_errno,omitempty"`
> -	Features         *CriuFeatures       `protobuf:"bytes,8,opt,name=features" json:"features,omitempty"`
> -	CrErrmsg         *string             `protobuf:"bytes,9,opt,name=cr_errmsg,json=crErrmsg" json:"cr_errmsg,omitempty"`
> -	Version          *CriuVersion        `protobuf:"bytes,10,opt,name=version" json:"version,omitempty"`
> -	Status           *int32              `protobuf:"varint,11,opt,name=status" json:"status,omitempty"`
> -	XXX_unrecognized []byte              `json:"-"`
> -}
> -
> -func (m *CriuResp) Reset()                    { *m = CriuResp{} }
> -func (m *CriuResp) String() string            { return proto.CompactTextString(m) }
> -func (*CriuResp) ProtoMessage()               {}
> -func (*CriuResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
> -
> -func (m *CriuResp) GetType() CriuReqType {
> -	if m != nil && m.Type != nil {
> -		return *m.Type
> -	}
> -	return CriuReqType_EMPTY
> -}
> -
> -func (m *CriuResp) GetSuccess() bool {
> -	if m != nil && m.Success != nil {
> -		return *m.Success
> -	}
> -	return false
> -}
> -
> -func (m *CriuResp) GetDump() *CriuDumpResp {
> -	if m != nil {
> -		return m.Dump
> -	}
> -	return nil
> -}
> -
> -func (m *CriuResp) GetRestore() *CriuRestoreResp {
> -	if m != nil {
> -		return m.Restore
> -	}
> -	return nil
> -}
> -
> -func (m *CriuResp) GetNotify() *CriuNotify {
> -	if m != nil {
> -		return m.Notify
> -	}
> -	return nil
> -}
> -
> -func (m *CriuResp) GetPs() *CriuPageServerInfo {
> -	if m != nil {
> -		return m.Ps
> -	}
> -	return nil
> -}
> -
> -func (m *CriuResp) GetCrErrno() int32 {
> -	if m != nil && m.CrErrno != nil {
> -		return *m.CrErrno
> -	}
> -	return 0
> -}
> -
> -func (m *CriuResp) GetFeatures() *CriuFeatures {
> -	if m != nil {
> -		return m.Features
> -	}
> -	return nil
> -}
> -
> -func (m *CriuResp) GetCrErrmsg() string {
> -	if m != nil && m.CrErrmsg != nil {
> -		return *m.CrErrmsg
> -	}
> -	return ""
> -}
> -
> -func (m *CriuResp) GetVersion() *CriuVersion {
> -	if m != nil {
> -		return m.Version
> -	}
> -	return nil
> -}
> -
> -func (m *CriuResp) GetStatus() int32 {
> -	if m != nil && m.Status != nil {
> -		return *m.Status
> -	}
> -	return 0
> -}
> -
> -// Answer for criu_req_type.VERSION requests
> -type CriuVersion struct {
> -	Major            *int32  `protobuf:"varint,1,req,name=major" json:"major,omitempty"`
> -	Minor            *int32  `protobuf:"varint,2,req,name=minor" json:"minor,omitempty"`
> -	Gitid            *string `protobuf:"bytes,3,opt,name=gitid" json:"gitid,omitempty"`
> -	Sublevel         *int32  `protobuf:"varint,4,opt,name=sublevel" json:"sublevel,omitempty"`
> -	Extra            *int32  `protobuf:"varint,5,opt,name=extra" json:"extra,omitempty"`
> -	Name             *string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *CriuVersion) Reset()                    { *m = CriuVersion{} }
> -func (m *CriuVersion) String() string            { return proto.CompactTextString(m) }
> -func (*CriuVersion) ProtoMessage()               {}
> -func (*CriuVersion) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
> -
> -func (m *CriuVersion) GetMajor() int32 {
> -	if m != nil && m.Major != nil {
> -		return *m.Major
> -	}
> -	return 0
> -}
> -
> -func (m *CriuVersion) GetMinor() int32 {
> -	if m != nil && m.Minor != nil {
> -		return *m.Minor
> -	}
> -	return 0
> -}
> -
> -func (m *CriuVersion) GetGitid() string {
> -	if m != nil && m.Gitid != nil {
> -		return *m.Gitid
> -	}
> -	return ""
> -}
> -
> -func (m *CriuVersion) GetSublevel() int32 {
> -	if m != nil && m.Sublevel != nil {
> -		return *m.Sublevel
> -	}
> -	return 0
> -}
> -
> -func (m *CriuVersion) GetExtra() int32 {
> -	if m != nil && m.Extra != nil {
> -		return *m.Extra
> -	}
> -	return 0
> -}
> -
> -func (m *CriuVersion) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func init() {
> -	proto.RegisterType((*CriuPageServerInfo)(nil), "criu_page_server_info")
> -	proto.RegisterType((*CriuVethPair)(nil), "criu_veth_pair")
> -	proto.RegisterType((*ExtMountMap)(nil), "ext_mount_map")
> -	proto.RegisterType((*JoinNamespace)(nil), "join_namespace")
> -	proto.RegisterType((*InheritFd)(nil), "inherit_fd")
> -	proto.RegisterType((*CgroupRoot)(nil), "cgroup_root")
> -	proto.RegisterType((*UnixSk)(nil), "unix_sk")
> -	proto.RegisterType((*CriuOpts)(nil), "criu_opts")
> -	proto.RegisterType((*CriuDumpResp)(nil), "criu_dump_resp")
> -	proto.RegisterType((*CriuRestoreResp)(nil), "criu_restore_resp")
> -	proto.RegisterType((*CriuNotify)(nil), "criu_notify")
> -	proto.RegisterType((*CriuFeatures)(nil), "criu_features")
> -	proto.RegisterType((*CriuReq)(nil), "criu_req")
> -	proto.RegisterType((*CriuResp)(nil), "criu_resp")
> -	proto.RegisterType((*CriuVersion)(nil), "criu_version")
> -	proto.RegisterEnum("CriuCgMode", CriuCgMode_name, CriuCgMode_value)
> -	proto.RegisterEnum("CriuReqType", CriuReqType_name, CriuReqType_value)
> -}
> -
> -func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 1816 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x5b, 0x73, 0x5b, 0xb7,
> -	0x11, 0x0e, 0x29, 0xf1, 0x06, 0x5e, 0x7c, 0x8c, 0xd8, 0x0e, 0x1c, 0xd7, 0x36, 0x43, 0xc7, 0x89,
> -	0xaa, 0xb8, 0x6c, 0xc2, 0xda, 0x71, 0x9d, 0x69, 0x1f, 0x3c, 0x14, 0xe9, 0xb0, 0x91, 0x44, 0x0e,
> -	0x48, 0xb9, 0x93, 0x27, 0xcc, 0xd1, 0x39, 0x20, 0x05, 0xf3, 0xdc, 0x0a, 0x80, 0x8a, 0xe4, 0x3f,
> -	0xd1, 0xb7, 0xfe, 0xac, 0x4e, 0x7e, 0x52, 0x67, 0x17, 0xa0, 0x2c, 0x25, 0x99, 0x49, 0xdf, 0xb0,
> -	0x1f, 0x76, 0x81, 0xbd, 0xef, 0x92, 0x86, 0x2e, 0xa2, 0x7e, 0xa1, 0x73, 0x9b, 0xf7, 0x56, 0xe4,
> -	0x6e, 0xa4, 0xd5, 0x46, 0x14, 0xe1, 0x4a, 0x0a, 0x23, 0xf5, 0xb9, 0xd4, 0x42, 0x65, 0xcb, 0x9c,
> -	0x32, 0x52, 0x0b, 0xe3, 0x58, 0x4b, 0x63, 0x58, 0xa9, 0x5b, 0xda, 0x6b, 0xf0, 0x2d, 0x49, 0x29,
> -	0xd9, 0x2d, 0x72, 0x6d, 0x59, 0xb9, 0x5b, 0xda, 0xab, 0x70, 0x3c, 0xd3, 0x80, 0xec, 0x14, 0x2a,
> -	0x66, 0x3b, 0x08, 0xc1, 0x91, 0x76, 0x48, 0x79, 0x19, 0xb3, 0x5d, 0x04, 0xca, 0xcb, 0xb8, 0xf7,
> -	0x37, 0xd2, 0xc1, 0x8f, 0xce, 0xa5, 0x3d, 0x13, 0x45, 0xa8, 0x34, 0xfd, 0x98, 0x54, 0xd4, 0x52,
> -	0xa8, 0x8c, 0x95, 0xba, 0xe5, 0xbd, 0x06, 0xdf, 0x55, 0xcb, 0x49, 0x46, 0xef, 0x92, 0xaa, 0x5a,
> -	0x8a, 0x7c, 0x03, 0xcf, 0x03, 0x5a, 0x51, 0xcb, 0xe9, 0xc6, 0xf6, 0xfe, 0x42, 0xda, 0xf2, 0xc2,
> -	0x8a, 0x34, 0xdf, 0x64, 0x56, 0xa4, 0x61, 0x01, 0x1f, 0xae, 0xe5, 0xa5, 0x17, 0x85, 0x23, 0x20,
> -	0xe7, 0x61, 0xe2, 0xc5, 0xe0, 0xd8, 0x7b, 0x4b, 0x3a, 0xef, 0x72, 0x95, 0x89, 0x2c, 0x4c, 0xa5,
> -	0x29, 0xc2, 0x48, 0x82, 0x52, 0x99, 0xf1, 0x42, 0xe5, 0xcc, 0xd0, 0x4f, 0x48, 0x2d, 0x33, 0x62,
> -	0xa9, 0x12, 0xe9, 0xe5, 0xaa, 0x99, 0x19, 0xab, 0x44, 0xd2, 0x07, 0xa4, 0x21, 0x2f, 0xac, 0x0e,
> -	0x45, 0x5e, 0x58, 0xb4, 0xaa, 0xc1, 0xeb, 0x08, 0x4c, 0x0b, 0xdb, 0xeb, 0x13, 0xa2, 0xb2, 0x33,
> -	0xa9, 0x95, 0x15, 0xcb, 0xf8, 0x37, 0x34, 0x71, 0xa6, 0xc3, 0x83, 0xce, 0xf4, 0x17, 0xa4, 0x19,
> -	0xad, 0x74, 0xbe, 0x29, 0x84, 0xce, 0x73, 0x0b, 0xfe, 0x8b, 0xac, 0x4e, 0xbc, 0x5b, 0xf1, 0x8c,
> -	0x3e, 0x0d, 0xed, 0x99, 0xd7, 0x02, 0xcf, 0xbd, 0xc7, 0xa4, 0xb6, 0xc9, 0xd4, 0x85, 0x30, 0x6b,
> -	0x7a, 0x87, 0x54, 0x54, 0x96, 0xc7, 0x12, 0x7f, 0x69, 0x73, 0x47, 0xf4, 0xfe, 0xdb, 0x26, 0x0d,
> -	0xf4, 0x69, 0x5e, 0x58, 0x43, 0x7b, 0xa4, 0xad, 0xd2, 0x70, 0x25, 0x8d, 0x88, 0x95, 0x16, 0xcb,
> -	0x18, 0x79, 0x2b, 0xbc, 0xe9, 0xc0, 0x03, 0xa5, 0xc7, 0xf1, 0x36, 0x4c, 0xe5, 0x0f, 0x61, 0x7a,
> -	0x42, 0xda, 0x89, 0x0c, 0xcf, 0xa5, 0xd0, 0x9b, 0x2c, 0x53, 0xd9, 0x0a, 0x8d, 0xad, 0xf3, 0x16,
> -	0x82, 0xdc, 0x61, 0xf4, 0x11, 0x69, 0x82, 0xf7, 0xbd, 0x36, 0x18, 0xd4, 0x3a, 0x07, 0x07, 0x9d,
> -	0x64, 0xea, 0x62, 0xbe, 0xa6, 0x5f, 0x92, 0x5b, 0x36, 0x2a, 0x84, 0x34, 0x36, 0x3c, 0x4d, 0x94,
> -	0x39, 0x93, 0x31, 0xab, 0x20, 0x4f, 0xc7, 0x46, 0xc5, 0xe8, 0x03, 0x0a, 0x8c, 0xf2, 0x3c, 0x34,
> -	0xea, 0x5c, 0x8a, 0x58, 0x9e, 0xab, 0x48, 0x1a, 0x56, 0x75, 0x8c, 0x1e, 0x3e, 0x70, 0x28, 0xf8,
> -	0xdf, 0x9c, 0xc9, 0x24, 0x11, 0xef, 0xf2, 0x53, 0x56, 0x43, 0x96, 0x3a, 0x02, 0xff, 0xc8, 0x4f,
> -	0xe9, 0x43, 0x42, 0x20, 0x64, 0x22, 0xc9, 0xa3, 0xb5, 0x61, 0x75, 0xa7, 0x0d, 0x20, 0x87, 0x00,
> -	0xd0, 0x47, 0xa4, 0x91, 0xe4, 0x2b, 0x91, 0xc8, 0x73, 0x99, 0xb0, 0x06, 0x98, 0xfa, 0x5d, 0x69,
> -	0xc0, 0xeb, 0x49, 0xbe, 0x3a, 0x04, 0x88, 0xde, 0x27, 0x70, 0x76, 0x51, 0x27, 0x2e, 0xb5, 0x93,
> -	0x7c, 0x85, 0x61, 0xff, 0x82, 0x94, 0x0b, 0xc3, 0x9a, 0xdd, 0xd2, 0x5e, 0x73, 0x70, 0xaf, 0xff,
> -	0x9b, 0x85, 0xc1, 0xcb, 0x85, 0xa1, 0x4f, 0x49, 0x27, 0xcb, 0xad, 0x5a, 0x5e, 0x0a, 0x13, 0x69,
> -	0x55, 0x58, 0xc3, 0x5a, 0xa8, 0x45, 0xdb, 0xa1, 0x73, 0x07, 0x42, 0x54, 0x21, 0xe2, 0xac, 0xed,
> -	0x22, 0x8d, 0xd1, 0x7f, 0x48, 0x48, 0x11, 0x6a, 0x99, 0x59, 0xa1, 0xd2, 0x15, 0xeb, 0xe0, 0x4d,
> -	0xc3, 0x21, 0x93, 0x74, 0x05, 0x86, 0x5b, 0x1d, 0x46, 0x6b, 0x91, 0xca, 0x94, 0xdd, 0x72, 0x86,
> -	0x23, 0x70, 0x24, 0x53, 0x90, 0x0d, 0x37, 0x36, 0x17, 0xb1, 0x8c, 0x37, 0x05, 0x0b, 0x9c, 0xe1,
> -	0x80, 0x1c, 0x00, 0x00, 0x61, 0xfa, 0x29, 0xd7, 0xeb, 0x6d, 0xfc, 0x6f, 0x63, 0x94, 0x1b, 0x00,
> -	0xb9, 0xe8, 0x3f, 0x24, 0x24, 0x51, 0xd9, 0x5a, 0x68, 0x99, 0x86, 0x05, 0xa3, 0x4e, 0x1c, 0x10,
> -	0x0e, 0x00, 0x7d, 0x4a, 0x2a, 0x50, 0x9c, 0x86, 0x7d, 0xdc, 0xdd, 0xd9, 0x6b, 0x0e, 0x6e, 0xf5,
> -	0x6f, 0xd6, 0x2b, 0x77, 0xb7, 0xf4, 0x09, 0xa9, 0x45, 0xc5, 0x46, 0x44, 0x61, 0xc1, 0xee, 0x74,
> -	0x4b, 0x7b, 0xed, 0xef, 0xc8, 0xf3, 0xc1, 0xab, 0xe7, 0xaf, 0xbe, 0x7d, 0x39, 0x78, 0xf5, 0x82,
> -	0x57, 0xa3, 0x62, 0x33, 0x0c, 0x0b, 0xfa, 0x98, 0x34, 0x97, 0xb9, 0x8e, 0xa4, 0x50, 0x1a, 0xfe,
> -	0xba, 0x8b, 0x7f, 0x11, 0x84, 0x26, 0x80, 0x40, 0x10, 0xe4, 0x85, 0x8c, 0x44, 0x94, 0xc6, 0xec,
> -	0x5e, 0x77, 0x07, 0x82, 0x00, 0xf4, 0x30, 0x85, 0x24, 0xa9, 0x61, 0xad, 0x67, 0x96, 0x7d, 0x82,
> -	0x9a, 0x74, 0xfa, 0x37, 0x6a, 0x9f, 0x57, 0xe5, 0x85, 0x3d, 0xca, 0x2c, 0x44, 0x21, 0x0d, 0x33,
> -	0x88, 0x8f, 0x2b, 0x2f, 0xc3, 0x98, 0x8b, 0x82, 0x43, 0x87, 0x0e, 0xa4, 0x4f, 0x49, 0x2d, 0x5a,
> -	0x61, 0xe9, 0xb1, 0xfb, 0xf8, 0x5e, 0xab, 0x7f, 0xad, 0x1c, 0x79, 0x35, 0x5a, 0x71, 0x08, 0xcc,
> -	0x63, 0xd2, 0xd4, 0xc6, 0x0a, 0xa3, 0x4e, 0x13, 0xa8, 0x83, 0x4f, 0x9d, 0xca, 0xda, 0xd8, 0xb9,
> -	0x43, 0xe8, 0xfe, 0xf5, 0xb2, 0x67, 0x0f, 0xf0, 0xa9, 0x66, 0xff, 0x03, 0xc4, 0x1b, 0xfe, 0x3c,
> -	0x8e, 0x69, 0x97, 0xb4, 0x30, 0x52, 0x5b, 0x43, 0xfe, 0xe0, 0x5e, 0x03, 0x6c, 0xe4, 0x94, 0x7f,
> -	0xec, 0x6a, 0xca, 0x9c, 0x85, 0x1a, 0xbe, 0x7b, 0xe8, 0x18, 0xe4, 0x85, 0x9d, 0x3b, 0x64, 0xcb,
> -	0x90, 0x86, 0xc6, 0x4a, 0x6d, 0xd8, 0xa3, 0x2b, 0x86, 0x23, 0x87, 0x80, 0x0b, 0xcd, 0x5a, 0x15,
> -	0xf8, 0xfe, 0x63, 0xe7, 0x42, 0xa0, 0xe1, 0x71, 0x68, 0x5f, 0x59, 0x78, 0x9a, 0x48, 0xb1, 0x34,
> -	0xac, 0x8b, 0x77, 0x75, 0x07, 0x8c, 0x0d, 0xdd, 0x23, 0x4d, 0x5f, 0xc9, 0x42, 0x65, 0x39, 0xfb,
> -	0x0c, 0x0d, 0xa9, 0xf7, 0x3d, 0xc6, 0x1b, 0x1b, 0x2c, 0xea, 0x49, 0x96, 0xd3, 0xbf, 0x93, 0x8f,
> -	0x6f, 0x3a, 0x58, 0xa4, 0xd0, 0x84, 0x7a, 0xdd, 0xd2, 0x5e, 0x67, 0xd0, 0x76, 0xf9, 0x11, 0xad,
> -	0x10, 0xe4, 0xb7, 0x6f, 0x38, 0xfd, 0x28, 0x8f, 0x25, 0x7c, 0xb4, 0x3a, 0xcb, 0x8d, 0x15, 0x89,
> -	0x4a, 0x95, 0x65, 0x4f, 0x30, 0x5b, 0x6a, 0xdf, 0x7c, 0xfd, 0xfc, 0xaf, 0x2f, 0x5e, 0x7e, 0xcb,
> -	0x09, 0xde, 0x1d, 0xc2, 0x15, 0xdd, 0x23, 0x01, 0x26, 0x8a, 0x30, 0x51, 0x98, 0x09, 0xe8, 0x7e,
> -	0x86, 0x7d, 0x8e, 0x6a, 0x77, 0x10, 0x9f, 0x47, 0x61, 0x36, 0x03, 0x94, 0x7e, 0x0a, 0x79, 0x63,
> -	0xa5, 0xce, 0xc2, 0x84, 0x3d, 0xf5, 0x86, 0x79, 0x1a, 0x73, 0x2a, 0x2d, 0xec, 0xa5, 0xc8, 0x0c,
> -	0xfb, 0x02, 0x3e, 0xe3, 0x35, 0xa4, 0x8f, 0xc1, 0xe6, 0x9a, 0x1b, 0x05, 0x86, 0x7d, 0xe9, 0xb3,
> -	0xfb, 0xe6, 0x68, 0xe0, 0x55, 0xa0, 0x8f, 0x0d, 0xfd, 0x8c, 0xb4, 0x7c, 0x76, 0x14, 0x3a, 0x2f,
> -	0x0c, 0xfb, 0x23, 0x56, 0xa8, 0x6f, 0xe0, 0x33, 0x80, 0xe8, 0x3e, 0xb9, 0x7d, 0x9d, 0xc5, 0x75,
> -	0x92, 0x7d, 0xe4, 0xbb, 0x75, 0x8d, 0x0f, 0x3b, 0xca, 0x73, 0x72, 0xcf, 0xf3, 0xc6, 0x9b, 0xb4,
> -	0x10, 0x51, 0x9e, 0x59, 0x9d, 0x27, 0x89, 0xd4, 0xec, 0x2b, 0xd4, 0xfe, 0x8e, 0xbb, 0x3d, 0xd8,
> -	0xa4, 0xc5, 0xf0, 0xea, 0x0e, 0xba, 0xf2, 0x52, 0x4b, 0xf9, 0x7e, 0xeb, 0x78, 0xf6, 0x0c, 0x5f,
> -	0x6f, 0x39, 0xd0, 0xf9, 0x18, 0x26, 0xb4, 0x55, 0xa9, 0x84, 0x59, 0xf9, 0x27, 0x67, 0xad, 0x27,
> -	0xe9, 0x57, 0x84, 0x42, 0x3f, 0xc6, 0xec, 0x50, 0x99, 0x58, 0x26, 0x6a, 0x75, 0x66, 0x59, 0x1f,
> -	0x33, 0x08, 0x3a, 0xf5, 0x7c, 0xad, 0x8a, 0x49, 0x36, 0x46, 0x18, 0x0c, 0xfe, 0x49, 0x86, 0x6b,
> -	0x61, 0x2e, 0x4d, 0x64, 0x13, 0xc3, 0xfe, 0x8c, 0x6c, 0x4d, 0xc0, 0xe6, 0x0e, 0xc2, 0xc6, 0x11,
> -	0xbe, 0xbf, 0xc4, 0x5e, 0x68, 0xd8, 0xd7, 0xbe, 0x71, 0x84, 0xef, 0x2f, 0x67, 0x00, 0x60, 0xb3,
> -	0xb6, 0xa1, 0xdd, 0x18, 0xa8, 0x8b, 0x6f, 0xb0, 0xeb, 0xd4, 0x1d, 0x30, 0x8e, 0xc1, 0x59, 0xb9,
> -	0x2e, 0xce, 0x20, 0xac, 0xd6, 0xf8, 0x6c, 0x66, 0x03, 0xa7, 0x8a, 0xbb, 0x98, 0x59, 0xe3, 0x52,
> -	0xba, 0xf7, 0xcc, 0xef, 0x08, 0xe8, 0x2a, 0x2d, 0x4d, 0x01, 0xe1, 0xd6, 0xd2, 0xd8, 0x5c, 0xcb,
> -	0x18, 0xe7, 0x65, 0x9d, 0x5f, 0xd1, 0xbd, 0xa7, 0xe4, 0x36, 0x72, 0x7b, 0xc0, 0x09, 0xf8, 0x09,
> -	0xe7, 0x66, 0x1f, 0x1c, 0x7b, 0x2f, 0x49, 0x13, 0xd9, 0x5c, 0x6b, 0xa6, 0xf7, 0x48, 0xd5, 0xf5,
> -	0x6c, 0x3f, 0x7f, 0x3d, 0xf5, 0xeb, 0xd1, 0xd8, 0xfb, 0x81, 0xb4, 0x51, 0x70, 0x29, 0x43, 0xbb,
> -	0xd1, 0xce, 0xce, 0x54, 0xa6, 0x02, 0xdb, 0xf1, 0x56, 0x9b, 0x54, 0xa6, 0x0b, 0xa0, 0x7f, 0xe1,
> -	0xa3, 0xf2, 0x2f, 0x7c, 0xd4, 0xfb, 0xb9, 0x44, 0xea, 0x5e, 0xdb, 0x7f, 0xd1, 0x1e, 0xd9, 0xb5,
> -	0x97, 0x85, 0x9b, 0xe6, 0x9d, 0x41, 0xa7, 0xbf, 0xbd, 0x10, 0x80, 0x72, 0xbc, 0xa3, 0x8f, 0xc8,
> -	0x2e, 0x8c, 0x75, 0x7c, 0xa9, 0x39, 0x20, 0xfd, 0xab, 0x41, 0xcf, 0x11, 0xbf, 0x3e, 0x82, 0x36,
> -	0x51, 0x04, 0x6b, 0xda, 0xce, 0x8d, 0x11, 0xe4, 0x40, 0xd0, 0x79, 0x2d, 0x65, 0x21, 0xf2, 0x42,
> -	0x66, 0x7e, 0x70, 0xd7, 0x01, 0x98, 0x16, 0x32, 0xa3, 0xfb, 0xa4, 0xbe, 0x35, 0x0e, 0x07, 0x76,
> -	0x73, 0xab, 0xcb, 0x16, 0xe5, 0x57, 0xf7, 0x5b, 0xff, 0x54, 0x31, 0xd3, 0xd0, 0x3f, 0xff, 0xde,
> -	0xf1, 0xeb, 0x07, 0x3a, 0xfe, 0xff, 0xb1, 0x89, 0x91, 0xda, 0x56, 0x59, 0x58, 0x74, 0xea, 0x7c,
> -	0x4b, 0xd2, 0x27, 0x64, 0x17, 0x82, 0x8e, 0x36, 0x5c, 0x8d, 0x9e, 0xab, 0x34, 0xe0, 0x78, 0x49,
> -	0x9f, 0x91, 0x9a, 0x8f, 0x35, 0x5a, 0xd2, 0x1c, 0xd0, 0xfe, 0xaf, 0x12, 0x80, 0x6f, 0x59, 0xe8,
> -	0xe7, 0xa4, 0xea, 0x5c, 0xe1, 0x4d, 0x6b, 0xf5, 0xaf, 0xa5, 0x01, 0xf7, 0x77, 0x7e, 0xe2, 0x57,
> -	0x7f, 0x77, 0xe2, 0xdf, 0x87, 0xf0, 0x09, 0xa9, 0x75, 0x96, 0xe3, 0x3e, 0x52, 0xe1, 0xb5, 0x48,
> -	0x8f, 0x80, 0xbc, 0xe1, 0xc5, 0xfa, 0xef, 0x78, 0xf1, 0x01, 0xb8, 0x0c, 0x9e, 0x49, 0xcd, 0x0a,
> -	0x77, 0x93, 0x06, 0xaf, 0xe3, 0x3b, 0xa9, 0x59, 0xc1, 0xe0, 0x3b, 0x97, 0xda, 0xa8, 0x3c, 0xc3,
> -	0xbd, 0xa4, 0xb9, 0x6d, 0xb1, 0x1e, 0xe4, 0xdb, 0x5b, 0xcc, 0x61, 0xac, 0x2f, 0x5c, 0x55, 0x2a,
> -	0xdc, 0x53, 0xbd, 0xff, 0x94, 0x48, 0xeb, 0xba, 0x04, 0xec, 0x8d, 0x69, 0xf8, 0x2e, 0xd7, 0xbe,
> -	0x1e, 0x1c, 0x81, 0xa8, 0xca, 0x72, 0xed, 0x57, 0x54, 0x47, 0x00, 0xba, 0x52, 0xd6, 0x2f, 0xf1,
> -	0x0d, 0xee, 0x08, 0x28, 0x40, 0xb3, 0x39, 0x75, 0xbb, 0xd4, 0xae, 0x2f, 0x6d, 0x4f, 0x83, 0x04,
> -	0xee, 0xc4, 0xe8, 0xe0, 0x0a, 0x77, 0x04, 0x2c, 0x3d, 0xd0, 0x55, 0xd1, 0xa7, 0x0d, 0x8e, 0xe7,
> -	0x7d, 0xe1, 0xf5, 0xf2, 0xc3, 0x82, 0x12, 0x52, 0x9d, 0xbc, 0x39, 0x9e, 0xf2, 0x51, 0xf0, 0x11,
> -	0x6d, 0x92, 0xda, 0xf0, 0x8d, 0x38, 0x9e, 0x1e, 0x8f, 0x82, 0x12, 0x6d, 0x90, 0xca, 0x8c, 0x4f,
> -	0x67, 0xf3, 0xa0, 0x4c, 0xeb, 0x64, 0x77, 0x3e, 0x1d, 0x2f, 0x82, 0x1d, 0x38, 0x8d, 0x4f, 0x0e,
> -	0x0f, 0x83, 0x5d, 0x90, 0x9b, 0x2f, 0xf8, 0x64, 0xb8, 0x08, 0x2a, 0x20, 0x77, 0x30, 0x1a, 0xbf,
> -	0x3e, 0x39, 0x5c, 0x04, 0xd5, 0xfd, 0x9f, 0x4b, 0xbe, 0x58, 0xb7, 0x19, 0x07, 0x2f, 0x8d, 0x8e,
> -	0x66, 0x8b, 0x1f, 0x83, 0x8f, 0x40, 0xfe, 0xe0, 0xe4, 0x68, 0x16, 0x94, 0x40, 0x86, 0x8f, 0xe6,
> -	0x0b, 0xf8, 0xb8, 0x0c, 0x1c, 0xc3, 0xef, 0x47, 0xc3, 0x1f, 0x82, 0x1d, 0xda, 0x22, 0xf5, 0x19,
> -	0x1f, 0x09, 0xe4, 0xda, 0xa5, 0xb7, 0x48, 0x73, 0xf6, 0xfa, 0xcd, 0x48, 0xcc, 0x47, 0xfc, 0xed,
> -	0x88, 0x07, 0x15, 0xf8, 0xf6, 0x78, 0xba, 0x98, 0x8c, 0x7f, 0x0c, 0xaa, 0x34, 0x20, 0xad, 0xe1,
> -	0xec, 0x64, 0x72, 0x3c, 0x9e, 0x3a, 0xf6, 0x1a, 0xbd, 0x4d, 0xda, 0x5b, 0xc4, 0xbd, 0x57, 0x07,
> -	0x68, 0x3c, 0x7a, 0xbd, 0x38, 0xe1, 0x23, 0x0f, 0x35, 0xe0, 0xeb, 0xb7, 0x23, 0x3e, 0x9f, 0x4c,
> -	0x8f, 0x03, 0x02, 0xff, 0xfd, 0xf3, 0xf5, 0x64, 0x21, 0x66, 0x93, 0x83, 0xa0, 0x49, 0xef, 0x90,
> -	0xe0, 0xda, 0x7f, 0x62, 0xf8, 0xfd, 0xe1, 0x41, 0xd0, 0xfa, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff,
> -	0x16, 0xc7, 0x59, 0xf5, 0xa5, 0x0d, 0x00, 0x00,
> -}
> diff --git a/lib/go/src/test/main.go b/lib/go/src/test/main.go
> deleted file mode 100644
> index ae38befd..00000000
> --- a/lib/go/src/test/main.go
> +++ /dev/null
> @@ -1,114 +0,0 @@
> -package main
> -
> -import (
> -	"criu"
> -	"fmt"
> -	"github.com/golang/protobuf/proto"
> -	"os"
> -	"rpc"
> -	"strconv"
> -)
> -
> -type TestNfy struct {
> -	criu.CriuNoNotify
> -}
> -
> -func (c TestNfy) PreDump() error {
> -	fmt.Printf("TEST PRE DUMP\n")
> -	return nil
> -}
> -
> -func doDump(c *criu.Criu, pid_s string, img_dir string, pre bool, prev_img string) error {
> -	fmt.Printf("Dumping\n")
> -	pid, _ := strconv.Atoi(pid_s)
> -	img, err := os.Open(img_dir)
> -	if err != nil {
> -		return fmt.Errorf("can't open image dir (%s)", err)
> -	}
> -	defer img.Close()
> -
> -	opts := rpc.CriuOpts{
> -		Pid:         proto.Int32(int32(pid)),
> -		ImagesDirFd: proto.Int32(int32(img.Fd())),
> -		LogLevel:    proto.Int32(4),
> -		LogFile:     proto.String("dump.log"),
> -	}
> -
> -	if prev_img != "" {
> -		opts.ParentImg = proto.String(prev_img)
> -		opts.TrackMem = proto.Bool(true)
> -	}
> -
> -	if pre {
> -		err = c.PreDump(opts, TestNfy{})
> -	} else {
> -		err = c.Dump(opts, TestNfy{})
> -	}
> -	if err != nil {
> -		return fmt.Errorf("dump fail (%s)", err)
> -	}
> -
> -	return nil
> -}
> -
> -// Usage: test $act $pid $images_dir
> -func main() {
> -	c := criu.MakeCriu()
> -	act := os.Args[1]
> -	switch act {
> -	case "dump":
> -		err := doDump(c, os.Args[2], os.Args[3], false, "")
> -		if err != nil {
> -			fmt.Print(err)
> -			os.Exit(1)
> -		}
> -	case "dump2":
> -		err := c.Prepare()
> -		if err != nil {
> -			fmt.Print(err)
> -			os.Exit(1)
> -		}
> -
> -		err = doDump(c, os.Args[2], os.Args[3]+"/pre", true, "")
> -		if err != nil {
> -			fmt.Printf("pre-dump failed")
> -			fmt.Print(err)
> -			os.Exit(1)
> -		}
> -		err = doDump(c, os.Args[2], os.Args[3], false, "./pre")
> -		if err != nil {
> -			fmt.Printf("dump failed")
> -			fmt.Print(err)
> -			os.Exit(1)
> -		}
> -
> -		c.Cleanup()
> -	case "restore":
> -		fmt.Printf("Restoring\n")
> -		img, err := os.Open(os.Args[2])
> -		if err != nil {
> -			fmt.Printf("can't open image dir")
> -			os.Exit(1)
> -		}
> -		defer img.Close()
> -
> -		opts := rpc.CriuOpts{
> -			ImagesDirFd: proto.Int32(int32(img.Fd())),
> -			LogLevel:    proto.Int32(4),
> -			LogFile:     proto.String("restore.log"),
> -		}
> -
> -		err = c.Restore(opts, nil)
> -		if err != nil {
> -			fmt.Printf("Error:")
> -			fmt.Print(err)
> -			fmt.Printf("\n")
> -			os.Exit(1)
> -		}
> -	default:
> -		fmt.Printf("unknown action\n")
> -		os.Exit(1)
> -	}
> -
> -	fmt.Printf("Success\n")
> -}
> diff --git a/phaul/.gitignore b/phaul/.gitignore
> deleted file mode 100644
> index e69de29b..00000000
> diff --git a/phaul/Makefile b/phaul/Makefile
> deleted file mode 100644
> index f23f9af3..00000000
> --- a/phaul/Makefile
> +++ /dev/null
> @@ -1,17 +0,0 @@
> -all: test piggie
> -
> -test:
> -	make -C src/test
> -
> -stats:
> -	mkdir -p src/stats/
> -	protoc --go_out=src/stats/ --proto_path=../images/ ../images/stats.proto
> -
> -piggie: piggie.c
> -	gcc piggie.c -o piggie
> -
> -clean:
> -	rm -rf test_images/
> -
> -run_test: piggie test
> -	unshare -fpm --mount-proc ./test.sh
> diff --git a/phaul/piggie.c b/phaul/piggie.c
> deleted file mode 100644
> index 1dc0801c..00000000
> --- a/phaul/piggie.c
> +++ /dev/null
> @@ -1,57 +0,0 @@
> -#define _GNU_SOURCE
> -#include <stdio.h>
> -#include <signal.h>
> -#include <unistd.h>
> -#include <sys/mman.h>
> -#include <fcntl.h>
> -#include <sched.h>
> -
> -#define STKS	(4*4096)
> -
> -#ifndef CLONE_NEWPID
> -#define CLONE_NEWPID    0x20000000
> -#endif
> -
> -static int do_test(void *logf)
> -{
> -	int fd, i = 0;
> -
> -	setsid();
> -
> -	close(0);
> -	close(1);
> -	close(2);
> -
> -	fd = open("/dev/null", O_RDONLY);
> -	if (fd != 0) {
> -		dup2(fd, 0);
> -		close(fd);
> -	}
> -
> -	fd = open(logf, O_WRONLY | O_TRUNC | O_CREAT, 0600);
> -	dup2(fd, 1);
> -	dup2(fd, 2);
> -	if (fd != 1 && fd != 2)
> -		close(fd);
> -
> -	while (1) {
> -		sleep(1);
> -		printf("%d\n", i++);
> -		fflush(stdout);
> -	}
> -
> -	return 0;
> -}
> -
> -int main(int argc, char **argv)
> -{
> -	int pid;
> -	void *stk;
> -
> -	stk = mmap(NULL, STKS, PROT_READ | PROT_WRITE,
> -			MAP_PRIVATE | MAP_ANON | MAP_GROWSDOWN, 0, 0);
> -	pid = clone(do_test, stk + STKS, SIGCHLD | CLONE_NEWPID, argv[1]);
> -	printf("Child forked, pid %d\n", pid);
> -
> -	return 0;
> -}
> diff --git a/phaul/src/phaul/api.go b/phaul/src/phaul/api.go
> deleted file mode 100644
> index 76f0081c..00000000
> --- a/phaul/src/phaul/api.go
> +++ /dev/null
> @@ -1,52 +0,0 @@
> -package phaul
> -
> -import (
> -	"github.com/checkpoint-restore/criu/lib/go/src/criu"
> -)
> -
> -/*
> - * Configuration passed around
> - *
> - * Pid is what we migrate
> - * Memfd is the file descriptor via which criu can
> - * transfer memory pages.
> - * Wdir is the directory where phaul can put images
> - * and other stuff
> - */
> -type PhaulConfig struct {
> -	Pid   int
> -	Memfd int
> -	Wdir  string
> -}
> -
> -/*
> - * Rpc between PhaulClient and PhaulServer. When client
> - * calls anything on this one, the corresponding method
> - * should be called on PhaulServer object.
> - */
> -type PhaulRemote interface {
> -	StartIter() error
> -	StopIter() error
> -}
> -
> -/*
> - * Interface to local classes. PhaulClient calls them when
> - * it needs something on the source node.
> - *
> - * Methods:
> - *
> - * - DumpCopyRestore() is called on client side when the
> - *   pre-iterations are over and it's time to do full dump,
> - *   copy images and restore them on the server side.
> - *   All the time this method is executed victim tree is
> - *   frozen on client. Returning nil kills the tree, error
> - *   unfreezes it and resumes. The criu argument is the
> - *   pointer on created criu.Criu object on which client
> - *   may call Dump(). The requirement on opts passed are:
> - *          set Ps.Fd to comm.Memfd
> - *          set ParentImg to last_client_images_path
> - *          set TrackMem to true
> - */
> -type PhaulLocal interface {
> -	DumpCopyRestore(criu *criu.Criu, c PhaulConfig, last_client_images_path string) error
> -}
> diff --git a/phaul/src/phaul/client.go b/phaul/src/phaul/client.go
> deleted file mode 100644
> index 64beea7b..00000000
> --- a/phaul/src/phaul/client.go
> +++ /dev/null
> @@ -1,131 +0,0 @@
> -package phaul
> -
> -import (
> -	"fmt"
> -
> -	"github.com/golang/protobuf/proto"
> -	"github.com/checkpoint-restore/criu/lib/go/src/criu"
> -	"github.com/checkpoint-restore/criu/lib/go/src/rpc"
> -	"github.com/checkpoint-restore/criu/phaul/src/stats"
> -)
> -
> -const minPagesWritten uint64 = 64
> -const maxIters int = 8
> -const maxGrowDelta int64 = 32
> -
> -type PhaulClient struct {
> -	local  PhaulLocal
> -	remote PhaulRemote
> -	cfg    PhaulConfig
> -}
> -
> -/*
> - * Main entry point. Caller should create the client object by
> - * passing here local, remote and comm. See comment in corresponding
> - * interfaces/structs for explanation.
> - *
> - * Then call client.Migrate() and enjoy :)
> - */
> -func MakePhaulClient(l PhaulLocal, r PhaulRemote, c PhaulConfig) (*PhaulClient, error) {
> -	return &PhaulClient{local: l, remote: r, cfg: c}, nil
> -}
> -
> -func isLastIter(iter int, stats *stats.DumpStatsEntry, prev_stats *stats.DumpStatsEntry) bool {
> -	if iter >= maxIters {
> -		fmt.Printf("`- max iters reached\n")
> -		return true
> -	}
> -
> -	pagesWritten := stats.GetPagesWritten()
> -	if pagesWritten < minPagesWritten {
> -		fmt.Printf("`- tiny pre-dump (%d) reached\n", int(pagesWritten))
> -		return true
> -	}
> -
> -	pages_delta := int64(pagesWritten) - int64(prev_stats.GetPagesWritten())
> -	if pages_delta >= maxGrowDelta {
> -		fmt.Printf("`- grow iter (%d) reached\n", int(pages_delta))
> -		return true
> -	}
> -
> -	return false
> -}
> -
> -func (pc *PhaulClient) Migrate() error {
> -	criu := criu.MakeCriu()
> -	psi := rpc.CriuPageServerInfo{
> -		Fd: proto.Int32(int32(pc.cfg.Memfd)),
> -	}
> -	opts := rpc.CriuOpts{
> -		Pid:      proto.Int32(int32(pc.cfg.Pid)),
> -		LogLevel: proto.Int32(4),
> -		LogFile:  proto.String("pre-dump.log"),
> -		Ps:       &psi,
> -	}
> -
> -	err := criu.Prepare()
> -	if err != nil {
> -		return err
> -	}
> -
> -	defer criu.Cleanup()
> -
> -	imgs, err := preparePhaulImages(pc.cfg.Wdir)
> -	if err != nil {
> -		return err
> -	}
> -	prev_stats := &stats.DumpStatsEntry{}
> -	iter := 0
> -
> -	for {
> -		err = pc.remote.StartIter()
> -		if err != nil {
> -			return err
> -		}
> -
> -		prev_p := imgs.lastImagesDir()
> -		img_dir, err := imgs.openNextDir()
> -		if err != nil {
> -			return err
> -		}
> -
> -		opts.ImagesDirFd = proto.Int32(int32(img_dir.Fd()))
> -		if prev_p != "" {
> -			opts.ParentImg = proto.String(prev_p)
> -		}
> -
> -		err = criu.PreDump(opts, nil)
> -		img_dir.Close()
> -		if err != nil {
> -			return err
> -		}
> -
> -		err = pc.remote.StopIter()
> -		if err != nil {
> -			return err
> -		}
> -
> -		st, err := criuGetDumpStats(img_dir)
> -		if err != nil {
> -			return err
> -		}
> -
> -		if isLastIter(iter, st, prev_stats) {
> -			break
> -		}
> -
> -		prev_stats = st
> -	}
> -
> -	err = pc.remote.StartIter()
> -	if err == nil {
> -		prev_p := imgs.lastImagesDir()
> -		err = pc.local.DumpCopyRestore(criu, pc.cfg, prev_p)
> -		err2 := pc.remote.StopIter()
> -		if err == nil {
> -			err = err2
> -		}
> -	}
> -
> -	return err
> -}
> diff --git a/phaul/src/phaul/images.go b/phaul/src/phaul/images.go
> deleted file mode 100644
> index 5a433cac..00000000
> --- a/phaul/src/phaul/images.go
> +++ /dev/null
> @@ -1,41 +0,0 @@
> -package phaul
> -
> -import (
> -	"fmt"
> -	"os"
> -	"path/filepath"
> -)
> -
> -type images struct {
> -	cursor int
> -	dir    string
> -}
> -
> -func preparePhaulImages(wdir string) (*images, error) {
> -	return &images{dir: wdir}, nil
> -}
> -
> -func (i *images) getPath(idx int) string {
> -	return fmt.Sprintf(i.dir+"/%d", idx)
> -}
> -
> -func (i *images) openNextDir() (*os.File, error) {
> -	ipath := i.getPath(i.cursor)
> -	err := os.Mkdir(ipath, 0700)
> -	if err != nil {
> -		return nil, err
> -	}
> -
> -	i.cursor++
> -	return os.Open(ipath)
> -}
> -
> -func (i *images) lastImagesDir() string {
> -	var ret string
> -	if i.cursor == 0 {
> -		ret = ""
> -	} else {
> -		ret, _ = filepath.Abs(i.getPath(i.cursor - 1))
> -	}
> -	return ret
> -}
> diff --git a/phaul/src/phaul/server.go b/phaul/src/phaul/server.go
> deleted file mode 100644
> index 7449e634..00000000
> --- a/phaul/src/phaul/server.go
> +++ /dev/null
> @@ -1,103 +0,0 @@
> -package phaul
> -
> -import (
> -	"fmt"
> -	"os"
> -
> -	"github.com/golang/protobuf/proto"
> -	"github.com/checkpoint-restore/criu/lib/go/src/criu"
> -	"github.com/checkpoint-restore/criu/lib/go/src/rpc"
> -	"path/filepath"
> -)
> -
> -type PhaulServer struct {
> -	cfg     PhaulConfig
> -	imgs    *images
> -	cr      *criu.Criu
> -	process *os.Process
> -}
> -
> -/*
> - * Main entry point. Make the server with comm and call PhaulRemote
> - * methods on it upon client requests.
> - */
> -func MakePhaulServer(c PhaulConfig) (*PhaulServer, error) {
> -	img, err := preparePhaulImages(c.Wdir)
> -	if err != nil {
> -		return nil, err
> -	}
> -
> -	cr := criu.MakeCriu()
> -
> -	return &PhaulServer{imgs: img, cfg: c, cr: cr}, nil
> -}
> -
> -/*
> - * PhaulRemote methods
> - */
> -func (s *PhaulServer) StartIter() error {
> -	fmt.Printf("S: start iter\n")
> -	psi := rpc.CriuPageServerInfo{
> -		Fd: proto.Int32(int32(s.cfg.Memfd)),
> -	}
> -	opts := rpc.CriuOpts{
> -		LogLevel: proto.Int32(4),
> -		LogFile:  proto.String("ps.log"),
> -		Ps:       &psi,
> -	}
> -
> -	prev_p := s.imgs.lastImagesDir()
> -	img_dir, err := s.imgs.openNextDir()
> -	if err != nil {
> -		return err
> -	}
> -	defer img_dir.Close()
> -
> -	opts.ImagesDirFd = proto.Int32(int32(img_dir.Fd()))
> -	if prev_p != "" {
> -		p, err := filepath.Abs(img_dir.Name())
> -		if err != nil {
> -			return err
> -		}
> -		rel, err := filepath.Rel(p, prev_p)
> -		if err != nil {
> -			return err
> -		}
> -		opts.ParentImg = proto.String(rel)
> -	}
> -
> -	pid, _, err := s.cr.StartPageServerChld(opts)
> -	if err != nil {
> -		return err
> -	}
> -
> -	s.process, err = os.FindProcess(pid)
> -	if err != nil {
> -		return err
> -	}
> -
> -	return nil
> -}
> -
> -func (s *PhaulServer) StopIter() error {
> -	state, err := s.process.Wait()
> -	if err != nil {
> -		return nil
> -	}
> -
> -	if !state.Success() {
> -		return fmt.Errorf("page-server failed: %s", s)
> -	}
> -	return nil
> -}
> -
> -/*
> - * Server-local methods
> - */
> -func (s *PhaulServer) LastImagesDir() string {
> -	return s.imgs.lastImagesDir()
> -}
> -
> -func (s *PhaulServer) GetCriu() *criu.Criu {
> -	return s.cr
> -}
> diff --git a/phaul/src/phaul/stats.go b/phaul/src/phaul/stats.go
> deleted file mode 100644
> index af70f2ac..00000000
> --- a/phaul/src/phaul/stats.go
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -package phaul
> -
> -import (
> -	"os"
> -
> -	"github.com/golang/protobuf/proto"
> -	"github.com/checkpoint-restore/criu/phaul/src/stats"
> -)
> -
> -/* FIXME: report stats from CriuResp */
> -func criuGetDumpStats(img_dir *os.File) (*stats.DumpStatsEntry, error) {
> -	stf, err := os.Open(img_dir.Name() + "/stats-dump")
> -	if err != nil {
> -		return nil, err
> -	}
> -	defer stf.Close()
> -
> -	buf := make([]byte, 2*4096)
> -	sz, err := stf.Read(buf)
> -	if err != nil {
> -		return nil, err
> -	}
> -
> -	st := &stats.StatsEntry{}
> -	// Skip 2 magic values and entry size
> -	err = proto.Unmarshal(buf[12:sz], st)
> -	if err != nil {
> -		return nil, err
> -	}
> -
> -	return st.GetDump(), nil
> -}
> diff --git a/phaul/src/stats/stats.pb.go b/phaul/src/stats/stats.pb.go
> deleted file mode 100644
> index 4a7f3c08..00000000
> --- a/phaul/src/stats/stats.pb.go
> +++ /dev/null
> @@ -1,222 +0,0 @@
> -// Code generated by protoc-gen-go.
> -// source: stats.proto
> -// DO NOT EDIT!
> -
> -/*
> -Package stats is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	stats.proto
> -
> -It has these top-level messages:
> -	DumpStatsEntry
> -	RestoreStatsEntry
> -	StatsEntry
> -*/
> -package stats
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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
> -
> -// This one contains statistics about dump/restore process
> -type DumpStatsEntry struct {
> -	FreezingTime       *uint32 `protobuf:"varint,1,req,name=freezing_time,json=freezingTime" json:"freezing_time,omitempty"`
> -	FrozenTime         *uint32 `protobuf:"varint,2,req,name=frozen_time,json=frozenTime" json:"frozen_time,omitempty"`
> -	MemdumpTime        *uint32 `protobuf:"varint,3,req,name=memdump_time,json=memdumpTime" json:"memdump_time,omitempty"`
> -	MemwriteTime       *uint32 `protobuf:"varint,4,req,name=memwrite_time,json=memwriteTime" json:"memwrite_time,omitempty"`
> -	PagesScanned       *uint64 `protobuf:"varint,5,req,name=pages_scanned,json=pagesScanned" json:"pages_scanned,omitempty"`
> -	PagesSkippedParent *uint64 `protobuf:"varint,6,req,name=pages_skipped_parent,json=pagesSkippedParent" json:"pages_skipped_parent,omitempty"`
> -	PagesWritten       *uint64 `protobuf:"varint,7,req,name=pages_written,json=pagesWritten" json:"pages_written,omitempty"`
> -	IrmapResolve       *uint32 `protobuf:"varint,8,opt,name=irmap_resolve,json=irmapResolve" json:"irmap_resolve,omitempty"`
> -	PagesLazy          *uint64 `protobuf:"varint,9,req,name=pages_lazy,json=pagesLazy" json:"pages_lazy,omitempty"`
> -	XXX_unrecognized   []byte  `json:"-"`
> -}
> -
> -func (m *DumpStatsEntry) Reset()                    { *m = DumpStatsEntry{} }
> -func (m *DumpStatsEntry) String() string            { return proto.CompactTextString(m) }
> -func (*DumpStatsEntry) ProtoMessage()               {}
> -func (*DumpStatsEntry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -func (m *DumpStatsEntry) GetFreezingTime() uint32 {
> -	if m != nil && m.FreezingTime != nil {
> -		return *m.FreezingTime
> -	}
> -	return 0
> -}
> -
> -func (m *DumpStatsEntry) GetFrozenTime() uint32 {
> -	if m != nil && m.FrozenTime != nil {
> -		return *m.FrozenTime
> -	}
> -	return 0
> -}
> -
> -func (m *DumpStatsEntry) GetMemdumpTime() uint32 {
> -	if m != nil && m.MemdumpTime != nil {
> -		return *m.MemdumpTime
> -	}
> -	return 0
> -}
> -
> -func (m *DumpStatsEntry) GetMemwriteTime() uint32 {
> -	if m != nil && m.MemwriteTime != nil {
> -		return *m.MemwriteTime
> -	}
> -	return 0
> -}
> -
> -func (m *DumpStatsEntry) GetPagesScanned() uint64 {
> -	if m != nil && m.PagesScanned != nil {
> -		return *m.PagesScanned
> -	}
> -	return 0
> -}
> -
> -func (m *DumpStatsEntry) GetPagesSkippedParent() uint64 {
> -	if m != nil && m.PagesSkippedParent != nil {
> -		return *m.PagesSkippedParent
> -	}
> -	return 0
> -}
> -
> -func (m *DumpStatsEntry) GetPagesWritten() uint64 {
> -	if m != nil && m.PagesWritten != nil {
> -		return *m.PagesWritten
> -	}
> -	return 0
> -}
> -
> -func (m *DumpStatsEntry) GetIrmapResolve() uint32 {
> -	if m != nil && m.IrmapResolve != nil {
> -		return *m.IrmapResolve
> -	}
> -	return 0
> -}
> -
> -func (m *DumpStatsEntry) GetPagesLazy() uint64 {
> -	if m != nil && m.PagesLazy != nil {
> -		return *m.PagesLazy
> -	}
> -	return 0
> -}
> -
> -type RestoreStatsEntry struct {
> -	PagesCompared    *uint64 `protobuf:"varint,1,req,name=pages_compared,json=pagesCompared" json:"pages_compared,omitempty"`
> -	PagesSkippedCow  *uint64 `protobuf:"varint,2,req,name=pages_skipped_cow,json=pagesSkippedCow" json:"pages_skipped_cow,omitempty"`
> -	ForkingTime      *uint32 `protobuf:"varint,3,req,name=forking_time,json=forkingTime" json:"forking_time,omitempty"`
> -	RestoreTime      *uint32 `protobuf:"varint,4,req,name=restore_time,json=restoreTime" json:"restore_time,omitempty"`
> -	PagesRestored    *uint64 `protobuf:"varint,5,opt,name=pages_restored,json=pagesRestored" json:"pages_restored,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *RestoreStatsEntry) Reset()                    { *m = RestoreStatsEntry{} }
> -func (m *RestoreStatsEntry) String() string            { return proto.CompactTextString(m) }
> -func (*RestoreStatsEntry) ProtoMessage()               {}
> -func (*RestoreStatsEntry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -
> -func (m *RestoreStatsEntry) GetPagesCompared() uint64 {
> -	if m != nil && m.PagesCompared != nil {
> -		return *m.PagesCompared
> -	}
> -	return 0
> -}
> -
> -func (m *RestoreStatsEntry) GetPagesSkippedCow() uint64 {
> -	if m != nil && m.PagesSkippedCow != nil {
> -		return *m.PagesSkippedCow
> -	}
> -	return 0
> -}
> -
> -func (m *RestoreStatsEntry) GetForkingTime() uint32 {
> -	if m != nil && m.ForkingTime != nil {
> -		return *m.ForkingTime
> -	}
> -	return 0
> -}
> -
> -func (m *RestoreStatsEntry) GetRestoreTime() uint32 {
> -	if m != nil && m.RestoreTime != nil {
> -		return *m.RestoreTime
> -	}
> -	return 0
> -}
> -
> -func (m *RestoreStatsEntry) GetPagesRestored() uint64 {
> -	if m != nil && m.PagesRestored != nil {
> -		return *m.PagesRestored
> -	}
> -	return 0
> -}
> -
> -type StatsEntry struct {
> -	Dump             *DumpStatsEntry    `protobuf:"bytes,1,opt,name=dump" json:"dump,omitempty"`
> -	Restore          *RestoreStatsEntry `protobuf:"bytes,2,opt,name=restore" json:"restore,omitempty"`
> -	XXX_unrecognized []byte             `json:"-"`
> -}
> -
> -func (m *StatsEntry) Reset()                    { *m = StatsEntry{} }
> -func (m *StatsEntry) String() string            { return proto.CompactTextString(m) }
> -func (*StatsEntry) ProtoMessage()               {}
> -func (*StatsEntry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
> -
> -func (m *StatsEntry) GetDump() *DumpStatsEntry {
> -	if m != nil {
> -		return m.Dump
> -	}
> -	return nil
> -}
> -
> -func (m *StatsEntry) GetRestore() *RestoreStatsEntry {
> -	if m != nil {
> -		return m.Restore
> -	}
> -	return nil
> -}
> -
> -func init() {
> -	proto.RegisterType((*DumpStatsEntry)(nil), "dump_stats_entry")
> -	proto.RegisterType((*RestoreStatsEntry)(nil), "restore_stats_entry")
> -	proto.RegisterType((*StatsEntry)(nil), "stats_entry")
> -}
> -
> -func init() { proto.RegisterFile("stats.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 362 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xc1, 0x4e, 0xe3, 0x30,
> -	0x10, 0x86, 0x95, 0x6c, 0x76, 0xbb, 0x9d, 0xb4, 0x40, 0x43, 0x0f, 0xbe, 0x20, 0x42, 0x2b, 0xa4,
> -	0x8a, 0x43, 0x84, 0x78, 0x85, 0x5e, 0x39, 0x20, 0x83, 0xc4, 0x31, 0x8a, 0x9a, 0x69, 0x15, 0xb5,
> -	0x8e, 0x2d, 0xc7, 0x50, 0x35, 0xef, 0xc9, 0x9d, 0x47, 0x41, 0x1e, 0x3b, 0xa1, 0x45, 0x5c, 0x3f,
> -	0x7f, 0x99, 0xfc, 0xfe, 0xc7, 0x10, 0x37, 0xa6, 0x30, 0x4d, 0xa6, 0xb4, 0x34, 0x72, 0xf6, 0x19,
> -	0xc2, 0x45, 0xf9, 0x26, 0x54, 0x4e, 0x30, 0xc7, 0xda, 0xe8, 0x43, 0x32, 0x87, 0xf1, 0x5a, 0x23,
> -	0xb6, 0x55, 0xbd, 0xc9, 0x4d, 0x25, 0x90, 0x05, 0x69, 0xb8, 0x18, 0xf3, 0x51, 0x07, 0x5f, 0x2a,
> -	0x81, 0xc9, 0x35, 0xc4, 0x6b, 0x2d, 0x5b, 0xac, 0x9d, 0x12, 0x92, 0x02, 0x0e, 0x91, 0x70, 0x03,
> -	0x23, 0x81, 0x82, 0x86, 0x93, 0xf1, 0x87, 0x8c, 0xd8, 0x33, 0x52, 0xe6, 0x30, 0x16, 0x28, 0xf6,
> -	0xba, 0x32, 0xe8, 0x9c, 0xc8, 0xfd, 0xa8, 0x83, 0x9d, 0xa4, 0x8a, 0x0d, 0x36, 0x79, 0xb3, 0x2a,
> -	0xea, 0x1a, 0x4b, 0xf6, 0x37, 0x0d, 0x17, 0x11, 0x1f, 0x11, 0x7c, 0x76, 0x2c, 0xb9, 0x87, 0xa9,
> -	0x97, 0xb6, 0x95, 0x52, 0x58, 0xe6, 0xaa, 0xd0, 0x58, 0x1b, 0xf6, 0x8f, 0xdc, 0xc4, 0xb9, 0xee,
> -	0xe8, 0x89, 0x4e, 0xbe, 0xc7, 0xda, 0x3f, 0x19, 0xac, 0xd9, 0xe0, 0x68, 0xec, 0xab, 0x63, 0x56,
> -	0xaa, 0xb4, 0x28, 0x54, 0xae, 0xb1, 0x91, 0xbb, 0x77, 0x64, 0xff, 0xd3, 0xc0, 0x06, 0x24, 0xc8,
> -	0x1d, 0x4b, 0xae, 0x00, 0xdc, 0xa4, 0x5d, 0xd1, 0x1e, 0xd8, 0x90, 0xc6, 0x0c, 0x89, 0x3c, 0x16,
> -	0xed, 0x61, 0xf6, 0x11, 0xc0, 0xa5, 0xc6, 0xc6, 0x48, 0x8d, 0x27, 0x2d, 0xdf, 0xc2, 0x99, 0xfb,
> -	0x6c, 0x25, 0x85, 0x4d, 0x5b, 0x52, 0xcd, 0x11, 0x77, 0xb1, 0x96, 0x1e, 0x26, 0x77, 0x30, 0x39,
> -	0xbd, 0xd9, 0x4a, 0xee, 0xa9, 0xed, 0x88, 0x9f, 0x1f, 0x5f, 0x6b, 0x29, 0xf7, 0xb6, 0xf2, 0xb5,
> -	0xd4, 0xdb, 0x7e, 0x6f, 0xbe, 0x72, 0xcf, 0xba, 0xad, 0x74, 0x61, 0x8e, 0x1a, 0x8f, 0x3d, 0x23,
> -	0xa5, 0x0f, 0xe6, 0xa1, 0x6d, 0x3c, 0xe8, 0x83, 0x71, 0x0f, 0x67, 0xa5, 0x7f, 0x49, 0xfd, 0x75,
> -	0x22, 0xbb, 0x57, 0x16, 0xa4, 0xc1, 0x22, 0x7e, 0x98, 0x64, 0x3f, 0x5f, 0x15, 0xa7, 0xe3, 0x24,
> -	0x83, 0x81, 0x1f, 0xcb, 0x42, 0x32, 0xa7, 0xd9, 0x2f, 0xe5, 0xf0, 0x4e, 0xfa, 0x0a, 0x00, 0x00,
> -	0xff, 0xff, 0x61, 0xbd, 0xc8, 0x4b, 0xae, 0x02, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/Makefile b/phaul/src/test/Makefile
> deleted file mode 100644
> index cf7f6c7e..00000000
> --- a/phaul/src/test/Makefile
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -all:
> -	go build -o test .
> diff --git a/phaul/src/test/main.go b/phaul/src/test/main.go
> deleted file mode 100644
> index 2f8d74a5..00000000
> --- a/phaul/src/test/main.go
> +++ /dev/null
> @@ -1,192 +0,0 @@
> -package main
> -
> -import (
> -	"fmt"
> -	"os"
> -	"strconv"
> -	"strings"
> -	"syscall"
> -
> -	"github.com/golang/protobuf/proto"
> -	"github.com/checkpoint-restore/criu/lib/go/src/criu"
> -	"github.com/checkpoint-restore/criu/lib/go/src/rpc"
> -	"github.com/checkpoint-restore/criu/phaul/src/phaul"
> -)
> -
> -type testLocal struct {
> -	criu.CriuNoNotify
> -	r *testRemote
> -}
> -
> -type testRemote struct {
> -	srv *phaul.PhaulServer
> -}
> -
> -/* Dir where test will put dump images */
> -const images_dir = "test_images"
> -
> -func prepareImages() error {
> -	err := os.Mkdir(images_dir, 0700)
> -	if err != nil {
> -		return err
> -	}
> -
> -	/* Work dir for PhaulClient */
> -	err = os.Mkdir(images_dir+"/local", 0700)
> -	if err != nil {
> -		return err
> -	}
> -
> -	/* Work dir for PhaulServer */
> -	err = os.Mkdir(images_dir+"/remote", 0700)
> -	if err != nil {
> -		return err
> -	}
> -
> -	/* Work dir for DumpCopyRestore */
> -	err = os.Mkdir(images_dir+"/test", 0700)
> -	if err != nil {
> -		return err
> -	}
> -
> -	return nil
> -}
> -
> -func mergeImages(dump_dir, last_pre_dump_dir string) error {
> -	idir, err := os.Open(dump_dir)
> -	if err != nil {
> -		return err
> -	}
> -
> -	defer idir.Close()
> -
> -	imgs, err := idir.Readdirnames(0)
> -	if err != nil {
> -		return err
> -	}
> -
> -	for _, fname := range imgs {
> -		if !strings.HasSuffix(fname, ".img") {
> -			continue
> -		}
> -
> -		fmt.Printf("\t%s -> %s/\n", fname, last_pre_dump_dir)
> -		err = syscall.Link(dump_dir+"/"+fname, last_pre_dump_dir+"/"+fname)
> -		if err != nil {
> -			return err
> -		}
> -	}
> -
> -	return nil
> -}
> -
> -func (r *testRemote) doRestore() error {
> -	last_srv_images_dir := r.srv.LastImagesDir()
> -	/*
> -	 * In images_dir we have images from dump, in the
> -	 * last_srv_images_dir -- where server-side images
> -	 * (from page server, with pages and pagemaps) are.
> -	 * Need to put former into latter and restore from
> -	 * them.
> -	 */
> -	err := mergeImages(images_dir+"/test", last_srv_images_dir)
> -	if err != nil {
> -		return err
> -	}
> -
> -	img_dir, err := os.Open(last_srv_images_dir)
> -	if err != nil {
> -		return err
> -	}
> -	defer img_dir.Close()
> -
> -	opts := rpc.CriuOpts{
> -		LogLevel:    proto.Int32(4),
> -		LogFile:     proto.String("restore.log"),
> -		ImagesDirFd: proto.Int32(int32(img_dir.Fd())),
> -	}
> -
> -	cr := r.srv.GetCriu()
> -	fmt.Printf("Do restore\n")
> -	return cr.Restore(opts, nil)
> -}
> -
> -func (l *testLocal) PostDump() error {
> -	return l.r.doRestore()
> -}
> -
> -func (l *testLocal) DumpCopyRestore(cr *criu.Criu, cfg phaul.PhaulConfig, last_cln_images_dir string) error {
> -	fmt.Printf("Final stage\n")
> -
> -	img_dir, err := os.Open(images_dir + "/test")
> -	if err != nil {
> -		return err
> -	}
> -	defer img_dir.Close()
> -
> -	psi := rpc.CriuPageServerInfo{
> -		Fd: proto.Int32(int32(cfg.Memfd)),
> -	}
> -
> -	opts := rpc.CriuOpts{
> -		Pid:         proto.Int32(int32(cfg.Pid)),
> -		LogLevel:    proto.Int32(4),
> -		LogFile:     proto.String("dump.log"),
> -		ImagesDirFd: proto.Int32(int32(img_dir.Fd())),
> -		TrackMem:    proto.Bool(true),
> -		ParentImg:   proto.String(last_cln_images_dir),
> -		Ps:          &psi,
> -	}
> -
> -	fmt.Printf("Do dump\n")
> -	return cr.Dump(opts, l)
> -}
> -
> -func main() {
> -	pid, _ := strconv.Atoi(os.Args[1])
> -	fds, err := syscall.Socketpair(syscall.AF_LOCAL, syscall.SOCK_STREAM, 0)
> -	if err != nil {
> -		fmt.Printf("Can't make socketpair: %v\n", err)
> -		os.Exit(1)
> -	}
> -
> -	err = prepareImages()
> -	if err != nil {
> -		fmt.Printf("Can't prepare dirs for images: %v\n", err)
> -		os.Exit(1)
> -		return
> -	}
> -
> -	fmt.Printf("Make server part (socket %d)\n", fds[1])
> -	srv, err := phaul.MakePhaulServer(phaul.PhaulConfig{
> -		Pid:   pid,
> -		Memfd: fds[1],
> -		Wdir:  images_dir + "/remote"})
> -	if err != nil {
> -		fmt.Printf("Unable to run a server: %v", err)
> -		os.Exit(1)
> -		return
> -	}
> -
> -	r := &testRemote{srv}
> -
> -	fmt.Printf("Make client part (socket %d)\n", fds[0])
> -	cln, err := phaul.MakePhaulClient(&testLocal{r: r}, srv,
> -		phaul.PhaulConfig{
> -			Pid:   pid,
> -			Memfd: fds[0],
> -			Wdir:  images_dir + "/local"})
> -	if err != nil {
> -		fmt.Printf("Unable to run a client: %v\n", err)
> -		os.Exit(1)
> -	}
> -
> -	fmt.Printf("Migrate\n")
> -	err = cln.Migrate()
> -	if err != nil {
> -		fmt.Printf("Failed: %v\n", err)
> -		os.Exit(1)
> -	}
> -
> -	fmt.Printf("SUCCESS!\n")
> -}
> diff --git a/phaul/src/test/vendor/github.com/checkpoint-restore/criu b/phaul/src/test/vendor/github.com/checkpoint-restore/criu
> deleted file mode 120000
> index 477cbaad..00000000
> --- a/phaul/src/test/vendor/github.com/checkpoint-restore/criu
> +++ /dev/null
> @@ -1 +0,0 @@
> -../../../../../../
> \ No newline at end of file
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/.gitignore b/phaul/src/test/vendor/github.com/golang/protobuf/.gitignore
> deleted file mode 100644
> index 8f5b596b..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/.gitignore
> +++ /dev/null
> @@ -1,16 +0,0 @@
> -.DS_Store
> -*.[568ao]
> -*.ao
> -*.so
> -*.pyc
> -._*
> -.nfs.*
> -[568a].out
> -*~
> -*.orig
> -core
> -_obj
> -_test
> -_testmain.go
> -protoc-gen-go/testdata/multi/*.pb.go
> -_conformance/_conformance
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/.travis.yml b/phaul/src/test/vendor/github.com/golang/protobuf/.travis.yml
> deleted file mode 100644
> index 93c67805..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/.travis.yml
> +++ /dev/null
> @@ -1,18 +0,0 @@
> -sudo: false
> -language: go
> -go:
> -- 1.6.x
> -- 1.7.x
> -- 1.8.x
> -- 1.9.x
> -
> -install:
> -  - go get -v -d -t github.com/golang/protobuf/...
> -  - curl -L https://github.com/google/protobuf/releases/download/v3.3.0/protoc-3.3.0-linux-x86_64.zip -o /tmp/protoc.zip
> -  - unzip /tmp/protoc.zip -d $HOME/protoc
> -
> -env:
> -  - PATH=$HOME/protoc/bin:$PATH
> -
> -script:
> -  - make all test
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/AUTHORS b/phaul/src/test/vendor/github.com/golang/protobuf/AUTHORS
> deleted file mode 100644
> index 15167cd7..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/AUTHORS
> +++ /dev/null
> @@ -1,3 +0,0 @@
> -# This source code refers to The Go Authors for copyright purposes.
> -# The master list of authors is in the main Go distribution,
> -# visible at http://tip.golang.org/AUTHORS.
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/CONTRIBUTORS b/phaul/src/test/vendor/github.com/golang/protobuf/CONTRIBUTORS
> deleted file mode 100644
> index 1c4577e9..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/CONTRIBUTORS
> +++ /dev/null
> @@ -1,3 +0,0 @@
> -# This source code was written by the Go contributors.
> -# The master list of contributors is in the main Go distribution,
> -# visible at http://tip.golang.org/CONTRIBUTORS.
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/LICENSE b/phaul/src/test/vendor/github.com/golang/protobuf/LICENSE
> deleted file mode 100644
> index 1b1b1921..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/LICENSE
> +++ /dev/null
> @@ -1,31 +0,0 @@
> -Go support for Protocol Buffers - Google's data interchange format
> -
> -Copyright 2010 The Go Authors.  All rights reserved.
> -https://github.com/golang/protobuf
> -
> -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 Google Inc. 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
> -OWNER 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/phaul/src/test/vendor/github.com/golang/protobuf/Make.protobuf b/phaul/src/test/vendor/github.com/golang/protobuf/Make.protobuf
> deleted file mode 100644
> index 15071de1..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/Make.protobuf
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2010 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -# Includable Makefile to add a rule for generating .pb.go files from .proto files
> -# (Google protocol buffer descriptions).
> -# Typical use if myproto.proto is a file in package mypackage in this directory:
> -#
> -#	include $(GOROOT)/src/pkg/github.com/golang/protobuf/Make.protobuf
> -
> -%.pb.go:	%.proto
> -	protoc --go_out=. $<
> -
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/Makefile b/phaul/src/test/vendor/github.com/golang/protobuf/Makefile
> deleted file mode 100644
> index a1421d8b..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/Makefile
> +++ /dev/null
> @@ -1,55 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2010 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -
> -all:	install
> -
> -install:
> -	go install ./proto ./jsonpb ./ptypes
> -	go install ./protoc-gen-go
> -
> -test:
> -	go test ./proto ./jsonpb ./ptypes
> -	make -C protoc-gen-go/testdata test
> -
> -clean:
> -	go clean ./...
> -
> -nuke:
> -	go clean -i ./...
> -
> -regenerate:
> -	make -C protoc-gen-go/descriptor regenerate
> -	make -C protoc-gen-go/plugin regenerate
> -	make -C protoc-gen-go/testdata regenerate
> -	make -C proto/testdata regenerate
> -	make -C jsonpb/jsonpb_test_proto regenerate
> -	make -C _conformance regenerate
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/README.md b/phaul/src/test/vendor/github.com/golang/protobuf/README.md
> deleted file mode 100644
> index 207eb6b4..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/README.md
> +++ /dev/null
> @@ -1,243 +0,0 @@
> -# Go support for Protocol Buffers
> -
> -[![Build Status](https://travis-ci.org/golang/protobuf.svg?branch=master)](https://travis-ci.org/golang/protobuf)
> -
> -Google's data interchange format.
> -Copyright 2010 The Go Authors.
> -https://github.com/golang/protobuf
> -
> -This package and the code it generates requires at least Go 1.4.
> -
> -This software implements Go bindings for protocol buffers.  For
> -information about protocol buffers themselves, see
> -	https://developers.google.com/protocol-buffers/
> -
> -## Installation ##
> -
> -To use this software, you must:
> -- Install the standard C++ implementation of protocol buffers from
> -	https://developers.google.com/protocol-buffers/
> -- Of course, install the Go compiler and tools from
> -	https://golang.org/
> -  See
> -	https://golang.org/doc/install
> -  for details or, if you are using gccgo, follow the instructions at
> -	https://golang.org/doc/install/gccgo
> -- Grab the code from the repository and install the proto package.
> -  The simplest way is to run `go get -u github.com/golang/protobuf/protoc-gen-go`.
> -  The compiler plugin, protoc-gen-go, will be installed in $GOBIN,
> -  defaulting to $GOPATH/bin.  It must be in your $PATH for the protocol
> -  compiler, protoc, to find it.
> -
> -This software has two parts: a 'protocol compiler plugin' that
> -generates Go source files that, once compiled, can access and manage
> -protocol buffers; and a library that implements run-time support for
> -encoding (marshaling), decoding (unmarshaling), and accessing protocol
> -buffers.
> -
> -There is support for gRPC in Go using protocol buffers.
> -See the note at the bottom of this file for details.
> -
> -There are no insertion points in the plugin.
> -
> -
> -## Using protocol buffers with Go ##
> -
> -Once the software is installed, there are two steps to using it.
> -First you must compile the protocol buffer definitions and then import
> -them, with the support library, into your program.
> -
> -To compile the protocol buffer definition, run protoc with the --go_out
> -parameter set to the directory you want to output the Go code to.
> -
> -	protoc --go_out=. *.proto
> -
> -The generated files will be suffixed .pb.go.  See the Test code below
> -for an example using such a file.
> -
> -
> -The package comment for the proto library contains text describing
> -the interface provided in Go for protocol buffers. Here is an edited
> -version.
> -
> -==========
> -
> -The proto package converts data structures to and from the
> -wire format of protocol buffers.  It works in concert with the
> -Go source code generated for .proto files by the protocol compiler.
> -
> -A summary of the properties of the protocol buffer interface
> -for a protocol buffer variable v:
> -
> -  - Names are turned from camel_case to CamelCase for export.
> -  - There are no methods on v to set fields; just treat
> -  	them as structure fields.
> -  - There are getters that return a field's value if set,
> -	and return the field's default value if unset.
> -	The getters work even if the receiver is a nil message.
> -  - The zero value for a struct is its correct initialization state.
> -	All desired fields must be set before marshaling.
> -  - A Reset() method will restore a protobuf struct to its zero state.
> -  - Non-repeated fields are pointers to the values; nil means unset.
> -	That is, optional or required field int32 f becomes F *int32.
> -  - Repeated fields are slices.
> -  - Helper functions are available to aid the setting of fields.
> -	Helpers for getting values are superseded by the
> -	GetFoo methods and their use is deprecated.
> -		msg.Foo = proto.String("hello") // set field
> -  - Constants are defined to hold the default values of all fields that
> -	have them.  They have the form Default_StructName_FieldName.
> -	Because the getter methods handle defaulted values,
> -	direct use of these constants should be rare.
> -  - Enums are given type names and maps from names to values.
> -	Enum values are prefixed with the enum's type name. Enum types have
> -	a String method, and a Enum method to assist in message construction.
> -  - Nested groups and enums have type names prefixed with the name of
> -  	the surrounding message type.
> -  - Extensions are given descriptor names that start with E_,
> -	followed by an underscore-delimited list of the nested messages
> -	that contain it (if any) followed by the CamelCased name of the
> -	extension field itself.  HasExtension, ClearExtension, GetExtension
> -	and SetExtension are functions for manipulating extensions.
> -  - Oneof field sets are given a single field in their message,
> -	with distinguished wrapper types for each possible field value.
> -  - Marshal and Unmarshal are functions to encode and decode the wire format.
> -
> -When the .proto file specifies `syntax="proto3"`, there are some differences:
> -
> -  - Non-repeated fields of non-message type are values instead of pointers.
> -  - Enum types do not get an Enum method.
> -
> -Consider file test.proto, containing
> -
> -```proto
> -	syntax = "proto2";
> -	package example;
> -	
> -	enum FOO { X = 17; };
> -	
> -	message Test {
> -	  required string label = 1;
> -	  optional int32 type = 2 [default=77];
> -	  repeated int64 reps = 3;
> -	  optional group OptionalGroup = 4 {
> -	    required string RequiredField = 5;
> -	  }
> -	}
> -```
> -
> -To create and play with a Test object from the example package,
> -
> -```go
> -	package main
> -
> -	import (
> -		"log"
> -
> -		"github.com/golang/protobuf/proto"
> -		"path/to/example"
> -	)
> -
> -	func main() {
> -		test := &example.Test {
> -			Label: proto.String("hello"),
> -			Type:  proto.Int32(17),
> -			Reps:  []int64{1, 2, 3},
> -			Optionalgroup: &example.Test_OptionalGroup {
> -				RequiredField: proto.String("good bye"),
> -			},
> -		}
> -		data, err := proto.Marshal(test)
> -		if err != nil {
> -			log.Fatal("marshaling error: ", err)
> -		}
> -		newTest := &example.Test{}
> -		err = proto.Unmarshal(data, newTest)
> -		if err != nil {
> -			log.Fatal("unmarshaling error: ", err)
> -		}
> -		// Now test and newTest contain the same data.
> -		if test.GetLabel() != newTest.GetLabel() {
> -			log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
> -		}
> -		// etc.
> -	}
> -```
> -
> -## Parameters ##
> -
> -To pass extra parameters to the plugin, use a comma-separated
> -parameter list separated from the output directory by a colon:
> -
> -
> -	protoc --go_out=plugins=grpc,import_path=mypackage:. *.proto
> -
> -
> -- `import_prefix=xxx` - a prefix that is added onto the beginning of
> -  all imports. Useful for things like generating protos in a
> -  subdirectory, or regenerating vendored protobufs in-place.
> -- `import_path=foo/bar` - used as the package if no input files
> -  declare `go_package`. If it contains slashes, everything up to the
> -  rightmost slash is ignored.
> -- `plugins=plugin1+plugin2` - specifies the list of sub-plugins to
> -  load. The only plugin in this repo is `grpc`.
> -- `Mfoo/bar.proto=quux/shme` - declares that foo/bar.proto is
> -  associated with Go package quux/shme.  This is subject to the
> -  import_prefix parameter.
> -
> -## gRPC Support ##
> -
> -If a proto file specifies RPC services, protoc-gen-go can be instructed to
> -generate code compatible with gRPC (http://www.grpc.io/). To do this, pass
> -the `plugins` parameter to protoc-gen-go; the usual way is to insert it into
> -the --go_out argument to protoc:
> -
> -	protoc --go_out=plugins=grpc:. *.proto
> -
> -## Compatibility ##
> -
> -The library and the generated code are expected to be stable over time.
> -However, we reserve the right to make breaking changes without notice for the
> -following reasons:
> -
> -- Security. A security issue in the specification or implementation may come to
> -  light whose resolution requires breaking compatibility. We reserve the right
> -  to address such security issues.
> -- Unspecified behavior.  There are some aspects of the Protocol Buffers
> -  specification that are undefined.  Programs that depend on such unspecified
> -  behavior may break in future releases.
> -- Specification errors or changes. If it becomes necessary to address an
> -  inconsistency, incompleteness, or change in the Protocol Buffers
> -  specification, resolving the issue could affect the meaning or legality of
> -  existing programs.  We reserve the right to address such issues, including
> -  updating the implementations.
> -- Bugs.  If the library has a bug that violates the specification, a program
> -  that depends on the buggy behavior may break if the bug is fixed.  We reserve
> -  the right to fix such bugs.
> -- Adding methods or fields to generated structs.  These may conflict with field
> -  names that already exist in a schema, causing applications to break.  When the
> -  code generator encounters a field in the schema that would collide with a
> -  generated field or method name, the code generator will append an underscore
> -  to the generated field or method name.
> -- Adding, removing, or changing methods or fields in generated structs that
> -  start with `XXX`.  These parts of the generated code are exported out of
> -  necessity, but should not be considered part of the public API.
> -- Adding, removing, or changing unexported symbols in generated code.
> -
> -Any breaking changes outside of these will be announced 6 months in advance to
> -protobuf at googlegroups.com.
> -
> -You should, whenever possible, use generated code created by the `protoc-gen-go`
> -tool built at the same commit as the `proto` package.  The `proto` package
> -declares package-level constants in the form `ProtoPackageIsVersionX`.
> -Application code and generated code may depend on one of these constants to
> -ensure that compilation will fail if the available version of the proto library
> -is too old.  Whenever we make a change to the generated code that requires newer
> -library support, in the same commit we will increment the version number of the
> -generated code and declare a new package-level constant whose name incorporates
> -the latest version number.  Removing a compatibility constant is considered a
> -breaking change and would be subject to the announcement policy stated above.
> -
> -The `protoc-gen-go/generator` package exposes a plugin interface,
> -which is used by the gRPC code generation. This interface is not
> -supported and is subject to incompatible changes without notice.
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/Makefile b/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/Makefile
> deleted file mode 100644
> index 89800e2d..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/Makefile
> +++ /dev/null
> @@ -1,33 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2016 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -regenerate:
> -	protoc --go_out=Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any,Mgoogle/protobuf/duration.proto=github.com/golang/protobuf/ptypes/duration,Mgoogle/protobuf/struct.proto=github.com/golang/protobuf/ptypes/struct,Mgoogle/protobuf/timestamp.proto=github.com/golang/protobuf/ptypes/timestamp,Mgoogle/protobuf/wrappers.proto=github.com/golang/protobuf/ptypes/wrappers,Mgoogle/protobuf/field_mask.proto=google.golang.org/genproto/protobuf:. conformance_proto/conformance.proto
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance.go b/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance.go
> deleted file mode 100644
> index c54212c8..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance.go
> +++ /dev/null
> @@ -1,161 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2016 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// conformance implements the conformance test subprocess protocol as
> -// documented in conformance.proto.
> -package main
> -
> -import (
> -	"encoding/binary"
> -	"fmt"
> -	"io"
> -	"os"
> -
> -	pb "github.com/golang/protobuf/_conformance/conformance_proto"
> -	"github.com/golang/protobuf/jsonpb"
> -	"github.com/golang/protobuf/proto"
> -)
> -
> -func main() {
> -	var sizeBuf [4]byte
> -	inbuf := make([]byte, 0, 4096)
> -	outbuf := proto.NewBuffer(nil)
> -	for {
> -		if _, err := io.ReadFull(os.Stdin, sizeBuf[:]); err == io.EOF {
> -			break
> -		} else if err != nil {
> -			fmt.Fprintln(os.Stderr, "go conformance: read request:", err)
> -			os.Exit(1)
> -		}
> -		size := binary.LittleEndian.Uint32(sizeBuf[:])
> -		if int(size) > cap(inbuf) {
> -			inbuf = make([]byte, size)
> -		}
> -		inbuf = inbuf[:size]
> -		if _, err := io.ReadFull(os.Stdin, inbuf); err != nil {
> -			fmt.Fprintln(os.Stderr, "go conformance: read request:", err)
> -			os.Exit(1)
> -		}
> -
> -		req := new(pb.ConformanceRequest)
> -		if err := proto.Unmarshal(inbuf, req); err != nil {
> -			fmt.Fprintln(os.Stderr, "go conformance: parse request:", err)
> -			os.Exit(1)
> -		}
> -		res := handle(req)
> -
> -		if err := outbuf.Marshal(res); err != nil {
> -			fmt.Fprintln(os.Stderr, "go conformance: marshal response:", err)
> -			os.Exit(1)
> -		}
> -		binary.LittleEndian.PutUint32(sizeBuf[:], uint32(len(outbuf.Bytes())))
> -		if _, err := os.Stdout.Write(sizeBuf[:]); err != nil {
> -			fmt.Fprintln(os.Stderr, "go conformance: write response:", err)
> -			os.Exit(1)
> -		}
> -		if _, err := os.Stdout.Write(outbuf.Bytes()); err != nil {
> -			fmt.Fprintln(os.Stderr, "go conformance: write response:", err)
> -			os.Exit(1)
> -		}
> -		outbuf.Reset()
> -	}
> -}
> -
> -var jsonMarshaler = jsonpb.Marshaler{
> -	OrigName: true,
> -}
> -
> -func handle(req *pb.ConformanceRequest) *pb.ConformanceResponse {
> -	var err error
> -	var msg pb.TestAllTypes
> -	switch p := req.Payload.(type) {
> -	case *pb.ConformanceRequest_ProtobufPayload:
> -		err = proto.Unmarshal(p.ProtobufPayload, &msg)
> -	case *pb.ConformanceRequest_JsonPayload:
> -		err = jsonpb.UnmarshalString(p.JsonPayload, &msg)
> -		if err != nil && err.Error() == "unmarshaling Any not supported yet" {
> -			return &pb.ConformanceResponse{
> -				Result: &pb.ConformanceResponse_Skipped{
> -					Skipped: err.Error(),
> -				},
> -			}
> -		}
> -	default:
> -		return &pb.ConformanceResponse{
> -			Result: &pb.ConformanceResponse_RuntimeError{
> -				RuntimeError: "unknown request payload type",
> -			},
> -		}
> -	}
> -	if err != nil {
> -		return &pb.ConformanceResponse{
> -			Result: &pb.ConformanceResponse_ParseError{
> -				ParseError: err.Error(),
> -			},
> -		}
> -	}
> -	switch req.RequestedOutputFormat {
> -	case pb.WireFormat_PROTOBUF:
> -		p, err := proto.Marshal(&msg)
> -		if err != nil {
> -			return &pb.ConformanceResponse{
> -				Result: &pb.ConformanceResponse_SerializeError{
> -					SerializeError: err.Error(),
> -				},
> -			}
> -		}
> -		return &pb.ConformanceResponse{
> -			Result: &pb.ConformanceResponse_ProtobufPayload{
> -				ProtobufPayload: p,
> -			},
> -		}
> -	case pb.WireFormat_JSON:
> -		p, err := jsonMarshaler.MarshalToString(&msg)
> -		if err != nil {
> -			return &pb.ConformanceResponse{
> -				Result: &pb.ConformanceResponse_SerializeError{
> -					SerializeError: err.Error(),
> -				},
> -			}
> -		}
> -		return &pb.ConformanceResponse{
> -			Result: &pb.ConformanceResponse_JsonPayload{
> -				JsonPayload: p,
> -			},
> -		}
> -	default:
> -		return &pb.ConformanceResponse{
> -			Result: &pb.ConformanceResponse_RuntimeError{
> -				RuntimeError: "unknown output format",
> -			},
> -		}
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go
> deleted file mode 100644
> index ec354ead..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go
> +++ /dev/null
> @@ -1,1885 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: conformance_proto/conformance.proto
> -
> -/*
> -Package conformance is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	conformance_proto/conformance.proto
> -
> -It has these top-level messages:
> -	ConformanceRequest
> -	ConformanceResponse
> -	TestAllTypes
> -	ForeignMessage
> -*/
> -package conformance
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -import google_protobuf "github.com/golang/protobuf/ptypes/any"
> -import google_protobuf1 "github.com/golang/protobuf/ptypes/duration"
> -import google_protobuf2 "google.golang.org/genproto/protobuf"
> -import google_protobuf3 "github.com/golang/protobuf/ptypes/struct"
> -import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp"
> -import google_protobuf5 "github.com/golang/protobuf/ptypes/wrappers"
> -
> -// 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 WireFormat int32
> -
> -const (
> -	WireFormat_UNSPECIFIED WireFormat = 0
> -	WireFormat_PROTOBUF    WireFormat = 1
> -	WireFormat_JSON        WireFormat = 2
> -)
> -
> -var WireFormat_name = map[int32]string{
> -	0: "UNSPECIFIED",
> -	1: "PROTOBUF",
> -	2: "JSON",
> -}
> -var WireFormat_value = map[string]int32{
> -	"UNSPECIFIED": 0,
> -	"PROTOBUF":    1,
> -	"JSON":        2,
> -}
> -
> -func (x WireFormat) String() string {
> -	return proto.EnumName(WireFormat_name, int32(x))
> -}
> -func (WireFormat) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -type ForeignEnum int32
> -
> -const (
> -	ForeignEnum_FOREIGN_FOO ForeignEnum = 0
> -	ForeignEnum_FOREIGN_BAR ForeignEnum = 1
> -	ForeignEnum_FOREIGN_BAZ ForeignEnum = 2
> -)
> -
> -var ForeignEnum_name = map[int32]string{
> -	0: "FOREIGN_FOO",
> -	1: "FOREIGN_BAR",
> -	2: "FOREIGN_BAZ",
> -}
> -var ForeignEnum_value = map[string]int32{
> -	"FOREIGN_FOO": 0,
> -	"FOREIGN_BAR": 1,
> -	"FOREIGN_BAZ": 2,
> -}
> -
> -func (x ForeignEnum) String() string {
> -	return proto.EnumName(ForeignEnum_name, int32(x))
> -}
> -func (ForeignEnum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -
> -type TestAllTypes_NestedEnum int32
> -
> -const (
> -	TestAllTypes_FOO TestAllTypes_NestedEnum = 0
> -	TestAllTypes_BAR TestAllTypes_NestedEnum = 1
> -	TestAllTypes_BAZ TestAllTypes_NestedEnum = 2
> -	TestAllTypes_NEG TestAllTypes_NestedEnum = -1
> -)
> -
> -var TestAllTypes_NestedEnum_name = map[int32]string{
> -	0:  "FOO",
> -	1:  "BAR",
> -	2:  "BAZ",
> -	-1: "NEG",
> -}
> -var TestAllTypes_NestedEnum_value = map[string]int32{
> -	"FOO": 0,
> -	"BAR": 1,
> -	"BAZ": 2,
> -	"NEG": -1,
> -}
> -
> -func (x TestAllTypes_NestedEnum) String() string {
> -	return proto.EnumName(TestAllTypes_NestedEnum_name, int32(x))
> -}
> -func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
> -
> -// Represents a single test case's input.  The testee should:
> -//
> -//   1. parse this proto (which should always succeed)
> -//   2. parse the protobuf or JSON payload in "payload" (which may fail)
> -//   3. if the parse succeeded, serialize the message in the requested format.
> -type ConformanceRequest struct {
> -	// The payload (whether protobuf of JSON) is always for a TestAllTypes proto
> -	// (see below).
> -	//
> -	// Types that are valid to be assigned to Payload:
> -	//	*ConformanceRequest_ProtobufPayload
> -	//	*ConformanceRequest_JsonPayload
> -	Payload isConformanceRequest_Payload `protobuf_oneof:"payload"`
> -	// Which format should the testee serialize its message to?
> -	RequestedOutputFormat WireFormat `protobuf:"varint,3,opt,name=requested_output_format,json=requestedOutputFormat,enum=conformance.WireFormat" json:"requested_output_format,omitempty"`
> -}
> -
> -func (m *ConformanceRequest) Reset()                    { *m = ConformanceRequest{} }
> -func (m *ConformanceRequest) String() string            { return proto.CompactTextString(m) }
> -func (*ConformanceRequest) ProtoMessage()               {}
> -func (*ConformanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -type isConformanceRequest_Payload interface {
> -	isConformanceRequest_Payload()
> -}
> -
> -type ConformanceRequest_ProtobufPayload struct {
> -	ProtobufPayload []byte `protobuf:"bytes,1,opt,name=protobuf_payload,json=protobufPayload,proto3,oneof"`
> -}
> -type ConformanceRequest_JsonPayload struct {
> -	JsonPayload string `protobuf:"bytes,2,opt,name=json_payload,json=jsonPayload,oneof"`
> -}
> -
> -func (*ConformanceRequest_ProtobufPayload) isConformanceRequest_Payload() {}
> -func (*ConformanceRequest_JsonPayload) isConformanceRequest_Payload()     {}
> -
> -func (m *ConformanceRequest) GetPayload() isConformanceRequest_Payload {
> -	if m != nil {
> -		return m.Payload
> -	}
> -	return nil
> -}
> -
> -func (m *ConformanceRequest) GetProtobufPayload() []byte {
> -	if x, ok := m.GetPayload().(*ConformanceRequest_ProtobufPayload); ok {
> -		return x.ProtobufPayload
> -	}
> -	return nil
> -}
> -
> -func (m *ConformanceRequest) GetJsonPayload() string {
> -	if x, ok := m.GetPayload().(*ConformanceRequest_JsonPayload); ok {
> -		return x.JsonPayload
> -	}
> -	return ""
> -}
> -
> -func (m *ConformanceRequest) GetRequestedOutputFormat() WireFormat {
> -	if m != nil {
> -		return m.RequestedOutputFormat
> -	}
> -	return WireFormat_UNSPECIFIED
> -}
> -
> -// XXX_OneofFuncs is for the internal use of the proto package.
> -func (*ConformanceRequest) 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 _ConformanceRequest_OneofMarshaler, _ConformanceRequest_OneofUnmarshaler, _ConformanceRequest_OneofSizer, []interface{}{
> -		(*ConformanceRequest_ProtobufPayload)(nil),
> -		(*ConformanceRequest_JsonPayload)(nil),
> -	}
> -}
> -
> -func _ConformanceRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
> -	m := msg.(*ConformanceRequest)
> -	// payload
> -	switch x := m.Payload.(type) {
> -	case *ConformanceRequest_ProtobufPayload:
> -		b.EncodeVarint(1<<3 | proto.WireBytes)
> -		b.EncodeRawBytes(x.ProtobufPayload)
> -	case *ConformanceRequest_JsonPayload:
> -		b.EncodeVarint(2<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.JsonPayload)
> -	case nil:
> -	default:
> -		return fmt.Errorf("ConformanceRequest.Payload has unexpected type %T", x)
> -	}
> -	return nil
> -}
> -
> -func _ConformanceRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
> -	m := msg.(*ConformanceRequest)
> -	switch tag {
> -	case 1: // payload.protobuf_payload
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeRawBytes(true)
> -		m.Payload = &ConformanceRequest_ProtobufPayload{x}
> -		return true, err
> -	case 2: // payload.json_payload
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Payload = &ConformanceRequest_JsonPayload{x}
> -		return true, err
> -	default:
> -		return false, nil
> -	}
> -}
> -
> -func _ConformanceRequest_OneofSizer(msg proto.Message) (n int) {
> -	m := msg.(*ConformanceRequest)
> -	// payload
> -	switch x := m.Payload.(type) {
> -	case *ConformanceRequest_ProtobufPayload:
> -		n += proto.SizeVarint(1<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.ProtobufPayload)))
> -		n += len(x.ProtobufPayload)
> -	case *ConformanceRequest_JsonPayload:
> -		n += proto.SizeVarint(2<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.JsonPayload)))
> -		n += len(x.JsonPayload)
> -	case nil:
> -	default:
> -		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
> -	}
> -	return n
> -}
> -
> -// Represents a single test case's output.
> -type ConformanceResponse struct {
> -	// Types that are valid to be assigned to Result:
> -	//	*ConformanceResponse_ParseError
> -	//	*ConformanceResponse_SerializeError
> -	//	*ConformanceResponse_RuntimeError
> -	//	*ConformanceResponse_ProtobufPayload
> -	//	*ConformanceResponse_JsonPayload
> -	//	*ConformanceResponse_Skipped
> -	Result isConformanceResponse_Result `protobuf_oneof:"result"`
> -}
> -
> -func (m *ConformanceResponse) Reset()                    { *m = ConformanceResponse{} }
> -func (m *ConformanceResponse) String() string            { return proto.CompactTextString(m) }
> -func (*ConformanceResponse) ProtoMessage()               {}
> -func (*ConformanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -
> -type isConformanceResponse_Result interface {
> -	isConformanceResponse_Result()
> -}
> -
> -type ConformanceResponse_ParseError struct {
> -	ParseError string `protobuf:"bytes,1,opt,name=parse_error,json=parseError,oneof"`
> -}
> -type ConformanceResponse_SerializeError struct {
> -	SerializeError string `protobuf:"bytes,6,opt,name=serialize_error,json=serializeError,oneof"`
> -}
> -type ConformanceResponse_RuntimeError struct {
> -	RuntimeError string `protobuf:"bytes,2,opt,name=runtime_error,json=runtimeError,oneof"`
> -}
> -type ConformanceResponse_ProtobufPayload struct {
> -	ProtobufPayload []byte `protobuf:"bytes,3,opt,name=protobuf_payload,json=protobufPayload,proto3,oneof"`
> -}
> -type ConformanceResponse_JsonPayload struct {
> -	JsonPayload string `protobuf:"bytes,4,opt,name=json_payload,json=jsonPayload,oneof"`
> -}
> -type ConformanceResponse_Skipped struct {
> -	Skipped string `protobuf:"bytes,5,opt,name=skipped,oneof"`
> -}
> -
> -func (*ConformanceResponse_ParseError) isConformanceResponse_Result()      {}
> -func (*ConformanceResponse_SerializeError) isConformanceResponse_Result()  {}
> -func (*ConformanceResponse_RuntimeError) isConformanceResponse_Result()    {}
> -func (*ConformanceResponse_ProtobufPayload) isConformanceResponse_Result() {}
> -func (*ConformanceResponse_JsonPayload) isConformanceResponse_Result()     {}
> -func (*ConformanceResponse_Skipped) isConformanceResponse_Result()         {}
> -
> -func (m *ConformanceResponse) GetResult() isConformanceResponse_Result {
> -	if m != nil {
> -		return m.Result
> -	}
> -	return nil
> -}
> -
> -func (m *ConformanceResponse) GetParseError() string {
> -	if x, ok := m.GetResult().(*ConformanceResponse_ParseError); ok {
> -		return x.ParseError
> -	}
> -	return ""
> -}
> -
> -func (m *ConformanceResponse) GetSerializeError() string {
> -	if x, ok := m.GetResult().(*ConformanceResponse_SerializeError); ok {
> -		return x.SerializeError
> -	}
> -	return ""
> -}
> -
> -func (m *ConformanceResponse) GetRuntimeError() string {
> -	if x, ok := m.GetResult().(*ConformanceResponse_RuntimeError); ok {
> -		return x.RuntimeError
> -	}
> -	return ""
> -}
> -
> -func (m *ConformanceResponse) GetProtobufPayload() []byte {
> -	if x, ok := m.GetResult().(*ConformanceResponse_ProtobufPayload); ok {
> -		return x.ProtobufPayload
> -	}
> -	return nil
> -}
> -
> -func (m *ConformanceResponse) GetJsonPayload() string {
> -	if x, ok := m.GetResult().(*ConformanceResponse_JsonPayload); ok {
> -		return x.JsonPayload
> -	}
> -	return ""
> -}
> -
> -func (m *ConformanceResponse) GetSkipped() string {
> -	if x, ok := m.GetResult().(*ConformanceResponse_Skipped); ok {
> -		return x.Skipped
> -	}
> -	return ""
> -}
> -
> -// XXX_OneofFuncs is for the internal use of the proto package.
> -func (*ConformanceResponse) 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 _ConformanceResponse_OneofMarshaler, _ConformanceResponse_OneofUnmarshaler, _ConformanceResponse_OneofSizer, []interface{}{
> -		(*ConformanceResponse_ParseError)(nil),
> -		(*ConformanceResponse_SerializeError)(nil),
> -		(*ConformanceResponse_RuntimeError)(nil),
> -		(*ConformanceResponse_ProtobufPayload)(nil),
> -		(*ConformanceResponse_JsonPayload)(nil),
> -		(*ConformanceResponse_Skipped)(nil),
> -	}
> -}
> -
> -func _ConformanceResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
> -	m := msg.(*ConformanceResponse)
> -	// result
> -	switch x := m.Result.(type) {
> -	case *ConformanceResponse_ParseError:
> -		b.EncodeVarint(1<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.ParseError)
> -	case *ConformanceResponse_SerializeError:
> -		b.EncodeVarint(6<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.SerializeError)
> -	case *ConformanceResponse_RuntimeError:
> -		b.EncodeVarint(2<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.RuntimeError)
> -	case *ConformanceResponse_ProtobufPayload:
> -		b.EncodeVarint(3<<3 | proto.WireBytes)
> -		b.EncodeRawBytes(x.ProtobufPayload)
> -	case *ConformanceResponse_JsonPayload:
> -		b.EncodeVarint(4<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.JsonPayload)
> -	case *ConformanceResponse_Skipped:
> -		b.EncodeVarint(5<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.Skipped)
> -	case nil:
> -	default:
> -		return fmt.Errorf("ConformanceResponse.Result has unexpected type %T", x)
> -	}
> -	return nil
> -}
> -
> -func _ConformanceResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
> -	m := msg.(*ConformanceResponse)
> -	switch tag {
> -	case 1: // result.parse_error
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Result = &ConformanceResponse_ParseError{x}
> -		return true, err
> -	case 6: // result.serialize_error
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Result = &ConformanceResponse_SerializeError{x}
> -		return true, err
> -	case 2: // result.runtime_error
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Result = &ConformanceResponse_RuntimeError{x}
> -		return true, err
> -	case 3: // result.protobuf_payload
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeRawBytes(true)
> -		m.Result = &ConformanceResponse_ProtobufPayload{x}
> -		return true, err
> -	case 4: // result.json_payload
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Result = &ConformanceResponse_JsonPayload{x}
> -		return true, err
> -	case 5: // result.skipped
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Result = &ConformanceResponse_Skipped{x}
> -		return true, err
> -	default:
> -		return false, nil
> -	}
> -}
> -
> -func _ConformanceResponse_OneofSizer(msg proto.Message) (n int) {
> -	m := msg.(*ConformanceResponse)
> -	// result
> -	switch x := m.Result.(type) {
> -	case *ConformanceResponse_ParseError:
> -		n += proto.SizeVarint(1<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.ParseError)))
> -		n += len(x.ParseError)
> -	case *ConformanceResponse_SerializeError:
> -		n += proto.SizeVarint(6<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.SerializeError)))
> -		n += len(x.SerializeError)
> -	case *ConformanceResponse_RuntimeError:
> -		n += proto.SizeVarint(2<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.RuntimeError)))
> -		n += len(x.RuntimeError)
> -	case *ConformanceResponse_ProtobufPayload:
> -		n += proto.SizeVarint(3<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.ProtobufPayload)))
> -		n += len(x.ProtobufPayload)
> -	case *ConformanceResponse_JsonPayload:
> -		n += proto.SizeVarint(4<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.JsonPayload)))
> -		n += len(x.JsonPayload)
> -	case *ConformanceResponse_Skipped:
> -		n += proto.SizeVarint(5<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.Skipped)))
> -		n += len(x.Skipped)
> -	case nil:
> -	default:
> -		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
> -	}
> -	return n
> -}
> -
> -// This proto includes every type of field in both singular and repeated
> -// forms.
> -type TestAllTypes struct {
> -	// Singular
> -	OptionalInt32          int32                       `protobuf:"varint,1,opt,name=optional_int32,json=optionalInt32" json:"optional_int32,omitempty"`
> -	OptionalInt64          int64                       `protobuf:"varint,2,opt,name=optional_int64,json=optionalInt64" json:"optional_int64,omitempty"`
> -	OptionalUint32         uint32                      `protobuf:"varint,3,opt,name=optional_uint32,json=optionalUint32" json:"optional_uint32,omitempty"`
> -	OptionalUint64         uint64                      `protobuf:"varint,4,opt,name=optional_uint64,json=optionalUint64" json:"optional_uint64,omitempty"`
> -	OptionalSint32         int32                       `protobuf:"zigzag32,5,opt,name=optional_sint32,json=optionalSint32" json:"optional_sint32,omitempty"`
> -	OptionalSint64         int64                       `protobuf:"zigzag64,6,opt,name=optional_sint64,json=optionalSint64" json:"optional_sint64,omitempty"`
> -	OptionalFixed32        uint32                      `protobuf:"fixed32,7,opt,name=optional_fixed32,json=optionalFixed32" json:"optional_fixed32,omitempty"`
> -	OptionalFixed64        uint64                      `protobuf:"fixed64,8,opt,name=optional_fixed64,json=optionalFixed64" json:"optional_fixed64,omitempty"`
> -	OptionalSfixed32       int32                       `protobuf:"fixed32,9,opt,name=optional_sfixed32,json=optionalSfixed32" json:"optional_sfixed32,omitempty"`
> -	OptionalSfixed64       int64                       `protobuf:"fixed64,10,opt,name=optional_sfixed64,json=optionalSfixed64" json:"optional_sfixed64,omitempty"`
> -	OptionalFloat          float32                     `protobuf:"fixed32,11,opt,name=optional_float,json=optionalFloat" json:"optional_float,omitempty"`
> -	OptionalDouble         float64                     `protobuf:"fixed64,12,opt,name=optional_double,json=optionalDouble" json:"optional_double,omitempty"`
> -	OptionalBool           bool                        `protobuf:"varint,13,opt,name=optional_bool,json=optionalBool" json:"optional_bool,omitempty"`
> -	OptionalString         string                      `protobuf:"bytes,14,opt,name=optional_string,json=optionalString" json:"optional_string,omitempty"`
> -	OptionalBytes          []byte                      `protobuf:"bytes,15,opt,name=optional_bytes,json=optionalBytes,proto3" json:"optional_bytes,omitempty"`
> -	OptionalNestedMessage  *TestAllTypes_NestedMessage `protobuf:"bytes,18,opt,name=optional_nested_message,json=optionalNestedMessage" json:"optional_nested_message,omitempty"`
> -	OptionalForeignMessage *ForeignMessage             `protobuf:"bytes,19,opt,name=optional_foreign_message,json=optionalForeignMessage" json:"optional_foreign_message,omitempty"`
> -	OptionalNestedEnum     TestAllTypes_NestedEnum     `protobuf:"varint,21,opt,name=optional_nested_enum,json=optionalNestedEnum,enum=conformance.TestAllTypes_NestedEnum" json:"optional_nested_enum,omitempty"`
> -	OptionalForeignEnum    ForeignEnum                 `protobuf:"varint,22,opt,name=optional_foreign_enum,json=optionalForeignEnum,enum=conformance.ForeignEnum" json:"optional_foreign_enum,omitempty"`
> -	OptionalStringPiece    string                      `protobuf:"bytes,24,opt,name=optional_string_piece,json=optionalStringPiece" json:"optional_string_piece,omitempty"`
> -	OptionalCord           string                      `protobuf:"bytes,25,opt,name=optional_cord,json=optionalCord" json:"optional_cord,omitempty"`
> -	RecursiveMessage       *TestAllTypes               `protobuf:"bytes,27,opt,name=recursive_message,json=recursiveMessage" json:"recursive_message,omitempty"`
> -	// Repeated
> -	RepeatedInt32          []int32                       `protobuf:"varint,31,rep,packed,name=repeated_int32,json=repeatedInt32" json:"repeated_int32,omitempty"`
> -	RepeatedInt64          []int64                       `protobuf:"varint,32,rep,packed,name=repeated_int64,json=repeatedInt64" json:"repeated_int64,omitempty"`
> -	RepeatedUint32         []uint32                      `protobuf:"varint,33,rep,packed,name=repeated_uint32,json=repeatedUint32" json:"repeated_uint32,omitempty"`
> -	RepeatedUint64         []uint64                      `protobuf:"varint,34,rep,packed,name=repeated_uint64,json=repeatedUint64" json:"repeated_uint64,omitempty"`
> -	RepeatedSint32         []int32                       `protobuf:"zigzag32,35,rep,packed,name=repeated_sint32,json=repeatedSint32" json:"repeated_sint32,omitempty"`
> -	RepeatedSint64         []int64                       `protobuf:"zigzag64,36,rep,packed,name=repeated_sint64,json=repeatedSint64" json:"repeated_sint64,omitempty"`
> -	RepeatedFixed32        []uint32                      `protobuf:"fixed32,37,rep,packed,name=repeated_fixed32,json=repeatedFixed32" json:"repeated_fixed32,omitempty"`
> -	RepeatedFixed64        []uint64                      `protobuf:"fixed64,38,rep,packed,name=repeated_fixed64,json=repeatedFixed64" json:"repeated_fixed64,omitempty"`
> -	RepeatedSfixed32       []int32                       `protobuf:"fixed32,39,rep,packed,name=repeated_sfixed32,json=repeatedSfixed32" json:"repeated_sfixed32,omitempty"`
> -	RepeatedSfixed64       []int64                       `protobuf:"fixed64,40,rep,packed,name=repeated_sfixed64,json=repeatedSfixed64" json:"repeated_sfixed64,omitempty"`
> -	RepeatedFloat          []float32                     `protobuf:"fixed32,41,rep,packed,name=repeated_float,json=repeatedFloat" json:"repeated_float,omitempty"`
> -	RepeatedDouble         []float64                     `protobuf:"fixed64,42,rep,packed,name=repeated_double,json=repeatedDouble" json:"repeated_double,omitempty"`
> -	RepeatedBool           []bool                        `protobuf:"varint,43,rep,packed,name=repeated_bool,json=repeatedBool" json:"repeated_bool,omitempty"`
> -	RepeatedString         []string                      `protobuf:"bytes,44,rep,name=repeated_string,json=repeatedString" json:"repeated_string,omitempty"`
> -	RepeatedBytes          [][]byte                      `protobuf:"bytes,45,rep,name=repeated_bytes,json=repeatedBytes,proto3" json:"repeated_bytes,omitempty"`
> -	RepeatedNestedMessage  []*TestAllTypes_NestedMessage `protobuf:"bytes,48,rep,name=repeated_nested_message,json=repeatedNestedMessage" json:"repeated_nested_message,omitempty"`
> -	RepeatedForeignMessage []*ForeignMessage             `protobuf:"bytes,49,rep,name=repeated_foreign_message,json=repeatedForeignMessage" json:"repeated_foreign_message,omitempty"`
> -	RepeatedNestedEnum     []TestAllTypes_NestedEnum     `protobuf:"varint,51,rep,packed,name=repeated_nested_enum,json=repeatedNestedEnum,enum=conformance.TestAllTypes_NestedEnum" json:"repeated_nested_enum,omitempty"`
> -	RepeatedForeignEnum    []ForeignEnum                 `protobuf:"varint,52,rep,packed,name=repeated_foreign_enum,json=repeatedForeignEnum,enum=conformance.ForeignEnum" json:"repeated_foreign_enum,omitempty"`
> -	RepeatedStringPiece    []string                      `protobuf:"bytes,54,rep,name=repeated_string_piece,json=repeatedStringPiece" json:"repeated_string_piece,omitempty"`
> -	RepeatedCord           []string                      `protobuf:"bytes,55,rep,name=repeated_cord,json=repeatedCord" json:"repeated_cord,omitempty"`
> -	// Map
> -	MapInt32Int32           map[int32]int32                        `protobuf:"bytes,56,rep,name=map_int32_int32,json=mapInt32Int32" json:"map_int32_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -	MapInt64Int64           map[int64]int64                        `protobuf:"bytes,57,rep,name=map_int64_int64,json=mapInt64Int64" json:"map_int64_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -	MapUint32Uint32         map[uint32]uint32                      `protobuf:"bytes,58,rep,name=map_uint32_uint32,json=mapUint32Uint32" json:"map_uint32_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -	MapUint64Uint64         map[uint64]uint64                      `protobuf:"bytes,59,rep,name=map_uint64_uint64,json=mapUint64Uint64" json:"map_uint64_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -	MapSint32Sint32         map[int32]int32                        `protobuf:"bytes,60,rep,name=map_sint32_sint32,json=mapSint32Sint32" json:"map_sint32_sint32,omitempty" protobuf_key:"zigzag32,1,opt,name=key" protobuf_val:"zigzag32,2,opt,name=value"`
> -	MapSint64Sint64         map[int64]int64                        `protobuf:"bytes,61,rep,name=map_sint64_sint64,json=mapSint64Sint64" json:"map_sint64_sint64,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"zigzag64,2,opt,name=value"`
> -	MapFixed32Fixed32       map[uint32]uint32                      `protobuf:"bytes,62,rep,name=map_fixed32_fixed32,json=mapFixed32Fixed32" json:"map_fixed32_fixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
> -	MapFixed64Fixed64       map[uint64]uint64                      `protobuf:"bytes,63,rep,name=map_fixed64_fixed64,json=mapFixed64Fixed64" json:"map_fixed64_fixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
> -	MapSfixed32Sfixed32     map[int32]int32                        `protobuf:"bytes,64,rep,name=map_sfixed32_sfixed32,json=mapSfixed32Sfixed32" json:"map_sfixed32_sfixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
> -	MapSfixed64Sfixed64     map[int64]int64                        `protobuf:"bytes,65,rep,name=map_sfixed64_sfixed64,json=mapSfixed64Sfixed64" json:"map_sfixed64_sfixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
> -	MapInt32Float           map[int32]float32                      `protobuf:"bytes,66,rep,name=map_int32_float,json=mapInt32Float" json:"map_int32_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
> -	MapInt32Double          map[int32]float64                      `protobuf:"bytes,67,rep,name=map_int32_double,json=mapInt32Double" json:"map_int32_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
> -	MapBoolBool             map[bool]bool                          `protobuf:"bytes,68,rep,name=map_bool_bool,json=mapBoolBool" json:"map_bool_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -	MapStringString         map[string]string                      `protobuf:"bytes,69,rep,name=map_string_string,json=mapStringString" json:"map_string_string,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	MapStringBytes          map[string][]byte                      `protobuf:"bytes,70,rep,name=map_string_bytes,json=mapStringBytes" json:"map_string_bytes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"`
> -	MapStringNestedMessage  map[string]*TestAllTypes_NestedMessage `protobuf:"bytes,71,rep,name=map_string_nested_message,json=mapStringNestedMessage" json:"map_string_nested_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	MapStringForeignMessage map[string]*ForeignMessage             `protobuf:"bytes,72,rep,name=map_string_foreign_message,json=mapStringForeignMessage" json:"map_string_foreign_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	MapStringNestedEnum     map[string]TestAllTypes_NestedEnum     `protobuf:"bytes,73,rep,name=map_string_nested_enum,json=mapStringNestedEnum" json:"map_string_nested_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=conformance.TestAllTypes_NestedEnum"`
> -	MapStringForeignEnum    map[string]ForeignEnum                 `protobuf:"bytes,74,rep,name=map_string_foreign_enum,json=mapStringForeignEnum" json:"map_string_foreign_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=conformance.ForeignEnum"`
> -	// Types that are valid to be assigned to OneofField:
> -	//	*TestAllTypes_OneofUint32
> -	//	*TestAllTypes_OneofNestedMessage
> -	//	*TestAllTypes_OneofString
> -	//	*TestAllTypes_OneofBytes
> -	//	*TestAllTypes_OneofBool
> -	//	*TestAllTypes_OneofUint64
> -	//	*TestAllTypes_OneofFloat
> -	//	*TestAllTypes_OneofDouble
> -	//	*TestAllTypes_OneofEnum
> -	OneofField isTestAllTypes_OneofField `protobuf_oneof:"oneof_field"`
> -	// Well-known types
> -	OptionalBoolWrapper   *google_protobuf5.BoolValue     `protobuf:"bytes,201,opt,name=optional_bool_wrapper,json=optionalBoolWrapper" json:"optional_bool_wrapper,omitempty"`
> -	OptionalInt32Wrapper  *google_protobuf5.Int32Value    `protobuf:"bytes,202,opt,name=optional_int32_wrapper,json=optionalInt32Wrapper" json:"optional_int32_wrapper,omitempty"`
> -	OptionalInt64Wrapper  *google_protobuf5.Int64Value    `protobuf:"bytes,203,opt,name=optional_int64_wrapper,json=optionalInt64Wrapper" json:"optional_int64_wrapper,omitempty"`
> -	OptionalUint32Wrapper *google_protobuf5.UInt32Value   `protobuf:"bytes,204,opt,name=optional_uint32_wrapper,json=optionalUint32Wrapper" json:"optional_uint32_wrapper,omitempty"`
> -	OptionalUint64Wrapper *google_protobuf5.UInt64Value   `protobuf:"bytes,205,opt,name=optional_uint64_wrapper,json=optionalUint64Wrapper" json:"optional_uint64_wrapper,omitempty"`
> -	OptionalFloatWrapper  *google_protobuf5.FloatValue    `protobuf:"bytes,206,opt,name=optional_float_wrapper,json=optionalFloatWrapper" json:"optional_float_wrapper,omitempty"`
> -	OptionalDoubleWrapper *google_protobuf5.DoubleValue   `protobuf:"bytes,207,opt,name=optional_double_wrapper,json=optionalDoubleWrapper" json:"optional_double_wrapper,omitempty"`
> -	OptionalStringWrapper *google_protobuf5.StringValue   `protobuf:"bytes,208,opt,name=optional_string_wrapper,json=optionalStringWrapper" json:"optional_string_wrapper,omitempty"`
> -	OptionalBytesWrapper  *google_protobuf5.BytesValue    `protobuf:"bytes,209,opt,name=optional_bytes_wrapper,json=optionalBytesWrapper" json:"optional_bytes_wrapper,omitempty"`
> -	RepeatedBoolWrapper   []*google_protobuf5.BoolValue   `protobuf:"bytes,211,rep,name=repeated_bool_wrapper,json=repeatedBoolWrapper" json:"repeated_bool_wrapper,omitempty"`
> -	RepeatedInt32Wrapper  []*google_protobuf5.Int32Value  `protobuf:"bytes,212,rep,name=repeated_int32_wrapper,json=repeatedInt32Wrapper" json:"repeated_int32_wrapper,omitempty"`
> -	RepeatedInt64Wrapper  []*google_protobuf5.Int64Value  `protobuf:"bytes,213,rep,name=repeated_int64_wrapper,json=repeatedInt64Wrapper" json:"repeated_int64_wrapper,omitempty"`
> -	RepeatedUint32Wrapper []*google_protobuf5.UInt32Value `protobuf:"bytes,214,rep,name=repeated_uint32_wrapper,json=repeatedUint32Wrapper" json:"repeated_uint32_wrapper,omitempty"`
> -	RepeatedUint64Wrapper []*google_protobuf5.UInt64Value `protobuf:"bytes,215,rep,name=repeated_uint64_wrapper,json=repeatedUint64Wrapper" json:"repeated_uint64_wrapper,omitempty"`
> -	RepeatedFloatWrapper  []*google_protobuf5.FloatValue  `protobuf:"bytes,216,rep,name=repeated_float_wrapper,json=repeatedFloatWrapper" json:"repeated_float_wrapper,omitempty"`
> -	RepeatedDoubleWrapper []*google_protobuf5.DoubleValue `protobuf:"bytes,217,rep,name=repeated_double_wrapper,json=repeatedDoubleWrapper" json:"repeated_double_wrapper,omitempty"`
> -	RepeatedStringWrapper []*google_protobuf5.StringValue `protobuf:"bytes,218,rep,name=repeated_string_wrapper,json=repeatedStringWrapper" json:"repeated_string_wrapper,omitempty"`
> -	RepeatedBytesWrapper  []*google_protobuf5.BytesValue  `protobuf:"bytes,219,rep,name=repeated_bytes_wrapper,json=repeatedBytesWrapper" json:"repeated_bytes_wrapper,omitempty"`
> -	OptionalDuration      *google_protobuf1.Duration      `protobuf:"bytes,301,opt,name=optional_duration,json=optionalDuration" json:"optional_duration,omitempty"`
> -	OptionalTimestamp     *google_protobuf4.Timestamp     `protobuf:"bytes,302,opt,name=optional_timestamp,json=optionalTimestamp" json:"optional_timestamp,omitempty"`
> -	OptionalFieldMask     *google_protobuf2.FieldMask     `protobuf:"bytes,303,opt,name=optional_field_mask,json=optionalFieldMask" json:"optional_field_mask,omitempty"`
> -	OptionalStruct        *google_protobuf3.Struct        `protobuf:"bytes,304,opt,name=optional_struct,json=optionalStruct" json:"optional_struct,omitempty"`
> -	OptionalAny           *google_protobuf.Any            `protobuf:"bytes,305,opt,name=optional_any,json=optionalAny" json:"optional_any,omitempty"`
> -	OptionalValue         *google_protobuf3.Value         `protobuf:"bytes,306,opt,name=optional_value,json=optionalValue" json:"optional_value,omitempty"`
> -	RepeatedDuration      []*google_protobuf1.Duration    `protobuf:"bytes,311,rep,name=repeated_duration,json=repeatedDuration" json:"repeated_duration,omitempty"`
> -	RepeatedTimestamp     []*google_protobuf4.Timestamp   `protobuf:"bytes,312,rep,name=repeated_timestamp,json=repeatedTimestamp" json:"repeated_timestamp,omitempty"`
> -	RepeatedFieldmask     []*google_protobuf2.FieldMask   `protobuf:"bytes,313,rep,name=repeated_fieldmask,json=repeatedFieldmask" json:"repeated_fieldmask,omitempty"`
> -	RepeatedStruct        []*google_protobuf3.Struct      `protobuf:"bytes,324,rep,name=repeated_struct,json=repeatedStruct" json:"repeated_struct,omitempty"`
> -	RepeatedAny           []*google_protobuf.Any          `protobuf:"bytes,315,rep,name=repeated_any,json=repeatedAny" json:"repeated_any,omitempty"`
> -	RepeatedValue         []*google_protobuf3.Value       `protobuf:"bytes,316,rep,name=repeated_value,json=repeatedValue" json:"repeated_value,omitempty"`
> -	// Test field-name-to-JSON-name convention.
> -	// (protobuf says names can be any valid C/C++ identifier.)
> -	Fieldname1    int32 `protobuf:"varint,401,opt,name=fieldname1" json:"fieldname1,omitempty"`
> -	FieldName2    int32 `protobuf:"varint,402,opt,name=field_name2,json=fieldName2" json:"field_name2,omitempty"`
> -	XFieldName3   int32 `protobuf:"varint,403,opt,name=_field_name3,json=FieldName3" json:"_field_name3,omitempty"`
> -	Field_Name4_  int32 `protobuf:"varint,404,opt,name=field__name4_,json=fieldName4" json:"field__name4_,omitempty"`
> -	Field0Name5   int32 `protobuf:"varint,405,opt,name=field0name5" json:"field0name5,omitempty"`
> -	Field_0Name6  int32 `protobuf:"varint,406,opt,name=field_0_name6,json=field0Name6" json:"field_0_name6,omitempty"`
> -	FieldName7    int32 `protobuf:"varint,407,opt,name=fieldName7" json:"fieldName7,omitempty"`
> -	FieldName8    int32 `protobuf:"varint,408,opt,name=FieldName8" json:"FieldName8,omitempty"`
> -	Field_Name9   int32 `protobuf:"varint,409,opt,name=field_Name9,json=fieldName9" json:"field_Name9,omitempty"`
> -	Field_Name10  int32 `protobuf:"varint,410,opt,name=Field_Name10,json=FieldName10" json:"Field_Name10,omitempty"`
> -	FIELD_NAME11  int32 `protobuf:"varint,411,opt,name=FIELD_NAME11,json=FIELDNAME11" json:"FIELD_NAME11,omitempty"`
> -	FIELDName12   int32 `protobuf:"varint,412,opt,name=FIELD_name12,json=FIELDName12" json:"FIELD_name12,omitempty"`
> -	XFieldName13  int32 `protobuf:"varint,413,opt,name=__field_name13,json=FieldName13" json:"__field_name13,omitempty"`
> -	X_FieldName14 int32 `protobuf:"varint,414,opt,name=__Field_name14,json=FieldName14" json:"__Field_name14,omitempty"`
> -	Field_Name15  int32 `protobuf:"varint,415,opt,name=field__name15,json=fieldName15" json:"field__name15,omitempty"`
> -	Field__Name16 int32 `protobuf:"varint,416,opt,name=field__Name16,json=fieldName16" json:"field__Name16,omitempty"`
> -	FieldName17__ int32 `protobuf:"varint,417,opt,name=field_name17__,json=fieldName17" json:"field_name17__,omitempty"`
> -	FieldName18__ int32 `protobuf:"varint,418,opt,name=Field_name18__,json=FieldName18" json:"Field_name18__,omitempty"`
> -}
> -
> -func (m *TestAllTypes) Reset()                    { *m = TestAllTypes{} }
> -func (m *TestAllTypes) String() string            { return proto.CompactTextString(m) }
> -func (*TestAllTypes) ProtoMessage()               {}
> -func (*TestAllTypes) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
> -
> -type isTestAllTypes_OneofField interface {
> -	isTestAllTypes_OneofField()
> -}
> -
> -type TestAllTypes_OneofUint32 struct {
> -	OneofUint32 uint32 `protobuf:"varint,111,opt,name=oneof_uint32,json=oneofUint32,oneof"`
> -}
> -type TestAllTypes_OneofNestedMessage struct {
> -	OneofNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,112,opt,name=oneof_nested_message,json=oneofNestedMessage,oneof"`
> -}
> -type TestAllTypes_OneofString struct {
> -	OneofString string `protobuf:"bytes,113,opt,name=oneof_string,json=oneofString,oneof"`
> -}
> -type TestAllTypes_OneofBytes struct {
> -	OneofBytes []byte `protobuf:"bytes,114,opt,name=oneof_bytes,json=oneofBytes,proto3,oneof"`
> -}
> -type TestAllTypes_OneofBool struct {
> -	OneofBool bool `protobuf:"varint,115,opt,name=oneof_bool,json=oneofBool,oneof"`
> -}
> -type TestAllTypes_OneofUint64 struct {
> -	OneofUint64 uint64 `protobuf:"varint,116,opt,name=oneof_uint64,json=oneofUint64,oneof"`
> -}
> -type TestAllTypes_OneofFloat struct {
> -	OneofFloat float32 `protobuf:"fixed32,117,opt,name=oneof_float,json=oneofFloat,oneof"`
> -}
> -type TestAllTypes_OneofDouble struct {
> -	OneofDouble float64 `protobuf:"fixed64,118,opt,name=oneof_double,json=oneofDouble,oneof"`
> -}
> -type TestAllTypes_OneofEnum struct {
> -	OneofEnum TestAllTypes_NestedEnum `protobuf:"varint,119,opt,name=oneof_enum,json=oneofEnum,enum=conformance.TestAllTypes_NestedEnum,oneof"`
> -}
> -
> -func (*TestAllTypes_OneofUint32) isTestAllTypes_OneofField()        {}
> -func (*TestAllTypes_OneofNestedMessage) isTestAllTypes_OneofField() {}
> -func (*TestAllTypes_OneofString) isTestAllTypes_OneofField()        {}
> -func (*TestAllTypes_OneofBytes) isTestAllTypes_OneofField()         {}
> -func (*TestAllTypes_OneofBool) isTestAllTypes_OneofField()          {}
> -func (*TestAllTypes_OneofUint64) isTestAllTypes_OneofField()        {}
> -func (*TestAllTypes_OneofFloat) isTestAllTypes_OneofField()         {}
> -func (*TestAllTypes_OneofDouble) isTestAllTypes_OneofField()        {}
> -func (*TestAllTypes_OneofEnum) isTestAllTypes_OneofField()          {}
> -
> -func (m *TestAllTypes) GetOneofField() isTestAllTypes_OneofField {
> -	if m != nil {
> -		return m.OneofField
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalInt32() int32 {
> -	if m != nil {
> -		return m.OptionalInt32
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalInt64() int64 {
> -	if m != nil {
> -		return m.OptionalInt64
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalUint32() uint32 {
> -	if m != nil {
> -		return m.OptionalUint32
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalUint64() uint64 {
> -	if m != nil {
> -		return m.OptionalUint64
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalSint32() int32 {
> -	if m != nil {
> -		return m.OptionalSint32
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalSint64() int64 {
> -	if m != nil {
> -		return m.OptionalSint64
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalFixed32() uint32 {
> -	if m != nil {
> -		return m.OptionalFixed32
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalFixed64() uint64 {
> -	if m != nil {
> -		return m.OptionalFixed64
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalSfixed32() int32 {
> -	if m != nil {
> -		return m.OptionalSfixed32
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalSfixed64() int64 {
> -	if m != nil {
> -		return m.OptionalSfixed64
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalFloat() float32 {
> -	if m != nil {
> -		return m.OptionalFloat
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalDouble() float64 {
> -	if m != nil {
> -		return m.OptionalDouble
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOptionalBool() bool {
> -	if m != nil {
> -		return m.OptionalBool
> -	}
> -	return false
> -}
> -
> -func (m *TestAllTypes) GetOptionalString() string {
> -	if m != nil {
> -		return m.OptionalString
> -	}
> -	return ""
> -}
> -
> -func (m *TestAllTypes) GetOptionalBytes() []byte {
> -	if m != nil {
> -		return m.OptionalBytes
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_NestedMessage {
> -	if m != nil {
> -		return m.OptionalNestedMessage
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalForeignMessage() *ForeignMessage {
> -	if m != nil {
> -		return m.OptionalForeignMessage
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum {
> -	if m != nil {
> -		return m.OptionalNestedEnum
> -	}
> -	return TestAllTypes_FOO
> -}
> -
> -func (m *TestAllTypes) GetOptionalForeignEnum() ForeignEnum {
> -	if m != nil {
> -		return m.OptionalForeignEnum
> -	}
> -	return ForeignEnum_FOREIGN_FOO
> -}
> -
> -func (m *TestAllTypes) GetOptionalStringPiece() string {
> -	if m != nil {
> -		return m.OptionalStringPiece
> -	}
> -	return ""
> -}
> -
> -func (m *TestAllTypes) GetOptionalCord() string {
> -	if m != nil {
> -		return m.OptionalCord
> -	}
> -	return ""
> -}
> -
> -func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes {
> -	if m != nil {
> -		return m.RecursiveMessage
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedInt32() []int32 {
> -	if m != nil {
> -		return m.RepeatedInt32
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedInt64() []int64 {
> -	if m != nil {
> -		return m.RepeatedInt64
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedUint32() []uint32 {
> -	if m != nil {
> -		return m.RepeatedUint32
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedUint64() []uint64 {
> -	if m != nil {
> -		return m.RepeatedUint64
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedSint32() []int32 {
> -	if m != nil {
> -		return m.RepeatedSint32
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedSint64() []int64 {
> -	if m != nil {
> -		return m.RepeatedSint64
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedFixed32() []uint32 {
> -	if m != nil {
> -		return m.RepeatedFixed32
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedFixed64() []uint64 {
> -	if m != nil {
> -		return m.RepeatedFixed64
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedSfixed32() []int32 {
> -	if m != nil {
> -		return m.RepeatedSfixed32
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedSfixed64() []int64 {
> -	if m != nil {
> -		return m.RepeatedSfixed64
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedFloat() []float32 {
> -	if m != nil {
> -		return m.RepeatedFloat
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedDouble() []float64 {
> -	if m != nil {
> -		return m.RepeatedDouble
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedBool() []bool {
> -	if m != nil {
> -		return m.RepeatedBool
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedString() []string {
> -	if m != nil {
> -		return m.RepeatedString
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedBytes() [][]byte {
> -	if m != nil {
> -		return m.RepeatedBytes
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage {
> -	if m != nil {
> -		return m.RepeatedNestedMessage
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedForeignMessage() []*ForeignMessage {
> -	if m != nil {
> -		return m.RepeatedForeignMessage
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEnum {
> -	if m != nil {
> -		return m.RepeatedNestedEnum
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedForeignEnum() []ForeignEnum {
> -	if m != nil {
> -		return m.RepeatedForeignEnum
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedStringPiece() []string {
> -	if m != nil {
> -		return m.RepeatedStringPiece
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedCord() []string {
> -	if m != nil {
> -		return m.RepeatedCord
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapInt32Int32() map[int32]int32 {
> -	if m != nil {
> -		return m.MapInt32Int32
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapInt64Int64() map[int64]int64 {
> -	if m != nil {
> -		return m.MapInt64Int64
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapUint32Uint32() map[uint32]uint32 {
> -	if m != nil {
> -		return m.MapUint32Uint32
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapUint64Uint64() map[uint64]uint64 {
> -	if m != nil {
> -		return m.MapUint64Uint64
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapSint32Sint32() map[int32]int32 {
> -	if m != nil {
> -		return m.MapSint32Sint32
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapSint64Sint64() map[int64]int64 {
> -	if m != nil {
> -		return m.MapSint64Sint64
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapFixed32Fixed32() map[uint32]uint32 {
> -	if m != nil {
> -		return m.MapFixed32Fixed32
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapFixed64Fixed64() map[uint64]uint64 {
> -	if m != nil {
> -		return m.MapFixed64Fixed64
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapSfixed32Sfixed32() map[int32]int32 {
> -	if m != nil {
> -		return m.MapSfixed32Sfixed32
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapSfixed64Sfixed64() map[int64]int64 {
> -	if m != nil {
> -		return m.MapSfixed64Sfixed64
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapInt32Float() map[int32]float32 {
> -	if m != nil {
> -		return m.MapInt32Float
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapInt32Double() map[int32]float64 {
> -	if m != nil {
> -		return m.MapInt32Double
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapBoolBool() map[bool]bool {
> -	if m != nil {
> -		return m.MapBoolBool
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapStringString() map[string]string {
> -	if m != nil {
> -		return m.MapStringString
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapStringBytes() map[string][]byte {
> -	if m != nil {
> -		return m.MapStringBytes
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapStringNestedMessage() map[string]*TestAllTypes_NestedMessage {
> -	if m != nil {
> -		return m.MapStringNestedMessage
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapStringForeignMessage() map[string]*ForeignMessage {
> -	if m != nil {
> -		return m.MapStringForeignMessage
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapStringNestedEnum() map[string]TestAllTypes_NestedEnum {
> -	if m != nil {
> -		return m.MapStringNestedEnum
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetMapStringForeignEnum() map[string]ForeignEnum {
> -	if m != nil {
> -		return m.MapStringForeignEnum
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOneofUint32() uint32 {
> -	if x, ok := m.GetOneofField().(*TestAllTypes_OneofUint32); ok {
> -		return x.OneofUint32
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOneofNestedMessage() *TestAllTypes_NestedMessage {
> -	if x, ok := m.GetOneofField().(*TestAllTypes_OneofNestedMessage); ok {
> -		return x.OneofNestedMessage
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOneofString() string {
> -	if x, ok := m.GetOneofField().(*TestAllTypes_OneofString); ok {
> -		return x.OneofString
> -	}
> -	return ""
> -}
> -
> -func (m *TestAllTypes) GetOneofBytes() []byte {
> -	if x, ok := m.GetOneofField().(*TestAllTypes_OneofBytes); ok {
> -		return x.OneofBytes
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOneofBool() bool {
> -	if x, ok := m.GetOneofField().(*TestAllTypes_OneofBool); ok {
> -		return x.OneofBool
> -	}
> -	return false
> -}
> -
> -func (m *TestAllTypes) GetOneofUint64() uint64 {
> -	if x, ok := m.GetOneofField().(*TestAllTypes_OneofUint64); ok {
> -		return x.OneofUint64
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOneofFloat() float32 {
> -	if x, ok := m.GetOneofField().(*TestAllTypes_OneofFloat); ok {
> -		return x.OneofFloat
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOneofDouble() float64 {
> -	if x, ok := m.GetOneofField().(*TestAllTypes_OneofDouble); ok {
> -		return x.OneofDouble
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetOneofEnum() TestAllTypes_NestedEnum {
> -	if x, ok := m.GetOneofField().(*TestAllTypes_OneofEnum); ok {
> -		return x.OneofEnum
> -	}
> -	return TestAllTypes_FOO
> -}
> -
> -func (m *TestAllTypes) GetOptionalBoolWrapper() *google_protobuf5.BoolValue {
> -	if m != nil {
> -		return m.OptionalBoolWrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalInt32Wrapper() *google_protobuf5.Int32Value {
> -	if m != nil {
> -		return m.OptionalInt32Wrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalInt64Wrapper() *google_protobuf5.Int64Value {
> -	if m != nil {
> -		return m.OptionalInt64Wrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalUint32Wrapper() *google_protobuf5.UInt32Value {
> -	if m != nil {
> -		return m.OptionalUint32Wrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalUint64Wrapper() *google_protobuf5.UInt64Value {
> -	if m != nil {
> -		return m.OptionalUint64Wrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalFloatWrapper() *google_protobuf5.FloatValue {
> -	if m != nil {
> -		return m.OptionalFloatWrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalDoubleWrapper() *google_protobuf5.DoubleValue {
> -	if m != nil {
> -		return m.OptionalDoubleWrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalStringWrapper() *google_protobuf5.StringValue {
> -	if m != nil {
> -		return m.OptionalStringWrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalBytesWrapper() *google_protobuf5.BytesValue {
> -	if m != nil {
> -		return m.OptionalBytesWrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedBoolWrapper() []*google_protobuf5.BoolValue {
> -	if m != nil {
> -		return m.RepeatedBoolWrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedInt32Wrapper() []*google_protobuf5.Int32Value {
> -	if m != nil {
> -		return m.RepeatedInt32Wrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedInt64Wrapper() []*google_protobuf5.Int64Value {
> -	if m != nil {
> -		return m.RepeatedInt64Wrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedUint32Wrapper() []*google_protobuf5.UInt32Value {
> -	if m != nil {
> -		return m.RepeatedUint32Wrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedUint64Wrapper() []*google_protobuf5.UInt64Value {
> -	if m != nil {
> -		return m.RepeatedUint64Wrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedFloatWrapper() []*google_protobuf5.FloatValue {
> -	if m != nil {
> -		return m.RepeatedFloatWrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedDoubleWrapper() []*google_protobuf5.DoubleValue {
> -	if m != nil {
> -		return m.RepeatedDoubleWrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedStringWrapper() []*google_protobuf5.StringValue {
> -	if m != nil {
> -		return m.RepeatedStringWrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedBytesWrapper() []*google_protobuf5.BytesValue {
> -	if m != nil {
> -		return m.RepeatedBytesWrapper
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalDuration() *google_protobuf1.Duration {
> -	if m != nil {
> -		return m.OptionalDuration
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalTimestamp() *google_protobuf4.Timestamp {
> -	if m != nil {
> -		return m.OptionalTimestamp
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalFieldMask() *google_protobuf2.FieldMask {
> -	if m != nil {
> -		return m.OptionalFieldMask
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalStruct() *google_protobuf3.Struct {
> -	if m != nil {
> -		return m.OptionalStruct
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalAny() *google_protobuf.Any {
> -	if m != nil {
> -		return m.OptionalAny
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetOptionalValue() *google_protobuf3.Value {
> -	if m != nil {
> -		return m.OptionalValue
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedDuration() []*google_protobuf1.Duration {
> -	if m != nil {
> -		return m.RepeatedDuration
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedTimestamp() []*google_protobuf4.Timestamp {
> -	if m != nil {
> -		return m.RepeatedTimestamp
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedFieldmask() []*google_protobuf2.FieldMask {
> -	if m != nil {
> -		return m.RepeatedFieldmask
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedStruct() []*google_protobuf3.Struct {
> -	if m != nil {
> -		return m.RepeatedStruct
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedAny() []*google_protobuf.Any {
> -	if m != nil {
> -		return m.RepeatedAny
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetRepeatedValue() []*google_protobuf3.Value {
> -	if m != nil {
> -		return m.RepeatedValue
> -	}
> -	return nil
> -}
> -
> -func (m *TestAllTypes) GetFieldname1() int32 {
> -	if m != nil {
> -		return m.Fieldname1
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetFieldName2() int32 {
> -	if m != nil {
> -		return m.FieldName2
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetXFieldName3() int32 {
> -	if m != nil {
> -		return m.XFieldName3
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetField_Name4_() int32 {
> -	if m != nil {
> -		return m.Field_Name4_
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetField0Name5() int32 {
> -	if m != nil {
> -		return m.Field0Name5
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetField_0Name6() int32 {
> -	if m != nil {
> -		return m.Field_0Name6
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetFieldName7() int32 {
> -	if m != nil {
> -		return m.FieldName7
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetFieldName8() int32 {
> -	if m != nil {
> -		return m.FieldName8
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetField_Name9() int32 {
> -	if m != nil {
> -		return m.Field_Name9
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetField_Name10() int32 {
> -	if m != nil {
> -		return m.Field_Name10
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetFIELD_NAME11() int32 {
> -	if m != nil {
> -		return m.FIELD_NAME11
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetFIELDName12() int32 {
> -	if m != nil {
> -		return m.FIELDName12
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetXFieldName13() int32 {
> -	if m != nil {
> -		return m.XFieldName13
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetX_FieldName14() int32 {
> -	if m != nil {
> -		return m.X_FieldName14
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetField_Name15() int32 {
> -	if m != nil {
> -		return m.Field_Name15
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetField__Name16() int32 {
> -	if m != nil {
> -		return m.Field__Name16
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetFieldName17__() int32 {
> -	if m != nil {
> -		return m.FieldName17__
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes) GetFieldName18__() int32 {
> -	if m != nil {
> -		return m.FieldName18__
> -	}
> -	return 0
> -}
> -
> -// XXX_OneofFuncs is for the internal use of the proto package.
> -func (*TestAllTypes) 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 _TestAllTypes_OneofMarshaler, _TestAllTypes_OneofUnmarshaler, _TestAllTypes_OneofSizer, []interface{}{
> -		(*TestAllTypes_OneofUint32)(nil),
> -		(*TestAllTypes_OneofNestedMessage)(nil),
> -		(*TestAllTypes_OneofString)(nil),
> -		(*TestAllTypes_OneofBytes)(nil),
> -		(*TestAllTypes_OneofBool)(nil),
> -		(*TestAllTypes_OneofUint64)(nil),
> -		(*TestAllTypes_OneofFloat)(nil),
> -		(*TestAllTypes_OneofDouble)(nil),
> -		(*TestAllTypes_OneofEnum)(nil),
> -	}
> -}
> -
> -func _TestAllTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
> -	m := msg.(*TestAllTypes)
> -	// oneof_field
> -	switch x := m.OneofField.(type) {
> -	case *TestAllTypes_OneofUint32:
> -		b.EncodeVarint(111<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.OneofUint32))
> -	case *TestAllTypes_OneofNestedMessage:
> -		b.EncodeVarint(112<<3 | proto.WireBytes)
> -		if err := b.EncodeMessage(x.OneofNestedMessage); err != nil {
> -			return err
> -		}
> -	case *TestAllTypes_OneofString:
> -		b.EncodeVarint(113<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.OneofString)
> -	case *TestAllTypes_OneofBytes:
> -		b.EncodeVarint(114<<3 | proto.WireBytes)
> -		b.EncodeRawBytes(x.OneofBytes)
> -	case *TestAllTypes_OneofBool:
> -		t := uint64(0)
> -		if x.OneofBool {
> -			t = 1
> -		}
> -		b.EncodeVarint(115<<3 | proto.WireVarint)
> -		b.EncodeVarint(t)
> -	case *TestAllTypes_OneofUint64:
> -		b.EncodeVarint(116<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.OneofUint64))
> -	case *TestAllTypes_OneofFloat:
> -		b.EncodeVarint(117<<3 | proto.WireFixed32)
> -		b.EncodeFixed32(uint64(math.Float32bits(x.OneofFloat)))
> -	case *TestAllTypes_OneofDouble:
> -		b.EncodeVarint(118<<3 | proto.WireFixed64)
> -		b.EncodeFixed64(math.Float64bits(x.OneofDouble))
> -	case *TestAllTypes_OneofEnum:
> -		b.EncodeVarint(119<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.OneofEnum))
> -	case nil:
> -	default:
> -		return fmt.Errorf("TestAllTypes.OneofField has unexpected type %T", x)
> -	}
> -	return nil
> -}
> -
> -func _TestAllTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
> -	m := msg.(*TestAllTypes)
> -	switch tag {
> -	case 111: // oneof_field.oneof_uint32
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.OneofField = &TestAllTypes_OneofUint32{uint32(x)}
> -		return true, err
> -	case 112: // oneof_field.oneof_nested_message
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		msg := new(TestAllTypes_NestedMessage)
> -		err := b.DecodeMessage(msg)
> -		m.OneofField = &TestAllTypes_OneofNestedMessage{msg}
> -		return true, err
> -	case 113: // oneof_field.oneof_string
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.OneofField = &TestAllTypes_OneofString{x}
> -		return true, err
> -	case 114: // oneof_field.oneof_bytes
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeRawBytes(true)
> -		m.OneofField = &TestAllTypes_OneofBytes{x}
> -		return true, err
> -	case 115: // oneof_field.oneof_bool
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.OneofField = &TestAllTypes_OneofBool{x != 0}
> -		return true, err
> -	case 116: // oneof_field.oneof_uint64
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.OneofField = &TestAllTypes_OneofUint64{x}
> -		return true, err
> -	case 117: // oneof_field.oneof_float
> -		if wire != proto.WireFixed32 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed32()
> -		m.OneofField = &TestAllTypes_OneofFloat{math.Float32frombits(uint32(x))}
> -		return true, err
> -	case 118: // oneof_field.oneof_double
> -		if wire != proto.WireFixed64 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed64()
> -		m.OneofField = &TestAllTypes_OneofDouble{math.Float64frombits(x)}
> -		return true, err
> -	case 119: // oneof_field.oneof_enum
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.OneofField = &TestAllTypes_OneofEnum{TestAllTypes_NestedEnum(x)}
> -		return true, err
> -	default:
> -		return false, nil
> -	}
> -}
> -
> -func _TestAllTypes_OneofSizer(msg proto.Message) (n int) {
> -	m := msg.(*TestAllTypes)
> -	// oneof_field
> -	switch x := m.OneofField.(type) {
> -	case *TestAllTypes_OneofUint32:
> -		n += proto.SizeVarint(111<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.OneofUint32))
> -	case *TestAllTypes_OneofNestedMessage:
> -		s := proto.Size(x.OneofNestedMessage)
> -		n += proto.SizeVarint(112<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(s))
> -		n += s
> -	case *TestAllTypes_OneofString:
> -		n += proto.SizeVarint(113<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.OneofString)))
> -		n += len(x.OneofString)
> -	case *TestAllTypes_OneofBytes:
> -		n += proto.SizeVarint(114<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.OneofBytes)))
> -		n += len(x.OneofBytes)
> -	case *TestAllTypes_OneofBool:
> -		n += proto.SizeVarint(115<<3 | proto.WireVarint)
> -		n += 1
> -	case *TestAllTypes_OneofUint64:
> -		n += proto.SizeVarint(116<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.OneofUint64))
> -	case *TestAllTypes_OneofFloat:
> -		n += proto.SizeVarint(117<<3 | proto.WireFixed32)
> -		n += 4
> -	case *TestAllTypes_OneofDouble:
> -		n += proto.SizeVarint(118<<3 | proto.WireFixed64)
> -		n += 8
> -	case *TestAllTypes_OneofEnum:
> -		n += proto.SizeVarint(119<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.OneofEnum))
> -	case nil:
> -	default:
> -		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
> -	}
> -	return n
> -}
> -
> -type TestAllTypes_NestedMessage struct {
> -	A           int32         `protobuf:"varint,1,opt,name=a" json:"a,omitempty"`
> -	Corecursive *TestAllTypes `protobuf:"bytes,2,opt,name=corecursive" json:"corecursive,omitempty"`
> -}
> -
> -func (m *TestAllTypes_NestedMessage) Reset()                    { *m = TestAllTypes_NestedMessage{} }
> -func (m *TestAllTypes_NestedMessage) String() string            { return proto.CompactTextString(m) }
> -func (*TestAllTypes_NestedMessage) ProtoMessage()               {}
> -func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
> -
> -func (m *TestAllTypes_NestedMessage) GetA() int32 {
> -	if m != nil {
> -		return m.A
> -	}
> -	return 0
> -}
> -
> -func (m *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes {
> -	if m != nil {
> -		return m.Corecursive
> -	}
> -	return nil
> -}
> -
> -type ForeignMessage struct {
> -	C int32 `protobuf:"varint,1,opt,name=c" json:"c,omitempty"`
> -}
> -
> -func (m *ForeignMessage) Reset()                    { *m = ForeignMessage{} }
> -func (m *ForeignMessage) String() string            { return proto.CompactTextString(m) }
> -func (*ForeignMessage) ProtoMessage()               {}
> -func (*ForeignMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
> -
> -func (m *ForeignMessage) GetC() int32 {
> -	if m != nil {
> -		return m.C
> -	}
> -	return 0
> -}
> -
> -func init() {
> -	proto.RegisterType((*ConformanceRequest)(nil), "conformance.ConformanceRequest")
> -	proto.RegisterType((*ConformanceResponse)(nil), "conformance.ConformanceResponse")
> -	proto.RegisterType((*TestAllTypes)(nil), "conformance.TestAllTypes")
> -	proto.RegisterType((*TestAllTypes_NestedMessage)(nil), "conformance.TestAllTypes.NestedMessage")
> -	proto.RegisterType((*ForeignMessage)(nil), "conformance.ForeignMessage")
> -	proto.RegisterEnum("conformance.WireFormat", WireFormat_name, WireFormat_value)
> -	proto.RegisterEnum("conformance.ForeignEnum", ForeignEnum_name, ForeignEnum_value)
> -	proto.RegisterEnum("conformance.TestAllTypes_NestedEnum", TestAllTypes_NestedEnum_name, TestAllTypes_NestedEnum_value)
> -}
> -
> -func init() { proto.RegisterFile("conformance_proto/conformance.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 2737 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x5a, 0xd9, 0x72, 0xdb, 0xc8,
> -	0xd5, 0x16, 0x08, 0x59, 0x4b, 0x93, 0x92, 0xa8, 0xd6, 0xd6, 0x96, 0x5d, 0x63, 0x58, 0xb2, 0x7f,
> -	0xd3, 0xf6, 0x8c, 0xac, 0x05, 0x86, 0x65, 0xcf, 0x3f, 0x8e, 0x45, 0x9b, 0xb4, 0xe4, 0x8c, 0x25,
> -	0x17, 0x64, 0x8d, 0xab, 0x9c, 0x0b, 0x06, 0xa6, 0x20, 0x15, 0xc7, 0x24, 0xc1, 0x01, 0x48, 0x4f,
> -	0x94, 0xcb, 0xbc, 0x41, 0xf6, 0x7d, 0xbd, 0xcf, 0x7a, 0x93, 0xa4, 0x92, 0xab, 0x54, 0x6e, 0xb2,
> -	0x27, 0x95, 0x3d, 0x79, 0x85, 0xbc, 0x43, 0x52, 0xbd, 0xa2, 0xbb, 0x01, 0x50, 0xf4, 0x54, 0x0d,
> -	0x25, 0x1e, 0x7c, 0xfd, 0x9d, 0xd3, 0xe7, 0x1c, 0x7c, 0x2d, 0x1c, 0x18, 0x2c, 0xd7, 0x83, 0xf6,
> -	0x51, 0x10, 0xb6, 0xbc, 0x76, 0xdd, 0xaf, 0x75, 0xc2, 0xa0, 0x1b, 0xdc, 0x90, 0x2c, 0x2b, 0xc4,
> -	0x02, 0xf3, 0x92, 0x69, 0xf1, 0xec, 0x71, 0x10, 0x1c, 0x37, 0xfd, 0x1b, 0xe4, 0xd2, 0x8b, 0xde,
> -	0xd1, 0x0d, 0xaf, 0x7d, 0x42, 0x71, 0x8b, 0x6f, 0xe8, 0x97, 0x0e, 0x7b, 0xa1, 0xd7, 0x6d, 0x04,
> -	0x6d, 0x76, 0xdd, 0xd2, 0xaf, 0x1f, 0x35, 0xfc, 0xe6, 0x61, 0xad, 0xe5, 0x45, 0x2f, 0x19, 0xe2,
> -	0xbc, 0x8e, 0x88, 0xba, 0x61, 0xaf, 0xde, 0x65, 0x57, 0x2f, 0xe8, 0x57, 0xbb, 0x8d, 0x96, 0x1f,
> -	0x75, 0xbd, 0x56, 0x27, 0x2b, 0x80, 0x0f, 0x43, 0xaf, 0xd3, 0xf1, 0xc3, 0x88, 0x5e, 0x5f, 0xfa,
> -	0x85, 0x01, 0xe0, 0xfd, 0x78, 0x2f, 0xae, 0xff, 0x41, 0xcf, 0x8f, 0xba, 0xf0, 0x3a, 0x28, 0xf2,
> -	0x15, 0xb5, 0x8e, 0x77, 0xd2, 0x0c, 0xbc, 0x43, 0x64, 0x58, 0x46, 0xa9, 0xb0, 0x3d, 0xe4, 0x4e,
> -	0xf1, 0x2b, 0x4f, 0xe8, 0x05, 0xb8, 0x0c, 0x0a, 0xef, 0x47, 0x41, 0x5b, 0x00, 0x73, 0x96, 0x51,
> -	0x1a, 0xdf, 0x1e, 0x72, 0xf3, 0xd8, 0xca, 0x41, 0x7b, 0x60, 0x21, 0xa4, 0xe4, 0xfe, 0x61, 0x2d,
> -	0xe8, 0x75, 0x3b, 0xbd, 0x6e, 0x8d, 0x78, 0xed, 0x22, 0xd3, 0x32, 0x4a, 0x93, 0xeb, 0x0b, 0x2b,
> -	0x72, 0x9a, 0x9f, 0x35, 0x42, 0xbf, 0x4a, 0x2e, 0xbb, 0x73, 0x62, 0xdd, 0x1e, 0x59, 0x46, 0xcd,
> -	0xe5, 0x71, 0x30, 0xca, 0x1c, 0x2e, 0x7d, 0x2a, 0x07, 0x66, 0x94, 0x4d, 0x44, 0x9d, 0xa0, 0x1d,
> -	0xf9, 0xf0, 0x22, 0xc8, 0x77, 0xbc, 0x30, 0xf2, 0x6b, 0x7e, 0x18, 0x06, 0x21, 0xd9, 0x00, 0x8e,
> -	0x0b, 0x10, 0x63, 0x05, 0xdb, 0xe0, 0x55, 0x30, 0x15, 0xf9, 0x61, 0xc3, 0x6b, 0x36, 0x3e, 0xc9,
> -	0x61, 0x23, 0x0c, 0x36, 0x29, 0x2e, 0x50, 0xe8, 0x65, 0x30, 0x11, 0xf6, 0xda, 0x38, 0xc1, 0x0c,
> -	0xc8, 0xf7, 0x59, 0x60, 0x66, 0x0a, 0x4b, 0x4b, 0x9d, 0x39, 0x68, 0xea, 0x86, 0xd3, 0x52, 0xb7,
> -	0x08, 0x46, 0xa3, 0x97, 0x8d, 0x4e, 0xc7, 0x3f, 0x44, 0x67, 0xd8, 0x75, 0x6e, 0x28, 0x8f, 0x81,
> -	0x91, 0xd0, 0x8f, 0x7a, 0xcd, 0xee, 0xd2, 0x7f, 0xaa, 0xa0, 0xf0, 0xd4, 0x8f, 0xba, 0x5b, 0xcd,
> -	0xe6, 0xd3, 0x93, 0x8e, 0x1f, 0xc1, 0xcb, 0x60, 0x32, 0xe8, 0xe0, 0x5e, 0xf3, 0x9a, 0xb5, 0x46,
> -	0xbb, 0xbb, 0xb1, 0x4e, 0x12, 0x70, 0xc6, 0x9d, 0xe0, 0xd6, 0x1d, 0x6c, 0xd4, 0x61, 0x8e, 0x4d,
> -	0xf6, 0x65, 0x2a, 0x30, 0xc7, 0x86, 0x57, 0xc0, 0x94, 0x80, 0xf5, 0x28, 0x1d, 0xde, 0xd5, 0x84,
> -	0x2b, 0x56, 0x1f, 0x10, 0x6b, 0x02, 0xe8, 0xd8, 0x64, 0x57, 0xc3, 0x2a, 0x50, 0x63, 0x8c, 0x28,
> -	0x23, 0xde, 0xde, 0x74, 0x0c, 0xdc, 0x4f, 0x32, 0x46, 0x94, 0x11, 0xd7, 0x08, 0xaa, 0x40, 0xc7,
> -	0x86, 0x57, 0x41, 0x51, 0x00, 0x8f, 0x1a, 0x9f, 0xf0, 0x0f, 0x37, 0xd6, 0xd1, 0xa8, 0x65, 0x94,
> -	0x46, 0x5d, 0x41, 0x50, 0xa5, 0xe6, 0x24, 0xd4, 0xb1, 0xd1, 0x98, 0x65, 0x94, 0x46, 0x34, 0xa8,
> -	0x63, 0xc3, 0xeb, 0x60, 0x3a, 0x76, 0xcf, 0x69, 0xc7, 0x2d, 0xa3, 0x34, 0xe5, 0x0a, 0x8e, 0x7d,
> -	0x66, 0x4f, 0x01, 0x3b, 0x36, 0x02, 0x96, 0x51, 0x2a, 0xea, 0x60, 0xc7, 0x56, 0x52, 0x7f, 0xd4,
> -	0x0c, 0xbc, 0x2e, 0xca, 0x5b, 0x46, 0x29, 0x17, 0xa7, 0xbe, 0x8a, 0x8d, 0xca, 0xfe, 0x0f, 0x83,
> -	0xde, 0x8b, 0xa6, 0x8f, 0x0a, 0x96, 0x51, 0x32, 0xe2, 0xfd, 0x3f, 0x20, 0x56, 0xb8, 0x0c, 0xc4,
> -	0xca, 0xda, 0x8b, 0x20, 0x68, 0xa2, 0x09, 0xcb, 0x28, 0x8d, 0xb9, 0x05, 0x6e, 0x2c, 0x07, 0x41,
> -	0x53, 0xcd, 0x66, 0x37, 0x6c, 0xb4, 0x8f, 0xd1, 0x24, 0xee, 0x2a, 0x29, 0x9b, 0xc4, 0xaa, 0x44,
> -	0xf7, 0xe2, 0xa4, 0xeb, 0x47, 0x68, 0x0a, 0xb7, 0x71, 0x1c, 0x5d, 0x19, 0x1b, 0x61, 0x0d, 0x2c,
> -	0x08, 0x58, 0x9b, 0xde, 0xde, 0x2d, 0x3f, 0x8a, 0xbc, 0x63, 0x1f, 0x41, 0xcb, 0x28, 0xe5, 0xd7,
> -	0xaf, 0x28, 0x37, 0xb6, 0xdc, 0xa2, 0x2b, 0xbb, 0x04, 0xff, 0x98, 0xc2, 0xdd, 0x39, 0xce, 0xa3,
> -	0x98, 0xe1, 0x01, 0x40, 0x71, 0x96, 0x82, 0xd0, 0x6f, 0x1c, 0xb7, 0x85, 0x87, 0x19, 0xe2, 0xe1,
> -	0x9c, 0xe2, 0xa1, 0x4a, 0x31, 0x9c, 0x75, 0x5e, 0x24, 0x53, 0xb1, 0xc3, 0xf7, 0xc0, 0xac, 0x1e,
> -	0xb7, 0xdf, 0xee, 0xb5, 0xd0, 0x1c, 0x51, 0xa3, 0x4b, 0xa7, 0x05, 0x5d, 0x69, 0xf7, 0x5a, 0x2e,
> -	0x54, 0x23, 0xc6, 0x36, 0xf8, 0x2e, 0x98, 0x4b, 0x84, 0x4b, 0x88, 0xe7, 0x09, 0x31, 0x4a, 0x8b,
> -	0x95, 0x90, 0xcd, 0x68, 0x81, 0x12, 0x36, 0x47, 0x62, 0xa3, 0xd5, 0xaa, 0x75, 0x1a, 0x7e, 0xdd,
> -	0x47, 0x08, 0xd7, 0xac, 0x9c, 0x1b, 0xcb, 0xc5, 0xeb, 0x68, 0xdd, 0x9e, 0xe0, 0xcb, 0xf0, 0x8a,
> -	0xd4, 0x0a, 0xf5, 0x20, 0x3c, 0x44, 0x67, 0x19, 0xde, 0x88, 0xdb, 0xe1, 0x7e, 0x10, 0x1e, 0xc2,
> -	0x2a, 0x98, 0x0e, 0xfd, 0x7a, 0x2f, 0x8c, 0x1a, 0xaf, 0x7c, 0x91, 0xd6, 0x73, 0x24, 0xad, 0x67,
> -	0x33, 0x73, 0xe0, 0x16, 0xc5, 0x1a, 0x9e, 0xce, 0xcb, 0x60, 0x32, 0xf4, 0x3b, 0xbe, 0x87, 0xf3,
> -	0x48, 0x6f, 0xe6, 0x0b, 0x96, 0x89, 0xd5, 0x86, 0x5b, 0x85, 0xda, 0xc8, 0x30, 0xc7, 0x46, 0x96,
> -	0x65, 0x62, 0xb5, 0x91, 0x60, 0x54, 0x1b, 0x04, 0x8c, 0xa9, 0xcd, 0x45, 0xcb, 0xc4, 0x6a, 0xc3,
> -	0xcd, 0xb1, 0xda, 0x28, 0x40, 0xc7, 0x46, 0x4b, 0x96, 0x89, 0xd5, 0x46, 0x06, 0x6a, 0x8c, 0x4c,
> -	0x6d, 0x96, 0x2d, 0x13, 0xab, 0x0d, 0x37, 0xef, 0x27, 0x19, 0x99, 0xda, 0x5c, 0xb2, 0x4c, 0xac,
> -	0x36, 0x32, 0x90, 0xaa, 0x8d, 0x00, 0x72, 0x59, 0xb8, 0x6c, 0x99, 0x58, 0x6d, 0xb8, 0x5d, 0x52,
> -	0x1b, 0x15, 0xea, 0xd8, 0xe8, 0xff, 0x2c, 0x13, 0xab, 0x8d, 0x02, 0xa5, 0x6a, 0x13, 0xbb, 0xe7,
> -	0xb4, 0x57, 0x2c, 0x13, 0xab, 0x8d, 0x08, 0x40, 0x52, 0x1b, 0x0d, 0xec, 0xd8, 0xa8, 0x64, 0x99,
> -	0x58, 0x6d, 0x54, 0x30, 0x55, 0x9b, 0x38, 0x08, 0xa2, 0x36, 0x57, 0x2d, 0x13, 0xab, 0x8d, 0x08,
> -	0x81, 0xab, 0x8d, 0x80, 0x31, 0xb5, 0xb9, 0x66, 0x99, 0x58, 0x6d, 0xb8, 0x39, 0x56, 0x1b, 0x01,
> -	0x24, 0x6a, 0x73, 0xdd, 0x32, 0xb1, 0xda, 0x70, 0x23, 0x57, 0x9b, 0x38, 0x42, 0xaa, 0x36, 0x6f,
> -	0x5a, 0x26, 0x56, 0x1b, 0x11, 0x9f, 0x50, 0x9b, 0x98, 0x8d, 0xa8, 0xcd, 0x5b, 0x96, 0x89, 0xd5,
> -	0x46, 0xd0, 0x71, 0xb5, 0x11, 0x30, 0x4d, 0x6d, 0x56, 0x2d, 0xf3, 0xb5, 0xd4, 0x86, 0xf3, 0x24,
> -	0xd4, 0x26, 0xce, 0x92, 0xa6, 0x36, 0x6b, 0xc4, 0x43, 0x7f, 0xb5, 0x11, 0xc9, 0x4c, 0xa8, 0x8d,
> -	0x1e, 0x37, 0x11, 0x85, 0x0d, 0xcb, 0x1c, 0x5c, 0x6d, 0xd4, 0x88, 0xb9, 0xda, 0x24, 0xc2, 0x25,
> -	0xc4, 0x36, 0x21, 0xee, 0xa3, 0x36, 0x5a, 0xa0, 0x5c, 0x6d, 0xb4, 0x6a, 0x31, 0xb5, 0x71, 0x70,
> -	0xcd, 0xa8, 0xda, 0xa8, 0x75, 0x13, 0x6a, 0x23, 0xd6, 0x11, 0xb5, 0xb9, 0xc5, 0xf0, 0x46, 0xdc,
> -	0x0e, 0x44, 0x6d, 0x9e, 0x82, 0xa9, 0x96, 0xd7, 0xa1, 0x02, 0xc1, 0x64, 0x62, 0x93, 0x24, 0xf5,
> -	0xcd, 0xec, 0x0c, 0x3c, 0xf6, 0x3a, 0x44, 0x3b, 0xc8, 0x47, 0xa5, 0xdd, 0x0d, 0x4f, 0xdc, 0x89,
> -	0x96, 0x6c, 0x93, 0x58, 0x1d, 0x9b, 0xa9, 0xca, 0xed, 0xc1, 0x58, 0x1d, 0x9b, 0x7c, 0x28, 0xac,
> -	0xcc, 0x06, 0x9f, 0x83, 0x69, 0xcc, 0x4a, 0xe5, 0x87, 0xab, 0xd0, 0x1d, 0xc2, 0xbb, 0xd2, 0x97,
> -	0x97, 0x4a, 0x13, 0xfd, 0xa4, 0xcc, 0x38, 0x3c, 0xd9, 0x2a, 0x73, 0x3b, 0x36, 0x17, 0xae, 0xb7,
> -	0x07, 0xe4, 0x76, 0x6c, 0xfa, 0xa9, 0x72, 0x73, 0x2b, 0xe7, 0xa6, 0x22, 0xc7, 0xb5, 0xee, 0xff,
> -	0x07, 0xe0, 0xa6, 0x02, 0xb8, 0xaf, 0xc5, 0x2d, 0x5b, 0x65, 0x6e, 0xc7, 0xe6, 0xf2, 0xf8, 0xce,
> -	0x80, 0xdc, 0x8e, 0xbd, 0xaf, 0xc5, 0x2d, 0x5b, 0xe1, 0xc7, 0xc1, 0x0c, 0xe6, 0x66, 0xda, 0x26,
> -	0x24, 0xf5, 0x2e, 0x61, 0x5f, 0xed, 0xcb, 0xce, 0x74, 0x96, 0xfd, 0xa0, 0xfc, 0x38, 0x50, 0xd5,
> -	0xae, 0x78, 0x70, 0x6c, 0xa1, 0xc4, 0x1f, 0x19, 0xd4, 0x83, 0x63, 0xb3, 0x1f, 0x9a, 0x07, 0x61,
> -	0x87, 0x47, 0x60, 0x8e, 0xe4, 0x87, 0x6f, 0x42, 0x28, 0xf8, 0x3d, 0xe2, 0x63, 0xbd, 0x7f, 0x8e,
> -	0x18, 0x98, 0xff, 0xa4, 0x5e, 0x70, 0xc8, 0xfa, 0x15, 0xd5, 0x0f, 0xae, 0x04, 0xdf, 0xcb, 0xd6,
> -	0xc0, 0x7e, 0x1c, 0x9b, 0xff, 0xd4, 0xfd, 0xc4, 0x57, 0xd4, 0xfb, 0x95, 0x1e, 0x1a, 0xe5, 0x41,
> -	0xef, 0x57, 0x72, 0x9c, 0x68, 0xf7, 0x2b, 0x3d, 0x62, 0x9e, 0x81, 0x62, 0xcc, 0xca, 0xce, 0x98,
> -	0xfb, 0x84, 0xf6, 0xad, 0xd3, 0x69, 0xe9, 0xe9, 0x43, 0x79, 0x27, 0x5b, 0x8a, 0x11, 0xee, 0x02,
> -	0xec, 0x89, 0x9c, 0x46, 0xf4, 0x48, 0x7a, 0x40, 0x58, 0xaf, 0xf5, 0x65, 0xc5, 0xe7, 0x14, 0xfe,
> -	0x9f, 0x52, 0xe6, 0x5b, 0xb1, 0x45, 0xb4, 0x3b, 0x95, 0x42, 0x76, 0x7e, 0x55, 0x06, 0x69, 0x77,
> -	0x02, 0xa5, 0x9f, 0x52, 0xbb, 0x4b, 0x56, 0x9e, 0x04, 0xc6, 0x4d, 0x8f, 0xbc, 0xea, 0x00, 0x49,
> -	0xa0, 0xcb, 0xc9, 0x69, 0x18, 0x27, 0x41, 0x32, 0xc2, 0x0e, 0x38, 0x2b, 0x11, 0x6b, 0x87, 0xe4,
> -	0x43, 0xe2, 0xe1, 0xe6, 0x00, 0x1e, 0x94, 0x63, 0x91, 0x7a, 0x9a, 0x6f, 0xa5, 0x5e, 0x84, 0x11,
> -	0x58, 0x94, 0x3c, 0xea, 0xa7, 0xe6, 0x36, 0x71, 0xe9, 0x0c, 0xe0, 0x52, 0x3d, 0x33, 0xa9, 0xcf,
> -	0x85, 0x56, 0xfa, 0x55, 0x78, 0x0c, 0xe6, 0x93, 0xdb, 0x24, 0x47, 0xdf, 0xce, 0x20, 0xf7, 0x80,
> -	0xb4, 0x0d, 0x7c, 0xf4, 0x49, 0xf7, 0x80, 0x76, 0x05, 0xbe, 0x0f, 0x16, 0x52, 0x76, 0x47, 0x3c,
> -	0x3d, 0x22, 0x9e, 0x36, 0x06, 0xdf, 0x5a, 0xec, 0x6a, 0xb6, 0x95, 0x72, 0x09, 0x2e, 0x83, 0x42,
> -	0xd0, 0xf6, 0x83, 0x23, 0x7e, 0xdc, 0x04, 0xf8, 0x11, 0x7b, 0x7b, 0xc8, 0xcd, 0x13, 0x2b, 0x3b,
> -	0x3c, 0x3e, 0x06, 0x66, 0x29, 0x48, 0xab, 0x6d, 0xe7, 0xb5, 0x1e, 0xb7, 0xb6, 0x87, 0x5c, 0x48,
> -	0x68, 0xd4, 0x5a, 0x8a, 0x08, 0x58, 0xb7, 0x7f, 0xc0, 0x27, 0x12, 0xc4, 0xca, 0x7a, 0xf7, 0x22,
> -	0xa0, 0x5f, 0x59, 0xdb, 0x86, 0x6c, 0xbc, 0x01, 0x88, 0x91, 0x76, 0xe1, 0x05, 0x00, 0x18, 0x04,
> -	0xdf, 0x87, 0x11, 0x7e, 0x10, 0xdd, 0x1e, 0x72, 0xc7, 0x29, 0x02, 0xdf, 0x5b, 0xca, 0x56, 0x1d,
> -	0x1b, 0x75, 0x2d, 0xa3, 0x34, 0xac, 0x6c, 0xd5, 0xb1, 0x63, 0x47, 0x54, 0x7b, 0x7a, 0xf8, 0xf1,
> -	0x58, 0x38, 0xa2, 0x62, 0x22, 0x78, 0x98, 0x90, 0xbc, 0xc2, 0x8f, 0xc6, 0x82, 0x87, 0x09, 0x43,
> -	0x85, 0x47, 0x43, 0xca, 0xf6, 0xe1, 0xe0, 0x8f, 0x78, 0x22, 0x66, 0x52, 0x9e, 0x3d, 0xe9, 0x69,
> -	0x8c, 0x88, 0x0c, 0x9b, 0xa6, 0xa1, 0x5f, 0x19, 0x24, 0xf7, 0x8b, 0x2b, 0x74, 0xdc, 0xb6, 0xc2,
> -	0xe7, 0x3c, 0x2b, 0x78, 0xab, 0xef, 0x79, 0xcd, 0x9e, 0x1f, 0x3f, 0xa6, 0x61, 0xd3, 0x33, 0xba,
> -	0x0e, 0xba, 0x60, 0x5e, 0x9d, 0xd1, 0x08, 0xc6, 0x5f, 0x1b, 0xec, 0xd1, 0x56, 0x67, 0x24, 0x7a,
> -	0x47, 0x29, 0x67, 0x95, 0x49, 0x4e, 0x06, 0xa7, 0x63, 0x0b, 0xce, 0xdf, 0xf4, 0xe1, 0x74, 0xec,
> -	0x24, 0xa7, 0x63, 0x73, 0xce, 0x03, 0xe9, 0x21, 0xbf, 0xa7, 0x06, 0xfa, 0x5b, 0x4a, 0x7a, 0x3e,
> -	0x41, 0x7a, 0x20, 0x45, 0x3a, 0xa7, 0x0e, 0x89, 0xb2, 0x68, 0xa5, 0x58, 0x7f, 0xd7, 0x8f, 0x96,
> -	0x07, 0x3b, 0xa7, 0x8e, 0x94, 0xd2, 0x32, 0x40, 0x1a, 0x47, 0xb0, 0xfe, 0x3e, 0x2b, 0x03, 0xa4,
> -	0x97, 0xb4, 0x0c, 0x10, 0x5b, 0x5a, 0xa8, 0xb4, 0xd3, 0x04, 0xe9, 0x1f, 0xb2, 0x42, 0xa5, 0xcd,
> -	0xa7, 0x85, 0x4a, 0x8d, 0x69, 0xb4, 0x4c, 0x61, 0x38, 0xed, 0x1f, 0xb3, 0x68, 0xe9, 0x4d, 0xa8,
> -	0xd1, 0x52, 0x63, 0x5a, 0x06, 0xc8, 0x3d, 0x2a, 0x58, 0xff, 0x94, 0x95, 0x01, 0x72, 0xdb, 0x6a,
> -	0x19, 0x20, 0x36, 0xce, 0xb9, 0x27, 0x3d, 0x1c, 0x28, 0xcd, 0xff, 0x67, 0x83, 0xc8, 0x60, 0xdf,
> -	0xe6, 0x97, 0x1f, 0x0a, 0xa5, 0x20, 0xd5, 0x91, 0x81, 0x60, 0xfc, 0x8b, 0xc1, 0x9e, 0xb4, 0xfa,
> -	0x35, 0xbf, 0x32, 0x58, 0xc8, 0xe0, 0x94, 0x1a, 0xea, 0xaf, 0x7d, 0x38, 0x45, 0xf3, 0x2b, 0x53,
> -	0x08, 0xa9, 0x46, 0xda, 0x30, 0x42, 0x90, 0xfe, 0x8d, 0x92, 0x9e, 0xd2, 0xfc, 0xea, 0xcc, 0x22,
> -	0x8b, 0x56, 0x8a, 0xf5, 0xef, 0xfd, 0x68, 0x45, 0xf3, 0xab, 0x13, 0x8e, 0xb4, 0x0c, 0xa8, 0xcd,
> -	0xff, 0x8f, 0xac, 0x0c, 0xc8, 0xcd, 0xaf, 0x0c, 0x03, 0xd2, 0x42, 0xd5, 0x9a, 0xff, 0x9f, 0x59,
> -	0xa1, 0x2a, 0xcd, 0xaf, 0x8e, 0x0e, 0xd2, 0x68, 0xb5, 0xe6, 0xff, 0x57, 0x16, 0xad, 0xd2, 0xfc,
> -	0xea, 0xb3, 0x68, 0x5a, 0x06, 0xd4, 0xe6, 0xff, 0x77, 0x56, 0x06, 0xe4, 0xe6, 0x57, 0x06, 0x0e,
> -	0x9c, 0xf3, 0xa1, 0x34, 0xd7, 0xe5, 0xef, 0x70, 0xd0, 0x77, 0x73, 0x6c, 0x4e, 0x96, 0xd8, 0x3b,
> -	0x43, 0xc4, 0x33, 0x5f, 0x6e, 0x81, 0x8f, 0x80, 0x18, 0x1a, 0xd6, 0xc4, 0xcb, 0x1a, 0xf4, 0xbd,
> -	0x5c, 0xc6, 0xf9, 0xf1, 0x94, 0x43, 0x5c, 0xe1, 0x5f, 0x98, 0xe0, 0x47, 0xc1, 0x8c, 0x34, 0xc4,
> -	0xe6, 0x2f, 0x8e, 0xd0, 0xf7, 0xb3, 0xc8, 0xaa, 0x18, 0xf3, 0xd8, 0x8b, 0x5e, 0xc6, 0x64, 0xc2,
> -	0x04, 0xb7, 0xd4, 0xb9, 0x70, 0xaf, 0xde, 0x45, 0x3f, 0xa0, 0x44, 0x0b, 0x69, 0x45, 0xe8, 0xd5,
> -	0xbb, 0xca, 0xc4, 0xb8, 0x57, 0xef, 0xc2, 0x4d, 0x20, 0x66, 0x8b, 0x35, 0xaf, 0x7d, 0x82, 0x7e,
> -	0x48, 0xd7, 0xcf, 0x26, 0xd6, 0x6f, 0xb5, 0x4f, 0xdc, 0x3c, 0x87, 0x6e, 0xb5, 0x4f, 0xe0, 0x5d,
> -	0x69, 0xd6, 0xfc, 0x0a, 0x97, 0x01, 0xfd, 0x88, 0xae, 0x9d, 0x4f, 0xac, 0xa5, 0x55, 0x12, 0xd3,
> -	0x4d, 0xf2, 0x15, 0x97, 0x27, 0x6e, 0x50, 0x5e, 0x9e, 0x1f, 0xe7, 0x48, 0xb5, 0xfb, 0x95, 0x47,
> -	0xf4, 0xa5, 0x54, 0x1e, 0x41, 0x14, 0x97, 0xe7, 0x27, 0xb9, 0x0c, 0x85, 0x93, 0xca, 0xc3, 0x97,
> -	0xc5, 0xe5, 0x91, 0xb9, 0x48, 0x79, 0x48, 0x75, 0x7e, 0x9a, 0xc5, 0x25, 0x55, 0x27, 0x1e, 0x0a,
> -	0xb2, 0x55, 0xb8, 0x3a, 0xf2, 0xad, 0x82, 0xab, 0xf3, 0x4b, 0x4a, 0x94, 0x5d, 0x1d, 0xe9, 0xee,
> -	0x60, 0xd5, 0x11, 0x14, 0xb8, 0x3a, 0x3f, 0xa3, 0xeb, 0x33, 0xaa, 0xc3, 0xa1, 0xac, 0x3a, 0x62,
> -	0x25, 0xad, 0xce, 0xcf, 0xe9, 0xda, 0xcc, 0xea, 0x70, 0x38, 0xad, 0xce, 0x05, 0x00, 0xc8, 0xfe,
> -	0xdb, 0x5e, 0xcb, 0x5f, 0x43, 0x9f, 0x36, 0xc9, 0x6b, 0x28, 0xc9, 0x04, 0x2d, 0x90, 0xa7, 0xfd,
> -	0x8b, 0xbf, 0xae, 0xa3, 0xcf, 0xc8, 0x88, 0x5d, 0x6c, 0x82, 0x17, 0x41, 0xa1, 0x16, 0x43, 0x36,
> -	0xd0, 0x67, 0x19, 0xa4, 0xca, 0x21, 0x1b, 0x70, 0x09, 0x4c, 0x50, 0x04, 0x81, 0xd8, 0x35, 0xf4,
> -	0x39, 0x9d, 0x86, 0xfc, 0x3d, 0x49, 0xbe, 0xad, 0x62, 0xc8, 0x4d, 0xf4, 0x79, 0x8a, 0x90, 0x6d,
> -	0x70, 0x99, 0xd3, 0xac, 0x12, 0x1e, 0x07, 0x7d, 0x41, 0x01, 0x61, 0x1e, 0x47, 0xec, 0x08, 0x7f,
> -	0xbb, 0x85, 0xbe, 0xa8, 0x3b, 0xba, 0x85, 0x01, 0x22, 0xb4, 0x4d, 0xf4, 0x25, 0x3d, 0xda, 0xcd,
> -	0x78, 0xcb, 0xf8, 0xeb, 0x6d, 0xf4, 0x65, 0x9d, 0xe2, 0x36, 0x5c, 0x02, 0x85, 0xaa, 0x40, 0xac,
> -	0xad, 0xa2, 0xaf, 0xb0, 0x38, 0x04, 0xc9, 0xda, 0x2a, 0xc1, 0xec, 0x54, 0xde, 0x7d, 0x50, 0xdb,
> -	0xdd, 0x7a, 0x5c, 0x59, 0x5b, 0x43, 0x5f, 0xe5, 0x18, 0x6c, 0xa4, 0xb6, 0x18, 0x43, 0x72, 0xbd,
> -	0x8e, 0xbe, 0xa6, 0x60, 0x88, 0x0d, 0x5e, 0x02, 0x93, 0x35, 0x29, 0xbf, 0x6b, 0x1b, 0xe8, 0xeb,
> -	0x09, 0x6f, 0x1b, 0x14, 0x55, 0x8d, 0x51, 0x36, 0xfa, 0x46, 0x02, 0x65, 0xc7, 0x09, 0xa4, 0xa0,
> -	0x9b, 0xe8, 0x9b, 0x72, 0x02, 0x09, 0x48, 0xca, 0x32, 0xdd, 0x9d, 0x83, 0xbe, 0x95, 0x00, 0x39,
> -	0xd8, 0x9f, 0x14, 0xd3, 0xad, 0x5a, 0x0d, 0x7d, 0x3b, 0x81, 0xba, 0x85, 0x51, 0x52, 0x4c, 0x9b,
> -	0xb5, 0x1a, 0xfa, 0x4e, 0x22, 0xaa, 0xcd, 0xc5, 0xe7, 0x60, 0x42, 0x7d, 0xd0, 0x29, 0x00, 0xc3,
> -	0x63, 0x6f, 0x44, 0x0d, 0x0f, 0xbe, 0x0d, 0xf2, 0xf5, 0x40, 0xbc, 0xd4, 0x40, 0xb9, 0xd3, 0x5e,
> -	0x80, 0xc8, 0xe8, 0xc5, 0x7b, 0x00, 0x26, 0x87, 0x94, 0xb0, 0x08, 0xcc, 0x97, 0xfe, 0x09, 0x73,
> -	0x81, 0x7f, 0x85, 0xb3, 0xe0, 0x0c, 0xbd, 0x7d, 0x72, 0xc4, 0x46, 0xbf, 0xdc, 0xc9, 0x6d, 0x1a,
> -	0x31, 0x83, 0x3c, 0x90, 0x94, 0x19, 0xcc, 0x14, 0x06, 0x53, 0x66, 0x28, 0x83, 0xd9, 0xb4, 0xd1,
> -	0xa3, 0xcc, 0x31, 0x91, 0xc2, 0x31, 0x91, 0xce, 0xa1, 0x8c, 0x18, 0x65, 0x8e, 0xe1, 0x14, 0x8e,
> -	0xe1, 0x24, 0x47, 0x62, 0x94, 0x28, 0x73, 0x4c, 0xa7, 0x70, 0x4c, 0xa7, 0x73, 0x28, 0x23, 0x43,
> -	0x99, 0x03, 0xa6, 0x70, 0x40, 0x99, 0xe3, 0x01, 0x98, 0x4f, 0x1f, 0x0c, 0xca, 0x2c, 0xa3, 0x29,
> -	0x2c, 0xa3, 0x19, 0x2c, 0xea, 0xf0, 0x4f, 0x66, 0x19, 0x49, 0x61, 0x19, 0x91, 0x59, 0xaa, 0x00,
> -	0x65, 0x8d, 0xf7, 0x64, 0x9e, 0xa9, 0x14, 0x9e, 0xa9, 0x2c, 0x1e, 0x6d, 0x7c, 0x27, 0xf3, 0x14,
> -	0x53, 0x78, 0x8a, 0xa9, 0xdd, 0x26, 0x0f, 0xe9, 0x4e, 0xeb, 0xd7, 0x9c, 0xcc, 0xb0, 0x05, 0x66,
> -	0x52, 0xe6, 0x71, 0xa7, 0x51, 0x18, 0x32, 0xc5, 0x5d, 0x50, 0xd4, 0x87, 0x6f, 0xf2, 0xfa, 0xb1,
> -	0x94, 0xf5, 0x63, 0x29, 0x4d, 0xa2, 0x0f, 0xda, 0x64, 0x8e, 0xf1, 0x14, 0x8e, 0xf1, 0xe4, 0x36,
> -	0xf4, 0x89, 0xda, 0x69, 0x14, 0x05, 0x99, 0x22, 0x04, 0xe7, 0xfa, 0x8c, 0xcc, 0x52, 0xa8, 0xde,
> -	0x91, 0xa9, 0x5e, 0xe3, 0x7d, 0x95, 0xe4, 0xf3, 0x18, 0x9c, 0xef, 0x37, 0x33, 0x4b, 0x71, 0xba,
> -	0xa6, 0x3a, 0xed, 0xfb, 0x0a, 0x4b, 0x72, 0xd4, 0xa4, 0x0d, 0x97, 0x36, 0x2b, 0x4b, 0x71, 0x72,
> -	0x47, 0x76, 0x32, 0xe8, 0x4b, 0x2d, 0xc9, 0x9b, 0x07, 0xce, 0x66, 0xce, 0xcb, 0x52, 0xdc, 0xad,
> -	0xa8, 0xee, 0xb2, 0x5f, 0x75, 0xc5, 0x2e, 0x96, 0x6e, 0x03, 0x20, 0x4d, 0xf6, 0x46, 0x81, 0x59,
> -	0xdd, 0xdb, 0x2b, 0x0e, 0xe1, 0x5f, 0xca, 0x5b, 0x6e, 0xd1, 0xa0, 0xbf, 0x3c, 0x2f, 0xe6, 0xb0,
> -	0xbb, 0xdd, 0xca, 0xc3, 0xe2, 0x7f, 0xf9, 0x7f, 0x46, 0x79, 0x42, 0x8c, 0xa2, 0xf0, 0xa9, 0xb2,
> -	0xf4, 0x06, 0x98, 0xd4, 0x06, 0x92, 0x05, 0x60, 0xd4, 0xf9, 0x81, 0x52, 0xbf, 0x76, 0x13, 0x80,
> -	0xf8, 0xdf, 0x30, 0xc1, 0x29, 0x90, 0x3f, 0xd8, 0xdd, 0x7f, 0x52, 0xb9, 0xbf, 0x53, 0xdd, 0xa9,
> -	0x3c, 0x28, 0x0e, 0xc1, 0x02, 0x18, 0x7b, 0xe2, 0xee, 0x3d, 0xdd, 0x2b, 0x1f, 0x54, 0x8b, 0x06,
> -	0x1c, 0x03, 0xc3, 0x8f, 0xf6, 0xf7, 0x76, 0x8b, 0xb9, 0x6b, 0xf7, 0x40, 0x5e, 0x9e, 0x07, 0x4e,
> -	0x81, 0x7c, 0x75, 0xcf, 0xad, 0xec, 0x3c, 0xdc, 0xad, 0xd1, 0x48, 0x25, 0x03, 0x8d, 0x58, 0x31,
> -	0x3c, 0x2f, 0xe6, 0xca, 0x17, 0xc1, 0x85, 0x7a, 0xd0, 0x4a, 0xfc, 0x61, 0x26, 0x25, 0xe7, 0xc5,
> -	0x08, 0xb1, 0x6e, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x33, 0xc2, 0x0c, 0xb6, 0xeb, 0x26, 0x00,
> -	0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.proto b/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.proto
> deleted file mode 100644
> index 95a8fd13..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.proto
> +++ /dev/null
> @@ -1,285 +0,0 @@
> -// Protocol Buffers - Google's data interchange format
> -// Copyright 2008 Google Inc.  All rights reserved.
> -// https://developers.google.com/protocol-buffers/
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto3";
> -package conformance;
> -option java_package = "com.google.protobuf.conformance";
> -
> -import "google/protobuf/any.proto";
> -import "google/protobuf/duration.proto";
> -import "google/protobuf/field_mask.proto";
> -import "google/protobuf/struct.proto";
> -import "google/protobuf/timestamp.proto";
> -import "google/protobuf/wrappers.proto";
> -
> -// This defines the conformance testing protocol.  This protocol exists between
> -// the conformance test suite itself and the code being tested.  For each test,
> -// the suite will send a ConformanceRequest message and expect a
> -// ConformanceResponse message.
> -//
> -// You can either run the tests in two different ways:
> -//
> -//   1. in-process (using the interface in conformance_test.h).
> -//
> -//   2. as a sub-process communicating over a pipe.  Information about how to
> -//      do this is in conformance_test_runner.cc.
> -//
> -// Pros/cons of the two approaches:
> -//
> -//   - running as a sub-process is much simpler for languages other than C/C++.
> -//
> -//   - running as a sub-process may be more tricky in unusual environments like
> -//     iOS apps, where fork/stdin/stdout are not available.
> -
> -enum WireFormat {
> -  UNSPECIFIED = 0;
> -  PROTOBUF = 1;
> -  JSON = 2;
> -}
> -
> -// Represents a single test case's input.  The testee should:
> -//
> -//   1. parse this proto (which should always succeed)
> -//   2. parse the protobuf or JSON payload in "payload" (which may fail)
> -//   3. if the parse succeeded, serialize the message in the requested format.
> -message ConformanceRequest {
> -  // The payload (whether protobuf of JSON) is always for a TestAllTypes proto
> -  // (see below).
> -  oneof payload {
> -    bytes protobuf_payload = 1;
> -    string json_payload = 2;
> -  }
> -
> -  // Which format should the testee serialize its message to?
> -  WireFormat requested_output_format = 3;
> -}
> -
> -// Represents a single test case's output.
> -message ConformanceResponse {
> -  oneof result {
> -    // This string should be set to indicate parsing failed.  The string can
> -    // provide more information about the parse error if it is available.
> -    //
> -    // Setting this string does not necessarily mean the testee failed the
> -    // test.  Some of the test cases are intentionally invalid input.
> -    string parse_error = 1;
> -
> -    // If the input was successfully parsed but errors occurred when
> -    // serializing it to the requested output format, set the error message in
> -    // this field.
> -    string serialize_error = 6;
> -
> -    // This should be set if some other error occurred.  This will always
> -    // indicate that the test failed.  The string can provide more information
> -    // about the failure.
> -    string runtime_error = 2;
> -
> -    // If the input was successfully parsed and the requested output was
> -    // protobuf, serialize it to protobuf and set it in this field.
> -    bytes protobuf_payload = 3;
> -
> -    // If the input was successfully parsed and the requested output was JSON,
> -    // serialize to JSON and set it in this field.
> -    string json_payload = 4;
> -
> -    // For when the testee skipped the test, likely because a certain feature
> -    // wasn't supported, like JSON input/output.
> -    string skipped = 5;
> -  }
> -}
> -
> -// This proto includes every type of field in both singular and repeated
> -// forms.
> -message TestAllTypes {
> -  message NestedMessage {
> -    int32 a = 1;
> -    TestAllTypes corecursive = 2;
> -  }
> -
> -  enum NestedEnum {
> -    FOO = 0;
> -    BAR = 1;
> -    BAZ = 2;
> -    NEG = -1;  // Intentionally negative.
> -  }
> -
> -  // Singular
> -  int32 optional_int32    =  1;
> -  int64 optional_int64    =  2;
> -  uint32 optional_uint32   =  3;
> -  uint64 optional_uint64   =  4;
> -  sint32 optional_sint32   =  5;
> -  sint64 optional_sint64   =  6;
> -  fixed32 optional_fixed32  =  7;
> -  fixed64 optional_fixed64  =  8;
> -  sfixed32 optional_sfixed32 =  9;
> -  sfixed64 optional_sfixed64 = 10;
> -  float optional_float    = 11;
> -  double optional_double   = 12;
> -  bool optional_bool     = 13;
> -  string optional_string   = 14;
> -  bytes optional_bytes    = 15;
> -
> -  NestedMessage                        optional_nested_message  = 18;
> -  ForeignMessage                       optional_foreign_message = 19;
> -
> -  NestedEnum                           optional_nested_enum     = 21;
> -  ForeignEnum                          optional_foreign_enum    = 22;
> -
> -  string optional_string_piece = 24 [ctype=STRING_PIECE];
> -  string optional_cord = 25 [ctype=CORD];
> -
> -  TestAllTypes recursive_message = 27;
> -
> -  // Repeated
> -  repeated    int32 repeated_int32    = 31;
> -  repeated    int64 repeated_int64    = 32;
> -  repeated   uint32 repeated_uint32   = 33;
> -  repeated   uint64 repeated_uint64   = 34;
> -  repeated   sint32 repeated_sint32   = 35;
> -  repeated   sint64 repeated_sint64   = 36;
> -  repeated  fixed32 repeated_fixed32  = 37;
> -  repeated  fixed64 repeated_fixed64  = 38;
> -  repeated sfixed32 repeated_sfixed32 = 39;
> -  repeated sfixed64 repeated_sfixed64 = 40;
> -  repeated    float repeated_float    = 41;
> -  repeated   double repeated_double   = 42;
> -  repeated     bool repeated_bool     = 43;
> -  repeated   string repeated_string   = 44;
> -  repeated    bytes repeated_bytes    = 45;
> -
> -  repeated NestedMessage                        repeated_nested_message  = 48;
> -  repeated ForeignMessage                       repeated_foreign_message = 49;
> -
> -  repeated NestedEnum                           repeated_nested_enum     = 51;
> -  repeated ForeignEnum                          repeated_foreign_enum    = 52;
> -
> -  repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
> -  repeated string repeated_cord = 55 [ctype=CORD];
> -
> -  // Map
> -  map <   int32, int32>    map_int32_int32 = 56;
> -  map <   int64, int64>    map_int64_int64 = 57;
> -  map <  uint32, uint32>   map_uint32_uint32 = 58;
> -  map <  uint64, uint64>   map_uint64_uint64 = 59;
> -  map <  sint32, sint32>   map_sint32_sint32 = 60;
> -  map <  sint64, sint64>   map_sint64_sint64 = 61;
> -  map < fixed32, fixed32>  map_fixed32_fixed32 = 62;
> -  map < fixed64, fixed64>  map_fixed64_fixed64 = 63;
> -  map <sfixed32, sfixed32> map_sfixed32_sfixed32 = 64;
> -  map <sfixed64, sfixed64> map_sfixed64_sfixed64 = 65;
> -  map <   int32, float>    map_int32_float = 66;
> -  map <   int32, double>   map_int32_double = 67;
> -  map <    bool, bool>     map_bool_bool = 68;
> -  map <  string, string>   map_string_string = 69;
> -  map <  string, bytes>    map_string_bytes = 70;
> -  map <  string, NestedMessage>  map_string_nested_message = 71;
> -  map <  string, ForeignMessage> map_string_foreign_message = 72;
> -  map <  string, NestedEnum>     map_string_nested_enum = 73;
> -  map <  string, ForeignEnum>    map_string_foreign_enum = 74;
> -
> -  oneof oneof_field {
> -    uint32 oneof_uint32 = 111;
> -    NestedMessage oneof_nested_message = 112;
> -    string oneof_string = 113;
> -    bytes oneof_bytes = 114;
> -    bool oneof_bool = 115;
> -    uint64 oneof_uint64 = 116;
> -    float oneof_float = 117;
> -    double oneof_double = 118;
> -    NestedEnum oneof_enum = 119;
> -  }
> -
> -  // Well-known types
> -  google.protobuf.BoolValue optional_bool_wrapper = 201;
> -  google.protobuf.Int32Value optional_int32_wrapper = 202;
> -  google.protobuf.Int64Value optional_int64_wrapper = 203;
> -  google.protobuf.UInt32Value optional_uint32_wrapper = 204;
> -  google.protobuf.UInt64Value optional_uint64_wrapper = 205;
> -  google.protobuf.FloatValue optional_float_wrapper = 206;
> -  google.protobuf.DoubleValue optional_double_wrapper = 207;
> -  google.protobuf.StringValue optional_string_wrapper = 208;
> -  google.protobuf.BytesValue optional_bytes_wrapper = 209;
> -
> -  repeated google.protobuf.BoolValue repeated_bool_wrapper = 211;
> -  repeated google.protobuf.Int32Value repeated_int32_wrapper = 212;
> -  repeated google.protobuf.Int64Value repeated_int64_wrapper = 213;
> -  repeated google.protobuf.UInt32Value repeated_uint32_wrapper = 214;
> -  repeated google.protobuf.UInt64Value repeated_uint64_wrapper = 215;
> -  repeated google.protobuf.FloatValue repeated_float_wrapper = 216;
> -  repeated google.protobuf.DoubleValue repeated_double_wrapper = 217;
> -  repeated google.protobuf.StringValue repeated_string_wrapper = 218;
> -  repeated google.protobuf.BytesValue repeated_bytes_wrapper = 219;
> -
> -  google.protobuf.Duration optional_duration = 301;
> -  google.protobuf.Timestamp optional_timestamp = 302;
> -  google.protobuf.FieldMask optional_field_mask = 303;
> -  google.protobuf.Struct optional_struct = 304;
> -  google.protobuf.Any optional_any = 305;
> -  google.protobuf.Value optional_value = 306;
> -
> -  repeated google.protobuf.Duration repeated_duration = 311;
> -  repeated google.protobuf.Timestamp repeated_timestamp = 312;
> -  repeated google.protobuf.FieldMask repeated_fieldmask = 313;
> -  repeated google.protobuf.Struct repeated_struct = 324;
> -  repeated google.protobuf.Any repeated_any = 315;
> -  repeated google.protobuf.Value repeated_value = 316;
> -
> -  // Test field-name-to-JSON-name convention.
> -  // (protobuf says names can be any valid C/C++ identifier.)
> -  int32 fieldname1 = 401;
> -  int32 field_name2 = 402;
> -  int32 _field_name3 = 403;
> -  int32 field__name4_ = 404;
> -  int32 field0name5 = 405;
> -  int32 field_0_name6 = 406;
> -  int32 fieldName7 = 407;
> -  int32 FieldName8 = 408;
> -  int32 field_Name9 = 409;
> -  int32 Field_Name10 = 410;
> -  int32 FIELD_NAME11 = 411;
> -  int32 FIELD_name12 = 412;
> -  int32 __field_name13 = 413;
> -  int32 __Field_name14 = 414;
> -  int32 field__name15 = 415;
> -  int32 field__Name16 = 416;
> -  int32 field_name17__ = 417;
> -  int32 Field_name18__ = 418;
> -}
> -
> -message ForeignMessage {
> -  int32 c = 1;
> -}
> -
> -enum ForeignEnum {
> -  FOREIGN_FOO = 0;
> -  FOREIGN_BAR = 1;
> -  FOREIGN_BAZ = 2;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/descriptor/descriptor.go b/phaul/src/test/vendor/github.com/golang/protobuf/descriptor/descriptor.go
> deleted file mode 100644
> index ac7e51bf..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/descriptor/descriptor.go
> +++ /dev/null
> @@ -1,93 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2016 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// Package descriptor provides functions for obtaining protocol buffer
> -// descriptors for generated Go types.
> -//
> -// These functions cannot go in package proto because they depend on the
> -// generated protobuf descriptor messages, which themselves depend on proto.
> -package descriptor
> -
> -import (
> -	"bytes"
> -	"compress/gzip"
> -	"fmt"
> -	"io/ioutil"
> -
> -	"github.com/golang/protobuf/proto"
> -	protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
> -)
> -
> -// extractFile extracts a FileDescriptorProto from a gzip'd buffer.
> -func extractFile(gz []byte) (*protobuf.FileDescriptorProto, error) {
> -	r, err := gzip.NewReader(bytes.NewReader(gz))
> -	if err != nil {
> -		return nil, fmt.Errorf("failed to open gzip reader: %v", err)
> -	}
> -	defer r.Close()
> -
> -	b, err := ioutil.ReadAll(r)
> -	if err != nil {
> -		return nil, fmt.Errorf("failed to uncompress descriptor: %v", err)
> -	}
> -
> -	fd := new(protobuf.FileDescriptorProto)
> -	if err := proto.Unmarshal(b, fd); err != nil {
> -		return nil, fmt.Errorf("malformed FileDescriptorProto: %v", err)
> -	}
> -
> -	return fd, nil
> -}
> -
> -// Message is a proto.Message with a method to return its descriptor.
> -//
> -// Message types generated by the protocol compiler always satisfy
> -// the Message interface.
> -type Message interface {
> -	proto.Message
> -	Descriptor() ([]byte, []int)
> -}
> -
> -// ForMessage returns a FileDescriptorProto and a DescriptorProto from within it
> -// describing the given message.
> -func ForMessage(msg Message) (fd *protobuf.FileDescriptorProto, md *protobuf.DescriptorProto) {
> -	gz, path := msg.Descriptor()
> -	fd, err := extractFile(gz)
> -	if err != nil {
> -		panic(fmt.Sprintf("invalid FileDescriptorProto for %T: %v", msg, err))
> -	}
> -
> -	md = fd.MessageType[path[0]]
> -	for _, i := range path[1:] {
> -		md = md.NestedType[i]
> -	}
> -	return fd, md
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go
> deleted file mode 100644
> index 27b0729c..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -package descriptor_test
> -
> -import (
> -	"fmt"
> -	"testing"
> -
> -	"github.com/golang/protobuf/descriptor"
> -	tpb "github.com/golang/protobuf/proto/testdata"
> -	protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
> -)
> -
> -func TestMessage(t *testing.T) {
> -	var msg *protobuf.DescriptorProto
> -	fd, md := descriptor.ForMessage(msg)
> -	if pkg, want := fd.GetPackage(), "google.protobuf"; pkg != want {
> -		t.Errorf("descriptor.ForMessage(%T).GetPackage() = %q; want %q", msg, pkg, want)
> -	}
> -	if name, want := md.GetName(), "DescriptorProto"; name != want {
> -		t.Fatalf("descriptor.ForMessage(%T).GetName() = %q; want %q", msg, name, want)
> -	}
> -}
> -
> -func Example_Options() {
> -	var msg *tpb.MyMessageSet
> -	_, md := descriptor.ForMessage(msg)
> -	if md.GetOptions().GetMessageSetWireFormat() {
> -		fmt.Printf("%v uses option message_set_wire_format.\n", md.GetName())
> -	}
> -
> -	// Output:
> -	// MyMessageSet uses option message_set_wire_format.
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go b/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go
> deleted file mode 100644
> index 10066316..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go
> +++ /dev/null
> @@ -1,1082 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2015 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -/*
> -Package jsonpb provides marshaling and unmarshaling between protocol buffers and JSON.
> -It follows the specification at https://developers.google.com/protocol-buffers/docs/proto3#json.
> -
> -This package produces a different output than the standard "encoding/json" package,
> -which does not operate correctly on protocol buffers.
> -*/
> -package jsonpb
> -
> -import (
> -	"bytes"
> -	"encoding/json"
> -	"errors"
> -	"fmt"
> -	"io"
> -	"math"
> -	"reflect"
> -	"sort"
> -	"strconv"
> -	"strings"
> -	"time"
> -
> -	"github.com/golang/protobuf/proto"
> -
> -	stpb "github.com/golang/protobuf/ptypes/struct"
> -)
> -
> -// Marshaler is a configurable object for converting between
> -// protocol buffer objects and a JSON representation for them.
> -type Marshaler struct {
> -	// Whether to render enum values as integers, as opposed to string values.
> -	EnumsAsInts bool
> -
> -	// Whether to render fields with zero values.
> -	EmitDefaults bool
> -
> -	// A string to indent each level by. The presence of this field will
> -	// also cause a space to appear between the field separator and
> -	// value, and for newlines to be appear between fields and array
> -	// elements.
> -	Indent string
> -
> -	// Whether to use the original (.proto) name for fields.
> -	OrigName bool
> -
> -	// A custom URL resolver to use when marshaling Any messages to JSON.
> -	// If unset, the default resolution strategy is to extract the
> -	// fully-qualified type name from the type URL and pass that to
> -	// proto.MessageType(string).
> -	AnyResolver AnyResolver
> -}
> -
> -// AnyResolver takes a type URL, present in an Any message, and resolves it into
> -// an instance of the associated message.
> -type AnyResolver interface {
> -	Resolve(typeUrl string) (proto.Message, error)
> -}
> -
> -func defaultResolveAny(typeUrl string) (proto.Message, error) {
> -	// Only the part of typeUrl after the last slash is relevant.
> -	mname := typeUrl
> -	if slash := strings.LastIndex(mname, "/"); slash >= 0 {
> -		mname = mname[slash+1:]
> -	}
> -	mt := proto.MessageType(mname)
> -	if mt == nil {
> -		return nil, fmt.Errorf("unknown message type %q", mname)
> -	}
> -	return reflect.New(mt.Elem()).Interface().(proto.Message), nil
> -}
> -
> -// JSONPBMarshaler is implemented by protobuf messages that customize the
> -// way they are marshaled to JSON. Messages that implement this should
> -// also implement JSONPBUnmarshaler so that the custom format can be
> -// parsed.
> -type JSONPBMarshaler interface {
> -	MarshalJSONPB(*Marshaler) ([]byte, error)
> -}
> -
> -// JSONPBUnmarshaler is implemented by protobuf messages that customize
> -// the way they are unmarshaled from JSON. Messages that implement this
> -// should also implement JSONPBMarshaler so that the custom format can be
> -// produced.
> -type JSONPBUnmarshaler interface {
> -	UnmarshalJSONPB(*Unmarshaler, []byte) error
> -}
> -
> -// Marshal marshals a protocol buffer into JSON.
> -func (m *Marshaler) Marshal(out io.Writer, pb proto.Message) error {
> -	writer := &errWriter{writer: out}
> -	return m.marshalObject(writer, pb, "", "")
> -}
> -
> -// MarshalToString converts a protocol buffer object to JSON string.
> -func (m *Marshaler) MarshalToString(pb proto.Message) (string, error) {
> -	var buf bytes.Buffer
> -	if err := m.Marshal(&buf, pb); err != nil {
> -		return "", err
> -	}
> -	return buf.String(), nil
> -}
> -
> -type int32Slice []int32
> -
> -var nonFinite = map[string]float64{
> -	`"NaN"`:       math.NaN(),
> -	`"Infinity"`:  math.Inf(1),
> -	`"-Infinity"`: math.Inf(-1),
> -}
> -
> -// For sorting extensions ids to ensure stable output.
> -func (s int32Slice) Len() int           { return len(s) }
> -func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }
> -func (s int32Slice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
> -
> -type wkt interface {
> -	XXX_WellKnownType() string
> -}
> -
> -// marshalObject writes a struct to the Writer.
> -func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, indent, typeURL string) error {
> -	if jsm, ok := v.(JSONPBMarshaler); ok {
> -		b, err := jsm.MarshalJSONPB(m)
> -		if err != nil {
> -			return err
> -		}
> -		if typeURL != "" {
> -			// we are marshaling this object to an Any type
> -			var js map[string]*json.RawMessage
> -			if err = json.Unmarshal(b, &js); err != nil {
> -				return fmt.Errorf("type %T produced invalid JSON: %v", v, err)
> -			}
> -			turl, err := json.Marshal(typeURL)
> -			if err != nil {
> -				return fmt.Errorf("failed to marshal type URL %q to JSON: %v", typeURL, err)
> -			}
> -			js["@type"] = (*json.RawMessage)(&turl)
> -			if b, err = json.Marshal(js); err != nil {
> -				return err
> -			}
> -		}
> -
> -		out.write(string(b))
> -		return out.err
> -	}
> -
> -	s := reflect.ValueOf(v).Elem()
> -
> -	// Handle well-known types.
> -	if wkt, ok := v.(wkt); ok {
> -		switch wkt.XXX_WellKnownType() {
> -		case "DoubleValue", "FloatValue", "Int64Value", "UInt64Value",
> -			"Int32Value", "UInt32Value", "BoolValue", "StringValue", "BytesValue":
> -			// "Wrappers use the same representation in JSON
> -			//  as the wrapped primitive type, ..."
> -			sprop := proto.GetProperties(s.Type())
> -			return m.marshalValue(out, sprop.Prop[0], s.Field(0), indent)
> -		case "Any":
> -			// Any is a bit more involved.
> -			return m.marshalAny(out, v, indent)
> -		case "Duration":
> -			// "Generated output always contains 3, 6, or 9 fractional digits,
> -			//  depending on required precision."
> -			s, ns := s.Field(0).Int(), s.Field(1).Int()
> -			d := time.Duration(s)*time.Second + time.Duration(ns)*time.Nanosecond
> -			x := fmt.Sprintf("%.9f", d.Seconds())
> -			x = strings.TrimSuffix(x, "000")
> -			x = strings.TrimSuffix(x, "000")
> -			out.write(`"`)
> -			out.write(x)
> -			out.write(`s"`)
> -			return out.err
> -		case "Struct", "ListValue":
> -			// Let marshalValue handle the `Struct.fields` map or the `ListValue.values` slice.
> -			// TODO: pass the correct Properties if needed.
> -			return m.marshalValue(out, &proto.Properties{}, s.Field(0), indent)
> -		case "Timestamp":
> -			// "RFC 3339, where generated output will always be Z-normalized
> -			//  and uses 3, 6 or 9 fractional digits."
> -			s, ns := s.Field(0).Int(), s.Field(1).Int()
> -			t := time.Unix(s, ns).UTC()
> -			// time.RFC3339Nano isn't exactly right (we need to get 3/6/9 fractional digits).
> -			x := t.Format("2006-01-02T15:04:05.000000000")
> -			x = strings.TrimSuffix(x, "000")
> -			x = strings.TrimSuffix(x, "000")
> -			out.write(`"`)
> -			out.write(x)
> -			out.write(`Z"`)
> -			return out.err
> -		case "Value":
> -			// Value has a single oneof.
> -			kind := s.Field(0)
> -			if kind.IsNil() {
> -				// "absence of any variant indicates an error"
> -				return errors.New("nil Value")
> -			}
> -			// oneof -> *T -> T -> T.F
> -			x := kind.Elem().Elem().Field(0)
> -			// TODO: pass the correct Properties if needed.
> -			return m.marshalValue(out, &proto.Properties{}, x, indent)
> -		}
> -	}
> -
> -	out.write("{")
> -	if m.Indent != "" {
> -		out.write("\n")
> -	}
> -
> -	firstField := true
> -
> -	if typeURL != "" {
> -		if err := m.marshalTypeURL(out, indent, typeURL); err != nil {
> -			return err
> -		}
> -		firstField = false
> -	}
> -
> -	for i := 0; i < s.NumField(); i++ {
> -		value := s.Field(i)
> -		valueField := s.Type().Field(i)
> -		if strings.HasPrefix(valueField.Name, "XXX_") {
> -			continue
> -		}
> -
> -		// IsNil will panic on most value kinds.
> -		switch value.Kind() {
> -		case reflect.Chan, reflect.Func, reflect.Interface:
> -			if value.IsNil() {
> -				continue
> -			}
> -		}
> -
> -		if !m.EmitDefaults {
> -			switch value.Kind() {
> -			case reflect.Bool:
> -				if !value.Bool() {
> -					continue
> -				}
> -			case reflect.Int32, reflect.Int64:
> -				if value.Int() == 0 {
> -					continue
> -				}
> -			case reflect.Uint32, reflect.Uint64:
> -				if value.Uint() == 0 {
> -					continue
> -				}
> -			case reflect.Float32, reflect.Float64:
> -				if value.Float() == 0 {
> -					continue
> -				}
> -			case reflect.String:
> -				if value.Len() == 0 {
> -					continue
> -				}
> -			case reflect.Map, reflect.Ptr, reflect.Slice:
> -				if value.IsNil() {
> -					continue
> -				}
> -			}
> -		}
> -
> -		// Oneof fields need special handling.
> -		if valueField.Tag.Get("protobuf_oneof") != "" {
> -			// value is an interface containing &T{real_value}.
> -			sv := value.Elem().Elem() // interface -> *T -> T
> -			value = sv.Field(0)
> -			valueField = sv.Type().Field(0)
> -		}
> -		prop := jsonProperties(valueField, m.OrigName)
> -		if !firstField {
> -			m.writeSep(out)
> -		}
> -		if err := m.marshalField(out, prop, value, indent); err != nil {
> -			return err
> -		}
> -		firstField = false
> -	}
> -
> -	// Handle proto2 extensions.
> -	if ep, ok := v.(proto.Message); ok {
> -		extensions := proto.RegisteredExtensions(v)
> -		// Sort extensions for stable output.
> -		ids := make([]int32, 0, len(extensions))
> -		for id, desc := range extensions {
> -			if !proto.HasExtension(ep, desc) {
> -				continue
> -			}
> -			ids = append(ids, id)
> -		}
> -		sort.Sort(int32Slice(ids))
> -		for _, id := range ids {
> -			desc := extensions[id]
> -			if desc == nil {
> -				// unknown extension
> -				continue
> -			}
> -			ext, extErr := proto.GetExtension(ep, desc)
> -			if extErr != nil {
> -				return extErr
> -			}
> -			value := reflect.ValueOf(ext)
> -			var prop proto.Properties
> -			prop.Parse(desc.Tag)
> -			prop.JSONName = fmt.Sprintf("[%s]", desc.Name)
> -			if !firstField {
> -				m.writeSep(out)
> -			}
> -			if err := m.marshalField(out, &prop, value, indent); err != nil {
> -				return err
> -			}
> -			firstField = false
> -		}
> -
> -	}
> -
> -	if m.Indent != "" {
> -		out.write("\n")
> -		out.write(indent)
> -	}
> -	out.write("}")
> -	return out.err
> -}
> -
> -func (m *Marshaler) writeSep(out *errWriter) {
> -	if m.Indent != "" {
> -		out.write(",\n")
> -	} else {
> -		out.write(",")
> -	}
> -}
> -
> -func (m *Marshaler) marshalAny(out *errWriter, any proto.Message, indent string) error {
> -	// "If the Any contains a value that has a special JSON mapping,
> -	//  it will be converted as follows: {"@type": xxx, "value": yyy}.
> -	//  Otherwise, the value will be converted into a JSON object,
> -	//  and the "@type" field will be inserted to indicate the actual data type."
> -	v := reflect.ValueOf(any).Elem()
> -	turl := v.Field(0).String()
> -	val := v.Field(1).Bytes()
> -
> -	var msg proto.Message
> -	var err error
> -	if m.AnyResolver != nil {
> -		msg, err = m.AnyResolver.Resolve(turl)
> -	} else {
> -		msg, err = defaultResolveAny(turl)
> -	}
> -	if err != nil {
> -		return err
> -	}
> -
> -	if err := proto.Unmarshal(val, msg); err != nil {
> -		return err
> -	}
> -
> -	if _, ok := msg.(wkt); ok {
> -		out.write("{")
> -		if m.Indent != "" {
> -			out.write("\n")
> -		}
> -		if err := m.marshalTypeURL(out, indent, turl); err != nil {
> -			return err
> -		}
> -		m.writeSep(out)
> -		if m.Indent != "" {
> -			out.write(indent)
> -			out.write(m.Indent)
> -			out.write(`"value": `)
> -		} else {
> -			out.write(`"value":`)
> -		}
> -		if err := m.marshalObject(out, msg, indent+m.Indent, ""); err != nil {
> -			return err
> -		}
> -		if m.Indent != "" {
> -			out.write("\n")
> -			out.write(indent)
> -		}
> -		out.write("}")
> -		return out.err
> -	}
> -
> -	return m.marshalObject(out, msg, indent, turl)
> -}
> -
> -func (m *Marshaler) marshalTypeURL(out *errWriter, indent, typeURL string) error {
> -	if m.Indent != "" {
> -		out.write(indent)
> -		out.write(m.Indent)
> -	}
> -	out.write(`"@type":`)
> -	if m.Indent != "" {
> -		out.write(" ")
> -	}
> -	b, err := json.Marshal(typeURL)
> -	if err != nil {
> -		return err
> -	}
> -	out.write(string(b))
> -	return out.err
> -}
> -
> -// marshalField writes field description and value to the Writer.
> -func (m *Marshaler) marshalField(out *errWriter, prop *proto.Properties, v reflect.Value, indent string) error {
> -	if m.Indent != "" {
> -		out.write(indent)
> -		out.write(m.Indent)
> -	}
> -	out.write(`"`)
> -	out.write(prop.JSONName)
> -	out.write(`":`)
> -	if m.Indent != "" {
> -		out.write(" ")
> -	}
> -	if err := m.marshalValue(out, prop, v, indent); err != nil {
> -		return err
> -	}
> -	return nil
> -}
> -
> -// marshalValue writes the value to the Writer.
> -func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v reflect.Value, indent string) error {
> -	var err error
> -	v = reflect.Indirect(v)
> -
> -	// Handle nil pointer
> -	if v.Kind() == reflect.Invalid {
> -		out.write("null")
> -		return out.err
> -	}
> -
> -	// Handle repeated elements.
> -	if v.Kind() == reflect.Slice && v.Type().Elem().Kind() != reflect.Uint8 {
> -		out.write("[")
> -		comma := ""
> -		for i := 0; i < v.Len(); i++ {
> -			sliceVal := v.Index(i)
> -			out.write(comma)
> -			if m.Indent != "" {
> -				out.write("\n")
> -				out.write(indent)
> -				out.write(m.Indent)
> -				out.write(m.Indent)
> -			}
> -			if err := m.marshalValue(out, prop, sliceVal, indent+m.Indent); err != nil {
> -				return err
> -			}
> -			comma = ","
> -		}
> -		if m.Indent != "" {
> -			out.write("\n")
> -			out.write(indent)
> -			out.write(m.Indent)
> -		}
> -		out.write("]")
> -		return out.err
> -	}
> -
> -	// Handle well-known types.
> -	// Most are handled up in marshalObject (because 99% are messages).
> -	if wkt, ok := v.Interface().(wkt); ok {
> -		switch wkt.XXX_WellKnownType() {
> -		case "NullValue":
> -			out.write("null")
> -			return out.err
> -		}
> -	}
> -
> -	// Handle enumerations.
> -	if !m.EnumsAsInts && prop.Enum != "" {
> -		// Unknown enum values will are stringified by the proto library as their
> -		// value. Such values should _not_ be quoted or they will be interpreted
> -		// as an enum string instead of their value.
> -		enumStr := v.Interface().(fmt.Stringer).String()
> -		var valStr string
> -		if v.Kind() == reflect.Ptr {
> -			valStr = strconv.Itoa(int(v.Elem().Int()))
> -		} else {
> -			valStr = strconv.Itoa(int(v.Int()))
> -		}
> -		isKnownEnum := enumStr != valStr
> -		if isKnownEnum {
> -			out.write(`"`)
> -		}
> -		out.write(enumStr)
> -		if isKnownEnum {
> -			out.write(`"`)
> -		}
> -		return out.err
> -	}
> -
> -	// Handle nested messages.
> -	if v.Kind() == reflect.Struct {
> -		return m.marshalObject(out, v.Addr().Interface().(proto.Message), indent+m.Indent, "")
> -	}
> -
> -	// Handle maps.
> -	// Since Go randomizes map iteration, we sort keys for stable output.
> -	if v.Kind() == reflect.Map {
> -		out.write(`{`)
> -		keys := v.MapKeys()
> -		sort.Sort(mapKeys(keys))
> -		for i, k := range keys {
> -			if i > 0 {
> -				out.write(`,`)
> -			}
> -			if m.Indent != "" {
> -				out.write("\n")
> -				out.write(indent)
> -				out.write(m.Indent)
> -				out.write(m.Indent)
> -			}
> -
> -			b, err := json.Marshal(k.Interface())
> -			if err != nil {
> -				return err
> -			}
> -			s := string(b)
> -
> -			// If the JSON is not a string value, encode it again to make it one.
> -			if !strings.HasPrefix(s, `"`) {
> -				b, err := json.Marshal(s)
> -				if err != nil {
> -					return err
> -				}
> -				s = string(b)
> -			}
> -
> -			out.write(s)
> -			out.write(`:`)
> -			if m.Indent != "" {
> -				out.write(` `)
> -			}
> -
> -			if err := m.marshalValue(out, prop, v.MapIndex(k), indent+m.Indent); err != nil {
> -				return err
> -			}
> -		}
> -		if m.Indent != "" {
> -			out.write("\n")
> -			out.write(indent)
> -			out.write(m.Indent)
> -		}
> -		out.write(`}`)
> -		return out.err
> -	}
> -
> -	// Handle non-finite floats, e.g. NaN, Infinity and -Infinity.
> -	if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 {
> -		f := v.Float()
> -		var sval string
> -		switch {
> -		case math.IsInf(f, 1):
> -			sval = `"Infinity"`
> -		case math.IsInf(f, -1):
> -			sval = `"-Infinity"`
> -		case math.IsNaN(f):
> -			sval = `"NaN"`
> -		}
> -		if sval != "" {
> -			out.write(sval)
> -			return out.err
> -		}
> -	}
> -
> -	// Default handling defers to the encoding/json library.
> -	b, err := json.Marshal(v.Interface())
> -	if err != nil {
> -		return err
> -	}
> -	needToQuote := string(b[0]) != `"` && (v.Kind() == reflect.Int64 || v.Kind() == reflect.Uint64)
> -	if needToQuote {
> -		out.write(`"`)
> -	}
> -	out.write(string(b))
> -	if needToQuote {
> -		out.write(`"`)
> -	}
> -	return out.err
> -}
> -
> -// Unmarshaler is a configurable object for converting from a JSON
> -// representation to a protocol buffer object.
> -type Unmarshaler struct {
> -	// Whether to allow messages to contain unknown fields, as opposed to
> -	// failing to unmarshal.
> -	AllowUnknownFields bool
> -
> -	// A custom URL resolver to use when unmarshaling Any messages from JSON.
> -	// If unset, the default resolution strategy is to extract the
> -	// fully-qualified type name from the type URL and pass that to
> -	// proto.MessageType(string).
> -	AnyResolver AnyResolver
> -}
> -
> -// UnmarshalNext unmarshals the next protocol buffer from a JSON object stream.
> -// This function is lenient and will decode any options permutations of the
> -// related Marshaler.
> -func (u *Unmarshaler) UnmarshalNext(dec *json.Decoder, pb proto.Message) error {
> -	inputValue := json.RawMessage{}
> -	if err := dec.Decode(&inputValue); err != nil {
> -		return err
> -	}
> -	return u.unmarshalValue(reflect.ValueOf(pb).Elem(), inputValue, nil)
> -}
> -
> -// Unmarshal unmarshals a JSON object stream into a protocol
> -// buffer. This function is lenient and will decode any options
> -// permutations of the related Marshaler.
> -func (u *Unmarshaler) Unmarshal(r io.Reader, pb proto.Message) error {
> -	dec := json.NewDecoder(r)
> -	return u.UnmarshalNext(dec, pb)
> -}
> -
> -// UnmarshalNext unmarshals the next protocol buffer from a JSON object stream.
> -// This function is lenient and will decode any options permutations of the
> -// related Marshaler.
> -func UnmarshalNext(dec *json.Decoder, pb proto.Message) error {
> -	return new(Unmarshaler).UnmarshalNext(dec, pb)
> -}
> -
> -// Unmarshal unmarshals a JSON object stream into a protocol
> -// buffer. This function is lenient and will decode any options
> -// permutations of the related Marshaler.
> -func Unmarshal(r io.Reader, pb proto.Message) error {
> -	return new(Unmarshaler).Unmarshal(r, pb)
> -}
> -
> -// UnmarshalString will populate the fields of a protocol buffer based
> -// on a JSON string. This function is lenient and will decode any options
> -// permutations of the related Marshaler.
> -func UnmarshalString(str string, pb proto.Message) error {
> -	return new(Unmarshaler).Unmarshal(strings.NewReader(str), pb)
> -}
> -
> -// unmarshalValue converts/copies a value into the target.
> -// prop may be nil.
> -func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMessage, prop *proto.Properties) error {
> -	targetType := target.Type()
> -
> -	// Allocate memory for pointer fields.
> -	if targetType.Kind() == reflect.Ptr {
> -		// If input value is "null" and target is a pointer type, then the field should be treated as not set
> -		// UNLESS the target is structpb.Value, in which case it should be set to structpb.NullValue.
> -		if string(inputValue) == "null" && targetType != reflect.TypeOf(&stpb.Value{}) {
> -			return nil
> -		}
> -		target.Set(reflect.New(targetType.Elem()))
> -
> -		return u.unmarshalValue(target.Elem(), inputValue, prop)
> -	}
> -
> -	if jsu, ok := target.Addr().Interface().(JSONPBUnmarshaler); ok {
> -		return jsu.UnmarshalJSONPB(u, []byte(inputValue))
> -	}
> -
> -	// Handle well-known types that are not pointers.
> -	if w, ok := target.Addr().Interface().(wkt); ok {
> -		switch w.XXX_WellKnownType() {
> -		case "DoubleValue", "FloatValue", "Int64Value", "UInt64Value",
> -			"Int32Value", "UInt32Value", "BoolValue", "StringValue", "BytesValue":
> -			return u.unmarshalValue(target.Field(0), inputValue, prop)
> -		case "Any":
> -			// Use json.RawMessage pointer type instead of value to support pre-1.8 version.
> -			// 1.8 changed RawMessage.MarshalJSON from pointer type to value type, see
> -			// https://github.com/golang/go/issues/14493
> -			var jsonFields map[string]*json.RawMessage
> -			if err := json.Unmarshal(inputValue, &jsonFields); err != nil {
> -				return err
> -			}
> -
> -			val, ok := jsonFields["@type"]
> -			if !ok || val == nil {
> -				return errors.New("Any JSON doesn't have '@type'")
> -			}
> -
> -			var turl string
> -			if err := json.Unmarshal([]byte(*val), &turl); err != nil {
> -				return fmt.Errorf("can't unmarshal Any's '@type': %q", *val)
> -			}
> -			target.Field(0).SetString(turl)
> -
> -			var m proto.Message
> -			var err error
> -			if u.AnyResolver != nil {
> -				m, err = u.AnyResolver.Resolve(turl)
> -			} else {
> -				m, err = defaultResolveAny(turl)
> -			}
> -			if err != nil {
> -				return err
> -			}
> -
> -			if _, ok := m.(wkt); ok {
> -				val, ok := jsonFields["value"]
> -				if !ok {
> -					return errors.New("Any JSON doesn't have 'value'")
> -				}
> -
> -				if err := u.unmarshalValue(reflect.ValueOf(m).Elem(), *val, nil); err != nil {
> -					return fmt.Errorf("can't unmarshal Any nested proto %T: %v", m, err)
> -				}
> -			} else {
> -				delete(jsonFields, "@type")
> -				nestedProto, err := json.Marshal(jsonFields)
> -				if err != nil {
> -					return fmt.Errorf("can't generate JSON for Any's nested proto to be unmarshaled: %v", err)
> -				}
> -
> -				if err = u.unmarshalValue(reflect.ValueOf(m).Elem(), nestedProto, nil); err != nil {
> -					return fmt.Errorf("can't unmarshal Any nested proto %T: %v", m, err)
> -				}
> -			}
> -
> -			b, err := proto.Marshal(m)
> -			if err != nil {
> -				return fmt.Errorf("can't marshal proto %T into Any.Value: %v", m, err)
> -			}
> -			target.Field(1).SetBytes(b)
> -
> -			return nil
> -		case "Duration":
> -			unq, err := strconv.Unquote(string(inputValue))
> -			if err != nil {
> -				return err
> -			}
> -
> -			d, err := time.ParseDuration(unq)
> -			if err != nil {
> -				return fmt.Errorf("bad Duration: %v", err)
> -			}
> -
> -			ns := d.Nanoseconds()
> -			s := ns / 1e9
> -			ns %= 1e9
> -			target.Field(0).SetInt(s)
> -			target.Field(1).SetInt(ns)
> -			return nil
> -		case "Timestamp":
> -			unq, err := strconv.Unquote(string(inputValue))
> -			if err != nil {
> -				return err
> -			}
> -
> -			t, err := time.Parse(time.RFC3339Nano, unq)
> -			if err != nil {
> -				return fmt.Errorf("bad Timestamp: %v", err)
> -			}
> -
> -			target.Field(0).SetInt(t.Unix())
> -			target.Field(1).SetInt(int64(t.Nanosecond()))
> -			return nil
> -		case "Struct":
> -			var m map[string]json.RawMessage
> -			if err := json.Unmarshal(inputValue, &m); err != nil {
> -				return fmt.Errorf("bad StructValue: %v", err)
> -			}
> -
> -			target.Field(0).Set(reflect.ValueOf(map[string]*stpb.Value{}))
> -			for k, jv := range m {
> -				pv := &stpb.Value{}
> -				if err := u.unmarshalValue(reflect.ValueOf(pv).Elem(), jv, prop); err != nil {
> -					return fmt.Errorf("bad value in StructValue for key %q: %v", k, err)
> -				}
> -				target.Field(0).SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(pv))
> -			}
> -			return nil
> -		case "ListValue":
> -			var s []json.RawMessage
> -			if err := json.Unmarshal(inputValue, &s); err != nil {
> -				return fmt.Errorf("bad ListValue: %v", err)
> -			}
> -
> -			target.Field(0).Set(reflect.ValueOf(make([]*stpb.Value, len(s), len(s))))
> -			for i, sv := range s {
> -				if err := u.unmarshalValue(target.Field(0).Index(i), sv, prop); err != nil {
> -					return err
> -				}
> -			}
> -			return nil
> -		case "Value":
> -			ivStr := string(inputValue)
> -			if ivStr == "null" {
> -				target.Field(0).Set(reflect.ValueOf(&stpb.Value_NullValue{}))
> -			} else if v, err := strconv.ParseFloat(ivStr, 0); err == nil {
> -				target.Field(0).Set(reflect.ValueOf(&stpb.Value_NumberValue{v}))
> -			} else if v, err := strconv.Unquote(ivStr); err == nil {
> -				target.Field(0).Set(reflect.ValueOf(&stpb.Value_StringValue{v}))
> -			} else if v, err := strconv.ParseBool(ivStr); err == nil {
> -				target.Field(0).Set(reflect.ValueOf(&stpb.Value_BoolValue{v}))
> -			} else if err := json.Unmarshal(inputValue, &[]json.RawMessage{}); err == nil {
> -				lv := &stpb.ListValue{}
> -				target.Field(0).Set(reflect.ValueOf(&stpb.Value_ListValue{lv}))
> -				return u.unmarshalValue(reflect.ValueOf(lv).Elem(), inputValue, prop)
> -			} else if err := json.Unmarshal(inputValue, &map[string]json.RawMessage{}); err == nil {
> -				sv := &stpb.Struct{}
> -				target.Field(0).Set(reflect.ValueOf(&stpb.Value_StructValue{sv}))
> -				return u.unmarshalValue(reflect.ValueOf(sv).Elem(), inputValue, prop)
> -			} else {
> -				return fmt.Errorf("unrecognized type for Value %q", ivStr)
> -			}
> -			return nil
> -		}
> -	}
> -
> -	// Handle enums, which have an underlying type of int32,
> -	// and may appear as strings.
> -	// The case of an enum appearing as a number is handled
> -	// at the bottom of this function.
> -	if inputValue[0] == '"' && prop != nil && prop.Enum != "" {
> -		vmap := proto.EnumValueMap(prop.Enum)
> -		// Don't need to do unquoting; valid enum names
> -		// are from a limited character set.
> -		s := inputValue[1 : len(inputValue)-1]
> -		n, ok := vmap[string(s)]
> -		if !ok {
> -			return fmt.Errorf("unknown value %q for enum %s", s, prop.Enum)
> -		}
> -		if target.Kind() == reflect.Ptr { // proto2
> -			target.Set(reflect.New(targetType.Elem()))
> -			target = target.Elem()
> -		}
> -		target.SetInt(int64(n))
> -		return nil
> -	}
> -
> -	// Handle nested messages.
> -	if targetType.Kind() == reflect.Struct {
> -		var jsonFields map[string]json.RawMessage
> -		if err := json.Unmarshal(inputValue, &jsonFields); err != nil {
> -			return err
> -		}
> -
> -		consumeField := func(prop *proto.Properties) (json.RawMessage, bool) {
> -			// Be liberal in what names we accept; both orig_name and camelName are okay.
> -			fieldNames := acceptedJSONFieldNames(prop)
> -
> -			vOrig, okOrig := jsonFields[fieldNames.orig]
> -			vCamel, okCamel := jsonFields[fieldNames.camel]
> -			if !okOrig && !okCamel {
> -				return nil, false
> -			}
> -			// If, for some reason, both are present in the data, favour the camelName.
> -			var raw json.RawMessage
> -			if okOrig {
> -				raw = vOrig
> -				delete(jsonFields, fieldNames.orig)
> -			}
> -			if okCamel {
> -				raw = vCamel
> -				delete(jsonFields, fieldNames.camel)
> -			}
> -			return raw, true
> -		}
> -
> -		sprops := proto.GetProperties(targetType)
> -		for i := 0; i < target.NumField(); i++ {
> -			ft := target.Type().Field(i)
> -			if strings.HasPrefix(ft.Name, "XXX_") {
> -				continue
> -			}
> -
> -			valueForField, ok := consumeField(sprops.Prop[i])
> -			if !ok {
> -				continue
> -			}
> -
> -			if err := u.unmarshalValue(target.Field(i), valueForField, sprops.Prop[i]); err != nil {
> -				return err
> -			}
> -		}
> -		// Check for any oneof fields.
> -		if len(jsonFields) > 0 {
> -			for _, oop := range sprops.OneofTypes {
> -				raw, ok := consumeField(oop.Prop)
> -				if !ok {
> -					continue
> -				}
> -				nv := reflect.New(oop.Type.Elem())
> -				target.Field(oop.Field).Set(nv)
> -				if err := u.unmarshalValue(nv.Elem().Field(0), raw, oop.Prop); err != nil {
> -					return err
> -				}
> -			}
> -		}
> -		// Handle proto2 extensions.
> -		if len(jsonFields) > 0 {
> -			if ep, ok := target.Addr().Interface().(proto.Message); ok {
> -				for _, ext := range proto.RegisteredExtensions(ep) {
> -					name := fmt.Sprintf("[%s]", ext.Name)
> -					raw, ok := jsonFields[name]
> -					if !ok {
> -						continue
> -					}
> -					delete(jsonFields, name)
> -					nv := reflect.New(reflect.TypeOf(ext.ExtensionType).Elem())
> -					if err := u.unmarshalValue(nv.Elem(), raw, nil); err != nil {
> -						return err
> -					}
> -					if err := proto.SetExtension(ep, ext, nv.Interface()); err != nil {
> -						return err
> -					}
> -				}
> -			}
> -		}
> -		if !u.AllowUnknownFields && len(jsonFields) > 0 {
> -			// Pick any field to be the scapegoat.
> -			var f string
> -			for fname := range jsonFields {
> -				f = fname
> -				break
> -			}
> -			return fmt.Errorf("unknown field %q in %v", f, targetType)
> -		}
> -		return nil
> -	}
> -
> -	// Handle arrays (which aren't encoded bytes)
> -	if targetType.Kind() == reflect.Slice && targetType.Elem().Kind() != reflect.Uint8 {
> -		var slc []json.RawMessage
> -		if err := json.Unmarshal(inputValue, &slc); err != nil {
> -			return err
> -		}
> -		if slc != nil {
> -			l := len(slc)
> -			target.Set(reflect.MakeSlice(targetType, l, l))
> -			for i := 0; i < l; i++ {
> -				if err := u.unmarshalValue(target.Index(i), slc[i], prop); err != nil {
> -					return err
> -				}
> -			}
> -		}
> -		return nil
> -	}
> -
> -	// Handle maps (whose keys are always strings)
> -	if targetType.Kind() == reflect.Map {
> -		var mp map[string]json.RawMessage
> -		if err := json.Unmarshal(inputValue, &mp); err != nil {
> -			return err
> -		}
> -		if mp != nil {
> -			target.Set(reflect.MakeMap(targetType))
> -			var keyprop, valprop *proto.Properties
> -			if prop != nil {
> -				// These could still be nil if the protobuf metadata is broken somehow.
> -				// TODO: This won't work because the fields are unexported.
> -				// We should probably just reparse them.
> -				//keyprop, valprop = prop.mkeyprop, prop.mvalprop
> -			}
> -			for ks, raw := range mp {
> -				// Unmarshal map key. The core json library already decoded the key into a
> -				// string, so we handle that specially. Other types were quoted post-serialization.
> -				var k reflect.Value
> -				if targetType.Key().Kind() == reflect.String {
> -					k = reflect.ValueOf(ks)
> -				} else {
> -					k = reflect.New(targetType.Key()).Elem()
> -					if err := u.unmarshalValue(k, json.RawMessage(ks), keyprop); err != nil {
> -						return err
> -					}
> -				}
> -
> -				// Unmarshal map value.
> -				v := reflect.New(targetType.Elem()).Elem()
> -				if err := u.unmarshalValue(v, raw, valprop); err != nil {
> -					return err
> -				}
> -				target.SetMapIndex(k, v)
> -			}
> -		}
> -		return nil
> -	}
> -
> -	// 64-bit integers can be encoded as strings. In this case we drop
> -	// the quotes and proceed as normal.
> -	isNum := targetType.Kind() == reflect.Int64 || targetType.Kind() == reflect.Uint64
> -	if isNum && strings.HasPrefix(string(inputValue), `"`) {
> -		inputValue = inputValue[1 : len(inputValue)-1]
> -	}
> -
> -	// Non-finite numbers can be encoded as strings.
> -	isFloat := targetType.Kind() == reflect.Float32 || targetType.Kind() == reflect.Float64
> -	if isFloat {
> -		if num, ok := nonFinite[string(inputValue)]; ok {
> -			target.SetFloat(num)
> -			return nil
> -		}
> -	}
> -
> -	// Use the encoding/json for parsing other value types.
> -	return json.Unmarshal(inputValue, target.Addr().Interface())
> -}
> -
> -// jsonProperties returns parsed proto.Properties for the field and corrects JSONName attribute.
> -func jsonProperties(f reflect.StructField, origName bool) *proto.Properties {
> -	var prop proto.Properties
> -	prop.Init(f.Type, f.Name, f.Tag.Get("protobuf"), &f)
> -	if origName || prop.JSONName == "" {
> -		prop.JSONName = prop.OrigName
> -	}
> -	return &prop
> -}
> -
> -type fieldNames struct {
> -	orig, camel string
> -}
> -
> -func acceptedJSONFieldNames(prop *proto.Properties) fieldNames {
> -	opts := fieldNames{orig: prop.OrigName, camel: prop.OrigName}
> -	if prop.JSONName != "" {
> -		opts.camel = prop.JSONName
> -	}
> -	return opts
> -}
> -
> -// Writer wrapper inspired by https://blog.golang.org/errors-are-values
> -type errWriter struct {
> -	writer io.Writer
> -	err    error
> -}
> -
> -func (w *errWriter) write(str string) {
> -	if w.err != nil {
> -		return
> -	}
> -	_, w.err = w.writer.Write([]byte(str))
> -}
> -
> -// Map fields may have key types of non-float scalars, strings and enums.
> -// The easiest way to sort them in some deterministic order is to use fmt.
> -// If this turns out to be inefficient we can always consider other options,
> -// such as doing a Schwartzian transform.
> -//
> -// Numeric keys are sorted in numeric order per
> -// https://developers.google.com/protocol-buffers/docs/proto#maps.
> -type mapKeys []reflect.Value
> -
> -func (s mapKeys) Len() int      { return len(s) }
> -func (s mapKeys) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
> -func (s mapKeys) Less(i, j int) bool {
> -	if k := s[i].Kind(); k == s[j].Kind() {
> -		switch k {
> -		case reflect.Int32, reflect.Int64:
> -			return s[i].Int() < s[j].Int()
> -		case reflect.Uint32, reflect.Uint64:
> -			return s[i].Uint() < s[j].Uint()
> -		}
> -	}
> -	return fmt.Sprint(s[i].Interface()) < fmt.Sprint(s[j].Interface())
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go
> deleted file mode 100644
> index 5ce1923f..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go
> +++ /dev/null
> @@ -1,848 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2015 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package jsonpb
> -
> -import (
> -	"bytes"
> -	"encoding/json"
> -	"io"
> -	"math"
> -	"reflect"
> -	"strings"
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -
> -	pb "github.com/golang/protobuf/jsonpb/jsonpb_test_proto"
> -	proto3pb "github.com/golang/protobuf/proto/proto3_proto"
> -	"github.com/golang/protobuf/ptypes"
> -	anypb "github.com/golang/protobuf/ptypes/any"
> -	durpb "github.com/golang/protobuf/ptypes/duration"
> -	stpb "github.com/golang/protobuf/ptypes/struct"
> -	tspb "github.com/golang/protobuf/ptypes/timestamp"
> -	wpb "github.com/golang/protobuf/ptypes/wrappers"
> -)
> -
> -var (
> -	marshaler = Marshaler{}
> -
> -	marshalerAllOptions = Marshaler{
> -		Indent: "  ",
> -	}
> -
> -	simpleObject = &pb.Simple{
> -		OInt32:  proto.Int32(-32),
> -		OInt64:  proto.Int64(-6400000000),
> -		OUint32: proto.Uint32(32),
> -		OUint64: proto.Uint64(6400000000),
> -		OSint32: proto.Int32(-13),
> -		OSint64: proto.Int64(-2600000000),
> -		OFloat:  proto.Float32(3.14),
> -		ODouble: proto.Float64(6.02214179e23),
> -		OBool:   proto.Bool(true),
> -		OString: proto.String("hello \"there\""),
> -		OBytes:  []byte("beep boop"),
> -	}
> -
> -	simpleObjectJSON = `{` +
> -		`"oBool":true,` +
> -		`"oInt32":-32,` +
> -		`"oInt64":"-6400000000",` +
> -		`"oUint32":32,` +
> -		`"oUint64":"6400000000",` +
> -		`"oSint32":-13,` +
> -		`"oSint64":"-2600000000",` +
> -		`"oFloat":3.14,` +
> -		`"oDouble":6.02214179e+23,` +
> -		`"oString":"hello \"there\"",` +
> -		`"oBytes":"YmVlcCBib29w"` +
> -		`}`
> -
> -	simpleObjectPrettyJSON = `{
> -  "oBool": true,
> -  "oInt32": -32,
> -  "oInt64": "-6400000000",
> -  "oUint32": 32,
> -  "oUint64": "6400000000",
> -  "oSint32": -13,
> -  "oSint64": "-2600000000",
> -  "oFloat": 3.14,
> -  "oDouble": 6.02214179e+23,
> -  "oString": "hello \"there\"",
> -  "oBytes": "YmVlcCBib29w"
> -}`
> -
> -	repeatsObject = &pb.Repeats{
> -		RBool:   []bool{true, false, true},
> -		RInt32:  []int32{-3, -4, -5},
> -		RInt64:  []int64{-123456789, -987654321},
> -		RUint32: []uint32{1, 2, 3},
> -		RUint64: []uint64{6789012345, 3456789012},
> -		RSint32: []int32{-1, -2, -3},
> -		RSint64: []int64{-6789012345, -3456789012},
> -		RFloat:  []float32{3.14, 6.28},
> -		RDouble: []float64{299792458 * 1e20, 6.62606957e-34},
> -		RString: []string{"happy", "days"},
> -		RBytes:  [][]byte{[]byte("skittles"), []byte("m&m's")},
> -	}
> -
> -	repeatsObjectJSON = `{` +
> -		`"rBool":[true,false,true],` +
> -		`"rInt32":[-3,-4,-5],` +
> -		`"rInt64":["-123456789","-987654321"],` +
> -		`"rUint32":[1,2,3],` +
> -		`"rUint64":["6789012345","3456789012"],` +
> -		`"rSint32":[-1,-2,-3],` +
> -		`"rSint64":["-6789012345","-3456789012"],` +
> -		`"rFloat":[3.14,6.28],` +
> -		`"rDouble":[2.99792458e+28,6.62606957e-34],` +
> -		`"rString":["happy","days"],` +
> -		`"rBytes":["c2tpdHRsZXM=","bSZtJ3M="]` +
> -		`}`
> -
> -	repeatsObjectPrettyJSON = `{
> -  "rBool": [
> -    true,
> -    false,
> -    true
> -  ],
> -  "rInt32": [
> -    -3,
> -    -4,
> -    -5
> -  ],
> -  "rInt64": [
> -    "-123456789",
> -    "-987654321"
> -  ],
> -  "rUint32": [
> -    1,
> -    2,
> -    3
> -  ],
> -  "rUint64": [
> -    "6789012345",
> -    "3456789012"
> -  ],
> -  "rSint32": [
> -    -1,
> -    -2,
> -    -3
> -  ],
> -  "rSint64": [
> -    "-6789012345",
> -    "-3456789012"
> -  ],
> -  "rFloat": [
> -    3.14,
> -    6.28
> -  ],
> -  "rDouble": [
> -    2.99792458e+28,
> -    6.62606957e-34
> -  ],
> -  "rString": [
> -    "happy",
> -    "days"
> -  ],
> -  "rBytes": [
> -    "c2tpdHRsZXM=",
> -    "bSZtJ3M="
> -  ]
> -}`
> -
> -	innerSimple   = &pb.Simple{OInt32: proto.Int32(-32)}
> -	innerSimple2  = &pb.Simple{OInt64: proto.Int64(25)}
> -	innerRepeats  = &pb.Repeats{RString: []string{"roses", "red"}}
> -	innerRepeats2 = &pb.Repeats{RString: []string{"violets", "blue"}}
> -	complexObject = &pb.Widget{
> -		Color:    pb.Widget_GREEN.Enum(),
> -		RColor:   []pb.Widget_Color{pb.Widget_RED, pb.Widget_GREEN, pb.Widget_BLUE},
> -		Simple:   innerSimple,
> -		RSimple:  []*pb.Simple{innerSimple, innerSimple2},
> -		Repeats:  innerRepeats,
> -		RRepeats: []*pb.Repeats{innerRepeats, innerRepeats2},
> -	}
> -
> -	complexObjectJSON = `{"color":"GREEN",` +
> -		`"rColor":["RED","GREEN","BLUE"],` +
> -		`"simple":{"oInt32":-32},` +
> -		`"rSimple":[{"oInt32":-32},{"oInt64":"25"}],` +
> -		`"repeats":{"rString":["roses","red"]},` +
> -		`"rRepeats":[{"rString":["roses","red"]},{"rString":["violets","blue"]}]` +
> -		`}`
> -
> -	complexObjectPrettyJSON = `{
> -  "color": "GREEN",
> -  "rColor": [
> -    "RED",
> -    "GREEN",
> -    "BLUE"
> -  ],
> -  "simple": {
> -    "oInt32": -32
> -  },
> -  "rSimple": [
> -    {
> -      "oInt32": -32
> -    },
> -    {
> -      "oInt64": "25"
> -    }
> -  ],
> -  "repeats": {
> -    "rString": [
> -      "roses",
> -      "red"
> -    ]
> -  },
> -  "rRepeats": [
> -    {
> -      "rString": [
> -        "roses",
> -        "red"
> -      ]
> -    },
> -    {
> -      "rString": [
> -        "violets",
> -        "blue"
> -      ]
> -    }
> -  ]
> -}`
> -
> -	colorPrettyJSON = `{
> - "color": 2
> -}`
> -
> -	colorListPrettyJSON = `{
> -  "color": 1000,
> -  "rColor": [
> -    "RED"
> -  ]
> -}`
> -
> -	nummyPrettyJSON = `{
> -  "nummy": {
> -    "1": 2,
> -    "3": 4
> -  }
> -}`
> -
> -	objjyPrettyJSON = `{
> -  "objjy": {
> -    "1": {
> -      "dub": 1
> -    }
> -  }
> -}`
> -	realNumber     = &pb.Real{Value: proto.Float64(3.14159265359)}
> -	realNumberName = "Pi"
> -	complexNumber  = &pb.Complex{Imaginary: proto.Float64(0.5772156649)}
> -	realNumberJSON = `{` +
> -		`"value":3.14159265359,` +
> -		`"[jsonpb.Complex.real_extension]":{"imaginary":0.5772156649},` +
> -		`"[jsonpb.name]":"Pi"` +
> -		`}`
> -
> -	anySimple = &pb.KnownTypes{
> -		An: &anypb.Any{
> -			TypeUrl: "something.example.com/jsonpb.Simple",
> -			Value: []byte{
> -				// &pb.Simple{OBool:true}
> -				1 << 3, 1,
> -			},
> -		},
> -	}
> -	anySimpleJSON       = `{"an":{"@type":"something.example.com/jsonpb.Simple","oBool":true}}`
> -	anySimplePrettyJSON = `{
> -  "an": {
> -    "@type": "something.example.com/jsonpb.Simple",
> -    "oBool": true
> -  }
> -}`
> -
> -	anyWellKnown = &pb.KnownTypes{
> -		An: &anypb.Any{
> -			TypeUrl: "type.googleapis.com/google.protobuf.Duration",
> -			Value: []byte{
> -				// &durpb.Duration{Seconds: 1, Nanos: 212000000 }
> -				1 << 3, 1, // seconds
> -				2 << 3, 0x80, 0xba, 0x8b, 0x65, // nanos
> -			},
> -		},
> -	}
> -	anyWellKnownJSON       = `{"an":{"@type":"type.googleapis.com/google.protobuf.Duration","value":"1.212s"}}`
> -	anyWellKnownPrettyJSON = `{
> -  "an": {
> -    "@type": "type.googleapis.com/google.protobuf.Duration",
> -    "value": "1.212s"
> -  }
> -}`
> -
> -	nonFinites = &pb.NonFinites{
> -		FNan:  proto.Float32(float32(math.NaN())),
> -		FPinf: proto.Float32(float32(math.Inf(1))),
> -		FNinf: proto.Float32(float32(math.Inf(-1))),
> -		DNan:  proto.Float64(float64(math.NaN())),
> -		DPinf: proto.Float64(float64(math.Inf(1))),
> -		DNinf: proto.Float64(float64(math.Inf(-1))),
> -	}
> -	nonFinitesJSON = `{` +
> -		`"fNan":"NaN",` +
> -		`"fPinf":"Infinity",` +
> -		`"fNinf":"-Infinity",` +
> -		`"dNan":"NaN",` +
> -		`"dPinf":"Infinity",` +
> -		`"dNinf":"-Infinity"` +
> -		`}`
> -)
> -
> -func init() {
> -	if err := proto.SetExtension(realNumber, pb.E_Name, &realNumberName); err != nil {
> -		panic(err)
> -	}
> -	if err := proto.SetExtension(realNumber, pb.E_Complex_RealExtension, complexNumber); err != nil {
> -		panic(err)
> -	}
> -}
> -
> -var marshalingTests = []struct {
> -	desc      string
> -	marshaler Marshaler
> -	pb        proto.Message
> -	json      string
> -}{
> -	{"simple flat object", marshaler, simpleObject, simpleObjectJSON},
> -	{"simple pretty object", marshalerAllOptions, simpleObject, simpleObjectPrettyJSON},
> -	{"non-finite floats fields object", marshaler, nonFinites, nonFinitesJSON},
> -	{"repeated fields flat object", marshaler, repeatsObject, repeatsObjectJSON},
> -	{"repeated fields pretty object", marshalerAllOptions, repeatsObject, repeatsObjectPrettyJSON},
> -	{"nested message/enum flat object", marshaler, complexObject, complexObjectJSON},
> -	{"nested message/enum pretty object", marshalerAllOptions, complexObject, complexObjectPrettyJSON},
> -	{"enum-string flat object", Marshaler{},
> -		&pb.Widget{Color: pb.Widget_BLUE.Enum()}, `{"color":"BLUE"}`},
> -	{"enum-value pretty object", Marshaler{EnumsAsInts: true, Indent: " "},
> -		&pb.Widget{Color: pb.Widget_BLUE.Enum()}, colorPrettyJSON},
> -	{"unknown enum value object", marshalerAllOptions,
> -		&pb.Widget{Color: pb.Widget_Color(1000).Enum(), RColor: []pb.Widget_Color{pb.Widget_RED}}, colorListPrettyJSON},
> -	{"repeated proto3 enum", Marshaler{},
> -		&proto3pb.Message{RFunny: []proto3pb.Message_Humour{
> -			proto3pb.Message_PUNS,
> -			proto3pb.Message_SLAPSTICK,
> -		}},
> -		`{"rFunny":["PUNS","SLAPSTICK"]}`},
> -	{"repeated proto3 enum as int", Marshaler{EnumsAsInts: true},
> -		&proto3pb.Message{RFunny: []proto3pb.Message_Humour{
> -			proto3pb.Message_PUNS,
> -			proto3pb.Message_SLAPSTICK,
> -		}},
> -		`{"rFunny":[1,2]}`},
> -	{"empty value", marshaler, &pb.Simple3{}, `{}`},
> -	{"empty value emitted", Marshaler{EmitDefaults: true}, &pb.Simple3{}, `{"dub":0}`},
> -	{"empty repeated emitted", Marshaler{EmitDefaults: true}, &pb.SimpleSlice3{}, `{"slices":[]}`},
> -	{"empty map emitted", Marshaler{EmitDefaults: true}, &pb.SimpleMap3{}, `{"stringy":{}}`},
> -	{"nested struct null", Marshaler{EmitDefaults: true}, &pb.SimpleNull3{}, `{"simple":null}`},
> -	{"map<int64, int32>", marshaler, &pb.Mappy{Nummy: map[int64]int32{1: 2, 3: 4}}, `{"nummy":{"1":2,"3":4}}`},
> -	{"map<int64, int32>", marshalerAllOptions, &pb.Mappy{Nummy: map[int64]int32{1: 2, 3: 4}}, nummyPrettyJSON},
> -	{"map<string, string>", marshaler,
> -		&pb.Mappy{Strry: map[string]string{`"one"`: "two", "three": "four"}},
> -		`{"strry":{"\"one\"":"two","three":"four"}}`},
> -	{"map<int32, Object>", marshaler,
> -		&pb.Mappy{Objjy: map[int32]*pb.Simple3{1: {Dub: 1}}}, `{"objjy":{"1":{"dub":1}}}`},
> -	{"map<int32, Object>", marshalerAllOptions,
> -		&pb.Mappy{Objjy: map[int32]*pb.Simple3{1: {Dub: 1}}}, objjyPrettyJSON},
> -	{"map<int64, string>", marshaler, &pb.Mappy{Buggy: map[int64]string{1234: "yup"}},
> -		`{"buggy":{"1234":"yup"}}`},
> -	{"map<bool, bool>", marshaler, &pb.Mappy{Booly: map[bool]bool{false: true}}, `{"booly":{"false":true}}`},
> -	// TODO: This is broken.
> -	//{"map<string, enum>", marshaler, &pb.Mappy{Enumy: map[string]pb.Numeral{"XIV": pb.Numeral_ROMAN}}, `{"enumy":{"XIV":"ROMAN"}`},
> -	{"map<string, enum as int>", Marshaler{EnumsAsInts: true}, &pb.Mappy{Enumy: map[string]pb.Numeral{"XIV": pb.Numeral_ROMAN}}, `{"enumy":{"XIV":2}}`},
> -	{"map<int32, bool>", marshaler, &pb.Mappy{S32Booly: map[int32]bool{1: true, 3: false, 10: true, 12: false}}, `{"s32booly":{"1":true,"3":false,"10":true,"12":false}}`},
> -	{"map<int64, bool>", marshaler, &pb.Mappy{S64Booly: map[int64]bool{1: true, 3: false, 10: true, 12: false}}, `{"s64booly":{"1":true,"3":false,"10":true,"12":false}}`},
> -	{"map<uint32, bool>", marshaler, &pb.Mappy{U32Booly: map[uint32]bool{1: true, 3: false, 10: true, 12: false}}, `{"u32booly":{"1":true,"3":false,"10":true,"12":false}}`},
> -	{"map<uint64, bool>", marshaler, &pb.Mappy{U64Booly: map[uint64]bool{1: true, 3: false, 10: true, 12: false}}, `{"u64booly":{"1":true,"3":false,"10":true,"12":false}}`},
> -	{"proto2 map<int64, string>", marshaler, &pb.Maps{MInt64Str: map[int64]string{213: "cat"}},
> -		`{"mInt64Str":{"213":"cat"}}`},
> -	{"proto2 map<bool, Object>", marshaler,
> -		&pb.Maps{MBoolSimple: map[bool]*pb.Simple{true: {OInt32: proto.Int32(1)}}},
> -		`{"mBoolSimple":{"true":{"oInt32":1}}}`},
> -	{"oneof, not set", marshaler, &pb.MsgWithOneof{}, `{}`},
> -	{"oneof, set", marshaler, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_Title{"Grand Poobah"}}, `{"title":"Grand Poobah"}`},
> -	{"force orig_name", Marshaler{OrigName: true}, &pb.Simple{OInt32: proto.Int32(4)},
> -		`{"o_int32":4}`},
> -	{"proto2 extension", marshaler, realNumber, realNumberJSON},
> -	{"Any with message", marshaler, anySimple, anySimpleJSON},
> -	{"Any with message and indent", marshalerAllOptions, anySimple, anySimplePrettyJSON},
> -	{"Any with WKT", marshaler, anyWellKnown, anyWellKnownJSON},
> -	{"Any with WKT and indent", marshalerAllOptions, anyWellKnown, anyWellKnownPrettyJSON},
> -	{"Duration", marshaler, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3}}, `{"dur":"3.000s"}`},
> -	{"Struct", marshaler, &pb.KnownTypes{St: &stpb.Struct{
> -		Fields: map[string]*stpb.Value{
> -			"one": {Kind: &stpb.Value_StringValue{"loneliest number"}},
> -			"two": {Kind: &stpb.Value_NullValue{stpb.NullValue_NULL_VALUE}},
> -		},
> -	}}, `{"st":{"one":"loneliest number","two":null}}`},
> -	{"empty ListValue", marshaler, &pb.KnownTypes{Lv: &stpb.ListValue{}}, `{"lv":[]}`},
> -	{"basic ListValue", marshaler, &pb.KnownTypes{Lv: &stpb.ListValue{Values: []*stpb.Value{
> -		{Kind: &stpb.Value_StringValue{"x"}},
> -		{Kind: &stpb.Value_NullValue{}},
> -		{Kind: &stpb.Value_NumberValue{3}},
> -		{Kind: &stpb.Value_BoolValue{true}},
> -	}}}, `{"lv":["x",null,3,true]}`},
> -	{"Timestamp", marshaler, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 14e8, Nanos: 21e6}}, `{"ts":"2014-05-13T16:53:20.021Z"}`},
> -	{"number Value", marshaler, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_NumberValue{1}}}, `{"val":1}`},
> -	{"null Value", marshaler, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_NullValue{stpb.NullValue_NULL_VALUE}}}, `{"val":null}`},
> -	{"string number value", marshaler, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_StringValue{"9223372036854775807"}}}, `{"val":"9223372036854775807"}`},
> -	{"list of lists Value", marshaler, &pb.KnownTypes{Val: &stpb.Value{
> -		Kind: &stpb.Value_ListValue{&stpb.ListValue{
> -			Values: []*stpb.Value{
> -				{Kind: &stpb.Value_StringValue{"x"}},
> -				{Kind: &stpb.Value_ListValue{&stpb.ListValue{
> -					Values: []*stpb.Value{
> -						{Kind: &stpb.Value_ListValue{&stpb.ListValue{
> -							Values: []*stpb.Value{{Kind: &stpb.Value_StringValue{"y"}}},
> -						}}},
> -						{Kind: &stpb.Value_StringValue{"z"}},
> -					},
> -				}}},
> -			},
> -		}},
> -	}}, `{"val":["x",[["y"],"z"]]}`},
> -
> -	{"DoubleValue", marshaler, &pb.KnownTypes{Dbl: &wpb.DoubleValue{Value: 1.2}}, `{"dbl":1.2}`},
> -	{"FloatValue", marshaler, &pb.KnownTypes{Flt: &wpb.FloatValue{Value: 1.2}}, `{"flt":1.2}`},
> -	{"Int64Value", marshaler, &pb.KnownTypes{I64: &wpb.Int64Value{Value: -3}}, `{"i64":"-3"}`},
> -	{"UInt64Value", marshaler, &pb.KnownTypes{U64: &wpb.UInt64Value{Value: 3}}, `{"u64":"3"}`},
> -	{"Int32Value", marshaler, &pb.KnownTypes{I32: &wpb.Int32Value{Value: -4}}, `{"i32":-4}`},
> -	{"UInt32Value", marshaler, &pb.KnownTypes{U32: &wpb.UInt32Value{Value: 4}}, `{"u32":4}`},
> -	{"BoolValue", marshaler, &pb.KnownTypes{Bool: &wpb.BoolValue{Value: true}}, `{"bool":true}`},
> -	{"StringValue", marshaler, &pb.KnownTypes{Str: &wpb.StringValue{Value: "plush"}}, `{"str":"plush"}`},
> -	{"BytesValue", marshaler, &pb.KnownTypes{Bytes: &wpb.BytesValue{Value: []byte("wow")}}, `{"bytes":"d293"}`},
> -}
> -
> -func TestMarshaling(t *testing.T) {
> -	for _, tt := range marshalingTests {
> -		json, err := tt.marshaler.MarshalToString(tt.pb)
> -		if err != nil {
> -			t.Errorf("%s: marshaling error: %v", tt.desc, err)
> -		} else if tt.json != json {
> -			t.Errorf("%s: got [%v] want [%v]", tt.desc, json, tt.json)
> -		}
> -	}
> -}
> -
> -func TestMarshalJSONPBMarshaler(t *testing.T) {
> -	rawJson := `{ "foo": "bar", "baz": [0, 1, 2, 3] }`
> -	msg := dynamicMessage{rawJson: rawJson}
> -	str, err := new(Marshaler).MarshalToString(&msg)
> -	if err != nil {
> -		t.Errorf("an unexpected error occurred when marshalling JSONPBMarshaler: %v", err)
> -	}
> -	if str != rawJson {
> -		t.Errorf("marshalling JSON produced incorrect output: got %s, wanted %s", str, rawJson)
> -	}
> -}
> -
> -func TestMarshalAnyJSONPBMarshaler(t *testing.T) {
> -	msg := dynamicMessage{rawJson: `{ "foo": "bar", "baz": [0, 1, 2, 3] }`}
> -	a, err := ptypes.MarshalAny(&msg)
> -	if err != nil {
> -		t.Errorf("an unexpected error occurred when marshalling to Any: %v", err)
> -	}
> -	str, err := new(Marshaler).MarshalToString(a)
> -	if err != nil {
> -		t.Errorf("an unexpected error occurred when marshalling Any to JSON: %v", err)
> -	}
> -	// after custom marshaling, it's round-tripped through JSON decoding/encoding already,
> -	// so the keys are sorted, whitespace is compacted, and "@type" key has been added
> -	expected := `{"@type":"type.googleapis.com/` + dynamicMessageName + `","baz":[0,1,2,3],"foo":"bar"}`
> -	if str != expected {
> -		t.Errorf("marshalling JSON produced incorrect output: got %s, wanted %s", str, expected)
> -	}
> -}
> -
> -var unmarshalingTests = []struct {
> -	desc        string
> -	unmarshaler Unmarshaler
> -	json        string
> -	pb          proto.Message
> -}{
> -	{"simple flat object", Unmarshaler{}, simpleObjectJSON, simpleObject},
> -	{"simple pretty object", Unmarshaler{}, simpleObjectPrettyJSON, simpleObject},
> -	{"repeated fields flat object", Unmarshaler{}, repeatsObjectJSON, repeatsObject},
> -	{"repeated fields pretty object", Unmarshaler{}, repeatsObjectPrettyJSON, repeatsObject},
> -	{"nested message/enum flat object", Unmarshaler{}, complexObjectJSON, complexObject},
> -	{"nested message/enum pretty object", Unmarshaler{}, complexObjectPrettyJSON, complexObject},
> -	{"enum-string object", Unmarshaler{}, `{"color":"BLUE"}`, &pb.Widget{Color: pb.Widget_BLUE.Enum()}},
> -	{"enum-value object", Unmarshaler{}, "{\n \"color\": 2\n}", &pb.Widget{Color: pb.Widget_BLUE.Enum()}},
> -	{"unknown field with allowed option", Unmarshaler{AllowUnknownFields: true}, `{"unknown": "foo"}`, new(pb.Simple)},
> -	{"proto3 enum string", Unmarshaler{}, `{"hilarity":"PUNS"}`, &proto3pb.Message{Hilarity: proto3pb.Message_PUNS}},
> -	{"proto3 enum value", Unmarshaler{}, `{"hilarity":1}`, &proto3pb.Message{Hilarity: proto3pb.Message_PUNS}},
> -	{"unknown enum value object",
> -		Unmarshaler{},
> -		"{\n  \"color\": 1000,\n  \"r_color\": [\n    \"RED\"\n  ]\n}",
> -		&pb.Widget{Color: pb.Widget_Color(1000).Enum(), RColor: []pb.Widget_Color{pb.Widget_RED}}},
> -	{"repeated proto3 enum", Unmarshaler{}, `{"rFunny":["PUNS","SLAPSTICK"]}`,
> -		&proto3pb.Message{RFunny: []proto3pb.Message_Humour{
> -			proto3pb.Message_PUNS,
> -			proto3pb.Message_SLAPSTICK,
> -		}}},
> -	{"repeated proto3 enum as int", Unmarshaler{}, `{"rFunny":[1,2]}`,
> -		&proto3pb.Message{RFunny: []proto3pb.Message_Humour{
> -			proto3pb.Message_PUNS,
> -			proto3pb.Message_SLAPSTICK,
> -		}}},
> -	{"repeated proto3 enum as mix of strings and ints", Unmarshaler{}, `{"rFunny":["PUNS",2]}`,
> -		&proto3pb.Message{RFunny: []proto3pb.Message_Humour{
> -			proto3pb.Message_PUNS,
> -			proto3pb.Message_SLAPSTICK,
> -		}}},
> -	{"unquoted int64 object", Unmarshaler{}, `{"oInt64":-314}`, &pb.Simple{OInt64: proto.Int64(-314)}},
> -	{"unquoted uint64 object", Unmarshaler{}, `{"oUint64":123}`, &pb.Simple{OUint64: proto.Uint64(123)}},
> -	{"NaN", Unmarshaler{}, `{"oDouble":"NaN"}`, &pb.Simple{ODouble: proto.Float64(math.NaN())}},
> -	{"Inf", Unmarshaler{}, `{"oFloat":"Infinity"}`, &pb.Simple{OFloat: proto.Float32(float32(math.Inf(1)))}},
> -	{"-Inf", Unmarshaler{}, `{"oDouble":"-Infinity"}`, &pb.Simple{ODouble: proto.Float64(math.Inf(-1))}},
> -	{"map<int64, int32>", Unmarshaler{}, `{"nummy":{"1":2,"3":4}}`, &pb.Mappy{Nummy: map[int64]int32{1: 2, 3: 4}}},
> -	{"map<string, string>", Unmarshaler{}, `{"strry":{"\"one\"":"two","three":"four"}}`, &pb.Mappy{Strry: map[string]string{`"one"`: "two", "three": "four"}}},
> -	{"map<int32, Object>", Unmarshaler{}, `{"objjy":{"1":{"dub":1}}}`, &pb.Mappy{Objjy: map[int32]*pb.Simple3{1: {Dub: 1}}}},
> -	{"proto2 extension", Unmarshaler{}, realNumberJSON, realNumber},
> -	{"Any with message", Unmarshaler{}, anySimpleJSON, anySimple},
> -	{"Any with message and indent", Unmarshaler{}, anySimplePrettyJSON, anySimple},
> -	{"Any with WKT", Unmarshaler{}, anyWellKnownJSON, anyWellKnown},
> -	{"Any with WKT and indent", Unmarshaler{}, anyWellKnownPrettyJSON, anyWellKnown},
> -	// TODO: This is broken.
> -	//{"map<string, enum>", Unmarshaler{}, `{"enumy":{"XIV":"ROMAN"}`, &pb.Mappy{Enumy: map[string]pb.Numeral{"XIV": pb.Numeral_ROMAN}}},
> -	{"map<string, enum as int>", Unmarshaler{}, `{"enumy":{"XIV":2}}`, &pb.Mappy{Enumy: map[string]pb.Numeral{"XIV": pb.Numeral_ROMAN}}},
> -	{"oneof", Unmarshaler{}, `{"salary":31000}`, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_Salary{31000}}},
> -	{"oneof spec name", Unmarshaler{}, `{"Country":"Australia"}`, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_Country{"Australia"}}},
> -	{"oneof orig_name", Unmarshaler{}, `{"Country":"Australia"}`, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_Country{"Australia"}}},
> -	{"oneof spec name2", Unmarshaler{}, `{"homeAddress":"Australia"}`, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_HomeAddress{"Australia"}}},
> -	{"oneof orig_name2", Unmarshaler{}, `{"home_address":"Australia"}`, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_HomeAddress{"Australia"}}},
> -	{"orig_name input", Unmarshaler{}, `{"o_bool":true}`, &pb.Simple{OBool: proto.Bool(true)}},
> -	{"camelName input", Unmarshaler{}, `{"oBool":true}`, &pb.Simple{OBool: proto.Bool(true)}},
> -
> -	{"Duration", Unmarshaler{}, `{"dur":"3.000s"}`, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3}}},
> -	{"null Duration", Unmarshaler{}, `{"dur":null}`, &pb.KnownTypes{Dur: nil}},
> -	{"Timestamp", Unmarshaler{}, `{"ts":"2014-05-13T16:53:20.021Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 14e8, Nanos: 21e6}}},
> -	{"PreEpochTimestamp", Unmarshaler{}, `{"ts":"1969-12-31T23:59:58.999999995Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -2, Nanos: 999999995}}},
> -	{"ZeroTimeTimestamp", Unmarshaler{}, `{"ts":"0001-01-01T00:00:00Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -62135596800, Nanos: 0}}},
> -	{"null Timestamp", Unmarshaler{}, `{"ts":null}`, &pb.KnownTypes{Ts: nil}},
> -	{"null Struct", Unmarshaler{}, `{"st": null}`, &pb.KnownTypes{St: nil}},
> -	{"empty Struct", Unmarshaler{}, `{"st": {}}`, &pb.KnownTypes{St: &stpb.Struct{}}},
> -	{"basic Struct", Unmarshaler{}, `{"st": {"a": "x", "b": null, "c": 3, "d": true}}`, &pb.KnownTypes{St: &stpb.Struct{Fields: map[string]*stpb.Value{
> -		"a": {Kind: &stpb.Value_StringValue{"x"}},
> -		"b": {Kind: &stpb.Value_NullValue{}},
> -		"c": {Kind: &stpb.Value_NumberValue{3}},
> -		"d": {Kind: &stpb.Value_BoolValue{true}},
> -	}}}},
> -	{"nested Struct", Unmarshaler{}, `{"st": {"a": {"b": 1, "c": [{"d": true}, "f"]}}}`, &pb.KnownTypes{St: &stpb.Struct{Fields: map[string]*stpb.Value{
> -		"a": {Kind: &stpb.Value_StructValue{&stpb.Struct{Fields: map[string]*stpb.Value{
> -			"b": {Kind: &stpb.Value_NumberValue{1}},
> -			"c": {Kind: &stpb.Value_ListValue{&stpb.ListValue{Values: []*stpb.Value{
> -				{Kind: &stpb.Value_StructValue{&stpb.Struct{Fields: map[string]*stpb.Value{"d": {Kind: &stpb.Value_BoolValue{true}}}}}},
> -				{Kind: &stpb.Value_StringValue{"f"}},
> -			}}}},
> -		}}}},
> -	}}}},
> -	{"null ListValue", Unmarshaler{}, `{"lv": null}`, &pb.KnownTypes{Lv: nil}},
> -	{"empty ListValue", Unmarshaler{}, `{"lv": []}`, &pb.KnownTypes{Lv: &stpb.ListValue{}}},
> -	{"basic ListValue", Unmarshaler{}, `{"lv": ["x", null, 3, true]}`, &pb.KnownTypes{Lv: &stpb.ListValue{Values: []*stpb.Value{
> -		{Kind: &stpb.Value_StringValue{"x"}},
> -		{Kind: &stpb.Value_NullValue{}},
> -		{Kind: &stpb.Value_NumberValue{3}},
> -		{Kind: &stpb.Value_BoolValue{true}},
> -	}}}},
> -	{"number Value", Unmarshaler{}, `{"val":1}`, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_NumberValue{1}}}},
> -	{"null Value", Unmarshaler{}, `{"val":null}`, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_NullValue{stpb.NullValue_NULL_VALUE}}}},
> -	{"bool Value", Unmarshaler{}, `{"val":true}`, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_BoolValue{true}}}},
> -	{"string Value", Unmarshaler{}, `{"val":"x"}`, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_StringValue{"x"}}}},
> -	{"string number value", Unmarshaler{}, `{"val":"9223372036854775807"}`, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_StringValue{"9223372036854775807"}}}},
> -	{"list of lists Value", Unmarshaler{}, `{"val":["x", [["y"], "z"]]}`, &pb.KnownTypes{Val: &stpb.Value{
> -		Kind: &stpb.Value_ListValue{&stpb.ListValue{
> -			Values: []*stpb.Value{
> -				{Kind: &stpb.Value_StringValue{"x"}},
> -				{Kind: &stpb.Value_ListValue{&stpb.ListValue{
> -					Values: []*stpb.Value{
> -						{Kind: &stpb.Value_ListValue{&stpb.ListValue{
> -							Values: []*stpb.Value{{Kind: &stpb.Value_StringValue{"y"}}},
> -						}}},
> -						{Kind: &stpb.Value_StringValue{"z"}},
> -					},
> -				}}},
> -			},
> -		}}}}},
> -
> -	{"DoubleValue", Unmarshaler{}, `{"dbl":1.2}`, &pb.KnownTypes{Dbl: &wpb.DoubleValue{Value: 1.2}}},
> -	{"FloatValue", Unmarshaler{}, `{"flt":1.2}`, &pb.KnownTypes{Flt: &wpb.FloatValue{Value: 1.2}}},
> -	{"Int64Value", Unmarshaler{}, `{"i64":"-3"}`, &pb.KnownTypes{I64: &wpb.Int64Value{Value: -3}}},
> -	{"UInt64Value", Unmarshaler{}, `{"u64":"3"}`, &pb.KnownTypes{U64: &wpb.UInt64Value{Value: 3}}},
> -	{"Int32Value", Unmarshaler{}, `{"i32":-4}`, &pb.KnownTypes{I32: &wpb.Int32Value{Value: -4}}},
> -	{"UInt32Value", Unmarshaler{}, `{"u32":4}`, &pb.KnownTypes{U32: &wpb.UInt32Value{Value: 4}}},
> -	{"BoolValue", Unmarshaler{}, `{"bool":true}`, &pb.KnownTypes{Bool: &wpb.BoolValue{Value: true}}},
> -	{"StringValue", Unmarshaler{}, `{"str":"plush"}`, &pb.KnownTypes{Str: &wpb.StringValue{Value: "plush"}}},
> -	{"BytesValue", Unmarshaler{}, `{"bytes":"d293"}`, &pb.KnownTypes{Bytes: &wpb.BytesValue{Value: []byte("wow")}}},
> -
> -	// Ensure that `null` as a value ends up with a nil pointer instead of a [type]Value struct.
> -	{"null DoubleValue", Unmarshaler{}, `{"dbl":null}`, &pb.KnownTypes{Dbl: nil}},
> -	{"null FloatValue", Unmarshaler{}, `{"flt":null}`, &pb.KnownTypes{Flt: nil}},
> -	{"null Int64Value", Unmarshaler{}, `{"i64":null}`, &pb.KnownTypes{I64: nil}},
> -	{"null UInt64Value", Unmarshaler{}, `{"u64":null}`, &pb.KnownTypes{U64: nil}},
> -	{"null Int32Value", Unmarshaler{}, `{"i32":null}`, &pb.KnownTypes{I32: nil}},
> -	{"null UInt32Value", Unmarshaler{}, `{"u32":null}`, &pb.KnownTypes{U32: nil}},
> -	{"null BoolValue", Unmarshaler{}, `{"bool":null}`, &pb.KnownTypes{Bool: nil}},
> -	{"null StringValue", Unmarshaler{}, `{"str":null}`, &pb.KnownTypes{Str: nil}},
> -	{"null BytesValue", Unmarshaler{}, `{"bytes":null}`, &pb.KnownTypes{Bytes: nil}},
> -}
> -
> -func TestUnmarshaling(t *testing.T) {
> -	for _, tt := range unmarshalingTests {
> -		// Make a new instance of the type of our expected object.
> -		p := reflect.New(reflect.TypeOf(tt.pb).Elem()).Interface().(proto.Message)
> -
> -		err := tt.unmarshaler.Unmarshal(strings.NewReader(tt.json), p)
> -		if err != nil {
> -			t.Errorf("%s: %v", tt.desc, err)
> -			continue
> -		}
> -
> -		// For easier diffs, compare text strings of the protos.
> -		exp := proto.MarshalTextString(tt.pb)
> -		act := proto.MarshalTextString(p)
> -		if string(exp) != string(act) {
> -			t.Errorf("%s: got [%s] want [%s]", tt.desc, act, exp)
> -		}
> -	}
> -}
> -
> -func TestUnmarshalNullArray(t *testing.T) {
> -	var repeats pb.Repeats
> -	if err := UnmarshalString(`{"rBool":null}`, &repeats); err != nil {
> -		t.Fatal(err)
> -	}
> -	if !reflect.DeepEqual(repeats, pb.Repeats{}) {
> -		t.Errorf("got non-nil fields in [%#v]", repeats)
> -	}
> -}
> -
> -func TestUnmarshalNullObject(t *testing.T) {
> -	var maps pb.Maps
> -	if err := UnmarshalString(`{"mInt64Str":null}`, &maps); err != nil {
> -		t.Fatal(err)
> -	}
> -	if !reflect.DeepEqual(maps, pb.Maps{}) {
> -		t.Errorf("got non-nil fields in [%#v]", maps)
> -	}
> -}
> -
> -func TestUnmarshalNext(t *testing.T) {
> -	// We only need to check against a few, not all of them.
> -	tests := unmarshalingTests[:5]
> -
> -	// Create a buffer with many concatenated JSON objects.
> -	var b bytes.Buffer
> -	for _, tt := range tests {
> -		b.WriteString(tt.json)
> -	}
> -
> -	dec := json.NewDecoder(&b)
> -	for _, tt := range tests {
> -		// Make a new instance of the type of our expected object.
> -		p := reflect.New(reflect.TypeOf(tt.pb).Elem()).Interface().(proto.Message)
> -
> -		err := tt.unmarshaler.UnmarshalNext(dec, p)
> -		if err != nil {
> -			t.Errorf("%s: %v", tt.desc, err)
> -			continue
> -		}
> -
> -		// For easier diffs, compare text strings of the protos.
> -		exp := proto.MarshalTextString(tt.pb)
> -		act := proto.MarshalTextString(p)
> -		if string(exp) != string(act) {
> -			t.Errorf("%s: got [%s] want [%s]", tt.desc, act, exp)
> -		}
> -	}
> -
> -	p := &pb.Simple{}
> -	err := new(Unmarshaler).UnmarshalNext(dec, p)
> -	if err != io.EOF {
> -		t.Errorf("eof: got %v, expected io.EOF", err)
> -	}
> -}
> -
> -var unmarshalingShouldError = []struct {
> -	desc string
> -	in   string
> -	pb   proto.Message
> -}{
> -	{"a value", "666", new(pb.Simple)},
> -	{"gibberish", "{adskja123;l23=-=", new(pb.Simple)},
> -	{"unknown field", `{"unknown": "foo"}`, new(pb.Simple)},
> -	{"unknown enum name", `{"hilarity":"DAVE"}`, new(proto3pb.Message)},
> -}
> -
> -func TestUnmarshalingBadInput(t *testing.T) {
> -	for _, tt := range unmarshalingShouldError {
> -		err := UnmarshalString(tt.in, tt.pb)
> -		if err == nil {
> -			t.Errorf("an error was expected when parsing %q instead of an object", tt.desc)
> -		}
> -	}
> -}
> -
> -type funcResolver func(turl string) (proto.Message, error)
> -
> -func (fn funcResolver) Resolve(turl string) (proto.Message, error) {
> -	return fn(turl)
> -}
> -
> -func TestAnyWithCustomResolver(t *testing.T) {
> -	var resolvedTypeUrls []string
> -	resolver := funcResolver(func(turl string) (proto.Message, error) {
> -		resolvedTypeUrls = append(resolvedTypeUrls, turl)
> -		return new(pb.Simple), nil
> -	})
> -	msg := &pb.Simple{
> -		OBytes:  []byte{1, 2, 3, 4},
> -		OBool:   proto.Bool(true),
> -		OString: proto.String("foobar"),
> -		OInt64:  proto.Int64(1020304),
> -	}
> -	msgBytes, err := proto.Marshal(msg)
> -	if err != nil {
> -		t.Errorf("an unexpected error occurred when marshaling message: %v", err)
> -	}
> -	// make an Any with a type URL that won't resolve w/out custom resolver
> -	any := &anypb.Any{
> -		TypeUrl: "https://foobar.com/some.random.MessageKind",
> -		Value:   msgBytes,
> -	}
> -
> -	m := Marshaler{AnyResolver: resolver}
> -	js, err := m.MarshalToString(any)
> -	if err != nil {
> -		t.Errorf("an unexpected error occurred when marshaling any to JSON: %v", err)
> -	}
> -	if len(resolvedTypeUrls) != 1 {
> -		t.Errorf("custom resolver was not invoked during marshaling")
> -	} else if resolvedTypeUrls[0] != "https://foobar.com/some.random.MessageKind" {
> -		t.Errorf("custom resolver was invoked with wrong URL: got %q, wanted %q", resolvedTypeUrls[0], "https://foobar.com/some.random.MessageKind")
> -	}
> -	wanted := `{"@type":"https://foobar.com/some.random.MessageKind","oBool":true,"oInt64":"1020304","oString":"foobar","oBytes":"AQIDBA=="}`
> -	if js != wanted {
> -		t.Errorf("marshalling JSON produced incorrect output: got %s, wanted %s", js, wanted)
> -	}
> -
> -	u := Unmarshaler{AnyResolver: resolver}
> -	roundTrip := &anypb.Any{}
> -	err = u.Unmarshal(bytes.NewReader([]byte(js)), roundTrip)
> -	if err != nil {
> -		t.Errorf("an unexpected error occurred when unmarshaling any from JSON: %v", err)
> -	}
> -	if len(resolvedTypeUrls) != 2 {
> -		t.Errorf("custom resolver was not invoked during marshaling")
> -	} else if resolvedTypeUrls[1] != "https://foobar.com/some.random.MessageKind" {
> -		t.Errorf("custom resolver was invoked with wrong URL: got %q, wanted %q", resolvedTypeUrls[1], "https://foobar.com/some.random.MessageKind")
> -	}
> -	if !proto.Equal(any, roundTrip) {
> -		t.Errorf("message contents not set correctly after unmarshalling JSON: got %s, wanted %s", roundTrip, any)
> -	}
> -}
> -
> -func TestUnmarshalJSONPBUnmarshaler(t *testing.T) {
> -	rawJson := `{ "foo": "bar", "baz": [0, 1, 2, 3] }`
> -	var msg dynamicMessage
> -	if err := Unmarshal(strings.NewReader(rawJson), &msg); err != nil {
> -		t.Errorf("an unexpected error occurred when parsing into JSONPBUnmarshaler: %v", err)
> -	}
> -	if msg.rawJson != rawJson {
> -		t.Errorf("message contents not set correctly after unmarshalling JSON: got %s, wanted %s", msg.rawJson, rawJson)
> -	}
> -}
> -
> -func TestUnmarshalAnyJSONPBUnmarshaler(t *testing.T) {
> -	rawJson := `{ "@type": "blah.com/` + dynamicMessageName + `", "foo": "bar", "baz": [0, 1, 2, 3] }`
> -	var got anypb.Any
> -	if err := Unmarshal(strings.NewReader(rawJson), &got); err != nil {
> -		t.Errorf("an unexpected error occurred when parsing into JSONPBUnmarshaler: %v", err)
> -	}
> -
> -	dm := &dynamicMessage{rawJson: `{"baz":[0,1,2,3],"foo":"bar"}`}
> -	var want anypb.Any
> -	if b, err := proto.Marshal(dm); err != nil {
> -		t.Errorf("an unexpected error occurred when marshaling message: %v", err)
> -	} else {
> -		want.TypeUrl = "blah.com/" + dynamicMessageName
> -		want.Value = b
> -	}
> -
> -	if !proto.Equal(&got, &want) {
> -		t.Errorf("message contents not set correctly after unmarshalling JSON: got %s, wanted %s", got, want)
> -	}
> -}
> -
> -const (
> -	dynamicMessageName = "google.protobuf.jsonpb.testing.dynamicMessage"
> -)
> -
> -func init() {
> -	// we register the custom type below so that we can use it in Any types
> -	proto.RegisterType((*dynamicMessage)(nil), dynamicMessageName)
> -}
> -
> -// dynamicMessage implements protobuf.Message but is not a normal generated message type.
> -// It provides implementations of JSONPBMarshaler and JSONPBUnmarshaler for JSON support.
> -type dynamicMessage struct {
> -	rawJson string `protobuf:"bytes,1,opt,name=rawJson"`
> -}
> -
> -func (m *dynamicMessage) Reset() {
> -	m.rawJson = "{}"
> -}
> -
> -func (m *dynamicMessage) String() string {
> -	return m.rawJson
> -}
> -
> -func (m *dynamicMessage) ProtoMessage() {
> -}
> -
> -func (m *dynamicMessage) MarshalJSONPB(jm *Marshaler) ([]byte, error) {
> -	return []byte(m.rawJson), nil
> -}
> -
> -func (m *dynamicMessage) UnmarshalJSONPB(jum *Unmarshaler, js []byte) error {
> -	m.rawJson = string(js)
> -	return nil
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/Makefile b/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/Makefile
> deleted file mode 100644
> index eeda8ae5..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/Makefile
> +++ /dev/null
> @@ -1,33 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2015 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -regenerate:
> -	protoc --go_out=Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any,Mgoogle/protobuf/duration.proto=github.com/golang/protobuf/ptypes/duration,Mgoogle/protobuf/struct.proto=github.com/golang/protobuf/ptypes/struct,Mgoogle/protobuf/timestamp.proto=github.com/golang/protobuf/ptypes/timestamp,Mgoogle/protobuf/wrappers.proto=github.com/golang/protobuf/ptypes/wrappers:. *.proto
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go
> deleted file mode 100644
> index ebb180e8..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go
> +++ /dev/null
> @@ -1,266 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: more_test_objects.proto
> -
> -/*
> -Package jsonpb is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	more_test_objects.proto
> -	test_objects.proto
> -
> -It has these top-level messages:
> -	Simple3
> -	SimpleSlice3
> -	SimpleMap3
> -	SimpleNull3
> -	Mappy
> -	Simple
> -	NonFinites
> -	Repeats
> -	Widget
> -	Maps
> -	MsgWithOneof
> -	Real
> -	Complex
> -	KnownTypes
> -*/
> -package jsonpb
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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 Numeral int32
> -
> -const (
> -	Numeral_UNKNOWN Numeral = 0
> -	Numeral_ARABIC  Numeral = 1
> -	Numeral_ROMAN   Numeral = 2
> -)
> -
> -var Numeral_name = map[int32]string{
> -	0: "UNKNOWN",
> -	1: "ARABIC",
> -	2: "ROMAN",
> -}
> -var Numeral_value = map[string]int32{
> -	"UNKNOWN": 0,
> -	"ARABIC":  1,
> -	"ROMAN":   2,
> -}
> -
> -func (x Numeral) String() string {
> -	return proto.EnumName(Numeral_name, int32(x))
> -}
> -func (Numeral) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -type Simple3 struct {
> -	Dub float64 `protobuf:"fixed64,1,opt,name=dub" json:"dub,omitempty"`
> -}
> -
> -func (m *Simple3) Reset()                    { *m = Simple3{} }
> -func (m *Simple3) String() string            { return proto.CompactTextString(m) }
> -func (*Simple3) ProtoMessage()               {}
> -func (*Simple3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -func (m *Simple3) GetDub() float64 {
> -	if m != nil {
> -		return m.Dub
> -	}
> -	return 0
> -}
> -
> -type SimpleSlice3 struct {
> -	Slices []string `protobuf:"bytes,1,rep,name=slices" json:"slices,omitempty"`
> -}
> -
> -func (m *SimpleSlice3) Reset()                    { *m = SimpleSlice3{} }
> -func (m *SimpleSlice3) String() string            { return proto.CompactTextString(m) }
> -func (*SimpleSlice3) ProtoMessage()               {}
> -func (*SimpleSlice3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -
> -func (m *SimpleSlice3) GetSlices() []string {
> -	if m != nil {
> -		return m.Slices
> -	}
> -	return nil
> -}
> -
> -type SimpleMap3 struct {
> -	Stringy map[string]string `protobuf:"bytes,1,rep,name=stringy" json:"stringy,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -}
> -
> -func (m *SimpleMap3) Reset()                    { *m = SimpleMap3{} }
> -func (m *SimpleMap3) String() string            { return proto.CompactTextString(m) }
> -func (*SimpleMap3) ProtoMessage()               {}
> -func (*SimpleMap3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
> -
> -func (m *SimpleMap3) GetStringy() map[string]string {
> -	if m != nil {
> -		return m.Stringy
> -	}
> -	return nil
> -}
> -
> -type SimpleNull3 struct {
> -	Simple *Simple3 `protobuf:"bytes,1,opt,name=simple" json:"simple,omitempty"`
> -}
> -
> -func (m *SimpleNull3) Reset()                    { *m = SimpleNull3{} }
> -func (m *SimpleNull3) String() string            { return proto.CompactTextString(m) }
> -func (*SimpleNull3) ProtoMessage()               {}
> -func (*SimpleNull3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
> -
> -func (m *SimpleNull3) GetSimple() *Simple3 {
> -	if m != nil {
> -		return m.Simple
> -	}
> -	return nil
> -}
> -
> -type Mappy struct {
> -	Nummy    map[int64]int32    `protobuf:"bytes,1,rep,name=nummy" json:"nummy,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -	Strry    map[string]string  `protobuf:"bytes,2,rep,name=strry" json:"strry,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	Objjy    map[int32]*Simple3 `protobuf:"bytes,3,rep,name=objjy" json:"objjy,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	Buggy    map[int64]string   `protobuf:"bytes,4,rep,name=buggy" json:"buggy,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	Booly    map[bool]bool      `protobuf:"bytes,5,rep,name=booly" json:"booly,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -	Enumy    map[string]Numeral `protobuf:"bytes,6,rep,name=enumy" json:"enumy,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=jsonpb.Numeral"`
> -	S32Booly map[int32]bool     `protobuf:"bytes,7,rep,name=s32booly" json:"s32booly,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -	S64Booly map[int64]bool     `protobuf:"bytes,8,rep,name=s64booly" json:"s64booly,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -	U32Booly map[uint32]bool    `protobuf:"bytes,9,rep,name=u32booly" json:"u32booly,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -	U64Booly map[uint64]bool    `protobuf:"bytes,10,rep,name=u64booly" json:"u64booly,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -}
> -
> -func (m *Mappy) Reset()                    { *m = Mappy{} }
> -func (m *Mappy) String() string            { return proto.CompactTextString(m) }
> -func (*Mappy) ProtoMessage()               {}
> -func (*Mappy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
> -
> -func (m *Mappy) GetNummy() map[int64]int32 {
> -	if m != nil {
> -		return m.Nummy
> -	}
> -	return nil
> -}
> -
> -func (m *Mappy) GetStrry() map[string]string {
> -	if m != nil {
> -		return m.Strry
> -	}
> -	return nil
> -}
> -
> -func (m *Mappy) GetObjjy() map[int32]*Simple3 {
> -	if m != nil {
> -		return m.Objjy
> -	}
> -	return nil
> -}
> -
> -func (m *Mappy) GetBuggy() map[int64]string {
> -	if m != nil {
> -		return m.Buggy
> -	}
> -	return nil
> -}
> -
> -func (m *Mappy) GetBooly() map[bool]bool {
> -	if m != nil {
> -		return m.Booly
> -	}
> -	return nil
> -}
> -
> -func (m *Mappy) GetEnumy() map[string]Numeral {
> -	if m != nil {
> -		return m.Enumy
> -	}
> -	return nil
> -}
> -
> -func (m *Mappy) GetS32Booly() map[int32]bool {
> -	if m != nil {
> -		return m.S32Booly
> -	}
> -	return nil
> -}
> -
> -func (m *Mappy) GetS64Booly() map[int64]bool {
> -	if m != nil {
> -		return m.S64Booly
> -	}
> -	return nil
> -}
> -
> -func (m *Mappy) GetU32Booly() map[uint32]bool {
> -	if m != nil {
> -		return m.U32Booly
> -	}
> -	return nil
> -}
> -
> -func (m *Mappy) GetU64Booly() map[uint64]bool {
> -	if m != nil {
> -		return m.U64Booly
> -	}
> -	return nil
> -}
> -
> -func init() {
> -	proto.RegisterType((*Simple3)(nil), "jsonpb.Simple3")
> -	proto.RegisterType((*SimpleSlice3)(nil), "jsonpb.SimpleSlice3")
> -	proto.RegisterType((*SimpleMap3)(nil), "jsonpb.SimpleMap3")
> -	proto.RegisterType((*SimpleNull3)(nil), "jsonpb.SimpleNull3")
> -	proto.RegisterType((*Mappy)(nil), "jsonpb.Mappy")
> -	proto.RegisterEnum("jsonpb.Numeral", Numeral_name, Numeral_value)
> -}
> -
> -func init() { proto.RegisterFile("more_test_objects.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 526 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdd, 0x6b, 0xdb, 0x3c,
> -	0x14, 0x87, 0x5f, 0x27, 0xf5, 0xd7, 0x49, 0xfb, 0x2e, 0x88, 0xb1, 0x99, 0xf4, 0x62, 0xc5, 0xb0,
> -	0xad, 0x0c, 0xe6, 0x8b, 0x78, 0x74, 0x5d, 0x77, 0x95, 0x8e, 0x5e, 0x94, 0x11, 0x07, 0x1c, 0xc2,
> -	0x2e, 0x4b, 0xdc, 0x99, 0x90, 0xcc, 0x5f, 0xd8, 0xd6, 0xc0, 0xd7, 0xfb, 0xbb, 0x07, 0xe3, 0x48,
> -	0x72, 0x2d, 0x07, 0x85, 0x6c, 0x77, 0x52, 0x7e, 0xcf, 0xe3, 0x73, 0x24, 0x1d, 0x02, 0x2f, 0xd3,
> -	0xbc, 0x8c, 0x1f, 0xea, 0xb8, 0xaa, 0x1f, 0xf2, 0x68, 0x17, 0x3f, 0xd6, 0x95, 0x57, 0x94, 0x79,
> -	0x9d, 0x13, 0x63, 0x57, 0xe5, 0x59, 0x11, 0xb9, 0xe7, 0x60, 0x2e, 0xb7, 0x69, 0x91, 0xc4, 0x3e,
> -	0x19, 0xc3, 0xf0, 0x3b, 0x8d, 0x1c, 0xed, 0x42, 0xbb, 0xd4, 0x42, 0x5c, 0xba, 0x6f, 0xe0, 0x94,
> -	0x87, 0xcb, 0x64, 0xfb, 0x18, 0xfb, 0xe4, 0x05, 0x18, 0x15, 0xae, 0x2a, 0x47, 0xbb, 0x18, 0x5e,
> -	0xda, 0xa1, 0xd8, 0xb9, 0xbf, 0x34, 0x00, 0x0e, 0xce, 0xd7, 0x85, 0x4f, 0x3e, 0x81, 0x59, 0xd5,
> -	0xe5, 0x36, 0xdb, 0x34, 0x8c, 0x1b, 0x4d, 0x5f, 0x79, 0xbc, 0x9a, 0xd7, 0x41, 0xde, 0x92, 0x13,
> -	0x77, 0x59, 0x5d, 0x36, 0x61, 0xcb, 0x4f, 0x6e, 0xe0, 0x54, 0x0e, 0xb0, 0xa7, 0x1f, 0x71, 0xc3,
> -	0x7a, 0xb2, 0x43, 0x5c, 0x92, 0xe7, 0xa0, 0xff, 0x5c, 0x27, 0x34, 0x76, 0x06, 0xec, 0x37, 0xbe,
> -	0xb9, 0x19, 0x5c, 0x6b, 0xee, 0x15, 0x8c, 0xf8, 0xf7, 0x03, 0x9a, 0x24, 0x3e, 0x79, 0x0b, 0x46,
> -	0xc5, 0xb6, 0xcc, 0x1e, 0x4d, 0x9f, 0xf5, 0x9b, 0xf0, 0x43, 0x11, 0xbb, 0xbf, 0x2d, 0xd0, 0xe7,
> -	0xeb, 0xa2, 0x68, 0x88, 0x07, 0x7a, 0x46, 0xd3, 0xb4, 0x6d, 0xdb, 0x69, 0x0d, 0x96, 0x7a, 0x01,
> -	0x46, 0xbc, 0x5f, 0x8e, 0x21, 0x5f, 0xd5, 0x65, 0xd9, 0x38, 0x03, 0x15, 0xbf, 0xc4, 0x48, 0xf0,
> -	0x0c, 0x43, 0x3e, 0x8f, 0x76, 0xbb, 0xc6, 0x19, 0xaa, 0xf8, 0x05, 0x46, 0x82, 0x67, 0x18, 0xf2,
> -	0x11, 0xdd, 0x6c, 0x1a, 0xe7, 0x44, 0xc5, 0xdf, 0x62, 0x24, 0x78, 0x86, 0x31, 0x3e, 0xcf, 0x93,
> -	0xc6, 0xd1, 0x95, 0x3c, 0x46, 0x2d, 0x8f, 0x6b, 0xe4, 0xe3, 0x8c, 0xa6, 0x8d, 0x63, 0xa8, 0xf8,
> -	0x3b, 0x8c, 0x04, 0xcf, 0x30, 0xf2, 0x11, 0xac, 0xca, 0x9f, 0xf2, 0x12, 0x26, 0x53, 0xce, 0xf7,
> -	0x8e, 0x2c, 0x52, 0x6e, 0x3d, 0xc1, 0x4c, 0xbc, 0xfa, 0xc0, 0x45, 0x4b, 0x29, 0x8a, 0xb4, 0x15,
> -	0xc5, 0x16, 0x45, 0xda, 0x56, 0xb4, 0x55, 0xe2, 0xaa, 0x5f, 0x91, 0x4a, 0x15, 0x69, 0x5b, 0x11,
> -	0x94, 0x62, 0xbf, 0x62, 0x0b, 0x4f, 0xae, 0x01, 0xba, 0x87, 0x96, 0xe7, 0x6f, 0xa8, 0x98, 0x3f,
> -	0x5d, 0x9a, 0x3f, 0x34, 0xbb, 0x27, 0xff, 0x97, 0xc9, 0x9d, 0xdc, 0x03, 0x74, 0x8f, 0x2f, 0x9b,
> -	0x3a, 0x37, 0x5f, 0xcb, 0xa6, 0x62, 0x92, 0xfb, 0x4d, 0x74, 0x73, 0x71, 0xac, 0x7d, 0x7b, 0xdf,
> -	0x7c, 0xba, 0x10, 0xd9, 0xb4, 0x14, 0xa6, 0xb5, 0xd7, 0x7e, 0x37, 0x2b, 0x8a, 0x83, 0xf7, 0xda,
> -	0xff, 0xbf, 0x6b, 0x3f, 0xa0, 0x69, 0x5c, 0xae, 0x13, 0xf9, 0x53, 0x9f, 0xe1, 0xac, 0x37, 0x43,
> -	0x8a, 0xcb, 0x38, 0xdc, 0x07, 0xca, 0xf2, 0xab, 0x1e, 0x3b, 0xfe, 0xbe, 0xbc, 0x3a, 0x54, 0xf9,
> -	0xec, 0x6f, 0xe4, 0x43, 0x95, 0x4f, 0x8e, 0xc8, 0xef, 0xde, 0x83, 0x29, 0x6e, 0x82, 0x8c, 0xc0,
> -	0x5c, 0x05, 0x5f, 0x83, 0xc5, 0xb7, 0x60, 0xfc, 0x1f, 0x01, 0x30, 0x66, 0xe1, 0xec, 0xf6, 0xfe,
> -	0xcb, 0x58, 0x23, 0x36, 0xe8, 0xe1, 0x62, 0x3e, 0x0b, 0xc6, 0x83, 0xc8, 0x60, 0x7f, 0xe0, 0xfe,
> -	0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x84, 0x34, 0xaf, 0xdb, 0x05, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto b/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto
> deleted file mode 100644
> index d254fa5f..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto
> +++ /dev/null
> @@ -1,69 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2015 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto3";
> -
> -package jsonpb;
> -
> -message Simple3 {
> -  double dub = 1;
> -}
> -
> -message SimpleSlice3 {
> -  repeated string slices = 1;
> -}
> -
> -message SimpleMap3 {
> -  map<string,string> stringy = 1;
> -}
> -
> -message SimpleNull3 {
> -  Simple3 simple = 1;
> -}
> -
> -enum Numeral {
> -  UNKNOWN = 0;
> -  ARABIC = 1;
> -  ROMAN = 2;
> -}
> -
> -message Mappy {
> -  map<int64, int32> nummy = 1;
> -  map<string, string> strry = 2;
> -  map<int32, Simple3> objjy = 3;
> -  map<int64, string> buggy = 4;
> -  map<bool, bool> booly = 5;
> -  map<string, Numeral> enumy = 6;
> -  map<int32, bool> s32booly = 7;
> -  map<int64, bool> s64booly = 8;
> -  map<uint32, bool> u32booly = 9;
> -  map<uint64, bool> u64booly = 10;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go
> deleted file mode 100644
> index d413d740..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go
> +++ /dev/null
> @@ -1,852 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: test_objects.proto
> -
> -package jsonpb
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -import google_protobuf "github.com/golang/protobuf/ptypes/any"
> -import google_protobuf1 "github.com/golang/protobuf/ptypes/duration"
> -import google_protobuf2 "github.com/golang/protobuf/ptypes/struct"
> -import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp"
> -import google_protobuf4 "github.com/golang/protobuf/ptypes/wrappers"
> -
> -// Reference imports to suppress errors if they are not otherwise used.
> -var _ = proto.Marshal
> -var _ = fmt.Errorf
> -var _ = math.Inf
> -
> -type Widget_Color int32
> -
> -const (
> -	Widget_RED   Widget_Color = 0
> -	Widget_GREEN Widget_Color = 1
> -	Widget_BLUE  Widget_Color = 2
> -)
> -
> -var Widget_Color_name = map[int32]string{
> -	0: "RED",
> -	1: "GREEN",
> -	2: "BLUE",
> -}
> -var Widget_Color_value = map[string]int32{
> -	"RED":   0,
> -	"GREEN": 1,
> -	"BLUE":  2,
> -}
> -
> -func (x Widget_Color) Enum() *Widget_Color {
> -	p := new(Widget_Color)
> -	*p = x
> -	return p
> -}
> -func (x Widget_Color) String() string {
> -	return proto.EnumName(Widget_Color_name, int32(x))
> -}
> -func (x *Widget_Color) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(Widget_Color_value, data, "Widget_Color")
> -	if err != nil {
> -		return err
> -	}
> -	*x = Widget_Color(value)
> -	return nil
> -}
> -func (Widget_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{3, 0} }
> -
> -// Test message for holding primitive types.
> -type Simple struct {
> -	OBool            *bool    `protobuf:"varint,1,opt,name=o_bool,json=oBool" json:"o_bool,omitempty"`
> -	OInt32           *int32   `protobuf:"varint,2,opt,name=o_int32,json=oInt32" json:"o_int32,omitempty"`
> -	OInt64           *int64   `protobuf:"varint,3,opt,name=o_int64,json=oInt64" json:"o_int64,omitempty"`
> -	OUint32          *uint32  `protobuf:"varint,4,opt,name=o_uint32,json=oUint32" json:"o_uint32,omitempty"`
> -	OUint64          *uint64  `protobuf:"varint,5,opt,name=o_uint64,json=oUint64" json:"o_uint64,omitempty"`
> -	OSint32          *int32   `protobuf:"zigzag32,6,opt,name=o_sint32,json=oSint32" json:"o_sint32,omitempty"`
> -	OSint64          *int64   `protobuf:"zigzag64,7,opt,name=o_sint64,json=oSint64" json:"o_sint64,omitempty"`
> -	OFloat           *float32 `protobuf:"fixed32,8,opt,name=o_float,json=oFloat" json:"o_float,omitempty"`
> -	ODouble          *float64 `protobuf:"fixed64,9,opt,name=o_double,json=oDouble" json:"o_double,omitempty"`
> -	OString          *string  `protobuf:"bytes,10,opt,name=o_string,json=oString" json:"o_string,omitempty"`
> -	OBytes           []byte   `protobuf:"bytes,11,opt,name=o_bytes,json=oBytes" json:"o_bytes,omitempty"`
> -	XXX_unrecognized []byte   `json:"-"`
> -}
> -
> -func (m *Simple) Reset()                    { *m = Simple{} }
> -func (m *Simple) String() string            { return proto.CompactTextString(m) }
> -func (*Simple) ProtoMessage()               {}
> -func (*Simple) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} }
> -
> -func (m *Simple) GetOBool() bool {
> -	if m != nil && m.OBool != nil {
> -		return *m.OBool
> -	}
> -	return false
> -}
> -
> -func (m *Simple) GetOInt32() int32 {
> -	if m != nil && m.OInt32 != nil {
> -		return *m.OInt32
> -	}
> -	return 0
> -}
> -
> -func (m *Simple) GetOInt64() int64 {
> -	if m != nil && m.OInt64 != nil {
> -		return *m.OInt64
> -	}
> -	return 0
> -}
> -
> -func (m *Simple) GetOUint32() uint32 {
> -	if m != nil && m.OUint32 != nil {
> -		return *m.OUint32
> -	}
> -	return 0
> -}
> -
> -func (m *Simple) GetOUint64() uint64 {
> -	if m != nil && m.OUint64 != nil {
> -		return *m.OUint64
> -	}
> -	return 0
> -}
> -
> -func (m *Simple) GetOSint32() int32 {
> -	if m != nil && m.OSint32 != nil {
> -		return *m.OSint32
> -	}
> -	return 0
> -}
> -
> -func (m *Simple) GetOSint64() int64 {
> -	if m != nil && m.OSint64 != nil {
> -		return *m.OSint64
> -	}
> -	return 0
> -}
> -
> -func (m *Simple) GetOFloat() float32 {
> -	if m != nil && m.OFloat != nil {
> -		return *m.OFloat
> -	}
> -	return 0
> -}
> -
> -func (m *Simple) GetODouble() float64 {
> -	if m != nil && m.ODouble != nil {
> -		return *m.ODouble
> -	}
> -	return 0
> -}
> -
> -func (m *Simple) GetOString() string {
> -	if m != nil && m.OString != nil {
> -		return *m.OString
> -	}
> -	return ""
> -}
> -
> -func (m *Simple) GetOBytes() []byte {
> -	if m != nil {
> -		return m.OBytes
> -	}
> -	return nil
> -}
> -
> -// Test message for holding special non-finites primitives.
> -type NonFinites struct {
> -	FNan             *float32 `protobuf:"fixed32,1,opt,name=f_nan,json=fNan" json:"f_nan,omitempty"`
> -	FPinf            *float32 `protobuf:"fixed32,2,opt,name=f_pinf,json=fPinf" json:"f_pinf,omitempty"`
> -	FNinf            *float32 `protobuf:"fixed32,3,opt,name=f_ninf,json=fNinf" json:"f_ninf,omitempty"`
> -	DNan             *float64 `protobuf:"fixed64,4,opt,name=d_nan,json=dNan" json:"d_nan,omitempty"`
> -	DPinf            *float64 `protobuf:"fixed64,5,opt,name=d_pinf,json=dPinf" json:"d_pinf,omitempty"`
> -	DNinf            *float64 `protobuf:"fixed64,6,opt,name=d_ninf,json=dNinf" json:"d_ninf,omitempty"`
> -	XXX_unrecognized []byte   `json:"-"`
> -}
> -
> -func (m *NonFinites) Reset()                    { *m = NonFinites{} }
> -func (m *NonFinites) String() string            { return proto.CompactTextString(m) }
> -func (*NonFinites) ProtoMessage()               {}
> -func (*NonFinites) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} }
> -
> -func (m *NonFinites) GetFNan() float32 {
> -	if m != nil && m.FNan != nil {
> -		return *m.FNan
> -	}
> -	return 0
> -}
> -
> -func (m *NonFinites) GetFPinf() float32 {
> -	if m != nil && m.FPinf != nil {
> -		return *m.FPinf
> -	}
> -	return 0
> -}
> -
> -func (m *NonFinites) GetFNinf() float32 {
> -	if m != nil && m.FNinf != nil {
> -		return *m.FNinf
> -	}
> -	return 0
> -}
> -
> -func (m *NonFinites) GetDNan() float64 {
> -	if m != nil && m.DNan != nil {
> -		return *m.DNan
> -	}
> -	return 0
> -}
> -
> -func (m *NonFinites) GetDPinf() float64 {
> -	if m != nil && m.DPinf != nil {
> -		return *m.DPinf
> -	}
> -	return 0
> -}
> -
> -func (m *NonFinites) GetDNinf() float64 {
> -	if m != nil && m.DNinf != nil {
> -		return *m.DNinf
> -	}
> -	return 0
> -}
> -
> -// Test message for holding repeated primitives.
> -type Repeats struct {
> -	RBool            []bool    `protobuf:"varint,1,rep,name=r_bool,json=rBool" json:"r_bool,omitempty"`
> -	RInt32           []int32   `protobuf:"varint,2,rep,name=r_int32,json=rInt32" json:"r_int32,omitempty"`
> -	RInt64           []int64   `protobuf:"varint,3,rep,name=r_int64,json=rInt64" json:"r_int64,omitempty"`
> -	RUint32          []uint32  `protobuf:"varint,4,rep,name=r_uint32,json=rUint32" json:"r_uint32,omitempty"`
> -	RUint64          []uint64  `protobuf:"varint,5,rep,name=r_uint64,json=rUint64" json:"r_uint64,omitempty"`
> -	RSint32          []int32   `protobuf:"zigzag32,6,rep,name=r_sint32,json=rSint32" json:"r_sint32,omitempty"`
> -	RSint64          []int64   `protobuf:"zigzag64,7,rep,name=r_sint64,json=rSint64" json:"r_sint64,omitempty"`
> -	RFloat           []float32 `protobuf:"fixed32,8,rep,name=r_float,json=rFloat" json:"r_float,omitempty"`
> -	RDouble          []float64 `protobuf:"fixed64,9,rep,name=r_double,json=rDouble" json:"r_double,omitempty"`
> -	RString          []string  `protobuf:"bytes,10,rep,name=r_string,json=rString" json:"r_string,omitempty"`
> -	RBytes           [][]byte  `protobuf:"bytes,11,rep,name=r_bytes,json=rBytes" json:"r_bytes,omitempty"`
> -	XXX_unrecognized []byte    `json:"-"`
> -}
> -
> -func (m *Repeats) Reset()                    { *m = Repeats{} }
> -func (m *Repeats) String() string            { return proto.CompactTextString(m) }
> -func (*Repeats) ProtoMessage()               {}
> -func (*Repeats) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} }
> -
> -func (m *Repeats) GetRBool() []bool {
> -	if m != nil {
> -		return m.RBool
> -	}
> -	return nil
> -}
> -
> -func (m *Repeats) GetRInt32() []int32 {
> -	if m != nil {
> -		return m.RInt32
> -	}
> -	return nil
> -}
> -
> -func (m *Repeats) GetRInt64() []int64 {
> -	if m != nil {
> -		return m.RInt64
> -	}
> -	return nil
> -}
> -
> -func (m *Repeats) GetRUint32() []uint32 {
> -	if m != nil {
> -		return m.RUint32
> -	}
> -	return nil
> -}
> -
> -func (m *Repeats) GetRUint64() []uint64 {
> -	if m != nil {
> -		return m.RUint64
> -	}
> -	return nil
> -}
> -
> -func (m *Repeats) GetRSint32() []int32 {
> -	if m != nil {
> -		return m.RSint32
> -	}
> -	return nil
> -}
> -
> -func (m *Repeats) GetRSint64() []int64 {
> -	if m != nil {
> -		return m.RSint64
> -	}
> -	return nil
> -}
> -
> -func (m *Repeats) GetRFloat() []float32 {
> -	if m != nil {
> -		return m.RFloat
> -	}
> -	return nil
> -}
> -
> -func (m *Repeats) GetRDouble() []float64 {
> -	if m != nil {
> -		return m.RDouble
> -	}
> -	return nil
> -}
> -
> -func (m *Repeats) GetRString() []string {
> -	if m != nil {
> -		return m.RString
> -	}
> -	return nil
> -}
> -
> -func (m *Repeats) GetRBytes() [][]byte {
> -	if m != nil {
> -		return m.RBytes
> -	}
> -	return nil
> -}
> -
> -// Test message for holding enums and nested messages.
> -type Widget struct {
> -	Color            *Widget_Color  `protobuf:"varint,1,opt,name=color,enum=jsonpb.Widget_Color" json:"color,omitempty"`
> -	RColor           []Widget_Color `protobuf:"varint,2,rep,name=r_color,json=rColor,enum=jsonpb.Widget_Color" json:"r_color,omitempty"`
> -	Simple           *Simple        `protobuf:"bytes,10,opt,name=simple" json:"simple,omitempty"`
> -	RSimple          []*Simple      `protobuf:"bytes,11,rep,name=r_simple,json=rSimple" json:"r_simple,omitempty"`
> -	Repeats          *Repeats       `protobuf:"bytes,20,opt,name=repeats" json:"repeats,omitempty"`
> -	RRepeats         []*Repeats     `protobuf:"bytes,21,rep,name=r_repeats,json=rRepeats" json:"r_repeats,omitempty"`
> -	XXX_unrecognized []byte         `json:"-"`
> -}
> -
> -func (m *Widget) Reset()                    { *m = Widget{} }
> -func (m *Widget) String() string            { return proto.CompactTextString(m) }
> -func (*Widget) ProtoMessage()               {}
> -func (*Widget) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} }
> -
> -func (m *Widget) GetColor() Widget_Color {
> -	if m != nil && m.Color != nil {
> -		return *m.Color
> -	}
> -	return Widget_RED
> -}
> -
> -func (m *Widget) GetRColor() []Widget_Color {
> -	if m != nil {
> -		return m.RColor
> -	}
> -	return nil
> -}
> -
> -func (m *Widget) GetSimple() *Simple {
> -	if m != nil {
> -		return m.Simple
> -	}
> -	return nil
> -}
> -
> -func (m *Widget) GetRSimple() []*Simple {
> -	if m != nil {
> -		return m.RSimple
> -	}
> -	return nil
> -}
> -
> -func (m *Widget) GetRepeats() *Repeats {
> -	if m != nil {
> -		return m.Repeats
> -	}
> -	return nil
> -}
> -
> -func (m *Widget) GetRRepeats() []*Repeats {
> -	if m != nil {
> -		return m.RRepeats
> -	}
> -	return nil
> -}
> -
> -type Maps struct {
> -	MInt64Str        map[int64]string `protobuf:"bytes,1,rep,name=m_int64_str,json=mInt64Str" json:"m_int64_str,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	MBoolSimple      map[bool]*Simple `protobuf:"bytes,2,rep,name=m_bool_simple,json=mBoolSimple" json:"m_bool_simple,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	XXX_unrecognized []byte           `json:"-"`
> -}
> -
> -func (m *Maps) Reset()                    { *m = Maps{} }
> -func (m *Maps) String() string            { return proto.CompactTextString(m) }
> -func (*Maps) ProtoMessage()               {}
> -func (*Maps) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} }
> -
> -func (m *Maps) GetMInt64Str() map[int64]string {
> -	if m != nil {
> -		return m.MInt64Str
> -	}
> -	return nil
> -}
> -
> -func (m *Maps) GetMBoolSimple() map[bool]*Simple {
> -	if m != nil {
> -		return m.MBoolSimple
> -	}
> -	return nil
> -}
> -
> -type MsgWithOneof struct {
> -	// Types that are valid to be assigned to Union:
> -	//	*MsgWithOneof_Title
> -	//	*MsgWithOneof_Salary
> -	//	*MsgWithOneof_Country
> -	//	*MsgWithOneof_HomeAddress
> -	Union            isMsgWithOneof_Union `protobuf_oneof:"union"`
> -	XXX_unrecognized []byte               `json:"-"`
> -}
> -
> -func (m *MsgWithOneof) Reset()                    { *m = MsgWithOneof{} }
> -func (m *MsgWithOneof) String() string            { return proto.CompactTextString(m) }
> -func (*MsgWithOneof) ProtoMessage()               {}
> -func (*MsgWithOneof) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} }
> -
> -type isMsgWithOneof_Union interface {
> -	isMsgWithOneof_Union()
> -}
> -
> -type MsgWithOneof_Title struct {
> -	Title string `protobuf:"bytes,1,opt,name=title,oneof"`
> -}
> -type MsgWithOneof_Salary struct {
> -	Salary int64 `protobuf:"varint,2,opt,name=salary,oneof"`
> -}
> -type MsgWithOneof_Country struct {
> -	Country string `protobuf:"bytes,3,opt,name=Country,oneof"`
> -}
> -type MsgWithOneof_HomeAddress struct {
> -	HomeAddress string `protobuf:"bytes,4,opt,name=home_address,json=homeAddress,oneof"`
> -}
> -
> -func (*MsgWithOneof_Title) isMsgWithOneof_Union()       {}
> -func (*MsgWithOneof_Salary) isMsgWithOneof_Union()      {}
> -func (*MsgWithOneof_Country) isMsgWithOneof_Union()     {}
> -func (*MsgWithOneof_HomeAddress) isMsgWithOneof_Union() {}
> -
> -func (m *MsgWithOneof) GetUnion() isMsgWithOneof_Union {
> -	if m != nil {
> -		return m.Union
> -	}
> -	return nil
> -}
> -
> -func (m *MsgWithOneof) GetTitle() string {
> -	if x, ok := m.GetUnion().(*MsgWithOneof_Title); ok {
> -		return x.Title
> -	}
> -	return ""
> -}
> -
> -func (m *MsgWithOneof) GetSalary() int64 {
> -	if x, ok := m.GetUnion().(*MsgWithOneof_Salary); ok {
> -		return x.Salary
> -	}
> -	return 0
> -}
> -
> -func (m *MsgWithOneof) GetCountry() string {
> -	if x, ok := m.GetUnion().(*MsgWithOneof_Country); ok {
> -		return x.Country
> -	}
> -	return ""
> -}
> -
> -func (m *MsgWithOneof) GetHomeAddress() string {
> -	if x, ok := m.GetUnion().(*MsgWithOneof_HomeAddress); ok {
> -		return x.HomeAddress
> -	}
> -	return ""
> -}
> -
> -// XXX_OneofFuncs is for the internal use of the proto package.
> -func (*MsgWithOneof) 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 _MsgWithOneof_OneofMarshaler, _MsgWithOneof_OneofUnmarshaler, _MsgWithOneof_OneofSizer, []interface{}{
> -		(*MsgWithOneof_Title)(nil),
> -		(*MsgWithOneof_Salary)(nil),
> -		(*MsgWithOneof_Country)(nil),
> -		(*MsgWithOneof_HomeAddress)(nil),
> -	}
> -}
> -
> -func _MsgWithOneof_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
> -	m := msg.(*MsgWithOneof)
> -	// union
> -	switch x := m.Union.(type) {
> -	case *MsgWithOneof_Title:
> -		b.EncodeVarint(1<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.Title)
> -	case *MsgWithOneof_Salary:
> -		b.EncodeVarint(2<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.Salary))
> -	case *MsgWithOneof_Country:
> -		b.EncodeVarint(3<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.Country)
> -	case *MsgWithOneof_HomeAddress:
> -		b.EncodeVarint(4<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.HomeAddress)
> -	case nil:
> -	default:
> -		return fmt.Errorf("MsgWithOneof.Union has unexpected type %T", x)
> -	}
> -	return nil
> -}
> -
> -func _MsgWithOneof_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
> -	m := msg.(*MsgWithOneof)
> -	switch tag {
> -	case 1: // union.title
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Union = &MsgWithOneof_Title{x}
> -		return true, err
> -	case 2: // union.salary
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &MsgWithOneof_Salary{int64(x)}
> -		return true, err
> -	case 3: // union.Country
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Union = &MsgWithOneof_Country{x}
> -		return true, err
> -	case 4: // union.home_address
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Union = &MsgWithOneof_HomeAddress{x}
> -		return true, err
> -	default:
> -		return false, nil
> -	}
> -}
> -
> -func _MsgWithOneof_OneofSizer(msg proto.Message) (n int) {
> -	m := msg.(*MsgWithOneof)
> -	// union
> -	switch x := m.Union.(type) {
> -	case *MsgWithOneof_Title:
> -		n += proto.SizeVarint(1<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.Title)))
> -		n += len(x.Title)
> -	case *MsgWithOneof_Salary:
> -		n += proto.SizeVarint(2<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.Salary))
> -	case *MsgWithOneof_Country:
> -		n += proto.SizeVarint(3<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.Country)))
> -		n += len(x.Country)
> -	case *MsgWithOneof_HomeAddress:
> -		n += proto.SizeVarint(4<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.HomeAddress)))
> -		n += len(x.HomeAddress)
> -	case nil:
> -	default:
> -		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
> -	}
> -	return n
> -}
> -
> -type Real struct {
> -	Value                        *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *Real) Reset()                    { *m = Real{} }
> -func (m *Real) String() string            { return proto.CompactTextString(m) }
> -func (*Real) ProtoMessage()               {}
> -func (*Real) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} }
> -
> -var extRange_Real = []proto.ExtensionRange{
> -	{100, 536870911},
> -}
> -
> -func (*Real) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_Real
> -}
> -
> -func (m *Real) GetValue() float64 {
> -	if m != nil && m.Value != nil {
> -		return *m.Value
> -	}
> -	return 0
> -}
> -
> -type Complex struct {
> -	Imaginary                    *float64 `protobuf:"fixed64,1,opt,name=imaginary" json:"imaginary,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *Complex) Reset()                    { *m = Complex{} }
> -func (m *Complex) String() string            { return proto.CompactTextString(m) }
> -func (*Complex) ProtoMessage()               {}
> -func (*Complex) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} }
> -
> -var extRange_Complex = []proto.ExtensionRange{
> -	{100, 536870911},
> -}
> -
> -func (*Complex) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_Complex
> -}
> -
> -func (m *Complex) GetImaginary() float64 {
> -	if m != nil && m.Imaginary != nil {
> -		return *m.Imaginary
> -	}
> -	return 0
> -}
> -
> -var E_Complex_RealExtension = &proto.ExtensionDesc{
> -	ExtendedType:  (*Real)(nil),
> -	ExtensionType: (*Complex)(nil),
> -	Field:         123,
> -	Name:          "jsonpb.Complex.real_extension",
> -	Tag:           "bytes,123,opt,name=real_extension,json=realExtension",
> -	Filename:      "test_objects.proto",
> -}
> -
> -type KnownTypes struct {
> -	An               *google_protobuf.Any          `protobuf:"bytes,14,opt,name=an" json:"an,omitempty"`
> -	Dur              *google_protobuf1.Duration    `protobuf:"bytes,1,opt,name=dur" json:"dur,omitempty"`
> -	St               *google_protobuf2.Struct      `protobuf:"bytes,12,opt,name=st" json:"st,omitempty"`
> -	Ts               *google_protobuf3.Timestamp   `protobuf:"bytes,2,opt,name=ts" json:"ts,omitempty"`
> -	Lv               *google_protobuf2.ListValue   `protobuf:"bytes,15,opt,name=lv" json:"lv,omitempty"`
> -	Val              *google_protobuf2.Value       `protobuf:"bytes,16,opt,name=val" json:"val,omitempty"`
> -	Dbl              *google_protobuf4.DoubleValue `protobuf:"bytes,3,opt,name=dbl" json:"dbl,omitempty"`
> -	Flt              *google_protobuf4.FloatValue  `protobuf:"bytes,4,opt,name=flt" json:"flt,omitempty"`
> -	I64              *google_protobuf4.Int64Value  `protobuf:"bytes,5,opt,name=i64" json:"i64,omitempty"`
> -	U64              *google_protobuf4.UInt64Value `protobuf:"bytes,6,opt,name=u64" json:"u64,omitempty"`
> -	I32              *google_protobuf4.Int32Value  `protobuf:"bytes,7,opt,name=i32" json:"i32,omitempty"`
> -	U32              *google_protobuf4.UInt32Value `protobuf:"bytes,8,opt,name=u32" json:"u32,omitempty"`
> -	Bool             *google_protobuf4.BoolValue   `protobuf:"bytes,9,opt,name=bool" json:"bool,omitempty"`
> -	Str              *google_protobuf4.StringValue `protobuf:"bytes,10,opt,name=str" json:"str,omitempty"`
> -	Bytes            *google_protobuf4.BytesValue  `protobuf:"bytes,11,opt,name=bytes" json:"bytes,omitempty"`
> -	XXX_unrecognized []byte                        `json:"-"`
> -}
> -
> -func (m *KnownTypes) Reset()                    { *m = KnownTypes{} }
> -func (m *KnownTypes) String() string            { return proto.CompactTextString(m) }
> -func (*KnownTypes) ProtoMessage()               {}
> -func (*KnownTypes) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} }
> -
> -func (m *KnownTypes) GetAn() *google_protobuf.Any {
> -	if m != nil {
> -		return m.An
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetDur() *google_protobuf1.Duration {
> -	if m != nil {
> -		return m.Dur
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetSt() *google_protobuf2.Struct {
> -	if m != nil {
> -		return m.St
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetTs() *google_protobuf3.Timestamp {
> -	if m != nil {
> -		return m.Ts
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetLv() *google_protobuf2.ListValue {
> -	if m != nil {
> -		return m.Lv
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetVal() *google_protobuf2.Value {
> -	if m != nil {
> -		return m.Val
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetDbl() *google_protobuf4.DoubleValue {
> -	if m != nil {
> -		return m.Dbl
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetFlt() *google_protobuf4.FloatValue {
> -	if m != nil {
> -		return m.Flt
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetI64() *google_protobuf4.Int64Value {
> -	if m != nil {
> -		return m.I64
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetU64() *google_protobuf4.UInt64Value {
> -	if m != nil {
> -		return m.U64
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetI32() *google_protobuf4.Int32Value {
> -	if m != nil {
> -		return m.I32
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetU32() *google_protobuf4.UInt32Value {
> -	if m != nil {
> -		return m.U32
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetBool() *google_protobuf4.BoolValue {
> -	if m != nil {
> -		return m.Bool
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetStr() *google_protobuf4.StringValue {
> -	if m != nil {
> -		return m.Str
> -	}
> -	return nil
> -}
> -
> -func (m *KnownTypes) GetBytes() *google_protobuf4.BytesValue {
> -	if m != nil {
> -		return m.Bytes
> -	}
> -	return nil
> -}
> -
> -var E_Name = &proto.ExtensionDesc{
> -	ExtendedType:  (*Real)(nil),
> -	ExtensionType: (*string)(nil),
> -	Field:         124,
> -	Name:          "jsonpb.name",
> -	Tag:           "bytes,124,opt,name=name",
> -	Filename:      "test_objects.proto",
> -}
> -
> -func init() {
> -	proto.RegisterType((*Simple)(nil), "jsonpb.Simple")
> -	proto.RegisterType((*NonFinites)(nil), "jsonpb.NonFinites")
> -	proto.RegisterType((*Repeats)(nil), "jsonpb.Repeats")
> -	proto.RegisterType((*Widget)(nil), "jsonpb.Widget")
> -	proto.RegisterType((*Maps)(nil), "jsonpb.Maps")
> -	proto.RegisterType((*MsgWithOneof)(nil), "jsonpb.MsgWithOneof")
> -	proto.RegisterType((*Real)(nil), "jsonpb.Real")
> -	proto.RegisterType((*Complex)(nil), "jsonpb.Complex")
> -	proto.RegisterType((*KnownTypes)(nil), "jsonpb.KnownTypes")
> -	proto.RegisterEnum("jsonpb.Widget_Color", Widget_Color_name, Widget_Color_value)
> -	proto.RegisterExtension(E_Complex_RealExtension)
> -	proto.RegisterExtension(E_Name)
> -}
> -
> -func init() { proto.RegisterFile("test_objects.proto", fileDescriptor1) }
> -
> -var fileDescriptor1 = []byte{
> -	// 1160 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x95, 0x41, 0x73, 0xdb, 0x44,
> -	0x14, 0xc7, 0x23, 0xc9, 0x92, 0xed, 0x75, 0x92, 0x9a, 0x6d, 0xda, 0x2a, 0x26, 0x80, 0xc6, 0x94,
> -	0x22, 0x0a, 0x75, 0x07, 0xc7, 0xe3, 0x61, 0x0a, 0x97, 0xa4, 0x71, 0x29, 0x43, 0x13, 0x98, 0x4d,
> -	0x43, 0x8f, 0x1e, 0x39, 0x5a, 0xbb, 0x2a, 0xf2, 0xae, 0x67, 0x77, 0x95, 0xd4, 0x03, 0x87, 0x9c,
> -	0x39, 0x32, 0x7c, 0x05, 0xf8, 0x08, 0x1c, 0xf8, 0x74, 0xcc, 0xdb, 0x95, 0xac, 0xc4, 0x8e, 0x4f,
> -	0xf1, 0x7b, 0xef, 0xff, 0xfe, 0x59, 0xed, 0x6f, 0x77, 0x1f, 0xc2, 0x8a, 0x4a, 0x35, 0xe4, 0xa3,
> -	0x77, 0xf4, 0x5c, 0xc9, 0xce, 0x4c, 0x70, 0xc5, 0xb1, 0xf7, 0x4e, 0x72, 0x36, 0x1b, 0xb5, 0x76,
> -	0x27, 0x9c, 0x4f, 0x52, 0xfa, 0x54, 0x67, 0x47, 0xd9, 0xf8, 0x69, 0xc4, 0xe6, 0x46, 0xd2, 0xfa,
> -	0x78, 0xb9, 0x14, 0x67, 0x22, 0x52, 0x09, 0x67, 0x79, 0x7d, 0x6f, 0xb9, 0x2e, 0x95, 0xc8, 0xce,
> -	0x55, 0x5e, 0xfd, 0x64, 0xb9, 0xaa, 0x92, 0x29, 0x95, 0x2a, 0x9a, 0xce, 0xd6, 0xd9, 0x5f, 0x8a,
> -	0x68, 0x36, 0xa3, 0x22, 0x5f, 0x61, 0xfb, 0x6f, 0x1b, 0x79, 0xa7, 0xc9, 0x74, 0x96, 0x52, 0x7c,
> -	0x0f, 0x79, 0x7c, 0x38, 0xe2, 0x3c, 0xf5, 0xad, 0xc0, 0x0a, 0x6b, 0xc4, 0xe5, 0x87, 0x9c, 0xa7,
> -	0xf8, 0x01, 0xaa, 0xf2, 0x61, 0xc2, 0xd4, 0x7e, 0xd7, 0xb7, 0x03, 0x2b, 0x74, 0x89, 0xc7, 0x7f,
> -	0x80, 0x68, 0x51, 0xe8, 0xf7, 0x7c, 0x27, 0xb0, 0x42, 0xc7, 0x14, 0xfa, 0x3d, 0xbc, 0x8b, 0x6a,
> -	0x7c, 0x98, 0x99, 0x96, 0x4a, 0x60, 0x85, 0x5b, 0xa4, 0xca, 0xcf, 0x74, 0x58, 0x96, 0xfa, 0x3d,
> -	0xdf, 0x0d, 0xac, 0xb0, 0x92, 0x97, 0x8a, 0x2e, 0x69, 0xba, 0xbc, 0xc0, 0x0a, 0x3f, 0x20, 0x55,
> -	0x7e, 0x7a, 0xad, 0x4b, 0x9a, 0xae, 0x6a, 0x60, 0x85, 0x38, 0x2f, 0xf5, 0x7b, 0x66, 0x11, 0xe3,
> -	0x94, 0x47, 0xca, 0xaf, 0x05, 0x56, 0x68, 0x13, 0x8f, 0xbf, 0x80, 0xc8, 0xf4, 0xc4, 0x3c, 0x1b,
> -	0xa5, 0xd4, 0xaf, 0x07, 0x56, 0x68, 0x91, 0x2a, 0x3f, 0xd2, 0x61, 0x6e, 0xa7, 0x44, 0xc2, 0x26,
> -	0x3e, 0x0a, 0xac, 0xb0, 0x0e, 0x76, 0x3a, 0x34, 0x76, 0xa3, 0xb9, 0xa2, 0xd2, 0x6f, 0x04, 0x56,
> -	0xb8, 0x49, 0x3c, 0x7e, 0x08, 0x51, 0xfb, 0x4f, 0x0b, 0xa1, 0x13, 0xce, 0x5e, 0x24, 0x2c, 0x51,
> -	0x54, 0xe2, 0xbb, 0xc8, 0x1d, 0x0f, 0x59, 0xc4, 0xf4, 0x56, 0xd9, 0xa4, 0x32, 0x3e, 0x89, 0x18,
> -	0x6c, 0xe0, 0x78, 0x38, 0x4b, 0xd8, 0x58, 0x6f, 0x94, 0x4d, 0xdc, 0xf1, 0xcf, 0x09, 0x1b, 0x9b,
> -	0x34, 0x83, 0xb4, 0x93, 0xa7, 0x4f, 0x20, 0x7d, 0x17, 0xb9, 0xb1, 0xb6, 0xa8, 0xe8, 0xd5, 0x55,
> -	0xe2, 0xdc, 0x22, 0x36, 0x16, 0xae, 0xce, 0xba, 0x71, 0x61, 0x11, 0x1b, 0x0b, 0x2f, 0x4f, 0x83,
> -	0x45, 0xfb, 0x1f, 0x1b, 0x55, 0x09, 0x9d, 0xd1, 0x48, 0x49, 0x90, 0x88, 0x82, 0x9e, 0x03, 0xf4,
> -	0x44, 0x41, 0x4f, 0x2c, 0xe8, 0x39, 0x40, 0x4f, 0x2c, 0xe8, 0x89, 0x05, 0x3d, 0x07, 0xe8, 0x89,
> -	0x05, 0x3d, 0x51, 0xd2, 0x73, 0x80, 0x9e, 0x28, 0xe9, 0x89, 0x92, 0x9e, 0x03, 0xf4, 0x44, 0x49,
> -	0x4f, 0x94, 0xf4, 0x1c, 0xa0, 0x27, 0x4e, 0xaf, 0x75, 0x2d, 0xe8, 0x39, 0x40, 0x4f, 0x94, 0xf4,
> -	0xc4, 0x82, 0x9e, 0x03, 0xf4, 0xc4, 0x82, 0x9e, 0x28, 0xe9, 0x39, 0x40, 0x4f, 0x94, 0xf4, 0x44,
> -	0x49, 0xcf, 0x01, 0x7a, 0xa2, 0xa4, 0x27, 0x16, 0xf4, 0x1c, 0xa0, 0x27, 0x0c, 0xbd, 0x7f, 0x6d,
> -	0xe4, 0xbd, 0x49, 0xe2, 0x09, 0x55, 0xf8, 0x31, 0x72, 0xcf, 0x79, 0xca, 0x85, 0x26, 0xb7, 0xdd,
> -	0xdd, 0xe9, 0x98, 0x2b, 0xda, 0x31, 0xe5, 0xce, 0x73, 0xa8, 0x11, 0x23, 0xc1, 0x4f, 0xc0, 0xcf,
> -	0xa8, 0x61, 0xf3, 0xd6, 0xa9, 0x3d, 0xa1, 0xff, 0xe2, 0x47, 0xc8, 0x93, 0xfa, 0x2a, 0xe9, 0x53,
> -	0xd5, 0xe8, 0x6e, 0x17, 0x6a, 0x73, 0xc1, 0x48, 0x5e, 0xc5, 0x5f, 0x98, 0x0d, 0xd1, 0x4a, 0x58,
> -	0xe7, 0xaa, 0x12, 0x36, 0x28, 0x97, 0x56, 0x85, 0x01, 0xec, 0xef, 0x68, 0xcf, 0x3b, 0x85, 0x32,
> -	0xe7, 0x4e, 0x8a, 0x3a, 0xfe, 0x0a, 0xd5, 0xc5, 0xb0, 0x10, 0xdf, 0xd3, 0xb6, 0x2b, 0xe2, 0x9a,
> -	0xc8, 0x7f, 0xb5, 0x3f, 0x43, 0xae, 0x59, 0x74, 0x15, 0x39, 0x64, 0x70, 0xd4, 0xdc, 0xc0, 0x75,
> -	0xe4, 0x7e, 0x4f, 0x06, 0x83, 0x93, 0xa6, 0x85, 0x6b, 0xa8, 0x72, 0xf8, 0xea, 0x6c, 0xd0, 0xb4,
> -	0xdb, 0x7f, 0xd9, 0xa8, 0x72, 0x1c, 0xcd, 0x24, 0xfe, 0x16, 0x35, 0xa6, 0xe6, 0xb8, 0xc0, 0xde,
> -	0xeb, 0x33, 0xd6, 0xe8, 0x7e, 0x58, 0xf8, 0x83, 0xa4, 0x73, 0xac, 0xcf, 0xcf, 0xa9, 0x12, 0x03,
> -	0xa6, 0xc4, 0x9c, 0xd4, 0xa7, 0x45, 0x8c, 0x0f, 0xd0, 0xd6, 0x54, 0x9f, 0xcd, 0xe2, 0xab, 0x6d,
> -	0xdd, 0xfe, 0xd1, 0xcd, 0x76, 0x38, 0xaf, 0xe6, 0xb3, 0x8d, 0x41, 0x63, 0x5a, 0x66, 0x5a, 0xdf,
> -	0xa1, 0xed, 0x9b, 0xfe, 0xb8, 0x89, 0x9c, 0x5f, 0xe9, 0x5c, 0x63, 0x74, 0x08, 0xfc, 0xc4, 0x3b,
> -	0xc8, 0xbd, 0x88, 0xd2, 0x8c, 0xea, 0xeb, 0x57, 0x27, 0x26, 0x78, 0x66, 0x7f, 0x63, 0xb5, 0x4e,
> -	0x50, 0x73, 0xd9, 0xfe, 0x7a, 0x7f, 0xcd, 0xf4, 0x3f, 0xbc, 0xde, 0xbf, 0x0a, 0xa5, 0xf4, 0x6b,
> -	0xff, 0x61, 0xa1, 0xcd, 0x63, 0x39, 0x79, 0x93, 0xa8, 0xb7, 0x3f, 0x31, 0xca, 0xc7, 0xf8, 0x3e,
> -	0x72, 0x55, 0xa2, 0x52, 0xaa, 0xed, 0xea, 0x2f, 0x37, 0x88, 0x09, 0xb1, 0x8f, 0x3c, 0x19, 0xa5,
> -	0x91, 0x98, 0x6b, 0x4f, 0xe7, 0xe5, 0x06, 0xc9, 0x63, 0xdc, 0x42, 0xd5, 0xe7, 0x3c, 0x83, 0x95,
> -	0xe8, 0x67, 0x01, 0x7a, 0x8a, 0x04, 0xfe, 0x14, 0x6d, 0xbe, 0xe5, 0x53, 0x3a, 0x8c, 0xe2, 0x58,
> -	0x50, 0x29, 0xf5, 0x0b, 0x01, 0x82, 0x06, 0x64, 0x0f, 0x4c, 0xf2, 0xb0, 0x8a, 0xdc, 0x8c, 0x25,
> -	0x9c, 0xb5, 0x1f, 0xa1, 0x0a, 0xa1, 0x51, 0x5a, 0x7e, 0xbe, 0x65, 0xde, 0x08, 0x1d, 0x3c, 0xae,
> -	0xd5, 0xe2, 0xe6, 0xd5, 0xd5, 0xd5, 0x95, 0xdd, 0xbe, 0x84, 0xff, 0x08, 0x5f, 0xf2, 0x1e, 0xef,
> -	0xa1, 0x7a, 0x32, 0x8d, 0x26, 0x09, 0x83, 0x95, 0x19, 0x79, 0x99, 0x28, 0x5b, 0xba, 0x47, 0x68,
> -	0x5b, 0xd0, 0x28, 0x1d, 0xd2, 0xf7, 0x8a, 0x32, 0x99, 0x70, 0x86, 0x37, 0xcb, 0x23, 0x15, 0xa5,
> -	0xfe, 0x6f, 0x37, 0xcf, 0x64, 0x6e, 0x4f, 0xb6, 0xa0, 0x69, 0x50, 0xf4, 0xb4, 0xff, 0x73, 0x11,
> -	0xfa, 0x91, 0xf1, 0x4b, 0xf6, 0x7a, 0x3e, 0xa3, 0x12, 0x3f, 0x44, 0x76, 0xc4, 0xfc, 0x6d, 0xdd,
> -	0xba, 0xd3, 0x31, 0xf3, 0xa9, 0x53, 0xcc, 0xa7, 0xce, 0x01, 0x9b, 0x13, 0x3b, 0x62, 0xf8, 0x4b,
> -	0xe4, 0xc4, 0x99, 0xb9, 0xa5, 0x8d, 0xee, 0xee, 0x8a, 0xec, 0x28, 0x9f, 0x92, 0x04, 0x54, 0xf8,
> -	0x73, 0x64, 0x4b, 0xe5, 0x6f, 0x6a, 0xed, 0x83, 0x15, 0xed, 0xa9, 0x9e, 0x98, 0xc4, 0x96, 0x70,
> -	0xfb, 0x6d, 0x25, 0x73, 0xbe, 0xad, 0x15, 0xe1, 0xeb, 0x62, 0x78, 0x12, 0x5b, 0x49, 0xd0, 0xa6,
> -	0x17, 0xfe, 0x9d, 0x35, 0xda, 0x57, 0x89, 0x54, 0xbf, 0xc0, 0x0e, 0x13, 0x3b, 0xbd, 0xc0, 0x21,
> -	0x72, 0x2e, 0xa2, 0xd4, 0x6f, 0x6a, 0xf1, 0xfd, 0x15, 0xb1, 0x11, 0x82, 0x04, 0x77, 0x90, 0x13,
> -	0x8f, 0x52, 0xcd, 0xbc, 0xd1, 0xdd, 0x5b, 0xfd, 0x2e, 0xfd, 0xc8, 0xe5, 0xfa, 0x78, 0x94, 0xe2,
> -	0x27, 0xc8, 0x19, 0xa7, 0x4a, 0x1f, 0x01, 0xb8, 0x70, 0xcb, 0x7a, 0xfd, 0x5c, 0xe6, 0xf2, 0x71,
> -	0xaa, 0x40, 0x9e, 0xe4, 0xb3, 0xf5, 0x36, 0xb9, 0xbe, 0x42, 0xb9, 0x3c, 0xe9, 0xf7, 0x60, 0x35,
> -	0x59, 0xbf, 0xa7, 0xa7, 0xca, 0x6d, 0xab, 0x39, 0xbb, 0xae, 0xcf, 0xfa, 0x3d, 0x6d, 0xbf, 0xdf,
> -	0xd5, 0x43, 0x78, 0x8d, 0xfd, 0x7e, 0xb7, 0xb0, 0xdf, 0xef, 0x6a, 0xfb, 0xfd, 0xae, 0x9e, 0xcc,
> -	0xeb, 0xec, 0x17, 0xfa, 0x4c, 0xeb, 0x2b, 0x7a, 0x84, 0xd5, 0xd7, 0x6c, 0x3a, 0xdc, 0x61, 0x23,
> -	0xd7, 0x3a, 0xf0, 0x87, 0xd7, 0x08, 0xad, 0xf1, 0x37, 0x63, 0x21, 0xf7, 0x97, 0x4a, 0xe0, 0xaf,
> -	0x91, 0x5b, 0x0e, 0xf7, 0xdb, 0x3e, 0x40, 0x8f, 0x0b, 0xd3, 0x60, 0x94, 0xcf, 0x02, 0x54, 0x61,
> -	0xd1, 0x94, 0x2e, 0x1d, 0xfc, 0xdf, 0xf5, 0x0b, 0xa3, 0x2b, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff,
> -	0xd5, 0x39, 0x32, 0x09, 0xf9, 0x09, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto b/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto
> deleted file mode 100644
> index 0d2fc1fa..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto
> +++ /dev/null
> @@ -1,147 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2015 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -import "google/protobuf/any.proto";
> -import "google/protobuf/duration.proto";
> -import "google/protobuf/struct.proto";
> -import "google/protobuf/timestamp.proto";
> -import "google/protobuf/wrappers.proto";
> -
> -package jsonpb;
> -
> -// Test message for holding primitive types.
> -message Simple {
> -  optional bool o_bool = 1;
> -  optional int32 o_int32 = 2;
> -  optional int64 o_int64 = 3;
> -  optional uint32 o_uint32 = 4;
> -  optional uint64 o_uint64 = 5;
> -  optional sint32 o_sint32 = 6;
> -  optional sint64 o_sint64 = 7;
> -  optional float o_float = 8;
> -  optional double o_double = 9;
> -  optional string o_string = 10;
> -  optional bytes o_bytes = 11;
> -}
> -
> -// Test message for holding special non-finites primitives.
> -message NonFinites {
> -    optional float f_nan = 1;
> -    optional float f_pinf = 2;
> -    optional float f_ninf = 3;
> -    optional double d_nan = 4;
> -    optional double d_pinf = 5;
> -    optional double d_ninf = 6;
> -}
> -
> -// Test message for holding repeated primitives.
> -message Repeats {
> -  repeated bool r_bool = 1;
> -  repeated int32 r_int32 = 2;
> -  repeated int64 r_int64 = 3;
> -  repeated uint32 r_uint32 = 4;
> -  repeated uint64 r_uint64 = 5;
> -  repeated sint32 r_sint32 = 6;
> -  repeated sint64 r_sint64 = 7;
> -  repeated float r_float = 8;
> -  repeated double r_double = 9;
> -  repeated string r_string = 10;
> -  repeated bytes r_bytes = 11;
> -}
> -
> -// Test message for holding enums and nested messages.
> -message Widget {
> -  enum Color {
> -    RED = 0;
> -    GREEN = 1;
> -    BLUE = 2;
> -  };
> -  optional Color color = 1;
> -  repeated Color r_color = 2;
> -
> -  optional Simple simple = 10;
> -  repeated Simple r_simple = 11;
> -
> -  optional Repeats repeats = 20;
> -  repeated Repeats r_repeats = 21;
> -}
> -
> -message Maps {
> -  map<int64, string> m_int64_str = 1;
> -  map<bool, Simple> m_bool_simple = 2;
> -}
> -
> -message MsgWithOneof {
> -  oneof union {
> -    string title = 1;
> -    int64 salary = 2;
> -    string Country = 3;
> -    string home_address = 4;
> -  }
> -}
> -
> -message Real {
> -  optional double value = 1;
> -  extensions 100 to max;
> -}
> -
> -extend Real {
> -  optional string name = 124;
> -}
> -
> -message Complex {
> -  extend Real {
> -    optional Complex real_extension = 123;
> -  }
> -  optional double imaginary = 1;
> -  extensions 100 to max;
> -}
> -
> -message KnownTypes {
> -  optional google.protobuf.Any an = 14;
> -  optional google.protobuf.Duration dur = 1;
> -  optional google.protobuf.Struct st = 12;
> -  optional google.protobuf.Timestamp ts = 2;
> -  optional google.protobuf.ListValue lv = 15;
> -  optional google.protobuf.Value val = 16;
> -
> -  optional google.protobuf.DoubleValue dbl = 3;
> -  optional google.protobuf.FloatValue flt = 4;
> -  optional google.protobuf.Int64Value i64 = 5;
> -  optional google.protobuf.UInt64Value u64 = 6;
> -  optional google.protobuf.Int32Value i32 = 7;
> -  optional google.protobuf.UInt32Value u32 = 8;
> -  optional google.protobuf.BoolValue bool = 9;
> -  optional google.protobuf.StringValue str = 10;
> -  optional google.protobuf.BytesValue bytes = 11;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/Makefile b/phaul/src/test/vendor/github.com/golang/protobuf/proto/Makefile
> deleted file mode 100644
> index e2e0651a..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/Makefile
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2010 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -install:
> -	go install
> -
> -test: install generate-test-pbs
> -	go test
> -
> -
> -generate-test-pbs:
> -	make install
> -	make -C testdata
> -	protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata,Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any:. proto3_proto/proto3.proto
> -	make
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/all_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/all_test.go
> deleted file mode 100644
> index 41451a40..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/all_test.go
> +++ /dev/null
> @@ -1,2278 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto_test
> -
> -import (
> -	"bytes"
> -	"encoding/json"
> -	"errors"
> -	"fmt"
> -	"math"
> -	"math/rand"
> -	"reflect"
> -	"runtime/debug"
> -	"strings"
> -	"testing"
> -	"time"
> -
> -	. "github.com/golang/protobuf/proto"
> -	. "github.com/golang/protobuf/proto/testdata"
> -)
> -
> -var globalO *Buffer
> -
> -func old() *Buffer {
> -	if globalO == nil {
> -		globalO = NewBuffer(nil)
> -	}
> -	globalO.Reset()
> -	return globalO
> -}
> -
> -func equalbytes(b1, b2 []byte, t *testing.T) {
> -	if len(b1) != len(b2) {
> -		t.Errorf("wrong lengths: 2*%d != %d", len(b1), len(b2))
> -		return
> -	}
> -	for i := 0; i < len(b1); i++ {
> -		if b1[i] != b2[i] {
> -			t.Errorf("bad byte[%d]:%x %x: %s %s", i, b1[i], b2[i], b1, b2)
> -		}
> -	}
> -}
> -
> -func initGoTestField() *GoTestField {
> -	f := new(GoTestField)
> -	f.Label = String("label")
> -	f.Type = String("type")
> -	return f
> -}
> -
> -// These are all structurally equivalent but the tag numbers differ.
> -// (It's remarkable that required, optional, and repeated all have
> -// 8 letters.)
> -func initGoTest_RequiredGroup() *GoTest_RequiredGroup {
> -	return &GoTest_RequiredGroup{
> -		RequiredField: String("required"),
> -	}
> -}
> -
> -func initGoTest_OptionalGroup() *GoTest_OptionalGroup {
> -	return &GoTest_OptionalGroup{
> -		RequiredField: String("optional"),
> -	}
> -}
> -
> -func initGoTest_RepeatedGroup() *GoTest_RepeatedGroup {
> -	return &GoTest_RepeatedGroup{
> -		RequiredField: String("repeated"),
> -	}
> -}
> -
> -func initGoTest(setdefaults bool) *GoTest {
> -	pb := new(GoTest)
> -	if setdefaults {
> -		pb.F_BoolDefaulted = Bool(Default_GoTest_F_BoolDefaulted)
> -		pb.F_Int32Defaulted = Int32(Default_GoTest_F_Int32Defaulted)
> -		pb.F_Int64Defaulted = Int64(Default_GoTest_F_Int64Defaulted)
> -		pb.F_Fixed32Defaulted = Uint32(Default_GoTest_F_Fixed32Defaulted)
> -		pb.F_Fixed64Defaulted = Uint64(Default_GoTest_F_Fixed64Defaulted)
> -		pb.F_Uint32Defaulted = Uint32(Default_GoTest_F_Uint32Defaulted)
> -		pb.F_Uint64Defaulted = Uint64(Default_GoTest_F_Uint64Defaulted)
> -		pb.F_FloatDefaulted = Float32(Default_GoTest_F_FloatDefaulted)
> -		pb.F_DoubleDefaulted = Float64(Default_GoTest_F_DoubleDefaulted)
> -		pb.F_StringDefaulted = String(Default_GoTest_F_StringDefaulted)
> -		pb.F_BytesDefaulted = Default_GoTest_F_BytesDefaulted
> -		pb.F_Sint32Defaulted = Int32(Default_GoTest_F_Sint32Defaulted)
> -		pb.F_Sint64Defaulted = Int64(Default_GoTest_F_Sint64Defaulted)
> -	}
> -
> -	pb.Kind = GoTest_TIME.Enum()
> -	pb.RequiredField = initGoTestField()
> -	pb.F_BoolRequired = Bool(true)
> -	pb.F_Int32Required = Int32(3)
> -	pb.F_Int64Required = Int64(6)
> -	pb.F_Fixed32Required = Uint32(32)
> -	pb.F_Fixed64Required = Uint64(64)
> -	pb.F_Uint32Required = Uint32(3232)
> -	pb.F_Uint64Required = Uint64(6464)
> -	pb.F_FloatRequired = Float32(3232)
> -	pb.F_DoubleRequired = Float64(6464)
> -	pb.F_StringRequired = String("string")
> -	pb.F_BytesRequired = []byte("bytes")
> -	pb.F_Sint32Required = Int32(-32)
> -	pb.F_Sint64Required = Int64(-64)
> -	pb.Requiredgroup = initGoTest_RequiredGroup()
> -
> -	return pb
> -}
> -
> -func fail(msg string, b *bytes.Buffer, s string, t *testing.T) {
> -	data := b.Bytes()
> -	ld := len(data)
> -	ls := len(s) / 2
> -
> -	fmt.Printf("fail %s ld=%d ls=%d\n", msg, ld, ls)
> -
> -	// find the interesting spot - n
> -	n := ls
> -	if ld < ls {
> -		n = ld
> -	}
> -	j := 0
> -	for i := 0; i < n; i++ {
> -		bs := hex(s[j])*16 + hex(s[j+1])
> -		j += 2
> -		if data[i] == bs {
> -			continue
> -		}
> -		n = i
> -		break
> -	}
> -	l := n - 10
> -	if l < 0 {
> -		l = 0
> -	}
> -	h := n + 10
> -
> -	// find the interesting spot - n
> -	fmt.Printf("is[%d]:", l)
> -	for i := l; i < h; i++ {
> -		if i >= ld {
> -			fmt.Printf(" --")
> -			continue
> -		}
> -		fmt.Printf(" %.2x", data[i])
> -	}
> -	fmt.Printf("\n")
> -
> -	fmt.Printf("sb[%d]:", l)
> -	for i := l; i < h; i++ {
> -		if i >= ls {
> -			fmt.Printf(" --")
> -			continue
> -		}
> -		bs := hex(s[j])*16 + hex(s[j+1])
> -		j += 2
> -		fmt.Printf(" %.2x", bs)
> -	}
> -	fmt.Printf("\n")
> -
> -	t.Fail()
> -
> -	//	t.Errorf("%s: \ngood: %s\nbad: %x", msg, s, b.Bytes())
> -	// Print the output in a partially-decoded format; can
> -	// be helpful when updating the test.  It produces the output
> -	// that is pasted, with minor edits, into the argument to verify().
> -	//	data := b.Bytes()
> -	//	nesting := 0
> -	//	for b.Len() > 0 {
> -	//		start := len(data) - b.Len()
> -	//		var u uint64
> -	//		u, err := DecodeVarint(b)
> -	//		if err != nil {
> -	//			fmt.Printf("decode error on varint:", err)
> -	//			return
> -	//		}
> -	//		wire := u & 0x7
> -	//		tag := u >> 3
> -	//		switch wire {
> -	//		case WireVarint:
> -	//			v, err := DecodeVarint(b)
> -	//			if err != nil {
> -	//				fmt.Printf("decode error on varint:", err)
> -	//				return
> -	//			}
> -	//			fmt.Printf("\t\t\"%x\"  // field %d, encoding %d, value %d\n",
> -	//				data[start:len(data)-b.Len()], tag, wire, v)
> -	//		case WireFixed32:
> -	//			v, err := DecodeFixed32(b)
> -	//			if err != nil {
> -	//				fmt.Printf("decode error on fixed32:", err)
> -	//				return
> -	//			}
> -	//			fmt.Printf("\t\t\"%x\"  // field %d, encoding %d, value %d\n",
> -	//				data[start:len(data)-b.Len()], tag, wire, v)
> -	//		case WireFixed64:
> -	//			v, err := DecodeFixed64(b)
> -	//			if err != nil {
> -	//				fmt.Printf("decode error on fixed64:", err)
> -	//				return
> -	//			}
> -	//			fmt.Printf("\t\t\"%x\"  // field %d, encoding %d, value %d\n",
> -	//				data[start:len(data)-b.Len()], tag, wire, v)
> -	//		case WireBytes:
> -	//			nb, err := DecodeVarint(b)
> -	//			if err != nil {
> -	//				fmt.Printf("decode error on bytes:", err)
> -	//				return
> -	//			}
> -	//			after_tag := len(data) - b.Len()
> -	//			str := make([]byte, nb)
> -	//			_, err = b.Read(str)
> -	//			if err != nil {
> -	//				fmt.Printf("decode error on bytes:", err)
> -	//				return
> -	//			}
> -	//			fmt.Printf("\t\t\"%x\" \"%x\"  // field %d, encoding %d (FIELD)\n",
> -	//				data[start:after_tag], str, tag, wire)
> -	//		case WireStartGroup:
> -	//			nesting++
> -	//			fmt.Printf("\t\t\"%x\"\t\t// start group field %d level %d\n",
> -	//				data[start:len(data)-b.Len()], tag, nesting)
> -	//		case WireEndGroup:
> -	//			fmt.Printf("\t\t\"%x\"\t\t// end group field %d level %d\n",
> -	//				data[start:len(data)-b.Len()], tag, nesting)
> -	//			nesting--
> -	//		default:
> -	//			fmt.Printf("unrecognized wire type %d\n", wire)
> -	//			return
> -	//		}
> -	//	}
> -}
> -
> -func hex(c uint8) uint8 {
> -	if '0' <= c && c <= '9' {
> -		return c - '0'
> -	}
> -	if 'a' <= c && c <= 'f' {
> -		return 10 + c - 'a'
> -	}
> -	if 'A' <= c && c <= 'F' {
> -		return 10 + c - 'A'
> -	}
> -	return 0
> -}
> -
> -func equal(b []byte, s string, t *testing.T) bool {
> -	if 2*len(b) != len(s) {
> -		//		fail(fmt.Sprintf("wrong lengths: 2*%d != %d", len(b), len(s)), b, s, t)
> -		fmt.Printf("wrong lengths: 2*%d != %d\n", len(b), len(s))
> -		return false
> -	}
> -	for i, j := 0, 0; i < len(b); i, j = i+1, j+2 {
> -		x := hex(s[j])*16 + hex(s[j+1])
> -		if b[i] != x {
> -			//			fail(fmt.Sprintf("bad byte[%d]:%x %x", i, b[i], x), b, s, t)
> -			fmt.Printf("bad byte[%d]:%x %x", i, b[i], x)
> -			return false
> -		}
> -	}
> -	return true
> -}
> -
> -func overify(t *testing.T, pb *GoTest, expected string) {
> -	o := old()
> -	err := o.Marshal(pb)
> -	if err != nil {
> -		fmt.Printf("overify marshal-1 err = %v", err)
> -		o.DebugPrint("", o.Bytes())
> -		t.Fatalf("expected = %s", expected)
> -	}
> -	if !equal(o.Bytes(), expected, t) {
> -		o.DebugPrint("overify neq 1", o.Bytes())
> -		t.Fatalf("expected = %s", expected)
> -	}
> -
> -	// Now test Unmarshal by recreating the original buffer.
> -	pbd := new(GoTest)
> -	err = o.Unmarshal(pbd)
> -	if err != nil {
> -		t.Fatalf("overify unmarshal err = %v", err)
> -		o.DebugPrint("", o.Bytes())
> -		t.Fatalf("string = %s", expected)
> -	}
> -	o.Reset()
> -	err = o.Marshal(pbd)
> -	if err != nil {
> -		t.Errorf("overify marshal-2 err = %v", err)
> -		o.DebugPrint("", o.Bytes())
> -		t.Fatalf("string = %s", expected)
> -	}
> -	if !equal(o.Bytes(), expected, t) {
> -		o.DebugPrint("overify neq 2", o.Bytes())
> -		t.Fatalf("string = %s", expected)
> -	}
> -}
> -
> -// Simple tests for numeric encode/decode primitives (varint, etc.)
> -func TestNumericPrimitives(t *testing.T) {
> -	for i := uint64(0); i < 1e6; i += 111 {
> -		o := old()
> -		if o.EncodeVarint(i) != nil {
> -			t.Error("EncodeVarint")
> -			break
> -		}
> -		x, e := o.DecodeVarint()
> -		if e != nil {
> -			t.Fatal("DecodeVarint")
> -		}
> -		if x != i {
> -			t.Fatal("varint decode fail:", i, x)
> -		}
> -
> -		o = old()
> -		if o.EncodeFixed32(i) != nil {
> -			t.Fatal("encFixed32")
> -		}
> -		x, e = o.DecodeFixed32()
> -		if e != nil {
> -			t.Fatal("decFixed32")
> -		}
> -		if x != i {
> -			t.Fatal("fixed32 decode fail:", i, x)
> -		}
> -
> -		o = old()
> -		if o.EncodeFixed64(i*1234567) != nil {
> -			t.Error("encFixed64")
> -			break
> -		}
> -		x, e = o.DecodeFixed64()
> -		if e != nil {
> -			t.Error("decFixed64")
> -			break
> -		}
> -		if x != i*1234567 {
> -			t.Error("fixed64 decode fail:", i*1234567, x)
> -			break
> -		}
> -
> -		o = old()
> -		i32 := int32(i - 12345)
> -		if o.EncodeZigzag32(uint64(i32)) != nil {
> -			t.Fatal("EncodeZigzag32")
> -		}
> -		x, e = o.DecodeZigzag32()
> -		if e != nil {
> -			t.Fatal("DecodeZigzag32")
> -		}
> -		if x != uint64(uint32(i32)) {
> -			t.Fatal("zigzag32 decode fail:", i32, x)
> -		}
> -
> -		o = old()
> -		i64 := int64(i - 12345)
> -		if o.EncodeZigzag64(uint64(i64)) != nil {
> -			t.Fatal("EncodeZigzag64")
> -		}
> -		x, e = o.DecodeZigzag64()
> -		if e != nil {
> -			t.Fatal("DecodeZigzag64")
> -		}
> -		if x != uint64(i64) {
> -			t.Fatal("zigzag64 decode fail:", i64, x)
> -		}
> -	}
> -}
> -
> -// fakeMarshaler is a simple struct implementing Marshaler and Message interfaces.
> -type fakeMarshaler struct {
> -	b   []byte
> -	err error
> -}
> -
> -func (f *fakeMarshaler) Marshal() ([]byte, error) { return f.b, f.err }
> -func (f *fakeMarshaler) String() string           { return fmt.Sprintf("Bytes: %v Error: %v", f.b, f.err) }
> -func (f *fakeMarshaler) ProtoMessage()            {}
> -func (f *fakeMarshaler) Reset()                   {}
> -
> -type msgWithFakeMarshaler struct {
> -	M *fakeMarshaler `protobuf:"bytes,1,opt,name=fake"`
> -}
> -
> -func (m *msgWithFakeMarshaler) String() string { return CompactTextString(m) }
> -func (m *msgWithFakeMarshaler) ProtoMessage()  {}
> -func (m *msgWithFakeMarshaler) Reset()         {}
> -
> -// Simple tests for proto messages that implement the Marshaler interface.
> -func TestMarshalerEncoding(t *testing.T) {
> -	tests := []struct {
> -		name    string
> -		m       Message
> -		want    []byte
> -		errType reflect.Type
> -	}{
> -		{
> -			name: "Marshaler that fails",
> -			m: &fakeMarshaler{
> -				err: errors.New("some marshal err"),
> -				b:   []byte{5, 6, 7},
> -			},
> -			// Since the Marshal method returned bytes, they should be written to the
> -			// buffer.  (For efficiency, we assume that Marshal implementations are
> -			// always correct w.r.t. RequiredNotSetError and output.)
> -			want:    []byte{5, 6, 7},
> -			errType: reflect.TypeOf(errors.New("some marshal err")),
> -		},
> -		{
> -			name: "Marshaler that fails with RequiredNotSetError",
> -			m: &msgWithFakeMarshaler{
> -				M: &fakeMarshaler{
> -					err: &RequiredNotSetError{},
> -					b:   []byte{5, 6, 7},
> -				},
> -			},
> -			// Since there's an error that can be continued after,
> -			// the buffer should be written.
> -			want: []byte{
> -				10, 3, // for &msgWithFakeMarshaler
> -				5, 6, 7, // for &fakeMarshaler
> -			},
> -			errType: reflect.TypeOf(&RequiredNotSetError{}),
> -		},
> -		{
> -			name: "Marshaler that succeeds",
> -			m: &fakeMarshaler{
> -				b: []byte{0, 1, 2, 3, 4, 127, 255},
> -			},
> -			want: []byte{0, 1, 2, 3, 4, 127, 255},
> -		},
> -	}
> -	for _, test := range tests {
> -		b := NewBuffer(nil)
> -		err := b.Marshal(test.m)
> -		if reflect.TypeOf(err) != test.errType {
> -			t.Errorf("%s: got err %T(%v) wanted %T", test.name, err, err, test.errType)
> -		}
> -		if !reflect.DeepEqual(test.want, b.Bytes()) {
> -			t.Errorf("%s: got bytes %v wanted %v", test.name, b.Bytes(), test.want)
> -		}
> -		if size := Size(test.m); size != len(b.Bytes()) {
> -			t.Errorf("%s: Size(_) = %v, but marshaled to %v bytes", test.name, size, len(b.Bytes()))
> -		}
> -
> -		m, mErr := Marshal(test.m)
> -		if !bytes.Equal(b.Bytes(), m) {
> -			t.Errorf("%s: Marshal returned %v, but (*Buffer).Marshal wrote %v", test.name, m, b.Bytes())
> -		}
> -		if !reflect.DeepEqual(err, mErr) {
> -			t.Errorf("%s: Marshal err = %q, but (*Buffer).Marshal returned %q",
> -				test.name, fmt.Sprint(mErr), fmt.Sprint(err))
> -		}
> -	}
> -}
> -
> -// Simple tests for bytes
> -func TestBytesPrimitives(t *testing.T) {
> -	o := old()
> -	bytes := []byte{'n', 'o', 'w', ' ', 'i', 's', ' ', 't', 'h', 'e', ' ', 't', 'i', 'm', 'e'}
> -	if o.EncodeRawBytes(bytes) != nil {
> -		t.Error("EncodeRawBytes")
> -	}
> -	decb, e := o.DecodeRawBytes(false)
> -	if e != nil {
> -		t.Error("DecodeRawBytes")
> -	}
> -	equalbytes(bytes, decb, t)
> -}
> -
> -// Simple tests for strings
> -func TestStringPrimitives(t *testing.T) {
> -	o := old()
> -	s := "now is the time"
> -	if o.EncodeStringBytes(s) != nil {
> -		t.Error("enc_string")
> -	}
> -	decs, e := o.DecodeStringBytes()
> -	if e != nil {
> -		t.Error("dec_string")
> -	}
> -	if s != decs {
> -		t.Error("string encode/decode fail:", s, decs)
> -	}
> -}
> -
> -// Do we catch the "required bit not set" case?
> -func TestRequiredBit(t *testing.T) {
> -	o := old()
> -	pb := new(GoTest)
> -	err := o.Marshal(pb)
> -	if err == nil {
> -		t.Error("did not catch missing required fields")
> -	} else if strings.Index(err.Error(), "Kind") < 0 {
> -		t.Error("wrong error type:", err)
> -	}
> -}
> -
> -// Check that all fields are nil.
> -// Clearly silly, and a residue from a more interesting test with an earlier,
> -// different initialization property, but it once caught a compiler bug so
> -// it lives.
> -func checkInitialized(pb *GoTest, t *testing.T) {
> -	if pb.F_BoolDefaulted != nil {
> -		t.Error("New or Reset did not set boolean:", *pb.F_BoolDefaulted)
> -	}
> -	if pb.F_Int32Defaulted != nil {
> -		t.Error("New or Reset did not set int32:", *pb.F_Int32Defaulted)
> -	}
> -	if pb.F_Int64Defaulted != nil {
> -		t.Error("New or Reset did not set int64:", *pb.F_Int64Defaulted)
> -	}
> -	if pb.F_Fixed32Defaulted != nil {
> -		t.Error("New or Reset did not set fixed32:", *pb.F_Fixed32Defaulted)
> -	}
> -	if pb.F_Fixed64Defaulted != nil {
> -		t.Error("New or Reset did not set fixed64:", *pb.F_Fixed64Defaulted)
> -	}
> -	if pb.F_Uint32Defaulted != nil {
> -		t.Error("New or Reset did not set uint32:", *pb.F_Uint32Defaulted)
> -	}
> -	if pb.F_Uint64Defaulted != nil {
> -		t.Error("New or Reset did not set uint64:", *pb.F_Uint64Defaulted)
> -	}
> -	if pb.F_FloatDefaulted != nil {
> -		t.Error("New or Reset did not set float:", *pb.F_FloatDefaulted)
> -	}
> -	if pb.F_DoubleDefaulted != nil {
> -		t.Error("New or Reset did not set double:", *pb.F_DoubleDefaulted)
> -	}
> -	if pb.F_StringDefaulted != nil {
> -		t.Error("New or Reset did not set string:", *pb.F_StringDefaulted)
> -	}
> -	if pb.F_BytesDefaulted != nil {
> -		t.Error("New or Reset did not set bytes:", string(pb.F_BytesDefaulted))
> -	}
> -	if pb.F_Sint32Defaulted != nil {
> -		t.Error("New or Reset did not set int32:", *pb.F_Sint32Defaulted)
> -	}
> -	if pb.F_Sint64Defaulted != nil {
> -		t.Error("New or Reset did not set int64:", *pb.F_Sint64Defaulted)
> -	}
> -}
> -
> -// Does Reset() reset?
> -func TestReset(t *testing.T) {
> -	pb := initGoTest(true)
> -	// muck with some values
> -	pb.F_BoolDefaulted = Bool(false)
> -	pb.F_Int32Defaulted = Int32(237)
> -	pb.F_Int64Defaulted = Int64(12346)
> -	pb.F_Fixed32Defaulted = Uint32(32000)
> -	pb.F_Fixed64Defaulted = Uint64(666)
> -	pb.F_Uint32Defaulted = Uint32(323232)
> -	pb.F_Uint64Defaulted = nil
> -	pb.F_FloatDefaulted = nil
> -	pb.F_DoubleDefaulted = Float64(0)
> -	pb.F_StringDefaulted = String("gotcha")
> -	pb.F_BytesDefaulted = []byte("asdfasdf")
> -	pb.F_Sint32Defaulted = Int32(123)
> -	pb.F_Sint64Defaulted = Int64(789)
> -	pb.Reset()
> -	checkInitialized(pb, t)
> -}
> -
> -// All required fields set, no defaults provided.
> -func TestEncodeDecode1(t *testing.T) {
> -	pb := initGoTest(false)
> -	overify(t, pb,
> -		"0807"+ // field 1, encoding 0, value 7
> -			"220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField)
> -			"5001"+ // field 10, encoding 0, value 1
> -			"5803"+ // field 11, encoding 0, value 3
> -			"6006"+ // field 12, encoding 0, value 6
> -			"6d20000000"+ // field 13, encoding 5, value 0x20
> -			"714000000000000000"+ // field 14, encoding 1, value 0x40
> -			"78a019"+ // field 15, encoding 0, value 0xca0 = 3232
> -			"8001c032"+ // field 16, encoding 0, value 0x1940 = 6464
> -			"8d0100004a45"+ // field 17, encoding 5, value 3232.0
> -			"9101000000000040b940"+ // field 18, encoding 1, value 6464.0
> -			"9a0106"+"737472696e67"+ // field 19, encoding 2, string "string"
> -			"b304"+ // field 70, encoding 3, start group
> -			"ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required"
> -			"b404"+ // field 70, encoding 4, end group
> -			"aa0605"+"6279746573"+ // field 101, encoding 2, string "bytes"
> -			"b0063f"+ // field 102, encoding 0, 0x3f zigzag32
> -			"b8067f") // field 103, encoding 0, 0x7f zigzag64
> -}
> -
> -// All required fields set, defaults provided.
> -func TestEncodeDecode2(t *testing.T) {
> -	pb := initGoTest(true)
> -	overify(t, pb,
> -		"0807"+ // field 1, encoding 0, value 7
> -			"220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField)
> -			"5001"+ // field 10, encoding 0, value 1
> -			"5803"+ // field 11, encoding 0, value 3
> -			"6006"+ // field 12, encoding 0, value 6
> -			"6d20000000"+ // field 13, encoding 5, value 32
> -			"714000000000000000"+ // field 14, encoding 1, value 64
> -			"78a019"+ // field 15, encoding 0, value 3232
> -			"8001c032"+ // field 16, encoding 0, value 6464
> -			"8d0100004a45"+ // field 17, encoding 5, value 3232.0
> -			"9101000000000040b940"+ // field 18, encoding 1, value 6464.0
> -			"9a0106"+"737472696e67"+ // field 19, encoding 2 string "string"
> -			"c00201"+ // field 40, encoding 0, value 1
> -			"c80220"+ // field 41, encoding 0, value 32
> -			"d00240"+ // field 42, encoding 0, value 64
> -			"dd0240010000"+ // field 43, encoding 5, value 320
> -			"e1028002000000000000"+ // field 44, encoding 1, value 640
> -			"e8028019"+ // field 45, encoding 0, value 3200
> -			"f0028032"+ // field 46, encoding 0, value 6400
> -			"fd02e0659948"+ // field 47, encoding 5, value 314159.0
> -			"81030000000050971041"+ // field 48, encoding 1, value 271828.0
> -			"8a0310"+"68656c6c6f2c2022776f726c6421220a"+ // field 49, encoding 2 string "hello, \"world!\"\n"
> -			"b304"+ // start group field 70 level 1
> -			"ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required"
> -			"b404"+ // end group field 70 level 1
> -			"aa0605"+"6279746573"+ // field 101, encoding 2 string "bytes"
> -			"b0063f"+ // field 102, encoding 0, 0x3f zigzag32
> -			"b8067f"+ // field 103, encoding 0, 0x7f zigzag64
> -			"8a1907"+"4269676e6f7365"+ // field 401, encoding 2, string "Bignose"
> -			"90193f"+ // field 402, encoding 0, value 63
> -			"98197f") // field 403, encoding 0, value 127
> -
> -}
> -
> -// All default fields set to their default value by hand
> -func TestEncodeDecode3(t *testing.T) {
> -	pb := initGoTest(false)
> -	pb.F_BoolDefaulted = Bool(true)
> -	pb.F_Int32Defaulted = Int32(32)
> -	pb.F_Int64Defaulted = Int64(64)
> -	pb.F_Fixed32Defaulted = Uint32(320)
> -	pb.F_Fixed64Defaulted = Uint64(640)
> -	pb.F_Uint32Defaulted = Uint32(3200)
> -	pb.F_Uint64Defaulted = Uint64(6400)
> -	pb.F_FloatDefaulted = Float32(314159)
> -	pb.F_DoubleDefaulted = Float64(271828)
> -	pb.F_StringDefaulted = String("hello, \"world!\"\n")
> -	pb.F_BytesDefaulted = []byte("Bignose")
> -	pb.F_Sint32Defaulted = Int32(-32)
> -	pb.F_Sint64Defaulted = Int64(-64)
> -
> -	overify(t, pb,
> -		"0807"+ // field 1, encoding 0, value 7
> -			"220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField)
> -			"5001"+ // field 10, encoding 0, value 1
> -			"5803"+ // field 11, encoding 0, value 3
> -			"6006"+ // field 12, encoding 0, value 6
> -			"6d20000000"+ // field 13, encoding 5, value 32
> -			"714000000000000000"+ // field 14, encoding 1, value 64
> -			"78a019"+ // field 15, encoding 0, value 3232
> -			"8001c032"+ // field 16, encoding 0, value 6464
> -			"8d0100004a45"+ // field 17, encoding 5, value 3232.0
> -			"9101000000000040b940"+ // field 18, encoding 1, value 6464.0
> -			"9a0106"+"737472696e67"+ // field 19, encoding 2 string "string"
> -			"c00201"+ // field 40, encoding 0, value 1
> -			"c80220"+ // field 41, encoding 0, value 32
> -			"d00240"+ // field 42, encoding 0, value 64
> -			"dd0240010000"+ // field 43, encoding 5, value 320
> -			"e1028002000000000000"+ // field 44, encoding 1, value 640
> -			"e8028019"+ // field 45, encoding 0, value 3200
> -			"f0028032"+ // field 46, encoding 0, value 6400
> -			"fd02e0659948"+ // field 47, encoding 5, value 314159.0
> -			"81030000000050971041"+ // field 48, encoding 1, value 271828.0
> -			"8a0310"+"68656c6c6f2c2022776f726c6421220a"+ // field 49, encoding 2 string "hello, \"world!\"\n"
> -			"b304"+ // start group field 70 level 1
> -			"ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required"
> -			"b404"+ // end group field 70 level 1
> -			"aa0605"+"6279746573"+ // field 101, encoding 2 string "bytes"
> -			"b0063f"+ // field 102, encoding 0, 0x3f zigzag32
> -			"b8067f"+ // field 103, encoding 0, 0x7f zigzag64
> -			"8a1907"+"4269676e6f7365"+ // field 401, encoding 2, string "Bignose"
> -			"90193f"+ // field 402, encoding 0, value 63
> -			"98197f") // field 403, encoding 0, value 127
> -
> -}
> -
> -// All required fields set, defaults provided, all non-defaulted optional fields have values.
> -func TestEncodeDecode4(t *testing.T) {
> -	pb := initGoTest(true)
> -	pb.Table = String("hello")
> -	pb.Param = Int32(7)
> -	pb.OptionalField = initGoTestField()
> -	pb.F_BoolOptional = Bool(true)
> -	pb.F_Int32Optional = Int32(32)
> -	pb.F_Int64Optional = Int64(64)
> -	pb.F_Fixed32Optional = Uint32(3232)
> -	pb.F_Fixed64Optional = Uint64(6464)
> -	pb.F_Uint32Optional = Uint32(323232)
> -	pb.F_Uint64Optional = Uint64(646464)
> -	pb.F_FloatOptional = Float32(32.)
> -	pb.F_DoubleOptional = Float64(64.)
> -	pb.F_StringOptional = String("hello")
> -	pb.F_BytesOptional = []byte("Bignose")
> -	pb.F_Sint32Optional = Int32(-32)
> -	pb.F_Sint64Optional = Int64(-64)
> -	pb.Optionalgroup = initGoTest_OptionalGroup()
> -
> -	overify(t, pb,
> -		"0807"+ // field 1, encoding 0, value 7
> -			"1205"+"68656c6c6f"+ // field 2, encoding 2, string "hello"
> -			"1807"+ // field 3, encoding 0, value 7
> -			"220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField)
> -			"320d"+"0a056c6162656c120474797065"+ // field 6, encoding 2 (GoTestField)
> -			"5001"+ // field 10, encoding 0, value 1
> -			"5803"+ // field 11, encoding 0, value 3
> -			"6006"+ // field 12, encoding 0, value 6
> -			"6d20000000"+ // field 13, encoding 5, value 32
> -			"714000000000000000"+ // field 14, encoding 1, value 64
> -			"78a019"+ // field 15, encoding 0, value 3232
> -			"8001c032"+ // field 16, encoding 0, value 6464
> -			"8d0100004a45"+ // field 17, encoding 5, value 3232.0
> -			"9101000000000040b940"+ // field 18, encoding 1, value 6464.0
> -			"9a0106"+"737472696e67"+ // field 19, encoding 2 string "string"
> -			"f00101"+ // field 30, encoding 0, value 1
> -			"f80120"+ // field 31, encoding 0, value 32
> -			"800240"+ // field 32, encoding 0, value 64
> -			"8d02a00c0000"+ // field 33, encoding 5, value 3232
> -			"91024019000000000000"+ // field 34, encoding 1, value 6464
> -			"9802a0dd13"+ // field 35, encoding 0, value 323232
> -			"a002c0ba27"+ // field 36, encoding 0, value 646464
> -			"ad0200000042"+ // field 37, encoding 5, value 32.0
> -			"b1020000000000005040"+ // field 38, encoding 1, value 64.0
> -			"ba0205"+"68656c6c6f"+ // field 39, encoding 2, string "hello"
> -			"c00201"+ // field 40, encoding 0, value 1
> -			"c80220"+ // field 41, encoding 0, value 32
> -			"d00240"+ // field 42, encoding 0, value 64
> -			"dd0240010000"+ // field 43, encoding 5, value 320
> -			"e1028002000000000000"+ // field 44, encoding 1, value 640
> -			"e8028019"+ // field 45, encoding 0, value 3200
> -			"f0028032"+ // field 46, encoding 0, value 6400
> -			"fd02e0659948"+ // field 47, encoding 5, value 314159.0
> -			"81030000000050971041"+ // field 48, encoding 1, value 271828.0
> -			"8a0310"+"68656c6c6f2c2022776f726c6421220a"+ // field 49, encoding 2 string "hello, \"world!\"\n"
> -			"b304"+ // start group field 70 level 1
> -			"ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required"
> -			"b404"+ // end group field 70 level 1
> -			"d305"+ // start group field 90 level 1
> -			"da0508"+"6f7074696f6e616c"+ // field 91, encoding 2, string "optional"
> -			"d405"+ // end group field 90 level 1
> -			"aa0605"+"6279746573"+ // field 101, encoding 2 string "bytes"
> -			"b0063f"+ // field 102, encoding 0, 0x3f zigzag32
> -			"b8067f"+ // field 103, encoding 0, 0x7f zigzag64
> -			"ea1207"+"4269676e6f7365"+ // field 301, encoding 2, string "Bignose"
> -			"f0123f"+ // field 302, encoding 0, value 63
> -			"f8127f"+ // field 303, encoding 0, value 127
> -			"8a1907"+"4269676e6f7365"+ // field 401, encoding 2, string "Bignose"
> -			"90193f"+ // field 402, encoding 0, value 63
> -			"98197f") // field 403, encoding 0, value 127
> -
> -}
> -
> -// All required fields set, defaults provided, all repeated fields given two values.
> -func TestEncodeDecode5(t *testing.T) {
> -	pb := initGoTest(true)
> -	pb.RepeatedField = []*GoTestField{initGoTestField(), initGoTestField()}
> -	pb.F_BoolRepeated = []bool{false, true}
> -	pb.F_Int32Repeated = []int32{32, 33}
> -	pb.F_Int64Repeated = []int64{64, 65}
> -	pb.F_Fixed32Repeated = []uint32{3232, 3333}
> -	pb.F_Fixed64Repeated = []uint64{6464, 6565}
> -	pb.F_Uint32Repeated = []uint32{323232, 333333}
> -	pb.F_Uint64Repeated = []uint64{646464, 656565}
> -	pb.F_FloatRepeated = []float32{32., 33.}
> -	pb.F_DoubleRepeated = []float64{64., 65.}
> -	pb.F_StringRepeated = []string{"hello", "sailor"}
> -	pb.F_BytesRepeated = [][]byte{[]byte("big"), []byte("nose")}
> -	pb.F_Sint32Repeated = []int32{32, -32}
> -	pb.F_Sint64Repeated = []int64{64, -64}
> -	pb.Repeatedgroup = []*GoTest_RepeatedGroup{initGoTest_RepeatedGroup(), initGoTest_RepeatedGroup()}
> -
> -	overify(t, pb,
> -		"0807"+ // field 1, encoding 0, value 7
> -			"220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField)
> -			"2a0d"+"0a056c6162656c120474797065"+ // field 5, encoding 2 (GoTestField)
> -			"2a0d"+"0a056c6162656c120474797065"+ // field 5, encoding 2 (GoTestField)
> -			"5001"+ // field 10, encoding 0, value 1
> -			"5803"+ // field 11, encoding 0, value 3
> -			"6006"+ // field 12, encoding 0, value 6
> -			"6d20000000"+ // field 13, encoding 5, value 32
> -			"714000000000000000"+ // field 14, encoding 1, value 64
> -			"78a019"+ // field 15, encoding 0, value 3232
> -			"8001c032"+ // field 16, encoding 0, value 6464
> -			"8d0100004a45"+ // field 17, encoding 5, value 3232.0
> -			"9101000000000040b940"+ // field 18, encoding 1, value 6464.0
> -			"9a0106"+"737472696e67"+ // field 19, encoding 2 string "string"
> -			"a00100"+ // field 20, encoding 0, value 0
> -			"a00101"+ // field 20, encoding 0, value 1
> -			"a80120"+ // field 21, encoding 0, value 32
> -			"a80121"+ // field 21, encoding 0, value 33
> -			"b00140"+ // field 22, encoding 0, value 64
> -			"b00141"+ // field 22, encoding 0, value 65
> -			"bd01a00c0000"+ // field 23, encoding 5, value 3232
> -			"bd01050d0000"+ // field 23, encoding 5, value 3333
> -			"c1014019000000000000"+ // field 24, encoding 1, value 6464
> -			"c101a519000000000000"+ // field 24, encoding 1, value 6565
> -			"c801a0dd13"+ // field 25, encoding 0, value 323232
> -			"c80195ac14"+ // field 25, encoding 0, value 333333
> -			"d001c0ba27"+ // field 26, encoding 0, value 646464
> -			"d001b58928"+ // field 26, encoding 0, value 656565
> -			"dd0100000042"+ // field 27, encoding 5, value 32.0
> -			"dd0100000442"+ // field 27, encoding 5, value 33.0
> -			"e1010000000000005040"+ // field 28, encoding 1, value 64.0
> -			"e1010000000000405040"+ // field 28, encoding 1, value 65.0
> -			"ea0105"+"68656c6c6f"+ // field 29, encoding 2, string "hello"
> -			"ea0106"+"7361696c6f72"+ // field 29, encoding 2, string "sailor"
> -			"c00201"+ // field 40, encoding 0, value 1
> -			"c80220"+ // field 41, encoding 0, value 32
> -			"d00240"+ // field 42, encoding 0, value 64
> -			"dd0240010000"+ // field 43, encoding 5, value 320
> -			"e1028002000000000000"+ // field 44, encoding 1, value 640
> -			"e8028019"+ // field 45, encoding 0, value 3200
> -			"f0028032"+ // field 46, encoding 0, value 6400
> -			"fd02e0659948"+ // field 47, encoding 5, value 314159.0
> -			"81030000000050971041"+ // field 48, encoding 1, value 271828.0
> -			"8a0310"+"68656c6c6f2c2022776f726c6421220a"+ // field 49, encoding 2 string "hello, \"world!\"\n"
> -			"b304"+ // start group field 70 level 1
> -			"ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required"
> -			"b404"+ // end group field 70 level 1
> -			"8305"+ // start group field 80 level 1
> -			"8a0508"+"7265706561746564"+ // field 81, encoding 2, string "repeated"
> -			"8405"+ // end group field 80 level 1
> -			"8305"+ // start group field 80 level 1
> -			"8a0508"+"7265706561746564"+ // field 81, encoding 2, string "repeated"
> -			"8405"+ // end group field 80 level 1
> -			"aa0605"+"6279746573"+ // field 101, encoding 2 string "bytes"
> -			"b0063f"+ // field 102, encoding 0, 0x3f zigzag32
> -			"b8067f"+ // field 103, encoding 0, 0x7f zigzag64
> -			"ca0c03"+"626967"+ // field 201, encoding 2, string "big"
> -			"ca0c04"+"6e6f7365"+ // field 201, encoding 2, string "nose"
> -			"d00c40"+ // field 202, encoding 0, value 32
> -			"d00c3f"+ // field 202, encoding 0, value -32
> -			"d80c8001"+ // field 203, encoding 0, value 64
> -			"d80c7f"+ // field 203, encoding 0, value -64
> -			"8a1907"+"4269676e6f7365"+ // field 401, encoding 2, string "Bignose"
> -			"90193f"+ // field 402, encoding 0, value 63
> -			"98197f") // field 403, encoding 0, value 127
> -
> -}
> -
> -// All required fields set, all packed repeated fields given two values.
> -func TestEncodeDecode6(t *testing.T) {
> -	pb := initGoTest(false)
> -	pb.F_BoolRepeatedPacked = []bool{false, true}
> -	pb.F_Int32RepeatedPacked = []int32{32, 33}
> -	pb.F_Int64RepeatedPacked = []int64{64, 65}
> -	pb.F_Fixed32RepeatedPacked = []uint32{3232, 3333}
> -	pb.F_Fixed64RepeatedPacked = []uint64{6464, 6565}
> -	pb.F_Uint32RepeatedPacked = []uint32{323232, 333333}
> -	pb.F_Uint64RepeatedPacked = []uint64{646464, 656565}
> -	pb.F_FloatRepeatedPacked = []float32{32., 33.}
> -	pb.F_DoubleRepeatedPacked = []float64{64., 65.}
> -	pb.F_Sint32RepeatedPacked = []int32{32, -32}
> -	pb.F_Sint64RepeatedPacked = []int64{64, -64}
> -
> -	overify(t, pb,
> -		"0807"+ // field 1, encoding 0, value 7
> -			"220d"+"0a056c6162656c120474797065"+ // field 4, encoding 2 (GoTestField)
> -			"5001"+ // field 10, encoding 0, value 1
> -			"5803"+ // field 11, encoding 0, value 3
> -			"6006"+ // field 12, encoding 0, value 6
> -			"6d20000000"+ // field 13, encoding 5, value 32
> -			"714000000000000000"+ // field 14, encoding 1, value 64
> -			"78a019"+ // field 15, encoding 0, value 3232
> -			"8001c032"+ // field 16, encoding 0, value 6464
> -			"8d0100004a45"+ // field 17, encoding 5, value 3232.0
> -			"9101000000000040b940"+ // field 18, encoding 1, value 6464.0
> -			"9a0106"+"737472696e67"+ // field 19, encoding 2 string "string"
> -			"9203020001"+ // field 50, encoding 2, 2 bytes, value 0, value 1
> -			"9a03022021"+ // field 51, encoding 2, 2 bytes, value 32, value 33
> -			"a203024041"+ // field 52, encoding 2, 2 bytes, value 64, value 65
> -			"aa0308"+ // field 53, encoding 2, 8 bytes
> -			"a00c0000050d0000"+ // value 3232, value 3333
> -			"b20310"+ // field 54, encoding 2, 16 bytes
> -			"4019000000000000a519000000000000"+ // value 6464, value 6565
> -			"ba0306"+ // field 55, encoding 2, 6 bytes
> -			"a0dd1395ac14"+ // value 323232, value 333333
> -			"c20306"+ // field 56, encoding 2, 6 bytes
> -			"c0ba27b58928"+ // value 646464, value 656565
> -			"ca0308"+ // field 57, encoding 2, 8 bytes
> -			"0000004200000442"+ // value 32.0, value 33.0
> -			"d20310"+ // field 58, encoding 2, 16 bytes
> -			"00000000000050400000000000405040"+ // value 64.0, value 65.0
> -			"b304"+ // start group field 70 level 1
> -			"ba0408"+"7265717569726564"+ // field 71, encoding 2, string "required"
> -			"b404"+ // end group field 70 level 1
> -			"aa0605"+"6279746573"+ // field 101, encoding 2 string "bytes"
> -			"b0063f"+ // field 102, encoding 0, 0x3f zigzag32
> -			"b8067f"+ // field 103, encoding 0, 0x7f zigzag64
> -			"b21f02"+ // field 502, encoding 2, 2 bytes
> -			"403f"+ // value 32, value -32
> -			"ba1f03"+ // field 503, encoding 2, 3 bytes
> -			"80017f") // value 64, value -64
> -}
> -
> -// Test that we can encode empty bytes fields.
> -func TestEncodeDecodeBytes1(t *testing.T) {
> -	pb := initGoTest(false)
> -
> -	// Create our bytes
> -	pb.F_BytesRequired = []byte{}
> -	pb.F_BytesRepeated = [][]byte{{}}
> -	pb.F_BytesOptional = []byte{}
> -
> -	d, err := Marshal(pb)
> -	if err != nil {
> -		t.Error(err)
> -	}
> -
> -	pbd := new(GoTest)
> -	if err := Unmarshal(d, pbd); err != nil {
> -		t.Error(err)
> -	}
> -
> -	if pbd.F_BytesRequired == nil || len(pbd.F_BytesRequired) != 0 {
> -		t.Error("required empty bytes field is incorrect")
> -	}
> -	if pbd.F_BytesRepeated == nil || len(pbd.F_BytesRepeated) == 1 && pbd.F_BytesRepeated[0] == nil {
> -		t.Error("repeated empty bytes field is incorrect")
> -	}
> -	if pbd.F_BytesOptional == nil || len(pbd.F_BytesOptional) != 0 {
> -		t.Error("optional empty bytes field is incorrect")
> -	}
> -}
> -
> -// Test that we encode nil-valued fields of a repeated bytes field correctly.
> -// Since entries in a repeated field cannot be nil, nil must mean empty value.
> -func TestEncodeDecodeBytes2(t *testing.T) {
> -	pb := initGoTest(false)
> -
> -	// Create our bytes
> -	pb.F_BytesRepeated = [][]byte{nil}
> -
> -	d, err := Marshal(pb)
> -	if err != nil {
> -		t.Error(err)
> -	}
> -
> -	pbd := new(GoTest)
> -	if err := Unmarshal(d, pbd); err != nil {
> -		t.Error(err)
> -	}
> -
> -	if len(pbd.F_BytesRepeated) != 1 || pbd.F_BytesRepeated[0] == nil {
> -		t.Error("Unexpected value for repeated bytes field")
> -	}
> -}
> -
> -// All required fields set, defaults provided, all repeated fields given two values.
> -func TestSkippingUnrecognizedFields(t *testing.T) {
> -	o := old()
> -	pb := initGoTestField()
> -
> -	// Marshal it normally.
> -	o.Marshal(pb)
> -
> -	// Now new a GoSkipTest record.
> -	skip := &GoSkipTest{
> -		SkipInt32:   Int32(32),
> -		SkipFixed32: Uint32(3232),
> -		SkipFixed64: Uint64(6464),
> -		SkipString:  String("skipper"),
> -		Skipgroup: &GoSkipTest_SkipGroup{
> -			GroupInt32:  Int32(75),
> -			GroupString: String("wxyz"),
> -		},
> -	}
> -
> -	// Marshal it into same buffer.
> -	o.Marshal(skip)
> -
> -	pbd := new(GoTestField)
> -	o.Unmarshal(pbd)
> -
> -	// The __unrecognized field should be a marshaling of GoSkipTest
> -	skipd := new(GoSkipTest)
> -
> -	o.SetBuf(pbd.XXX_unrecognized)
> -	o.Unmarshal(skipd)
> -
> -	if *skipd.SkipInt32 != *skip.SkipInt32 {
> -		t.Error("skip int32", skipd.SkipInt32)
> -	}
> -	if *skipd.SkipFixed32 != *skip.SkipFixed32 {
> -		t.Error("skip fixed32", skipd.SkipFixed32)
> -	}
> -	if *skipd.SkipFixed64 != *skip.SkipFixed64 {
> -		t.Error("skip fixed64", skipd.SkipFixed64)
> -	}
> -	if *skipd.SkipString != *skip.SkipString {
> -		t.Error("skip string", *skipd.SkipString)
> -	}
> -	if *skipd.Skipgroup.GroupInt32 != *skip.Skipgroup.GroupInt32 {
> -		t.Error("skip group int32", skipd.Skipgroup.GroupInt32)
> -	}
> -	if *skipd.Skipgroup.GroupString != *skip.Skipgroup.GroupString {
> -		t.Error("skip group string", *skipd.Skipgroup.GroupString)
> -	}
> -}
> -
> -// Check that unrecognized fields of a submessage are preserved.
> -func TestSubmessageUnrecognizedFields(t *testing.T) {
> -	nm := &NewMessage{
> -		Nested: &NewMessage_Nested{
> -			Name:      String("Nigel"),
> -			FoodGroup: String("carbs"),
> -		},
> -	}
> -	b, err := Marshal(nm)
> -	if err != nil {
> -		t.Fatalf("Marshal of NewMessage: %v", err)
> -	}
> -
> -	// Unmarshal into an OldMessage.
> -	om := new(OldMessage)
> -	if err := Unmarshal(b, om); err != nil {
> -		t.Fatalf("Unmarshal to OldMessage: %v", err)
> -	}
> -	exp := &OldMessage{
> -		Nested: &OldMessage_Nested{
> -			Name: String("Nigel"),
> -			// normal protocol buffer users should not do this
> -			XXX_unrecognized: []byte("\x12\x05carbs"),
> -		},
> -	}
> -	if !Equal(om, exp) {
> -		t.Errorf("om = %v, want %v", om, exp)
> -	}
> -
> -	// Clone the OldMessage.
> -	om = Clone(om).(*OldMessage)
> -	if !Equal(om, exp) {
> -		t.Errorf("Clone(om) = %v, want %v", om, exp)
> -	}
> -
> -	// Marshal the OldMessage, then unmarshal it into an empty NewMessage.
> -	if b, err = Marshal(om); err != nil {
> -		t.Fatalf("Marshal of OldMessage: %v", err)
> -	}
> -	t.Logf("Marshal(%v) -> %q", om, b)
> -	nm2 := new(NewMessage)
> -	if err := Unmarshal(b, nm2); err != nil {
> -		t.Fatalf("Unmarshal to NewMessage: %v", err)
> -	}
> -	if !Equal(nm, nm2) {
> -		t.Errorf("NewMessage round-trip: %v => %v", nm, nm2)
> -	}
> -}
> -
> -// Check that an int32 field can be upgraded to an int64 field.
> -func TestNegativeInt32(t *testing.T) {
> -	om := &OldMessage{
> -		Num: Int32(-1),
> -	}
> -	b, err := Marshal(om)
> -	if err != nil {
> -		t.Fatalf("Marshal of OldMessage: %v", err)
> -	}
> -
> -	// Check the size. It should be 11 bytes;
> -	// 1 for the field/wire type, and 10 for the negative number.
> -	if len(b) != 11 {
> -		t.Errorf("%v marshaled as %q, wanted 11 bytes", om, b)
> -	}
> -
> -	// Unmarshal into a NewMessage.
> -	nm := new(NewMessage)
> -	if err := Unmarshal(b, nm); err != nil {
> -		t.Fatalf("Unmarshal to NewMessage: %v", err)
> -	}
> -	want := &NewMessage{
> -		Num: Int64(-1),
> -	}
> -	if !Equal(nm, want) {
> -		t.Errorf("nm = %v, want %v", nm, want)
> -	}
> -}
> -
> -// Check that we can grow an array (repeated field) to have many elements.
> -// This test doesn't depend only on our encoding; for variety, it makes sure
> -// we create, encode, and decode the correct contents explicitly.  It's therefore
> -// a bit messier.
> -// This test also uses (and hence tests) the Marshal/Unmarshal functions
> -// instead of the methods.
> -func TestBigRepeated(t *testing.T) {
> -	pb := initGoTest(true)
> -
> -	// Create the arrays
> -	const N = 50 // Internally the library starts much smaller.
> -	pb.Repeatedgroup = make([]*GoTest_RepeatedGroup, N)
> -	pb.F_Sint64Repeated = make([]int64, N)
> -	pb.F_Sint32Repeated = make([]int32, N)
> -	pb.F_BytesRepeated = make([][]byte, N)
> -	pb.F_StringRepeated = make([]string, N)
> -	pb.F_DoubleRepeated = make([]float64, N)
> -	pb.F_FloatRepeated = make([]float32, N)
> -	pb.F_Uint64Repeated = make([]uint64, N)
> -	pb.F_Uint32Repeated = make([]uint32, N)
> -	pb.F_Fixed64Repeated = make([]uint64, N)
> -	pb.F_Fixed32Repeated = make([]uint32, N)
> -	pb.F_Int64Repeated = make([]int64, N)
> -	pb.F_Int32Repeated = make([]int32, N)
> -	pb.F_BoolRepeated = make([]bool, N)
> -	pb.RepeatedField = make([]*GoTestField, N)
> -
> -	// Fill in the arrays with checkable values.
> -	igtf := initGoTestField()
> -	igtrg := initGoTest_RepeatedGroup()
> -	for i := 0; i < N; i++ {
> -		pb.Repeatedgroup[i] = igtrg
> -		pb.F_Sint64Repeated[i] = int64(i)
> -		pb.F_Sint32Repeated[i] = int32(i)
> -		s := fmt.Sprint(i)
> -		pb.F_BytesRepeated[i] = []byte(s)
> -		pb.F_StringRepeated[i] = s
> -		pb.F_DoubleRepeated[i] = float64(i)
> -		pb.F_FloatRepeated[i] = float32(i)
> -		pb.F_Uint64Repeated[i] = uint64(i)
> -		pb.F_Uint32Repeated[i] = uint32(i)
> -		pb.F_Fixed64Repeated[i] = uint64(i)
> -		pb.F_Fixed32Repeated[i] = uint32(i)
> -		pb.F_Int64Repeated[i] = int64(i)
> -		pb.F_Int32Repeated[i] = int32(i)
> -		pb.F_BoolRepeated[i] = i%2 == 0
> -		pb.RepeatedField[i] = igtf
> -	}
> -
> -	// Marshal.
> -	buf, _ := Marshal(pb)
> -
> -	// Now test Unmarshal by recreating the original buffer.
> -	pbd := new(GoTest)
> -	Unmarshal(buf, pbd)
> -
> -	// Check the checkable values
> -	for i := uint64(0); i < N; i++ {
> -		if pbd.Repeatedgroup[i] == nil { // TODO: more checking?
> -			t.Error("pbd.Repeatedgroup bad")
> -		}
> -		var x uint64
> -		x = uint64(pbd.F_Sint64Repeated[i])
> -		if x != i {
> -			t.Error("pbd.F_Sint64Repeated bad", x, i)
> -		}
> -		x = uint64(pbd.F_Sint32Repeated[i])
> -		if x != i {
> -			t.Error("pbd.F_Sint32Repeated bad", x, i)
> -		}
> -		s := fmt.Sprint(i)
> -		equalbytes(pbd.F_BytesRepeated[i], []byte(s), t)
> -		if pbd.F_StringRepeated[i] != s {
> -			t.Error("pbd.F_Sint32Repeated bad", pbd.F_StringRepeated[i], i)
> -		}
> -		x = uint64(pbd.F_DoubleRepeated[i])
> -		if x != i {
> -			t.Error("pbd.F_DoubleRepeated bad", x, i)
> -		}
> -		x = uint64(pbd.F_FloatRepeated[i])
> -		if x != i {
> -			t.Error("pbd.F_FloatRepeated bad", x, i)
> -		}
> -		x = pbd.F_Uint64Repeated[i]
> -		if x != i {
> -			t.Error("pbd.F_Uint64Repeated bad", x, i)
> -		}
> -		x = uint64(pbd.F_Uint32Repeated[i])
> -		if x != i {
> -			t.Error("pbd.F_Uint32Repeated bad", x, i)
> -		}
> -		x = pbd.F_Fixed64Repeated[i]
> -		if x != i {
> -			t.Error("pbd.F_Fixed64Repeated bad", x, i)
> -		}
> -		x = uint64(pbd.F_Fixed32Repeated[i])
> -		if x != i {
> -			t.Error("pbd.F_Fixed32Repeated bad", x, i)
> -		}
> -		x = uint64(pbd.F_Int64Repeated[i])
> -		if x != i {
> -			t.Error("pbd.F_Int64Repeated bad", x, i)
> -		}
> -		x = uint64(pbd.F_Int32Repeated[i])
> -		if x != i {
> -			t.Error("pbd.F_Int32Repeated bad", x, i)
> -		}
> -		if pbd.F_BoolRepeated[i] != (i%2 == 0) {
> -			t.Error("pbd.F_BoolRepeated bad", x, i)
> -		}
> -		if pbd.RepeatedField[i] == nil { // TODO: more checking?
> -			t.Error("pbd.RepeatedField bad")
> -		}
> -	}
> -}
> -
> -// Verify we give a useful message when decoding to the wrong structure type.
> -func TestTypeMismatch(t *testing.T) {
> -	pb1 := initGoTest(true)
> -
> -	// Marshal
> -	o := old()
> -	o.Marshal(pb1)
> -
> -	// Now Unmarshal it to the wrong type.
> -	pb2 := initGoTestField()
> -	err := o.Unmarshal(pb2)
> -	if err == nil {
> -		t.Error("expected error, got no error")
> -	} else if !strings.Contains(err.Error(), "bad wiretype") {
> -		t.Error("expected bad wiretype error, got", err)
> -	}
> -}
> -
> -func encodeDecode(t *testing.T, in, out Message, msg string) {
> -	buf, err := Marshal(in)
> -	if err != nil {
> -		t.Fatalf("failed marshaling %v: %v", msg, err)
> -	}
> -	if err := Unmarshal(buf, out); err != nil {
> -		t.Fatalf("failed unmarshaling %v: %v", msg, err)
> -	}
> -}
> -
> -func TestPackedNonPackedDecoderSwitching(t *testing.T) {
> -	np, p := new(NonPackedTest), new(PackedTest)
> -
> -	// non-packed -> packed
> -	np.A = []int32{0, 1, 1, 2, 3, 5}
> -	encodeDecode(t, np, p, "non-packed -> packed")
> -	if !reflect.DeepEqual(np.A, p.B) {
> -		t.Errorf("failed non-packed -> packed; np.A=%+v, p.B=%+v", np.A, p.B)
> -	}
> -
> -	// packed -> non-packed
> -	np.Reset()
> -	p.B = []int32{3, 1, 4, 1, 5, 9}
> -	encodeDecode(t, p, np, "packed -> non-packed")
> -	if !reflect.DeepEqual(p.B, np.A) {
> -		t.Errorf("failed packed -> non-packed; p.B=%+v, np.A=%+v", p.B, np.A)
> -	}
> -}
> -
> -func TestProto1RepeatedGroup(t *testing.T) {
> -	pb := &MessageList{
> -		Message: []*MessageList_Message{
> -			{
> -				Name:  String("blah"),
> -				Count: Int32(7),
> -			},
> -			// NOTE: pb.Message[1] is a nil
> -			nil,
> -		},
> -	}
> -
> -	o := old()
> -	err := o.Marshal(pb)
> -	if err == nil || !strings.Contains(err.Error(), "repeated field Message has nil") {
> -		t.Fatalf("unexpected or no error when marshaling: %v", err)
> -	}
> -}
> -
> -// Test that enums work.  Checks for a bug introduced by making enums
> -// named types instead of int32: newInt32FromUint64 would crash with
> -// a type mismatch in reflect.PointTo.
> -func TestEnum(t *testing.T) {
> -	pb := new(GoEnum)
> -	pb.Foo = FOO_FOO1.Enum()
> -	o := old()
> -	if err := o.Marshal(pb); err != nil {
> -		t.Fatal("error encoding enum:", err)
> -	}
> -	pb1 := new(GoEnum)
> -	if err := o.Unmarshal(pb1); err != nil {
> -		t.Fatal("error decoding enum:", err)
> -	}
> -	if *pb1.Foo != FOO_FOO1 {
> -		t.Error("expected 7 but got ", *pb1.Foo)
> -	}
> -}
> -
> -// Enum types have String methods. Check that enum fields can be printed.
> -// We don't care what the value actually is, just as long as it doesn't crash.
> -func TestPrintingNilEnumFields(t *testing.T) {
> -	pb := new(GoEnum)
> -	_ = fmt.Sprintf("%+v", pb)
> -}
> -
> -// Verify that absent required fields cause Marshal/Unmarshal to return errors.
> -func TestRequiredFieldEnforcement(t *testing.T) {
> -	pb := new(GoTestField)
> -	_, err := Marshal(pb)
> -	if err == nil {
> -		t.Error("marshal: expected error, got nil")
> -	} else if _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "Label") {
> -		t.Errorf("marshal: bad error type: %v", err)
> -	}
> -
> -	// A slightly sneaky, yet valid, proto. It encodes the same required field twice,
> -	// so simply counting the required fields is insufficient.
> -	// field 1, encoding 2, value "hi"
> -	buf := []byte("\x0A\x02hi\x0A\x02hi")
> -	err = Unmarshal(buf, pb)
> -	if err == nil {
> -		t.Error("unmarshal: expected error, got nil")
> -	} else if _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "{Unknown}") {
> -		t.Errorf("unmarshal: bad error type: %v", err)
> -	}
> -}
> -
> -// Verify that absent required fields in groups cause Marshal/Unmarshal to return errors.
> -func TestRequiredFieldEnforcementGroups(t *testing.T) {
> -	pb := &GoTestRequiredGroupField{Group: &GoTestRequiredGroupField_Group{}}
> -	if _, err := Marshal(pb); err == nil {
> -		t.Error("marshal: expected error, got nil")
> -	} else if _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "Group.Field") {
> -		t.Errorf("marshal: bad error type: %v", err)
> -	}
> -
> -	buf := []byte{11, 12}
> -	if err := Unmarshal(buf, pb); err == nil {
> -		t.Error("unmarshal: expected error, got nil")
> -	} else if _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "Group.{Unknown}") {
> -		t.Errorf("unmarshal: bad error type: %v", err)
> -	}
> -}
> -
> -func TestTypedNilMarshal(t *testing.T) {
> -	// A typed nil should return ErrNil and not crash.
> -	{
> -		var m *GoEnum
> -		if _, err := Marshal(m); err != ErrNil {
> -			t.Errorf("Marshal(%#v): got %v, want ErrNil", m, err)
> -		}
> -	}
> -
> -	{
> -		m := &Communique{Union: &Communique_Msg{nil}}
> -		if _, err := Marshal(m); err == nil || err == ErrNil {
> -			t.Errorf("Marshal(%#v): got %v, want errOneofHasNil", m, err)
> -		}
> -	}
> -}
> -
> -// A type that implements the Marshaler interface, but is not nillable.
> -type nonNillableInt uint64
> -
> -func (nni nonNillableInt) Marshal() ([]byte, error) {
> -	return EncodeVarint(uint64(nni)), nil
> -}
> -
> -type NNIMessage struct {
> -	nni nonNillableInt
> -}
> -
> -func (*NNIMessage) Reset()         {}
> -func (*NNIMessage) String() string { return "" }
> -func (*NNIMessage) ProtoMessage()  {}
> -
> -// A type that implements the Marshaler interface and is nillable.
> -type nillableMessage struct {
> -	x uint64
> -}
> -
> -func (nm *nillableMessage) Marshal() ([]byte, error) {
> -	return EncodeVarint(nm.x), nil
> -}
> -
> -type NMMessage struct {
> -	nm *nillableMessage
> -}
> -
> -func (*NMMessage) Reset()         {}
> -func (*NMMessage) String() string { return "" }
> -func (*NMMessage) ProtoMessage()  {}
> -
> -// Verify a type that uses the Marshaler interface, but has a nil pointer.
> -func TestNilMarshaler(t *testing.T) {
> -	// Try a struct with a Marshaler field that is nil.
> -	// It should be directly marshable.
> -	nmm := new(NMMessage)
> -	if _, err := Marshal(nmm); err != nil {
> -		t.Error("unexpected error marshaling nmm: ", err)
> -	}
> -
> -	// Try a struct with a Marshaler field that is not nillable.
> -	nnim := new(NNIMessage)
> -	nnim.nni = 7
> -	var _ Marshaler = nnim.nni // verify it is truly a Marshaler
> -	if _, err := Marshal(nnim); err != nil {
> -		t.Error("unexpected error marshaling nnim: ", err)
> -	}
> -}
> -
> -func TestAllSetDefaults(t *testing.T) {
> -	// Exercise SetDefaults with all scalar field types.
> -	m := &Defaults{
> -		// NaN != NaN, so override that here.
> -		F_Nan: Float32(1.7),
> -	}
> -	expected := &Defaults{
> -		F_Bool:    Bool(true),
> -		F_Int32:   Int32(32),
> -		F_Int64:   Int64(64),
> -		F_Fixed32: Uint32(320),
> -		F_Fixed64: Uint64(640),
> -		F_Uint32:  Uint32(3200),
> -		F_Uint64:  Uint64(6400),
> -		F_Float:   Float32(314159),
> -		F_Double:  Float64(271828),
> -		F_String:  String(`hello, "world!"` + "\n"),
> -		F_Bytes:   []byte("Bignose"),
> -		F_Sint32:  Int32(-32),
> -		F_Sint64:  Int64(-64),
> -		F_Enum:    Defaults_GREEN.Enum(),
> -		F_Pinf:    Float32(float32(math.Inf(1))),
> -		F_Ninf:    Float32(float32(math.Inf(-1))),
> -		F_Nan:     Float32(1.7),
> -		StrZero:   String(""),
> -	}
> -	SetDefaults(m)
> -	if !Equal(m, expected) {
> -		t.Errorf("SetDefaults failed\n got %v\nwant %v", m, expected)
> -	}
> -}
> -
> -func TestSetDefaultsWithSetField(t *testing.T) {
> -	// Check that a set value is not overridden.
> -	m := &Defaults{
> -		F_Int32: Int32(12),
> -	}
> -	SetDefaults(m)
> -	if v := m.GetF_Int32(); v != 12 {
> -		t.Errorf("m.FInt32 = %v, want 12", v)
> -	}
> -}
> -
> -func TestSetDefaultsWithSubMessage(t *testing.T) {
> -	m := &OtherMessage{
> -		Key: Int64(123),
> -		Inner: &InnerMessage{
> -			Host: String("gopher"),
> -		},
> -	}
> -	expected := &OtherMessage{
> -		Key: Int64(123),
> -		Inner: &InnerMessage{
> -			Host: String("gopher"),
> -			Port: Int32(4000),
> -		},
> -	}
> -	SetDefaults(m)
> -	if !Equal(m, expected) {
> -		t.Errorf("\n got %v\nwant %v", m, expected)
> -	}
> -}
> -
> -func TestSetDefaultsWithRepeatedSubMessage(t *testing.T) {
> -	m := &MyMessage{
> -		RepInner: []*InnerMessage{{}},
> -	}
> -	expected := &MyMessage{
> -		RepInner: []*InnerMessage{{
> -			Port: Int32(4000),
> -		}},
> -	}
> -	SetDefaults(m)
> -	if !Equal(m, expected) {
> -		t.Errorf("\n got %v\nwant %v", m, expected)
> -	}
> -}
> -
> -func TestSetDefaultWithRepeatedNonMessage(t *testing.T) {
> -	m := &MyMessage{
> -		Pet: []string{"turtle", "wombat"},
> -	}
> -	expected := Clone(m)
> -	SetDefaults(m)
> -	if !Equal(m, expected) {
> -		t.Errorf("\n got %v\nwant %v", m, expected)
> -	}
> -}
> -
> -func TestMaximumTagNumber(t *testing.T) {
> -	m := &MaxTag{
> -		LastField: String("natural goat essence"),
> -	}
> -	buf, err := Marshal(m)
> -	if err != nil {
> -		t.Fatalf("proto.Marshal failed: %v", err)
> -	}
> -	m2 := new(MaxTag)
> -	if err := Unmarshal(buf, m2); err != nil {
> -		t.Fatalf("proto.Unmarshal failed: %v", err)
> -	}
> -	if got, want := m2.GetLastField(), *m.LastField; got != want {
> -		t.Errorf("got %q, want %q", got, want)
> -	}
> -}
> -
> -func TestJSON(t *testing.T) {
> -	m := &MyMessage{
> -		Count: Int32(4),
> -		Pet:   []string{"bunny", "kitty"},
> -		Inner: &InnerMessage{
> -			Host: String("cauchy"),
> -		},
> -		Bikeshed: MyMessage_GREEN.Enum(),
> -	}
> -	const expected = `{"count":4,"pet":["bunny","kitty"],"inner":{"host":"cauchy"},"bikeshed":1}`
> -
> -	b, err := json.Marshal(m)
> -	if err != nil {
> -		t.Fatalf("json.Marshal failed: %v", err)
> -	}
> -	s := string(b)
> -	if s != expected {
> -		t.Errorf("got  %s\nwant %s", s, expected)
> -	}
> -
> -	received := new(MyMessage)
> -	if err := json.Unmarshal(b, received); err != nil {
> -		t.Fatalf("json.Unmarshal failed: %v", err)
> -	}
> -	if !Equal(received, m) {
> -		t.Fatalf("got %s, want %s", received, m)
> -	}
> -
> -	// Test unmarshalling of JSON with symbolic enum name.
> -	const old = `{"count":4,"pet":["bunny","kitty"],"inner":{"host":"cauchy"},"bikeshed":"GREEN"}`
> -	received.Reset()
> -	if err := json.Unmarshal([]byte(old), received); err != nil {
> -		t.Fatalf("json.Unmarshal failed: %v", err)
> -	}
> -	if !Equal(received, m) {
> -		t.Fatalf("got %s, want %s", received, m)
> -	}
> -}
> -
> -func TestBadWireType(t *testing.T) {
> -	b := []byte{7<<3 | 6} // field 7, wire type 6
> -	pb := new(OtherMessage)
> -	if err := Unmarshal(b, pb); err == nil {
> -		t.Errorf("Unmarshal did not fail")
> -	} else if !strings.Contains(err.Error(), "unknown wire type") {
> -		t.Errorf("wrong error: %v", err)
> -	}
> -}
> -
> -func TestBytesWithInvalidLength(t *testing.T) {
> -	// If a byte sequence has an invalid (negative) length, Unmarshal should not panic.
> -	b := []byte{2<<3 | WireBytes, 0xff, 0xff, 0xff, 0xff, 0xff, 0}
> -	Unmarshal(b, new(MyMessage))
> -}
> -
> -func TestLengthOverflow(t *testing.T) {
> -	// Overflowing a length should not panic.
> -	b := []byte{2<<3 | WireBytes, 1, 1, 3<<3 | WireBytes, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01}
> -	Unmarshal(b, new(MyMessage))
> -}
> -
> -func TestVarintOverflow(t *testing.T) {
> -	// Overflowing a 64-bit length should not be allowed.
> -	b := []byte{1<<3 | WireVarint, 0x01, 3<<3 | WireBytes, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01}
> -	if err := Unmarshal(b, new(MyMessage)); err == nil {
> -		t.Fatalf("Overflowed uint64 length without error")
> -	}
> -}
> -
> -func TestUnmarshalFuzz(t *testing.T) {
> -	const N = 1000
> -	seed := time.Now().UnixNano()
> -	t.Logf("RNG seed is %d", seed)
> -	rng := rand.New(rand.NewSource(seed))
> -	buf := make([]byte, 20)
> -	for i := 0; i < N; i++ {
> -		for j := range buf {
> -			buf[j] = byte(rng.Intn(256))
> -		}
> -		fuzzUnmarshal(t, buf)
> -	}
> -}
> -
> -func TestMergeMessages(t *testing.T) {
> -	pb := &MessageList{Message: []*MessageList_Message{{Name: String("x"), Count: Int32(1)}}}
> -	data, err := Marshal(pb)
> -	if err != nil {
> -		t.Fatalf("Marshal: %v", err)
> -	}
> -
> -	pb1 := new(MessageList)
> -	if err := Unmarshal(data, pb1); err != nil {
> -		t.Fatalf("first Unmarshal: %v", err)
> -	}
> -	if err := Unmarshal(data, pb1); err != nil {
> -		t.Fatalf("second Unmarshal: %v", err)
> -	}
> -	if len(pb1.Message) != 1 {
> -		t.Errorf("two Unmarshals produced %d Messages, want 1", len(pb1.Message))
> -	}
> -
> -	pb2 := new(MessageList)
> -	if err := UnmarshalMerge(data, pb2); err != nil {
> -		t.Fatalf("first UnmarshalMerge: %v", err)
> -	}
> -	if err := UnmarshalMerge(data, pb2); err != nil {
> -		t.Fatalf("second UnmarshalMerge: %v", err)
> -	}
> -	if len(pb2.Message) != 2 {
> -		t.Errorf("two UnmarshalMerges produced %d Messages, want 2", len(pb2.Message))
> -	}
> -}
> -
> -func TestExtensionMarshalOrder(t *testing.T) {
> -	m := &MyMessage{Count: Int(123)}
> -	if err := SetExtension(m, E_Ext_More, &Ext{Data: String("alpha")}); err != nil {
> -		t.Fatalf("SetExtension: %v", err)
> -	}
> -	if err := SetExtension(m, E_Ext_Text, String("aleph")); err != nil {
> -		t.Fatalf("SetExtension: %v", err)
> -	}
> -	if err := SetExtension(m, E_Ext_Number, Int32(1)); err != nil {
> -		t.Fatalf("SetExtension: %v", err)
> -	}
> -
> -	// Serialize m several times, and check we get the same bytes each time.
> -	var orig []byte
> -	for i := 0; i < 100; i++ {
> -		b, err := Marshal(m)
> -		if err != nil {
> -			t.Fatalf("Marshal: %v", err)
> -		}
> -		if i == 0 {
> -			orig = b
> -			continue
> -		}
> -		if !bytes.Equal(b, orig) {
> -			t.Errorf("Bytes differ on attempt #%d", i)
> -		}
> -	}
> -}
> -
> -// Many extensions, because small maps might not iterate differently on each iteration.
> -var exts = []*ExtensionDesc{
> -	E_X201,
> -	E_X202,
> -	E_X203,
> -	E_X204,
> -	E_X205,
> -	E_X206,
> -	E_X207,
> -	E_X208,
> -	E_X209,
> -	E_X210,
> -	E_X211,
> -	E_X212,
> -	E_X213,
> -	E_X214,
> -	E_X215,
> -	E_X216,
> -	E_X217,
> -	E_X218,
> -	E_X219,
> -	E_X220,
> -	E_X221,
> -	E_X222,
> -	E_X223,
> -	E_X224,
> -	E_X225,
> -	E_X226,
> -	E_X227,
> -	E_X228,
> -	E_X229,
> -	E_X230,
> -	E_X231,
> -	E_X232,
> -	E_X233,
> -	E_X234,
> -	E_X235,
> -	E_X236,
> -	E_X237,
> -	E_X238,
> -	E_X239,
> -	E_X240,
> -	E_X241,
> -	E_X242,
> -	E_X243,
> -	E_X244,
> -	E_X245,
> -	E_X246,
> -	E_X247,
> -	E_X248,
> -	E_X249,
> -	E_X250,
> -}
> -
> -func TestMessageSetMarshalOrder(t *testing.T) {
> -	m := &MyMessageSet{}
> -	for _, x := range exts {
> -		if err := SetExtension(m, x, &Empty{}); err != nil {
> -			t.Fatalf("SetExtension: %v", err)
> -		}
> -	}
> -
> -	buf, err := Marshal(m)
> -	if err != nil {
> -		t.Fatalf("Marshal: %v", err)
> -	}
> -
> -	// Serialize m several times, and check we get the same bytes each time.
> -	for i := 0; i < 10; i++ {
> -		b1, err := Marshal(m)
> -		if err != nil {
> -			t.Fatalf("Marshal: %v", err)
> -		}
> -		if !bytes.Equal(b1, buf) {
> -			t.Errorf("Bytes differ on re-Marshal #%d", i)
> -		}
> -
> -		m2 := &MyMessageSet{}
> -		if err := Unmarshal(buf, m2); err != nil {
> -			t.Errorf("Unmarshal: %v", err)
> -		}
> -		b2, err := Marshal(m2)
> -		if err != nil {
> -			t.Errorf("re-Marshal: %v", err)
> -		}
> -		if !bytes.Equal(b2, buf) {
> -			t.Errorf("Bytes differ on round-trip #%d", i)
> -		}
> -	}
> -}
> -
> -func TestUnmarshalMergesMessages(t *testing.T) {
> -	// If a nested message occurs twice in the input,
> -	// the fields should be merged when decoding.
> -	a := &OtherMessage{
> -		Key: Int64(123),
> -		Inner: &InnerMessage{
> -			Host: String("polhode"),
> -			Port: Int32(1234),
> -		},
> -	}
> -	aData, err := Marshal(a)
> -	if err != nil {
> -		t.Fatalf("Marshal(a): %v", err)
> -	}
> -	b := &OtherMessage{
> -		Weight: Float32(1.2),
> -		Inner: &InnerMessage{
> -			Host:      String("herpolhode"),
> -			Connected: Bool(true),
> -		},
> -	}
> -	bData, err := Marshal(b)
> -	if err != nil {
> -		t.Fatalf("Marshal(b): %v", err)
> -	}
> -	want := &OtherMessage{
> -		Key:    Int64(123),
> -		Weight: Float32(1.2),
> -		Inner: &InnerMessage{
> -			Host:      String("herpolhode"),
> -			Port:      Int32(1234),
> -			Connected: Bool(true),
> -		},
> -	}
> -	got := new(OtherMessage)
> -	if err := Unmarshal(append(aData, bData...), got); err != nil {
> -		t.Fatalf("Unmarshal: %v", err)
> -	}
> -	if !Equal(got, want) {
> -		t.Errorf("\n got %v\nwant %v", got, want)
> -	}
> -}
> -
> -func TestEncodingSizes(t *testing.T) {
> -	tests := []struct {
> -		m Message
> -		n int
> -	}{
> -		{&Defaults{F_Int32: Int32(math.MaxInt32)}, 6},
> -		{&Defaults{F_Int32: Int32(math.MinInt32)}, 11},
> -		{&Defaults{F_Uint32: Uint32(uint32(math.MaxInt32) + 1)}, 6},
> -		{&Defaults{F_Uint32: Uint32(math.MaxUint32)}, 6},
> -	}
> -	for _, test := range tests {
> -		b, err := Marshal(test.m)
> -		if err != nil {
> -			t.Errorf("Marshal(%v): %v", test.m, err)
> -			continue
> -		}
> -		if len(b) != test.n {
> -			t.Errorf("Marshal(%v) yielded %d bytes, want %d bytes", test.m, len(b), test.n)
> -		}
> -	}
> -}
> -
> -func TestRequiredNotSetError(t *testing.T) {
> -	pb := initGoTest(false)
> -	pb.RequiredField.Label = nil
> -	pb.F_Int32Required = nil
> -	pb.F_Int64Required = nil
> -
> -	expected := "0807" + // field 1, encoding 0, value 7
> -		"2206" + "120474797065" + // field 4, encoding 2 (GoTestField)
> -		"5001" + // field 10, encoding 0, value 1
> -		"6d20000000" + // field 13, encoding 5, value 0x20
> -		"714000000000000000" + // field 14, encoding 1, value 0x40
> -		"78a019" + // field 15, encoding 0, value 0xca0 = 3232
> -		"8001c032" + // field 16, encoding 0, value 0x1940 = 6464
> -		"8d0100004a45" + // field 17, encoding 5, value 3232.0
> -		"9101000000000040b940" + // field 18, encoding 1, value 6464.0
> -		"9a0106" + "737472696e67" + // field 19, encoding 2, string "string"
> -		"b304" + // field 70, encoding 3, start group
> -		"ba0408" + "7265717569726564" + // field 71, encoding 2, string "required"
> -		"b404" + // field 70, encoding 4, end group
> -		"aa0605" + "6279746573" + // field 101, encoding 2, string "bytes"
> -		"b0063f" + // field 102, encoding 0, 0x3f zigzag32
> -		"b8067f" // field 103, encoding 0, 0x7f zigzag64
> -
> -	o := old()
> -	bytes, err := Marshal(pb)
> -	if _, ok := err.(*RequiredNotSetError); !ok {
> -		fmt.Printf("marshal-1 err = %v, want *RequiredNotSetError", err)
> -		o.DebugPrint("", bytes)
> -		t.Fatalf("expected = %s", expected)
> -	}
> -	if strings.Index(err.Error(), "RequiredField.Label") < 0 {
> -		t.Errorf("marshal-1 wrong err msg: %v", err)
> -	}
> -	if !equal(bytes, expected, t) {
> -		o.DebugPrint("neq 1", bytes)
> -		t.Fatalf("expected = %s", expected)
> -	}
> -
> -	// Now test Unmarshal by recreating the original buffer.
> -	pbd := new(GoTest)
> -	err = Unmarshal(bytes, pbd)
> -	if _, ok := err.(*RequiredNotSetError); !ok {
> -		t.Fatalf("unmarshal err = %v, want *RequiredNotSetError", err)
> -		o.DebugPrint("", bytes)
> -		t.Fatalf("string = %s", expected)
> -	}
> -	if strings.Index(err.Error(), "RequiredField.{Unknown}") < 0 {
> -		t.Errorf("unmarshal wrong err msg: %v", err)
> -	}
> -	bytes, err = Marshal(pbd)
> -	if _, ok := err.(*RequiredNotSetError); !ok {
> -		t.Errorf("marshal-2 err = %v, want *RequiredNotSetError", err)
> -		o.DebugPrint("", bytes)
> -		t.Fatalf("string = %s", expected)
> -	}
> -	if strings.Index(err.Error(), "RequiredField.Label") < 0 {
> -		t.Errorf("marshal-2 wrong err msg: %v", err)
> -	}
> -	if !equal(bytes, expected, t) {
> -		o.DebugPrint("neq 2", bytes)
> -		t.Fatalf("string = %s", expected)
> -	}
> -}
> -
> -func fuzzUnmarshal(t *testing.T, data []byte) {
> -	defer func() {
> -		if e := recover(); e != nil {
> -			t.Errorf("These bytes caused a panic: %+v", data)
> -			t.Logf("Stack:\n%s", debug.Stack())
> -			t.FailNow()
> -		}
> -	}()
> -
> -	pb := new(MyMessage)
> -	Unmarshal(data, pb)
> -}
> -
> -func TestMapFieldMarshal(t *testing.T) {
> -	m := &MessageWithMap{
> -		NameMapping: map[int32]string{
> -			1: "Rob",
> -			4: "Ian",
> -			8: "Dave",
> -		},
> -	}
> -	b, err := Marshal(m)
> -	if err != nil {
> -		t.Fatalf("Marshal: %v", err)
> -	}
> -
> -	// b should be the concatenation of these three byte sequences in some order.
> -	parts := []string{
> -		"\n\a\b\x01\x12\x03Rob",
> -		"\n\a\b\x04\x12\x03Ian",
> -		"\n\b\b\x08\x12\x04Dave",
> -	}
> -	ok := false
> -	for i := range parts {
> -		for j := range parts {
> -			if j == i {
> -				continue
> -			}
> -			for k := range parts {
> -				if k == i || k == j {
> -					continue
> -				}
> -				try := parts[i] + parts[j] + parts[k]
> -				if bytes.Equal(b, []byte(try)) {
> -					ok = true
> -					break
> -				}
> -			}
> -		}
> -	}
> -	if !ok {
> -		t.Fatalf("Incorrect Marshal output.\n got %q\nwant %q (or a permutation of that)", b, parts[0]+parts[1]+parts[2])
> -	}
> -	t.Logf("FYI b: %q", b)
> -
> -	(new(Buffer)).DebugPrint("Dump of b", b)
> -}
> -
> -func TestMapFieldRoundTrips(t *testing.T) {
> -	m := &MessageWithMap{
> -		NameMapping: map[int32]string{
> -			1: "Rob",
> -			4: "Ian",
> -			8: "Dave",
> -		},
> -		MsgMapping: map[int64]*FloatingPoint{
> -			0x7001: &FloatingPoint{F: Float64(2.0)},
> -		},
> -		ByteMapping: map[bool][]byte{
> -			false: []byte("that's not right!"),
> -			true:  []byte("aye, 'tis true!"),
> -		},
> -	}
> -	b, err := Marshal(m)
> -	if err != nil {
> -		t.Fatalf("Marshal: %v", err)
> -	}
> -	t.Logf("FYI b: %q", b)
> -	m2 := new(MessageWithMap)
> -	if err := Unmarshal(b, m2); err != nil {
> -		t.Fatalf("Unmarshal: %v", err)
> -	}
> -	for _, pair := range [][2]interface{}{
> -		{m.NameMapping, m2.NameMapping},
> -		{m.MsgMapping, m2.MsgMapping},
> -		{m.ByteMapping, m2.ByteMapping},
> -	} {
> -		if !reflect.DeepEqual(pair[0], pair[1]) {
> -			t.Errorf("Map did not survive a round trip.\ninitial: %v\n  final: %v", pair[0], pair[1])
> -		}
> -	}
> -}
> -
> -func TestMapFieldWithNil(t *testing.T) {
> -	m1 := &MessageWithMap{
> -		MsgMapping: map[int64]*FloatingPoint{
> -			1: nil,
> -		},
> -	}
> -	b, err := Marshal(m1)
> -	if err != nil {
> -		t.Fatalf("Marshal: %v", err)
> -	}
> -	m2 := new(MessageWithMap)
> -	if err := Unmarshal(b, m2); err != nil {
> -		t.Fatalf("Unmarshal: %v, got these bytes: %v", err, b)
> -	}
> -	if v, ok := m2.MsgMapping[1]; !ok {
> -		t.Error("msg_mapping[1] not present")
> -	} else if v != nil {
> -		t.Errorf("msg_mapping[1] not nil: %v", v)
> -	}
> -}
> -
> -func TestMapFieldWithNilBytes(t *testing.T) {
> -	m1 := &MessageWithMap{
> -		ByteMapping: map[bool][]byte{
> -			false: []byte{},
> -			true:  nil,
> -		},
> -	}
> -	n := Size(m1)
> -	b, err := Marshal(m1)
> -	if err != nil {
> -		t.Fatalf("Marshal: %v", err)
> -	}
> -	if n != len(b) {
> -		t.Errorf("Size(m1) = %d; want len(Marshal(m1)) = %d", n, len(b))
> -	}
> -	m2 := new(MessageWithMap)
> -	if err := Unmarshal(b, m2); err != nil {
> -		t.Fatalf("Unmarshal: %v, got these bytes: %v", err, b)
> -	}
> -	if v, ok := m2.ByteMapping[false]; !ok {
> -		t.Error("byte_mapping[false] not present")
> -	} else if len(v) != 0 {
> -		t.Errorf("byte_mapping[false] not empty: %#v", v)
> -	}
> -	if v, ok := m2.ByteMapping[true]; !ok {
> -		t.Error("byte_mapping[true] not present")
> -	} else if len(v) != 0 {
> -		t.Errorf("byte_mapping[true] not empty: %#v", v)
> -	}
> -}
> -
> -func TestDecodeMapFieldMissingKey(t *testing.T) {
> -	b := []byte{
> -		0x0A, 0x03, // message, tag 1 (name_mapping), of length 3 bytes
> -		// no key
> -		0x12, 0x01, 0x6D, // string value of length 1 byte, value "m"
> -	}
> -	got := &MessageWithMap{}
> -	err := Unmarshal(b, got)
> -	if err != nil {
> -		t.Fatalf("failed to marshal map with missing key: %v", err)
> -	}
> -	want := &MessageWithMap{NameMapping: map[int32]string{0: "m"}}
> -	if !Equal(got, want) {
> -		t.Errorf("Unmarshaled map with no key was not as expected. got: %v, want %v", got, want)
> -	}
> -}
> -
> -func TestDecodeMapFieldMissingValue(t *testing.T) {
> -	b := []byte{
> -		0x0A, 0x02, // message, tag 1 (name_mapping), of length 2 bytes
> -		0x08, 0x01, // varint key, value 1
> -		// no value
> -	}
> -	got := &MessageWithMap{}
> -	err := Unmarshal(b, got)
> -	if err != nil {
> -		t.Fatalf("failed to marshal map with missing value: %v", err)
> -	}
> -	want := &MessageWithMap{NameMapping: map[int32]string{1: ""}}
> -	if !Equal(got, want) {
> -		t.Errorf("Unmarshaled map with no value was not as expected. got: %v, want %v", got, want)
> -	}
> -}
> -
> -func TestOneof(t *testing.T) {
> -	m := &Communique{}
> -	b, err := Marshal(m)
> -	if err != nil {
> -		t.Fatalf("Marshal of empty message with oneof: %v", err)
> -	}
> -	if len(b) != 0 {
> -		t.Errorf("Marshal of empty message yielded too many bytes: %v", b)
> -	}
> -
> -	m = &Communique{
> -		Union: &Communique_Name{"Barry"},
> -	}
> -
> -	// Round-trip.
> -	b, err = Marshal(m)
> -	if err != nil {
> -		t.Fatalf("Marshal of message with oneof: %v", err)
> -	}
> -	if len(b) != 7 { // name tag/wire (1) + name len (1) + name (5)
> -		t.Errorf("Incorrect marshal of message with oneof: %v", b)
> -	}
> -	m.Reset()
> -	if err := Unmarshal(b, m); err != nil {
> -		t.Fatalf("Unmarshal of message with oneof: %v", err)
> -	}
> -	if x, ok := m.Union.(*Communique_Name); !ok || x.Name != "Barry" {
> -		t.Errorf("After round trip, Union = %+v", m.Union)
> -	}
> -	if name := m.GetName(); name != "Barry" {
> -		t.Errorf("After round trip, GetName = %q, want %q", name, "Barry")
> -	}
> -
> -	// Let's try with a message in the oneof.
> -	m.Union = &Communique_Msg{&Strings{StringField: String("deep deep string")}}
> -	b, err = Marshal(m)
> -	if err != nil {
> -		t.Fatalf("Marshal of message with oneof set to message: %v", err)
> -	}
> -	if len(b) != 20 { // msg tag/wire (1) + msg len (1) + msg (1 + 1 + 16)
> -		t.Errorf("Incorrect marshal of message with oneof set to message: %v", b)
> -	}
> -	m.Reset()
> -	if err := Unmarshal(b, m); err != nil {
> -		t.Fatalf("Unmarshal of message with oneof set to message: %v", err)
> -	}
> -	ss, ok := m.Union.(*Communique_Msg)
> -	if !ok || ss.Msg.GetStringField() != "deep deep string" {
> -		t.Errorf("After round trip with oneof set to message, Union = %+v", m.Union)
> -	}
> -}
> -
> -func TestInefficientPackedBool(t *testing.T) {
> -	// https://github.com/golang/protobuf/issues/76
> -	inp := []byte{
> -		0x12, 0x02, // 0x12 = 2<<3|2; 2 bytes
> -		// Usually a bool should take a single byte,
> -		// but it is permitted to be any varint.
> -		0xb9, 0x30,
> -	}
> -	if err := Unmarshal(inp, new(MoreRepeated)); err != nil {
> -		t.Error(err)
> -	}
> -}
> -
> -// Benchmarks
> -
> -func testMsg() *GoTest {
> -	pb := initGoTest(true)
> -	const N = 1000 // Internally the library starts much smaller.
> -	pb.F_Int32Repeated = make([]int32, N)
> -	pb.F_DoubleRepeated = make([]float64, N)
> -	for i := 0; i < N; i++ {
> -		pb.F_Int32Repeated[i] = int32(i)
> -		pb.F_DoubleRepeated[i] = float64(i)
> -	}
> -	return pb
> -}
> -
> -func bytesMsg() *GoTest {
> -	pb := initGoTest(true)
> -	buf := make([]byte, 4000)
> -	for i := range buf {
> -		buf[i] = byte(i)
> -	}
> -	pb.F_BytesDefaulted = buf
> -	return pb
> -}
> -
> -func benchmarkMarshal(b *testing.B, pb Message, marshal func(Message) ([]byte, error)) {
> -	d, _ := marshal(pb)
> -	b.SetBytes(int64(len(d)))
> -	b.ResetTimer()
> -	for i := 0; i < b.N; i++ {
> -		marshal(pb)
> -	}
> -}
> -
> -func benchmarkBufferMarshal(b *testing.B, pb Message) {
> -	p := NewBuffer(nil)
> -	benchmarkMarshal(b, pb, func(pb0 Message) ([]byte, error) {
> -		p.Reset()
> -		err := p.Marshal(pb0)
> -		return p.Bytes(), err
> -	})
> -}
> -
> -func benchmarkSize(b *testing.B, pb Message) {
> -	benchmarkMarshal(b, pb, func(pb0 Message) ([]byte, error) {
> -		Size(pb)
> -		return nil, nil
> -	})
> -}
> -
> -func newOf(pb Message) Message {
> -	in := reflect.ValueOf(pb)
> -	if in.IsNil() {
> -		return pb
> -	}
> -	return reflect.New(in.Type().Elem()).Interface().(Message)
> -}
> -
> -func benchmarkUnmarshal(b *testing.B, pb Message, unmarshal func([]byte, Message) error) {
> -	d, _ := Marshal(pb)
> -	b.SetBytes(int64(len(d)))
> -	pbd := newOf(pb)
> -
> -	b.ResetTimer()
> -	for i := 0; i < b.N; i++ {
> -		unmarshal(d, pbd)
> -	}
> -}
> -
> -func benchmarkBufferUnmarshal(b *testing.B, pb Message) {
> -	p := NewBuffer(nil)
> -	benchmarkUnmarshal(b, pb, func(d []byte, pb0 Message) error {
> -		p.SetBuf(d)
> -		return p.Unmarshal(pb0)
> -	})
> -}
> -
> -// Benchmark{Marshal,BufferMarshal,Size,Unmarshal,BufferUnmarshal}{,Bytes}
> -
> -func BenchmarkMarshal(b *testing.B) {
> -	benchmarkMarshal(b, testMsg(), Marshal)
> -}
> -
> -func BenchmarkBufferMarshal(b *testing.B) {
> -	benchmarkBufferMarshal(b, testMsg())
> -}
> -
> -func BenchmarkSize(b *testing.B) {
> -	benchmarkSize(b, testMsg())
> -}
> -
> -func BenchmarkUnmarshal(b *testing.B) {
> -	benchmarkUnmarshal(b, testMsg(), Unmarshal)
> -}
> -
> -func BenchmarkBufferUnmarshal(b *testing.B) {
> -	benchmarkBufferUnmarshal(b, testMsg())
> -}
> -
> -func BenchmarkMarshalBytes(b *testing.B) {
> -	benchmarkMarshal(b, bytesMsg(), Marshal)
> -}
> -
> -func BenchmarkBufferMarshalBytes(b *testing.B) {
> -	benchmarkBufferMarshal(b, bytesMsg())
> -}
> -
> -func BenchmarkSizeBytes(b *testing.B) {
> -	benchmarkSize(b, bytesMsg())
> -}
> -
> -func BenchmarkUnmarshalBytes(b *testing.B) {
> -	benchmarkUnmarshal(b, bytesMsg(), Unmarshal)
> -}
> -
> -func BenchmarkBufferUnmarshalBytes(b *testing.B) {
> -	benchmarkBufferUnmarshal(b, bytesMsg())
> -}
> -
> -func BenchmarkUnmarshalUnrecognizedFields(b *testing.B) {
> -	b.StopTimer()
> -	pb := initGoTestField()
> -	skip := &GoSkipTest{
> -		SkipInt32:   Int32(32),
> -		SkipFixed32: Uint32(3232),
> -		SkipFixed64: Uint64(6464),
> -		SkipString:  String("skipper"),
> -		Skipgroup: &GoSkipTest_SkipGroup{
> -			GroupInt32:  Int32(75),
> -			GroupString: String("wxyz"),
> -		},
> -	}
> -
> -	pbd := new(GoTestField)
> -	p := NewBuffer(nil)
> -	p.Marshal(pb)
> -	p.Marshal(skip)
> -	p2 := NewBuffer(nil)
> -
> -	b.StartTimer()
> -	for i := 0; i < b.N; i++ {
> -		p2.SetBuf(p.Bytes())
> -		p2.Unmarshal(pbd)
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/any_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/any_test.go
> deleted file mode 100644
> index 1a3c22ed..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/any_test.go
> +++ /dev/null
> @@ -1,300 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2016 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto_test
> -
> -import (
> -	"strings"
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -
> -	pb "github.com/golang/protobuf/proto/proto3_proto"
> -	testpb "github.com/golang/protobuf/proto/testdata"
> -	anypb "github.com/golang/protobuf/ptypes/any"
> -)
> -
> -var (
> -	expandedMarshaler        = proto.TextMarshaler{ExpandAny: true}
> -	expandedCompactMarshaler = proto.TextMarshaler{Compact: true, ExpandAny: true}
> -)
> -
> -// anyEqual reports whether two messages which may be google.protobuf.Any or may
> -// contain google.protobuf.Any fields are equal. We can't use proto.Equal for
> -// comparison, because semantically equivalent messages may be marshaled to
> -// binary in different tag order. Instead, trust that TextMarshaler with
> -// ExpandAny option works and compare the text marshaling results.
> -func anyEqual(got, want proto.Message) bool {
> -	// if messages are proto.Equal, no need to marshal.
> -	if proto.Equal(got, want) {
> -		return true
> -	}
> -	g := expandedMarshaler.Text(got)
> -	w := expandedMarshaler.Text(want)
> -	return g == w
> -}
> -
> -type golden struct {
> -	m    proto.Message
> -	t, c string
> -}
> -
> -var goldenMessages = makeGolden()
> -
> -func makeGolden() []golden {
> -	nested := &pb.Nested{Bunny: "Monty"}
> -	nb, err := proto.Marshal(nested)
> -	if err != nil {
> -		panic(err)
> -	}
> -	m1 := &pb.Message{
> -		Name:        "David",
> -		ResultCount: 47,
> -		Anything:    &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(nested), Value: nb},
> -	}
> -	m2 := &pb.Message{
> -		Name:        "David",
> -		ResultCount: 47,
> -		Anything:    &anypb.Any{TypeUrl: "http://[::1]/type.googleapis.com/" + proto.MessageName(nested), Value: nb},
> -	}
> -	m3 := &pb.Message{
> -		Name:        "David",
> -		ResultCount: 47,
> -		Anything:    &anypb.Any{TypeUrl: `type.googleapis.com/"/` + proto.MessageName(nested), Value: nb},
> -	}
> -	m4 := &pb.Message{
> -		Name:        "David",
> -		ResultCount: 47,
> -		Anything:    &anypb.Any{TypeUrl: "type.googleapis.com/a/path/" + proto.MessageName(nested), Value: nb},
> -	}
> -	m5 := &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(nested), Value: nb}
> -
> -	any1 := &testpb.MyMessage{Count: proto.Int32(47), Name: proto.String("David")}
> -	proto.SetExtension(any1, testpb.E_Ext_More, &testpb.Ext{Data: proto.String("foo")})
> -	proto.SetExtension(any1, testpb.E_Ext_Text, proto.String("bar"))
> -	any1b, err := proto.Marshal(any1)
> -	if err != nil {
> -		panic(err)
> -	}
> -	any2 := &testpb.MyMessage{Count: proto.Int32(42), Bikeshed: testpb.MyMessage_GREEN.Enum(), RepBytes: [][]byte{[]byte("roboto")}}
> -	proto.SetExtension(any2, testpb.E_Ext_More, &testpb.Ext{Data: proto.String("baz")})
> -	any2b, err := proto.Marshal(any2)
> -	if err != nil {
> -		panic(err)
> -	}
> -	m6 := &pb.Message{
> -		Name:        "David",
> -		ResultCount: 47,
> -		Anything:    &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(any1), Value: any1b},
> -		ManyThings: []*anypb.Any{
> -			&anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(any2), Value: any2b},
> -			&anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(any1), Value: any1b},
> -		},
> -	}
> -
> -	const (
> -		m1Golden = `
> -name: "David"
> -result_count: 47
> -anything: <
> -  [type.googleapis.com/proto3_proto.Nested]: <
> -    bunny: "Monty"
> -  >
> ->
> -`
> -		m2Golden = `
> -name: "David"
> -result_count: 47
> -anything: <
> -  ["http://[::1]/type.googleapis.com/proto3_proto.Nested"]: <
> -    bunny: "Monty"
> -  >
> ->
> -`
> -		m3Golden = `
> -name: "David"
> -result_count: 47
> -anything: <
> -  ["type.googleapis.com/\"/proto3_proto.Nested"]: <
> -    bunny: "Monty"
> -  >
> ->
> -`
> -		m4Golden = `
> -name: "David"
> -result_count: 47
> -anything: <
> -  [type.googleapis.com/a/path/proto3_proto.Nested]: <
> -    bunny: "Monty"
> -  >
> ->
> -`
> -		m5Golden = `
> -[type.googleapis.com/proto3_proto.Nested]: <
> -  bunny: "Monty"
> ->
> -`
> -		m6Golden = `
> -name: "David"
> -result_count: 47
> -anything: <
> -  [type.googleapis.com/testdata.MyMessage]: <
> -    count: 47
> -    name: "David"
> -    [testdata.Ext.more]: <
> -      data: "foo"
> -    >
> -    [testdata.Ext.text]: "bar"
> -  >
> ->
> -many_things: <
> -  [type.googleapis.com/testdata.MyMessage]: <
> -    count: 42
> -    bikeshed: GREEN
> -    rep_bytes: "roboto"
> -    [testdata.Ext.more]: <
> -      data: "baz"
> -    >
> -  >
> ->
> -many_things: <
> -  [type.googleapis.com/testdata.MyMessage]: <
> -    count: 47
> -    name: "David"
> -    [testdata.Ext.more]: <
> -      data: "foo"
> -    >
> -    [testdata.Ext.text]: "bar"
> -  >
> ->
> -`
> -	)
> -	return []golden{
> -		{m1, strings.TrimSpace(m1Golden) + "\n", strings.TrimSpace(compact(m1Golden)) + " "},
> -		{m2, strings.TrimSpace(m2Golden) + "\n", strings.TrimSpace(compact(m2Golden)) + " "},
> -		{m3, strings.TrimSpace(m3Golden) + "\n", strings.TrimSpace(compact(m3Golden)) + " "},
> -		{m4, strings.TrimSpace(m4Golden) + "\n", strings.TrimSpace(compact(m4Golden)) + " "},
> -		{m5, strings.TrimSpace(m5Golden) + "\n", strings.TrimSpace(compact(m5Golden)) + " "},
> -		{m6, strings.TrimSpace(m6Golden) + "\n", strings.TrimSpace(compact(m6Golden)) + " "},
> -	}
> -}
> -
> -func TestMarshalGolden(t *testing.T) {
> -	for _, tt := range goldenMessages {
> -		if got, want := expandedMarshaler.Text(tt.m), tt.t; got != want {
> -			t.Errorf("message %v: got:\n%s\nwant:\n%s", tt.m, got, want)
> -		}
> -		if got, want := expandedCompactMarshaler.Text(tt.m), tt.c; got != want {
> -			t.Errorf("message %v: got:\n`%s`\nwant:\n`%s`", tt.m, got, want)
> -		}
> -	}
> -}
> -
> -func TestUnmarshalGolden(t *testing.T) {
> -	for _, tt := range goldenMessages {
> -		want := tt.m
> -		got := proto.Clone(tt.m)
> -		got.Reset()
> -		if err := proto.UnmarshalText(tt.t, got); err != nil {
> -			t.Errorf("failed to unmarshal\n%s\nerror: %v", tt.t, err)
> -		}
> -		if !anyEqual(got, want) {
> -			t.Errorf("message:\n%s\ngot:\n%s\nwant:\n%s", tt.t, got, want)
> -		}
> -		got.Reset()
> -		if err := proto.UnmarshalText(tt.c, got); err != nil {
> -			t.Errorf("failed to unmarshal\n%s\nerror: %v", tt.c, err)
> -		}
> -		if !anyEqual(got, want) {
> -			t.Errorf("message:\n%s\ngot:\n%s\nwant:\n%s", tt.c, got, want)
> -		}
> -	}
> -}
> -
> -func TestMarshalUnknownAny(t *testing.T) {
> -	m := &pb.Message{
> -		Anything: &anypb.Any{
> -			TypeUrl: "foo",
> -			Value:   []byte("bar"),
> -		},
> -	}
> -	want := `anything: <
> -  type_url: "foo"
> -  value: "bar"
> ->
> -`
> -	got := expandedMarshaler.Text(m)
> -	if got != want {
> -		t.Errorf("got\n`%s`\nwant\n`%s`", got, want)
> -	}
> -}
> -
> -func TestAmbiguousAny(t *testing.T) {
> -	pb := &anypb.Any{}
> -	err := proto.UnmarshalText(`
> -	type_url: "ttt/proto3_proto.Nested"
> -	value: "\n\x05Monty"
> -	`, pb)
> -	t.Logf("result: %v (error: %v)", expandedMarshaler.Text(pb), err)
> -	if err != nil {
> -		t.Errorf("failed to parse ambiguous Any message: %v", err)
> -	}
> -}
> -
> -func TestUnmarshalOverwriteAny(t *testing.T) {
> -	pb := &anypb.Any{}
> -	err := proto.UnmarshalText(`
> -  [type.googleapis.com/a/path/proto3_proto.Nested]: <
> -    bunny: "Monty"
> -  >
> -  [type.googleapis.com/a/path/proto3_proto.Nested]: <
> -    bunny: "Rabbit of Caerbannog"
> -  >
> -	`, pb)
> -	want := `line 7: Any message unpacked multiple times, or "type_url" already set`
> -	if err.Error() != want {
> -		t.Errorf("incorrect error.\nHave: %v\nWant: %v", err.Error(), want)
> -	}
> -}
> -
> -func TestUnmarshalAnyMixAndMatch(t *testing.T) {
> -	pb := &anypb.Any{}
> -	err := proto.UnmarshalText(`
> -	value: "\n\x05Monty"
> -  [type.googleapis.com/a/path/proto3_proto.Nested]: <
> -    bunny: "Rabbit of Caerbannog"
> -  >
> -	`, pb)
> -	want := `line 5: Any message unpacked multiple times, or "value" already set`
> -	if err.Error() != want {
> -		t.Errorf("incorrect error.\nHave: %v\nWant: %v", err.Error(), want)
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/clone.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/clone.go
> deleted file mode 100644
> index e392575b..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/clone.go
> +++ /dev/null
> @@ -1,229 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2011 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// Protocol buffer deep copy and merge.
> -// TODO: RawMessage.
> -
> -package proto
> -
> -import (
> -	"log"
> -	"reflect"
> -	"strings"
> -)
> -
> -// Clone returns a deep copy of a protocol buffer.
> -func Clone(pb Message) Message {
> -	in := reflect.ValueOf(pb)
> -	if in.IsNil() {
> -		return pb
> -	}
> -
> -	out := reflect.New(in.Type().Elem())
> -	// out is empty so a merge is a deep copy.
> -	mergeStruct(out.Elem(), in.Elem())
> -	return out.Interface().(Message)
> -}
> -
> -// Merge merges src into dst.
> -// Required and optional fields that are set in src will be set to that value in dst.
> -// Elements of repeated fields will be appended.
> -// Merge panics if src and dst are not the same type, or if dst is nil.
> -func Merge(dst, src Message) {
> -	in := reflect.ValueOf(src)
> -	out := reflect.ValueOf(dst)
> -	if out.IsNil() {
> -		panic("proto: nil destination")
> -	}
> -	if in.Type() != out.Type() {
> -		// Explicit test prior to mergeStruct so that mistyped nils will fail
> -		panic("proto: type mismatch")
> -	}
> -	if in.IsNil() {
> -		// Merging nil into non-nil is a quiet no-op
> -		return
> -	}
> -	mergeStruct(out.Elem(), in.Elem())
> -}
> -
> -func mergeStruct(out, in reflect.Value) {
> -	sprop := GetProperties(in.Type())
> -	for i := 0; i < in.NumField(); i++ {
> -		f := in.Type().Field(i)
> -		if strings.HasPrefix(f.Name, "XXX_") {
> -			continue
> -		}
> -		mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i])
> -	}
> -
> -	if emIn, ok := extendable(in.Addr().Interface()); ok {
> -		emOut, _ := extendable(out.Addr().Interface())
> -		mIn, muIn := emIn.extensionsRead()
> -		if mIn != nil {
> -			mOut := emOut.extensionsWrite()
> -			muIn.Lock()
> -			mergeExtension(mOut, mIn)
> -			muIn.Unlock()
> -		}
> -	}
> -
> -	uf := in.FieldByName("XXX_unrecognized")
> -	if !uf.IsValid() {
> -		return
> -	}
> -	uin := uf.Bytes()
> -	if len(uin) > 0 {
> -		out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...))
> -	}
> -}
> -
> -// mergeAny performs a merge between two values of the same type.
> -// viaPtr indicates whether the values were indirected through a pointer (implying proto2).
> -// prop is set if this is a struct field (it may be nil).
> -func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) {
> -	if in.Type() == protoMessageType {
> -		if !in.IsNil() {
> -			if out.IsNil() {
> -				out.Set(reflect.ValueOf(Clone(in.Interface().(Message))))
> -			} else {
> -				Merge(out.Interface().(Message), in.Interface().(Message))
> -			}
> -		}
> -		return
> -	}
> -	switch in.Kind() {
> -	case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,
> -		reflect.String, reflect.Uint32, reflect.Uint64:
> -		if !viaPtr && isProto3Zero(in) {
> -			return
> -		}
> -		out.Set(in)
> -	case reflect.Interface:
> -		// Probably a oneof field; copy non-nil values.
> -		if in.IsNil() {
> -			return
> -		}
> -		// Allocate destination if it is not set, or set to a different type.
> -		// Otherwise we will merge as normal.
> -		if out.IsNil() || out.Elem().Type() != in.Elem().Type() {
> -			out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T)
> -		}
> -		mergeAny(out.Elem(), in.Elem(), false, nil)
> -	case reflect.Map:
> -		if in.Len() == 0 {
> -			return
> -		}
> -		if out.IsNil() {
> -			out.Set(reflect.MakeMap(in.Type()))
> -		}
> -		// For maps with value types of *T or []byte we need to deep copy each value.
> -		elemKind := in.Type().Elem().Kind()
> -		for _, key := range in.MapKeys() {
> -			var val reflect.Value
> -			switch elemKind {
> -			case reflect.Ptr:
> -				val = reflect.New(in.Type().Elem().Elem())
> -				mergeAny(val, in.MapIndex(key), false, nil)
> -			case reflect.Slice:
> -				val = in.MapIndex(key)
> -				val = reflect.ValueOf(append([]byte{}, val.Bytes()...))
> -			default:
> -				val = in.MapIndex(key)
> -			}
> -			out.SetMapIndex(key, val)
> -		}
> -	case reflect.Ptr:
> -		if in.IsNil() {
> -			return
> -		}
> -		if out.IsNil() {
> -			out.Set(reflect.New(in.Elem().Type()))
> -		}
> -		mergeAny(out.Elem(), in.Elem(), true, nil)
> -	case reflect.Slice:
> -		if in.IsNil() {
> -			return
> -		}
> -		if in.Type().Elem().Kind() == reflect.Uint8 {
> -			// []byte is a scalar bytes field, not a repeated field.
> -
> -			// Edge case: if this is in a proto3 message, a zero length
> -			// bytes field is considered the zero value, and should not
> -			// be merged.
> -			if prop != nil && prop.proto3 && in.Len() == 0 {
> -				return
> -			}
> -
> -			// Make a deep copy.
> -			// Append to []byte{} instead of []byte(nil) so that we never end up
> -			// with a nil result.
> -			out.SetBytes(append([]byte{}, in.Bytes()...))
> -			return
> -		}
> -		n := in.Len()
> -		if out.IsNil() {
> -			out.Set(reflect.MakeSlice(in.Type(), 0, n))
> -		}
> -		switch in.Type().Elem().Kind() {
> -		case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,
> -			reflect.String, reflect.Uint32, reflect.Uint64:
> -			out.Set(reflect.AppendSlice(out, in))
> -		default:
> -			for i := 0; i < n; i++ {
> -				x := reflect.Indirect(reflect.New(in.Type().Elem()))
> -				mergeAny(x, in.Index(i), false, nil)
> -				out.Set(reflect.Append(out, x))
> -			}
> -		}
> -	case reflect.Struct:
> -		mergeStruct(out, in)
> -	default:
> -		// unknown type, so not a protocol buffer
> -		log.Printf("proto: don't know how to copy %v", in)
> -	}
> -}
> -
> -func mergeExtension(out, in map[int32]Extension) {
> -	for extNum, eIn := range in {
> -		eOut := Extension{desc: eIn.desc}
> -		if eIn.value != nil {
> -			v := reflect.New(reflect.TypeOf(eIn.value)).Elem()
> -			mergeAny(v, reflect.ValueOf(eIn.value), false, nil)
> -			eOut.value = v.Interface()
> -		}
> -		if eIn.enc != nil {
> -			eOut.enc = make([]byte, len(eIn.enc))
> -			copy(eOut.enc, eIn.enc)
> -		}
> -
> -		out[extNum] = eOut
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/clone_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/clone_test.go
> deleted file mode 100644
> index f607ff49..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/clone_test.go
> +++ /dev/null
> @@ -1,300 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2011 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto_test
> -
> -import (
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -
> -	proto3pb "github.com/golang/protobuf/proto/proto3_proto"
> -	pb "github.com/golang/protobuf/proto/testdata"
> -)
> -
> -var cloneTestMessage = &pb.MyMessage{
> -	Count: proto.Int32(42),
> -	Name:  proto.String("Dave"),
> -	Pet:   []string{"bunny", "kitty", "horsey"},
> -	Inner: &pb.InnerMessage{
> -		Host:      proto.String("niles"),
> -		Port:      proto.Int32(9099),
> -		Connected: proto.Bool(true),
> -	},
> -	Others: []*pb.OtherMessage{
> -		{
> -			Value: []byte("some bytes"),
> -		},
> -	},
> -	Somegroup: &pb.MyMessage_SomeGroup{
> -		GroupField: proto.Int32(6),
> -	},
> -	RepBytes: [][]byte{[]byte("sham"), []byte("wow")},
> -}
> -
> -func init() {
> -	ext := &pb.Ext{
> -		Data: proto.String("extension"),
> -	}
> -	if err := proto.SetExtension(cloneTestMessage, pb.E_Ext_More, ext); err != nil {
> -		panic("SetExtension: " + err.Error())
> -	}
> -}
> -
> -func TestClone(t *testing.T) {
> -	m := proto.Clone(cloneTestMessage).(*pb.MyMessage)
> -	if !proto.Equal(m, cloneTestMessage) {
> -		t.Errorf("Clone(%v) = %v", cloneTestMessage, m)
> -	}
> -
> -	// Verify it was a deep copy.
> -	*m.Inner.Port++
> -	if proto.Equal(m, cloneTestMessage) {
> -		t.Error("Mutating clone changed the original")
> -	}
> -	// Byte fields and repeated fields should be copied.
> -	if &m.Pet[0] == &cloneTestMessage.Pet[0] {
> -		t.Error("Pet: repeated field not copied")
> -	}
> -	if &m.Others[0] == &cloneTestMessage.Others[0] {
> -		t.Error("Others: repeated field not copied")
> -	}
> -	if &m.Others[0].Value[0] == &cloneTestMessage.Others[0].Value[0] {
> -		t.Error("Others[0].Value: bytes field not copied")
> -	}
> -	if &m.RepBytes[0] == &cloneTestMessage.RepBytes[0] {
> -		t.Error("RepBytes: repeated field not copied")
> -	}
> -	if &m.RepBytes[0][0] == &cloneTestMessage.RepBytes[0][0] {
> -		t.Error("RepBytes[0]: bytes field not copied")
> -	}
> -}
> -
> -func TestCloneNil(t *testing.T) {
> -	var m *pb.MyMessage
> -	if c := proto.Clone(m); !proto.Equal(m, c) {
> -		t.Errorf("Clone(%v) = %v", m, c)
> -	}
> -}
> -
> -var mergeTests = []struct {
> -	src, dst, want proto.Message
> -}{
> -	{
> -		src: &pb.MyMessage{
> -			Count: proto.Int32(42),
> -		},
> -		dst: &pb.MyMessage{
> -			Name: proto.String("Dave"),
> -		},
> -		want: &pb.MyMessage{
> -			Count: proto.Int32(42),
> -			Name:  proto.String("Dave"),
> -		},
> -	},
> -	{
> -		src: &pb.MyMessage{
> -			Inner: &pb.InnerMessage{
> -				Host:      proto.String("hey"),
> -				Connected: proto.Bool(true),
> -			},
> -			Pet: []string{"horsey"},
> -			Others: []*pb.OtherMessage{
> -				{
> -					Value: []byte("some bytes"),
> -				},
> -			},
> -		},
> -		dst: &pb.MyMessage{
> -			Inner: &pb.InnerMessage{
> -				Host: proto.String("niles"),
> -				Port: proto.Int32(9099),
> -			},
> -			Pet: []string{"bunny", "kitty"},
> -			Others: []*pb.OtherMessage{
> -				{
> -					Key: proto.Int64(31415926535),
> -				},
> -				{
> -					// Explicitly test a src=nil field
> -					Inner: nil,
> -				},
> -			},
> -		},
> -		want: &pb.MyMessage{
> -			Inner: &pb.InnerMessage{
> -				Host:      proto.String("hey"),
> -				Connected: proto.Bool(true),
> -				Port:      proto.Int32(9099),
> -			},
> -			Pet: []string{"bunny", "kitty", "horsey"},
> -			Others: []*pb.OtherMessage{
> -				{
> -					Key: proto.Int64(31415926535),
> -				},
> -				{},
> -				{
> -					Value: []byte("some bytes"),
> -				},
> -			},
> -		},
> -	},
> -	{
> -		src: &pb.MyMessage{
> -			RepBytes: [][]byte{[]byte("wow")},
> -		},
> -		dst: &pb.MyMessage{
> -			Somegroup: &pb.MyMessage_SomeGroup{
> -				GroupField: proto.Int32(6),
> -			},
> -			RepBytes: [][]byte{[]byte("sham")},
> -		},
> -		want: &pb.MyMessage{
> -			Somegroup: &pb.MyMessage_SomeGroup{
> -				GroupField: proto.Int32(6),
> -			},
> -			RepBytes: [][]byte{[]byte("sham"), []byte("wow")},
> -		},
> -	},
> -	// Check that a scalar bytes field replaces rather than appends.
> -	{
> -		src:  &pb.OtherMessage{Value: []byte("foo")},
> -		dst:  &pb.OtherMessage{Value: []byte("bar")},
> -		want: &pb.OtherMessage{Value: []byte("foo")},
> -	},
> -	{
> -		src: &pb.MessageWithMap{
> -			NameMapping: map[int32]string{6: "Nigel"},
> -			MsgMapping: map[int64]*pb.FloatingPoint{
> -				0x4001: &pb.FloatingPoint{F: proto.Float64(2.0)},
> -				0x4002: &pb.FloatingPoint{
> -					F: proto.Float64(2.0),
> -				},
> -			},
> -			ByteMapping: map[bool][]byte{true: []byte("wowsa")},
> -		},
> -		dst: &pb.MessageWithMap{
> -			NameMapping: map[int32]string{
> -				6: "Bruce", // should be overwritten
> -				7: "Andrew",
> -			},
> -			MsgMapping: map[int64]*pb.FloatingPoint{
> -				0x4002: &pb.FloatingPoint{
> -					F:     proto.Float64(3.0),
> -					Exact: proto.Bool(true),
> -				}, // the entire message should be overwritten
> -			},
> -		},
> -		want: &pb.MessageWithMap{
> -			NameMapping: map[int32]string{
> -				6: "Nigel",
> -				7: "Andrew",
> -			},
> -			MsgMapping: map[int64]*pb.FloatingPoint{
> -				0x4001: &pb.FloatingPoint{F: proto.Float64(2.0)},
> -				0x4002: &pb.FloatingPoint{
> -					F: proto.Float64(2.0),
> -				},
> -			},
> -			ByteMapping: map[bool][]byte{true: []byte("wowsa")},
> -		},
> -	},
> -	// proto3 shouldn't merge zero values,
> -	// in the same way that proto2 shouldn't merge nils.
> -	{
> -		src: &proto3pb.Message{
> -			Name: "Aaron",
> -			Data: []byte(""), // zero value, but not nil
> -		},
> -		dst: &proto3pb.Message{
> -			HeightInCm: 176,
> -			Data:       []byte("texas!"),
> -		},
> -		want: &proto3pb.Message{
> -			Name:       "Aaron",
> -			HeightInCm: 176,
> -			Data:       []byte("texas!"),
> -		},
> -	},
> -	// Oneof fields should merge by assignment.
> -	{
> -		src: &pb.Communique{
> -			Union: &pb.Communique_Number{41},
> -		},
> -		dst: &pb.Communique{
> -			Union: &pb.Communique_Name{"Bobby Tables"},
> -		},
> -		want: &pb.Communique{
> -			Union: &pb.Communique_Number{41},
> -		},
> -	},
> -	// Oneof nil is the same as not set.
> -	{
> -		src: &pb.Communique{},
> -		dst: &pb.Communique{
> -			Union: &pb.Communique_Name{"Bobby Tables"},
> -		},
> -		want: &pb.Communique{
> -			Union: &pb.Communique_Name{"Bobby Tables"},
> -		},
> -	},
> -	{
> -		src: &proto3pb.Message{
> -			Terrain: map[string]*proto3pb.Nested{
> -				"kay_a": &proto3pb.Nested{Cute: true},      // replace
> -				"kay_b": &proto3pb.Nested{Bunny: "rabbit"}, // insert
> -			},
> -		},
> -		dst: &proto3pb.Message{
> -			Terrain: map[string]*proto3pb.Nested{
> -				"kay_a": &proto3pb.Nested{Bunny: "lost"},  // replaced
> -				"kay_c": &proto3pb.Nested{Bunny: "bunny"}, // keep
> -			},
> -		},
> -		want: &proto3pb.Message{
> -			Terrain: map[string]*proto3pb.Nested{
> -				"kay_a": &proto3pb.Nested{Cute: true},
> -				"kay_b": &proto3pb.Nested{Bunny: "rabbit"},
> -				"kay_c": &proto3pb.Nested{Bunny: "bunny"},
> -			},
> -		},
> -	},
> -}
> -
> -func TestMerge(t *testing.T) {
> -	for _, m := range mergeTests {
> -		got := proto.Clone(m.dst)
> -		proto.Merge(got, m.src)
> -		if !proto.Equal(got, m.want) {
> -			t.Errorf("Merge(%v, %v)\n got %v\nwant %v\n", m.dst, m.src, got, m.want)
> -		}
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/decode.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/decode.go
> deleted file mode 100644
> index aa207298..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/decode.go
> +++ /dev/null
> @@ -1,970 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto
> -
> -/*
> - * Routines for decoding protocol buffer data to construct in-memory representations.
> - */
> -
> -import (
> -	"errors"
> -	"fmt"
> -	"io"
> -	"os"
> -	"reflect"
> -)
> -
> -// errOverflow is returned when an integer is too large to be represented.
> -var errOverflow = errors.New("proto: integer overflow")
> -
> -// ErrInternalBadWireType is returned by generated code when an incorrect
> -// wire type is encountered. It does not get returned to user code.
> -var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof")
> -
> -// The fundamental decoders that interpret bytes on the wire.
> -// Those that take integer types all return uint64 and are
> -// therefore of type valueDecoder.
> -
> -// DecodeVarint reads a varint-encoded integer from the slice.
> -// It returns the integer and the number of bytes consumed, or
> -// zero if there is not enough.
> -// This is the format for the
> -// int32, int64, uint32, uint64, bool, and enum
> -// protocol buffer types.
> -func DecodeVarint(buf []byte) (x uint64, n int) {
> -	for shift := uint(0); shift < 64; shift += 7 {
> -		if n >= len(buf) {
> -			return 0, 0
> -		}
> -		b := uint64(buf[n])
> -		n++
> -		x |= (b & 0x7F) << shift
> -		if (b & 0x80) == 0 {
> -			return x, n
> -		}
> -	}
> -
> -	// The number is too large to represent in a 64-bit value.
> -	return 0, 0
> -}
> -
> -func (p *Buffer) decodeVarintSlow() (x uint64, err error) {
> -	i := p.index
> -	l := len(p.buf)
> -
> -	for shift := uint(0); shift < 64; shift += 7 {
> -		if i >= l {
> -			err = io.ErrUnexpectedEOF
> -			return
> -		}
> -		b := p.buf[i]
> -		i++
> -		x |= (uint64(b) & 0x7F) << shift
> -		if b < 0x80 {
> -			p.index = i
> -			return
> -		}
> -	}
> -
> -	// The number is too large to represent in a 64-bit value.
> -	err = errOverflow
> -	return
> -}
> -
> -// DecodeVarint reads a varint-encoded integer from the Buffer.
> -// This is the format for the
> -// int32, int64, uint32, uint64, bool, and enum
> -// protocol buffer types.
> -func (p *Buffer) DecodeVarint() (x uint64, err error) {
> -	i := p.index
> -	buf := p.buf
> -
> -	if i >= len(buf) {
> -		return 0, io.ErrUnexpectedEOF
> -	} else if buf[i] < 0x80 {
> -		p.index++
> -		return uint64(buf[i]), nil
> -	} else if len(buf)-i < 10 {
> -		return p.decodeVarintSlow()
> -	}
> -
> -	var b uint64
> -	// we already checked the first byte
> -	x = uint64(buf[i]) - 0x80
> -	i++
> -
> -	b = uint64(buf[i])
> -	i++
> -	x += b << 7
> -	if b&0x80 == 0 {
> -		goto done
> -	}
> -	x -= 0x80 << 7
> -
> -	b = uint64(buf[i])
> -	i++
> -	x += b << 14
> -	if b&0x80 == 0 {
> -		goto done
> -	}
> -	x -= 0x80 << 14
> -
> -	b = uint64(buf[i])
> -	i++
> -	x += b << 21
> -	if b&0x80 == 0 {
> -		goto done
> -	}
> -	x -= 0x80 << 21
> -
> -	b = uint64(buf[i])
> -	i++
> -	x += b << 28
> -	if b&0x80 == 0 {
> -		goto done
> -	}
> -	x -= 0x80 << 28
> -
> -	b = uint64(buf[i])
> -	i++
> -	x += b << 35
> -	if b&0x80 == 0 {
> -		goto done
> -	}
> -	x -= 0x80 << 35
> -
> -	b = uint64(buf[i])
> -	i++
> -	x += b << 42
> -	if b&0x80 == 0 {
> -		goto done
> -	}
> -	x -= 0x80 << 42
> -
> -	b = uint64(buf[i])
> -	i++
> -	x += b << 49
> -	if b&0x80 == 0 {
> -		goto done
> -	}
> -	x -= 0x80 << 49
> -
> -	b = uint64(buf[i])
> -	i++
> -	x += b << 56
> -	if b&0x80 == 0 {
> -		goto done
> -	}
> -	x -= 0x80 << 56
> -
> -	b = uint64(buf[i])
> -	i++
> -	x += b << 63
> -	if b&0x80 == 0 {
> -		goto done
> -	}
> -	// x -= 0x80 << 63 // Always zero.
> -
> -	return 0, errOverflow
> -
> -done:
> -	p.index = i
> -	return x, nil
> -}
> -
> -// DecodeFixed64 reads a 64-bit integer from the Buffer.
> -// This is the format for the
> -// fixed64, sfixed64, and double protocol buffer types.
> -func (p *Buffer) DecodeFixed64() (x uint64, err error) {
> -	// x, err already 0
> -	i := p.index + 8
> -	if i < 0 || i > len(p.buf) {
> -		err = io.ErrUnexpectedEOF
> -		return
> -	}
> -	p.index = i
> -
> -	x = uint64(p.buf[i-8])
> -	x |= uint64(p.buf[i-7]) << 8
> -	x |= uint64(p.buf[i-6]) << 16
> -	x |= uint64(p.buf[i-5]) << 24
> -	x |= uint64(p.buf[i-4]) << 32
> -	x |= uint64(p.buf[i-3]) << 40
> -	x |= uint64(p.buf[i-2]) << 48
> -	x |= uint64(p.buf[i-1]) << 56
> -	return
> -}
> -
> -// DecodeFixed32 reads a 32-bit integer from the Buffer.
> -// This is the format for the
> -// fixed32, sfixed32, and float protocol buffer types.
> -func (p *Buffer) DecodeFixed32() (x uint64, err error) {
> -	// x, err already 0
> -	i := p.index + 4
> -	if i < 0 || i > len(p.buf) {
> -		err = io.ErrUnexpectedEOF
> -		return
> -	}
> -	p.index = i
> -
> -	x = uint64(p.buf[i-4])
> -	x |= uint64(p.buf[i-3]) << 8
> -	x |= uint64(p.buf[i-2]) << 16
> -	x |= uint64(p.buf[i-1]) << 24
> -	return
> -}
> -
> -// DecodeZigzag64 reads a zigzag-encoded 64-bit integer
> -// from the Buffer.
> -// This is the format used for the sint64 protocol buffer type.
> -func (p *Buffer) DecodeZigzag64() (x uint64, err error) {
> -	x, err = p.DecodeVarint()
> -	if err != nil {
> -		return
> -	}
> -	x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63)
> -	return
> -}
> -
> -// DecodeZigzag32 reads a zigzag-encoded 32-bit integer
> -// from  the Buffer.
> -// This is the format used for the sint32 protocol buffer type.
> -func (p *Buffer) DecodeZigzag32() (x uint64, err error) {
> -	x, err = p.DecodeVarint()
> -	if err != nil {
> -		return
> -	}
> -	x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31))
> -	return
> -}
> -
> -// These are not ValueDecoders: they produce an array of bytes or a string.
> -// bytes, embedded messages
> -
> -// DecodeRawBytes reads a count-delimited byte buffer from the Buffer.
> -// This is the format used for the bytes protocol buffer
> -// type and for embedded messages.
> -func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) {
> -	n, err := p.DecodeVarint()
> -	if err != nil {
> -		return nil, err
> -	}
> -
> -	nb := int(n)
> -	if nb < 0 {
> -		return nil, fmt.Errorf("proto: bad byte length %d", nb)
> -	}
> -	end := p.index + nb
> -	if end < p.index || end > len(p.buf) {
> -		return nil, io.ErrUnexpectedEOF
> -	}
> -
> -	if !alloc {
> -		// todo: check if can get more uses of alloc=false
> -		buf = p.buf[p.index:end]
> -		p.index += nb
> -		return
> -	}
> -
> -	buf = make([]byte, nb)
> -	copy(buf, p.buf[p.index:])
> -	p.index += nb
> -	return
> -}
> -
> -// DecodeStringBytes reads an encoded string from the Buffer.
> -// This is the format used for the proto2 string type.
> -func (p *Buffer) DecodeStringBytes() (s string, err error) {
> -	buf, err := p.DecodeRawBytes(false)
> -	if err != nil {
> -		return
> -	}
> -	return string(buf), nil
> -}
> -
> -// Skip the next item in the buffer. Its wire type is decoded and presented as an argument.
> -// If the protocol buffer has extensions, and the field matches, add it as an extension.
> -// Otherwise, if the XXX_unrecognized field exists, append the skipped data there.
> -func (o *Buffer) skipAndSave(t reflect.Type, tag, wire int, base structPointer, unrecField field) error {
> -	oi := o.index
> -
> -	err := o.skip(t, tag, wire)
> -	if err != nil {
> -		return err
> -	}
> -
> -	if !unrecField.IsValid() {
> -		return nil
> -	}
> -
> -	ptr := structPointer_Bytes(base, unrecField)
> -
> -	// Add the skipped field to struct field
> -	obuf := o.buf
> -
> -	o.buf = *ptr
> -	o.EncodeVarint(uint64(tag<<3 | wire))
> -	*ptr = append(o.buf, obuf[oi:o.index]...)
> -
> -	o.buf = obuf
> -
> -	return nil
> -}
> -
> -// Skip the next item in the buffer. Its wire type is decoded and presented as an argument.
> -func (o *Buffer) skip(t reflect.Type, tag, wire int) error {
> -
> -	var u uint64
> -	var err error
> -
> -	switch wire {
> -	case WireVarint:
> -		_, err = o.DecodeVarint()
> -	case WireFixed64:
> -		_, err = o.DecodeFixed64()
> -	case WireBytes:
> -		_, err = o.DecodeRawBytes(false)
> -	case WireFixed32:
> -		_, err = o.DecodeFixed32()
> -	case WireStartGroup:
> -		for {
> -			u, err = o.DecodeVarint()
> -			if err != nil {
> -				break
> -			}
> -			fwire := int(u & 0x7)
> -			if fwire == WireEndGroup {
> -				break
> -			}
> -			ftag := int(u >> 3)
> -			err = o.skip(t, ftag, fwire)
> -			if err != nil {
> -				break
> -			}
> -		}
> -	default:
> -		err = fmt.Errorf("proto: can't skip unknown wire type %d for %s", wire, t)
> -	}
> -	return err
> -}
> -
> -// Unmarshaler is the interface representing objects that can
> -// unmarshal themselves.  The method should reset the receiver before
> -// decoding starts.  The argument points to data that may be
> -// overwritten, so implementations should not keep references to the
> -// buffer.
> -type Unmarshaler interface {
> -	Unmarshal([]byte) error
> -}
> -
> -// Unmarshal parses the protocol buffer representation in buf and places the
> -// decoded result in pb.  If the struct underlying pb does not match
> -// the data in buf, the results can be unpredictable.
> -//
> -// Unmarshal resets pb before starting to unmarshal, so any
> -// existing data in pb is always removed. Use UnmarshalMerge
> -// to preserve and append to existing data.
> -func Unmarshal(buf []byte, pb Message) error {
> -	pb.Reset()
> -	return UnmarshalMerge(buf, pb)
> -}
> -
> -// UnmarshalMerge parses the protocol buffer representation in buf and
> -// writes the decoded result to pb.  If the struct underlying pb does not match
> -// the data in buf, the results can be unpredictable.
> -//
> -// UnmarshalMerge merges into existing data in pb.
> -// Most code should use Unmarshal instead.
> -func UnmarshalMerge(buf []byte, pb Message) error {
> -	// If the object can unmarshal itself, let it.
> -	if u, ok := pb.(Unmarshaler); ok {
> -		return u.Unmarshal(buf)
> -	}
> -	return NewBuffer(buf).Unmarshal(pb)
> -}
> -
> -// DecodeMessage reads a count-delimited message from the Buffer.
> -func (p *Buffer) DecodeMessage(pb Message) error {
> -	enc, err := p.DecodeRawBytes(false)
> -	if err != nil {
> -		return err
> -	}
> -	return NewBuffer(enc).Unmarshal(pb)
> -}
> -
> -// DecodeGroup reads a tag-delimited group from the Buffer.
> -func (p *Buffer) DecodeGroup(pb Message) error {
> -	typ, base, err := getbase(pb)
> -	if err != nil {
> -		return err
> -	}
> -	return p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), true, base)
> -}
> -
> -// Unmarshal parses the protocol buffer representation in the
> -// Buffer and places the decoded result in pb.  If the struct
> -// underlying pb does not match the data in the buffer, the results can be
> -// unpredictable.
> -//
> -// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal.
> -func (p *Buffer) Unmarshal(pb Message) error {
> -	// If the object can unmarshal itself, let it.
> -	if u, ok := pb.(Unmarshaler); ok {
> -		err := u.Unmarshal(p.buf[p.index:])
> -		p.index = len(p.buf)
> -		return err
> -	}
> -
> -	typ, base, err := getbase(pb)
> -	if err != nil {
> -		return err
> -	}
> -
> -	err = p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), false, base)
> -
> -	if collectStats {
> -		stats.Decode++
> -	}
> -
> -	return err
> -}
> -
> -// unmarshalType does the work of unmarshaling a structure.
> -func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, is_group bool, base structPointer) error {
> -	var state errorState
> -	required, reqFields := prop.reqCount, uint64(0)
> -
> -	var err error
> -	for err == nil && o.index < len(o.buf) {
> -		oi := o.index
> -		var u uint64
> -		u, err = o.DecodeVarint()
> -		if err != nil {
> -			break
> -		}
> -		wire := int(u & 0x7)
> -		if wire == WireEndGroup {
> -			if is_group {
> -				if required > 0 {
> -					// Not enough information to determine the exact field.
> -					// (See below.)
> -					return &RequiredNotSetError{"{Unknown}"}
> -				}
> -				return nil // input is satisfied
> -			}
> -			return fmt.Errorf("proto: %s: wiretype end group for non-group", st)
> -		}
> -		tag := int(u >> 3)
> -		if tag <= 0 {
> -			return fmt.Errorf("proto: %s: illegal tag %d (wire type %d)", st, tag, wire)
> -		}
> -		fieldnum, ok := prop.decoderTags.get(tag)
> -		if !ok {
> -			// Maybe it's an extension?
> -			if prop.extendable {
> -				if e, _ := extendable(structPointer_Interface(base, st)); isExtensionField(e, int32(tag)) {
> -					if err = o.skip(st, tag, wire); err == nil {
> -						extmap := e.extensionsWrite()
> -						ext := extmap[int32(tag)] // may be missing
> -						ext.enc = append(ext.enc, o.buf[oi:o.index]...)
> -						extmap[int32(tag)] = ext
> -					}
> -					continue
> -				}
> -			}
> -			// Maybe it's a oneof?
> -			if prop.oneofUnmarshaler != nil {
> -				m := structPointer_Interface(base, st).(Message)
> -				// First return value indicates whether tag is a oneof field.
> -				ok, err = prop.oneofUnmarshaler(m, tag, wire, o)
> -				if err == ErrInternalBadWireType {
> -					// Map the error to something more descriptive.
> -					// Do the formatting here to save generated code space.
> -					err = fmt.Errorf("bad wiretype for oneof field in %T", m)
> -				}
> -				if ok {
> -					continue
> -				}
> -			}
> -			err = o.skipAndSave(st, tag, wire, base, prop.unrecField)
> -			continue
> -		}
> -		p := prop.Prop[fieldnum]
> -
> -		if p.dec == nil {
> -			fmt.Fprintf(os.Stderr, "proto: no protobuf decoder for %s.%s\n", st, st.Field(fieldnum).Name)
> -			continue
> -		}
> -		dec := p.dec
> -		if wire != WireStartGroup && wire != p.WireType {
> -			if wire == WireBytes && p.packedDec != nil {
> -				// a packable field
> -				dec = p.packedDec
> -			} else {
> -				err = fmt.Errorf("proto: bad wiretype for field %s.%s: got wiretype %d, want %d", st, st.Field(fieldnum).Name, wire, p.WireType)
> -				continue
> -			}
> -		}
> -		decErr := dec(o, p, base)
> -		if decErr != nil && !state.shouldContinue(decErr, p) {
> -			err = decErr
> -		}
> -		if err == nil && p.Required {
> -			// Successfully decoded a required field.
> -			if tag <= 64 {
> -				// use bitmap for fields 1-64 to catch field reuse.
> -				var mask uint64 = 1 << uint64(tag-1)
> -				if reqFields&mask == 0 {
> -					// new required field
> -					reqFields |= mask
> -					required--
> -				}
> -			} else {
> -				// This is imprecise. It can be fooled by a required field
> -				// with a tag > 64 that is encoded twice; that's very rare.
> -				// A fully correct implementation would require allocating
> -				// a data structure, which we would like to avoid.
> -				required--
> -			}
> -		}
> -	}
> -	if err == nil {
> -		if is_group {
> -			return io.ErrUnexpectedEOF
> -		}
> -		if state.err != nil {
> -			return state.err
> -		}
> -		if required > 0 {
> -			// Not enough information to determine the exact field. If we use extra
> -			// CPU, we could determine the field only if the missing required field
> -			// has a tag <= 64 and we check reqFields.
> -			return &RequiredNotSetError{"{Unknown}"}
> -		}
> -	}
> -	return err
> -}
> -
> -// Individual type decoders
> -// For each,
> -//	u is the decoded value,
> -//	v is a pointer to the field (pointer) in the struct
> -
> -// Sizes of the pools to allocate inside the Buffer.
> -// The goal is modest amortization and allocation
> -// on at least 16-byte boundaries.
> -const (
> -	boolPoolSize   = 16
> -	uint32PoolSize = 8
> -	uint64PoolSize = 4
> -)
> -
> -// Decode a bool.
> -func (o *Buffer) dec_bool(p *Properties, base structPointer) error {
> -	u, err := p.valDec(o)
> -	if err != nil {
> -		return err
> -	}
> -	if len(o.bools) == 0 {
> -		o.bools = make([]bool, boolPoolSize)
> -	}
> -	o.bools[0] = u != 0
> -	*structPointer_Bool(base, p.field) = &o.bools[0]
> -	o.bools = o.bools[1:]
> -	return nil
> -}
> -
> -func (o *Buffer) dec_proto3_bool(p *Properties, base structPointer) error {
> -	u, err := p.valDec(o)
> -	if err != nil {
> -		return err
> -	}
> -	*structPointer_BoolVal(base, p.field) = u != 0
> -	return nil
> -}
> -
> -// Decode an int32.
> -func (o *Buffer) dec_int32(p *Properties, base structPointer) error {
> -	u, err := p.valDec(o)
> -	if err != nil {
> -		return err
> -	}
> -	word32_Set(structPointer_Word32(base, p.field), o, uint32(u))
> -	return nil
> -}
> -
> -func (o *Buffer) dec_proto3_int32(p *Properties, base structPointer) error {
> -	u, err := p.valDec(o)
> -	if err != nil {
> -		return err
> -	}
> -	word32Val_Set(structPointer_Word32Val(base, p.field), uint32(u))
> -	return nil
> -}
> -
> -// Decode an int64.
> -func (o *Buffer) dec_int64(p *Properties, base structPointer) error {
> -	u, err := p.valDec(o)
> -	if err != nil {
> -		return err
> -	}
> -	word64_Set(structPointer_Word64(base, p.field), o, u)
> -	return nil
> -}
> -
> -func (o *Buffer) dec_proto3_int64(p *Properties, base structPointer) error {
> -	u, err := p.valDec(o)
> -	if err != nil {
> -		return err
> -	}
> -	word64Val_Set(structPointer_Word64Val(base, p.field), o, u)
> -	return nil
> -}
> -
> -// Decode a string.
> -func (o *Buffer) dec_string(p *Properties, base structPointer) error {
> -	s, err := o.DecodeStringBytes()
> -	if err != nil {
> -		return err
> -	}
> -	*structPointer_String(base, p.field) = &s
> -	return nil
> -}
> -
> -func (o *Buffer) dec_proto3_string(p *Properties, base structPointer) error {
> -	s, err := o.DecodeStringBytes()
> -	if err != nil {
> -		return err
> -	}
> -	*structPointer_StringVal(base, p.field) = s
> -	return nil
> -}
> -
> -// Decode a slice of bytes ([]byte).
> -func (o *Buffer) dec_slice_byte(p *Properties, base structPointer) error {
> -	b, err := o.DecodeRawBytes(true)
> -	if err != nil {
> -		return err
> -	}
> -	*structPointer_Bytes(base, p.field) = b
> -	return nil
> -}
> -
> -// Decode a slice of bools ([]bool).
> -func (o *Buffer) dec_slice_bool(p *Properties, base structPointer) error {
> -	u, err := p.valDec(o)
> -	if err != nil {
> -		return err
> -	}
> -	v := structPointer_BoolSlice(base, p.field)
> -	*v = append(*v, u != 0)
> -	return nil
> -}
> -
> -// Decode a slice of bools ([]bool) in packed format.
> -func (o *Buffer) dec_slice_packed_bool(p *Properties, base structPointer) error {
> -	v := structPointer_BoolSlice(base, p.field)
> -
> -	nn, err := o.DecodeVarint()
> -	if err != nil {
> -		return err
> -	}
> -	nb := int(nn) // number of bytes of encoded bools
> -	fin := o.index + nb
> -	if fin < o.index {
> -		return errOverflow
> -	}
> -
> -	y := *v
> -	for o.index < fin {
> -		u, err := p.valDec(o)
> -		if err != nil {
> -			return err
> -		}
> -		y = append(y, u != 0)
> -	}
> -
> -	*v = y
> -	return nil
> -}
> -
> -// Decode a slice of int32s ([]int32).
> -func (o *Buffer) dec_slice_int32(p *Properties, base structPointer) error {
> -	u, err := p.valDec(o)
> -	if err != nil {
> -		return err
> -	}
> -	structPointer_Word32Slice(base, p.field).Append(uint32(u))
> -	return nil
> -}
> -
> -// Decode a slice of int32s ([]int32) in packed format.
> -func (o *Buffer) dec_slice_packed_int32(p *Properties, base structPointer) error {
> -	v := structPointer_Word32Slice(base, p.field)
> -
> -	nn, err := o.DecodeVarint()
> -	if err != nil {
> -		return err
> -	}
> -	nb := int(nn) // number of bytes of encoded int32s
> -
> -	fin := o.index + nb
> -	if fin < o.index {
> -		return errOverflow
> -	}
> -	for o.index < fin {
> -		u, err := p.valDec(o)
> -		if err != nil {
> -			return err
> -		}
> -		v.Append(uint32(u))
> -	}
> -	return nil
> -}
> -
> -// Decode a slice of int64s ([]int64).
> -func (o *Buffer) dec_slice_int64(p *Properties, base structPointer) error {
> -	u, err := p.valDec(o)
> -	if err != nil {
> -		return err
> -	}
> -
> -	structPointer_Word64Slice(base, p.field).Append(u)
> -	return nil
> -}
> -
> -// Decode a slice of int64s ([]int64) in packed format.
> -func (o *Buffer) dec_slice_packed_int64(p *Properties, base structPointer) error {
> -	v := structPointer_Word64Slice(base, p.field)
> -
> -	nn, err := o.DecodeVarint()
> -	if err != nil {
> -		return err
> -	}
> -	nb := int(nn) // number of bytes of encoded int64s
> -
> -	fin := o.index + nb
> -	if fin < o.index {
> -		return errOverflow
> -	}
> -	for o.index < fin {
> -		u, err := p.valDec(o)
> -		if err != nil {
> -			return err
> -		}
> -		v.Append(u)
> -	}
> -	return nil
> -}
> -
> -// Decode a slice of strings ([]string).
> -func (o *Buffer) dec_slice_string(p *Properties, base structPointer) error {
> -	s, err := o.DecodeStringBytes()
> -	if err != nil {
> -		return err
> -	}
> -	v := structPointer_StringSlice(base, p.field)
> -	*v = append(*v, s)
> -	return nil
> -}
> -
> -// Decode a slice of slice of bytes ([][]byte).
> -func (o *Buffer) dec_slice_slice_byte(p *Properties, base structPointer) error {
> -	b, err := o.DecodeRawBytes(true)
> -	if err != nil {
> -		return err
> -	}
> -	v := structPointer_BytesSlice(base, p.field)
> -	*v = append(*v, b)
> -	return nil
> -}
> -
> -// Decode a map field.
> -func (o *Buffer) dec_new_map(p *Properties, base structPointer) error {
> -	raw, err := o.DecodeRawBytes(false)
> -	if err != nil {
> -		return err
> -	}
> -	oi := o.index       // index at the end of this map entry
> -	o.index -= len(raw) // move buffer back to start of map entry
> -
> -	mptr := structPointer_NewAt(base, p.field, p.mtype) // *map[K]V
> -	if mptr.Elem().IsNil() {
> -		mptr.Elem().Set(reflect.MakeMap(mptr.Type().Elem()))
> -	}
> -	v := mptr.Elem() // map[K]V
> -
> -	// Prepare addressable doubly-indirect placeholders for the key and value types.
> -	// See enc_new_map for why.
> -	keyptr := reflect.New(reflect.PtrTo(p.mtype.Key())).Elem() // addressable *K
> -	keybase := toStructPointer(keyptr.Addr())                  // **K
> -
> -	var valbase structPointer
> -	var valptr reflect.Value
> -	switch p.mtype.Elem().Kind() {
> -	case reflect.Slice:
> -		// []byte
> -		var dummy []byte
> -		valptr = reflect.ValueOf(&dummy)  // *[]byte
> -		valbase = toStructPointer(valptr) // *[]byte
> -	case reflect.Ptr:
> -		// message; valptr is **Msg; need to allocate the intermediate pointer
> -		valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V
> -		valptr.Set(reflect.New(valptr.Type().Elem()))
> -		valbase = toStructPointer(valptr)
> -	default:
> -		// everything else
> -		valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V
> -		valbase = toStructPointer(valptr.Addr())                   // **V
> -	}
> -
> -	// Decode.
> -	// This parses a restricted wire format, namely the encoding of a message
> -	// with two fields. See enc_new_map for the format.
> -	for o.index < oi {
> -		// tagcode for key and value properties are always a single byte
> -		// because they have tags 1 and 2.
> -		tagcode := o.buf[o.index]
> -		o.index++
> -		switch tagcode {
> -		case p.mkeyprop.tagcode[0]:
> -			if err := p.mkeyprop.dec(o, p.mkeyprop, keybase); err != nil {
> -				return err
> -			}
> -		case p.mvalprop.tagcode[0]:
> -			if err := p.mvalprop.dec(o, p.mvalprop, valbase); err != nil {
> -				return err
> -			}
> -		default:
> -			// TODO: Should we silently skip this instead?
> -			return fmt.Errorf("proto: bad map data tag %d", raw[0])
> -		}
> -	}
> -	keyelem, valelem := keyptr.Elem(), valptr.Elem()
> -	if !keyelem.IsValid() {
> -		keyelem = reflect.Zero(p.mtype.Key())
> -	}
> -	if !valelem.IsValid() {
> -		valelem = reflect.Zero(p.mtype.Elem())
> -	}
> -
> -	v.SetMapIndex(keyelem, valelem)
> -	return nil
> -}
> -
> -// Decode a group.
> -func (o *Buffer) dec_struct_group(p *Properties, base structPointer) error {
> -	bas := structPointer_GetStructPointer(base, p.field)
> -	if structPointer_IsNil(bas) {
> -		// allocate new nested message
> -		bas = toStructPointer(reflect.New(p.stype))
> -		structPointer_SetStructPointer(base, p.field, bas)
> -	}
> -	return o.unmarshalType(p.stype, p.sprop, true, bas)
> -}
> -
> -// Decode an embedded message.
> -func (o *Buffer) dec_struct_message(p *Properties, base structPointer) (err error) {
> -	raw, e := o.DecodeRawBytes(false)
> -	if e != nil {
> -		return e
> -	}
> -
> -	bas := structPointer_GetStructPointer(base, p.field)
> -	if structPointer_IsNil(bas) {
> -		// allocate new nested message
> -		bas = toStructPointer(reflect.New(p.stype))
> -		structPointer_SetStructPointer(base, p.field, bas)
> -	}
> -
> -	// If the object can unmarshal itself, let it.
> -	if p.isUnmarshaler {
> -		iv := structPointer_Interface(bas, p.stype)
> -		return iv.(Unmarshaler).Unmarshal(raw)
> -	}
> -
> -	obuf := o.buf
> -	oi := o.index
> -	o.buf = raw
> -	o.index = 0
> -
> -	err = o.unmarshalType(p.stype, p.sprop, false, bas)
> -	o.buf = obuf
> -	o.index = oi
> -
> -	return err
> -}
> -
> -// Decode a slice of embedded messages.
> -func (o *Buffer) dec_slice_struct_message(p *Properties, base structPointer) error {
> -	return o.dec_slice_struct(p, false, base)
> -}
> -
> -// Decode a slice of embedded groups.
> -func (o *Buffer) dec_slice_struct_group(p *Properties, base structPointer) error {
> -	return o.dec_slice_struct(p, true, base)
> -}
> -
> -// Decode a slice of structs ([]*struct).
> -func (o *Buffer) dec_slice_struct(p *Properties, is_group bool, base structPointer) error {
> -	v := reflect.New(p.stype)
> -	bas := toStructPointer(v)
> -	structPointer_StructPointerSlice(base, p.field).Append(bas)
> -
> -	if is_group {
> -		err := o.unmarshalType(p.stype, p.sprop, is_group, bas)
> -		return err
> -	}
> -
> -	raw, err := o.DecodeRawBytes(false)
> -	if err != nil {
> -		return err
> -	}
> -
> -	// If the object can unmarshal itself, let it.
> -	if p.isUnmarshaler {
> -		iv := v.Interface()
> -		return iv.(Unmarshaler).Unmarshal(raw)
> -	}
> -
> -	obuf := o.buf
> -	oi := o.index
> -	o.buf = raw
> -	o.index = 0
> -
> -	err = o.unmarshalType(p.stype, p.sprop, is_group, bas)
> -
> -	o.buf = obuf
> -	o.index = oi
> -
> -	return err
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/decode_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/decode_test.go
> deleted file mode 100644
> index 2c4c31d1..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/decode_test.go
> +++ /dev/null
> @@ -1,258 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// +build go1.7
> -
> -package proto_test
> -
> -import (
> -	"fmt"
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -	tpb "github.com/golang/protobuf/proto/proto3_proto"
> -)
> -
> -var (
> -	bytesBlackhole []byte
> -	msgBlackhole   = new(tpb.Message)
> -)
> -
> -// BenchmarkVarint32ArraySmall shows the performance on an array of small int32 fields (1 and
> -// 2 bytes long).
> -func BenchmarkVarint32ArraySmall(b *testing.B) {
> -	for i := uint(1); i <= 10; i++ {
> -		dist := genInt32Dist([7]int{0, 3, 1}, 1<<i)
> -		raw, err := proto.Marshal(&tpb.Message{
> -			ShortKey: dist,
> -		})
> -		if err != nil {
> -			b.Error("wrong encode", err)
> -		}
> -		b.Run(fmt.Sprintf("Len%v", len(dist)), func(b *testing.B) {
> -			scratchBuf := proto.NewBuffer(nil)
> -			b.ResetTimer()
> -			for k := 0; k < b.N; k++ {
> -				scratchBuf.SetBuf(raw)
> -				msgBlackhole.Reset()
> -				if err := scratchBuf.Unmarshal(msgBlackhole); err != nil {
> -					b.Error("wrong decode", err)
> -				}
> -			}
> -		})
> -	}
> -}
> -
> -// BenchmarkVarint32ArrayLarge shows the performance on an array of large int32 fields (3 and
> -// 4 bytes long, with a small number of 1, 2, 5 and 10 byte long versions).
> -func BenchmarkVarint32ArrayLarge(b *testing.B) {
> -	for i := uint(1); i <= 10; i++ {
> -		dist := genInt32Dist([7]int{0, 1, 2, 4, 8, 1, 1}, 1<<i)
> -		raw, err := proto.Marshal(&tpb.Message{
> -			ShortKey: dist,
> -		})
> -		if err != nil {
> -			b.Error("wrong encode", err)
> -		}
> -		b.Run(fmt.Sprintf("Len%v", len(dist)), func(b *testing.B) {
> -			scratchBuf := proto.NewBuffer(nil)
> -			b.ResetTimer()
> -			for k := 0; k < b.N; k++ {
> -				scratchBuf.SetBuf(raw)
> -				msgBlackhole.Reset()
> -				if err := scratchBuf.Unmarshal(msgBlackhole); err != nil {
> -					b.Error("wrong decode", err)
> -				}
> -			}
> -		})
> -	}
> -}
> -
> -// BenchmarkVarint64ArraySmall shows the performance on an array of small int64 fields (1 and
> -// 2 bytes long).
> -func BenchmarkVarint64ArraySmall(b *testing.B) {
> -	for i := uint(1); i <= 10; i++ {
> -		dist := genUint64Dist([11]int{0, 3, 1}, 1<<i)
> -		raw, err := proto.Marshal(&tpb.Message{
> -			Key: dist,
> -		})
> -		if err != nil {
> -			b.Error("wrong encode", err)
> -		}
> -		b.Run(fmt.Sprintf("Len%v", len(dist)), func(b *testing.B) {
> -			scratchBuf := proto.NewBuffer(nil)
> -			b.ResetTimer()
> -			for k := 0; k < b.N; k++ {
> -				scratchBuf.SetBuf(raw)
> -				msgBlackhole.Reset()
> -				if err := scratchBuf.Unmarshal(msgBlackhole); err != nil {
> -					b.Error("wrong decode", err)
> -				}
> -			}
> -		})
> -	}
> -}
> -
> -// BenchmarkVarint64ArrayLarge shows the performance on an array of large int64 fields (6, 7,
> -// and 8 bytes long with a small number of the other sizes).
> -func BenchmarkVarint64ArrayLarge(b *testing.B) {
> -	for i := uint(1); i <= 10; i++ {
> -		dist := genUint64Dist([11]int{0, 1, 1, 2, 4, 8, 16, 32, 16, 1, 1}, 1<<i)
> -		raw, err := proto.Marshal(&tpb.Message{
> -			Key: dist,
> -		})
> -		if err != nil {
> -			b.Error("wrong encode", err)
> -		}
> -		b.Run(fmt.Sprintf("Len%v", len(dist)), func(b *testing.B) {
> -			scratchBuf := proto.NewBuffer(nil)
> -			b.ResetTimer()
> -			for k := 0; k < b.N; k++ {
> -				scratchBuf.SetBuf(raw)
> -				msgBlackhole.Reset()
> -				if err := scratchBuf.Unmarshal(msgBlackhole); err != nil {
> -					b.Error("wrong decode", err)
> -				}
> -			}
> -		})
> -	}
> -}
> -
> -// BenchmarkVarint64ArrayMixed shows the performance of lots of small messages, each
> -// containing a small number of large (3, 4, and 5 byte) repeated int64s.
> -func BenchmarkVarint64ArrayMixed(b *testing.B) {
> -	for i := uint(1); i <= 1<<5; i <<= 1 {
> -		dist := genUint64Dist([11]int{0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0}, int(i))
> -		// number of sub fields
> -		for k := uint(1); k <= 1<<10; k <<= 2 {
> -			msg := &tpb.Message{}
> -			for m := uint(0); m < k; m++ {
> -				msg.Children = append(msg.Children, &tpb.Message{
> -					Key: dist,
> -				})
> -			}
> -			raw, err := proto.Marshal(msg)
> -			if err != nil {
> -				b.Error("wrong encode", err)
> -			}
> -			b.Run(fmt.Sprintf("Fields%vLen%v", k, i), func(b *testing.B) {
> -				scratchBuf := proto.NewBuffer(nil)
> -				b.ResetTimer()
> -				for k := 0; k < b.N; k++ {
> -					scratchBuf.SetBuf(raw)
> -					msgBlackhole.Reset()
> -					if err := scratchBuf.Unmarshal(msgBlackhole); err != nil {
> -						b.Error("wrong decode", err)
> -					}
> -				}
> -			})
> -		}
> -	}
> -}
> -
> -// genInt32Dist generates a slice of ints that will match the size distribution of dist.
> -// A size of 6 corresponds to a max length varint32, which is 10 bytes.  The distribution
> -// is 1-indexed. (i.e. the value at index 1 is how many 1 byte ints to create).
> -func genInt32Dist(dist [7]int, count int) (dest []int32) {
> -	for i := 0; i < count; i++ {
> -		for k := 0; k < len(dist); k++ {
> -			var num int32
> -			switch k {
> -			case 1:
> -				num = 1<<7 - 1
> -			case 2:
> -				num = 1<<14 - 1
> -			case 3:
> -				num = 1<<21 - 1
> -			case 4:
> -				num = 1<<28 - 1
> -			case 5:
> -				num = 1<<29 - 1
> -			case 6:
> -				num = -1
> -			}
> -			for m := 0; m < dist[k]; m++ {
> -				dest = append(dest, num)
> -			}
> -		}
> -	}
> -	return
> -}
> -
> -// genUint64Dist generates a slice of ints that will match the size distribution of dist.
> -// The distribution is 1-indexed. (i.e. the value at index 1 is how many 1 byte ints to create).
> -func genUint64Dist(dist [11]int, count int) (dest []uint64) {
> -	for i := 0; i < count; i++ {
> -		for k := 0; k < len(dist); k++ {
> -			var num uint64
> -			switch k {
> -			case 1:
> -				num = 1<<7 - 1
> -			case 2:
> -				num = 1<<14 - 1
> -			case 3:
> -				num = 1<<21 - 1
> -			case 4:
> -				num = 1<<28 - 1
> -			case 5:
> -				num = 1<<35 - 1
> -			case 6:
> -				num = 1<<42 - 1
> -			case 7:
> -				num = 1<<49 - 1
> -			case 8:
> -				num = 1<<56 - 1
> -			case 9:
> -				num = 1<<63 - 1
> -			case 10:
> -				num = 1<<64 - 1
> -			}
> -			for m := 0; m < dist[k]; m++ {
> -				dest = append(dest, num)
> -			}
> -		}
> -	}
> -	return
> -}
> -
> -// BenchmarkDecodeEmpty measures the overhead of doing the minimal possible decode.
> -func BenchmarkDecodeEmpty(b *testing.B) {
> -	raw, err := proto.Marshal(&tpb.Message{})
> -	if err != nil {
> -		b.Error("wrong encode", err)
> -	}
> -	b.ResetTimer()
> -	for i := 0; i < b.N; i++ {
> -		if err := proto.Unmarshal(raw, msgBlackhole); err != nil {
> -			b.Error("wrong decode", err)
> -		}
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/encode.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/encode.go
> deleted file mode 100644
> index 8b84d1b2..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/encode.go
> +++ /dev/null
> @@ -1,1362 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto
> -
> -/*
> - * Routines for encoding data into the wire format for protocol buffers.
> - */
> -
> -import (
> -	"errors"
> -	"fmt"
> -	"reflect"
> -	"sort"
> -)
> -
> -// RequiredNotSetError is the error returned if Marshal is called with
> -// a protocol buffer struct whose required fields have not
> -// all been initialized. It is also the error returned if Unmarshal is
> -// called with an encoded protocol buffer that does not include all the
> -// required fields.
> -//
> -// When printed, RequiredNotSetError reports the first unset required field in a
> -// message. If the field cannot be precisely determined, it is reported as
> -// "{Unknown}".
> -type RequiredNotSetError struct {
> -	field string
> -}
> -
> -func (e *RequiredNotSetError) Error() string {
> -	return fmt.Sprintf("proto: required field %q not set", e.field)
> -}
> -
> -var (
> -	// errRepeatedHasNil is the error returned if Marshal is called with
> -	// a struct with a repeated field containing a nil element.
> -	errRepeatedHasNil = errors.New("proto: repeated field has nil element")
> -
> -	// errOneofHasNil is the error returned if Marshal is called with
> -	// a struct with a oneof field containing a nil element.
> -	errOneofHasNil = errors.New("proto: oneof field has nil value")
> -
> -	// ErrNil is the error returned if Marshal is called with nil.
> -	ErrNil = errors.New("proto: Marshal called with nil")
> -
> -	// ErrTooLarge is the error returned if Marshal is called with a
> -	// message that encodes to >2GB.
> -	ErrTooLarge = errors.New("proto: message encodes to over 2 GB")
> -)
> -
> -// The fundamental encoders that put bytes on the wire.
> -// Those that take integer types all accept uint64 and are
> -// therefore of type valueEncoder.
> -
> -const maxVarintBytes = 10 // maximum length of a varint
> -
> -// maxMarshalSize is the largest allowed size of an encoded protobuf,
> -// since C++ and Java use signed int32s for the size.
> -const maxMarshalSize = 1<<31 - 1
> -
> -// EncodeVarint returns the varint encoding of x.
> -// This is the format for the
> -// int32, int64, uint32, uint64, bool, and enum
> -// protocol buffer types.
> -// Not used by the package itself, but helpful to clients
> -// wishing to use the same encoding.
> -func EncodeVarint(x uint64) []byte {
> -	var buf [maxVarintBytes]byte
> -	var n int
> -	for n = 0; x > 127; n++ {
> -		buf[n] = 0x80 | uint8(x&0x7F)
> -		x >>= 7
> -	}
> -	buf[n] = uint8(x)
> -	n++
> -	return buf[0:n]
> -}
> -
> -// EncodeVarint writes a varint-encoded integer to the Buffer.
> -// This is the format for the
> -// int32, int64, uint32, uint64, bool, and enum
> -// protocol buffer types.
> -func (p *Buffer) EncodeVarint(x uint64) error {
> -	for x >= 1<<7 {
> -		p.buf = append(p.buf, uint8(x&0x7f|0x80))
> -		x >>= 7
> -	}
> -	p.buf = append(p.buf, uint8(x))
> -	return nil
> -}
> -
> -// SizeVarint returns the varint encoding size of an integer.
> -func SizeVarint(x uint64) int {
> -	return sizeVarint(x)
> -}
> -
> -func sizeVarint(x uint64) (n int) {
> -	for {
> -		n++
> -		x >>= 7
> -		if x == 0 {
> -			break
> -		}
> -	}
> -	return n
> -}
> -
> -// EncodeFixed64 writes a 64-bit integer to the Buffer.
> -// This is the format for the
> -// fixed64, sfixed64, and double protocol buffer types.
> -func (p *Buffer) EncodeFixed64(x uint64) error {
> -	p.buf = append(p.buf,
> -		uint8(x),
> -		uint8(x>>8),
> -		uint8(x>>16),
> -		uint8(x>>24),
> -		uint8(x>>32),
> -		uint8(x>>40),
> -		uint8(x>>48),
> -		uint8(x>>56))
> -	return nil
> -}
> -
> -func sizeFixed64(x uint64) int {
> -	return 8
> -}
> -
> -// EncodeFixed32 writes a 32-bit integer to the Buffer.
> -// This is the format for the
> -// fixed32, sfixed32, and float protocol buffer types.
> -func (p *Buffer) EncodeFixed32(x uint64) error {
> -	p.buf = append(p.buf,
> -		uint8(x),
> -		uint8(x>>8),
> -		uint8(x>>16),
> -		uint8(x>>24))
> -	return nil
> -}
> -
> -func sizeFixed32(x uint64) int {
> -	return 4
> -}
> -
> -// EncodeZigzag64 writes a zigzag-encoded 64-bit integer
> -// to the Buffer.
> -// This is the format used for the sint64 protocol buffer type.
> -func (p *Buffer) EncodeZigzag64(x uint64) error {
> -	// use signed number to get arithmetic right shift.
> -	return p.EncodeVarint((x << 1) ^ uint64((int64(x) >> 63)))
> -}
> -
> -func sizeZigzag64(x uint64) int {
> -	return sizeVarint((x << 1) ^ uint64((int64(x) >> 63)))
> -}
> -
> -// EncodeZigzag32 writes a zigzag-encoded 32-bit integer
> -// to the Buffer.
> -// This is the format used for the sint32 protocol buffer type.
> -func (p *Buffer) EncodeZigzag32(x uint64) error {
> -	// use signed number to get arithmetic right shift.
> -	return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))
> -}
> -
> -func sizeZigzag32(x uint64) int {
> -	return sizeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))
> -}
> -
> -// EncodeRawBytes writes a count-delimited byte buffer to the Buffer.
> -// This is the format used for the bytes protocol buffer
> -// type and for embedded messages.
> -func (p *Buffer) EncodeRawBytes(b []byte) error {
> -	p.EncodeVarint(uint64(len(b)))
> -	p.buf = append(p.buf, b...)
> -	return nil
> -}
> -
> -func sizeRawBytes(b []byte) int {
> -	return sizeVarint(uint64(len(b))) +
> -		len(b)
> -}
> -
> -// EncodeStringBytes writes an encoded string to the Buffer.
> -// This is the format used for the proto2 string type.
> -func (p *Buffer) EncodeStringBytes(s string) error {
> -	p.EncodeVarint(uint64(len(s)))
> -	p.buf = append(p.buf, s...)
> -	return nil
> -}
> -
> -func sizeStringBytes(s string) int {
> -	return sizeVarint(uint64(len(s))) +
> -		len(s)
> -}
> -
> -// Marshaler is the interface representing objects that can marshal themselves.
> -type Marshaler interface {
> -	Marshal() ([]byte, error)
> -}
> -
> -// Marshal takes the protocol buffer
> -// and encodes it into the wire format, returning the data.
> -func Marshal(pb Message) ([]byte, error) {
> -	// Can the object marshal itself?
> -	if m, ok := pb.(Marshaler); ok {
> -		return m.Marshal()
> -	}
> -	p := NewBuffer(nil)
> -	err := p.Marshal(pb)
> -	if p.buf == nil && err == nil {
> -		// Return a non-nil slice on success.
> -		return []byte{}, nil
> -	}
> -	return p.buf, err
> -}
> -
> -// EncodeMessage writes the protocol buffer to the Buffer,
> -// prefixed by a varint-encoded length.
> -func (p *Buffer) EncodeMessage(pb Message) error {
> -	t, base, err := getbase(pb)
> -	if structPointer_IsNil(base) {
> -		return ErrNil
> -	}
> -	if err == nil {
> -		var state errorState
> -		err = p.enc_len_struct(GetProperties(t.Elem()), base, &state)
> -	}
> -	return err
> -}
> -
> -// Marshal takes the protocol buffer
> -// and encodes it into the wire format, writing the result to the
> -// Buffer.
> -func (p *Buffer) Marshal(pb Message) error {
> -	// Can the object marshal itself?
> -	if m, ok := pb.(Marshaler); ok {
> -		data, err := m.Marshal()
> -		p.buf = append(p.buf, data...)
> -		return err
> -	}
> -
> -	t, base, err := getbase(pb)
> -	if structPointer_IsNil(base) {
> -		return ErrNil
> -	}
> -	if err == nil {
> -		err = p.enc_struct(GetProperties(t.Elem()), base)
> -	}
> -
> -	if collectStats {
> -		(stats).Encode++ // Parens are to work around a goimports bug.
> -	}
> -
> -	if len(p.buf) > maxMarshalSize {
> -		return ErrTooLarge
> -	}
> -	return err
> -}
> -
> -// Size returns the encoded size of a protocol buffer.
> -func Size(pb Message) (n int) {
> -	// Can the object marshal itself?  If so, Size is slow.
> -	// TODO: add Size to Marshaler, or add a Sizer interface.
> -	if m, ok := pb.(Marshaler); ok {
> -		b, _ := m.Marshal()
> -		return len(b)
> -	}
> -
> -	t, base, err := getbase(pb)
> -	if structPointer_IsNil(base) {
> -		return 0
> -	}
> -	if err == nil {
> -		n = size_struct(GetProperties(t.Elem()), base)
> -	}
> -
> -	if collectStats {
> -		(stats).Size++ // Parens are to work around a goimports bug.
> -	}
> -
> -	return
> -}
> -
> -// Individual type encoders.
> -
> -// Encode a bool.
> -func (o *Buffer) enc_bool(p *Properties, base structPointer) error {
> -	v := *structPointer_Bool(base, p.field)
> -	if v == nil {
> -		return ErrNil
> -	}
> -	x := 0
> -	if *v {
> -		x = 1
> -	}
> -	o.buf = append(o.buf, p.tagcode...)
> -	p.valEnc(o, uint64(x))
> -	return nil
> -}
> -
> -func (o *Buffer) enc_proto3_bool(p *Properties, base structPointer) error {
> -	v := *structPointer_BoolVal(base, p.field)
> -	if !v {
> -		return ErrNil
> -	}
> -	o.buf = append(o.buf, p.tagcode...)
> -	p.valEnc(o, 1)
> -	return nil
> -}
> -
> -func size_bool(p *Properties, base structPointer) int {
> -	v := *structPointer_Bool(base, p.field)
> -	if v == nil {
> -		return 0
> -	}
> -	return len(p.tagcode) + 1 // each bool takes exactly one byte
> -}
> -
> -func size_proto3_bool(p *Properties, base structPointer) int {
> -	v := *structPointer_BoolVal(base, p.field)
> -	if !v && !p.oneof {
> -		return 0
> -	}
> -	return len(p.tagcode) + 1 // each bool takes exactly one byte
> -}
> -
> -// Encode an int32.
> -func (o *Buffer) enc_int32(p *Properties, base structPointer) error {
> -	v := structPointer_Word32(base, p.field)
> -	if word32_IsNil(v) {
> -		return ErrNil
> -	}
> -	x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range
> -	o.buf = append(o.buf, p.tagcode...)
> -	p.valEnc(o, uint64(x))
> -	return nil
> -}
> -
> -func (o *Buffer) enc_proto3_int32(p *Properties, base structPointer) error {
> -	v := structPointer_Word32Val(base, p.field)
> -	x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range
> -	if x == 0 {
> -		return ErrNil
> -	}
> -	o.buf = append(o.buf, p.tagcode...)
> -	p.valEnc(o, uint64(x))
> -	return nil
> -}
> -
> -func size_int32(p *Properties, base structPointer) (n int) {
> -	v := structPointer_Word32(base, p.field)
> -	if word32_IsNil(v) {
> -		return 0
> -	}
> -	x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range
> -	n += len(p.tagcode)
> -	n += p.valSize(uint64(x))
> -	return
> -}
> -
> -func size_proto3_int32(p *Properties, base structPointer) (n int) {
> -	v := structPointer_Word32Val(base, p.field)
> -	x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range
> -	if x == 0 && !p.oneof {
> -		return 0
> -	}
> -	n += len(p.tagcode)
> -	n += p.valSize(uint64(x))
> -	return
> -}
> -
> -// Encode a uint32.
> -// Exactly the same as int32, except for no sign extension.
> -func (o *Buffer) enc_uint32(p *Properties, base structPointer) error {
> -	v := structPointer_Word32(base, p.field)
> -	if word32_IsNil(v) {
> -		return ErrNil
> -	}
> -	x := word32_Get(v)
> -	o.buf = append(o.buf, p.tagcode...)
> -	p.valEnc(o, uint64(x))
> -	return nil
> -}
> -
> -func (o *Buffer) enc_proto3_uint32(p *Properties, base structPointer) error {
> -	v := structPointer_Word32Val(base, p.field)
> -	x := word32Val_Get(v)
> -	if x == 0 {
> -		return ErrNil
> -	}
> -	o.buf = append(o.buf, p.tagcode...)
> -	p.valEnc(o, uint64(x))
> -	return nil
> -}
> -
> -func size_uint32(p *Properties, base structPointer) (n int) {
> -	v := structPointer_Word32(base, p.field)
> -	if word32_IsNil(v) {
> -		return 0
> -	}
> -	x := word32_Get(v)
> -	n += len(p.tagcode)
> -	n += p.valSize(uint64(x))
> -	return
> -}
> -
> -func size_proto3_uint32(p *Properties, base structPointer) (n int) {
> -	v := structPointer_Word32Val(base, p.field)
> -	x := word32Val_Get(v)
> -	if x == 0 && !p.oneof {
> -		return 0
> -	}
> -	n += len(p.tagcode)
> -	n += p.valSize(uint64(x))
> -	return
> -}
> -
> -// Encode an int64.
> -func (o *Buffer) enc_int64(p *Properties, base structPointer) error {
> -	v := structPointer_Word64(base, p.field)
> -	if word64_IsNil(v) {
> -		return ErrNil
> -	}
> -	x := word64_Get(v)
> -	o.buf = append(o.buf, p.tagcode...)
> -	p.valEnc(o, x)
> -	return nil
> -}
> -
> -func (o *Buffer) enc_proto3_int64(p *Properties, base structPointer) error {
> -	v := structPointer_Word64Val(base, p.field)
> -	x := word64Val_Get(v)
> -	if x == 0 {
> -		return ErrNil
> -	}
> -	o.buf = append(o.buf, p.tagcode...)
> -	p.valEnc(o, x)
> -	return nil
> -}
> -
> -func size_int64(p *Properties, base structPointer) (n int) {
> -	v := structPointer_Word64(base, p.field)
> -	if word64_IsNil(v) {
> -		return 0
> -	}
> -	x := word64_Get(v)
> -	n += len(p.tagcode)
> -	n += p.valSize(x)
> -	return
> -}
> -
> -func size_proto3_int64(p *Properties, base structPointer) (n int) {
> -	v := structPointer_Word64Val(base, p.field)
> -	x := word64Val_Get(v)
> -	if x == 0 && !p.oneof {
> -		return 0
> -	}
> -	n += len(p.tagcode)
> -	n += p.valSize(x)
> -	return
> -}
> -
> -// Encode a string.
> -func (o *Buffer) enc_string(p *Properties, base structPointer) error {
> -	v := *structPointer_String(base, p.field)
> -	if v == nil {
> -		return ErrNil
> -	}
> -	x := *v
> -	o.buf = append(o.buf, p.tagcode...)
> -	o.EncodeStringBytes(x)
> -	return nil
> -}
> -
> -func (o *Buffer) enc_proto3_string(p *Properties, base structPointer) error {
> -	v := *structPointer_StringVal(base, p.field)
> -	if v == "" {
> -		return ErrNil
> -	}
> -	o.buf = append(o.buf, p.tagcode...)
> -	o.EncodeStringBytes(v)
> -	return nil
> -}
> -
> -func size_string(p *Properties, base structPointer) (n int) {
> -	v := *structPointer_String(base, p.field)
> -	if v == nil {
> -		return 0
> -	}
> -	x := *v
> -	n += len(p.tagcode)
> -	n += sizeStringBytes(x)
> -	return
> -}
> -
> -func size_proto3_string(p *Properties, base structPointer) (n int) {
> -	v := *structPointer_StringVal(base, p.field)
> -	if v == "" && !p.oneof {
> -		return 0
> -	}
> -	n += len(p.tagcode)
> -	n += sizeStringBytes(v)
> -	return
> -}
> -
> -// All protocol buffer fields are nillable, but be careful.
> -func isNil(v reflect.Value) bool {
> -	switch v.Kind() {
> -	case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
> -		return v.IsNil()
> -	}
> -	return false
> -}
> -
> -// Encode a message struct.
> -func (o *Buffer) enc_struct_message(p *Properties, base structPointer) error {
> -	var state errorState
> -	structp := structPointer_GetStructPointer(base, p.field)
> -	if structPointer_IsNil(structp) {
> -		return ErrNil
> -	}
> -
> -	// Can the object marshal itself?
> -	if p.isMarshaler {
> -		m := structPointer_Interface(structp, p.stype).(Marshaler)
> -		data, err := m.Marshal()
> -		if err != nil && !state.shouldContinue(err, nil) {
> -			return err
> -		}
> -		o.buf = append(o.buf, p.tagcode...)
> -		o.EncodeRawBytes(data)
> -		return state.err
> -	}
> -
> -	o.buf = append(o.buf, p.tagcode...)
> -	return o.enc_len_struct(p.sprop, structp, &state)
> -}
> -
> -func size_struct_message(p *Properties, base structPointer) int {
> -	structp := structPointer_GetStructPointer(base, p.field)
> -	if structPointer_IsNil(structp) {
> -		return 0
> -	}
> -
> -	// Can the object marshal itself?
> -	if p.isMarshaler {
> -		m := structPointer_Interface(structp, p.stype).(Marshaler)
> -		data, _ := m.Marshal()
> -		n0 := len(p.tagcode)
> -		n1 := sizeRawBytes(data)
> -		return n0 + n1
> -	}
> -
> -	n0 := len(p.tagcode)
> -	n1 := size_struct(p.sprop, structp)
> -	n2 := sizeVarint(uint64(n1)) // size of encoded length
> -	return n0 + n1 + n2
> -}
> -
> -// Encode a group struct.
> -func (o *Buffer) enc_struct_group(p *Properties, base structPointer) error {
> -	var state errorState
> -	b := structPointer_GetStructPointer(base, p.field)
> -	if structPointer_IsNil(b) {
> -		return ErrNil
> -	}
> -
> -	o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup))
> -	err := o.enc_struct(p.sprop, b)
> -	if err != nil && !state.shouldContinue(err, nil) {
> -		return err
> -	}
> -	o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup))
> -	return state.err
> -}
> -
> -func size_struct_group(p *Properties, base structPointer) (n int) {
> -	b := structPointer_GetStructPointer(base, p.field)
> -	if structPointer_IsNil(b) {
> -		return 0
> -	}
> -
> -	n += sizeVarint(uint64((p.Tag << 3) | WireStartGroup))
> -	n += size_struct(p.sprop, b)
> -	n += sizeVarint(uint64((p.Tag << 3) | WireEndGroup))
> -	return
> -}
> -
> -// Encode a slice of bools ([]bool).
> -func (o *Buffer) enc_slice_bool(p *Properties, base structPointer) error {
> -	s := *structPointer_BoolSlice(base, p.field)
> -	l := len(s)
> -	if l == 0 {
> -		return ErrNil
> -	}
> -	for _, x := range s {
> -		o.buf = append(o.buf, p.tagcode...)
> -		v := uint64(0)
> -		if x {
> -			v = 1
> -		}
> -		p.valEnc(o, v)
> -	}
> -	return nil
> -}
> -
> -func size_slice_bool(p *Properties, base structPointer) int {
> -	s := *structPointer_BoolSlice(base, p.field)
> -	l := len(s)
> -	if l == 0 {
> -		return 0
> -	}
> -	return l * (len(p.tagcode) + 1) // each bool takes exactly one byte
> -}
> -
> -// Encode a slice of bools ([]bool) in packed format.
> -func (o *Buffer) enc_slice_packed_bool(p *Properties, base structPointer) error {
> -	s := *structPointer_BoolSlice(base, p.field)
> -	l := len(s)
> -	if l == 0 {
> -		return ErrNil
> -	}
> -	o.buf = append(o.buf, p.tagcode...)
> -	o.EncodeVarint(uint64(l)) // each bool takes exactly one byte
> -	for _, x := range s {
> -		v := uint64(0)
> -		if x {
> -			v = 1
> -		}
> -		p.valEnc(o, v)
> -	}
> -	return nil
> -}
> -
> -func size_slice_packed_bool(p *Properties, base structPointer) (n int) {
> -	s := *structPointer_BoolSlice(base, p.field)
> -	l := len(s)
> -	if l == 0 {
> -		return 0
> -	}
> -	n += len(p.tagcode)
> -	n += sizeVarint(uint64(l))
> -	n += l // each bool takes exactly one byte
> -	return
> -}
> -
> -// Encode a slice of bytes ([]byte).
> -func (o *Buffer) enc_slice_byte(p *Properties, base structPointer) error {
> -	s := *structPointer_Bytes(base, p.field)
> -	if s == nil {
> -		return ErrNil
> -	}
> -	o.buf = append(o.buf, p.tagcode...)
> -	o.EncodeRawBytes(s)
> -	return nil
> -}
> -
> -func (o *Buffer) enc_proto3_slice_byte(p *Properties, base structPointer) error {
> -	s := *structPointer_Bytes(base, p.field)
> -	if len(s) == 0 {
> -		return ErrNil
> -	}
> -	o.buf = append(o.buf, p.tagcode...)
> -	o.EncodeRawBytes(s)
> -	return nil
> -}
> -
> -func size_slice_byte(p *Properties, base structPointer) (n int) {
> -	s := *structPointer_Bytes(base, p.field)
> -	if s == nil && !p.oneof {
> -		return 0
> -	}
> -	n += len(p.tagcode)
> -	n += sizeRawBytes(s)
> -	return
> -}
> -
> -func size_proto3_slice_byte(p *Properties, base structPointer) (n int) {
> -	s := *structPointer_Bytes(base, p.field)
> -	if len(s) == 0 && !p.oneof {
> -		return 0
> -	}
> -	n += len(p.tagcode)
> -	n += sizeRawBytes(s)
> -	return
> -}
> -
> -// Encode a slice of int32s ([]int32).
> -func (o *Buffer) enc_slice_int32(p *Properties, base structPointer) error {
> -	s := structPointer_Word32Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return ErrNil
> -	}
> -	for i := 0; i < l; i++ {
> -		o.buf = append(o.buf, p.tagcode...)
> -		x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
> -		p.valEnc(o, uint64(x))
> -	}
> -	return nil
> -}
> -
> -func size_slice_int32(p *Properties, base structPointer) (n int) {
> -	s := structPointer_Word32Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return 0
> -	}
> -	for i := 0; i < l; i++ {
> -		n += len(p.tagcode)
> -		x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
> -		n += p.valSize(uint64(x))
> -	}
> -	return
> -}
> -
> -// Encode a slice of int32s ([]int32) in packed format.
> -func (o *Buffer) enc_slice_packed_int32(p *Properties, base structPointer) error {
> -	s := structPointer_Word32Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return ErrNil
> -	}
> -	// TODO: Reuse a Buffer.
> -	buf := NewBuffer(nil)
> -	for i := 0; i < l; i++ {
> -		x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
> -		p.valEnc(buf, uint64(x))
> -	}
> -
> -	o.buf = append(o.buf, p.tagcode...)
> -	o.EncodeVarint(uint64(len(buf.buf)))
> -	o.buf = append(o.buf, buf.buf...)
> -	return nil
> -}
> -
> -func size_slice_packed_int32(p *Properties, base structPointer) (n int) {
> -	s := structPointer_Word32Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return 0
> -	}
> -	var bufSize int
> -	for i := 0; i < l; i++ {
> -		x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
> -		bufSize += p.valSize(uint64(x))
> -	}
> -
> -	n += len(p.tagcode)
> -	n += sizeVarint(uint64(bufSize))
> -	n += bufSize
> -	return
> -}
> -
> -// Encode a slice of uint32s ([]uint32).
> -// Exactly the same as int32, except for no sign extension.
> -func (o *Buffer) enc_slice_uint32(p *Properties, base structPointer) error {
> -	s := structPointer_Word32Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return ErrNil
> -	}
> -	for i := 0; i < l; i++ {
> -		o.buf = append(o.buf, p.tagcode...)
> -		x := s.Index(i)
> -		p.valEnc(o, uint64(x))
> -	}
> -	return nil
> -}
> -
> -func size_slice_uint32(p *Properties, base structPointer) (n int) {
> -	s := structPointer_Word32Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return 0
> -	}
> -	for i := 0; i < l; i++ {
> -		n += len(p.tagcode)
> -		x := s.Index(i)
> -		n += p.valSize(uint64(x))
> -	}
> -	return
> -}
> -
> -// Encode a slice of uint32s ([]uint32) in packed format.
> -// Exactly the same as int32, except for no sign extension.
> -func (o *Buffer) enc_slice_packed_uint32(p *Properties, base structPointer) error {
> -	s := structPointer_Word32Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return ErrNil
> -	}
> -	// TODO: Reuse a Buffer.
> -	buf := NewBuffer(nil)
> -	for i := 0; i < l; i++ {
> -		p.valEnc(buf, uint64(s.Index(i)))
> -	}
> -
> -	o.buf = append(o.buf, p.tagcode...)
> -	o.EncodeVarint(uint64(len(buf.buf)))
> -	o.buf = append(o.buf, buf.buf...)
> -	return nil
> -}
> -
> -func size_slice_packed_uint32(p *Properties, base structPointer) (n int) {
> -	s := structPointer_Word32Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return 0
> -	}
> -	var bufSize int
> -	for i := 0; i < l; i++ {
> -		bufSize += p.valSize(uint64(s.Index(i)))
> -	}
> -
> -	n += len(p.tagcode)
> -	n += sizeVarint(uint64(bufSize))
> -	n += bufSize
> -	return
> -}
> -
> -// Encode a slice of int64s ([]int64).
> -func (o *Buffer) enc_slice_int64(p *Properties, base structPointer) error {
> -	s := structPointer_Word64Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return ErrNil
> -	}
> -	for i := 0; i < l; i++ {
> -		o.buf = append(o.buf, p.tagcode...)
> -		p.valEnc(o, s.Index(i))
> -	}
> -	return nil
> -}
> -
> -func size_slice_int64(p *Properties, base structPointer) (n int) {
> -	s := structPointer_Word64Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return 0
> -	}
> -	for i := 0; i < l; i++ {
> -		n += len(p.tagcode)
> -		n += p.valSize(s.Index(i))
> -	}
> -	return
> -}
> -
> -// Encode a slice of int64s ([]int64) in packed format.
> -func (o *Buffer) enc_slice_packed_int64(p *Properties, base structPointer) error {
> -	s := structPointer_Word64Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return ErrNil
> -	}
> -	// TODO: Reuse a Buffer.
> -	buf := NewBuffer(nil)
> -	for i := 0; i < l; i++ {
> -		p.valEnc(buf, s.Index(i))
> -	}
> -
> -	o.buf = append(o.buf, p.tagcode...)
> -	o.EncodeVarint(uint64(len(buf.buf)))
> -	o.buf = append(o.buf, buf.buf...)
> -	return nil
> -}
> -
> -func size_slice_packed_int64(p *Properties, base structPointer) (n int) {
> -	s := structPointer_Word64Slice(base, p.field)
> -	l := s.Len()
> -	if l == 0 {
> -		return 0
> -	}
> -	var bufSize int
> -	for i := 0; i < l; i++ {
> -		bufSize += p.valSize(s.Index(i))
> -	}
> -
> -	n += len(p.tagcode)
> -	n += sizeVarint(uint64(bufSize))
> -	n += bufSize
> -	return
> -}
> -
> -// Encode a slice of slice of bytes ([][]byte).
> -func (o *Buffer) enc_slice_slice_byte(p *Properties, base structPointer) error {
> -	ss := *structPointer_BytesSlice(base, p.field)
> -	l := len(ss)
> -	if l == 0 {
> -		return ErrNil
> -	}
> -	for i := 0; i < l; i++ {
> -		o.buf = append(o.buf, p.tagcode...)
> -		o.EncodeRawBytes(ss[i])
> -	}
> -	return nil
> -}
> -
> -func size_slice_slice_byte(p *Properties, base structPointer) (n int) {
> -	ss := *structPointer_BytesSlice(base, p.field)
> -	l := len(ss)
> -	if l == 0 {
> -		return 0
> -	}
> -	n += l * len(p.tagcode)
> -	for i := 0; i < l; i++ {
> -		n += sizeRawBytes(ss[i])
> -	}
> -	return
> -}
> -
> -// Encode a slice of strings ([]string).
> -func (o *Buffer) enc_slice_string(p *Properties, base structPointer) error {
> -	ss := *structPointer_StringSlice(base, p.field)
> -	l := len(ss)
> -	for i := 0; i < l; i++ {
> -		o.buf = append(o.buf, p.tagcode...)
> -		o.EncodeStringBytes(ss[i])
> -	}
> -	return nil
> -}
> -
> -func size_slice_string(p *Properties, base structPointer) (n int) {
> -	ss := *structPointer_StringSlice(base, p.field)
> -	l := len(ss)
> -	n += l * len(p.tagcode)
> -	for i := 0; i < l; i++ {
> -		n += sizeStringBytes(ss[i])
> -	}
> -	return
> -}
> -
> -// Encode a slice of message structs ([]*struct).
> -func (o *Buffer) enc_slice_struct_message(p *Properties, base structPointer) error {
> -	var state errorState
> -	s := structPointer_StructPointerSlice(base, p.field)
> -	l := s.Len()
> -
> -	for i := 0; i < l; i++ {
> -		structp := s.Index(i)
> -		if structPointer_IsNil(structp) {
> -			return errRepeatedHasNil
> -		}
> -
> -		// Can the object marshal itself?
> -		if p.isMarshaler {
> -			m := structPointer_Interface(structp, p.stype).(Marshaler)
> -			data, err := m.Marshal()
> -			if err != nil && !state.shouldContinue(err, nil) {
> -				return err
> -			}
> -			o.buf = append(o.buf, p.tagcode...)
> -			o.EncodeRawBytes(data)
> -			continue
> -		}
> -
> -		o.buf = append(o.buf, p.tagcode...)
> -		err := o.enc_len_struct(p.sprop, structp, &state)
> -		if err != nil && !state.shouldContinue(err, nil) {
> -			if err == ErrNil {
> -				return errRepeatedHasNil
> -			}
> -			return err
> -		}
> -	}
> -	return state.err
> -}
> -
> -func size_slice_struct_message(p *Properties, base structPointer) (n int) {
> -	s := structPointer_StructPointerSlice(base, p.field)
> -	l := s.Len()
> -	n += l * len(p.tagcode)
> -	for i := 0; i < l; i++ {
> -		structp := s.Index(i)
> -		if structPointer_IsNil(structp) {
> -			return // return the size up to this point
> -		}
> -
> -		// Can the object marshal itself?
> -		if p.isMarshaler {
> -			m := structPointer_Interface(structp, p.stype).(Marshaler)
> -			data, _ := m.Marshal()
> -			n += sizeRawBytes(data)
> -			continue
> -		}
> -
> -		n0 := size_struct(p.sprop, structp)
> -		n1 := sizeVarint(uint64(n0)) // size of encoded length
> -		n += n0 + n1
> -	}
> -	return
> -}
> -
> -// Encode a slice of group structs ([]*struct).
> -func (o *Buffer) enc_slice_struct_group(p *Properties, base structPointer) error {
> -	var state errorState
> -	s := structPointer_StructPointerSlice(base, p.field)
> -	l := s.Len()
> -
> -	for i := 0; i < l; i++ {
> -		b := s.Index(i)
> -		if structPointer_IsNil(b) {
> -			return errRepeatedHasNil
> -		}
> -
> -		o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup))
> -
> -		err := o.enc_struct(p.sprop, b)
> -
> -		if err != nil && !state.shouldContinue(err, nil) {
> -			if err == ErrNil {
> -				return errRepeatedHasNil
> -			}
> -			return err
> -		}
> -
> -		o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup))
> -	}
> -	return state.err
> -}
> -
> -func size_slice_struct_group(p *Properties, base structPointer) (n int) {
> -	s := structPointer_StructPointerSlice(base, p.field)
> -	l := s.Len()
> -
> -	n += l * sizeVarint(uint64((p.Tag<<3)|WireStartGroup))
> -	n += l * sizeVarint(uint64((p.Tag<<3)|WireEndGroup))
> -	for i := 0; i < l; i++ {
> -		b := s.Index(i)
> -		if structPointer_IsNil(b) {
> -			return // return size up to this point
> -		}
> -
> -		n += size_struct(p.sprop, b)
> -	}
> -	return
> -}
> -
> -// Encode an extension map.
> -func (o *Buffer) enc_map(p *Properties, base structPointer) error {
> -	exts := structPointer_ExtMap(base, p.field)
> -	if err := encodeExtensionsMap(*exts); err != nil {
> -		return err
> -	}
> -
> -	return o.enc_map_body(*exts)
> -}
> -
> -func (o *Buffer) enc_exts(p *Properties, base structPointer) error {
> -	exts := structPointer_Extensions(base, p.field)
> -
> -	v, mu := exts.extensionsRead()
> -	if v == nil {
> -		return nil
> -	}
> -
> -	mu.Lock()
> -	defer mu.Unlock()
> -	if err := encodeExtensionsMap(v); err != nil {
> -		return err
> -	}
> -
> -	return o.enc_map_body(v)
> -}
> -
> -func (o *Buffer) enc_map_body(v map[int32]Extension) error {
> -	// Fast-path for common cases: zero or one extensions.
> -	if len(v) <= 1 {
> -		for _, e := range v {
> -			o.buf = append(o.buf, e.enc...)
> -		}
> -		return nil
> -	}
> -
> -	// Sort keys to provide a deterministic encoding.
> -	keys := make([]int, 0, len(v))
> -	for k := range v {
> -		keys = append(keys, int(k))
> -	}
> -	sort.Ints(keys)
> -
> -	for _, k := range keys {
> -		o.buf = append(o.buf, v[int32(k)].enc...)
> -	}
> -	return nil
> -}
> -
> -func size_map(p *Properties, base structPointer) int {
> -	v := structPointer_ExtMap(base, p.field)
> -	return extensionsMapSize(*v)
> -}
> -
> -func size_exts(p *Properties, base structPointer) int {
> -	v := structPointer_Extensions(base, p.field)
> -	return extensionsSize(v)
> -}
> -
> -// Encode a map field.
> -func (o *Buffer) enc_new_map(p *Properties, base structPointer) error {
> -	var state errorState // XXX: or do we need to plumb this through?
> -
> -	/*
> -		A map defined as
> -			map<key_type, value_type> map_field = N;
> -		is encoded in the same way as
> -			message MapFieldEntry {
> -				key_type key = 1;
> -				value_type value = 2;
> -			}
> -			repeated MapFieldEntry map_field = N;
> -	*/
> -
> -	v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V
> -	if v.Len() == 0 {
> -		return nil
> -	}
> -
> -	keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype)
> -
> -	enc := func() error {
> -		if err := p.mkeyprop.enc(o, p.mkeyprop, keybase); err != nil {
> -			return err
> -		}
> -		if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil && err != ErrNil {
> -			return err
> -		}
> -		return nil
> -	}
> -
> -	// Don't sort map keys. It is not required by the spec, and C++ doesn't do it.
> -	for _, key := range v.MapKeys() {
> -		val := v.MapIndex(key)
> -
> -		keycopy.Set(key)
> -		valcopy.Set(val)
> -
> -		o.buf = append(o.buf, p.tagcode...)
> -		if err := o.enc_len_thing(enc, &state); err != nil {
> -			return err
> -		}
> -	}
> -	return nil
> -}
> -
> -func size_new_map(p *Properties, base structPointer) int {
> -	v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V
> -
> -	keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype)
> -
> -	n := 0
> -	for _, key := range v.MapKeys() {
> -		val := v.MapIndex(key)
> -		keycopy.Set(key)
> -		valcopy.Set(val)
> -
> -		// Tag codes for key and val are the responsibility of the sub-sizer.
> -		keysize := p.mkeyprop.size(p.mkeyprop, keybase)
> -		valsize := p.mvalprop.size(p.mvalprop, valbase)
> -		entry := keysize + valsize
> -		// Add on tag code and length of map entry itself.
> -		n += len(p.tagcode) + sizeVarint(uint64(entry)) + entry
> -	}
> -	return n
> -}
> -
> -// mapEncodeScratch returns a new reflect.Value matching the map's value type,
> -// and a structPointer suitable for passing to an encoder or sizer.
> -func mapEncodeScratch(mapType reflect.Type) (keycopy, valcopy reflect.Value, keybase, valbase structPointer) {
> -	// Prepare addressable doubly-indirect placeholders for the key and value types.
> -	// This is needed because the element-type encoders expect **T, but the map iteration produces T.
> -
> -	keycopy = reflect.New(mapType.Key()).Elem()                 // addressable K
> -	keyptr := reflect.New(reflect.PtrTo(keycopy.Type())).Elem() // addressable *K
> -	keyptr.Set(keycopy.Addr())                                  //
> -	keybase = toStructPointer(keyptr.Addr())                    // **K
> -
> -	// Value types are more varied and require special handling.
> -	switch mapType.Elem().Kind() {
> -	case reflect.Slice:
> -		// []byte
> -		var dummy []byte
> -		valcopy = reflect.ValueOf(&dummy).Elem() // addressable []byte
> -		valbase = toStructPointer(valcopy.Addr())
> -	case reflect.Ptr:
> -		// message; the generated field type is map[K]*Msg (so V is *Msg),
> -		// so we only need one level of indirection.
> -		valcopy = reflect.New(mapType.Elem()).Elem() // addressable V
> -		valbase = toStructPointer(valcopy.Addr())
> -	default:
> -		// everything else
> -		valcopy = reflect.New(mapType.Elem()).Elem()                // addressable V
> -		valptr := reflect.New(reflect.PtrTo(valcopy.Type())).Elem() // addressable *V
> -		valptr.Set(valcopy.Addr())                                  //
> -		valbase = toStructPointer(valptr.Addr())                    // **V
> -	}
> -	return
> -}
> -
> -// Encode a struct.
> -func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error {
> -	var state errorState
> -	// Encode fields in tag order so that decoders may use optimizations
> -	// that depend on the ordering.
> -	// https://developers.google.com/protocol-buffers/docs/encoding#order
> -	for _, i := range prop.order {
> -		p := prop.Prop[i]
> -		if p.enc != nil {
> -			err := p.enc(o, p, base)
> -			if err != nil {
> -				if err == ErrNil {
> -					if p.Required && state.err == nil {
> -						state.err = &RequiredNotSetError{p.Name}
> -					}
> -				} else if err == errRepeatedHasNil {
> -					// Give more context to nil values in repeated fields.
> -					return errors.New("repeated field " + p.OrigName + " has nil element")
> -				} else if !state.shouldContinue(err, p) {
> -					return err
> -				}
> -			}
> -			if len(o.buf) > maxMarshalSize {
> -				return ErrTooLarge
> -			}
> -		}
> -	}
> -
> -	// Do oneof fields.
> -	if prop.oneofMarshaler != nil {
> -		m := structPointer_Interface(base, prop.stype).(Message)
> -		if err := prop.oneofMarshaler(m, o); err == ErrNil {
> -			return errOneofHasNil
> -		} else if err != nil {
> -			return err
> -		}
> -	}
> -
> -	// Add unrecognized fields at the end.
> -	if prop.unrecField.IsValid() {
> -		v := *structPointer_Bytes(base, prop.unrecField)
> -		if len(o.buf)+len(v) > maxMarshalSize {
> -			return ErrTooLarge
> -		}
> -		if len(v) > 0 {
> -			o.buf = append(o.buf, v...)
> -		}
> -	}
> -
> -	return state.err
> -}
> -
> -func size_struct(prop *StructProperties, base structPointer) (n int) {
> -	for _, i := range prop.order {
> -		p := prop.Prop[i]
> -		if p.size != nil {
> -			n += p.size(p, base)
> -		}
> -	}
> -
> -	// Add unrecognized fields at the end.
> -	if prop.unrecField.IsValid() {
> -		v := *structPointer_Bytes(base, prop.unrecField)
> -		n += len(v)
> -	}
> -
> -	// Factor in any oneof fields.
> -	if prop.oneofSizer != nil {
> -		m := structPointer_Interface(base, prop.stype).(Message)
> -		n += prop.oneofSizer(m)
> -	}
> -
> -	return
> -}
> -
> -var zeroes [20]byte // longer than any conceivable sizeVarint
> -
> -// Encode a struct, preceded by its encoded length (as a varint).
> -func (o *Buffer) enc_len_struct(prop *StructProperties, base structPointer, state *errorState) error {
> -	return o.enc_len_thing(func() error { return o.enc_struct(prop, base) }, state)
> -}
> -
> -// Encode something, preceded by its encoded length (as a varint).
> -func (o *Buffer) enc_len_thing(enc func() error, state *errorState) error {
> -	iLen := len(o.buf)
> -	o.buf = append(o.buf, 0, 0, 0, 0) // reserve four bytes for length
> -	iMsg := len(o.buf)
> -	err := enc()
> -	if err != nil && !state.shouldContinue(err, nil) {
> -		return err
> -	}
> -	lMsg := len(o.buf) - iMsg
> -	lLen := sizeVarint(uint64(lMsg))
> -	switch x := lLen - (iMsg - iLen); {
> -	case x > 0: // actual length is x bytes larger than the space we reserved
> -		// Move msg x bytes right.
> -		o.buf = append(o.buf, zeroes[:x]...)
> -		copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg])
> -	case x < 0: // actual length is x bytes smaller than the space we reserved
> -		// Move msg x bytes left.
> -		copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg])
> -		o.buf = o.buf[:len(o.buf)+x] // x is negative
> -	}
> -	// Encode the length in the reserved space.
> -	o.buf = o.buf[:iLen]
> -	o.EncodeVarint(uint64(lMsg))
> -	o.buf = o.buf[:len(o.buf)+lMsg]
> -	return state.err
> -}
> -
> -// errorState maintains the first error that occurs and updates that error
> -// with additional context.
> -type errorState struct {
> -	err error
> -}
> -
> -// shouldContinue reports whether encoding should continue upon encountering the
> -// given error. If the error is RequiredNotSetError, shouldContinue returns true
> -// and, if this is the first appearance of that error, remembers it for future
> -// reporting.
> -//
> -// If prop is not nil, it may update any error with additional context about the
> -// field with the error.
> -func (s *errorState) shouldContinue(err error, prop *Properties) bool {
> -	// Ignore unset required fields.
> -	reqNotSet, ok := err.(*RequiredNotSetError)
> -	if !ok {
> -		return false
> -	}
> -	if s.err == nil {
> -		if prop != nil {
> -			err = &RequiredNotSetError{prop.Name + "." + reqNotSet.field}
> -		}
> -		s.err = err
> -	}
> -	return true
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/encode_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/encode_test.go
> deleted file mode 100644
> index a7209475..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/encode_test.go
> +++ /dev/null
> @@ -1,85 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// +build go1.7
> -
> -package proto_test
> -
> -import (
> -	"strconv"
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -	tpb "github.com/golang/protobuf/proto/proto3_proto"
> -	"github.com/golang/protobuf/ptypes"
> -)
> -
> -var (
> -	blackhole []byte
> -)
> -
> -// BenchmarkAny creates increasingly large arbitrary Any messages.  The type is always the
> -// same.
> -func BenchmarkAny(b *testing.B) {
> -	data := make([]byte, 1<<20)
> -	quantum := 1 << 10
> -	for i := uint(0); i <= 10; i++ {
> -		b.Run(strconv.Itoa(quantum<<i), func(b *testing.B) {
> -			for k := 0; k < b.N; k++ {
> -				inner := &tpb.Message{
> -					Data: data[:quantum<<i],
> -				}
> -				outer, err := ptypes.MarshalAny(inner)
> -				if err != nil {
> -					b.Error("wrong encode", err)
> -				}
> -				raw, err := proto.Marshal(&tpb.Message{
> -					Anything: outer,
> -				})
> -				if err != nil {
> -					b.Error("wrong encode", err)
> -				}
> -				blackhole = raw
> -			}
> -		})
> -	}
> -}
> -
> -// BenchmarkEmpy measures the overhead of doing the minimal possible encode.
> -func BenchmarkEmpy(b *testing.B) {
> -	for i := 0; i < b.N; i++ {
> -		raw, err := proto.Marshal(&tpb.Message{})
> -		if err != nil {
> -			b.Error("wrong encode", err)
> -		}
> -		blackhole = raw
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/equal.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/equal.go
> deleted file mode 100644
> index 2ed1cf59..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/equal.go
> +++ /dev/null
> @@ -1,300 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2011 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// Protocol buffer comparison.
> -
> -package proto
> -
> -import (
> -	"bytes"
> -	"log"
> -	"reflect"
> -	"strings"
> -)
> -
> -/*
> -Equal returns true iff protocol buffers a and b are equal.
> -The arguments must both be pointers to protocol buffer structs.
> -
> -Equality is defined in this way:
> -  - Two messages are equal iff they are the same type,
> -    corresponding fields are equal, unknown field sets
> -    are equal, and extensions sets are equal.
> -  - Two set scalar fields are equal iff their values are equal.
> -    If the fields are of a floating-point type, remember that
> -    NaN != x for all x, including NaN. If the message is defined
> -    in a proto3 .proto file, fields are not "set"; specifically,
> -    zero length proto3 "bytes" fields are equal (nil == {}).
> -  - Two repeated fields are equal iff their lengths are the same,
> -    and their corresponding elements are equal. Note a "bytes" field,
> -    although represented by []byte, is not a repeated field and the
> -    rule for the scalar fields described above applies.
> -  - Two unset fields are equal.
> -  - Two unknown field sets are equal if their current
> -    encoded state is equal.
> -  - Two extension sets are equal iff they have corresponding
> -    elements that are pairwise equal.
> -  - Two map fields are equal iff their lengths are the same,
> -    and they contain the same set of elements. Zero-length map
> -    fields are equal.
> -  - Every other combination of things are not equal.
> -
> -The return value is undefined if a and b are not protocol buffers.
> -*/
> -func Equal(a, b Message) bool {
> -	if a == nil || b == nil {
> -		return a == b
> -	}
> -	v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b)
> -	if v1.Type() != v2.Type() {
> -		return false
> -	}
> -	if v1.Kind() == reflect.Ptr {
> -		if v1.IsNil() {
> -			return v2.IsNil()
> -		}
> -		if v2.IsNil() {
> -			return false
> -		}
> -		v1, v2 = v1.Elem(), v2.Elem()
> -	}
> -	if v1.Kind() != reflect.Struct {
> -		return false
> -	}
> -	return equalStruct(v1, v2)
> -}
> -
> -// v1 and v2 are known to have the same type.
> -func equalStruct(v1, v2 reflect.Value) bool {
> -	sprop := GetProperties(v1.Type())
> -	for i := 0; i < v1.NumField(); i++ {
> -		f := v1.Type().Field(i)
> -		if strings.HasPrefix(f.Name, "XXX_") {
> -			continue
> -		}
> -		f1, f2 := v1.Field(i), v2.Field(i)
> -		if f.Type.Kind() == reflect.Ptr {
> -			if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 {
> -				// both unset
> -				continue
> -			} else if n1 != n2 {
> -				// set/unset mismatch
> -				return false
> -			}
> -			b1, ok := f1.Interface().(raw)
> -			if ok {
> -				b2 := f2.Interface().(raw)
> -				// RawMessage
> -				if !bytes.Equal(b1.Bytes(), b2.Bytes()) {
> -					return false
> -				}
> -				continue
> -			}
> -			f1, f2 = f1.Elem(), f2.Elem()
> -		}
> -		if !equalAny(f1, f2, sprop.Prop[i]) {
> -			return false
> -		}
> -	}
> -
> -	if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() {
> -		em2 := v2.FieldByName("XXX_InternalExtensions")
> -		if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) {
> -			return false
> -		}
> -	}
> -
> -	if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() {
> -		em2 := v2.FieldByName("XXX_extensions")
> -		if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) {
> -			return false
> -		}
> -	}
> -
> -	uf := v1.FieldByName("XXX_unrecognized")
> -	if !uf.IsValid() {
> -		return true
> -	}
> -
> -	u1 := uf.Bytes()
> -	u2 := v2.FieldByName("XXX_unrecognized").Bytes()
> -	if !bytes.Equal(u1, u2) {
> -		return false
> -	}
> -
> -	return true
> -}
> -
> -// v1 and v2 are known to have the same type.
> -// prop may be nil.
> -func equalAny(v1, v2 reflect.Value, prop *Properties) bool {
> -	if v1.Type() == protoMessageType {
> -		m1, _ := v1.Interface().(Message)
> -		m2, _ := v2.Interface().(Message)
> -		return Equal(m1, m2)
> -	}
> -	switch v1.Kind() {
> -	case reflect.Bool:
> -		return v1.Bool() == v2.Bool()
> -	case reflect.Float32, reflect.Float64:
> -		return v1.Float() == v2.Float()
> -	case reflect.Int32, reflect.Int64:
> -		return v1.Int() == v2.Int()
> -	case reflect.Interface:
> -		// Probably a oneof field; compare the inner values.
> -		n1, n2 := v1.IsNil(), v2.IsNil()
> -		if n1 || n2 {
> -			return n1 == n2
> -		}
> -		e1, e2 := v1.Elem(), v2.Elem()
> -		if e1.Type() != e2.Type() {
> -			return false
> -		}
> -		return equalAny(e1, e2, nil)
> -	case reflect.Map:
> -		if v1.Len() != v2.Len() {
> -			return false
> -		}
> -		for _, key := range v1.MapKeys() {
> -			val2 := v2.MapIndex(key)
> -			if !val2.IsValid() {
> -				// This key was not found in the second map.
> -				return false
> -			}
> -			if !equalAny(v1.MapIndex(key), val2, nil) {
> -				return false
> -			}
> -		}
> -		return true
> -	case reflect.Ptr:
> -		// Maps may have nil values in them, so check for nil.
> -		if v1.IsNil() && v2.IsNil() {
> -			return true
> -		}
> -		if v1.IsNil() != v2.IsNil() {
> -			return false
> -		}
> -		return equalAny(v1.Elem(), v2.Elem(), prop)
> -	case reflect.Slice:
> -		if v1.Type().Elem().Kind() == reflect.Uint8 {
> -			// short circuit: []byte
> -
> -			// Edge case: if this is in a proto3 message, a zero length
> -			// bytes field is considered the zero value.
> -			if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 {
> -				return true
> -			}
> -			if v1.IsNil() != v2.IsNil() {
> -				return false
> -			}
> -			return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte))
> -		}
> -
> -		if v1.Len() != v2.Len() {
> -			return false
> -		}
> -		for i := 0; i < v1.Len(); i++ {
> -			if !equalAny(v1.Index(i), v2.Index(i), prop) {
> -				return false
> -			}
> -		}
> -		return true
> -	case reflect.String:
> -		return v1.Interface().(string) == v2.Interface().(string)
> -	case reflect.Struct:
> -		return equalStruct(v1, v2)
> -	case reflect.Uint32, reflect.Uint64:
> -		return v1.Uint() == v2.Uint()
> -	}
> -
> -	// unknown type, so not a protocol buffer
> -	log.Printf("proto: don't know how to compare %v", v1)
> -	return false
> -}
> -
> -// base is the struct type that the extensions are based on.
> -// x1 and x2 are InternalExtensions.
> -func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool {
> -	em1, _ := x1.extensionsRead()
> -	em2, _ := x2.extensionsRead()
> -	return equalExtMap(base, em1, em2)
> -}
> -
> -func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {
> -	if len(em1) != len(em2) {
> -		return false
> -	}
> -
> -	for extNum, e1 := range em1 {
> -		e2, ok := em2[extNum]
> -		if !ok {
> -			return false
> -		}
> -
> -		m1, m2 := e1.value, e2.value
> -
> -		if m1 != nil && m2 != nil {
> -			// Both are unencoded.
> -			if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
> -				return false
> -			}
> -			continue
> -		}
> -
> -		// At least one is encoded. To do a semantically correct comparison
> -		// we need to unmarshal them first.
> -		var desc *ExtensionDesc
> -		if m := extensionMaps[base]; m != nil {
> -			desc = m[extNum]
> -		}
> -		if desc == nil {
> -			log.Printf("proto: don't know how to compare extension %d of %v", extNum, base)
> -			continue
> -		}
> -		var err error
> -		if m1 == nil {
> -			m1, err = decodeExtension(e1.enc, desc)
> -		}
> -		if m2 == nil && err == nil {
> -			m2, err = decodeExtension(e2.enc, desc)
> -		}
> -		if err != nil {
> -			// The encoded form is invalid.
> -			log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err)
> -			return false
> -		}
> -		if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
> -			return false
> -		}
> -	}
> -
> -	return true
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/equal_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/equal_test.go
> deleted file mode 100644
> index a2febb39..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/equal_test.go
> +++ /dev/null
> @@ -1,224 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2011 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto_test
> -
> -import (
> -	"testing"
> -
> -	. "github.com/golang/protobuf/proto"
> -	proto3pb "github.com/golang/protobuf/proto/proto3_proto"
> -	pb "github.com/golang/protobuf/proto/testdata"
> -)
> -
> -// Four identical base messages.
> -// The init function adds extensions to some of them.
> -var messageWithoutExtension = &pb.MyMessage{Count: Int32(7)}
> -var messageWithExtension1a = &pb.MyMessage{Count: Int32(7)}
> -var messageWithExtension1b = &pb.MyMessage{Count: Int32(7)}
> -var messageWithExtension2 = &pb.MyMessage{Count: Int32(7)}
> -
> -// Two messages with non-message extensions.
> -var messageWithInt32Extension1 = &pb.MyMessage{Count: Int32(8)}
> -var messageWithInt32Extension2 = &pb.MyMessage{Count: Int32(8)}
> -
> -func init() {
> -	ext1 := &pb.Ext{Data: String("Kirk")}
> -	ext2 := &pb.Ext{Data: String("Picard")}
> -
> -	// messageWithExtension1a has ext1, but never marshals it.
> -	if err := SetExtension(messageWithExtension1a, pb.E_Ext_More, ext1); err != nil {
> -		panic("SetExtension on 1a failed: " + err.Error())
> -	}
> -
> -	// messageWithExtension1b is the unmarshaled form of messageWithExtension1a.
> -	if err := SetExtension(messageWithExtension1b, pb.E_Ext_More, ext1); err != nil {
> -		panic("SetExtension on 1b failed: " + err.Error())
> -	}
> -	buf, err := Marshal(messageWithExtension1b)
> -	if err != nil {
> -		panic("Marshal of 1b failed: " + err.Error())
> -	}
> -	messageWithExtension1b.Reset()
> -	if err := Unmarshal(buf, messageWithExtension1b); err != nil {
> -		panic("Unmarshal of 1b failed: " + err.Error())
> -	}
> -
> -	// messageWithExtension2 has ext2.
> -	if err := SetExtension(messageWithExtension2, pb.E_Ext_More, ext2); err != nil {
> -		panic("SetExtension on 2 failed: " + err.Error())
> -	}
> -
> -	if err := SetExtension(messageWithInt32Extension1, pb.E_Ext_Number, Int32(23)); err != nil {
> -		panic("SetExtension on Int32-1 failed: " + err.Error())
> -	}
> -	if err := SetExtension(messageWithInt32Extension1, pb.E_Ext_Number, Int32(24)); err != nil {
> -		panic("SetExtension on Int32-2 failed: " + err.Error())
> -	}
> -}
> -
> -var EqualTests = []struct {
> -	desc string
> -	a, b Message
> -	exp  bool
> -}{
> -	{"different types", &pb.GoEnum{}, &pb.GoTestField{}, false},
> -	{"equal empty", &pb.GoEnum{}, &pb.GoEnum{}, true},
> -	{"nil vs nil", nil, nil, true},
> -	{"typed nil vs typed nil", (*pb.GoEnum)(nil), (*pb.GoEnum)(nil), true},
> -	{"typed nil vs empty", (*pb.GoEnum)(nil), &pb.GoEnum{}, false},
> -	{"different typed nil", (*pb.GoEnum)(nil), (*pb.GoTestField)(nil), false},
> -
> -	{"one set field, one unset field", &pb.GoTestField{Label: String("foo")}, &pb.GoTestField{}, false},
> -	{"one set field zero, one unset field", &pb.GoTest{Param: Int32(0)}, &pb.GoTest{}, false},
> -	{"different set fields", &pb.GoTestField{Label: String("foo")}, &pb.GoTestField{Label: String("bar")}, false},
> -	{"equal set", &pb.GoTestField{Label: String("foo")}, &pb.GoTestField{Label: String("foo")}, true},
> -
> -	{"repeated, one set", &pb.GoTest{F_Int32Repeated: []int32{2, 3}}, &pb.GoTest{}, false},
> -	{"repeated, different length", &pb.GoTest{F_Int32Repeated: []int32{2, 3}}, &pb.GoTest{F_Int32Repeated: []int32{2}}, false},
> -	{"repeated, different value", &pb.GoTest{F_Int32Repeated: []int32{2}}, &pb.GoTest{F_Int32Repeated: []int32{3}}, false},
> -	{"repeated, equal", &pb.GoTest{F_Int32Repeated: []int32{2, 4}}, &pb.GoTest{F_Int32Repeated: []int32{2, 4}}, true},
> -	{"repeated, nil equal nil", &pb.GoTest{F_Int32Repeated: nil}, &pb.GoTest{F_Int32Repeated: nil}, true},
> -	{"repeated, nil equal empty", &pb.GoTest{F_Int32Repeated: nil}, &pb.GoTest{F_Int32Repeated: []int32{}}, true},
> -	{"repeated, empty equal nil", &pb.GoTest{F_Int32Repeated: []int32{}}, &pb.GoTest{F_Int32Repeated: nil}, true},
> -
> -	{
> -		"nested, different",
> -		&pb.GoTest{RequiredField: &pb.GoTestField{Label: String("foo")}},
> -		&pb.GoTest{RequiredField: &pb.GoTestField{Label: String("bar")}},
> -		false,
> -	},
> -	{
> -		"nested, equal",
> -		&pb.GoTest{RequiredField: &pb.GoTestField{Label: String("wow")}},
> -		&pb.GoTest{RequiredField: &pb.GoTestField{Label: String("wow")}},
> -		true,
> -	},
> -
> -	{"bytes", &pb.OtherMessage{Value: []byte("foo")}, &pb.OtherMessage{Value: []byte("foo")}, true},
> -	{"bytes, empty", &pb.OtherMessage{Value: []byte{}}, &pb.OtherMessage{Value: []byte{}}, true},
> -	{"bytes, empty vs nil", &pb.OtherMessage{Value: []byte{}}, &pb.OtherMessage{Value: nil}, false},
> -	{
> -		"repeated bytes",
> -		&pb.MyMessage{RepBytes: [][]byte{[]byte("sham"), []byte("wow")}},
> -		&pb.MyMessage{RepBytes: [][]byte{[]byte("sham"), []byte("wow")}},
> -		true,
> -	},
> -	// In proto3, []byte{} and []byte(nil) are equal.
> -	{"proto3 bytes, empty vs nil", &proto3pb.Message{Data: []byte{}}, &proto3pb.Message{Data: nil}, true},
> -
> -	{"extension vs. no extension", messageWithoutExtension, messageWithExtension1a, false},
> -	{"extension vs. same extension", messageWithExtension1a, messageWithExtension1b, true},
> -	{"extension vs. different extension", messageWithExtension1a, messageWithExtension2, false},
> -
> -	{"int32 extension vs. itself", messageWithInt32Extension1, messageWithInt32Extension1, true},
> -	{"int32 extension vs. a different int32", messageWithInt32Extension1, messageWithInt32Extension2, false},
> -
> -	{
> -		"message with group",
> -		&pb.MyMessage{
> -			Count: Int32(1),
> -			Somegroup: &pb.MyMessage_SomeGroup{
> -				GroupField: Int32(5),
> -			},
> -		},
> -		&pb.MyMessage{
> -			Count: Int32(1),
> -			Somegroup: &pb.MyMessage_SomeGroup{
> -				GroupField: Int32(5),
> -			},
> -		},
> -		true,
> -	},
> -
> -	{
> -		"map same",
> -		&pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken"}},
> -		&pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken"}},
> -		true,
> -	},
> -	{
> -		"map different entry",
> -		&pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken"}},
> -		&pb.MessageWithMap{NameMapping: map[int32]string{2: "Rob"}},
> -		false,
> -	},
> -	{
> -		"map different key only",
> -		&pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken"}},
> -		&pb.MessageWithMap{NameMapping: map[int32]string{2: "Ken"}},
> -		false,
> -	},
> -	{
> -		"map different value only",
> -		&pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken"}},
> -		&pb.MessageWithMap{NameMapping: map[int32]string{1: "Rob"}},
> -		false,
> -	},
> -	{
> -		"zero-length maps same",
> -		&pb.MessageWithMap{NameMapping: map[int32]string{}},
> -		&pb.MessageWithMap{NameMapping: nil},
> -		true,
> -	},
> -	{
> -		"orders in map don't matter",
> -		&pb.MessageWithMap{NameMapping: map[int32]string{1: "Ken", 2: "Rob"}},
> -		&pb.MessageWithMap{NameMapping: map[int32]string{2: "Rob", 1: "Ken"}},
> -		true,
> -	},
> -	{
> -		"oneof same",
> -		&pb.Communique{Union: &pb.Communique_Number{41}},
> -		&pb.Communique{Union: &pb.Communique_Number{41}},
> -		true,
> -	},
> -	{
> -		"oneof one nil",
> -		&pb.Communique{Union: &pb.Communique_Number{41}},
> -		&pb.Communique{},
> -		false,
> -	},
> -	{
> -		"oneof different",
> -		&pb.Communique{Union: &pb.Communique_Number{41}},
> -		&pb.Communique{Union: &pb.Communique_Name{"Bobby Tables"}},
> -		false,
> -	},
> -}
> -
> -func TestEqual(t *testing.T) {
> -	for _, tc := range EqualTests {
> -		if res := Equal(tc.a, tc.b); res != tc.exp {
> -			t.Errorf("%v: Equal(%v, %v) = %v, want %v", tc.desc, tc.a, tc.b, res, tc.exp)
> -		}
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/extensions.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/extensions.go
> deleted file mode 100644
> index eaad2183..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/extensions.go
> +++ /dev/null
> @@ -1,587 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto
> -
> -/*
> - * Types and routines for supporting protocol buffer extensions.
> - */
> -
> -import (
> -	"errors"
> -	"fmt"
> -	"reflect"
> -	"strconv"
> -	"sync"
> -)
> -
> -// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message.
> -var ErrMissingExtension = errors.New("proto: missing extension")
> -
> -// ExtensionRange represents a range of message extensions for a protocol buffer.
> -// Used in code generated by the protocol compiler.
> -type ExtensionRange struct {
> -	Start, End int32 // both inclusive
> -}
> -
> -// extendableProto is an interface implemented by any protocol buffer generated by the current
> -// proto compiler that may be extended.
> -type extendableProto interface {
> -	Message
> -	ExtensionRangeArray() []ExtensionRange
> -	extensionsWrite() map[int32]Extension
> -	extensionsRead() (map[int32]Extension, sync.Locker)
> -}
> -
> -// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous
> -// version of the proto compiler that may be extended.
> -type extendableProtoV1 interface {
> -	Message
> -	ExtensionRangeArray() []ExtensionRange
> -	ExtensionMap() map[int32]Extension
> -}
> -
> -// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto.
> -type extensionAdapter struct {
> -	extendableProtoV1
> -}
> -
> -func (e extensionAdapter) extensionsWrite() map[int32]Extension {
> -	return e.ExtensionMap()
> -}
> -
> -func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {
> -	return e.ExtensionMap(), notLocker{}
> -}
> -
> -// notLocker is a sync.Locker whose Lock and Unlock methods are nops.
> -type notLocker struct{}
> -
> -func (n notLocker) Lock()   {}
> -func (n notLocker) Unlock() {}
> -
> -// extendable returns the extendableProto interface for the given generated proto message.
> -// If the proto message has the old extension format, it returns a wrapper that implements
> -// the extendableProto interface.
> -func extendable(p interface{}) (extendableProto, bool) {
> -	if ep, ok := p.(extendableProto); ok {
> -		return ep, ok
> -	}
> -	if ep, ok := p.(extendableProtoV1); ok {
> -		return extensionAdapter{ep}, ok
> -	}
> -	return nil, false
> -}
> -
> -// XXX_InternalExtensions is an internal representation of proto extensions.
> -//
> -// Each generated message struct type embeds an anonymous XXX_InternalExtensions field,
> -// thus gaining the unexported 'extensions' method, which can be called only from the proto package.
> -//
> -// The methods of XXX_InternalExtensions are not concurrency safe in general,
> -// but calls to logically read-only methods such as has and get may be executed concurrently.
> -type XXX_InternalExtensions struct {
> -	// The struct must be indirect so that if a user inadvertently copies a
> -	// generated message and its embedded XXX_InternalExtensions, they
> -	// avoid the mayhem of a copied mutex.
> -	//
> -	// The mutex serializes all logically read-only operations to p.extensionMap.
> -	// It is up to the client to ensure that write operations to p.extensionMap are
> -	// mutually exclusive with other accesses.
> -	p *struct {
> -		mu           sync.Mutex
> -		extensionMap map[int32]Extension
> -	}
> -}
> -
> -// extensionsWrite returns the extension map, creating it on first use.
> -func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension {
> -	if e.p == nil {
> -		e.p = new(struct {
> -			mu           sync.Mutex
> -			extensionMap map[int32]Extension
> -		})
> -		e.p.extensionMap = make(map[int32]Extension)
> -	}
> -	return e.p.extensionMap
> -}
> -
> -// extensionsRead returns the extensions map for read-only use.  It may be nil.
> -// The caller must hold the returned mutex's lock when accessing Elements within the map.
> -func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) {
> -	if e.p == nil {
> -		return nil, nil
> -	}
> -	return e.p.extensionMap, &e.p.mu
> -}
> -
> -var extendableProtoType = reflect.TypeOf((*extendableProto)(nil)).Elem()
> -var extendableProtoV1Type = reflect.TypeOf((*extendableProtoV1)(nil)).Elem()
> -
> -// ExtensionDesc represents an extension specification.
> -// Used in generated code from the protocol compiler.
> -type ExtensionDesc struct {
> -	ExtendedType  Message     // nil pointer to the type that is being extended
> -	ExtensionType interface{} // nil pointer to the extension type
> -	Field         int32       // field number
> -	Name          string      // fully-qualified name of extension, for text formatting
> -	Tag           string      // protobuf tag style
> -	Filename      string      // name of the file in which the extension is defined
> -}
> -
> -func (ed *ExtensionDesc) repeated() bool {
> -	t := reflect.TypeOf(ed.ExtensionType)
> -	return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8
> -}
> -
> -// Extension represents an extension in a message.
> -type Extension struct {
> -	// When an extension is stored in a message using SetExtension
> -	// only desc and value are set. When the message is marshaled
> -	// enc will be set to the encoded form of the message.
> -	//
> -	// When a message is unmarshaled and contains extensions, each
> -	// extension will have only enc set. When such an extension is
> -	// accessed using GetExtension (or GetExtensions) desc and value
> -	// will be set.
> -	desc  *ExtensionDesc
> -	value interface{}
> -	enc   []byte
> -}
> -
> -// SetRawExtension is for testing only.
> -func SetRawExtension(base Message, id int32, b []byte) {
> -	epb, ok := extendable(base)
> -	if !ok {
> -		return
> -	}
> -	extmap := epb.extensionsWrite()
> -	extmap[id] = Extension{enc: b}
> -}
> -
> -// isExtensionField returns true iff the given field number is in an extension range.
> -func isExtensionField(pb extendableProto, field int32) bool {
> -	for _, er := range pb.ExtensionRangeArray() {
> -		if er.Start <= field && field <= er.End {
> -			return true
> -		}
> -	}
> -	return false
> -}
> -
> -// checkExtensionTypes checks that the given extension is valid for pb.
> -func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error {
> -	var pbi interface{} = pb
> -	// Check the extended type.
> -	if ea, ok := pbi.(extensionAdapter); ok {
> -		pbi = ea.extendableProtoV1
> -	}
> -	if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b {
> -		return errors.New("proto: bad extended type; " + b.String() + " does not extend " + a.String())
> -	}
> -	// Check the range.
> -	if !isExtensionField(pb, extension.Field) {
> -		return errors.New("proto: bad extension number; not in declared ranges")
> -	}
> -	return nil
> -}
> -
> -// extPropKey is sufficient to uniquely identify an extension.
> -type extPropKey struct {
> -	base  reflect.Type
> -	field int32
> -}
> -
> -var extProp = struct {
> -	sync.RWMutex
> -	m map[extPropKey]*Properties
> -}{
> -	m: make(map[extPropKey]*Properties),
> -}
> -
> -func extensionProperties(ed *ExtensionDesc) *Properties {
> -	key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field}
> -
> -	extProp.RLock()
> -	if prop, ok := extProp.m[key]; ok {
> -		extProp.RUnlock()
> -		return prop
> -	}
> -	extProp.RUnlock()
> -
> -	extProp.Lock()
> -	defer extProp.Unlock()
> -	// Check again.
> -	if prop, ok := extProp.m[key]; ok {
> -		return prop
> -	}
> -
> -	prop := new(Properties)
> -	prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil)
> -	extProp.m[key] = prop
> -	return prop
> -}
> -
> -// encode encodes any unmarshaled (unencoded) extensions in e.
> -func encodeExtensions(e *XXX_InternalExtensions) error {
> -	m, mu := e.extensionsRead()
> -	if m == nil {
> -		return nil // fast path
> -	}
> -	mu.Lock()
> -	defer mu.Unlock()
> -	return encodeExtensionsMap(m)
> -}
> -
> -// encode encodes any unmarshaled (unencoded) extensions in e.
> -func encodeExtensionsMap(m map[int32]Extension) error {
> -	for k, e := range m {
> -		if e.value == nil || e.desc == nil {
> -			// Extension is only in its encoded form.
> -			continue
> -		}
> -
> -		// We don't skip extensions that have an encoded form set,
> -		// because the extension value may have been mutated after
> -		// the last time this function was called.
> -
> -		et := reflect.TypeOf(e.desc.ExtensionType)
> -		props := extensionProperties(e.desc)
> -
> -		p := NewBuffer(nil)
> -		// If e.value has type T, the encoder expects a *struct{ X T }.
> -		// Pass a *T with a zero field and hope it all works out.
> -		x := reflect.New(et)
> -		x.Elem().Set(reflect.ValueOf(e.value))
> -		if err := props.enc(p, props, toStructPointer(x)); err != nil {
> -			return err
> -		}
> -		e.enc = p.buf
> -		m[k] = e
> -	}
> -	return nil
> -}
> -
> -func extensionsSize(e *XXX_InternalExtensions) (n int) {
> -	m, mu := e.extensionsRead()
> -	if m == nil {
> -		return 0
> -	}
> -	mu.Lock()
> -	defer mu.Unlock()
> -	return extensionsMapSize(m)
> -}
> -
> -func extensionsMapSize(m map[int32]Extension) (n int) {
> -	for _, e := range m {
> -		if e.value == nil || e.desc == nil {
> -			// Extension is only in its encoded form.
> -			n += len(e.enc)
> -			continue
> -		}
> -
> -		// We don't skip extensions that have an encoded form set,
> -		// because the extension value may have been mutated after
> -		// the last time this function was called.
> -
> -		et := reflect.TypeOf(e.desc.ExtensionType)
> -		props := extensionProperties(e.desc)
> -
> -		// If e.value has type T, the encoder expects a *struct{ X T }.
> -		// Pass a *T with a zero field and hope it all works out.
> -		x := reflect.New(et)
> -		x.Elem().Set(reflect.ValueOf(e.value))
> -		n += props.size(props, toStructPointer(x))
> -	}
> -	return
> -}
> -
> -// HasExtension returns whether the given extension is present in pb.
> -func HasExtension(pb Message, extension *ExtensionDesc) bool {
> -	// TODO: Check types, field numbers, etc.?
> -	epb, ok := extendable(pb)
> -	if !ok {
> -		return false
> -	}
> -	extmap, mu := epb.extensionsRead()
> -	if extmap == nil {
> -		return false
> -	}
> -	mu.Lock()
> -	_, ok = extmap[extension.Field]
> -	mu.Unlock()
> -	return ok
> -}
> -
> -// ClearExtension removes the given extension from pb.
> -func ClearExtension(pb Message, extension *ExtensionDesc) {
> -	epb, ok := extendable(pb)
> -	if !ok {
> -		return
> -	}
> -	// TODO: Check types, field numbers, etc.?
> -	extmap := epb.extensionsWrite()
> -	delete(extmap, extension.Field)
> -}
> -
> -// GetExtension parses and returns the given extension of pb.
> -// If the extension is not present and has no default value it returns ErrMissingExtension.
> -func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
> -	epb, ok := extendable(pb)
> -	if !ok {
> -		return nil, errors.New("proto: not an extendable proto")
> -	}
> -
> -	if err := checkExtensionTypes(epb, extension); err != nil {
> -		return nil, err
> -	}
> -
> -	emap, mu := epb.extensionsRead()
> -	if emap == nil {
> -		return defaultExtensionValue(extension)
> -	}
> -	mu.Lock()
> -	defer mu.Unlock()
> -	e, ok := emap[extension.Field]
> -	if !ok {
> -		// defaultExtensionValue returns the default value or
> -		// ErrMissingExtension if there is no default.
> -		return defaultExtensionValue(extension)
> -	}
> -
> -	if e.value != nil {
> -		// Already decoded. Check the descriptor, though.
> -		if e.desc != extension {
> -			// This shouldn't happen. If it does, it means that
> -			// GetExtension was called twice with two different
> -			// descriptors with the same field number.
> -			return nil, errors.New("proto: descriptor conflict")
> -		}
> -		return e.value, nil
> -	}
> -
> -	v, err := decodeExtension(e.enc, extension)
> -	if err != nil {
> -		return nil, err
> -	}
> -
> -	// Remember the decoded version and drop the encoded version.
> -	// That way it is safe to mutate what we return.
> -	e.value = v
> -	e.desc = extension
> -	e.enc = nil
> -	emap[extension.Field] = e
> -	return e.value, nil
> -}
> -
> -// defaultExtensionValue returns the default value for extension.
> -// If no default for an extension is defined ErrMissingExtension is returned.
> -func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {
> -	t := reflect.TypeOf(extension.ExtensionType)
> -	props := extensionProperties(extension)
> -
> -	sf, _, err := fieldDefault(t, props)
> -	if err != nil {
> -		return nil, err
> -	}
> -
> -	if sf == nil || sf.value == nil {
> -		// There is no default value.
> -		return nil, ErrMissingExtension
> -	}
> -
> -	if t.Kind() != reflect.Ptr {
> -		// We do not need to return a Ptr, we can directly return sf.value.
> -		return sf.value, nil
> -	}
> -
> -	// We need to return an interface{} that is a pointer to sf.value.
> -	value := reflect.New(t).Elem()
> -	value.Set(reflect.New(value.Type().Elem()))
> -	if sf.kind == reflect.Int32 {
> -		// We may have an int32 or an enum, but the underlying data is int32.
> -		// Since we can't set an int32 into a non int32 reflect.value directly
> -		// set it as a int32.
> -		value.Elem().SetInt(int64(sf.value.(int32)))
> -	} else {
> -		value.Elem().Set(reflect.ValueOf(sf.value))
> -	}
> -	return value.Interface(), nil
> -}
> -
> -// decodeExtension decodes an extension encoded in b.
> -func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {
> -	o := NewBuffer(b)
> -
> -	t := reflect.TypeOf(extension.ExtensionType)
> -
> -	props := extensionProperties(extension)
> -
> -	// t is a pointer to a struct, pointer to basic type or a slice.
> -	// Allocate a "field" to store the pointer/slice itself; the
> -	// pointer/slice will be stored here. We pass
> -	// the address of this field to props.dec.
> -	// This passes a zero field and a *t and lets props.dec
> -	// interpret it as a *struct{ x t }.
> -	value := reflect.New(t).Elem()
> -
> -	for {
> -		// Discard wire type and field number varint. It isn't needed.
> -		if _, err := o.DecodeVarint(); err != nil {
> -			return nil, err
> -		}
> -
> -		if err := props.dec(o, props, toStructPointer(value.Addr())); err != nil {
> -			return nil, err
> -		}
> -
> -		if o.index >= len(o.buf) {
> -			break
> -		}
> -	}
> -	return value.Interface(), nil
> -}
> -
> -// GetExtensions returns a slice of the extensions present in pb that are also listed in es.
> -// The returned slice has the same length as es; missing extensions will appear as nil elements.
> -func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) {
> -	epb, ok := extendable(pb)
> -	if !ok {
> -		return nil, errors.New("proto: not an extendable proto")
> -	}
> -	extensions = make([]interface{}, len(es))
> -	for i, e := range es {
> -		extensions[i], err = GetExtension(epb, e)
> -		if err == ErrMissingExtension {
> -			err = nil
> -		}
> -		if err != nil {
> -			return
> -		}
> -	}
> -	return
> -}
> -
> -// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order.
> -// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing
> -// just the Field field, which defines the extension's field number.
> -func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
> -	epb, ok := extendable(pb)
> -	if !ok {
> -		return nil, fmt.Errorf("proto: %T is not an extendable proto.Message", pb)
> -	}
> -	registeredExtensions := RegisteredExtensions(pb)
> -
> -	emap, mu := epb.extensionsRead()
> -	if emap == nil {
> -		return nil, nil
> -	}
> -	mu.Lock()
> -	defer mu.Unlock()
> -	extensions := make([]*ExtensionDesc, 0, len(emap))
> -	for extid, e := range emap {
> -		desc := e.desc
> -		if desc == nil {
> -			desc = registeredExtensions[extid]
> -			if desc == nil {
> -				desc = &ExtensionDesc{Field: extid}
> -			}
> -		}
> -
> -		extensions = append(extensions, desc)
> -	}
> -	return extensions, nil
> -}
> -
> -// SetExtension sets the specified extension of pb to the specified value.
> -func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error {
> -	epb, ok := extendable(pb)
> -	if !ok {
> -		return errors.New("proto: not an extendable proto")
> -	}
> -	if err := checkExtensionTypes(epb, extension); err != nil {
> -		return err
> -	}
> -	typ := reflect.TypeOf(extension.ExtensionType)
> -	if typ != reflect.TypeOf(value) {
> -		return errors.New("proto: bad extension value type")
> -	}
> -	// nil extension values need to be caught early, because the
> -	// encoder can't distinguish an ErrNil due to a nil extension
> -	// from an ErrNil due to a missing field. Extensions are
> -	// always optional, so the encoder would just swallow the error
> -	// and drop all the extensions from the encoded message.
> -	if reflect.ValueOf(value).IsNil() {
> -		return fmt.Errorf("proto: SetExtension called with nil value of type %T", value)
> -	}
> -
> -	extmap := epb.extensionsWrite()
> -	extmap[extension.Field] = Extension{desc: extension, value: value}
> -	return nil
> -}
> -
> -// ClearAllExtensions clears all extensions from pb.
> -func ClearAllExtensions(pb Message) {
> -	epb, ok := extendable(pb)
> -	if !ok {
> -		return
> -	}
> -	m := epb.extensionsWrite()
> -	for k := range m {
> -		delete(m, k)
> -	}
> -}
> -
> -// A global registry of extensions.
> -// The generated code will register the generated descriptors by calling RegisterExtension.
> -
> -var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc)
> -
> -// RegisterExtension is called from the generated code.
> -func RegisterExtension(desc *ExtensionDesc) {
> -	st := reflect.TypeOf(desc.ExtendedType).Elem()
> -	m := extensionMaps[st]
> -	if m == nil {
> -		m = make(map[int32]*ExtensionDesc)
> -		extensionMaps[st] = m
> -	}
> -	if _, ok := m[desc.Field]; ok {
> -		panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field)))
> -	}
> -	m[desc.Field] = desc
> -}
> -
> -// RegisteredExtensions returns a map of the registered extensions of a
> -// protocol buffer struct, indexed by the extension number.
> -// The argument pb should be a nil pointer to the struct type.
> -func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc {
> -	return extensionMaps[reflect.TypeOf(pb).Elem()]
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/extensions_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/extensions_test.go
> deleted file mode 100644
> index b6d9114c..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/extensions_test.go
> +++ /dev/null
> @@ -1,536 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2014 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto_test
> -
> -import (
> -	"bytes"
> -	"fmt"
> -	"reflect"
> -	"sort"
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -	pb "github.com/golang/protobuf/proto/testdata"
> -	"golang.org/x/sync/errgroup"
> -)
> -
> -func TestGetExtensionsWithMissingExtensions(t *testing.T) {
> -	msg := &pb.MyMessage{}
> -	ext1 := &pb.Ext{}
> -	if err := proto.SetExtension(msg, pb.E_Ext_More, ext1); err != nil {
> -		t.Fatalf("Could not set ext1: %s", err)
> -	}
> -	exts, err := proto.GetExtensions(msg, []*proto.ExtensionDesc{
> -		pb.E_Ext_More,
> -		pb.E_Ext_Text,
> -	})
> -	if err != nil {
> -		t.Fatalf("GetExtensions() failed: %s", err)
> -	}
> -	if exts[0] != ext1 {
> -		t.Errorf("ext1 not in returned extensions: %T %v", exts[0], exts[0])
> -	}
> -	if exts[1] != nil {
> -		t.Errorf("ext2 in returned extensions: %T %v", exts[1], exts[1])
> -	}
> -}
> -
> -func TestExtensionDescsWithMissingExtensions(t *testing.T) {
> -	msg := &pb.MyMessage{Count: proto.Int32(0)}
> -	extdesc1 := pb.E_Ext_More
> -	if descs, err := proto.ExtensionDescs(msg); len(descs) != 0 || err != nil {
> -		t.Errorf("proto.ExtensionDescs: got %d descs, error %v; want 0, nil", len(descs), err)
> -	}
> -
> -	ext1 := &pb.Ext{}
> -	if err := proto.SetExtension(msg, extdesc1, ext1); err != nil {
> -		t.Fatalf("Could not set ext1: %s", err)
> -	}
> -	extdesc2 := &proto.ExtensionDesc{
> -		ExtendedType:  (*pb.MyMessage)(nil),
> -		ExtensionType: (*bool)(nil),
> -		Field:         123456789,
> -		Name:          "a.b",
> -		Tag:           "varint,123456789,opt",
> -	}
> -	ext2 := proto.Bool(false)
> -	if err := proto.SetExtension(msg, extdesc2, ext2); err != nil {
> -		t.Fatalf("Could not set ext2: %s", err)
> -	}
> -
> -	b, err := proto.Marshal(msg)
> -	if err != nil {
> -		t.Fatalf("Could not marshal msg: %v", err)
> -	}
> -	if err := proto.Unmarshal(b, msg); err != nil {
> -		t.Fatalf("Could not unmarshal into msg: %v", err)
> -	}
> -
> -	descs, err := proto.ExtensionDescs(msg)
> -	if err != nil {
> -		t.Fatalf("proto.ExtensionDescs: got error %v", err)
> -	}
> -	sortExtDescs(descs)
> -	wantDescs := []*proto.ExtensionDesc{extdesc1, &proto.ExtensionDesc{Field: extdesc2.Field}}
> -	if !reflect.DeepEqual(descs, wantDescs) {
> -		t.Errorf("proto.ExtensionDescs(msg) sorted extension ids: got %+v, want %+v", descs, wantDescs)
> -	}
> -}
> -
> -type ExtensionDescSlice []*proto.ExtensionDesc
> -
> -func (s ExtensionDescSlice) Len() int           { return len(s) }
> -func (s ExtensionDescSlice) Less(i, j int) bool { return s[i].Field < s[j].Field }
> -func (s ExtensionDescSlice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
> -
> -func sortExtDescs(s []*proto.ExtensionDesc) {
> -	sort.Sort(ExtensionDescSlice(s))
> -}
> -
> -func TestGetExtensionStability(t *testing.T) {
> -	check := func(m *pb.MyMessage) bool {
> -		ext1, err := proto.GetExtension(m, pb.E_Ext_More)
> -		if err != nil {
> -			t.Fatalf("GetExtension() failed: %s", err)
> -		}
> -		ext2, err := proto.GetExtension(m, pb.E_Ext_More)
> -		if err != nil {
> -			t.Fatalf("GetExtension() failed: %s", err)
> -		}
> -		return ext1 == ext2
> -	}
> -	msg := &pb.MyMessage{Count: proto.Int32(4)}
> -	ext0 := &pb.Ext{}
> -	if err := proto.SetExtension(msg, pb.E_Ext_More, ext0); err != nil {
> -		t.Fatalf("Could not set ext1: %s", ext0)
> -	}
> -	if !check(msg) {
> -		t.Errorf("GetExtension() not stable before marshaling")
> -	}
> -	bb, err := proto.Marshal(msg)
> -	if err != nil {
> -		t.Fatalf("Marshal() failed: %s", err)
> -	}
> -	msg1 := &pb.MyMessage{}
> -	err = proto.Unmarshal(bb, msg1)
> -	if err != nil {
> -		t.Fatalf("Unmarshal() failed: %s", err)
> -	}
> -	if !check(msg1) {
> -		t.Errorf("GetExtension() not stable after unmarshaling")
> -	}
> -}
> -
> -func TestGetExtensionDefaults(t *testing.T) {
> -	var setFloat64 float64 = 1
> -	var setFloat32 float32 = 2
> -	var setInt32 int32 = 3
> -	var setInt64 int64 = 4
> -	var setUint32 uint32 = 5
> -	var setUint64 uint64 = 6
> -	var setBool = true
> -	var setBool2 = false
> -	var setString = "Goodnight string"
> -	var setBytes = []byte("Goodnight bytes")
> -	var setEnum = pb.DefaultsMessage_TWO
> -
> -	type testcase struct {
> -		ext  *proto.ExtensionDesc // Extension we are testing.
> -		want interface{}          // Expected value of extension, or nil (meaning that GetExtension will fail).
> -		def  interface{}          // Expected value of extension after ClearExtension().
> -	}
> -	tests := []testcase{
> -		{pb.E_NoDefaultDouble, setFloat64, nil},
> -		{pb.E_NoDefaultFloat, setFloat32, nil},
> -		{pb.E_NoDefaultInt32, setInt32, nil},
> -		{pb.E_NoDefaultInt64, setInt64, nil},
> -		{pb.E_NoDefaultUint32, setUint32, nil},
> -		{pb.E_NoDefaultUint64, setUint64, nil},
> -		{pb.E_NoDefaultSint32, setInt32, nil},
> -		{pb.E_NoDefaultSint64, setInt64, nil},
> -		{pb.E_NoDefaultFixed32, setUint32, nil},
> -		{pb.E_NoDefaultFixed64, setUint64, nil},
> -		{pb.E_NoDefaultSfixed32, setInt32, nil},
> -		{pb.E_NoDefaultSfixed64, setInt64, nil},
> -		{pb.E_NoDefaultBool, setBool, nil},
> -		{pb.E_NoDefaultBool, setBool2, nil},
> -		{pb.E_NoDefaultString, setString, nil},
> -		{pb.E_NoDefaultBytes, setBytes, nil},
> -		{pb.E_NoDefaultEnum, setEnum, nil},
> -		{pb.E_DefaultDouble, setFloat64, float64(3.1415)},
> -		{pb.E_DefaultFloat, setFloat32, float32(3.14)},
> -		{pb.E_DefaultInt32, setInt32, int32(42)},
> -		{pb.E_DefaultInt64, setInt64, int64(43)},
> -		{pb.E_DefaultUint32, setUint32, uint32(44)},
> -		{pb.E_DefaultUint64, setUint64, uint64(45)},
> -		{pb.E_DefaultSint32, setInt32, int32(46)},
> -		{pb.E_DefaultSint64, setInt64, int64(47)},
> -		{pb.E_DefaultFixed32, setUint32, uint32(48)},
> -		{pb.E_DefaultFixed64, setUint64, uint64(49)},
> -		{pb.E_DefaultSfixed32, setInt32, int32(50)},
> -		{pb.E_DefaultSfixed64, setInt64, int64(51)},
> -		{pb.E_DefaultBool, setBool, true},
> -		{pb.E_DefaultBool, setBool2, true},
> -		{pb.E_DefaultString, setString, "Hello, string"},
> -		{pb.E_DefaultBytes, setBytes, []byte("Hello, bytes")},
> -		{pb.E_DefaultEnum, setEnum, pb.DefaultsMessage_ONE},
> -	}
> -
> -	checkVal := func(test testcase, msg *pb.DefaultsMessage, valWant interface{}) error {
> -		val, err := proto.GetExtension(msg, test.ext)
> -		if err != nil {
> -			if valWant != nil {
> -				return fmt.Errorf("GetExtension(): %s", err)
> -			}
> -			if want := proto.ErrMissingExtension; err != want {
> -				return fmt.Errorf("Unexpected error: got %v, want %v", err, want)
> -			}
> -			return nil
> -		}
> -
> -		// All proto2 extension values are either a pointer to a value or a slice of values.
> -		ty := reflect.TypeOf(val)
> -		tyWant := reflect.TypeOf(test.ext.ExtensionType)
> -		if got, want := ty, tyWant; got != want {
> -			return fmt.Errorf("unexpected reflect.TypeOf(): got %v want %v", got, want)
> -		}
> -		tye := ty.Elem()
> -		tyeWant := tyWant.Elem()
> -		if got, want := tye, tyeWant; got != want {
> -			return fmt.Errorf("unexpected reflect.TypeOf().Elem(): got %v want %v", got, want)
> -		}
> -
> -		// Check the name of the type of the value.
> -		// If it is an enum it will be type int32 with the name of the enum.
> -		if got, want := tye.Name(), tye.Name(); got != want {
> -			return fmt.Errorf("unexpected reflect.TypeOf().Elem().Name(): got %v want %v", got, want)
> -		}
> -
> -		// Check that value is what we expect.
> -		// If we have a pointer in val, get the value it points to.
> -		valExp := val
> -		if ty.Kind() == reflect.Ptr {
> -			valExp = reflect.ValueOf(val).Elem().Interface()
> -		}
> -		if got, want := valExp, valWant; !reflect.DeepEqual(got, want) {
> -			return fmt.Errorf("unexpected reflect.DeepEqual(): got %v want %v", got, want)
> -		}
> -
> -		return nil
> -	}
> -
> -	setTo := func(test testcase) interface{} {
> -		setTo := reflect.ValueOf(test.want)
> -		if typ := reflect.TypeOf(test.ext.ExtensionType); typ.Kind() == reflect.Ptr {
> -			setTo = reflect.New(typ).Elem()
> -			setTo.Set(reflect.New(setTo.Type().Elem()))
> -			setTo.Elem().Set(reflect.ValueOf(test.want))
> -		}
> -		return setTo.Interface()
> -	}
> -
> -	for _, test := range tests {
> -		msg := &pb.DefaultsMessage{}
> -		name := test.ext.Name
> -
> -		// Check the initial value.
> -		if err := checkVal(test, msg, test.def); err != nil {
> -			t.Errorf("%s: %v", name, err)
> -		}
> -
> -		// Set the per-type value and check value.
> -		name = fmt.Sprintf("%s (set to %T %v)", name, test.want, test.want)
> -		if err := proto.SetExtension(msg, test.ext, setTo(test)); err != nil {
> -			t.Errorf("%s: SetExtension(): %v", name, err)
> -			continue
> -		}
> -		if err := checkVal(test, msg, test.want); err != nil {
> -			t.Errorf("%s: %v", name, err)
> -			continue
> -		}
> -
> -		// Set and check the value.
> -		name += " (cleared)"
> -		proto.ClearExtension(msg, test.ext)
> -		if err := checkVal(test, msg, test.def); err != nil {
> -			t.Errorf("%s: %v", name, err)
> -		}
> -	}
> -}
> -
> -func TestExtensionsRoundTrip(t *testing.T) {
> -	msg := &pb.MyMessage{}
> -	ext1 := &pb.Ext{
> -		Data: proto.String("hi"),
> -	}
> -	ext2 := &pb.Ext{
> -		Data: proto.String("there"),
> -	}
> -	exists := proto.HasExtension(msg, pb.E_Ext_More)
> -	if exists {
> -		t.Error("Extension More present unexpectedly")
> -	}
> -	if err := proto.SetExtension(msg, pb.E_Ext_More, ext1); err != nil {
> -		t.Error(err)
> -	}
> -	if err := proto.SetExtension(msg, pb.E_Ext_More, ext2); err != nil {
> -		t.Error(err)
> -	}
> -	e, err := proto.GetExtension(msg, pb.E_Ext_More)
> -	if err != nil {
> -		t.Error(err)
> -	}
> -	x, ok := e.(*pb.Ext)
> -	if !ok {
> -		t.Errorf("e has type %T, expected testdata.Ext", e)
> -	} else if *x.Data != "there" {
> -		t.Errorf("SetExtension failed to overwrite, got %+v, not 'there'", x)
> -	}
> -	proto.ClearExtension(msg, pb.E_Ext_More)
> -	if _, err = proto.GetExtension(msg, pb.E_Ext_More); err != proto.ErrMissingExtension {
> -		t.Errorf("got %v, expected ErrMissingExtension", e)
> -	}
> -	if _, err := proto.GetExtension(msg, pb.E_X215); err == nil {
> -		t.Error("expected bad extension error, got nil")
> -	}
> -	if err := proto.SetExtension(msg, pb.E_X215, 12); err == nil {
> -		t.Error("expected extension err")
> -	}
> -	if err := proto.SetExtension(msg, pb.E_Ext_More, 12); err == nil {
> -		t.Error("expected some sort of type mismatch error, got nil")
> -	}
> -}
> -
> -func TestNilExtension(t *testing.T) {
> -	msg := &pb.MyMessage{
> -		Count: proto.Int32(1),
> -	}
> -	if err := proto.SetExtension(msg, pb.E_Ext_Text, proto.String("hello")); err != nil {
> -		t.Fatal(err)
> -	}
> -	if err := proto.SetExtension(msg, pb.E_Ext_More, (*pb.Ext)(nil)); err == nil {
> -		t.Error("expected SetExtension to fail due to a nil extension")
> -	} else if want := "proto: SetExtension called with nil value of type *testdata.Ext"; err.Error() != want {
> -		t.Errorf("expected error %v, got %v", want, err)
> -	}
> -	// Note: if the behavior of Marshal is ever changed to ignore nil extensions, update
> -	// this test to verify that E_Ext_Text is properly propagated through marshal->unmarshal.
> -}
> -
> -func TestMarshalUnmarshalRepeatedExtension(t *testing.T) {
> -	// Add a repeated extension to the result.
> -	tests := []struct {
> -		name string
> -		ext  []*pb.ComplexExtension
> -	}{
> -		{
> -			"two fields",
> -			[]*pb.ComplexExtension{
> -				{First: proto.Int32(7)},
> -				{Second: proto.Int32(11)},
> -			},
> -		},
> -		{
> -			"repeated field",
> -			[]*pb.ComplexExtension{
> -				{Third: []int32{1000}},
> -				{Third: []int32{2000}},
> -			},
> -		},
> -		{
> -			"two fields and repeated field",
> -			[]*pb.ComplexExtension{
> -				{Third: []int32{1000}},
> -				{First: proto.Int32(9)},
> -				{Second: proto.Int32(21)},
> -				{Third: []int32{2000}},
> -			},
> -		},
> -	}
> -	for _, test := range tests {
> -		// Marshal message with a repeated extension.
> -		msg1 := new(pb.OtherMessage)
> -		err := proto.SetExtension(msg1, pb.E_RComplex, test.ext)
> -		if err != nil {
> -			t.Fatalf("[%s] Error setting extension: %v", test.name, err)
> -		}
> -		b, err := proto.Marshal(msg1)
> -		if err != nil {
> -			t.Fatalf("[%s] Error marshaling message: %v", test.name, err)
> -		}
> -
> -		// Unmarshal and read the merged proto.
> -		msg2 := new(pb.OtherMessage)
> -		err = proto.Unmarshal(b, msg2)
> -		if err != nil {
> -			t.Fatalf("[%s] Error unmarshaling message: %v", test.name, err)
> -		}
> -		e, err := proto.GetExtension(msg2, pb.E_RComplex)
> -		if err != nil {
> -			t.Fatalf("[%s] Error getting extension: %v", test.name, err)
> -		}
> -		ext := e.([]*pb.ComplexExtension)
> -		if ext == nil {
> -			t.Fatalf("[%s] Invalid extension", test.name)
> -		}
> -		if !reflect.DeepEqual(ext, test.ext) {
> -			t.Errorf("[%s] Wrong value for ComplexExtension: got: %v want: %v\n", test.name, ext, test.ext)
> -		}
> -	}
> -}
> -
> -func TestUnmarshalRepeatingNonRepeatedExtension(t *testing.T) {
> -	// We may see multiple instances of the same extension in the wire
> -	// format. For example, the proto compiler may encode custom options in
> -	// this way. Here, we verify that we merge the extensions together.
> -	tests := []struct {
> -		name string
> -		ext  []*pb.ComplexExtension
> -	}{
> -		{
> -			"two fields",
> -			[]*pb.ComplexExtension{
> -				{First: proto.Int32(7)},
> -				{Second: proto.Int32(11)},
> -			},
> -		},
> -		{
> -			"repeated field",
> -			[]*pb.ComplexExtension{
> -				{Third: []int32{1000}},
> -				{Third: []int32{2000}},
> -			},
> -		},
> -		{
> -			"two fields and repeated field",
> -			[]*pb.ComplexExtension{
> -				{Third: []int32{1000}},
> -				{First: proto.Int32(9)},
> -				{Second: proto.Int32(21)},
> -				{Third: []int32{2000}},
> -			},
> -		},
> -	}
> -	for _, test := range tests {
> -		var buf bytes.Buffer
> -		var want pb.ComplexExtension
> -
> -		// Generate a serialized representation of a repeated extension
> -		// by catenating bytes together.
> -		for i, e := range test.ext {
> -			// Merge to create the wanted proto.
> -			proto.Merge(&want, e)
> -
> -			// serialize the message
> -			msg := new(pb.OtherMessage)
> -			err := proto.SetExtension(msg, pb.E_Complex, e)
> -			if err != nil {
> -				t.Fatalf("[%s] Error setting extension %d: %v", test.name, i, err)
> -			}
> -			b, err := proto.Marshal(msg)
> -			if err != nil {
> -				t.Fatalf("[%s] Error marshaling message %d: %v", test.name, i, err)
> -			}
> -			buf.Write(b)
> -		}
> -
> -		// Unmarshal and read the merged proto.
> -		msg2 := new(pb.OtherMessage)
> -		err := proto.Unmarshal(buf.Bytes(), msg2)
> -		if err != nil {
> -			t.Fatalf("[%s] Error unmarshaling message: %v", test.name, err)
> -		}
> -		e, err := proto.GetExtension(msg2, pb.E_Complex)
> -		if err != nil {
> -			t.Fatalf("[%s] Error getting extension: %v", test.name, err)
> -		}
> -		ext := e.(*pb.ComplexExtension)
> -		if ext == nil {
> -			t.Fatalf("[%s] Invalid extension", test.name)
> -		}
> -		if !reflect.DeepEqual(*ext, want) {
> -			t.Errorf("[%s] Wrong value for ComplexExtension: got: %s want: %s\n", test.name, ext, want)
> -		}
> -	}
> -}
> -
> -func TestClearAllExtensions(t *testing.T) {
> -	// unregistered extension
> -	desc := &proto.ExtensionDesc{
> -		ExtendedType:  (*pb.MyMessage)(nil),
> -		ExtensionType: (*bool)(nil),
> -		Field:         101010100,
> -		Name:          "emptyextension",
> -		Tag:           "varint,0,opt",
> -	}
> -	m := &pb.MyMessage{}
> -	if proto.HasExtension(m, desc) {
> -		t.Errorf("proto.HasExtension(%s): got true, want false", proto.MarshalTextString(m))
> -	}
> -	if err := proto.SetExtension(m, desc, proto.Bool(true)); err != nil {
> -		t.Errorf("proto.SetExtension(m, desc, true): got error %q, want nil", err)
> -	}
> -	if !proto.HasExtension(m, desc) {
> -		t.Errorf("proto.HasExtension(%s): got false, want true", proto.MarshalTextString(m))
> -	}
> -	proto.ClearAllExtensions(m)
> -	if proto.HasExtension(m, desc) {
> -		t.Errorf("proto.HasExtension(%s): got true, want false", proto.MarshalTextString(m))
> -	}
> -}
> -
> -func TestMarshalRace(t *testing.T) {
> -	// unregistered extension
> -	desc := &proto.ExtensionDesc{
> -		ExtendedType:  (*pb.MyMessage)(nil),
> -		ExtensionType: (*bool)(nil),
> -		Field:         101010100,
> -		Name:          "emptyextension",
> -		Tag:           "varint,0,opt",
> -	}
> -
> -	m := &pb.MyMessage{Count: proto.Int32(4)}
> -	if err := proto.SetExtension(m, desc, proto.Bool(true)); err != nil {
> -		t.Errorf("proto.SetExtension(m, desc, true): got error %q, want nil", err)
> -	}
> -
> -	var g errgroup.Group
> -	for n := 3; n > 0; n-- {
> -		g.Go(func() error {
> -			_, err := proto.Marshal(m)
> -			return err
> -		})
> -	}
> -	if err := g.Wait(); err != nil {
> -		t.Fatal(err)
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/lib.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/lib.go
> deleted file mode 100644
> index 1c225504..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/lib.go
> +++ /dev/null
> @@ -1,897 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -/*
> -Package proto converts data structures to and from the wire format of
> -protocol buffers.  It works in concert with the Go source code generated
> -for .proto files by the protocol compiler.
> -
> -A summary of the properties of the protocol buffer interface
> -for a protocol buffer variable v:
> -
> -  - Names are turned from camel_case to CamelCase for export.
> -  - There are no methods on v to set fields; just treat
> -	them as structure fields.
> -  - There are getters that return a field's value if set,
> -	and return the field's default value if unset.
> -	The getters work even if the receiver is a nil message.
> -  - The zero value for a struct is its correct initialization state.
> -	All desired fields must be set before marshaling.
> -  - A Reset() method will restore a protobuf struct to its zero state.
> -  - Non-repeated fields are pointers to the values; nil means unset.
> -	That is, optional or required field int32 f becomes F *int32.
> -  - Repeated fields are slices.
> -  - Helper functions are available to aid the setting of fields.
> -	msg.Foo = proto.String("hello") // set field
> -  - Constants are defined to hold the default values of all fields that
> -	have them.  They have the form Default_StructName_FieldName.
> -	Because the getter methods handle defaulted values,
> -	direct use of these constants should be rare.
> -  - Enums are given type names and maps from names to values.
> -	Enum values are prefixed by the enclosing message's name, or by the
> -	enum's type name if it is a top-level enum. Enum types have a String
> -	method, and a Enum method to assist in message construction.
> -  - Nested messages, groups and enums have type names prefixed with the name of
> -	the surrounding message type.
> -  - Extensions are given descriptor names that start with E_,
> -	followed by an underscore-delimited list of the nested messages
> -	that contain it (if any) followed by the CamelCased name of the
> -	extension field itself.  HasExtension, ClearExtension, GetExtension
> -	and SetExtension are functions for manipulating extensions.
> -  - Oneof field sets are given a single field in their message,
> -	with distinguished wrapper types for each possible field value.
> -  - Marshal and Unmarshal are functions to encode and decode the wire format.
> -
> -When the .proto file specifies `syntax="proto3"`, there are some differences:
> -
> -  - Non-repeated fields of non-message type are values instead of pointers.
> -  - Enum types do not get an Enum method.
> -
> -The simplest way to describe this is to see an example.
> -Given file test.proto, containing
> -
> -	package example;
> -
> -	enum FOO { X = 17; }
> -
> -	message Test {
> -	  required string label = 1;
> -	  optional int32 type = 2 [default=77];
> -	  repeated int64 reps = 3;
> -	  optional group OptionalGroup = 4 {
> -	    required string RequiredField = 5;
> -	  }
> -	  oneof union {
> -	    int32 number = 6;
> -	    string name = 7;
> -	  }
> -	}
> -
> -The resulting file, test.pb.go, is:
> -
> -	package example
> -
> -	import proto "github.com/golang/protobuf/proto"
> -	import math "math"
> -
> -	type FOO int32
> -	const (
> -		FOO_X FOO = 17
> -	)
> -	var FOO_name = map[int32]string{
> -		17: "X",
> -	}
> -	var FOO_value = map[string]int32{
> -		"X": 17,
> -	}
> -
> -	func (x FOO) Enum() *FOO {
> -		p := new(FOO)
> -		*p = x
> -		return p
> -	}
> -	func (x FOO) String() string {
> -		return proto.EnumName(FOO_name, int32(x))
> -	}
> -	func (x *FOO) UnmarshalJSON(data []byte) error {
> -		value, err := proto.UnmarshalJSONEnum(FOO_value, data)
> -		if err != nil {
> -			return err
> -		}
> -		*x = FOO(value)
> -		return nil
> -	}
> -
> -	type Test struct {
> -		Label         *string             `protobuf:"bytes,1,req,name=label" json:"label,omitempty"`
> -		Type          *int32              `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"`
> -		Reps          []int64             `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"`
> -		Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"`
> -		// Types that are valid to be assigned to Union:
> -		//	*Test_Number
> -		//	*Test_Name
> -		Union            isTest_Union `protobuf_oneof:"union"`
> -		XXX_unrecognized []byte       `json:"-"`
> -	}
> -	func (m *Test) Reset()         { *m = Test{} }
> -	func (m *Test) String() string { return proto.CompactTextString(m) }
> -	func (*Test) ProtoMessage() {}
> -
> -	type isTest_Union interface {
> -		isTest_Union()
> -	}
> -
> -	type Test_Number struct {
> -		Number int32 `protobuf:"varint,6,opt,name=number"`
> -	}
> -	type Test_Name struct {
> -		Name string `protobuf:"bytes,7,opt,name=name"`
> -	}
> -
> -	func (*Test_Number) isTest_Union() {}
> -	func (*Test_Name) isTest_Union()   {}
> -
> -	func (m *Test) GetUnion() isTest_Union {
> -		if m != nil {
> -			return m.Union
> -		}
> -		return nil
> -	}
> -	const Default_Test_Type int32 = 77
> -
> -	func (m *Test) GetLabel() string {
> -		if m != nil && m.Label != nil {
> -			return *m.Label
> -		}
> -		return ""
> -	}
> -
> -	func (m *Test) GetType() int32 {
> -		if m != nil && m.Type != nil {
> -			return *m.Type
> -		}
> -		return Default_Test_Type
> -	}
> -
> -	func (m *Test) GetOptionalgroup() *Test_OptionalGroup {
> -		if m != nil {
> -			return m.Optionalgroup
> -		}
> -		return nil
> -	}
> -
> -	type Test_OptionalGroup struct {
> -		RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"`
> -	}
> -	func (m *Test_OptionalGroup) Reset()         { *m = Test_OptionalGroup{} }
> -	func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) }
> -
> -	func (m *Test_OptionalGroup) GetRequiredField() string {
> -		if m != nil && m.RequiredField != nil {
> -			return *m.RequiredField
> -		}
> -		return ""
> -	}
> -
> -	func (m *Test) GetNumber() int32 {
> -		if x, ok := m.GetUnion().(*Test_Number); ok {
> -			return x.Number
> -		}
> -		return 0
> -	}
> -
> -	func (m *Test) GetName() string {
> -		if x, ok := m.GetUnion().(*Test_Name); ok {
> -			return x.Name
> -		}
> -		return ""
> -	}
> -
> -	func init() {
> -		proto.RegisterEnum("example.FOO", FOO_name, FOO_value)
> -	}
> -
> -To create and play with a Test object:
> -
> -	package main
> -
> -	import (
> -		"log"
> -
> -		"github.com/golang/protobuf/proto"
> -		pb "./example.pb"
> -	)
> -
> -	func main() {
> -		test := &pb.Test{
> -			Label: proto.String("hello"),
> -			Type:  proto.Int32(17),
> -			Reps:  []int64{1, 2, 3},
> -			Optionalgroup: &pb.Test_OptionalGroup{
> -				RequiredField: proto.String("good bye"),
> -			},
> -			Union: &pb.Test_Name{"fred"},
> -		}
> -		data, err := proto.Marshal(test)
> -		if err != nil {
> -			log.Fatal("marshaling error: ", err)
> -		}
> -		newTest := &pb.Test{}
> -		err = proto.Unmarshal(data, newTest)
> -		if err != nil {
> -			log.Fatal("unmarshaling error: ", err)
> -		}
> -		// Now test and newTest contain the same data.
> -		if test.GetLabel() != newTest.GetLabel() {
> -			log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
> -		}
> -		// Use a type switch to determine which oneof was set.
> -		switch u := test.Union.(type) {
> -		case *pb.Test_Number: // u.Number contains the number.
> -		case *pb.Test_Name: // u.Name contains the string.
> -		}
> -		// etc.
> -	}
> -*/
> -package proto
> -
> -import (
> -	"encoding/json"
> -	"fmt"
> -	"log"
> -	"reflect"
> -	"sort"
> -	"strconv"
> -	"sync"
> -)
> -
> -// Message is implemented by generated protocol buffer messages.
> -type Message interface {
> -	Reset()
> -	String() string
> -	ProtoMessage()
> -}
> -
> -// Stats records allocation details about the protocol buffer encoders
> -// and decoders.  Useful for tuning the library itself.
> -type Stats struct {
> -	Emalloc uint64 // mallocs in encode
> -	Dmalloc uint64 // mallocs in decode
> -	Encode  uint64 // number of encodes
> -	Decode  uint64 // number of decodes
> -	Chit    uint64 // number of cache hits
> -	Cmiss   uint64 // number of cache misses
> -	Size    uint64 // number of sizes
> -}
> -
> -// Set to true to enable stats collection.
> -const collectStats = false
> -
> -var stats Stats
> -
> -// GetStats returns a copy of the global Stats structure.
> -func GetStats() Stats { return stats }
> -
> -// A Buffer is a buffer manager for marshaling and unmarshaling
> -// protocol buffers.  It may be reused between invocations to
> -// reduce memory usage.  It is not necessary to use a Buffer;
> -// the global functions Marshal and Unmarshal create a
> -// temporary Buffer and are fine for most applications.
> -type Buffer struct {
> -	buf   []byte // encode/decode byte stream
> -	index int    // read point
> -
> -	// pools of basic types to amortize allocation.
> -	bools   []bool
> -	uint32s []uint32
> -	uint64s []uint64
> -
> -	// extra pools, only used with pointer_reflect.go
> -	int32s   []int32
> -	int64s   []int64
> -	float32s []float32
> -	float64s []float64
> -}
> -
> -// NewBuffer allocates a new Buffer and initializes its internal data to
> -// the contents of the argument slice.
> -func NewBuffer(e []byte) *Buffer {
> -	return &Buffer{buf: e}
> -}
> -
> -// Reset resets the Buffer, ready for marshaling a new protocol buffer.
> -func (p *Buffer) Reset() {
> -	p.buf = p.buf[0:0] // for reading/writing
> -	p.index = 0        // for reading
> -}
> -
> -// SetBuf replaces the internal buffer with the slice,
> -// ready for unmarshaling the contents of the slice.
> -func (p *Buffer) SetBuf(s []byte) {
> -	p.buf = s
> -	p.index = 0
> -}
> -
> -// Bytes returns the contents of the Buffer.
> -func (p *Buffer) Bytes() []byte { return p.buf }
> -
> -/*
> - * Helper routines for simplifying the creation of optional fields of basic type.
> - */
> -
> -// Bool is a helper routine that allocates a new bool value
> -// to store v and returns a pointer to it.
> -func Bool(v bool) *bool {
> -	return &v
> -}
> -
> -// Int32 is a helper routine that allocates a new int32 value
> -// to store v and returns a pointer to it.
> -func Int32(v int32) *int32 {
> -	return &v
> -}
> -
> -// Int is a helper routine that allocates a new int32 value
> -// to store v and returns a pointer to it, but unlike Int32
> -// its argument value is an int.
> -func Int(v int) *int32 {
> -	p := new(int32)
> -	*p = int32(v)
> -	return p
> -}
> -
> -// Int64 is a helper routine that allocates a new int64 value
> -// to store v and returns a pointer to it.
> -func Int64(v int64) *int64 {
> -	return &v
> -}
> -
> -// Float32 is a helper routine that allocates a new float32 value
> -// to store v and returns a pointer to it.
> -func Float32(v float32) *float32 {
> -	return &v
> -}
> -
> -// Float64 is a helper routine that allocates a new float64 value
> -// to store v and returns a pointer to it.
> -func Float64(v float64) *float64 {
> -	return &v
> -}
> -
> -// Uint32 is a helper routine that allocates a new uint32 value
> -// to store v and returns a pointer to it.
> -func Uint32(v uint32) *uint32 {
> -	return &v
> -}
> -
> -// Uint64 is a helper routine that allocates a new uint64 value
> -// to store v and returns a pointer to it.
> -func Uint64(v uint64) *uint64 {
> -	return &v
> -}
> -
> -// String is a helper routine that allocates a new string value
> -// to store v and returns a pointer to it.
> -func String(v string) *string {
> -	return &v
> -}
> -
> -// EnumName is a helper function to simplify printing protocol buffer enums
> -// by name.  Given an enum map and a value, it returns a useful string.
> -func EnumName(m map[int32]string, v int32) string {
> -	s, ok := m[v]
> -	if ok {
> -		return s
> -	}
> -	return strconv.Itoa(int(v))
> -}
> -
> -// UnmarshalJSONEnum is a helper function to simplify recovering enum int values
> -// from their JSON-encoded representation. Given a map from the enum's symbolic
> -// names to its int values, and a byte buffer containing the JSON-encoded
> -// value, it returns an int32 that can be cast to the enum type by the caller.
> -//
> -// The function can deal with both JSON representations, numeric and symbolic.
> -func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) {
> -	if data[0] == '"' {
> -		// New style: enums are strings.
> -		var repr string
> -		if err := json.Unmarshal(data, &repr); err != nil {
> -			return -1, err
> -		}
> -		val, ok := m[repr]
> -		if !ok {
> -			return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr)
> -		}
> -		return val, nil
> -	}
> -	// Old style: enums are ints.
> -	var val int32
> -	if err := json.Unmarshal(data, &val); err != nil {
> -		return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName)
> -	}
> -	return val, nil
> -}
> -
> -// DebugPrint dumps the encoded data in b in a debugging format with a header
> -// including the string s. Used in testing but made available for general debugging.
> -func (p *Buffer) DebugPrint(s string, b []byte) {
> -	var u uint64
> -
> -	obuf := p.buf
> -	index := p.index
> -	p.buf = b
> -	p.index = 0
> -	depth := 0
> -
> -	fmt.Printf("\n--- %s ---\n", s)
> -
> -out:
> -	for {
> -		for i := 0; i < depth; i++ {
> -			fmt.Print("  ")
> -		}
> -
> -		index := p.index
> -		if index == len(p.buf) {
> -			break
> -		}
> -
> -		op, err := p.DecodeVarint()
> -		if err != nil {
> -			fmt.Printf("%3d: fetching op err %v\n", index, err)
> -			break out
> -		}
> -		tag := op >> 3
> -		wire := op & 7
> -
> -		switch wire {
> -		default:
> -			fmt.Printf("%3d: t=%3d unknown wire=%d\n",
> -				index, tag, wire)
> -			break out
> -
> -		case WireBytes:
> -			var r []byte
> -
> -			r, err = p.DecodeRawBytes(false)
> -			if err != nil {
> -				break out
> -			}
> -			fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r))
> -			if len(r) <= 6 {
> -				for i := 0; i < len(r); i++ {
> -					fmt.Printf(" %.2x", r[i])
> -				}
> -			} else {
> -				for i := 0; i < 3; i++ {
> -					fmt.Printf(" %.2x", r[i])
> -				}
> -				fmt.Printf(" ..")
> -				for i := len(r) - 3; i < len(r); i++ {
> -					fmt.Printf(" %.2x", r[i])
> -				}
> -			}
> -			fmt.Printf("\n")
> -
> -		case WireFixed32:
> -			u, err = p.DecodeFixed32()
> -			if err != nil {
> -				fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err)
> -				break out
> -			}
> -			fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u)
> -
> -		case WireFixed64:
> -			u, err = p.DecodeFixed64()
> -			if err != nil {
> -				fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err)
> -				break out
> -			}
> -			fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u)
> -
> -		case WireVarint:
> -			u, err = p.DecodeVarint()
> -			if err != nil {
> -				fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err)
> -				break out
> -			}
> -			fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u)
> -
> -		case WireStartGroup:
> -			fmt.Printf("%3d: t=%3d start\n", index, tag)
> -			depth++
> -
> -		case WireEndGroup:
> -			depth--
> -			fmt.Printf("%3d: t=%3d end\n", index, tag)
> -		}
> -	}
> -
> -	if depth != 0 {
> -		fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth)
> -	}
> -	fmt.Printf("\n")
> -
> -	p.buf = obuf
> -	p.index = index
> -}
> -
> -// SetDefaults sets unset protocol buffer fields to their default values.
> -// It only modifies fields that are both unset and have defined defaults.
> -// It recursively sets default values in any non-nil sub-messages.
> -func SetDefaults(pb Message) {
> -	setDefaults(reflect.ValueOf(pb), true, false)
> -}
> -
> -// v is a pointer to a struct.
> -func setDefaults(v reflect.Value, recur, zeros bool) {
> -	v = v.Elem()
> -
> -	defaultMu.RLock()
> -	dm, ok := defaults[v.Type()]
> -	defaultMu.RUnlock()
> -	if !ok {
> -		dm = buildDefaultMessage(v.Type())
> -		defaultMu.Lock()
> -		defaults[v.Type()] = dm
> -		defaultMu.Unlock()
> -	}
> -
> -	for _, sf := range dm.scalars {
> -		f := v.Field(sf.index)
> -		if !f.IsNil() {
> -			// field already set
> -			continue
> -		}
> -		dv := sf.value
> -		if dv == nil && !zeros {
> -			// no explicit default, and don't want to set zeros
> -			continue
> -		}
> -		fptr := f.Addr().Interface() // **T
> -		// TODO: Consider batching the allocations we do here.
> -		switch sf.kind {
> -		case reflect.Bool:
> -			b := new(bool)
> -			if dv != nil {
> -				*b = dv.(bool)
> -			}
> -			*(fptr.(**bool)) = b
> -		case reflect.Float32:
> -			f := new(float32)
> -			if dv != nil {
> -				*f = dv.(float32)
> -			}
> -			*(fptr.(**float32)) = f
> -		case reflect.Float64:
> -			f := new(float64)
> -			if dv != nil {
> -				*f = dv.(float64)
> -			}
> -			*(fptr.(**float64)) = f
> -		case reflect.Int32:
> -			// might be an enum
> -			if ft := f.Type(); ft != int32PtrType {
> -				// enum
> -				f.Set(reflect.New(ft.Elem()))
> -				if dv != nil {
> -					f.Elem().SetInt(int64(dv.(int32)))
> -				}
> -			} else {
> -				// int32 field
> -				i := new(int32)
> -				if dv != nil {
> -					*i = dv.(int32)
> -				}
> -				*(fptr.(**int32)) = i
> -			}
> -		case reflect.Int64:
> -			i := new(int64)
> -			if dv != nil {
> -				*i = dv.(int64)
> -			}
> -			*(fptr.(**int64)) = i
> -		case reflect.String:
> -			s := new(string)
> -			if dv != nil {
> -				*s = dv.(string)
> -			}
> -			*(fptr.(**string)) = s
> -		case reflect.Uint8:
> -			// exceptional case: []byte
> -			var b []byte
> -			if dv != nil {
> -				db := dv.([]byte)
> -				b = make([]byte, len(db))
> -				copy(b, db)
> -			} else {
> -				b = []byte{}
> -			}
> -			*(fptr.(*[]byte)) = b
> -		case reflect.Uint32:
> -			u := new(uint32)
> -			if dv != nil {
> -				*u = dv.(uint32)
> -			}
> -			*(fptr.(**uint32)) = u
> -		case reflect.Uint64:
> -			u := new(uint64)
> -			if dv != nil {
> -				*u = dv.(uint64)
> -			}
> -			*(fptr.(**uint64)) = u
> -		default:
> -			log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind)
> -		}
> -	}
> -
> -	for _, ni := range dm.nested {
> -		f := v.Field(ni)
> -		// f is *T or []*T or map[T]*T
> -		switch f.Kind() {
> -		case reflect.Ptr:
> -			if f.IsNil() {
> -				continue
> -			}
> -			setDefaults(f, recur, zeros)
> -
> -		case reflect.Slice:
> -			for i := 0; i < f.Len(); i++ {
> -				e := f.Index(i)
> -				if e.IsNil() {
> -					continue
> -				}
> -				setDefaults(e, recur, zeros)
> -			}
> -
> -		case reflect.Map:
> -			for _, k := range f.MapKeys() {
> -				e := f.MapIndex(k)
> -				if e.IsNil() {
> -					continue
> -				}
> -				setDefaults(e, recur, zeros)
> -			}
> -		}
> -	}
> -}
> -
> -var (
> -	// defaults maps a protocol buffer struct type to a slice of the fields,
> -	// with its scalar fields set to their proto-declared non-zero default values.
> -	defaultMu sync.RWMutex
> -	defaults  = make(map[reflect.Type]defaultMessage)
> -
> -	int32PtrType = reflect.TypeOf((*int32)(nil))
> -)
> -
> -// defaultMessage represents information about the default values of a message.
> -type defaultMessage struct {
> -	scalars []scalarField
> -	nested  []int // struct field index of nested messages
> -}
> -
> -type scalarField struct {
> -	index int          // struct field index
> -	kind  reflect.Kind // element type (the T in *T or []T)
> -	value interface{}  // the proto-declared default value, or nil
> -}
> -
> -// t is a struct type.
> -func buildDefaultMessage(t reflect.Type) (dm defaultMessage) {
> -	sprop := GetProperties(t)
> -	for _, prop := range sprop.Prop {
> -		fi, ok := sprop.decoderTags.get(prop.Tag)
> -		if !ok {
> -			// XXX_unrecognized
> -			continue
> -		}
> -		ft := t.Field(fi).Type
> -
> -		sf, nested, err := fieldDefault(ft, prop)
> -		switch {
> -		case err != nil:
> -			log.Print(err)
> -		case nested:
> -			dm.nested = append(dm.nested, fi)
> -		case sf != nil:
> -			sf.index = fi
> -			dm.scalars = append(dm.scalars, *sf)
> -		}
> -	}
> -
> -	return dm
> -}
> -
> -// fieldDefault returns the scalarField for field type ft.
> -// sf will be nil if the field can not have a default.
> -// nestedMessage will be true if this is a nested message.
> -// Note that sf.index is not set on return.
> -func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) {
> -	var canHaveDefault bool
> -	switch ft.Kind() {
> -	case reflect.Ptr:
> -		if ft.Elem().Kind() == reflect.Struct {
> -			nestedMessage = true
> -		} else {
> -			canHaveDefault = true // proto2 scalar field
> -		}
> -
> -	case reflect.Slice:
> -		switch ft.Elem().Kind() {
> -		case reflect.Ptr:
> -			nestedMessage = true // repeated message
> -		case reflect.Uint8:
> -			canHaveDefault = true // bytes field
> -		}
> -
> -	case reflect.Map:
> -		if ft.Elem().Kind() == reflect.Ptr {
> -			nestedMessage = true // map with message values
> -		}
> -	}
> -
> -	if !canHaveDefault {
> -		if nestedMessage {
> -			return nil, true, nil
> -		}
> -		return nil, false, nil
> -	}
> -
> -	// We now know that ft is a pointer or slice.
> -	sf = &scalarField{kind: ft.Elem().Kind()}
> -
> -	// scalar fields without defaults
> -	if !prop.HasDefault {
> -		return sf, false, nil
> -	}
> -
> -	// a scalar field: either *T or []byte
> -	switch ft.Elem().Kind() {
> -	case reflect.Bool:
> -		x, err := strconv.ParseBool(prop.Default)
> -		if err != nil {
> -			return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err)
> -		}
> -		sf.value = x
> -	case reflect.Float32:
> -		x, err := strconv.ParseFloat(prop.Default, 32)
> -		if err != nil {
> -			return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err)
> -		}
> -		sf.value = float32(x)
> -	case reflect.Float64:
> -		x, err := strconv.ParseFloat(prop.Default, 64)
> -		if err != nil {
> -			return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err)
> -		}
> -		sf.value = x
> -	case reflect.Int32:
> -		x, err := strconv.ParseInt(prop.Default, 10, 32)
> -		if err != nil {
> -			return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err)
> -		}
> -		sf.value = int32(x)
> -	case reflect.Int64:
> -		x, err := strconv.ParseInt(prop.Default, 10, 64)
> -		if err != nil {
> -			return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err)
> -		}
> -		sf.value = x
> -	case reflect.String:
> -		sf.value = prop.Default
> -	case reflect.Uint8:
> -		// []byte (not *uint8)
> -		sf.value = []byte(prop.Default)
> -	case reflect.Uint32:
> -		x, err := strconv.ParseUint(prop.Default, 10, 32)
> -		if err != nil {
> -			return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err)
> -		}
> -		sf.value = uint32(x)
> -	case reflect.Uint64:
> -		x, err := strconv.ParseUint(prop.Default, 10, 64)
> -		if err != nil {
> -			return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err)
> -		}
> -		sf.value = x
> -	default:
> -		return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind())
> -	}
> -
> -	return sf, false, nil
> -}
> -
> -// Map fields may have key types of non-float scalars, strings and enums.
> -// The easiest way to sort them in some deterministic order is to use fmt.
> -// If this turns out to be inefficient we can always consider other options,
> -// such as doing a Schwartzian transform.
> -
> -func mapKeys(vs []reflect.Value) sort.Interface {
> -	s := mapKeySorter{
> -		vs: vs,
> -		// default Less function: textual comparison
> -		less: func(a, b reflect.Value) bool {
> -			return fmt.Sprint(a.Interface()) < fmt.Sprint(b.Interface())
> -		},
> -	}
> -
> -	// Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps;
> -	// numeric keys are sorted numerically.
> -	if len(vs) == 0 {
> -		return s
> -	}
> -	switch vs[0].Kind() {
> -	case reflect.Int32, reflect.Int64:
> -		s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() }
> -	case reflect.Uint32, reflect.Uint64:
> -		s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() }
> -	}
> -
> -	return s
> -}
> -
> -type mapKeySorter struct {
> -	vs   []reflect.Value
> -	less func(a, b reflect.Value) bool
> -}
> -
> -func (s mapKeySorter) Len() int      { return len(s.vs) }
> -func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] }
> -func (s mapKeySorter) Less(i, j int) bool {
> -	return s.less(s.vs[i], s.vs[j])
> -}
> -
> -// isProto3Zero reports whether v is a zero proto3 value.
> -func isProto3Zero(v reflect.Value) bool {
> -	switch v.Kind() {
> -	case reflect.Bool:
> -		return !v.Bool()
> -	case reflect.Int32, reflect.Int64:
> -		return v.Int() == 0
> -	case reflect.Uint32, reflect.Uint64:
> -		return v.Uint() == 0
> -	case reflect.Float32, reflect.Float64:
> -		return v.Float() == 0
> -	case reflect.String:
> -		return v.String() == ""
> -	}
> -	return false
> -}
> -
> -// ProtoPackageIsVersion2 is referenced from generated protocol buffer files
> -// to assert that that code is compatible with this version of the proto package.
> -const ProtoPackageIsVersion2 = true
> -
> -// ProtoPackageIsVersion1 is referenced from generated protocol buffer files
> -// to assert that that code is compatible with this version of the proto package.
> -const ProtoPackageIsVersion1 = true
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/map_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/map_test.go
> deleted file mode 100644
> index 313e8792..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/map_test.go
> +++ /dev/null
> @@ -1,46 +0,0 @@
> -package proto_test
> -
> -import (
> -	"fmt"
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -	ppb "github.com/golang/protobuf/proto/proto3_proto"
> -)
> -
> -func marshalled() []byte {
> -	m := &ppb.IntMaps{}
> -	for i := 0; i < 1000; i++ {
> -		m.Maps = append(m.Maps, &ppb.IntMap{
> -			Rtt: map[int32]int32{1: 2},
> -		})
> -	}
> -	b, err := proto.Marshal(m)
> -	if err != nil {
> -		panic(fmt.Sprintf("Can't marshal %+v: %v", m, err))
> -	}
> -	return b
> -}
> -
> -func BenchmarkConcurrentMapUnmarshal(b *testing.B) {
> -	in := marshalled()
> -	b.RunParallel(func(pb *testing.PB) {
> -		for pb.Next() {
> -			var out ppb.IntMaps
> -			if err := proto.Unmarshal(in, &out); err != nil {
> -				b.Errorf("Can't unmarshal ppb.IntMaps: %v", err)
> -			}
> -		}
> -	})
> -}
> -
> -func BenchmarkSequentialMapUnmarshal(b *testing.B) {
> -	in := marshalled()
> -	b.ResetTimer()
> -	for i := 0; i < b.N; i++ {
> -		var out ppb.IntMaps
> -		if err := proto.Unmarshal(in, &out); err != nil {
> -			b.Errorf("Can't unmarshal ppb.IntMaps: %v", err)
> -		}
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/message_set.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/message_set.go
> deleted file mode 100644
> index fd982dec..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/message_set.go
> +++ /dev/null
> @@ -1,311 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto
> -
> -/*
> - * Support for message sets.
> - */
> -
> -import (
> -	"bytes"
> -	"encoding/json"
> -	"errors"
> -	"fmt"
> -	"reflect"
> -	"sort"
> -)
> -
> -// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID.
> -// A message type ID is required for storing a protocol buffer in a message set.
> -var errNoMessageTypeID = errors.New("proto does not have a message type ID")
> -
> -// The first two types (_MessageSet_Item and messageSet)
> -// model what the protocol compiler produces for the following protocol message:
> -//   message MessageSet {
> -//     repeated group Item = 1 {
> -//       required int32 type_id = 2;
> -//       required string message = 3;
> -//     };
> -//   }
> -// That is the MessageSet wire format. We can't use a proto to generate these
> -// because that would introduce a circular dependency between it and this package.
> -
> -type _MessageSet_Item struct {
> -	TypeId  *int32 `protobuf:"varint,2,req,name=type_id"`
> -	Message []byte `protobuf:"bytes,3,req,name=message"`
> -}
> -
> -type messageSet struct {
> -	Item             []*_MessageSet_Item `protobuf:"group,1,rep"`
> -	XXX_unrecognized []byte
> -	// TODO: caching?
> -}
> -
> -// Make sure messageSet is a Message.
> -var _ Message = (*messageSet)(nil)
> -
> -// messageTypeIder is an interface satisfied by a protocol buffer type
> -// that may be stored in a MessageSet.
> -type messageTypeIder interface {
> -	MessageTypeId() int32
> -}
> -
> -func (ms *messageSet) find(pb Message) *_MessageSet_Item {
> -	mti, ok := pb.(messageTypeIder)
> -	if !ok {
> -		return nil
> -	}
> -	id := mti.MessageTypeId()
> -	for _, item := range ms.Item {
> -		if *item.TypeId == id {
> -			return item
> -		}
> -	}
> -	return nil
> -}
> -
> -func (ms *messageSet) Has(pb Message) bool {
> -	if ms.find(pb) != nil {
> -		return true
> -	}
> -	return false
> -}
> -
> -func (ms *messageSet) Unmarshal(pb Message) error {
> -	if item := ms.find(pb); item != nil {
> -		return Unmarshal(item.Message, pb)
> -	}
> -	if _, ok := pb.(messageTypeIder); !ok {
> -		return errNoMessageTypeID
> -	}
> -	return nil // TODO: return error instead?
> -}
> -
> -func (ms *messageSet) Marshal(pb Message) error {
> -	msg, err := Marshal(pb)
> -	if err != nil {
> -		return err
> -	}
> -	if item := ms.find(pb); item != nil {
> -		// reuse existing item
> -		item.Message = msg
> -		return nil
> -	}
> -
> -	mti, ok := pb.(messageTypeIder)
> -	if !ok {
> -		return errNoMessageTypeID
> -	}
> -
> -	mtid := mti.MessageTypeId()
> -	ms.Item = append(ms.Item, &_MessageSet_Item{
> -		TypeId:  &mtid,
> -		Message: msg,
> -	})
> -	return nil
> -}
> -
> -func (ms *messageSet) Reset()         { *ms = messageSet{} }
> -func (ms *messageSet) String() string { return CompactTextString(ms) }
> -func (*messageSet) ProtoMessage()     {}
> -
> -// Support for the message_set_wire_format message option.
> -
> -func skipVarint(buf []byte) []byte {
> -	i := 0
> -	for ; buf[i]&0x80 != 0; i++ {
> -	}
> -	return buf[i+1:]
> -}
> -
> -// MarshalMessageSet encodes the extension map represented by m in the message set wire format.
> -// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option.
> -func MarshalMessageSet(exts interface{}) ([]byte, error) {
> -	var m map[int32]Extension
> -	switch exts := exts.(type) {
> -	case *XXX_InternalExtensions:
> -		if err := encodeExtensions(exts); err != nil {
> -			return nil, err
> -		}
> -		m, _ = exts.extensionsRead()
> -	case map[int32]Extension:
> -		if err := encodeExtensionsMap(exts); err != nil {
> -			return nil, err
> -		}
> -		m = exts
> -	default:
> -		return nil, errors.New("proto: not an extension map")
> -	}
> -
> -	// Sort extension IDs to provide a deterministic encoding.
> -	// See also enc_map in encode.go.
> -	ids := make([]int, 0, len(m))
> -	for id := range m {
> -		ids = append(ids, int(id))
> -	}
> -	sort.Ints(ids)
> -
> -	ms := &messageSet{Item: make([]*_MessageSet_Item, 0, len(m))}
> -	for _, id := range ids {
> -		e := m[int32(id)]
> -		// Remove the wire type and field number varint, as well as the length varint.
> -		msg := skipVarint(skipVarint(e.enc))
> -
> -		ms.Item = append(ms.Item, &_MessageSet_Item{
> -			TypeId:  Int32(int32(id)),
> -			Message: msg,
> -		})
> -	}
> -	return Marshal(ms)
> -}
> -
> -// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format.
> -// It is called by generated Unmarshal methods on protocol buffer messages with the message_set_wire_format option.
> -func UnmarshalMessageSet(buf []byte, exts interface{}) error {
> -	var m map[int32]Extension
> -	switch exts := exts.(type) {
> -	case *XXX_InternalExtensions:
> -		m = exts.extensionsWrite()
> -	case map[int32]Extension:
> -		m = exts
> -	default:
> -		return errors.New("proto: not an extension map")
> -	}
> -
> -	ms := new(messageSet)
> -	if err := Unmarshal(buf, ms); err != nil {
> -		return err
> -	}
> -	for _, item := range ms.Item {
> -		id := *item.TypeId
> -		msg := item.Message
> -
> -		// Restore wire type and field number varint, plus length varint.
> -		// Be careful to preserve duplicate items.
> -		b := EncodeVarint(uint64(id)<<3 | WireBytes)
> -		if ext, ok := m[id]; ok {
> -			// Existing data; rip off the tag and length varint
> -			// so we join the new data correctly.
> -			// We can assume that ext.enc is set because we are unmarshaling.
> -			o := ext.enc[len(b):]   // skip wire type and field number
> -			_, n := DecodeVarint(o) // calculate length of length varint
> -			o = o[n:]               // skip length varint
> -			msg = append(o, msg...) // join old data and new data
> -		}
> -		b = append(b, EncodeVarint(uint64(len(msg)))...)
> -		b = append(b, msg...)
> -
> -		m[id] = Extension{enc: b}
> -	}
> -	return nil
> -}
> -
> -// MarshalMessageSetJSON encodes the extension map represented by m in JSON format.
> -// It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option.
> -func MarshalMessageSetJSON(exts interface{}) ([]byte, error) {
> -	var m map[int32]Extension
> -	switch exts := exts.(type) {
> -	case *XXX_InternalExtensions:
> -		m, _ = exts.extensionsRead()
> -	case map[int32]Extension:
> -		m = exts
> -	default:
> -		return nil, errors.New("proto: not an extension map")
> -	}
> -	var b bytes.Buffer
> -	b.WriteByte('{')
> -
> -	// Process the map in key order for deterministic output.
> -	ids := make([]int32, 0, len(m))
> -	for id := range m {
> -		ids = append(ids, id)
> -	}
> -	sort.Sort(int32Slice(ids)) // int32Slice defined in text.go
> -
> -	for i, id := range ids {
> -		ext := m[id]
> -		if i > 0 {
> -			b.WriteByte(',')
> -		}
> -
> -		msd, ok := messageSetMap[id]
> -		if !ok {
> -			// Unknown type; we can't render it, so skip it.
> -			continue
> -		}
> -		fmt.Fprintf(&b, `"[%s]":`, msd.name)
> -
> -		x := ext.value
> -		if x == nil {
> -			x = reflect.New(msd.t.Elem()).Interface()
> -			if err := Unmarshal(ext.enc, x.(Message)); err != nil {
> -				return nil, err
> -			}
> -		}
> -		d, err := json.Marshal(x)
> -		if err != nil {
> -			return nil, err
> -		}
> -		b.Write(d)
> -	}
> -	b.WriteByte('}')
> -	return b.Bytes(), nil
> -}
> -
> -// UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format.
> -// It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option.
> -func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error {
> -	// Common-case fast path.
> -	if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) {
> -		return nil
> -	}
> -
> -	// This is fairly tricky, and it's not clear that it is needed.
> -	return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented")
> -}
> -
> -// A global registry of types that can be used in a MessageSet.
> -
> -var messageSetMap = make(map[int32]messageSetDesc)
> -
> -type messageSetDesc struct {
> -	t    reflect.Type // pointer to struct
> -	name string
> -}
> -
> -// RegisterMessageSetType is called from the generated code.
> -func RegisterMessageSetType(m Message, fieldNum int32, name string) {
> -	messageSetMap[fieldNum] = messageSetDesc{
> -		t:    reflect.TypeOf(m),
> -		name: name,
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/message_set_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/message_set_test.go
> deleted file mode 100644
> index 353a3ea7..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/message_set_test.go
> +++ /dev/null
> @@ -1,66 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2014 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto
> -
> -import (
> -	"bytes"
> -	"testing"
> -)
> -
> -func TestUnmarshalMessageSetWithDuplicate(t *testing.T) {
> -	// Check that a repeated message set entry will be concatenated.
> -	in := &messageSet{
> -		Item: []*_MessageSet_Item{
> -			{TypeId: Int32(12345), Message: []byte("hoo")},
> -			{TypeId: Int32(12345), Message: []byte("hah")},
> -		},
> -	}
> -	b, err := Marshal(in)
> -	if err != nil {
> -		t.Fatalf("Marshal: %v", err)
> -	}
> -	t.Logf("Marshaled bytes: %q", b)
> -
> -	var extensions XXX_InternalExtensions
> -	if err := UnmarshalMessageSet(b, &extensions); err != nil {
> -		t.Fatalf("UnmarshalMessageSet: %v", err)
> -	}
> -	ext, ok := extensions.p.extensionMap[12345]
> -	if !ok {
> -		t.Fatalf("Didn't retrieve extension 12345; map is %v", extensions.p.extensionMap)
> -	}
> -	// Skip wire type/field number and length varints.
> -	got := skipVarint(skipVarint(ext.enc))
> -	if want := []byte("hoohah"); !bytes.Equal(got, want) {
> -		t.Errorf("Combined extension is %q, want %q", got, want)
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/pointer_reflect.go
> deleted file mode 100644
> index fb512e2e..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/pointer_reflect.go
> +++ /dev/null
> @@ -1,484 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2012 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// +build appengine js
> -
> -// This file contains an implementation of proto field accesses using package reflect.
> -// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can
> -// be used on App Engine.
> -
> -package proto
> -
> -import (
> -	"math"
> -	"reflect"
> -)
> -
> -// A structPointer is a pointer to a struct.
> -type structPointer struct {
> -	v reflect.Value
> -}
> -
> -// toStructPointer returns a structPointer equivalent to the given reflect value.
> -// The reflect value must itself be a pointer to a struct.
> -func toStructPointer(v reflect.Value) structPointer {
> -	return structPointer{v}
> -}
> -
> -// IsNil reports whether p is nil.
> -func structPointer_IsNil(p structPointer) bool {
> -	return p.v.IsNil()
> -}
> -
> -// Interface returns the struct pointer as an interface value.
> -func structPointer_Interface(p structPointer, _ reflect.Type) interface{} {
> -	return p.v.Interface()
> -}
> -
> -// A field identifies a field in a struct, accessible from a structPointer.
> -// In this implementation, a field is identified by the sequence of field indices
> -// passed to reflect's FieldByIndex.
> -type field []int
> -
> -// toField returns a field equivalent to the given reflect field.
> -func toField(f *reflect.StructField) field {
> -	return f.Index
> -}
> -
> -// invalidField is an invalid field identifier.
> -var invalidField = field(nil)
> -
> -// IsValid reports whether the field identifier is valid.
> -func (f field) IsValid() bool { return f != nil }
> -
> -// field returns the given field in the struct as a reflect value.
> -func structPointer_field(p structPointer, f field) reflect.Value {
> -	// Special case: an extension map entry with a value of type T
> -	// passes a *T to the struct-handling code with a zero field,
> -	// expecting that it will be treated as equivalent to *struct{ X T },
> -	// which has the same memory layout. We have to handle that case
> -	// specially, because reflect will panic if we call FieldByIndex on a
> -	// non-struct.
> -	if f == nil {
> -		return p.v.Elem()
> -	}
> -
> -	return p.v.Elem().FieldByIndex(f)
> -}
> -
> -// ifield returns the given field in the struct as an interface value.
> -func structPointer_ifield(p structPointer, f field) interface{} {
> -	return structPointer_field(p, f).Addr().Interface()
> -}
> -
> -// Bytes returns the address of a []byte field in the struct.
> -func structPointer_Bytes(p structPointer, f field) *[]byte {
> -	return structPointer_ifield(p, f).(*[]byte)
> -}
> -
> -// BytesSlice returns the address of a [][]byte field in the struct.
> -func structPointer_BytesSlice(p structPointer, f field) *[][]byte {
> -	return structPointer_ifield(p, f).(*[][]byte)
> -}
> -
> -// Bool returns the address of a *bool field in the struct.
> -func structPointer_Bool(p structPointer, f field) **bool {
> -	return structPointer_ifield(p, f).(**bool)
> -}
> -
> -// BoolVal returns the address of a bool field in the struct.
> -func structPointer_BoolVal(p structPointer, f field) *bool {
> -	return structPointer_ifield(p, f).(*bool)
> -}
> -
> -// BoolSlice returns the address of a []bool field in the struct.
> -func structPointer_BoolSlice(p structPointer, f field) *[]bool {
> -	return structPointer_ifield(p, f).(*[]bool)
> -}
> -
> -// String returns the address of a *string field in the struct.
> -func structPointer_String(p structPointer, f field) **string {
> -	return structPointer_ifield(p, f).(**string)
> -}
> -
> -// StringVal returns the address of a string field in the struct.
> -func structPointer_StringVal(p structPointer, f field) *string {
> -	return structPointer_ifield(p, f).(*string)
> -}
> -
> -// StringSlice returns the address of a []string field in the struct.
> -func structPointer_StringSlice(p structPointer, f field) *[]string {
> -	return structPointer_ifield(p, f).(*[]string)
> -}
> -
> -// Extensions returns the address of an extension map field in the struct.
> -func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions {
> -	return structPointer_ifield(p, f).(*XXX_InternalExtensions)
> -}
> -
> -// ExtMap returns the address of an extension map field in the struct.
> -func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension {
> -	return structPointer_ifield(p, f).(*map[int32]Extension)
> -}
> -
> -// NewAt returns the reflect.Value for a pointer to a field in the struct.
> -func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value {
> -	return structPointer_field(p, f).Addr()
> -}
> -
> -// SetStructPointer writes a *struct field in the struct.
> -func structPointer_SetStructPointer(p structPointer, f field, q structPointer) {
> -	structPointer_field(p, f).Set(q.v)
> -}
> -
> -// GetStructPointer reads a *struct field in the struct.
> -func structPointer_GetStructPointer(p structPointer, f field) structPointer {
> -	return structPointer{structPointer_field(p, f)}
> -}
> -
> -// StructPointerSlice the address of a []*struct field in the struct.
> -func structPointer_StructPointerSlice(p structPointer, f field) structPointerSlice {
> -	return structPointerSlice{structPointer_field(p, f)}
> -}
> -
> -// A structPointerSlice represents the address of a slice of pointers to structs
> -// (themselves messages or groups). That is, v.Type() is *[]*struct{...}.
> -type structPointerSlice struct {
> -	v reflect.Value
> -}
> -
> -func (p structPointerSlice) Len() int                  { return p.v.Len() }
> -func (p structPointerSlice) Index(i int) structPointer { return structPointer{p.v.Index(i)} }
> -func (p structPointerSlice) Append(q structPointer) {
> -	p.v.Set(reflect.Append(p.v, q.v))
> -}
> -
> -var (
> -	int32Type   = reflect.TypeOf(int32(0))
> -	uint32Type  = reflect.TypeOf(uint32(0))
> -	float32Type = reflect.TypeOf(float32(0))
> -	int64Type   = reflect.TypeOf(int64(0))
> -	uint64Type  = reflect.TypeOf(uint64(0))
> -	float64Type = reflect.TypeOf(float64(0))
> -)
> -
> -// A word32 represents a field of type *int32, *uint32, *float32, or *enum.
> -// That is, v.Type() is *int32, *uint32, *float32, or *enum and v is assignable.
> -type word32 struct {
> -	v reflect.Value
> -}
> -
> -// IsNil reports whether p is nil.
> -func word32_IsNil(p word32) bool {
> -	return p.v.IsNil()
> -}
> -
> -// Set sets p to point at a newly allocated word with bits set to x.
> -func word32_Set(p word32, o *Buffer, x uint32) {
> -	t := p.v.Type().Elem()
> -	switch t {
> -	case int32Type:
> -		if len(o.int32s) == 0 {
> -			o.int32s = make([]int32, uint32PoolSize)
> -		}
> -		o.int32s[0] = int32(x)
> -		p.v.Set(reflect.ValueOf(&o.int32s[0]))
> -		o.int32s = o.int32s[1:]
> -		return
> -	case uint32Type:
> -		if len(o.uint32s) == 0 {
> -			o.uint32s = make([]uint32, uint32PoolSize)
> -		}
> -		o.uint32s[0] = x
> -		p.v.Set(reflect.ValueOf(&o.uint32s[0]))
> -		o.uint32s = o.uint32s[1:]
> -		return
> -	case float32Type:
> -		if len(o.float32s) == 0 {
> -			o.float32s = make([]float32, uint32PoolSize)
> -		}
> -		o.float32s[0] = math.Float32frombits(x)
> -		p.v.Set(reflect.ValueOf(&o.float32s[0]))
> -		o.float32s = o.float32s[1:]
> -		return
> -	}
> -
> -	// must be enum
> -	p.v.Set(reflect.New(t))
> -	p.v.Elem().SetInt(int64(int32(x)))
> -}
> -
> -// Get gets the bits pointed at by p, as a uint32.
> -func word32_Get(p word32) uint32 {
> -	elem := p.v.Elem()
> -	switch elem.Kind() {
> -	case reflect.Int32:
> -		return uint32(elem.Int())
> -	case reflect.Uint32:
> -		return uint32(elem.Uint())
> -	case reflect.Float32:
> -		return math.Float32bits(float32(elem.Float()))
> -	}
> -	panic("unreachable")
> -}
> -
> -// Word32 returns a reference to a *int32, *uint32, *float32, or *enum field in the struct.
> -func structPointer_Word32(p structPointer, f field) word32 {
> -	return word32{structPointer_field(p, f)}
> -}
> -
> -// A word32Val represents a field of type int32, uint32, float32, or enum.
> -// That is, v.Type() is int32, uint32, float32, or enum and v is assignable.
> -type word32Val struct {
> -	v reflect.Value
> -}
> -
> -// Set sets *p to x.
> -func word32Val_Set(p word32Val, x uint32) {
> -	switch p.v.Type() {
> -	case int32Type:
> -		p.v.SetInt(int64(x))
> -		return
> -	case uint32Type:
> -		p.v.SetUint(uint64(x))
> -		return
> -	case float32Type:
> -		p.v.SetFloat(float64(math.Float32frombits(x)))
> -		return
> -	}
> -
> -	// must be enum
> -	p.v.SetInt(int64(int32(x)))
> -}
> -
> -// Get gets the bits pointed at by p, as a uint32.
> -func word32Val_Get(p word32Val) uint32 {
> -	elem := p.v
> -	switch elem.Kind() {
> -	case reflect.Int32:
> -		return uint32(elem.Int())
> -	case reflect.Uint32:
> -		return uint32(elem.Uint())
> -	case reflect.Float32:
> -		return math.Float32bits(float32(elem.Float()))
> -	}
> -	panic("unreachable")
> -}
> -
> -// Word32Val returns a reference to a int32, uint32, float32, or enum field in the struct.
> -func structPointer_Word32Val(p structPointer, f field) word32Val {
> -	return word32Val{structPointer_field(p, f)}
> -}
> -
> -// A word32Slice is a slice of 32-bit values.
> -// That is, v.Type() is []int32, []uint32, []float32, or []enum.
> -type word32Slice struct {
> -	v reflect.Value
> -}
> -
> -func (p word32Slice) Append(x uint32) {
> -	n, m := p.v.Len(), p.v.Cap()
> -	if n < m {
> -		p.v.SetLen(n + 1)
> -	} else {
> -		t := p.v.Type().Elem()
> -		p.v.Set(reflect.Append(p.v, reflect.Zero(t)))
> -	}
> -	elem := p.v.Index(n)
> -	switch elem.Kind() {
> -	case reflect.Int32:
> -		elem.SetInt(int64(int32(x)))
> -	case reflect.Uint32:
> -		elem.SetUint(uint64(x))
> -	case reflect.Float32:
> -		elem.SetFloat(float64(math.Float32frombits(x)))
> -	}
> -}
> -
> -func (p word32Slice) Len() int {
> -	return p.v.Len()
> -}
> -
> -func (p word32Slice) Index(i int) uint32 {
> -	elem := p.v.Index(i)
> -	switch elem.Kind() {
> -	case reflect.Int32:
> -		return uint32(elem.Int())
> -	case reflect.Uint32:
> -		return uint32(elem.Uint())
> -	case reflect.Float32:
> -		return math.Float32bits(float32(elem.Float()))
> -	}
> -	panic("unreachable")
> -}
> -
> -// Word32Slice returns a reference to a []int32, []uint32, []float32, or []enum field in the struct.
> -func structPointer_Word32Slice(p structPointer, f field) word32Slice {
> -	return word32Slice{structPointer_field(p, f)}
> -}
> -
> -// word64 is like word32 but for 64-bit values.
> -type word64 struct {
> -	v reflect.Value
> -}
> -
> -func word64_Set(p word64, o *Buffer, x uint64) {
> -	t := p.v.Type().Elem()
> -	switch t {
> -	case int64Type:
> -		if len(o.int64s) == 0 {
> -			o.int64s = make([]int64, uint64PoolSize)
> -		}
> -		o.int64s[0] = int64(x)
> -		p.v.Set(reflect.ValueOf(&o.int64s[0]))
> -		o.int64s = o.int64s[1:]
> -		return
> -	case uint64Type:
> -		if len(o.uint64s) == 0 {
> -			o.uint64s = make([]uint64, uint64PoolSize)
> -		}
> -		o.uint64s[0] = x
> -		p.v.Set(reflect.ValueOf(&o.uint64s[0]))
> -		o.uint64s = o.uint64s[1:]
> -		return
> -	case float64Type:
> -		if len(o.float64s) == 0 {
> -			o.float64s = make([]float64, uint64PoolSize)
> -		}
> -		o.float64s[0] = math.Float64frombits(x)
> -		p.v.Set(reflect.ValueOf(&o.float64s[0]))
> -		o.float64s = o.float64s[1:]
> -		return
> -	}
> -	panic("unreachable")
> -}
> -
> -func word64_IsNil(p word64) bool {
> -	return p.v.IsNil()
> -}
> -
> -func word64_Get(p word64) uint64 {
> -	elem := p.v.Elem()
> -	switch elem.Kind() {
> -	case reflect.Int64:
> -		return uint64(elem.Int())
> -	case reflect.Uint64:
> -		return elem.Uint()
> -	case reflect.Float64:
> -		return math.Float64bits(elem.Float())
> -	}
> -	panic("unreachable")
> -}
> -
> -func structPointer_Word64(p structPointer, f field) word64 {
> -	return word64{structPointer_field(p, f)}
> -}
> -
> -// word64Val is like word32Val but for 64-bit values.
> -type word64Val struct {
> -	v reflect.Value
> -}
> -
> -func word64Val_Set(p word64Val, o *Buffer, x uint64) {
> -	switch p.v.Type() {
> -	case int64Type:
> -		p.v.SetInt(int64(x))
> -		return
> -	case uint64Type:
> -		p.v.SetUint(x)
> -		return
> -	case float64Type:
> -		p.v.SetFloat(math.Float64frombits(x))
> -		return
> -	}
> -	panic("unreachable")
> -}
> -
> -func word64Val_Get(p word64Val) uint64 {
> -	elem := p.v
> -	switch elem.Kind() {
> -	case reflect.Int64:
> -		return uint64(elem.Int())
> -	case reflect.Uint64:
> -		return elem.Uint()
> -	case reflect.Float64:
> -		return math.Float64bits(elem.Float())
> -	}
> -	panic("unreachable")
> -}
> -
> -func structPointer_Word64Val(p structPointer, f field) word64Val {
> -	return word64Val{structPointer_field(p, f)}
> -}
> -
> -type word64Slice struct {
> -	v reflect.Value
> -}
> -
> -func (p word64Slice) Append(x uint64) {
> -	n, m := p.v.Len(), p.v.Cap()
> -	if n < m {
> -		p.v.SetLen(n + 1)
> -	} else {
> -		t := p.v.Type().Elem()
> -		p.v.Set(reflect.Append(p.v, reflect.Zero(t)))
> -	}
> -	elem := p.v.Index(n)
> -	switch elem.Kind() {
> -	case reflect.Int64:
> -		elem.SetInt(int64(int64(x)))
> -	case reflect.Uint64:
> -		elem.SetUint(uint64(x))
> -	case reflect.Float64:
> -		elem.SetFloat(float64(math.Float64frombits(x)))
> -	}
> -}
> -
> -func (p word64Slice) Len() int {
> -	return p.v.Len()
> -}
> -
> -func (p word64Slice) Index(i int) uint64 {
> -	elem := p.v.Index(i)
> -	switch elem.Kind() {
> -	case reflect.Int64:
> -		return uint64(elem.Int())
> -	case reflect.Uint64:
> -		return uint64(elem.Uint())
> -	case reflect.Float64:
> -		return math.Float64bits(float64(elem.Float()))
> -	}
> -	panic("unreachable")
> -}
> -
> -func structPointer_Word64Slice(p structPointer, f field) word64Slice {
> -	return word64Slice{structPointer_field(p, f)}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
> deleted file mode 100644
> index 6b5567d4..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
> +++ /dev/null
> @@ -1,270 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2012 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// +build !appengine,!js
> -
> -// This file contains the implementation of the proto field accesses using package unsafe.
> -
> -package proto
> -
> -import (
> -	"reflect"
> -	"unsafe"
> -)
> -
> -// NOTE: These type_Foo functions would more idiomatically be methods,
> -// but Go does not allow methods on pointer types, and we must preserve
> -// some pointer type for the garbage collector. We use these
> -// funcs with clunky names as our poor approximation to methods.
> -//
> -// An alternative would be
> -//	type structPointer struct { p unsafe.Pointer }
> -// but that does not registerize as well.
> -
> -// A structPointer is a pointer to a struct.
> -type structPointer unsafe.Pointer
> -
> -// toStructPointer returns a structPointer equivalent to the given reflect value.
> -func toStructPointer(v reflect.Value) structPointer {
> -	return structPointer(unsafe.Pointer(v.Pointer()))
> -}
> -
> -// IsNil reports whether p is nil.
> -func structPointer_IsNil(p structPointer) bool {
> -	return p == nil
> -}
> -
> -// Interface returns the struct pointer, assumed to have element type t,
> -// as an interface value.
> -func structPointer_Interface(p structPointer, t reflect.Type) interface{} {
> -	return reflect.NewAt(t, unsafe.Pointer(p)).Interface()
> -}
> -
> -// A field identifies a field in a struct, accessible from a structPointer.
> -// In this implementation, a field is identified by its byte offset from the start of the struct.
> -type field uintptr
> -
> -// toField returns a field equivalent to the given reflect field.
> -func toField(f *reflect.StructField) field {
> -	return field(f.Offset)
> -}
> -
> -// invalidField is an invalid field identifier.
> -const invalidField = ^field(0)
> -
> -// IsValid reports whether the field identifier is valid.
> -func (f field) IsValid() bool {
> -	return f != ^field(0)
> -}
> -
> -// Bytes returns the address of a []byte field in the struct.
> -func structPointer_Bytes(p structPointer, f field) *[]byte {
> -	return (*[]byte)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// BytesSlice returns the address of a [][]byte field in the struct.
> -func structPointer_BytesSlice(p structPointer, f field) *[][]byte {
> -	return (*[][]byte)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// Bool returns the address of a *bool field in the struct.
> -func structPointer_Bool(p structPointer, f field) **bool {
> -	return (**bool)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// BoolVal returns the address of a bool field in the struct.
> -func structPointer_BoolVal(p structPointer, f field) *bool {
> -	return (*bool)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// BoolSlice returns the address of a []bool field in the struct.
> -func structPointer_BoolSlice(p structPointer, f field) *[]bool {
> -	return (*[]bool)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// String returns the address of a *string field in the struct.
> -func structPointer_String(p structPointer, f field) **string {
> -	return (**string)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// StringVal returns the address of a string field in the struct.
> -func structPointer_StringVal(p structPointer, f field) *string {
> -	return (*string)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// StringSlice returns the address of a []string field in the struct.
> -func structPointer_StringSlice(p structPointer, f field) *[]string {
> -	return (*[]string)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// ExtMap returns the address of an extension map field in the struct.
> -func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions {
> -	return (*XXX_InternalExtensions)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension {
> -	return (*map[int32]Extension)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// NewAt returns the reflect.Value for a pointer to a field in the struct.
> -func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value {
> -	return reflect.NewAt(typ, unsafe.Pointer(uintptr(p)+uintptr(f)))
> -}
> -
> -// SetStructPointer writes a *struct field in the struct.
> -func structPointer_SetStructPointer(p structPointer, f field, q structPointer) {
> -	*(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f))) = q
> -}
> -
> -// GetStructPointer reads a *struct field in the struct.
> -func structPointer_GetStructPointer(p structPointer, f field) structPointer {
> -	return *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// StructPointerSlice the address of a []*struct field in the struct.
> -func structPointer_StructPointerSlice(p structPointer, f field) *structPointerSlice {
> -	return (*structPointerSlice)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// A structPointerSlice represents a slice of pointers to structs (themselves submessages or groups).
> -type structPointerSlice []structPointer
> -
> -func (v *structPointerSlice) Len() int                  { return len(*v) }
> -func (v *structPointerSlice) Index(i int) structPointer { return (*v)[i] }
> -func (v *structPointerSlice) Append(p structPointer)    { *v = append(*v, p) }
> -
> -// A word32 is the address of a "pointer to 32-bit value" field.
> -type word32 **uint32
> -
> -// IsNil reports whether *v is nil.
> -func word32_IsNil(p word32) bool {
> -	return *p == nil
> -}
> -
> -// Set sets *v to point at a newly allocated word set to x.
> -func word32_Set(p word32, o *Buffer, x uint32) {
> -	if len(o.uint32s) == 0 {
> -		o.uint32s = make([]uint32, uint32PoolSize)
> -	}
> -	o.uint32s[0] = x
> -	*p = &o.uint32s[0]
> -	o.uint32s = o.uint32s[1:]
> -}
> -
> -// Get gets the value pointed at by *v.
> -func word32_Get(p word32) uint32 {
> -	return **p
> -}
> -
> -// Word32 returns the address of a *int32, *uint32, *float32, or *enum field in the struct.
> -func structPointer_Word32(p structPointer, f field) word32 {
> -	return word32((**uint32)(unsafe.Pointer(uintptr(p) + uintptr(f))))
> -}
> -
> -// A word32Val is the address of a 32-bit value field.
> -type word32Val *uint32
> -
> -// Set sets *p to x.
> -func word32Val_Set(p word32Val, x uint32) {
> -	*p = x
> -}
> -
> -// Get gets the value pointed at by p.
> -func word32Val_Get(p word32Val) uint32 {
> -	return *p
> -}
> -
> -// Word32Val returns the address of a *int32, *uint32, *float32, or *enum field in the struct.
> -func structPointer_Word32Val(p structPointer, f field) word32Val {
> -	return word32Val((*uint32)(unsafe.Pointer(uintptr(p) + uintptr(f))))
> -}
> -
> -// A word32Slice is a slice of 32-bit values.
> -type word32Slice []uint32
> -
> -func (v *word32Slice) Append(x uint32)    { *v = append(*v, x) }
> -func (v *word32Slice) Len() int           { return len(*v) }
> -func (v *word32Slice) Index(i int) uint32 { return (*v)[i] }
> -
> -// Word32Slice returns the address of a []int32, []uint32, []float32, or []enum field in the struct.
> -func structPointer_Word32Slice(p structPointer, f field) *word32Slice {
> -	return (*word32Slice)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> -
> -// word64 is like word32 but for 64-bit values.
> -type word64 **uint64
> -
> -func word64_Set(p word64, o *Buffer, x uint64) {
> -	if len(o.uint64s) == 0 {
> -		o.uint64s = make([]uint64, uint64PoolSize)
> -	}
> -	o.uint64s[0] = x
> -	*p = &o.uint64s[0]
> -	o.uint64s = o.uint64s[1:]
> -}
> -
> -func word64_IsNil(p word64) bool {
> -	return *p == nil
> -}
> -
> -func word64_Get(p word64) uint64 {
> -	return **p
> -}
> -
> -func structPointer_Word64(p structPointer, f field) word64 {
> -	return word64((**uint64)(unsafe.Pointer(uintptr(p) + uintptr(f))))
> -}
> -
> -// word64Val is like word32Val but for 64-bit values.
> -type word64Val *uint64
> -
> -func word64Val_Set(p word64Val, o *Buffer, x uint64) {
> -	*p = x
> -}
> -
> -func word64Val_Get(p word64Val) uint64 {
> -	return *p
> -}
> -
> -func structPointer_Word64Val(p structPointer, f field) word64Val {
> -	return word64Val((*uint64)(unsafe.Pointer(uintptr(p) + uintptr(f))))
> -}
> -
> -// word64Slice is like word32Slice but for 64-bit values.
> -type word64Slice []uint64
> -
> -func (v *word64Slice) Append(x uint64)    { *v = append(*v, x) }
> -func (v *word64Slice) Len() int           { return len(*v) }
> -func (v *word64Slice) Index(i int) uint64 { return (*v)[i] }
> -
> -func structPointer_Word64Slice(p structPointer, f field) *word64Slice {
> -	return (*word64Slice)(unsafe.Pointer(uintptr(p) + uintptr(f)))
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/properties.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/properties.go
> deleted file mode 100644
> index ec2289c0..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/properties.go
> +++ /dev/null
> @@ -1,872 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto
> -
> -/*
> - * Routines for encoding data into the wire format for protocol buffers.
> - */
> -
> -import (
> -	"fmt"
> -	"log"
> -	"os"
> -	"reflect"
> -	"sort"
> -	"strconv"
> -	"strings"
> -	"sync"
> -)
> -
> -const debug bool = false
> -
> -// Constants that identify the encoding of a value on the wire.
> -const (
> -	WireVarint     = 0
> -	WireFixed64    = 1
> -	WireBytes      = 2
> -	WireStartGroup = 3
> -	WireEndGroup   = 4
> -	WireFixed32    = 5
> -)
> -
> -const startSize = 10 // initial slice/string sizes
> -
> -// Encoders are defined in encode.go
> -// An encoder outputs the full representation of a field, including its
> -// tag and encoder type.
> -type encoder func(p *Buffer, prop *Properties, base structPointer) error
> -
> -// A valueEncoder encodes a single integer in a particular encoding.
> -type valueEncoder func(o *Buffer, x uint64) error
> -
> -// Sizers are defined in encode.go
> -// A sizer returns the encoded size of a field, including its tag and encoder
> -// type.
> -type sizer func(prop *Properties, base structPointer) int
> -
> -// A valueSizer returns the encoded size of a single integer in a particular
> -// encoding.
> -type valueSizer func(x uint64) int
> -
> -// Decoders are defined in decode.go
> -// A decoder creates a value from its wire representation.
> -// Unrecognized subelements are saved in unrec.
> -type decoder func(p *Buffer, prop *Properties, base structPointer) error
> -
> -// A valueDecoder decodes a single integer in a particular encoding.
> -type valueDecoder func(o *Buffer) (x uint64, err error)
> -
> -// A oneofMarshaler does the marshaling for all oneof fields in a message.
> -type oneofMarshaler func(Message, *Buffer) error
> -
> -// A oneofUnmarshaler does the unmarshaling for a oneof field in a message.
> -type oneofUnmarshaler func(Message, int, int, *Buffer) (bool, error)
> -
> -// A oneofSizer does the sizing for all oneof fields in a message.
> -type oneofSizer func(Message) int
> -
> -// tagMap is an optimization over map[int]int for typical protocol buffer
> -// use-cases. Encoded protocol buffers are often in tag order with small tag
> -// numbers.
> -type tagMap struct {
> -	fastTags []int
> -	slowTags map[int]int
> -}
> -
> -// tagMapFastLimit is the upper bound on the tag number that will be stored in
> -// the tagMap slice rather than its map.
> -const tagMapFastLimit = 1024
> -
> -func (p *tagMap) get(t int) (int, bool) {
> -	if t > 0 && t < tagMapFastLimit {
> -		if t >= len(p.fastTags) {
> -			return 0, false
> -		}
> -		fi := p.fastTags[t]
> -		return fi, fi >= 0
> -	}
> -	fi, ok := p.slowTags[t]
> -	return fi, ok
> -}
> -
> -func (p *tagMap) put(t int, fi int) {
> -	if t > 0 && t < tagMapFastLimit {
> -		for len(p.fastTags) < t+1 {
> -			p.fastTags = append(p.fastTags, -1)
> -		}
> -		p.fastTags[t] = fi
> -		return
> -	}
> -	if p.slowTags == nil {
> -		p.slowTags = make(map[int]int)
> -	}
> -	p.slowTags[t] = fi
> -}
> -
> -// StructProperties represents properties for all the fields of a struct.
> -// decoderTags and decoderOrigNames should only be used by the decoder.
> -type StructProperties struct {
> -	Prop             []*Properties  // properties for each field
> -	reqCount         int            // required count
> -	decoderTags      tagMap         // map from proto tag to struct field number
> -	decoderOrigNames map[string]int // map from original name to struct field number
> -	order            []int          // list of struct field numbers in tag order
> -	unrecField       field          // field id of the XXX_unrecognized []byte field
> -	extendable       bool           // is this an extendable proto
> -
> -	oneofMarshaler   oneofMarshaler
> -	oneofUnmarshaler oneofUnmarshaler
> -	oneofSizer       oneofSizer
> -	stype            reflect.Type
> -
> -	// OneofTypes contains information about the oneof fields in this message.
> -	// It is keyed by the original name of a field.
> -	OneofTypes map[string]*OneofProperties
> -}
> -
> -// OneofProperties represents information about a specific field in a oneof.
> -type OneofProperties struct {
> -	Type  reflect.Type // pointer to generated struct type for this oneof field
> -	Field int          // struct field number of the containing oneof in the message
> -	Prop  *Properties
> -}
> -
> -// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec.
> -// See encode.go, (*Buffer).enc_struct.
> -
> -func (sp *StructProperties) Len() int { return len(sp.order) }
> -func (sp *StructProperties) Less(i, j int) bool {
> -	return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag
> -}
> -func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] }
> -
> -// Properties represents the protocol-specific behavior of a single struct field.
> -type Properties struct {
> -	Name     string // name of the field, for error messages
> -	OrigName string // original name before protocol compiler (always set)
> -	JSONName string // name to use for JSON; determined by protoc
> -	Wire     string
> -	WireType int
> -	Tag      int
> -	Required bool
> -	Optional bool
> -	Repeated bool
> -	Packed   bool   // relevant for repeated primitives only
> -	Enum     string // set for enum types only
> -	proto3   bool   // whether this is known to be a proto3 field; set for []byte only
> -	oneof    bool   // whether this is a oneof field
> -
> -	Default    string // default value
> -	HasDefault bool   // whether an explicit default was provided
> -	def_uint64 uint64
> -
> -	enc           encoder
> -	valEnc        valueEncoder // set for bool and numeric types only
> -	field         field
> -	tagcode       []byte // encoding of EncodeVarint((Tag<<3)|WireType)
> -	tagbuf        [8]byte
> -	stype         reflect.Type      // set for struct types only
> -	sprop         *StructProperties // set for struct types only
> -	isMarshaler   bool
> -	isUnmarshaler bool
> -
> -	mtype    reflect.Type // set for map types only
> -	mkeyprop *Properties  // set for map types only
> -	mvalprop *Properties  // set for map types only
> -
> -	size    sizer
> -	valSize valueSizer // set for bool and numeric types only
> -
> -	dec    decoder
> -	valDec valueDecoder // set for bool and numeric types only
> -
> -	// If this is a packable field, this will be the decoder for the packed version of the field.
> -	packedDec decoder
> -}
> -
> -// String formats the properties in the protobuf struct field tag style.
> -func (p *Properties) String() string {
> -	s := p.Wire
> -	s = ","
> -	s += strconv.Itoa(p.Tag)
> -	if p.Required {
> -		s += ",req"
> -	}
> -	if p.Optional {
> -		s += ",opt"
> -	}
> -	if p.Repeated {
> -		s += ",rep"
> -	}
> -	if p.Packed {
> -		s += ",packed"
> -	}
> -	s += ",name=" + p.OrigName
> -	if p.JSONName != p.OrigName {
> -		s += ",json=" + p.JSONName
> -	}
> -	if p.proto3 {
> -		s += ",proto3"
> -	}
> -	if p.oneof {
> -		s += ",oneof"
> -	}
> -	if len(p.Enum) > 0 {
> -		s += ",enum=" + p.Enum
> -	}
> -	if p.HasDefault {
> -		s += ",def=" + p.Default
> -	}
> -	return s
> -}
> -
> -// Parse populates p by parsing a string in the protobuf struct field tag style.
> -func (p *Properties) Parse(s string) {
> -	// "bytes,49,opt,name=foo,def=hello!"
> -	fields := strings.Split(s, ",") // breaks def=, but handled below.
> -	if len(fields) < 2 {
> -		fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s)
> -		return
> -	}
> -
> -	p.Wire = fields[0]
> -	switch p.Wire {
> -	case "varint":
> -		p.WireType = WireVarint
> -		p.valEnc = (*Buffer).EncodeVarint
> -		p.valDec = (*Buffer).DecodeVarint
> -		p.valSize = sizeVarint
> -	case "fixed32":
> -		p.WireType = WireFixed32
> -		p.valEnc = (*Buffer).EncodeFixed32
> -		p.valDec = (*Buffer).DecodeFixed32
> -		p.valSize = sizeFixed32
> -	case "fixed64":
> -		p.WireType = WireFixed64
> -		p.valEnc = (*Buffer).EncodeFixed64
> -		p.valDec = (*Buffer).DecodeFixed64
> -		p.valSize = sizeFixed64
> -	case "zigzag32":
> -		p.WireType = WireVarint
> -		p.valEnc = (*Buffer).EncodeZigzag32
> -		p.valDec = (*Buffer).DecodeZigzag32
> -		p.valSize = sizeZigzag32
> -	case "zigzag64":
> -		p.WireType = WireVarint
> -		p.valEnc = (*Buffer).EncodeZigzag64
> -		p.valDec = (*Buffer).DecodeZigzag64
> -		p.valSize = sizeZigzag64
> -	case "bytes", "group":
> -		p.WireType = WireBytes
> -		// no numeric converter for non-numeric types
> -	default:
> -		fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s)
> -		return
> -	}
> -
> -	var err error
> -	p.Tag, err = strconv.Atoi(fields[1])
> -	if err != nil {
> -		return
> -	}
> -
> -	for i := 2; i < len(fields); i++ {
> -		f := fields[i]
> -		switch {
> -		case f == "req":
> -			p.Required = true
> -		case f == "opt":
> -			p.Optional = true
> -		case f == "rep":
> -			p.Repeated = true
> -		case f == "packed":
> -			p.Packed = true
> -		case strings.HasPrefix(f, "name="):
> -			p.OrigName = f[5:]
> -		case strings.HasPrefix(f, "json="):
> -			p.JSONName = f[5:]
> -		case strings.HasPrefix(f, "enum="):
> -			p.Enum = f[5:]
> -		case f == "proto3":
> -			p.proto3 = true
> -		case f == "oneof":
> -			p.oneof = true
> -		case strings.HasPrefix(f, "def="):
> -			p.HasDefault = true
> -			p.Default = f[4:] // rest of string
> -			if i+1 < len(fields) {
> -				// Commas aren't escaped, and def is always last.
> -				p.Default += "," + strings.Join(fields[i+1:], ",")
> -				break
> -			}
> -		}
> -	}
> -}
> -
> -func logNoSliceEnc(t1, t2 reflect.Type) {
> -	fmt.Fprintf(os.Stderr, "proto: no slice oenc for %T = []%T\n", t1, t2)
> -}
> -
> -var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem()
> -
> -// Initialize the fields for encoding and decoding.
> -func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lockGetProp bool) {
> -	p.enc = nil
> -	p.dec = nil
> -	p.size = nil
> -
> -	switch t1 := typ; t1.Kind() {
> -	default:
> -		fmt.Fprintf(os.Stderr, "proto: no coders for %v\n", t1)
> -
> -	// proto3 scalar types
> -
> -	case reflect.Bool:
> -		p.enc = (*Buffer).enc_proto3_bool
> -		p.dec = (*Buffer).dec_proto3_bool
> -		p.size = size_proto3_bool
> -	case reflect.Int32:
> -		p.enc = (*Buffer).enc_proto3_int32
> -		p.dec = (*Buffer).dec_proto3_int32
> -		p.size = size_proto3_int32
> -	case reflect.Uint32:
> -		p.enc = (*Buffer).enc_proto3_uint32
> -		p.dec = (*Buffer).dec_proto3_int32 // can reuse
> -		p.size = size_proto3_uint32
> -	case reflect.Int64, reflect.Uint64:
> -		p.enc = (*Buffer).enc_proto3_int64
> -		p.dec = (*Buffer).dec_proto3_int64
> -		p.size = size_proto3_int64
> -	case reflect.Float32:
> -		p.enc = (*Buffer).enc_proto3_uint32 // can just treat them as bits
> -		p.dec = (*Buffer).dec_proto3_int32
> -		p.size = size_proto3_uint32
> -	case reflect.Float64:
> -		p.enc = (*Buffer).enc_proto3_int64 // can just treat them as bits
> -		p.dec = (*Buffer).dec_proto3_int64
> -		p.size = size_proto3_int64
> -	case reflect.String:
> -		p.enc = (*Buffer).enc_proto3_string
> -		p.dec = (*Buffer).dec_proto3_string
> -		p.size = size_proto3_string
> -
> -	case reflect.Ptr:
> -		switch t2 := t1.Elem(); t2.Kind() {
> -		default:
> -			fmt.Fprintf(os.Stderr, "proto: no encoder function for %v -> %v\n", t1, t2)
> -			break
> -		case reflect.Bool:
> -			p.enc = (*Buffer).enc_bool
> -			p.dec = (*Buffer).dec_bool
> -			p.size = size_bool
> -		case reflect.Int32:
> -			p.enc = (*Buffer).enc_int32
> -			p.dec = (*Buffer).dec_int32
> -			p.size = size_int32
> -		case reflect.Uint32:
> -			p.enc = (*Buffer).enc_uint32
> -			p.dec = (*Buffer).dec_int32 // can reuse
> -			p.size = size_uint32
> -		case reflect.Int64, reflect.Uint64:
> -			p.enc = (*Buffer).enc_int64
> -			p.dec = (*Buffer).dec_int64
> -			p.size = size_int64
> -		case reflect.Float32:
> -			p.enc = (*Buffer).enc_uint32 // can just treat them as bits
> -			p.dec = (*Buffer).dec_int32
> -			p.size = size_uint32
> -		case reflect.Float64:
> -			p.enc = (*Buffer).enc_int64 // can just treat them as bits
> -			p.dec = (*Buffer).dec_int64
> -			p.size = size_int64
> -		case reflect.String:
> -			p.enc = (*Buffer).enc_string
> -			p.dec = (*Buffer).dec_string
> -			p.size = size_string
> -		case reflect.Struct:
> -			p.stype = t1.Elem()
> -			p.isMarshaler = isMarshaler(t1)
> -			p.isUnmarshaler = isUnmarshaler(t1)
> -			if p.Wire == "bytes" {
> -				p.enc = (*Buffer).enc_struct_message
> -				p.dec = (*Buffer).dec_struct_message
> -				p.size = size_struct_message
> -			} else {
> -				p.enc = (*Buffer).enc_struct_group
> -				p.dec = (*Buffer).dec_struct_group
> -				p.size = size_struct_group
> -			}
> -		}
> -
> -	case reflect.Slice:
> -		switch t2 := t1.Elem(); t2.Kind() {
> -		default:
> -			logNoSliceEnc(t1, t2)
> -			break
> -		case reflect.Bool:
> -			if p.Packed {
> -				p.enc = (*Buffer).enc_slice_packed_bool
> -				p.size = size_slice_packed_bool
> -			} else {
> -				p.enc = (*Buffer).enc_slice_bool
> -				p.size = size_slice_bool
> -			}
> -			p.dec = (*Buffer).dec_slice_bool
> -			p.packedDec = (*Buffer).dec_slice_packed_bool
> -		case reflect.Int32:
> -			if p.Packed {
> -				p.enc = (*Buffer).enc_slice_packed_int32
> -				p.size = size_slice_packed_int32
> -			} else {
> -				p.enc = (*Buffer).enc_slice_int32
> -				p.size = size_slice_int32
> -			}
> -			p.dec = (*Buffer).dec_slice_int32
> -			p.packedDec = (*Buffer).dec_slice_packed_int32
> -		case reflect.Uint32:
> -			if p.Packed {
> -				p.enc = (*Buffer).enc_slice_packed_uint32
> -				p.size = size_slice_packed_uint32
> -			} else {
> -				p.enc = (*Buffer).enc_slice_uint32
> -				p.size = size_slice_uint32
> -			}
> -			p.dec = (*Buffer).dec_slice_int32
> -			p.packedDec = (*Buffer).dec_slice_packed_int32
> -		case reflect.Int64, reflect.Uint64:
> -			if p.Packed {
> -				p.enc = (*Buffer).enc_slice_packed_int64
> -				p.size = size_slice_packed_int64
> -			} else {
> -				p.enc = (*Buffer).enc_slice_int64
> -				p.size = size_slice_int64
> -			}
> -			p.dec = (*Buffer).dec_slice_int64
> -			p.packedDec = (*Buffer).dec_slice_packed_int64
> -		case reflect.Uint8:
> -			p.dec = (*Buffer).dec_slice_byte
> -			if p.proto3 {
> -				p.enc = (*Buffer).enc_proto3_slice_byte
> -				p.size = size_proto3_slice_byte
> -			} else {
> -				p.enc = (*Buffer).enc_slice_byte
> -				p.size = size_slice_byte
> -			}
> -		case reflect.Float32, reflect.Float64:
> -			switch t2.Bits() {
> -			case 32:
> -				// can just treat them as bits
> -				if p.Packed {
> -					p.enc = (*Buffer).enc_slice_packed_uint32
> -					p.size = size_slice_packed_uint32
> -				} else {
> -					p.enc = (*Buffer).enc_slice_uint32
> -					p.size = size_slice_uint32
> -				}
> -				p.dec = (*Buffer).dec_slice_int32
> -				p.packedDec = (*Buffer).dec_slice_packed_int32
> -			case 64:
> -				// can just treat them as bits
> -				if p.Packed {
> -					p.enc = (*Buffer).enc_slice_packed_int64
> -					p.size = size_slice_packed_int64
> -				} else {
> -					p.enc = (*Buffer).enc_slice_int64
> -					p.size = size_slice_int64
> -				}
> -				p.dec = (*Buffer).dec_slice_int64
> -				p.packedDec = (*Buffer).dec_slice_packed_int64
> -			default:
> -				logNoSliceEnc(t1, t2)
> -				break
> -			}
> -		case reflect.String:
> -			p.enc = (*Buffer).enc_slice_string
> -			p.dec = (*Buffer).dec_slice_string
> -			p.size = size_slice_string
> -		case reflect.Ptr:
> -			switch t3 := t2.Elem(); t3.Kind() {
> -			default:
> -				fmt.Fprintf(os.Stderr, "proto: no ptr oenc for %T -> %T -> %T\n", t1, t2, t3)
> -				break
> -			case reflect.Struct:
> -				p.stype = t2.Elem()
> -				p.isMarshaler = isMarshaler(t2)
> -				p.isUnmarshaler = isUnmarshaler(t2)
> -				if p.Wire == "bytes" {
> -					p.enc = (*Buffer).enc_slice_struct_message
> -					p.dec = (*Buffer).dec_slice_struct_message
> -					p.size = size_slice_struct_message
> -				} else {
> -					p.enc = (*Buffer).enc_slice_struct_group
> -					p.dec = (*Buffer).dec_slice_struct_group
> -					p.size = size_slice_struct_group
> -				}
> -			}
> -		case reflect.Slice:
> -			switch t2.Elem().Kind() {
> -			default:
> -				fmt.Fprintf(os.Stderr, "proto: no slice elem oenc for %T -> %T -> %T\n", t1, t2, t2.Elem())
> -				break
> -			case reflect.Uint8:
> -				p.enc = (*Buffer).enc_slice_slice_byte
> -				p.dec = (*Buffer).dec_slice_slice_byte
> -				p.size = size_slice_slice_byte
> -			}
> -		}
> -
> -	case reflect.Map:
> -		p.enc = (*Buffer).enc_new_map
> -		p.dec = (*Buffer).dec_new_map
> -		p.size = size_new_map
> -
> -		p.mtype = t1
> -		p.mkeyprop = &Properties{}
> -		p.mkeyprop.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp)
> -		p.mvalprop = &Properties{}
> -		vtype := p.mtype.Elem()
> -		if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice {
> -			// The value type is not a message (*T) or bytes ([]byte),
> -			// so we need encoders for the pointer to this type.
> -			vtype = reflect.PtrTo(vtype)
> -		}
> -		p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp)
> -	}
> -
> -	// precalculate tag code
> -	wire := p.WireType
> -	if p.Packed {
> -		wire = WireBytes
> -	}
> -	x := uint32(p.Tag)<<3 | uint32(wire)
> -	i := 0
> -	for i = 0; x > 127; i++ {
> -		p.tagbuf[i] = 0x80 | uint8(x&0x7F)
> -		x >>= 7
> -	}
> -	p.tagbuf[i] = uint8(x)
> -	p.tagcode = p.tagbuf[0 : i+1]
> -
> -	if p.stype != nil {
> -		if lockGetProp {
> -			p.sprop = GetProperties(p.stype)
> -		} else {
> -			p.sprop = getPropertiesLocked(p.stype)
> -		}
> -	}
> -}
> -
> -var (
> -	marshalerType   = reflect.TypeOf((*Marshaler)(nil)).Elem()
> -	unmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem()
> -)
> -
> -// isMarshaler reports whether type t implements Marshaler.
> -func isMarshaler(t reflect.Type) bool {
> -	// We're checking for (likely) pointer-receiver methods
> -	// so if t is not a pointer, something is very wrong.
> -	// The calls above only invoke isMarshaler on pointer types.
> -	if t.Kind() != reflect.Ptr {
> -		panic("proto: misuse of isMarshaler")
> -	}
> -	return t.Implements(marshalerType)
> -}
> -
> -// isUnmarshaler reports whether type t implements Unmarshaler.
> -func isUnmarshaler(t reflect.Type) bool {
> -	// We're checking for (likely) pointer-receiver methods
> -	// so if t is not a pointer, something is very wrong.
> -	// The calls above only invoke isUnmarshaler on pointer types.
> -	if t.Kind() != reflect.Ptr {
> -		panic("proto: misuse of isUnmarshaler")
> -	}
> -	return t.Implements(unmarshalerType)
> -}
> -
> -// Init populates the properties from a protocol buffer struct tag.
> -func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) {
> -	p.init(typ, name, tag, f, true)
> -}
> -
> -func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) {
> -	// "bytes,49,opt,def=hello!"
> -	p.Name = name
> -	p.OrigName = name
> -	if f != nil {
> -		p.field = toField(f)
> -	}
> -	if tag == "" {
> -		return
> -	}
> -	p.Parse(tag)
> -	p.setEncAndDec(typ, f, lockGetProp)
> -}
> -
> -var (
> -	propertiesMu  sync.RWMutex
> -	propertiesMap = make(map[reflect.Type]*StructProperties)
> -)
> -
> -// GetProperties returns the list of properties for the type represented by t.
> -// t must represent a generated struct type of a protocol message.
> -func GetProperties(t reflect.Type) *StructProperties {
> -	if t.Kind() != reflect.Struct {
> -		panic("proto: type must have kind struct")
> -	}
> -
> -	// Most calls to GetProperties in a long-running program will be
> -	// retrieving details for types we have seen before.
> -	propertiesMu.RLock()
> -	sprop, ok := propertiesMap[t]
> -	propertiesMu.RUnlock()
> -	if ok {
> -		if collectStats {
> -			stats.Chit++
> -		}
> -		return sprop
> -	}
> -
> -	propertiesMu.Lock()
> -	sprop = getPropertiesLocked(t)
> -	propertiesMu.Unlock()
> -	return sprop
> -}
> -
> -// getPropertiesLocked requires that propertiesMu is held.
> -func getPropertiesLocked(t reflect.Type) *StructProperties {
> -	if prop, ok := propertiesMap[t]; ok {
> -		if collectStats {
> -			stats.Chit++
> -		}
> -		return prop
> -	}
> -	if collectStats {
> -		stats.Cmiss++
> -	}
> -
> -	prop := new(StructProperties)
> -	// in case of recursive protos, fill this in now.
> -	propertiesMap[t] = prop
> -
> -	// build properties
> -	prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) ||
> -		reflect.PtrTo(t).Implements(extendableProtoV1Type)
> -	prop.unrecField = invalidField
> -	prop.Prop = make([]*Properties, t.NumField())
> -	prop.order = make([]int, t.NumField())
> -
> -	for i := 0; i < t.NumField(); i++ {
> -		f := t.Field(i)
> -		p := new(Properties)
> -		name := f.Name
> -		p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false)
> -
> -		if f.Name == "XXX_InternalExtensions" { // special case
> -			p.enc = (*Buffer).enc_exts
> -			p.dec = nil // not needed
> -			p.size = size_exts
> -		} else if f.Name == "XXX_extensions" { // special case
> -			p.enc = (*Buffer).enc_map
> -			p.dec = nil // not needed
> -			p.size = size_map
> -		} else if f.Name == "XXX_unrecognized" { // special case
> -			prop.unrecField = toField(&f)
> -		}
> -		oneof := f.Tag.Get("protobuf_oneof") // special case
> -		if oneof != "" {
> -			// Oneof fields don't use the traditional protobuf tag.
> -			p.OrigName = oneof
> -		}
> -		prop.Prop[i] = p
> -		prop.order[i] = i
> -		if debug {
> -			print(i, " ", f.Name, " ", t.String(), " ")
> -			if p.Tag > 0 {
> -				print(p.String())
> -			}
> -			print("\n")
> -		}
> -		if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") && oneof == "" {
> -			fmt.Fprintln(os.Stderr, "proto: no encoder for", f.Name, f.Type.String(), "[GetProperties]")
> -		}
> -	}
> -
> -	// Re-order prop.order.
> -	sort.Sort(prop)
> -
> -	type oneofMessage interface {
> -		XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
> -	}
> -	if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok {
> -		var oots []interface{}
> -		prop.oneofMarshaler, prop.oneofUnmarshaler, prop.oneofSizer, oots = om.XXX_OneofFuncs()
> -		prop.stype = t
> -
> -		// Interpret oneof metadata.
> -		prop.OneofTypes = make(map[string]*OneofProperties)
> -		for _, oot := range oots {
> -			oop := &OneofProperties{
> -				Type: reflect.ValueOf(oot).Type(), // *T
> -				Prop: new(Properties),
> -			}
> -			sft := oop.Type.Elem().Field(0)
> -			oop.Prop.Name = sft.Name
> -			oop.Prop.Parse(sft.Tag.Get("protobuf"))
> -			// There will be exactly one interface field that
> -			// this new value is assignable to.
> -			for i := 0; i < t.NumField(); i++ {
> -				f := t.Field(i)
> -				if f.Type.Kind() != reflect.Interface {
> -					continue
> -				}
> -				if !oop.Type.AssignableTo(f.Type) {
> -					continue
> -				}
> -				oop.Field = i
> -				break
> -			}
> -			prop.OneofTypes[oop.Prop.OrigName] = oop
> -		}
> -	}
> -
> -	// build required counts
> -	// build tags
> -	reqCount := 0
> -	prop.decoderOrigNames = make(map[string]int)
> -	for i, p := range prop.Prop {
> -		if strings.HasPrefix(p.Name, "XXX_") {
> -			// Internal fields should not appear in tags/origNames maps.
> -			// They are handled specially when encoding and decoding.
> -			continue
> -		}
> -		if p.Required {
> -			reqCount++
> -		}
> -		prop.decoderTags.put(p.Tag, i)
> -		prop.decoderOrigNames[p.OrigName] = i
> -	}
> -	prop.reqCount = reqCount
> -
> -	return prop
> -}
> -
> -// Return the Properties object for the x[0]'th field of the structure.
> -func propByIndex(t reflect.Type, x []int) *Properties {
> -	if len(x) != 1 {
> -		fmt.Fprintf(os.Stderr, "proto: field index dimension %d (not 1) for type %s\n", len(x), t)
> -		return nil
> -	}
> -	prop := GetProperties(t)
> -	return prop.Prop[x[0]]
> -}
> -
> -// Get the address and type of a pointer to a struct from an interface.
> -func getbase(pb Message) (t reflect.Type, b structPointer, err error) {
> -	if pb == nil {
> -		err = ErrNil
> -		return
> -	}
> -	// get the reflect type of the pointer to the struct.
> -	t = reflect.TypeOf(pb)
> -	// get the address of the struct.
> -	value := reflect.ValueOf(pb)
> -	b = toStructPointer(value)
> -	return
> -}
> -
> -// A global registry of enum types.
> -// The generated code will register the generated maps by calling RegisterEnum.
> -
> -var enumValueMaps = make(map[string]map[string]int32)
> -
> -// RegisterEnum is called from the generated code to install the enum descriptor
> -// maps into the global table to aid parsing text format protocol buffers.
> -func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) {
> -	if _, ok := enumValueMaps[typeName]; ok {
> -		panic("proto: duplicate enum registered: " + typeName)
> -	}
> -	enumValueMaps[typeName] = valueMap
> -}
> -
> -// EnumValueMap returns the mapping from names to integers of the
> -// enum type enumType, or a nil if not found.
> -func EnumValueMap(enumType string) map[string]int32 {
> -	return enumValueMaps[enumType]
> -}
> -
> -// A registry of all linked message types.
> -// The string is a fully-qualified proto name ("pkg.Message").
> -var (
> -	protoTypes    = make(map[string]reflect.Type)
> -	revProtoTypes = make(map[reflect.Type]string)
> -)
> -
> -// RegisterType is called from generated code and maps from the fully qualified
> -// proto name to the type (pointer to struct) of the protocol buffer.
> -func RegisterType(x Message, name string) {
> -	if _, ok := protoTypes[name]; ok {
> -		// TODO: Some day, make this a panic.
> -		log.Printf("proto: duplicate proto type registered: %s", name)
> -		return
> -	}
> -	t := reflect.TypeOf(x)
> -	protoTypes[name] = t
> -	revProtoTypes[t] = name
> -}
> -
> -// MessageName returns the fully-qualified proto name for the given message type.
> -func MessageName(x Message) string {
> -	type xname interface {
> -		XXX_MessageName() string
> -	}
> -	if m, ok := x.(xname); ok {
> -		return m.XXX_MessageName()
> -	}
> -	return revProtoTypes[reflect.TypeOf(x)]
> -}
> -
> -// MessageType returns the message type (pointer to struct) for a named message.
> -func MessageType(name string) reflect.Type { return protoTypes[name] }
> -
> -// A registry of all linked proto files.
> -var (
> -	protoFiles = make(map[string][]byte) // file name => fileDescriptor
> -)
> -
> -// RegisterFile is called from generated code and maps from the
> -// full file name of a .proto file to its compressed FileDescriptorProto.
> -func RegisterFile(filename string, fileDescriptor []byte) {
> -	protoFiles[filename] = fileDescriptor
> -}
> -
> -// FileDescriptor returns the compressed FileDescriptorProto for a .proto file.
> -func FileDescriptor(filename string) []byte { return protoFiles[filename] }
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go
> deleted file mode 100644
> index cc4d0489..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go
> +++ /dev/null
> @@ -1,347 +0,0 @@
> -// Code generated by protoc-gen-go.
> -// source: proto3_proto/proto3.proto
> -// DO NOT EDIT!
> -
> -/*
> -Package proto3_proto is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	proto3_proto/proto3.proto
> -
> -It has these top-level messages:
> -	Message
> -	Nested
> -	MessageWithMap
> -	IntMap
> -	IntMaps
> -*/
> -package proto3_proto
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -import google_protobuf "github.com/golang/protobuf/ptypes/any"
> -import testdata "github.com/golang/protobuf/proto/testdata"
> -
> -// 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 Message_Humour int32
> -
> -const (
> -	Message_UNKNOWN     Message_Humour = 0
> -	Message_PUNS        Message_Humour = 1
> -	Message_SLAPSTICK   Message_Humour = 2
> -	Message_BILL_BAILEY Message_Humour = 3
> -)
> -
> -var Message_Humour_name = map[int32]string{
> -	0: "UNKNOWN",
> -	1: "PUNS",
> -	2: "SLAPSTICK",
> -	3: "BILL_BAILEY",
> -}
> -var Message_Humour_value = map[string]int32{
> -	"UNKNOWN":     0,
> -	"PUNS":        1,
> -	"SLAPSTICK":   2,
> -	"BILL_BAILEY": 3,
> -}
> -
> -func (x Message_Humour) String() string {
> -	return proto.EnumName(Message_Humour_name, int32(x))
> -}
> -func (Message_Humour) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} }
> -
> -type Message struct {
> -	Name         string                           `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	Hilarity     Message_Humour                   `protobuf:"varint,2,opt,name=hilarity,enum=proto3_proto.Message_Humour" json:"hilarity,omitempty"`
> -	HeightInCm   uint32                           `protobuf:"varint,3,opt,name=height_in_cm,json=heightInCm" json:"height_in_cm,omitempty"`
> -	Data         []byte                           `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"`
> -	ResultCount  int64                            `protobuf:"varint,7,opt,name=result_count,json=resultCount" json:"result_count,omitempty"`
> -	TrueScotsman bool                             `protobuf:"varint,8,opt,name=true_scotsman,json=trueScotsman" json:"true_scotsman,omitempty"`
> -	Score        float32                          `protobuf:"fixed32,9,opt,name=score" json:"score,omitempty"`
> -	Key          []uint64                         `protobuf:"varint,5,rep,packed,name=key" json:"key,omitempty"`
> -	ShortKey     []int32                          `protobuf:"varint,19,rep,packed,name=short_key,json=shortKey" json:"short_key,omitempty"`
> -	Nested       *Nested                          `protobuf:"bytes,6,opt,name=nested" json:"nested,omitempty"`
> -	RFunny       []Message_Humour                 `protobuf:"varint,16,rep,packed,name=r_funny,json=rFunny,enum=proto3_proto.Message_Humour" json:"r_funny,omitempty"`
> -	Terrain      map[string]*Nested               `protobuf:"bytes,10,rep,name=terrain" json:"terrain,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	Proto2Field  *testdata.SubDefaults            `protobuf:"bytes,11,opt,name=proto2_field,json=proto2Field" json:"proto2_field,omitempty"`
> -	Proto2Value  map[string]*testdata.SubDefaults `protobuf:"bytes,13,rep,name=proto2_value,json=proto2Value" json:"proto2_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	Anything     *google_protobuf.Any             `protobuf:"bytes,14,opt,name=anything" json:"anything,omitempty"`
> -	ManyThings   []*google_protobuf.Any           `protobuf:"bytes,15,rep,name=many_things,json=manyThings" json:"many_things,omitempty"`
> -	Submessage   *Message                         `protobuf:"bytes,17,opt,name=submessage" json:"submessage,omitempty"`
> -	Children     []*Message                       `protobuf:"bytes,18,rep,name=children" json:"children,omitempty"`
> -}
> -
> -func (m *Message) Reset()                    { *m = Message{} }
> -func (m *Message) String() string            { return proto.CompactTextString(m) }
> -func (*Message) ProtoMessage()               {}
> -func (*Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -func (m *Message) GetName() string {
> -	if m != nil {
> -		return m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *Message) GetHilarity() Message_Humour {
> -	if m != nil {
> -		return m.Hilarity
> -	}
> -	return Message_UNKNOWN
> -}
> -
> -func (m *Message) GetHeightInCm() uint32 {
> -	if m != nil {
> -		return m.HeightInCm
> -	}
> -	return 0
> -}
> -
> -func (m *Message) GetData() []byte {
> -	if m != nil {
> -		return m.Data
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetResultCount() int64 {
> -	if m != nil {
> -		return m.ResultCount
> -	}
> -	return 0
> -}
> -
> -func (m *Message) GetTrueScotsman() bool {
> -	if m != nil {
> -		return m.TrueScotsman
> -	}
> -	return false
> -}
> -
> -func (m *Message) GetScore() float32 {
> -	if m != nil {
> -		return m.Score
> -	}
> -	return 0
> -}
> -
> -func (m *Message) GetKey() []uint64 {
> -	if m != nil {
> -		return m.Key
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetShortKey() []int32 {
> -	if m != nil {
> -		return m.ShortKey
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetNested() *Nested {
> -	if m != nil {
> -		return m.Nested
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetRFunny() []Message_Humour {
> -	if m != nil {
> -		return m.RFunny
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetTerrain() map[string]*Nested {
> -	if m != nil {
> -		return m.Terrain
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetProto2Field() *testdata.SubDefaults {
> -	if m != nil {
> -		return m.Proto2Field
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetProto2Value() map[string]*testdata.SubDefaults {
> -	if m != nil {
> -		return m.Proto2Value
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetAnything() *google_protobuf.Any {
> -	if m != nil {
> -		return m.Anything
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetManyThings() []*google_protobuf.Any {
> -	if m != nil {
> -		return m.ManyThings
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetSubmessage() *Message {
> -	if m != nil {
> -		return m.Submessage
> -	}
> -	return nil
> -}
> -
> -func (m *Message) GetChildren() []*Message {
> -	if m != nil {
> -		return m.Children
> -	}
> -	return nil
> -}
> -
> -type Nested struct {
> -	Bunny string `protobuf:"bytes,1,opt,name=bunny" json:"bunny,omitempty"`
> -	Cute  bool   `protobuf:"varint,2,opt,name=cute" json:"cute,omitempty"`
> -}
> -
> -func (m *Nested) Reset()                    { *m = Nested{} }
> -func (m *Nested) String() string            { return proto.CompactTextString(m) }
> -func (*Nested) ProtoMessage()               {}
> -func (*Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -
> -func (m *Nested) GetBunny() string {
> -	if m != nil {
> -		return m.Bunny
> -	}
> -	return ""
> -}
> -
> -func (m *Nested) GetCute() bool {
> -	if m != nil {
> -		return m.Cute
> -	}
> -	return false
> -}
> -
> -type MessageWithMap struct {
> -	ByteMapping map[bool][]byte `protobuf:"bytes,1,rep,name=byte_mapping,json=byteMapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"`
> -}
> -
> -func (m *MessageWithMap) Reset()                    { *m = MessageWithMap{} }
> -func (m *MessageWithMap) String() string            { return proto.CompactTextString(m) }
> -func (*MessageWithMap) ProtoMessage()               {}
> -func (*MessageWithMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
> -
> -func (m *MessageWithMap) GetByteMapping() map[bool][]byte {
> -	if m != nil {
> -		return m.ByteMapping
> -	}
> -	return nil
> -}
> -
> -type IntMap struct {
> -	Rtt map[int32]int32 `protobuf:"bytes,1,rep,name=rtt" json:"rtt,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
> -}
> -
> -func (m *IntMap) Reset()                    { *m = IntMap{} }
> -func (m *IntMap) String() string            { return proto.CompactTextString(m) }
> -func (*IntMap) ProtoMessage()               {}
> -func (*IntMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
> -
> -func (m *IntMap) GetRtt() map[int32]int32 {
> -	if m != nil {
> -		return m.Rtt
> -	}
> -	return nil
> -}
> -
> -type IntMaps struct {
> -	Maps []*IntMap `protobuf:"bytes,1,rep,name=maps" json:"maps,omitempty"`
> -}
> -
> -func (m *IntMaps) Reset()                    { *m = IntMaps{} }
> -func (m *IntMaps) String() string            { return proto.CompactTextString(m) }
> -func (*IntMaps) ProtoMessage()               {}
> -func (*IntMaps) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
> -
> -func (m *IntMaps) GetMaps() []*IntMap {
> -	if m != nil {
> -		return m.Maps
> -	}
> -	return nil
> -}
> -
> -func init() {
> -	proto.RegisterType((*Message)(nil), "proto3_proto.Message")
> -	proto.RegisterType((*Nested)(nil), "proto3_proto.Nested")
> -	proto.RegisterType((*MessageWithMap)(nil), "proto3_proto.MessageWithMap")
> -	proto.RegisterType((*IntMap)(nil), "proto3_proto.IntMap")
> -	proto.RegisterType((*IntMaps)(nil), "proto3_proto.IntMaps")
> -	proto.RegisterEnum("proto3_proto.Message_Humour", Message_Humour_name, Message_Humour_value)
> -}
> -
> -func init() { proto.RegisterFile("proto3_proto/proto3.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 733 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x53, 0x6d, 0x6f, 0xf3, 0x34,
> -	0x14, 0x25, 0x4d, 0x5f, 0xd2, 0x9b, 0x74, 0x0b, 0x5e, 0x91, 0xbc, 0x02, 0x52, 0x28, 0x12, 0x8a,
> -	0x78, 0x49, 0xa1, 0xd3, 0xd0, 0x84, 0x10, 0x68, 0x1b, 0x9b, 0xa8, 0xd6, 0x95, 0xca, 0xdd, 0x98,
> -	0xf8, 0x14, 0xa5, 0xad, 0xdb, 0x46, 0x34, 0x4e, 0x49, 0x1c, 0xa4, 0xfc, 0x1d, 0xfe, 0x28, 0x8f,
> -	0x6c, 0xa7, 0x5d, 0x36, 0x65, 0xcf, 0xf3, 0x29, 0xf6, 0xf1, 0xb9, 0xf7, 0x9c, 0x1c, 0x5f, 0xc3,
> -	0xe9, 0x2e, 0x89, 0x79, 0x7c, 0xe6, 0xcb, 0xcf, 0x40, 0x6d, 0x3c, 0xf9, 0x41, 0x56, 0xf9, 0xa8,
> -	0x77, 0xba, 0x8e, 0xe3, 0xf5, 0x96, 0x2a, 0xca, 0x3c, 0x5b, 0x0d, 0x02, 0x96, 0x2b, 0x62, 0xef,
> -	0x84, 0xd3, 0x94, 0x2f, 0x03, 0x1e, 0x0c, 0xc4, 0x42, 0x81, 0xfd, 0xff, 0x5b, 0xd0, 0xba, 0xa7,
> -	0x69, 0x1a, 0xac, 0x29, 0x42, 0x50, 0x67, 0x41, 0x44, 0xb1, 0xe6, 0x68, 0x6e, 0x9b, 0xc8, 0x35,
> -	0xba, 0x00, 0x63, 0x13, 0x6e, 0x83, 0x24, 0xe4, 0x39, 0xae, 0x39, 0x9a, 0x7b, 0x34, 0xfc, 0xcc,
> -	0x2b, 0x0b, 0x7a, 0x45, 0xb1, 0xf7, 0x7b, 0x16, 0xc5, 0x59, 0x42, 0x0e, 0x6c, 0xe4, 0x80, 0xb5,
> -	0xa1, 0xe1, 0x7a, 0xc3, 0xfd, 0x90, 0xf9, 0x8b, 0x08, 0xeb, 0x8e, 0xe6, 0x76, 0x08, 0x28, 0x6c,
> -	0xc4, 0xae, 0x23, 0xa1, 0x27, 0xec, 0xe0, 0xba, 0xa3, 0xb9, 0x16, 0x91, 0x6b, 0xf4, 0x05, 0x58,
> -	0x09, 0x4d, 0xb3, 0x2d, 0xf7, 0x17, 0x71, 0xc6, 0x38, 0x6e, 0x39, 0x9a, 0xab, 0x13, 0x53, 0x61,
> -	0xd7, 0x02, 0x42, 0x5f, 0x42, 0x87, 0x27, 0x19, 0xf5, 0xd3, 0x45, 0xcc, 0xd3, 0x28, 0x60, 0xd8,
> -	0x70, 0x34, 0xd7, 0x20, 0x96, 0x00, 0x67, 0x05, 0x86, 0xba, 0xd0, 0x48, 0x17, 0x71, 0x42, 0x71,
> -	0xdb, 0xd1, 0xdc, 0x1a, 0x51, 0x1b, 0x64, 0x83, 0xfe, 0x37, 0xcd, 0x71, 0xc3, 0xd1, 0xdd, 0x3a,
> -	0x11, 0x4b, 0xf4, 0x29, 0xb4, 0xd3, 0x4d, 0x9c, 0x70, 0x5f, 0xe0, 0x27, 0x8e, 0xee, 0x36, 0x88,
> -	0x21, 0x81, 0x3b, 0x9a, 0xa3, 0x6f, 0xa1, 0xc9, 0x68, 0xca, 0xe9, 0x12, 0x37, 0x1d, 0xcd, 0x35,
> -	0x87, 0xdd, 0x97, 0xbf, 0x3e, 0x91, 0x67, 0xa4, 0xe0, 0xa0, 0x73, 0x68, 0x25, 0xfe, 0x2a, 0x63,
> -	0x2c, 0xc7, 0xb6, 0xa3, 0x7f, 0x30, 0xa9, 0x66, 0x72, 0x2b, 0xb8, 0xe8, 0x67, 0x68, 0x71, 0x9a,
> -	0x24, 0x41, 0xc8, 0x30, 0x38, 0xba, 0x6b, 0x0e, 0xfb, 0xd5, 0x65, 0x0f, 0x8a, 0x74, 0xc3, 0x78,
> -	0x92, 0x93, 0x7d, 0x09, 0xba, 0x00, 0x75, 0xff, 0x43, 0x7f, 0x15, 0xd2, 0xed, 0x12, 0x9b, 0xd2,
> -	0xe8, 0x27, 0xde, 0xfe, 0xae, 0xbd, 0x59, 0x36, 0xff, 0x8d, 0xae, 0x82, 0x6c, 0xcb, 0x53, 0x62,
> -	0x2a, 0xea, 0xad, 0x60, 0xa2, 0xd1, 0xa1, 0xf2, 0xdf, 0x60, 0x9b, 0x51, 0xdc, 0x91, 0xe2, 0x5f,
> -	0x55, 0x8b, 0x4f, 0x25, 0xf3, 0x4f, 0x41, 0x54, 0x06, 0x8a, 0x56, 0x12, 0x41, 0xdf, 0x83, 0x11,
> -	0xb0, 0x9c, 0x6f, 0x42, 0xb6, 0xc6, 0x47, 0x45, 0x52, 0x6a, 0x0e, 0xbd, 0xfd, 0x1c, 0x7a, 0x97,
> -	0x2c, 0x27, 0x07, 0x16, 0x3a, 0x07, 0x33, 0x0a, 0x58, 0xee, 0xcb, 0x5d, 0x8a, 0x8f, 0xa5, 0x76,
> -	0x75, 0x11, 0x08, 0xe2, 0x83, 0xe4, 0xa1, 0x73, 0x80, 0x34, 0x9b, 0x47, 0xca, 0x14, 0xfe, 0xb8,
> -	0xf8, 0xd7, 0x2a, 0xc7, 0xa4, 0x44, 0x44, 0x3f, 0x80, 0xb1, 0xd8, 0x84, 0xdb, 0x65, 0x42, 0x19,
> -	0x46, 0x52, 0xea, 0x8d, 0xa2, 0x03, 0xad, 0x37, 0x05, 0xab, 0x1c, 0xf8, 0x7e, 0x72, 0xd4, 0xd3,
> -	0x90, 0x93, 0xf3, 0x35, 0x34, 0x54, 0x70, 0xb5, 0xf7, 0xcc, 0x86, 0xa2, 0xfc, 0x54, 0xbb, 0xd0,
> -	0x7a, 0x8f, 0x60, 0xbf, 0x4e, 0xb1, 0xa2, 0xeb, 0x37, 0x2f, 0xbb, 0xbe, 0x71, 0x91, 0xcf, 0x6d,
> -	0xfb, 0xbf, 0x42, 0x53, 0x0d, 0x14, 0x32, 0xa1, 0xf5, 0x38, 0xb9, 0x9b, 0xfc, 0xf1, 0x34, 0xb1,
> -	0x3f, 0x42, 0x06, 0xd4, 0xa7, 0x8f, 0x93, 0x99, 0xad, 0xa1, 0x0e, 0xb4, 0x67, 0xe3, 0xcb, 0xe9,
> -	0xec, 0x61, 0x74, 0x7d, 0x67, 0xd7, 0xd0, 0x31, 0x98, 0x57, 0xa3, 0xf1, 0xd8, 0xbf, 0xba, 0x1c,
> -	0x8d, 0x6f, 0xfe, 0xb2, 0xf5, 0xfe, 0x10, 0x9a, 0xca, 0xac, 0x78, 0x33, 0x73, 0x39, 0xbe, 0xca,
> -	0x8f, 0xda, 0x88, 0x57, 0xba, 0xc8, 0xb8, 0x32, 0x64, 0x10, 0xb9, 0xee, 0xff, 0xa7, 0xc1, 0x51,
> -	0x91, 0xd9, 0x53, 0xc8, 0x37, 0xf7, 0xc1, 0x0e, 0x4d, 0xc1, 0x9a, 0xe7, 0x9c, 0xfa, 0x51, 0xb0,
> -	0xdb, 0x89, 0x39, 0xd0, 0x64, 0xce, 0xdf, 0x55, 0xe6, 0x5c, 0xd4, 0x78, 0x57, 0x39, 0xa7, 0xf7,
> -	0x8a, 0x5f, 0x4c, 0xd5, 0xfc, 0x19, 0xe9, 0xfd, 0x02, 0xf6, 0x6b, 0x42, 0x39, 0x30, 0x43, 0x05,
> -	0xd6, 0x2d, 0x07, 0x66, 0x95, 0x93, 0xf9, 0x07, 0x9a, 0x23, 0xc6, 0x85, 0xb7, 0x01, 0xe8, 0x09,
> -	0xe7, 0x85, 0xa5, 0xcf, 0x5f, 0x5a, 0x52, 0x14, 0x8f, 0x70, 0xae, 0x2c, 0x08, 0x66, 0xef, 0x47,
> -	0x30, 0xf6, 0x40, 0x59, 0xb2, 0x51, 0x21, 0xd9, 0x28, 0x4b, 0x9e, 0x41, 0x4b, 0xf5, 0x4b, 0x91,
> -	0x0b, 0xf5, 0x28, 0xd8, 0xa5, 0x85, 0x68, 0xb7, 0x4a, 0x94, 0x48, 0xc6, 0xbc, 0xa9, 0x8e, 0xde,
> -	0x05, 0x00, 0x00, 0xff, 0xff, 0x75, 0x38, 0xad, 0x84, 0xe4, 0x05, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto b/phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto
> deleted file mode 100644
> index 20486557..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto
> +++ /dev/null
> @@ -1,87 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2014 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto3";
> -
> -import "google/protobuf/any.proto";
> -import "testdata/test.proto";
> -
> -package proto3_proto;
> -
> -message Message {
> -  enum Humour {
> -    UNKNOWN = 0;
> -    PUNS = 1;
> -    SLAPSTICK = 2;
> -    BILL_BAILEY = 3;
> -  }
> -
> -  string name = 1;
> -  Humour hilarity = 2;
> -  uint32 height_in_cm = 3;
> -  bytes data = 4;
> -  int64 result_count = 7;
> -  bool true_scotsman = 8;
> -  float score = 9;
> -
> -  repeated uint64 key = 5;
> -  repeated int32 short_key = 19;
> -  Nested nested = 6;
> -  repeated Humour r_funny = 16;
> -
> -  map<string, Nested> terrain = 10;
> -  testdata.SubDefaults proto2_field = 11;
> -  map<string, testdata.SubDefaults> proto2_value = 13;
> -
> -  google.protobuf.Any anything = 14;
> -  repeated google.protobuf.Any many_things = 15;
> -
> -  Message submessage = 17;
> -  repeated Message children = 18;
> -}
> -
> -message Nested {
> -  string bunny = 1;
> -  bool cute = 2;
> -}
> -
> -message MessageWithMap {
> -  map<bool, bytes> byte_mapping = 1;
> -}
> -
> -
> -message IntMap {
> -  map<int32, int32> rtt = 1;
> -}
> -
> -message IntMaps {
> -  repeated IntMap maps = 1;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_test.go
> deleted file mode 100644
> index 735837f2..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/proto3_test.go
> +++ /dev/null
> @@ -1,135 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2014 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto_test
> -
> -import (
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -	pb "github.com/golang/protobuf/proto/proto3_proto"
> -	tpb "github.com/golang/protobuf/proto/testdata"
> -)
> -
> -func TestProto3ZeroValues(t *testing.T) {
> -	tests := []struct {
> -		desc string
> -		m    proto.Message
> -	}{
> -		{"zero message", &pb.Message{}},
> -		{"empty bytes field", &pb.Message{Data: []byte{}}},
> -	}
> -	for _, test := range tests {
> -		b, err := proto.Marshal(test.m)
> -		if err != nil {
> -			t.Errorf("%s: proto.Marshal: %v", test.desc, err)
> -			continue
> -		}
> -		if len(b) > 0 {
> -			t.Errorf("%s: Encoding is non-empty: %q", test.desc, b)
> -		}
> -	}
> -}
> -
> -func TestRoundTripProto3(t *testing.T) {
> -	m := &pb.Message{
> -		Name:         "David",          // (2 | 1<<3): 0x0a 0x05 "David"
> -		Hilarity:     pb.Message_PUNS,  // (0 | 2<<3): 0x10 0x01
> -		HeightInCm:   178,              // (0 | 3<<3): 0x18 0xb2 0x01
> -		Data:         []byte("roboto"), // (2 | 4<<3): 0x20 0x06 "roboto"
> -		ResultCount:  47,               // (0 | 7<<3): 0x38 0x2f
> -		TrueScotsman: true,             // (0 | 8<<3): 0x40 0x01
> -		Score:        8.1,              // (5 | 9<<3): 0x4d <8.1>
> -
> -		Key: []uint64{1, 0xdeadbeef},
> -		Nested: &pb.Nested{
> -			Bunny: "Monty",
> -		},
> -	}
> -	t.Logf(" m: %v", m)
> -
> -	b, err := proto.Marshal(m)
> -	if err != nil {
> -		t.Fatalf("proto.Marshal: %v", err)
> -	}
> -	t.Logf(" b: %q", b)
> -
> -	m2 := new(pb.Message)
> -	if err := proto.Unmarshal(b, m2); err != nil {
> -		t.Fatalf("proto.Unmarshal: %v", err)
> -	}
> -	t.Logf("m2: %v", m2)
> -
> -	if !proto.Equal(m, m2) {
> -		t.Errorf("proto.Equal returned false:\n m: %v\nm2: %v", m, m2)
> -	}
> -}
> -
> -func TestGettersForBasicTypesExist(t *testing.T) {
> -	var m pb.Message
> -	if got := m.GetNested().GetBunny(); got != "" {
> -		t.Errorf("m.GetNested().GetBunny() = %q, want empty string", got)
> -	}
> -	if got := m.GetNested().GetCute(); got {
> -		t.Errorf("m.GetNested().GetCute() = %t, want false", got)
> -	}
> -}
> -
> -func TestProto3SetDefaults(t *testing.T) {
> -	in := &pb.Message{
> -		Terrain: map[string]*pb.Nested{
> -			"meadow": new(pb.Nested),
> -		},
> -		Proto2Field: new(tpb.SubDefaults),
> -		Proto2Value: map[string]*tpb.SubDefaults{
> -			"badlands": new(tpb.SubDefaults),
> -		},
> -	}
> -
> -	got := proto.Clone(in).(*pb.Message)
> -	proto.SetDefaults(got)
> -
> -	// There are no defaults in proto3.  Everything should be the zero value, but
> -	// we need to remember to set defaults for nested proto2 messages.
> -	want := &pb.Message{
> -		Terrain: map[string]*pb.Nested{
> -			"meadow": new(pb.Nested),
> -		},
> -		Proto2Field: &tpb.SubDefaults{N: proto.Int64(7)},
> -		Proto2Value: map[string]*tpb.SubDefaults{
> -			"badlands": &tpb.SubDefaults{N: proto.Int64(7)},
> -		},
> -	}
> -
> -	if !proto.Equal(got, want) {
> -		t.Errorf("with in = %v\nproto.SetDefaults(in) =>\ngot %v\nwant %v", in, got, want)
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/size2_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/size2_test.go
> deleted file mode 100644
> index a2729c39..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/size2_test.go
> +++ /dev/null
> @@ -1,63 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2012 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto
> -
> -import (
> -	"testing"
> -)
> -
> -// This is a separate file and package from size_test.go because that one uses
> -// generated messages and thus may not be in package proto without having a circular
> -// dependency, whereas this file tests unexported details of size.go.
> -
> -func TestVarintSize(t *testing.T) {
> -	// Check the edge cases carefully.
> -	testCases := []struct {
> -		n    uint64
> -		size int
> -	}{
> -		{0, 1},
> -		{1, 1},
> -		{127, 1},
> -		{128, 2},
> -		{16383, 2},
> -		{16384, 3},
> -		{1<<63 - 1, 9},
> -		{1 << 63, 10},
> -	}
> -	for _, tc := range testCases {
> -		size := sizeVarint(tc.n)
> -		if size != tc.size {
> -			t.Errorf("sizeVarint(%d) = %d, want %d", tc.n, size, tc.size)
> -		}
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/size_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/size_test.go
> deleted file mode 100644
> index af1034dc..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/size_test.go
> +++ /dev/null
> @@ -1,164 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2012 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto_test
> -
> -import (
> -	"log"
> -	"strings"
> -	"testing"
> -
> -	. "github.com/golang/protobuf/proto"
> -	proto3pb "github.com/golang/protobuf/proto/proto3_proto"
> -	pb "github.com/golang/protobuf/proto/testdata"
> -)
> -
> -var messageWithExtension1 = &pb.MyMessage{Count: Int32(7)}
> -
> -// messageWithExtension2 is in equal_test.go.
> -var messageWithExtension3 = &pb.MyMessage{Count: Int32(8)}
> -
> -func init() {
> -	if err := SetExtension(messageWithExtension1, pb.E_Ext_More, &pb.Ext{Data: String("Abbott")}); err != nil {
> -		log.Panicf("SetExtension: %v", err)
> -	}
> -	if err := SetExtension(messageWithExtension3, pb.E_Ext_More, &pb.Ext{Data: String("Costello")}); err != nil {
> -		log.Panicf("SetExtension: %v", err)
> -	}
> -
> -	// Force messageWithExtension3 to have the extension encoded.
> -	Marshal(messageWithExtension3)
> -
> -}
> -
> -var SizeTests = []struct {
> -	desc string
> -	pb   Message
> -}{
> -	{"empty", &pb.OtherMessage{}},
> -	// Basic types.
> -	{"bool", &pb.Defaults{F_Bool: Bool(true)}},
> -	{"int32", &pb.Defaults{F_Int32: Int32(12)}},
> -	{"negative int32", &pb.Defaults{F_Int32: Int32(-1)}},
> -	{"small int64", &pb.Defaults{F_Int64: Int64(1)}},
> -	{"big int64", &pb.Defaults{F_Int64: Int64(1 << 20)}},
> -	{"negative int64", &pb.Defaults{F_Int64: Int64(-1)}},
> -	{"fixed32", &pb.Defaults{F_Fixed32: Uint32(71)}},
> -	{"fixed64", &pb.Defaults{F_Fixed64: Uint64(72)}},
> -	{"uint32", &pb.Defaults{F_Uint32: Uint32(123)}},
> -	{"uint64", &pb.Defaults{F_Uint64: Uint64(124)}},
> -	{"float", &pb.Defaults{F_Float: Float32(12.6)}},
> -	{"double", &pb.Defaults{F_Double: Float64(13.9)}},
> -	{"string", &pb.Defaults{F_String: String("niles")}},
> -	{"bytes", &pb.Defaults{F_Bytes: []byte("wowsa")}},
> -	{"bytes, empty", &pb.Defaults{F_Bytes: []byte{}}},
> -	{"sint32", &pb.Defaults{F_Sint32: Int32(65)}},
> -	{"sint64", &pb.Defaults{F_Sint64: Int64(67)}},
> -	{"enum", &pb.Defaults{F_Enum: pb.Defaults_BLUE.Enum()}},
> -	// Repeated.
> -	{"empty repeated bool", &pb.MoreRepeated{Bools: []bool{}}},
> -	{"repeated bool", &pb.MoreRepeated{Bools: []bool{false, true, true, false}}},
> -	{"packed repeated bool", &pb.MoreRepeated{BoolsPacked: []bool{false, true, true, false, true, true, true}}},
> -	{"repeated int32", &pb.MoreRepeated{Ints: []int32{1, 12203, 1729, -1}}},
> -	{"repeated int32 packed", &pb.MoreRepeated{IntsPacked: []int32{1, 12203, 1729}}},
> -	{"repeated int64 packed", &pb.MoreRepeated{Int64SPacked: []int64{
> -		// Need enough large numbers to verify that the header is counting the number of bytes
> -		// for the field, not the number of elements.
> -		1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62,
> -		1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62, 1 << 62,
> -	}}},
> -	{"repeated string", &pb.MoreRepeated{Strings: []string{"r", "ken", "gri"}}},
> -	{"repeated fixed", &pb.MoreRepeated{Fixeds: []uint32{1, 2, 3, 4}}},
> -	// Nested.
> -	{"nested", &pb.OldMessage{Nested: &pb.OldMessage_Nested{Name: String("whatever")}}},
> -	{"group", &pb.GroupOld{G: &pb.GroupOld_G{X: Int32(12345)}}},
> -	// Other things.
> -	{"unrecognized", &pb.MoreRepeated{XXX_unrecognized: []byte{13<<3 | 0, 4}}},
> -	{"extension (unencoded)", messageWithExtension1},
> -	{"extension (encoded)", messageWithExtension3},
> -	// proto3 message
> -	{"proto3 empty", &proto3pb.Message{}},
> -	{"proto3 bool", &proto3pb.Message{TrueScotsman: true}},
> -	{"proto3 int64", &proto3pb.Message{ResultCount: 1}},
> -	{"proto3 uint32", &proto3pb.Message{HeightInCm: 123}},
> -	{"proto3 float", &proto3pb.Message{Score: 12.6}},
> -	{"proto3 string", &proto3pb.Message{Name: "Snezana"}},
> -	{"proto3 bytes", &proto3pb.Message{Data: []byte("wowsa")}},
> -	{"proto3 bytes, empty", &proto3pb.Message{Data: []byte{}}},
> -	{"proto3 enum", &proto3pb.Message{Hilarity: proto3pb.Message_PUNS}},
> -	{"proto3 map field with empty bytes", &proto3pb.MessageWithMap{ByteMapping: map[bool][]byte{false: []byte{}}}},
> -
> -	{"map field", &pb.MessageWithMap{NameMapping: map[int32]string{1: "Rob", 7: "Andrew"}}},
> -	{"map field with message", &pb.MessageWithMap{MsgMapping: map[int64]*pb.FloatingPoint{0x7001: &pb.FloatingPoint{F: Float64(2.0)}}}},
> -	{"map field with bytes", &pb.MessageWithMap{ByteMapping: map[bool][]byte{true: []byte("this time for sure")}}},
> -	{"map field with empty bytes", &pb.MessageWithMap{ByteMapping: map[bool][]byte{true: []byte{}}}},
> -
> -	{"map field with big entry", &pb.MessageWithMap{NameMapping: map[int32]string{8: strings.Repeat("x", 125)}}},
> -	{"map field with big key and val", &pb.MessageWithMap{StrToStr: map[string]string{strings.Repeat("x", 70): strings.Repeat("y", 70)}}},
> -	{"map field with big numeric key", &pb.MessageWithMap{NameMapping: map[int32]string{0xf00d: "om nom nom"}}},
> -
> -	{"oneof not set", &pb.Oneof{}},
> -	{"oneof bool", &pb.Oneof{Union: &pb.Oneof_F_Bool{true}}},
> -	{"oneof zero int32", &pb.Oneof{Union: &pb.Oneof_F_Int32{0}}},
> -	{"oneof big int32", &pb.Oneof{Union: &pb.Oneof_F_Int32{1 << 20}}},
> -	{"oneof int64", &pb.Oneof{Union: &pb.Oneof_F_Int64{42}}},
> -	{"oneof fixed32", &pb.Oneof{Union: &pb.Oneof_F_Fixed32{43}}},
> -	{"oneof fixed64", &pb.Oneof{Union: &pb.Oneof_F_Fixed64{44}}},
> -	{"oneof uint32", &pb.Oneof{Union: &pb.Oneof_F_Uint32{45}}},
> -	{"oneof uint64", &pb.Oneof{Union: &pb.Oneof_F_Uint64{46}}},
> -	{"oneof float", &pb.Oneof{Union: &pb.Oneof_F_Float{47.1}}},
> -	{"oneof double", &pb.Oneof{Union: &pb.Oneof_F_Double{48.9}}},
> -	{"oneof string", &pb.Oneof{Union: &pb.Oneof_F_String{"Rhythmic Fman"}}},
> -	{"oneof bytes", &pb.Oneof{Union: &pb.Oneof_F_Bytes{[]byte("let go")}}},
> -	{"oneof sint32", &pb.Oneof{Union: &pb.Oneof_F_Sint32{50}}},
> -	{"oneof sint64", &pb.Oneof{Union: &pb.Oneof_F_Sint64{51}}},
> -	{"oneof enum", &pb.Oneof{Union: &pb.Oneof_F_Enum{pb.MyMessage_BLUE}}},
> -	{"message for oneof", &pb.GoTestField{Label: String("k"), Type: String("v")}},
> -	{"oneof message", &pb.Oneof{Union: &pb.Oneof_F_Message{&pb.GoTestField{Label: String("k"), Type: String("v")}}}},
> -	{"oneof group", &pb.Oneof{Union: &pb.Oneof_FGroup{&pb.Oneof_F_Group{X: Int32(52)}}}},
> -	{"oneof largest tag", &pb.Oneof{Union: &pb.Oneof_F_Largest_Tag{1}}},
> -	{"multiple oneofs", &pb.Oneof{Union: &pb.Oneof_F_Int32{1}, Tormato: &pb.Oneof_Value{2}}},
> -}
> -
> -func TestSize(t *testing.T) {
> -	for _, tc := range SizeTests {
> -		size := Size(tc.pb)
> -		b, err := Marshal(tc.pb)
> -		if err != nil {
> -			t.Errorf("%v: Marshal failed: %v", tc.desc, err)
> -			continue
> -		}
> -		if size != len(b) {
> -			t.Errorf("%v: Size(%v) = %d, want %d", tc.desc, tc.pb, size, len(b))
> -			t.Logf("%v: bytes: %#v", tc.desc, b)
> -		}
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/Makefile b/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/Makefile
> deleted file mode 100644
> index fc288628..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/Makefile
> +++ /dev/null
> @@ -1,50 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2010 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -
> -include ../../Make.protobuf
> -
> -all:	regenerate
> -
> -regenerate:
> -	rm -f test.pb.go
> -	make test.pb.go
> -
> -# The following rules are just aids to development. Not needed for typical testing.
> -
> -diff:	regenerate
> -	git diff test.pb.go
> -
> -restore:
> -	cp test.pb.go.golden test.pb.go
> -
> -preserve:
> -	cp test.pb.go test.pb.go.golden
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/golden_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/golden_test.go
> deleted file mode 100644
> index 7172d0e9..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/golden_test.go
> +++ /dev/null
> @@ -1,86 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2012 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// Verify that the compiler output for test.proto is unchanged.
> -
> -package testdata
> -
> -import (
> -	"crypto/sha1"
> -	"fmt"
> -	"io/ioutil"
> -	"os"
> -	"os/exec"
> -	"path/filepath"
> -	"testing"
> -)
> -
> -// sum returns in string form (for easy comparison) the SHA-1 hash of the named file.
> -func sum(t *testing.T, name string) string {
> -	data, err := ioutil.ReadFile(name)
> -	if err != nil {
> -		t.Fatal(err)
> -	}
> -	t.Logf("sum(%q): length is %d", name, len(data))
> -	hash := sha1.New()
> -	_, err = hash.Write(data)
> -	if err != nil {
> -		t.Fatal(err)
> -	}
> -	return fmt.Sprintf("% x", hash.Sum(nil))
> -}
> -
> -func run(t *testing.T, name string, args ...string) {
> -	cmd := exec.Command(name, args...)
> -	cmd.Stdin = os.Stdin
> -	cmd.Stdout = os.Stdout
> -	cmd.Stderr = os.Stderr
> -	err := cmd.Run()
> -	if err != nil {
> -		t.Fatal(err)
> -	}
> -}
> -
> -func TestGolden(t *testing.T) {
> -	// Compute the original checksum.
> -	goldenSum := sum(t, "test.pb.go")
> -	// Run the proto compiler.
> -	run(t, "protoc", "--go_out="+os.TempDir(), "test.proto")
> -	newFile := filepath.Join(os.TempDir(), "test.pb.go")
> -	defer os.Remove(newFile)
> -	// Compute the new checksum.
> -	newSum := sum(t, newFile)
> -	// Verify
> -	if newSum != goldenSum {
> -		run(t, "diff", "-u", "test.pb.go", newFile)
> -		t.Fatal("Code generated by protoc-gen-go has changed; update test.pb.go")
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/test.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/test.pb.go
> deleted file mode 100644
> index e980d1a0..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/test.pb.go
> +++ /dev/null
> @@ -1,4147 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: test.proto
> -
> -/*
> -Package testdata is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	test.proto
> -
> -It has these top-level messages:
> -	GoEnum
> -	GoTestField
> -	GoTest
> -	GoTestRequiredGroupField
> -	GoSkipTest
> -	NonPackedTest
> -	PackedTest
> -	MaxTag
> -	OldMessage
> -	NewMessage
> -	InnerMessage
> -	OtherMessage
> -	RequiredInnerMessage
> -	MyMessage
> -	Ext
> -	ComplexExtension
> -	DefaultsMessage
> -	MyMessageSet
> -	Empty
> -	MessageList
> -	Strings
> -	Defaults
> -	SubDefaults
> -	RepeatedEnum
> -	MoreRepeated
> -	GroupOld
> -	GroupNew
> -	FloatingPoint
> -	MessageWithMap
> -	Oneof
> -	Communique
> -*/
> -package testdata
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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 FOO int32
> -
> -const (
> -	FOO_FOO1 FOO = 1
> -)
> -
> -var FOO_name = map[int32]string{
> -	1: "FOO1",
> -}
> -var FOO_value = map[string]int32{
> -	"FOO1": 1,
> -}
> -
> -func (x FOO) Enum() *FOO {
> -	p := new(FOO)
> -	*p = x
> -	return p
> -}
> -func (x FOO) String() string {
> -	return proto.EnumName(FOO_name, int32(x))
> -}
> -func (x *FOO) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(FOO_value, data, "FOO")
> -	if err != nil {
> -		return err
> -	}
> -	*x = FOO(value)
> -	return nil
> -}
> -func (FOO) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -// An enum, for completeness.
> -type GoTest_KIND int32
> -
> -const (
> -	GoTest_VOID GoTest_KIND = 0
> -	// Basic types
> -	GoTest_BOOL        GoTest_KIND = 1
> -	GoTest_BYTES       GoTest_KIND = 2
> -	GoTest_FINGERPRINT GoTest_KIND = 3
> -	GoTest_FLOAT       GoTest_KIND = 4
> -	GoTest_INT         GoTest_KIND = 5
> -	GoTest_STRING      GoTest_KIND = 6
> -	GoTest_TIME        GoTest_KIND = 7
> -	// Groupings
> -	GoTest_TUPLE GoTest_KIND = 8
> -	GoTest_ARRAY GoTest_KIND = 9
> -	GoTest_MAP   GoTest_KIND = 10
> -	// Table types
> -	GoTest_TABLE GoTest_KIND = 11
> -	// Functions
> -	GoTest_FUNCTION GoTest_KIND = 12
> -)
> -
> -var GoTest_KIND_name = map[int32]string{
> -	0:  "VOID",
> -	1:  "BOOL",
> -	2:  "BYTES",
> -	3:  "FINGERPRINT",
> -	4:  "FLOAT",
> -	5:  "INT",
> -	6:  "STRING",
> -	7:  "TIME",
> -	8:  "TUPLE",
> -	9:  "ARRAY",
> -	10: "MAP",
> -	11: "TABLE",
> -	12: "FUNCTION",
> -}
> -var GoTest_KIND_value = map[string]int32{
> -	"VOID":        0,
> -	"BOOL":        1,
> -	"BYTES":       2,
> -	"FINGERPRINT": 3,
> -	"FLOAT":       4,
> -	"INT":         5,
> -	"STRING":      6,
> -	"TIME":        7,
> -	"TUPLE":       8,
> -	"ARRAY":       9,
> -	"MAP":         10,
> -	"TABLE":       11,
> -	"FUNCTION":    12,
> -}
> -
> -func (x GoTest_KIND) Enum() *GoTest_KIND {
> -	p := new(GoTest_KIND)
> -	*p = x
> -	return p
> -}
> -func (x GoTest_KIND) String() string {
> -	return proto.EnumName(GoTest_KIND_name, int32(x))
> -}
> -func (x *GoTest_KIND) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(GoTest_KIND_value, data, "GoTest_KIND")
> -	if err != nil {
> -		return err
> -	}
> -	*x = GoTest_KIND(value)
> -	return nil
> -}
> -func (GoTest_KIND) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
> -
> -type MyMessage_Color int32
> -
> -const (
> -	MyMessage_RED   MyMessage_Color = 0
> -	MyMessage_GREEN MyMessage_Color = 1
> -	MyMessage_BLUE  MyMessage_Color = 2
> -)
> -
> -var MyMessage_Color_name = map[int32]string{
> -	0: "RED",
> -	1: "GREEN",
> -	2: "BLUE",
> -}
> -var MyMessage_Color_value = map[string]int32{
> -	"RED":   0,
> -	"GREEN": 1,
> -	"BLUE":  2,
> -}
> -
> -func (x MyMessage_Color) Enum() *MyMessage_Color {
> -	p := new(MyMessage_Color)
> -	*p = x
> -	return p
> -}
> -func (x MyMessage_Color) String() string {
> -	return proto.EnumName(MyMessage_Color_name, int32(x))
> -}
> -func (x *MyMessage_Color) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(MyMessage_Color_value, data, "MyMessage_Color")
> -	if err != nil {
> -		return err
> -	}
> -	*x = MyMessage_Color(value)
> -	return nil
> -}
> -func (MyMessage_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{13, 0} }
> -
> -type DefaultsMessage_DefaultsEnum int32
> -
> -const (
> -	DefaultsMessage_ZERO DefaultsMessage_DefaultsEnum = 0
> -	DefaultsMessage_ONE  DefaultsMessage_DefaultsEnum = 1
> -	DefaultsMessage_TWO  DefaultsMessage_DefaultsEnum = 2
> -)
> -
> -var DefaultsMessage_DefaultsEnum_name = map[int32]string{
> -	0: "ZERO",
> -	1: "ONE",
> -	2: "TWO",
> -}
> -var DefaultsMessage_DefaultsEnum_value = map[string]int32{
> -	"ZERO": 0,
> -	"ONE":  1,
> -	"TWO":  2,
> -}
> -
> -func (x DefaultsMessage_DefaultsEnum) Enum() *DefaultsMessage_DefaultsEnum {
> -	p := new(DefaultsMessage_DefaultsEnum)
> -	*p = x
> -	return p
> -}
> -func (x DefaultsMessage_DefaultsEnum) String() string {
> -	return proto.EnumName(DefaultsMessage_DefaultsEnum_name, int32(x))
> -}
> -func (x *DefaultsMessage_DefaultsEnum) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(DefaultsMessage_DefaultsEnum_value, data, "DefaultsMessage_DefaultsEnum")
> -	if err != nil {
> -		return err
> -	}
> -	*x = DefaultsMessage_DefaultsEnum(value)
> -	return nil
> -}
> -func (DefaultsMessage_DefaultsEnum) EnumDescriptor() ([]byte, []int) {
> -	return fileDescriptor0, []int{16, 0}
> -}
> -
> -type Defaults_Color int32
> -
> -const (
> -	Defaults_RED   Defaults_Color = 0
> -	Defaults_GREEN Defaults_Color = 1
> -	Defaults_BLUE  Defaults_Color = 2
> -)
> -
> -var Defaults_Color_name = map[int32]string{
> -	0: "RED",
> -	1: "GREEN",
> -	2: "BLUE",
> -}
> -var Defaults_Color_value = map[string]int32{
> -	"RED":   0,
> -	"GREEN": 1,
> -	"BLUE":  2,
> -}
> -
> -func (x Defaults_Color) Enum() *Defaults_Color {
> -	p := new(Defaults_Color)
> -	*p = x
> -	return p
> -}
> -func (x Defaults_Color) String() string {
> -	return proto.EnumName(Defaults_Color_name, int32(x))
> -}
> -func (x *Defaults_Color) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(Defaults_Color_value, data, "Defaults_Color")
> -	if err != nil {
> -		return err
> -	}
> -	*x = Defaults_Color(value)
> -	return nil
> -}
> -func (Defaults_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{21, 0} }
> -
> -type RepeatedEnum_Color int32
> -
> -const (
> -	RepeatedEnum_RED RepeatedEnum_Color = 1
> -)
> -
> -var RepeatedEnum_Color_name = map[int32]string{
> -	1: "RED",
> -}
> -var RepeatedEnum_Color_value = map[string]int32{
> -	"RED": 1,
> -}
> -
> -func (x RepeatedEnum_Color) Enum() *RepeatedEnum_Color {
> -	p := new(RepeatedEnum_Color)
> -	*p = x
> -	return p
> -}
> -func (x RepeatedEnum_Color) String() string {
> -	return proto.EnumName(RepeatedEnum_Color_name, int32(x))
> -}
> -func (x *RepeatedEnum_Color) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(RepeatedEnum_Color_value, data, "RepeatedEnum_Color")
> -	if err != nil {
> -		return err
> -	}
> -	*x = RepeatedEnum_Color(value)
> -	return nil
> -}
> -func (RepeatedEnum_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{23, 0} }
> -
> -type GoEnum struct {
> -	Foo              *FOO   `protobuf:"varint,1,req,name=foo,enum=testdata.FOO" json:"foo,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *GoEnum) Reset()                    { *m = GoEnum{} }
> -func (m *GoEnum) String() string            { return proto.CompactTextString(m) }
> -func (*GoEnum) ProtoMessage()               {}
> -func (*GoEnum) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -func (m *GoEnum) GetFoo() FOO {
> -	if m != nil && m.Foo != nil {
> -		return *m.Foo
> -	}
> -	return FOO_FOO1
> -}
> -
> -type GoTestField struct {
> -	Label            *string `protobuf:"bytes,1,req,name=Label" json:"Label,omitempty"`
> -	Type             *string `protobuf:"bytes,2,req,name=Type" json:"Type,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *GoTestField) Reset()                    { *m = GoTestField{} }
> -func (m *GoTestField) String() string            { return proto.CompactTextString(m) }
> -func (*GoTestField) ProtoMessage()               {}
> -func (*GoTestField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -
> -func (m *GoTestField) GetLabel() string {
> -	if m != nil && m.Label != nil {
> -		return *m.Label
> -	}
> -	return ""
> -}
> -
> -func (m *GoTestField) GetType() string {
> -	if m != nil && m.Type != nil {
> -		return *m.Type
> -	}
> -	return ""
> -}
> -
> -type GoTest struct {
> -	// Some typical parameters
> -	Kind  *GoTest_KIND `protobuf:"varint,1,req,name=Kind,enum=testdata.GoTest_KIND" json:"Kind,omitempty"`
> -	Table *string      `protobuf:"bytes,2,opt,name=Table" json:"Table,omitempty"`
> -	Param *int32       `protobuf:"varint,3,opt,name=Param" json:"Param,omitempty"`
> -	// Required, repeated and optional foreign fields.
> -	RequiredField *GoTestField   `protobuf:"bytes,4,req,name=RequiredField" json:"RequiredField,omitempty"`
> -	RepeatedField []*GoTestField `protobuf:"bytes,5,rep,name=RepeatedField" json:"RepeatedField,omitempty"`
> -	OptionalField *GoTestField   `protobuf:"bytes,6,opt,name=OptionalField" json:"OptionalField,omitempty"`
> -	// Required fields of all basic types
> -	F_BoolRequired    *bool    `protobuf:"varint,10,req,name=F_Bool_required,json=FBoolRequired" json:"F_Bool_required,omitempty"`
> -	F_Int32Required   *int32   `protobuf:"varint,11,req,name=F_Int32_required,json=FInt32Required" json:"F_Int32_required,omitempty"`
> -	F_Int64Required   *int64   `protobuf:"varint,12,req,name=F_Int64_required,json=FInt64Required" json:"F_Int64_required,omitempty"`
> -	F_Fixed32Required *uint32  `protobuf:"fixed32,13,req,name=F_Fixed32_required,json=FFixed32Required" json:"F_Fixed32_required,omitempty"`
> -	F_Fixed64Required *uint64  `protobuf:"fixed64,14,req,name=F_Fixed64_required,json=FFixed64Required" json:"F_Fixed64_required,omitempty"`
> -	F_Uint32Required  *uint32  `protobuf:"varint,15,req,name=F_Uint32_required,json=FUint32Required" json:"F_Uint32_required,omitempty"`
> -	F_Uint64Required  *uint64  `protobuf:"varint,16,req,name=F_Uint64_required,json=FUint64Required" json:"F_Uint64_required,omitempty"`
> -	F_FloatRequired   *float32 `protobuf:"fixed32,17,req,name=F_Float_required,json=FFloatRequired" json:"F_Float_required,omitempty"`
> -	F_DoubleRequired  *float64 `protobuf:"fixed64,18,req,name=F_Double_required,json=FDoubleRequired" json:"F_Double_required,omitempty"`
> -	F_StringRequired  *string  `protobuf:"bytes,19,req,name=F_String_required,json=FStringRequired" json:"F_String_required,omitempty"`
> -	F_BytesRequired   []byte   `protobuf:"bytes,101,req,name=F_Bytes_required,json=FBytesRequired" json:"F_Bytes_required,omitempty"`
> -	F_Sint32Required  *int32   `protobuf:"zigzag32,102,req,name=F_Sint32_required,json=FSint32Required" json:"F_Sint32_required,omitempty"`
> -	F_Sint64Required  *int64   `protobuf:"zigzag64,103,req,name=F_Sint64_required,json=FSint64Required" json:"F_Sint64_required,omitempty"`
> -	// Repeated fields of all basic types
> -	F_BoolRepeated    []bool    `protobuf:"varint,20,rep,name=F_Bool_repeated,json=FBoolRepeated" json:"F_Bool_repeated,omitempty"`
> -	F_Int32Repeated   []int32   `protobuf:"varint,21,rep,name=F_Int32_repeated,json=FInt32Repeated" json:"F_Int32_repeated,omitempty"`
> -	F_Int64Repeated   []int64   `protobuf:"varint,22,rep,name=F_Int64_repeated,json=FInt64Repeated" json:"F_Int64_repeated,omitempty"`
> -	F_Fixed32Repeated []uint32  `protobuf:"fixed32,23,rep,name=F_Fixed32_repeated,json=FFixed32Repeated" json:"F_Fixed32_repeated,omitempty"`
> -	F_Fixed64Repeated []uint64  `protobuf:"fixed64,24,rep,name=F_Fixed64_repeated,json=FFixed64Repeated" json:"F_Fixed64_repeated,omitempty"`
> -	F_Uint32Repeated  []uint32  `protobuf:"varint,25,rep,name=F_Uint32_repeated,json=FUint32Repeated" json:"F_Uint32_repeated,omitempty"`
> -	F_Uint64Repeated  []uint64  `protobuf:"varint,26,rep,name=F_Uint64_repeated,json=FUint64Repeated" json:"F_Uint64_repeated,omitempty"`
> -	F_FloatRepeated   []float32 `protobuf:"fixed32,27,rep,name=F_Float_repeated,json=FFloatRepeated" json:"F_Float_repeated,omitempty"`
> -	F_DoubleRepeated  []float64 `protobuf:"fixed64,28,rep,name=F_Double_repeated,json=FDoubleRepeated" json:"F_Double_repeated,omitempty"`
> -	F_StringRepeated  []string  `protobuf:"bytes,29,rep,name=F_String_repeated,json=FStringRepeated" json:"F_String_repeated,omitempty"`
> -	F_BytesRepeated   [][]byte  `protobuf:"bytes,201,rep,name=F_Bytes_repeated,json=FBytesRepeated" json:"F_Bytes_repeated,omitempty"`
> -	F_Sint32Repeated  []int32   `protobuf:"zigzag32,202,rep,name=F_Sint32_repeated,json=FSint32Repeated" json:"F_Sint32_repeated,omitempty"`
> -	F_Sint64Repeated  []int64   `protobuf:"zigzag64,203,rep,name=F_Sint64_repeated,json=FSint64Repeated" json:"F_Sint64_repeated,omitempty"`
> -	// Optional fields of all basic types
> -	F_BoolOptional    *bool    `protobuf:"varint,30,opt,name=F_Bool_optional,json=FBoolOptional" json:"F_Bool_optional,omitempty"`
> -	F_Int32Optional   *int32   `protobuf:"varint,31,opt,name=F_Int32_optional,json=FInt32Optional" json:"F_Int32_optional,omitempty"`
> -	F_Int64Optional   *int64   `protobuf:"varint,32,opt,name=F_Int64_optional,json=FInt64Optional" json:"F_Int64_optional,omitempty"`
> -	F_Fixed32Optional *uint32  `protobuf:"fixed32,33,opt,name=F_Fixed32_optional,json=FFixed32Optional" json:"F_Fixed32_optional,omitempty"`
> -	F_Fixed64Optional *uint64  `protobuf:"fixed64,34,opt,name=F_Fixed64_optional,json=FFixed64Optional" json:"F_Fixed64_optional,omitempty"`
> -	F_Uint32Optional  *uint32  `protobuf:"varint,35,opt,name=F_Uint32_optional,json=FUint32Optional" json:"F_Uint32_optional,omitempty"`
> -	F_Uint64Optional  *uint64  `protobuf:"varint,36,opt,name=F_Uint64_optional,json=FUint64Optional" json:"F_Uint64_optional,omitempty"`
> -	F_FloatOptional   *float32 `protobuf:"fixed32,37,opt,name=F_Float_optional,json=FFloatOptional" json:"F_Float_optional,omitempty"`
> -	F_DoubleOptional  *float64 `protobuf:"fixed64,38,opt,name=F_Double_optional,json=FDoubleOptional" json:"F_Double_optional,omitempty"`
> -	F_StringOptional  *string  `protobuf:"bytes,39,opt,name=F_String_optional,json=FStringOptional" json:"F_String_optional,omitempty"`
> -	F_BytesOptional   []byte   `protobuf:"bytes,301,opt,name=F_Bytes_optional,json=FBytesOptional" json:"F_Bytes_optional,omitempty"`
> -	F_Sint32Optional  *int32   `protobuf:"zigzag32,302,opt,name=F_Sint32_optional,json=FSint32Optional" json:"F_Sint32_optional,omitempty"`
> -	F_Sint64Optional  *int64   `protobuf:"zigzag64,303,opt,name=F_Sint64_optional,json=FSint64Optional" json:"F_Sint64_optional,omitempty"`
> -	// Default-valued fields of all basic types
> -	F_BoolDefaulted    *bool    `protobuf:"varint,40,opt,name=F_Bool_defaulted,json=FBoolDefaulted,def=1" json:"F_Bool_defaulted,omitempty"`
> -	F_Int32Defaulted   *int32   `protobuf:"varint,41,opt,name=F_Int32_defaulted,json=FInt32Defaulted,def=32" json:"F_Int32_defaulted,omitempty"`
> -	F_Int64Defaulted   *int64   `protobuf:"varint,42,opt,name=F_Int64_defaulted,json=FInt64Defaulted,def=64" json:"F_Int64_defaulted,omitempty"`
> -	F_Fixed32Defaulted *uint32  `protobuf:"fixed32,43,opt,name=F_Fixed32_defaulted,json=FFixed32Defaulted,def=320" json:"F_Fixed32_defaulted,omitempty"`
> -	F_Fixed64Defaulted *uint64  `protobuf:"fixed64,44,opt,name=F_Fixed64_defaulted,json=FFixed64Defaulted,def=640" json:"F_Fixed64_defaulted,omitempty"`
> -	F_Uint32Defaulted  *uint32  `protobuf:"varint,45,opt,name=F_Uint32_defaulted,json=FUint32Defaulted,def=3200" json:"F_Uint32_defaulted,omitempty"`
> -	F_Uint64Defaulted  *uint64  `protobuf:"varint,46,opt,name=F_Uint64_defaulted,json=FUint64Defaulted,def=6400" json:"F_Uint64_defaulted,omitempty"`
> -	F_FloatDefaulted   *float32 `protobuf:"fixed32,47,opt,name=F_Float_defaulted,json=FFloatDefaulted,def=314159" json:"F_Float_defaulted,omitempty"`
> -	F_DoubleDefaulted  *float64 `protobuf:"fixed64,48,opt,name=F_Double_defaulted,json=FDoubleDefaulted,def=271828" json:"F_Double_defaulted,omitempty"`
> -	F_StringDefaulted  *string  `protobuf:"bytes,49,opt,name=F_String_defaulted,json=FStringDefaulted,def=hello, \"world!\"\n" json:"F_String_defaulted,omitempty"`
> -	F_BytesDefaulted   []byte   `protobuf:"bytes,401,opt,name=F_Bytes_defaulted,json=FBytesDefaulted,def=Bignose" json:"F_Bytes_defaulted,omitempty"`
> -	F_Sint32Defaulted  *int32   `protobuf:"zigzag32,402,opt,name=F_Sint32_defaulted,json=FSint32Defaulted,def=-32" json:"F_Sint32_defaulted,omitempty"`
> -	F_Sint64Defaulted  *int64   `protobuf:"zigzag64,403,opt,name=F_Sint64_defaulted,json=FSint64Defaulted,def=-64" json:"F_Sint64_defaulted,omitempty"`
> -	// Packed repeated fields (no string or bytes).
> -	F_BoolRepeatedPacked    []bool                  `protobuf:"varint,50,rep,packed,name=F_Bool_repeated_packed,json=FBoolRepeatedPacked" json:"F_Bool_repeated_packed,omitempty"`
> -	F_Int32RepeatedPacked   []int32                 `protobuf:"varint,51,rep,packed,name=F_Int32_repeated_packed,json=FInt32RepeatedPacked" json:"F_Int32_repeated_packed,omitempty"`
> -	F_Int64RepeatedPacked   []int64                 `protobuf:"varint,52,rep,packed,name=F_Int64_repeated_packed,json=FInt64RepeatedPacked" json:"F_Int64_repeated_packed,omitempty"`
> -	F_Fixed32RepeatedPacked []uint32                `protobuf:"fixed32,53,rep,packed,name=F_Fixed32_repeated_packed,json=FFixed32RepeatedPacked" json:"F_Fixed32_repeated_packed,omitempty"`
> -	F_Fixed64RepeatedPacked []uint64                `protobuf:"fixed64,54,rep,packed,name=F_Fixed64_repeated_packed,json=FFixed64RepeatedPacked" json:"F_Fixed64_repeated_packed,omitempty"`
> -	F_Uint32RepeatedPacked  []uint32                `protobuf:"varint,55,rep,packed,name=F_Uint32_repeated_packed,json=FUint32RepeatedPacked" json:"F_Uint32_repeated_packed,omitempty"`
> -	F_Uint64RepeatedPacked  []uint64                `protobuf:"varint,56,rep,packed,name=F_Uint64_repeated_packed,json=FUint64RepeatedPacked" json:"F_Uint64_repeated_packed,omitempty"`
> -	F_FloatRepeatedPacked   []float32               `protobuf:"fixed32,57,rep,packed,name=F_Float_repeated_packed,json=FFloatRepeatedPacked" json:"F_Float_repeated_packed,omitempty"`
> -	F_DoubleRepeatedPacked  []float64               `protobuf:"fixed64,58,rep,packed,name=F_Double_repeated_packed,json=FDoubleRepeatedPacked" json:"F_Double_repeated_packed,omitempty"`
> -	F_Sint32RepeatedPacked  []int32                 `protobuf:"zigzag32,502,rep,packed,name=F_Sint32_repeated_packed,json=FSint32RepeatedPacked" json:"F_Sint32_repeated_packed,omitempty"`
> -	F_Sint64RepeatedPacked  []int64                 `protobuf:"zigzag64,503,rep,packed,name=F_Sint64_repeated_packed,json=FSint64RepeatedPacked" json:"F_Sint64_repeated_packed,omitempty"`
> -	Requiredgroup           *GoTest_RequiredGroup   `protobuf:"group,70,req,name=RequiredGroup,json=requiredgroup" json:"requiredgroup,omitempty"`
> -	Repeatedgroup           []*GoTest_RepeatedGroup `protobuf:"group,80,rep,name=RepeatedGroup,json=repeatedgroup" json:"repeatedgroup,omitempty"`
> -	Optionalgroup           *GoTest_OptionalGroup   `protobuf:"group,90,opt,name=OptionalGroup,json=optionalgroup" json:"optionalgroup,omitempty"`
> -	XXX_unrecognized        []byte                  `json:"-"`
> -}
> -
> -func (m *GoTest) Reset()                    { *m = GoTest{} }
> -func (m *GoTest) String() string            { return proto.CompactTextString(m) }
> -func (*GoTest) ProtoMessage()               {}
> -func (*GoTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
> -
> -const Default_GoTest_F_BoolDefaulted bool = true
> -const Default_GoTest_F_Int32Defaulted int32 = 32
> -const Default_GoTest_F_Int64Defaulted int64 = 64
> -const Default_GoTest_F_Fixed32Defaulted uint32 = 320
> -const Default_GoTest_F_Fixed64Defaulted uint64 = 640
> -const Default_GoTest_F_Uint32Defaulted uint32 = 3200
> -const Default_GoTest_F_Uint64Defaulted uint64 = 6400
> -const Default_GoTest_F_FloatDefaulted float32 = 314159
> -const Default_GoTest_F_DoubleDefaulted float64 = 271828
> -const Default_GoTest_F_StringDefaulted string = "hello, \"world!\"\n"
> -
> -var Default_GoTest_F_BytesDefaulted []byte = []byte("Bignose")
> -
> -const Default_GoTest_F_Sint32Defaulted int32 = -32
> -const Default_GoTest_F_Sint64Defaulted int64 = -64
> -
> -func (m *GoTest) GetKind() GoTest_KIND {
> -	if m != nil && m.Kind != nil {
> -		return *m.Kind
> -	}
> -	return GoTest_VOID
> -}
> -
> -func (m *GoTest) GetTable() string {
> -	if m != nil && m.Table != nil {
> -		return *m.Table
> -	}
> -	return ""
> -}
> -
> -func (m *GoTest) GetParam() int32 {
> -	if m != nil && m.Param != nil {
> -		return *m.Param
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetRequiredField() *GoTestField {
> -	if m != nil {
> -		return m.RequiredField
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetRepeatedField() []*GoTestField {
> -	if m != nil {
> -		return m.RepeatedField
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetOptionalField() *GoTestField {
> -	if m != nil {
> -		return m.OptionalField
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_BoolRequired() bool {
> -	if m != nil && m.F_BoolRequired != nil {
> -		return *m.F_BoolRequired
> -	}
> -	return false
> -}
> -
> -func (m *GoTest) GetF_Int32Required() int32 {
> -	if m != nil && m.F_Int32Required != nil {
> -		return *m.F_Int32Required
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Int64Required() int64 {
> -	if m != nil && m.F_Int64Required != nil {
> -		return *m.F_Int64Required
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Fixed32Required() uint32 {
> -	if m != nil && m.F_Fixed32Required != nil {
> -		return *m.F_Fixed32Required
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Fixed64Required() uint64 {
> -	if m != nil && m.F_Fixed64Required != nil {
> -		return *m.F_Fixed64Required
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Uint32Required() uint32 {
> -	if m != nil && m.F_Uint32Required != nil {
> -		return *m.F_Uint32Required
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Uint64Required() uint64 {
> -	if m != nil && m.F_Uint64Required != nil {
> -		return *m.F_Uint64Required
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_FloatRequired() float32 {
> -	if m != nil && m.F_FloatRequired != nil {
> -		return *m.F_FloatRequired
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_DoubleRequired() float64 {
> -	if m != nil && m.F_DoubleRequired != nil {
> -		return *m.F_DoubleRequired
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_StringRequired() string {
> -	if m != nil && m.F_StringRequired != nil {
> -		return *m.F_StringRequired
> -	}
> -	return ""
> -}
> -
> -func (m *GoTest) GetF_BytesRequired() []byte {
> -	if m != nil {
> -		return m.F_BytesRequired
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Sint32Required() int32 {
> -	if m != nil && m.F_Sint32Required != nil {
> -		return *m.F_Sint32Required
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Sint64Required() int64 {
> -	if m != nil && m.F_Sint64Required != nil {
> -		return *m.F_Sint64Required
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_BoolRepeated() []bool {
> -	if m != nil {
> -		return m.F_BoolRepeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Int32Repeated() []int32 {
> -	if m != nil {
> -		return m.F_Int32Repeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Int64Repeated() []int64 {
> -	if m != nil {
> -		return m.F_Int64Repeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Fixed32Repeated() []uint32 {
> -	if m != nil {
> -		return m.F_Fixed32Repeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Fixed64Repeated() []uint64 {
> -	if m != nil {
> -		return m.F_Fixed64Repeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Uint32Repeated() []uint32 {
> -	if m != nil {
> -		return m.F_Uint32Repeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Uint64Repeated() []uint64 {
> -	if m != nil {
> -		return m.F_Uint64Repeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_FloatRepeated() []float32 {
> -	if m != nil {
> -		return m.F_FloatRepeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_DoubleRepeated() []float64 {
> -	if m != nil {
> -		return m.F_DoubleRepeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_StringRepeated() []string {
> -	if m != nil {
> -		return m.F_StringRepeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_BytesRepeated() [][]byte {
> -	if m != nil {
> -		return m.F_BytesRepeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Sint32Repeated() []int32 {
> -	if m != nil {
> -		return m.F_Sint32Repeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Sint64Repeated() []int64 {
> -	if m != nil {
> -		return m.F_Sint64Repeated
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_BoolOptional() bool {
> -	if m != nil && m.F_BoolOptional != nil {
> -		return *m.F_BoolOptional
> -	}
> -	return false
> -}
> -
> -func (m *GoTest) GetF_Int32Optional() int32 {
> -	if m != nil && m.F_Int32Optional != nil {
> -		return *m.F_Int32Optional
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Int64Optional() int64 {
> -	if m != nil && m.F_Int64Optional != nil {
> -		return *m.F_Int64Optional
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Fixed32Optional() uint32 {
> -	if m != nil && m.F_Fixed32Optional != nil {
> -		return *m.F_Fixed32Optional
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Fixed64Optional() uint64 {
> -	if m != nil && m.F_Fixed64Optional != nil {
> -		return *m.F_Fixed64Optional
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Uint32Optional() uint32 {
> -	if m != nil && m.F_Uint32Optional != nil {
> -		return *m.F_Uint32Optional
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Uint64Optional() uint64 {
> -	if m != nil && m.F_Uint64Optional != nil {
> -		return *m.F_Uint64Optional
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_FloatOptional() float32 {
> -	if m != nil && m.F_FloatOptional != nil {
> -		return *m.F_FloatOptional
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_DoubleOptional() float64 {
> -	if m != nil && m.F_DoubleOptional != nil {
> -		return *m.F_DoubleOptional
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_StringOptional() string {
> -	if m != nil && m.F_StringOptional != nil {
> -		return *m.F_StringOptional
> -	}
> -	return ""
> -}
> -
> -func (m *GoTest) GetF_BytesOptional() []byte {
> -	if m != nil {
> -		return m.F_BytesOptional
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Sint32Optional() int32 {
> -	if m != nil && m.F_Sint32Optional != nil {
> -		return *m.F_Sint32Optional
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_Sint64Optional() int64 {
> -	if m != nil && m.F_Sint64Optional != nil {
> -		return *m.F_Sint64Optional
> -	}
> -	return 0
> -}
> -
> -func (m *GoTest) GetF_BoolDefaulted() bool {
> -	if m != nil && m.F_BoolDefaulted != nil {
> -		return *m.F_BoolDefaulted
> -	}
> -	return Default_GoTest_F_BoolDefaulted
> -}
> -
> -func (m *GoTest) GetF_Int32Defaulted() int32 {
> -	if m != nil && m.F_Int32Defaulted != nil {
> -		return *m.F_Int32Defaulted
> -	}
> -	return Default_GoTest_F_Int32Defaulted
> -}
> -
> -func (m *GoTest) GetF_Int64Defaulted() int64 {
> -	if m != nil && m.F_Int64Defaulted != nil {
> -		return *m.F_Int64Defaulted
> -	}
> -	return Default_GoTest_F_Int64Defaulted
> -}
> -
> -func (m *GoTest) GetF_Fixed32Defaulted() uint32 {
> -	if m != nil && m.F_Fixed32Defaulted != nil {
> -		return *m.F_Fixed32Defaulted
> -	}
> -	return Default_GoTest_F_Fixed32Defaulted
> -}
> -
> -func (m *GoTest) GetF_Fixed64Defaulted() uint64 {
> -	if m != nil && m.F_Fixed64Defaulted != nil {
> -		return *m.F_Fixed64Defaulted
> -	}
> -	return Default_GoTest_F_Fixed64Defaulted
> -}
> -
> -func (m *GoTest) GetF_Uint32Defaulted() uint32 {
> -	if m != nil && m.F_Uint32Defaulted != nil {
> -		return *m.F_Uint32Defaulted
> -	}
> -	return Default_GoTest_F_Uint32Defaulted
> -}
> -
> -func (m *GoTest) GetF_Uint64Defaulted() uint64 {
> -	if m != nil && m.F_Uint64Defaulted != nil {
> -		return *m.F_Uint64Defaulted
> -	}
> -	return Default_GoTest_F_Uint64Defaulted
> -}
> -
> -func (m *GoTest) GetF_FloatDefaulted() float32 {
> -	if m != nil && m.F_FloatDefaulted != nil {
> -		return *m.F_FloatDefaulted
> -	}
> -	return Default_GoTest_F_FloatDefaulted
> -}
> -
> -func (m *GoTest) GetF_DoubleDefaulted() float64 {
> -	if m != nil && m.F_DoubleDefaulted != nil {
> -		return *m.F_DoubleDefaulted
> -	}
> -	return Default_GoTest_F_DoubleDefaulted
> -}
> -
> -func (m *GoTest) GetF_StringDefaulted() string {
> -	if m != nil && m.F_StringDefaulted != nil {
> -		return *m.F_StringDefaulted
> -	}
> -	return Default_GoTest_F_StringDefaulted
> -}
> -
> -func (m *GoTest) GetF_BytesDefaulted() []byte {
> -	if m != nil && m.F_BytesDefaulted != nil {
> -		return m.F_BytesDefaulted
> -	}
> -	return append([]byte(nil), Default_GoTest_F_BytesDefaulted...)
> -}
> -
> -func (m *GoTest) GetF_Sint32Defaulted() int32 {
> -	if m != nil && m.F_Sint32Defaulted != nil {
> -		return *m.F_Sint32Defaulted
> -	}
> -	return Default_GoTest_F_Sint32Defaulted
> -}
> -
> -func (m *GoTest) GetF_Sint64Defaulted() int64 {
> -	if m != nil && m.F_Sint64Defaulted != nil {
> -		return *m.F_Sint64Defaulted
> -	}
> -	return Default_GoTest_F_Sint64Defaulted
> -}
> -
> -func (m *GoTest) GetF_BoolRepeatedPacked() []bool {
> -	if m != nil {
> -		return m.F_BoolRepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Int32RepeatedPacked() []int32 {
> -	if m != nil {
> -		return m.F_Int32RepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Int64RepeatedPacked() []int64 {
> -	if m != nil {
> -		return m.F_Int64RepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Fixed32RepeatedPacked() []uint32 {
> -	if m != nil {
> -		return m.F_Fixed32RepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Fixed64RepeatedPacked() []uint64 {
> -	if m != nil {
> -		return m.F_Fixed64RepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Uint32RepeatedPacked() []uint32 {
> -	if m != nil {
> -		return m.F_Uint32RepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Uint64RepeatedPacked() []uint64 {
> -	if m != nil {
> -		return m.F_Uint64RepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_FloatRepeatedPacked() []float32 {
> -	if m != nil {
> -		return m.F_FloatRepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_DoubleRepeatedPacked() []float64 {
> -	if m != nil {
> -		return m.F_DoubleRepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Sint32RepeatedPacked() []int32 {
> -	if m != nil {
> -		return m.F_Sint32RepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetF_Sint64RepeatedPacked() []int64 {
> -	if m != nil {
> -		return m.F_Sint64RepeatedPacked
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetRequiredgroup() *GoTest_RequiredGroup {
> -	if m != nil {
> -		return m.Requiredgroup
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetRepeatedgroup() []*GoTest_RepeatedGroup {
> -	if m != nil {
> -		return m.Repeatedgroup
> -	}
> -	return nil
> -}
> -
> -func (m *GoTest) GetOptionalgroup() *GoTest_OptionalGroup {
> -	if m != nil {
> -		return m.Optionalgroup
> -	}
> -	return nil
> -}
> -
> -// Required, repeated, and optional groups.
> -type GoTest_RequiredGroup struct {
> -	RequiredField    *string `protobuf:"bytes,71,req,name=RequiredField" json:"RequiredField,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *GoTest_RequiredGroup) Reset()                    { *m = GoTest_RequiredGroup{} }
> -func (m *GoTest_RequiredGroup) String() string            { return proto.CompactTextString(m) }
> -func (*GoTest_RequiredGroup) ProtoMessage()               {}
> -func (*GoTest_RequiredGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
> -
> -func (m *GoTest_RequiredGroup) GetRequiredField() string {
> -	if m != nil && m.RequiredField != nil {
> -		return *m.RequiredField
> -	}
> -	return ""
> -}
> -
> -type GoTest_RepeatedGroup struct {
> -	RequiredField    *string `protobuf:"bytes,81,req,name=RequiredField" json:"RequiredField,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *GoTest_RepeatedGroup) Reset()                    { *m = GoTest_RepeatedGroup{} }
> -func (m *GoTest_RepeatedGroup) String() string            { return proto.CompactTextString(m) }
> -func (*GoTest_RepeatedGroup) ProtoMessage()               {}
> -func (*GoTest_RepeatedGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} }
> -
> -func (m *GoTest_RepeatedGroup) GetRequiredField() string {
> -	if m != nil && m.RequiredField != nil {
> -		return *m.RequiredField
> -	}
> -	return ""
> -}
> -
> -type GoTest_OptionalGroup struct {
> -	RequiredField    *string `protobuf:"bytes,91,req,name=RequiredField" json:"RequiredField,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *GoTest_OptionalGroup) Reset()                    { *m = GoTest_OptionalGroup{} }
> -func (m *GoTest_OptionalGroup) String() string            { return proto.CompactTextString(m) }
> -func (*GoTest_OptionalGroup) ProtoMessage()               {}
> -func (*GoTest_OptionalGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 2} }
> -
> -func (m *GoTest_OptionalGroup) GetRequiredField() string {
> -	if m != nil && m.RequiredField != nil {
> -		return *m.RequiredField
> -	}
> -	return ""
> -}
> -
> -// For testing a group containing a required field.
> -type GoTestRequiredGroupField struct {
> -	Group            *GoTestRequiredGroupField_Group `protobuf:"group,1,req,name=Group,json=group" json:"group,omitempty"`
> -	XXX_unrecognized []byte                          `json:"-"`
> -}
> -
> -func (m *GoTestRequiredGroupField) Reset()                    { *m = GoTestRequiredGroupField{} }
> -func (m *GoTestRequiredGroupField) String() string            { return proto.CompactTextString(m) }
> -func (*GoTestRequiredGroupField) ProtoMessage()               {}
> -func (*GoTestRequiredGroupField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
> -
> -func (m *GoTestRequiredGroupField) GetGroup() *GoTestRequiredGroupField_Group {
> -	if m != nil {
> -		return m.Group
> -	}
> -	return nil
> -}
> -
> -type GoTestRequiredGroupField_Group struct {
> -	Field            *int32 `protobuf:"varint,2,req,name=Field" json:"Field,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *GoTestRequiredGroupField_Group) Reset()         { *m = GoTestRequiredGroupField_Group{} }
> -func (m *GoTestRequiredGroupField_Group) String() string { return proto.CompactTextString(m) }
> -func (*GoTestRequiredGroupField_Group) ProtoMessage()    {}
> -func (*GoTestRequiredGroupField_Group) Descriptor() ([]byte, []int) {
> -	return fileDescriptor0, []int{3, 0}
> -}
> -
> -func (m *GoTestRequiredGroupField_Group) GetField() int32 {
> -	if m != nil && m.Field != nil {
> -		return *m.Field
> -	}
> -	return 0
> -}
> -
> -// For testing skipping of unrecognized fields.
> -// Numbers are all big, larger than tag numbers in GoTestField,
> -// the message used in the corresponding test.
> -type GoSkipTest struct {
> -	SkipInt32        *int32                `protobuf:"varint,11,req,name=skip_int32,json=skipInt32" json:"skip_int32,omitempty"`
> -	SkipFixed32      *uint32               `protobuf:"fixed32,12,req,name=skip_fixed32,json=skipFixed32" json:"skip_fixed32,omitempty"`
> -	SkipFixed64      *uint64               `protobuf:"fixed64,13,req,name=skip_fixed64,json=skipFixed64" json:"skip_fixed64,omitempty"`
> -	SkipString       *string               `protobuf:"bytes,14,req,name=skip_string,json=skipString" json:"skip_string,omitempty"`
> -	Skipgroup        *GoSkipTest_SkipGroup `protobuf:"group,15,req,name=SkipGroup,json=skipgroup" json:"skipgroup,omitempty"`
> -	XXX_unrecognized []byte                `json:"-"`
> -}
> -
> -func (m *GoSkipTest) Reset()                    { *m = GoSkipTest{} }
> -func (m *GoSkipTest) String() string            { return proto.CompactTextString(m) }
> -func (*GoSkipTest) ProtoMessage()               {}
> -func (*GoSkipTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
> -
> -func (m *GoSkipTest) GetSkipInt32() int32 {
> -	if m != nil && m.SkipInt32 != nil {
> -		return *m.SkipInt32
> -	}
> -	return 0
> -}
> -
> -func (m *GoSkipTest) GetSkipFixed32() uint32 {
> -	if m != nil && m.SkipFixed32 != nil {
> -		return *m.SkipFixed32
> -	}
> -	return 0
> -}
> -
> -func (m *GoSkipTest) GetSkipFixed64() uint64 {
> -	if m != nil && m.SkipFixed64 != nil {
> -		return *m.SkipFixed64
> -	}
> -	return 0
> -}
> -
> -func (m *GoSkipTest) GetSkipString() string {
> -	if m != nil && m.SkipString != nil {
> -		return *m.SkipString
> -	}
> -	return ""
> -}
> -
> -func (m *GoSkipTest) GetSkipgroup() *GoSkipTest_SkipGroup {
> -	if m != nil {
> -		return m.Skipgroup
> -	}
> -	return nil
> -}
> -
> -type GoSkipTest_SkipGroup struct {
> -	GroupInt32       *int32  `protobuf:"varint,16,req,name=group_int32,json=groupInt32" json:"group_int32,omitempty"`
> -	GroupString      *string `protobuf:"bytes,17,req,name=group_string,json=groupString" json:"group_string,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *GoSkipTest_SkipGroup) Reset()                    { *m = GoSkipTest_SkipGroup{} }
> -func (m *GoSkipTest_SkipGroup) String() string            { return proto.CompactTextString(m) }
> -func (*GoSkipTest_SkipGroup) ProtoMessage()               {}
> -func (*GoSkipTest_SkipGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} }
> -
> -func (m *GoSkipTest_SkipGroup) GetGroupInt32() int32 {
> -	if m != nil && m.GroupInt32 != nil {
> -		return *m.GroupInt32
> -	}
> -	return 0
> -}
> -
> -func (m *GoSkipTest_SkipGroup) GetGroupString() string {
> -	if m != nil && m.GroupString != nil {
> -		return *m.GroupString
> -	}
> -	return ""
> -}
> -
> -// For testing packed/non-packed decoder switching.
> -// A serialized instance of one should be deserializable as the other.
> -type NonPackedTest struct {
> -	A                []int32 `protobuf:"varint,1,rep,name=a" json:"a,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *NonPackedTest) Reset()                    { *m = NonPackedTest{} }
> -func (m *NonPackedTest) String() string            { return proto.CompactTextString(m) }
> -func (*NonPackedTest) ProtoMessage()               {}
> -func (*NonPackedTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
> -
> -func (m *NonPackedTest) GetA() []int32 {
> -	if m != nil {
> -		return m.A
> -	}
> -	return nil
> -}
> -
> -type PackedTest struct {
> -	B                []int32 `protobuf:"varint,1,rep,packed,name=b" json:"b,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *PackedTest) Reset()                    { *m = PackedTest{} }
> -func (m *PackedTest) String() string            { return proto.CompactTextString(m) }
> -func (*PackedTest) ProtoMessage()               {}
> -func (*PackedTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
> -
> -func (m *PackedTest) GetB() []int32 {
> -	if m != nil {
> -		return m.B
> -	}
> -	return nil
> -}
> -
> -type MaxTag struct {
> -	// Maximum possible tag number.
> -	LastField        *string `protobuf:"bytes,536870911,opt,name=last_field,json=lastField" json:"last_field,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *MaxTag) Reset()                    { *m = MaxTag{} }
> -func (m *MaxTag) String() string            { return proto.CompactTextString(m) }
> -func (*MaxTag) ProtoMessage()               {}
> -func (*MaxTag) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
> -
> -func (m *MaxTag) GetLastField() string {
> -	if m != nil && m.LastField != nil {
> -		return *m.LastField
> -	}
> -	return ""
> -}
> -
> -type OldMessage struct {
> -	Nested           *OldMessage_Nested `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"`
> -	Num              *int32             `protobuf:"varint,2,opt,name=num" json:"num,omitempty"`
> -	XXX_unrecognized []byte             `json:"-"`
> -}
> -
> -func (m *OldMessage) Reset()                    { *m = OldMessage{} }
> -func (m *OldMessage) String() string            { return proto.CompactTextString(m) }
> -func (*OldMessage) ProtoMessage()               {}
> -func (*OldMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
> -
> -func (m *OldMessage) GetNested() *OldMessage_Nested {
> -	if m != nil {
> -		return m.Nested
> -	}
> -	return nil
> -}
> -
> -func (m *OldMessage) GetNum() int32 {
> -	if m != nil && m.Num != nil {
> -		return *m.Num
> -	}
> -	return 0
> -}
> -
> -type OldMessage_Nested struct {
> -	Name             *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *OldMessage_Nested) Reset()                    { *m = OldMessage_Nested{} }
> -func (m *OldMessage_Nested) String() string            { return proto.CompactTextString(m) }
> -func (*OldMessage_Nested) ProtoMessage()               {}
> -func (*OldMessage_Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8, 0} }
> -
> -func (m *OldMessage_Nested) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -// NewMessage is wire compatible with OldMessage;
> -// imagine it as a future version.
> -type NewMessage struct {
> -	Nested *NewMessage_Nested `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"`
> -	// This is an int32 in OldMessage.
> -	Num              *int64 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *NewMessage) Reset()                    { *m = NewMessage{} }
> -func (m *NewMessage) String() string            { return proto.CompactTextString(m) }
> -func (*NewMessage) ProtoMessage()               {}
> -func (*NewMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
> -
> -func (m *NewMessage) GetNested() *NewMessage_Nested {
> -	if m != nil {
> -		return m.Nested
> -	}
> -	return nil
> -}
> -
> -func (m *NewMessage) GetNum() int64 {
> -	if m != nil && m.Num != nil {
> -		return *m.Num
> -	}
> -	return 0
> -}
> -
> -type NewMessage_Nested struct {
> -	Name             *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	FoodGroup        *string `protobuf:"bytes,2,opt,name=food_group,json=foodGroup" json:"food_group,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *NewMessage_Nested) Reset()                    { *m = NewMessage_Nested{} }
> -func (m *NewMessage_Nested) String() string            { return proto.CompactTextString(m) }
> -func (*NewMessage_Nested) ProtoMessage()               {}
> -func (*NewMessage_Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} }
> -
> -func (m *NewMessage_Nested) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *NewMessage_Nested) GetFoodGroup() string {
> -	if m != nil && m.FoodGroup != nil {
> -		return *m.FoodGroup
> -	}
> -	return ""
> -}
> -
> -type InnerMessage struct {
> -	Host             *string `protobuf:"bytes,1,req,name=host" json:"host,omitempty"`
> -	Port             *int32  `protobuf:"varint,2,opt,name=port,def=4000" json:"port,omitempty"`
> -	Connected        *bool   `protobuf:"varint,3,opt,name=connected" json:"connected,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *InnerMessage) Reset()                    { *m = InnerMessage{} }
> -func (m *InnerMessage) String() string            { return proto.CompactTextString(m) }
> -func (*InnerMessage) ProtoMessage()               {}
> -func (*InnerMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
> -
> -const Default_InnerMessage_Port int32 = 4000
> -
> -func (m *InnerMessage) GetHost() string {
> -	if m != nil && m.Host != nil {
> -		return *m.Host
> -	}
> -	return ""
> -}
> -
> -func (m *InnerMessage) GetPort() int32 {
> -	if m != nil && m.Port != nil {
> -		return *m.Port
> -	}
> -	return Default_InnerMessage_Port
> -}
> -
> -func (m *InnerMessage) GetConnected() bool {
> -	if m != nil && m.Connected != nil {
> -		return *m.Connected
> -	}
> -	return false
> -}
> -
> -type OtherMessage struct {
> -	Key                          *int64        `protobuf:"varint,1,opt,name=key" json:"key,omitempty"`
> -	Value                        []byte        `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
> -	Weight                       *float32      `protobuf:"fixed32,3,opt,name=weight" json:"weight,omitempty"`
> -	Inner                        *InnerMessage `protobuf:"bytes,4,opt,name=inner" json:"inner,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *OtherMessage) Reset()                    { *m = OtherMessage{} }
> -func (m *OtherMessage) String() string            { return proto.CompactTextString(m) }
> -func (*OtherMessage) ProtoMessage()               {}
> -func (*OtherMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
> -
> -var extRange_OtherMessage = []proto.ExtensionRange{
> -	{100, 536870911},
> -}
> -
> -func (*OtherMessage) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_OtherMessage
> -}
> -
> -func (m *OtherMessage) GetKey() int64 {
> -	if m != nil && m.Key != nil {
> -		return *m.Key
> -	}
> -	return 0
> -}
> -
> -func (m *OtherMessage) GetValue() []byte {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return nil
> -}
> -
> -func (m *OtherMessage) GetWeight() float32 {
> -	if m != nil && m.Weight != nil {
> -		return *m.Weight
> -	}
> -	return 0
> -}
> -
> -func (m *OtherMessage) GetInner() *InnerMessage {
> -	if m != nil {
> -		return m.Inner
> -	}
> -	return nil
> -}
> -
> -type RequiredInnerMessage struct {
> -	LeoFinallyWonAnOscar *InnerMessage `protobuf:"bytes,1,req,name=leo_finally_won_an_oscar,json=leoFinallyWonAnOscar" json:"leo_finally_won_an_oscar,omitempty"`
> -	XXX_unrecognized     []byte        `json:"-"`
> -}
> -
> -func (m *RequiredInnerMessage) Reset()                    { *m = RequiredInnerMessage{} }
> -func (m *RequiredInnerMessage) String() string            { return proto.CompactTextString(m) }
> -func (*RequiredInnerMessage) ProtoMessage()               {}
> -func (*RequiredInnerMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
> -
> -func (m *RequiredInnerMessage) GetLeoFinallyWonAnOscar() *InnerMessage {
> -	if m != nil {
> -		return m.LeoFinallyWonAnOscar
> -	}
> -	return nil
> -}
> -
> -type MyMessage struct {
> -	Count          *int32                `protobuf:"varint,1,req,name=count" json:"count,omitempty"`
> -	Name           *string               `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
> -	Quote          *string               `protobuf:"bytes,3,opt,name=quote" json:"quote,omitempty"`
> -	Pet            []string              `protobuf:"bytes,4,rep,name=pet" json:"pet,omitempty"`
> -	Inner          *InnerMessage         `protobuf:"bytes,5,opt,name=inner" json:"inner,omitempty"`
> -	Others         []*OtherMessage       `protobuf:"bytes,6,rep,name=others" json:"others,omitempty"`
> -	WeMustGoDeeper *RequiredInnerMessage `protobuf:"bytes,13,opt,name=we_must_go_deeper,json=weMustGoDeeper" json:"we_must_go_deeper,omitempty"`
> -	RepInner       []*InnerMessage       `protobuf:"bytes,12,rep,name=rep_inner,json=repInner" json:"rep_inner,omitempty"`
> -	Bikeshed       *MyMessage_Color      `protobuf:"varint,7,opt,name=bikeshed,enum=testdata.MyMessage_Color" json:"bikeshed,omitempty"`
> -	Somegroup      *MyMessage_SomeGroup  `protobuf:"group,8,opt,name=SomeGroup,json=somegroup" json:"somegroup,omitempty"`
> -	// This field becomes [][]byte in the generated code.
> -	RepBytes                     [][]byte `protobuf:"bytes,10,rep,name=rep_bytes,json=repBytes" json:"rep_bytes,omitempty"`
> -	Bigfloat                     *float64 `protobuf:"fixed64,11,opt,name=bigfloat" json:"bigfloat,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *MyMessage) Reset()                    { *m = MyMessage{} }
> -func (m *MyMessage) String() string            { return proto.CompactTextString(m) }
> -func (*MyMessage) ProtoMessage()               {}
> -func (*MyMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
> -
> -var extRange_MyMessage = []proto.ExtensionRange{
> -	{100, 536870911},
> -}
> -
> -func (*MyMessage) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_MyMessage
> -}
> -
> -func (m *MyMessage) GetCount() int32 {
> -	if m != nil && m.Count != nil {
> -		return *m.Count
> -	}
> -	return 0
> -}
> -
> -func (m *MyMessage) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *MyMessage) GetQuote() string {
> -	if m != nil && m.Quote != nil {
> -		return *m.Quote
> -	}
> -	return ""
> -}
> -
> -func (m *MyMessage) GetPet() []string {
> -	if m != nil {
> -		return m.Pet
> -	}
> -	return nil
> -}
> -
> -func (m *MyMessage) GetInner() *InnerMessage {
> -	if m != nil {
> -		return m.Inner
> -	}
> -	return nil
> -}
> -
> -func (m *MyMessage) GetOthers() []*OtherMessage {
> -	if m != nil {
> -		return m.Others
> -	}
> -	return nil
> -}
> -
> -func (m *MyMessage) GetWeMustGoDeeper() *RequiredInnerMessage {
> -	if m != nil {
> -		return m.WeMustGoDeeper
> -	}
> -	return nil
> -}
> -
> -func (m *MyMessage) GetRepInner() []*InnerMessage {
> -	if m != nil {
> -		return m.RepInner
> -	}
> -	return nil
> -}
> -
> -func (m *MyMessage) GetBikeshed() MyMessage_Color {
> -	if m != nil && m.Bikeshed != nil {
> -		return *m.Bikeshed
> -	}
> -	return MyMessage_RED
> -}
> -
> -func (m *MyMessage) GetSomegroup() *MyMessage_SomeGroup {
> -	if m != nil {
> -		return m.Somegroup
> -	}
> -	return nil
> -}
> -
> -func (m *MyMessage) GetRepBytes() [][]byte {
> -	if m != nil {
> -		return m.RepBytes
> -	}
> -	return nil
> -}
> -
> -func (m *MyMessage) GetBigfloat() float64 {
> -	if m != nil && m.Bigfloat != nil {
> -		return *m.Bigfloat
> -	}
> -	return 0
> -}
> -
> -type MyMessage_SomeGroup struct {
> -	GroupField       *int32 `protobuf:"varint,9,opt,name=group_field,json=groupField" json:"group_field,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *MyMessage_SomeGroup) Reset()                    { *m = MyMessage_SomeGroup{} }
> -func (m *MyMessage_SomeGroup) String() string            { return proto.CompactTextString(m) }
> -func (*MyMessage_SomeGroup) ProtoMessage()               {}
> -func (*MyMessage_SomeGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13, 0} }
> -
> -func (m *MyMessage_SomeGroup) GetGroupField() int32 {
> -	if m != nil && m.GroupField != nil {
> -		return *m.GroupField
> -	}
> -	return 0
> -}
> -
> -type Ext struct {
> -	Data             *string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *Ext) Reset()                    { *m = Ext{} }
> -func (m *Ext) String() string            { return proto.CompactTextString(m) }
> -func (*Ext) ProtoMessage()               {}
> -func (*Ext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
> -
> -func (m *Ext) GetData() string {
> -	if m != nil && m.Data != nil {
> -		return *m.Data
> -	}
> -	return ""
> -}
> -
> -var E_Ext_More = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessage)(nil),
> -	ExtensionType: (*Ext)(nil),
> -	Field:         103,
> -	Name:          "testdata.Ext.more",
> -	Tag:           "bytes,103,opt,name=more",
> -	Filename:      "test.proto",
> -}
> -
> -var E_Ext_Text = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessage)(nil),
> -	ExtensionType: (*string)(nil),
> -	Field:         104,
> -	Name:          "testdata.Ext.text",
> -	Tag:           "bytes,104,opt,name=text",
> -	Filename:      "test.proto",
> -}
> -
> -var E_Ext_Number = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessage)(nil),
> -	ExtensionType: (*int32)(nil),
> -	Field:         105,
> -	Name:          "testdata.Ext.number",
> -	Tag:           "varint,105,opt,name=number",
> -	Filename:      "test.proto",
> -}
> -
> -type ComplexExtension struct {
> -	First            *int32  `protobuf:"varint,1,opt,name=first" json:"first,omitempty"`
> -	Second           *int32  `protobuf:"varint,2,opt,name=second" json:"second,omitempty"`
> -	Third            []int32 `protobuf:"varint,3,rep,name=third" json:"third,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *ComplexExtension) Reset()                    { *m = ComplexExtension{} }
> -func (m *ComplexExtension) String() string            { return proto.CompactTextString(m) }
> -func (*ComplexExtension) ProtoMessage()               {}
> -func (*ComplexExtension) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
> -
> -func (m *ComplexExtension) GetFirst() int32 {
> -	if m != nil && m.First != nil {
> -		return *m.First
> -	}
> -	return 0
> -}
> -
> -func (m *ComplexExtension) GetSecond() int32 {
> -	if m != nil && m.Second != nil {
> -		return *m.Second
> -	}
> -	return 0
> -}
> -
> -func (m *ComplexExtension) GetThird() []int32 {
> -	if m != nil {
> -		return m.Third
> -	}
> -	return nil
> -}
> -
> -type DefaultsMessage struct {
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *DefaultsMessage) Reset()                    { *m = DefaultsMessage{} }
> -func (m *DefaultsMessage) String() string            { return proto.CompactTextString(m) }
> -func (*DefaultsMessage) ProtoMessage()               {}
> -func (*DefaultsMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
> -
> -var extRange_DefaultsMessage = []proto.ExtensionRange{
> -	{100, 536870911},
> -}
> -
> -func (*DefaultsMessage) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_DefaultsMessage
> -}
> -
> -type MyMessageSet struct {
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *MyMessageSet) Reset()                    { *m = MyMessageSet{} }
> -func (m *MyMessageSet) String() string            { return proto.CompactTextString(m) }
> -func (*MyMessageSet) ProtoMessage()               {}
> -func (*MyMessageSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
> -
> -func (m *MyMessageSet) Marshal() ([]byte, error) {
> -	return proto.MarshalMessageSet(&m.XXX_InternalExtensions)
> -}
> -func (m *MyMessageSet) Unmarshal(buf []byte) error {
> -	return proto.UnmarshalMessageSet(buf, &m.XXX_InternalExtensions)
> -}
> -func (m *MyMessageSet) MarshalJSON() ([]byte, error) {
> -	return proto.MarshalMessageSetJSON(&m.XXX_InternalExtensions)
> -}
> -func (m *MyMessageSet) UnmarshalJSON(buf []byte) error {
> -	return proto.UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions)
> -}
> -
> -// ensure MyMessageSet satisfies proto.Marshaler and proto.Unmarshaler
> -var _ proto.Marshaler = (*MyMessageSet)(nil)
> -var _ proto.Unmarshaler = (*MyMessageSet)(nil)
> -
> -var extRange_MyMessageSet = []proto.ExtensionRange{
> -	{100, 2147483646},
> -}
> -
> -func (*MyMessageSet) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_MyMessageSet
> -}
> -
> -type Empty struct {
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *Empty) Reset()                    { *m = Empty{} }
> -func (m *Empty) String() string            { return proto.CompactTextString(m) }
> -func (*Empty) ProtoMessage()               {}
> -func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
> -
> -type MessageList struct {
> -	Message          []*MessageList_Message `protobuf:"group,1,rep,name=Message,json=message" json:"message,omitempty"`
> -	XXX_unrecognized []byte                 `json:"-"`
> -}
> -
> -func (m *MessageList) Reset()                    { *m = MessageList{} }
> -func (m *MessageList) String() string            { return proto.CompactTextString(m) }
> -func (*MessageList) ProtoMessage()               {}
> -func (*MessageList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
> -
> -func (m *MessageList) GetMessage() []*MessageList_Message {
> -	if m != nil {
> -		return m.Message
> -	}
> -	return nil
> -}
> -
> -type MessageList_Message struct {
> -	Name             *string `protobuf:"bytes,2,req,name=name" json:"name,omitempty"`
> -	Count            *int32  `protobuf:"varint,3,req,name=count" json:"count,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *MessageList_Message) Reset()                    { *m = MessageList_Message{} }
> -func (m *MessageList_Message) String() string            { return proto.CompactTextString(m) }
> -func (*MessageList_Message) ProtoMessage()               {}
> -func (*MessageList_Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19, 0} }
> -
> -func (m *MessageList_Message) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *MessageList_Message) GetCount() int32 {
> -	if m != nil && m.Count != nil {
> -		return *m.Count
> -	}
> -	return 0
> -}
> -
> -type Strings struct {
> -	StringField      *string `protobuf:"bytes,1,opt,name=string_field,json=stringField" json:"string_field,omitempty"`
> -	BytesField       []byte  `protobuf:"bytes,2,opt,name=bytes_field,json=bytesField" json:"bytes_field,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *Strings) Reset()                    { *m = Strings{} }
> -func (m *Strings) String() string            { return proto.CompactTextString(m) }
> -func (*Strings) ProtoMessage()               {}
> -func (*Strings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
> -
> -func (m *Strings) GetStringField() string {
> -	if m != nil && m.StringField != nil {
> -		return *m.StringField
> -	}
> -	return ""
> -}
> -
> -func (m *Strings) GetBytesField() []byte {
> -	if m != nil {
> -		return m.BytesField
> -	}
> -	return nil
> -}
> -
> -type Defaults struct {
> -	// Default-valued fields of all basic types.
> -	// Same as GoTest, but copied here to make testing easier.
> -	F_Bool    *bool           `protobuf:"varint,1,opt,name=F_Bool,json=FBool,def=1" json:"F_Bool,omitempty"`
> -	F_Int32   *int32          `protobuf:"varint,2,opt,name=F_Int32,json=FInt32,def=32" json:"F_Int32,omitempty"`
> -	F_Int64   *int64          `protobuf:"varint,3,opt,name=F_Int64,json=FInt64,def=64" json:"F_Int64,omitempty"`
> -	F_Fixed32 *uint32         `protobuf:"fixed32,4,opt,name=F_Fixed32,json=FFixed32,def=320" json:"F_Fixed32,omitempty"`
> -	F_Fixed64 *uint64         `protobuf:"fixed64,5,opt,name=F_Fixed64,json=FFixed64,def=640" json:"F_Fixed64,omitempty"`
> -	F_Uint32  *uint32         `protobuf:"varint,6,opt,name=F_Uint32,json=FUint32,def=3200" json:"F_Uint32,omitempty"`
> -	F_Uint64  *uint64         `protobuf:"varint,7,opt,name=F_Uint64,json=FUint64,def=6400" json:"F_Uint64,omitempty"`
> -	F_Float   *float32        `protobuf:"fixed32,8,opt,name=F_Float,json=FFloat,def=314159" json:"F_Float,omitempty"`
> -	F_Double  *float64        `protobuf:"fixed64,9,opt,name=F_Double,json=FDouble,def=271828" json:"F_Double,omitempty"`
> -	F_String  *string         `protobuf:"bytes,10,opt,name=F_String,json=FString,def=hello, \"world!\"\n" json:"F_String,omitempty"`
> -	F_Bytes   []byte          `protobuf:"bytes,11,opt,name=F_Bytes,json=FBytes,def=Bignose" json:"F_Bytes,omitempty"`
> -	F_Sint32  *int32          `protobuf:"zigzag32,12,opt,name=F_Sint32,json=FSint32,def=-32" json:"F_Sint32,omitempty"`
> -	F_Sint64  *int64          `protobuf:"zigzag64,13,opt,name=F_Sint64,json=FSint64,def=-64" json:"F_Sint64,omitempty"`
> -	F_Enum    *Defaults_Color `protobuf:"varint,14,opt,name=F_Enum,json=FEnum,enum=testdata.Defaults_Color,def=1" json:"F_Enum,omitempty"`
> -	// More fields with crazy defaults.
> -	F_Pinf *float32 `protobuf:"fixed32,15,opt,name=F_Pinf,json=FPinf,def=inf" json:"F_Pinf,omitempty"`
> -	F_Ninf *float32 `protobuf:"fixed32,16,opt,name=F_Ninf,json=FNinf,def=-inf" json:"F_Ninf,omitempty"`
> -	F_Nan  *float32 `protobuf:"fixed32,17,opt,name=F_Nan,json=FNan,def=nan" json:"F_Nan,omitempty"`
> -	// Sub-message.
> -	Sub *SubDefaults `protobuf:"bytes,18,opt,name=sub" json:"sub,omitempty"`
> -	// Redundant but explicit defaults.
> -	StrZero          *string `protobuf:"bytes,19,opt,name=str_zero,json=strZero,def=" json:"str_zero,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *Defaults) Reset()                    { *m = Defaults{} }
> -func (m *Defaults) String() string            { return proto.CompactTextString(m) }
> -func (*Defaults) ProtoMessage()               {}
> -func (*Defaults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
> -
> -const Default_Defaults_F_Bool bool = true
> -const Default_Defaults_F_Int32 int32 = 32
> -const Default_Defaults_F_Int64 int64 = 64
> -const Default_Defaults_F_Fixed32 uint32 = 320
> -const Default_Defaults_F_Fixed64 uint64 = 640
> -const Default_Defaults_F_Uint32 uint32 = 3200
> -const Default_Defaults_F_Uint64 uint64 = 6400
> -const Default_Defaults_F_Float float32 = 314159
> -const Default_Defaults_F_Double float64 = 271828
> -const Default_Defaults_F_String string = "hello, \"world!\"\n"
> -
> -var Default_Defaults_F_Bytes []byte = []byte("Bignose")
> -
> -const Default_Defaults_F_Sint32 int32 = -32
> -const Default_Defaults_F_Sint64 int64 = -64
> -const Default_Defaults_F_Enum Defaults_Color = Defaults_GREEN
> -
> -var Default_Defaults_F_Pinf float32 = float32(math.Inf(1))
> -var Default_Defaults_F_Ninf float32 = float32(math.Inf(-1))
> -var Default_Defaults_F_Nan float32 = float32(math.NaN())
> -
> -func (m *Defaults) GetF_Bool() bool {
> -	if m != nil && m.F_Bool != nil {
> -		return *m.F_Bool
> -	}
> -	return Default_Defaults_F_Bool
> -}
> -
> -func (m *Defaults) GetF_Int32() int32 {
> -	if m != nil && m.F_Int32 != nil {
> -		return *m.F_Int32
> -	}
> -	return Default_Defaults_F_Int32
> -}
> -
> -func (m *Defaults) GetF_Int64() int64 {
> -	if m != nil && m.F_Int64 != nil {
> -		return *m.F_Int64
> -	}
> -	return Default_Defaults_F_Int64
> -}
> -
> -func (m *Defaults) GetF_Fixed32() uint32 {
> -	if m != nil && m.F_Fixed32 != nil {
> -		return *m.F_Fixed32
> -	}
> -	return Default_Defaults_F_Fixed32
> -}
> -
> -func (m *Defaults) GetF_Fixed64() uint64 {
> -	if m != nil && m.F_Fixed64 != nil {
> -		return *m.F_Fixed64
> -	}
> -	return Default_Defaults_F_Fixed64
> -}
> -
> -func (m *Defaults) GetF_Uint32() uint32 {
> -	if m != nil && m.F_Uint32 != nil {
> -		return *m.F_Uint32
> -	}
> -	return Default_Defaults_F_Uint32
> -}
> -
> -func (m *Defaults) GetF_Uint64() uint64 {
> -	if m != nil && m.F_Uint64 != nil {
> -		return *m.F_Uint64
> -	}
> -	return Default_Defaults_F_Uint64
> -}
> -
> -func (m *Defaults) GetF_Float() float32 {
> -	if m != nil && m.F_Float != nil {
> -		return *m.F_Float
> -	}
> -	return Default_Defaults_F_Float
> -}
> -
> -func (m *Defaults) GetF_Double() float64 {
> -	if m != nil && m.F_Double != nil {
> -		return *m.F_Double
> -	}
> -	return Default_Defaults_F_Double
> -}
> -
> -func (m *Defaults) GetF_String() string {
> -	if m != nil && m.F_String != nil {
> -		return *m.F_String
> -	}
> -	return Default_Defaults_F_String
> -}
> -
> -func (m *Defaults) GetF_Bytes() []byte {
> -	if m != nil && m.F_Bytes != nil {
> -		return m.F_Bytes
> -	}
> -	return append([]byte(nil), Default_Defaults_F_Bytes...)
> -}
> -
> -func (m *Defaults) GetF_Sint32() int32 {
> -	if m != nil && m.F_Sint32 != nil {
> -		return *m.F_Sint32
> -	}
> -	return Default_Defaults_F_Sint32
> -}
> -
> -func (m *Defaults) GetF_Sint64() int64 {
> -	if m != nil && m.F_Sint64 != nil {
> -		return *m.F_Sint64
> -	}
> -	return Default_Defaults_F_Sint64
> -}
> -
> -func (m *Defaults) GetF_Enum() Defaults_Color {
> -	if m != nil && m.F_Enum != nil {
> -		return *m.F_Enum
> -	}
> -	return Default_Defaults_F_Enum
> -}
> -
> -func (m *Defaults) GetF_Pinf() float32 {
> -	if m != nil && m.F_Pinf != nil {
> -		return *m.F_Pinf
> -	}
> -	return Default_Defaults_F_Pinf
> -}
> -
> -func (m *Defaults) GetF_Ninf() float32 {
> -	if m != nil && m.F_Ninf != nil {
> -		return *m.F_Ninf
> -	}
> -	return Default_Defaults_F_Ninf
> -}
> -
> -func (m *Defaults) GetF_Nan() float32 {
> -	if m != nil && m.F_Nan != nil {
> -		return *m.F_Nan
> -	}
> -	return Default_Defaults_F_Nan
> -}
> -
> -func (m *Defaults) GetSub() *SubDefaults {
> -	if m != nil {
> -		return m.Sub
> -	}
> -	return nil
> -}
> -
> -func (m *Defaults) GetStrZero() string {
> -	if m != nil && m.StrZero != nil {
> -		return *m.StrZero
> -	}
> -	return ""
> -}
> -
> -type SubDefaults struct {
> -	N                *int64 `protobuf:"varint,1,opt,name=n,def=7" json:"n,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *SubDefaults) Reset()                    { *m = SubDefaults{} }
> -func (m *SubDefaults) String() string            { return proto.CompactTextString(m) }
> -func (*SubDefaults) ProtoMessage()               {}
> -func (*SubDefaults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
> -
> -const Default_SubDefaults_N int64 = 7
> -
> -func (m *SubDefaults) GetN() int64 {
> -	if m != nil && m.N != nil {
> -		return *m.N
> -	}
> -	return Default_SubDefaults_N
> -}
> -
> -type RepeatedEnum struct {
> -	Color            []RepeatedEnum_Color `protobuf:"varint,1,rep,name=color,enum=testdata.RepeatedEnum_Color" json:"color,omitempty"`
> -	XXX_unrecognized []byte               `json:"-"`
> -}
> -
> -func (m *RepeatedEnum) Reset()                    { *m = RepeatedEnum{} }
> -func (m *RepeatedEnum) String() string            { return proto.CompactTextString(m) }
> -func (*RepeatedEnum) ProtoMessage()               {}
> -func (*RepeatedEnum) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
> -
> -func (m *RepeatedEnum) GetColor() []RepeatedEnum_Color {
> -	if m != nil {
> -		return m.Color
> -	}
> -	return nil
> -}
> -
> -type MoreRepeated struct {
> -	Bools            []bool   `protobuf:"varint,1,rep,name=bools" json:"bools,omitempty"`
> -	BoolsPacked      []bool   `protobuf:"varint,2,rep,packed,name=bools_packed,json=boolsPacked" json:"bools_packed,omitempty"`
> -	Ints             []int32  `protobuf:"varint,3,rep,name=ints" json:"ints,omitempty"`
> -	IntsPacked       []int32  `protobuf:"varint,4,rep,packed,name=ints_packed,json=intsPacked" json:"ints_packed,omitempty"`
> -	Int64SPacked     []int64  `protobuf:"varint,7,rep,packed,name=int64s_packed,json=int64sPacked" json:"int64s_packed,omitempty"`
> -	Strings          []string `protobuf:"bytes,5,rep,name=strings" json:"strings,omitempty"`
> -	Fixeds           []uint32 `protobuf:"fixed32,6,rep,name=fixeds" json:"fixeds,omitempty"`
> -	XXX_unrecognized []byte   `json:"-"`
> -}
> -
> -func (m *MoreRepeated) Reset()                    { *m = MoreRepeated{} }
> -func (m *MoreRepeated) String() string            { return proto.CompactTextString(m) }
> -func (*MoreRepeated) ProtoMessage()               {}
> -func (*MoreRepeated) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
> -
> -func (m *MoreRepeated) GetBools() []bool {
> -	if m != nil {
> -		return m.Bools
> -	}
> -	return nil
> -}
> -
> -func (m *MoreRepeated) GetBoolsPacked() []bool {
> -	if m != nil {
> -		return m.BoolsPacked
> -	}
> -	return nil
> -}
> -
> -func (m *MoreRepeated) GetInts() []int32 {
> -	if m != nil {
> -		return m.Ints
> -	}
> -	return nil
> -}
> -
> -func (m *MoreRepeated) GetIntsPacked() []int32 {
> -	if m != nil {
> -		return m.IntsPacked
> -	}
> -	return nil
> -}
> -
> -func (m *MoreRepeated) GetInt64SPacked() []int64 {
> -	if m != nil {
> -		return m.Int64SPacked
> -	}
> -	return nil
> -}
> -
> -func (m *MoreRepeated) GetStrings() []string {
> -	if m != nil {
> -		return m.Strings
> -	}
> -	return nil
> -}
> -
> -func (m *MoreRepeated) GetFixeds() []uint32 {
> -	if m != nil {
> -		return m.Fixeds
> -	}
> -	return nil
> -}
> -
> -type GroupOld struct {
> -	G                *GroupOld_G `protobuf:"group,101,opt,name=G,json=g" json:"g,omitempty"`
> -	XXX_unrecognized []byte      `json:"-"`
> -}
> -
> -func (m *GroupOld) Reset()                    { *m = GroupOld{} }
> -func (m *GroupOld) String() string            { return proto.CompactTextString(m) }
> -func (*GroupOld) ProtoMessage()               {}
> -func (*GroupOld) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
> -
> -func (m *GroupOld) GetG() *GroupOld_G {
> -	if m != nil {
> -		return m.G
> -	}
> -	return nil
> -}
> -
> -type GroupOld_G struct {
> -	X                *int32 `protobuf:"varint,2,opt,name=x" json:"x,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *GroupOld_G) Reset()                    { *m = GroupOld_G{} }
> -func (m *GroupOld_G) String() string            { return proto.CompactTextString(m) }
> -func (*GroupOld_G) ProtoMessage()               {}
> -func (*GroupOld_G) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25, 0} }
> -
> -func (m *GroupOld_G) GetX() int32 {
> -	if m != nil && m.X != nil {
> -		return *m.X
> -	}
> -	return 0
> -}
> -
> -type GroupNew struct {
> -	G                *GroupNew_G `protobuf:"group,101,opt,name=G,json=g" json:"g,omitempty"`
> -	XXX_unrecognized []byte      `json:"-"`
> -}
> -
> -func (m *GroupNew) Reset()                    { *m = GroupNew{} }
> -func (m *GroupNew) String() string            { return proto.CompactTextString(m) }
> -func (*GroupNew) ProtoMessage()               {}
> -func (*GroupNew) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
> -
> -func (m *GroupNew) GetG() *GroupNew_G {
> -	if m != nil {
> -		return m.G
> -	}
> -	return nil
> -}
> -
> -type GroupNew_G struct {
> -	X                *int32 `protobuf:"varint,2,opt,name=x" json:"x,omitempty"`
> -	Y                *int32 `protobuf:"varint,3,opt,name=y" json:"y,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *GroupNew_G) Reset()                    { *m = GroupNew_G{} }
> -func (m *GroupNew_G) String() string            { return proto.CompactTextString(m) }
> -func (*GroupNew_G) ProtoMessage()               {}
> -func (*GroupNew_G) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26, 0} }
> -
> -func (m *GroupNew_G) GetX() int32 {
> -	if m != nil && m.X != nil {
> -		return *m.X
> -	}
> -	return 0
> -}
> -
> -func (m *GroupNew_G) GetY() int32 {
> -	if m != nil && m.Y != nil {
> -		return *m.Y
> -	}
> -	return 0
> -}
> -
> -type FloatingPoint struct {
> -	F                *float64 `protobuf:"fixed64,1,req,name=f" json:"f,omitempty"`
> -	Exact            *bool    `protobuf:"varint,2,opt,name=exact" json:"exact,omitempty"`
> -	XXX_unrecognized []byte   `json:"-"`
> -}
> -
> -func (m *FloatingPoint) Reset()                    { *m = FloatingPoint{} }
> -func (m *FloatingPoint) String() string            { return proto.CompactTextString(m) }
> -func (*FloatingPoint) ProtoMessage()               {}
> -func (*FloatingPoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
> -
> -func (m *FloatingPoint) GetF() float64 {
> -	if m != nil && m.F != nil {
> -		return *m.F
> -	}
> -	return 0
> -}
> -
> -func (m *FloatingPoint) GetExact() bool {
> -	if m != nil && m.Exact != nil {
> -		return *m.Exact
> -	}
> -	return false
> -}
> -
> -type MessageWithMap struct {
> -	NameMapping      map[int32]string         `protobuf:"bytes,1,rep,name=name_mapping,json=nameMapping" json:"name_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	MsgMapping       map[int64]*FloatingPoint `protobuf:"bytes,2,rep,name=msg_mapping,json=msgMapping" json:"msg_mapping,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	ByteMapping      map[bool][]byte          `protobuf:"bytes,3,rep,name=byte_mapping,json=byteMapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	StrToStr         map[string]string        `protobuf:"bytes,4,rep,name=str_to_str,json=strToStr" json:"str_to_str,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	XXX_unrecognized []byte                   `json:"-"`
> -}
> -
> -func (m *MessageWithMap) Reset()                    { *m = MessageWithMap{} }
> -func (m *MessageWithMap) String() string            { return proto.CompactTextString(m) }
> -func (*MessageWithMap) ProtoMessage()               {}
> -func (*MessageWithMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
> -
> -func (m *MessageWithMap) GetNameMapping() map[int32]string {
> -	if m != nil {
> -		return m.NameMapping
> -	}
> -	return nil
> -}
> -
> -func (m *MessageWithMap) GetMsgMapping() map[int64]*FloatingPoint {
> -	if m != nil {
> -		return m.MsgMapping
> -	}
> -	return nil
> -}
> -
> -func (m *MessageWithMap) GetByteMapping() map[bool][]byte {
> -	if m != nil {
> -		return m.ByteMapping
> -	}
> -	return nil
> -}
> -
> -func (m *MessageWithMap) GetStrToStr() map[string]string {
> -	if m != nil {
> -		return m.StrToStr
> -	}
> -	return nil
> -}
> -
> -type Oneof struct {
> -	// Types that are valid to be assigned to Union:
> -	//	*Oneof_F_Bool
> -	//	*Oneof_F_Int32
> -	//	*Oneof_F_Int64
> -	//	*Oneof_F_Fixed32
> -	//	*Oneof_F_Fixed64
> -	//	*Oneof_F_Uint32
> -	//	*Oneof_F_Uint64
> -	//	*Oneof_F_Float
> -	//	*Oneof_F_Double
> -	//	*Oneof_F_String
> -	//	*Oneof_F_Bytes
> -	//	*Oneof_F_Sint32
> -	//	*Oneof_F_Sint64
> -	//	*Oneof_F_Enum
> -	//	*Oneof_F_Message
> -	//	*Oneof_FGroup
> -	//	*Oneof_F_Largest_Tag
> -	Union isOneof_Union `protobuf_oneof:"union"`
> -	// Types that are valid to be assigned to Tormato:
> -	//	*Oneof_Value
> -	Tormato          isOneof_Tormato `protobuf_oneof:"tormato"`
> -	XXX_unrecognized []byte          `json:"-"`
> -}
> -
> -func (m *Oneof) Reset()                    { *m = Oneof{} }
> -func (m *Oneof) String() string            { return proto.CompactTextString(m) }
> -func (*Oneof) ProtoMessage()               {}
> -func (*Oneof) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
> -
> -type isOneof_Union interface {
> -	isOneof_Union()
> -}
> -type isOneof_Tormato interface {
> -	isOneof_Tormato()
> -}
> -
> -type Oneof_F_Bool struct {
> -	F_Bool bool `protobuf:"varint,1,opt,name=F_Bool,json=FBool,oneof"`
> -}
> -type Oneof_F_Int32 struct {
> -	F_Int32 int32 `protobuf:"varint,2,opt,name=F_Int32,json=FInt32,oneof"`
> -}
> -type Oneof_F_Int64 struct {
> -	F_Int64 int64 `protobuf:"varint,3,opt,name=F_Int64,json=FInt64,oneof"`
> -}
> -type Oneof_F_Fixed32 struct {
> -	F_Fixed32 uint32 `protobuf:"fixed32,4,opt,name=F_Fixed32,json=FFixed32,oneof"`
> -}
> -type Oneof_F_Fixed64 struct {
> -	F_Fixed64 uint64 `protobuf:"fixed64,5,opt,name=F_Fixed64,json=FFixed64,oneof"`
> -}
> -type Oneof_F_Uint32 struct {
> -	F_Uint32 uint32 `protobuf:"varint,6,opt,name=F_Uint32,json=FUint32,oneof"`
> -}
> -type Oneof_F_Uint64 struct {
> -	F_Uint64 uint64 `protobuf:"varint,7,opt,name=F_Uint64,json=FUint64,oneof"`
> -}
> -type Oneof_F_Float struct {
> -	F_Float float32 `protobuf:"fixed32,8,opt,name=F_Float,json=FFloat,oneof"`
> -}
> -type Oneof_F_Double struct {
> -	F_Double float64 `protobuf:"fixed64,9,opt,name=F_Double,json=FDouble,oneof"`
> -}
> -type Oneof_F_String struct {
> -	F_String string `protobuf:"bytes,10,opt,name=F_String,json=FString,oneof"`
> -}
> -type Oneof_F_Bytes struct {
> -	F_Bytes []byte `protobuf:"bytes,11,opt,name=F_Bytes,json=FBytes,oneof"`
> -}
> -type Oneof_F_Sint32 struct {
> -	F_Sint32 int32 `protobuf:"zigzag32,12,opt,name=F_Sint32,json=FSint32,oneof"`
> -}
> -type Oneof_F_Sint64 struct {
> -	F_Sint64 int64 `protobuf:"zigzag64,13,opt,name=F_Sint64,json=FSint64,oneof"`
> -}
> -type Oneof_F_Enum struct {
> -	F_Enum MyMessage_Color `protobuf:"varint,14,opt,name=F_Enum,json=FEnum,enum=testdata.MyMessage_Color,oneof"`
> -}
> -type Oneof_F_Message struct {
> -	F_Message *GoTestField `protobuf:"bytes,15,opt,name=F_Message,json=FMessage,oneof"`
> -}
> -type Oneof_FGroup struct {
> -	FGroup *Oneof_F_Group `protobuf:"group,16,opt,name=F_Group,json=fGroup,oneof"`
> -}
> -type Oneof_F_Largest_Tag struct {
> -	F_Largest_Tag int32 `protobuf:"varint,536870911,opt,name=F_Largest_Tag,json=FLargestTag,oneof"`
> -}
> -type Oneof_Value struct {
> -	Value int32 `protobuf:"varint,100,opt,name=value,oneof"`
> -}
> -
> -func (*Oneof_F_Bool) isOneof_Union()        {}
> -func (*Oneof_F_Int32) isOneof_Union()       {}
> -func (*Oneof_F_Int64) isOneof_Union()       {}
> -func (*Oneof_F_Fixed32) isOneof_Union()     {}
> -func (*Oneof_F_Fixed64) isOneof_Union()     {}
> -func (*Oneof_F_Uint32) isOneof_Union()      {}
> -func (*Oneof_F_Uint64) isOneof_Union()      {}
> -func (*Oneof_F_Float) isOneof_Union()       {}
> -func (*Oneof_F_Double) isOneof_Union()      {}
> -func (*Oneof_F_String) isOneof_Union()      {}
> -func (*Oneof_F_Bytes) isOneof_Union()       {}
> -func (*Oneof_F_Sint32) isOneof_Union()      {}
> -func (*Oneof_F_Sint64) isOneof_Union()      {}
> -func (*Oneof_F_Enum) isOneof_Union()        {}
> -func (*Oneof_F_Message) isOneof_Union()     {}
> -func (*Oneof_FGroup) isOneof_Union()        {}
> -func (*Oneof_F_Largest_Tag) isOneof_Union() {}
> -func (*Oneof_Value) isOneof_Tormato()       {}
> -
> -func (m *Oneof) GetUnion() isOneof_Union {
> -	if m != nil {
> -		return m.Union
> -	}
> -	return nil
> -}
> -func (m *Oneof) GetTormato() isOneof_Tormato {
> -	if m != nil {
> -		return m.Tormato
> -	}
> -	return nil
> -}
> -
> -func (m *Oneof) GetF_Bool() bool {
> -	if x, ok := m.GetUnion().(*Oneof_F_Bool); ok {
> -		return x.F_Bool
> -	}
> -	return false
> -}
> -
> -func (m *Oneof) GetF_Int32() int32 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Int32); ok {
> -		return x.F_Int32
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetF_Int64() int64 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Int64); ok {
> -		return x.F_Int64
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetF_Fixed32() uint32 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Fixed32); ok {
> -		return x.F_Fixed32
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetF_Fixed64() uint64 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Fixed64); ok {
> -		return x.F_Fixed64
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetF_Uint32() uint32 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Uint32); ok {
> -		return x.F_Uint32
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetF_Uint64() uint64 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Uint64); ok {
> -		return x.F_Uint64
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetF_Float() float32 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Float); ok {
> -		return x.F_Float
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetF_Double() float64 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Double); ok {
> -		return x.F_Double
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetF_String() string {
> -	if x, ok := m.GetUnion().(*Oneof_F_String); ok {
> -		return x.F_String
> -	}
> -	return ""
> -}
> -
> -func (m *Oneof) GetF_Bytes() []byte {
> -	if x, ok := m.GetUnion().(*Oneof_F_Bytes); ok {
> -		return x.F_Bytes
> -	}
> -	return nil
> -}
> -
> -func (m *Oneof) GetF_Sint32() int32 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Sint32); ok {
> -		return x.F_Sint32
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetF_Sint64() int64 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Sint64); ok {
> -		return x.F_Sint64
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetF_Enum() MyMessage_Color {
> -	if x, ok := m.GetUnion().(*Oneof_F_Enum); ok {
> -		return x.F_Enum
> -	}
> -	return MyMessage_RED
> -}
> -
> -func (m *Oneof) GetF_Message() *GoTestField {
> -	if x, ok := m.GetUnion().(*Oneof_F_Message); ok {
> -		return x.F_Message
> -	}
> -	return nil
> -}
> -
> -func (m *Oneof) GetFGroup() *Oneof_F_Group {
> -	if x, ok := m.GetUnion().(*Oneof_FGroup); ok {
> -		return x.FGroup
> -	}
> -	return nil
> -}
> -
> -func (m *Oneof) GetF_Largest_Tag() int32 {
> -	if x, ok := m.GetUnion().(*Oneof_F_Largest_Tag); ok {
> -		return x.F_Largest_Tag
> -	}
> -	return 0
> -}
> -
> -func (m *Oneof) GetValue() int32 {
> -	if x, ok := m.GetTormato().(*Oneof_Value); ok {
> -		return x.Value
> -	}
> -	return 0
> -}
> -
> -// XXX_OneofFuncs is for the internal use of the proto package.
> -func (*Oneof) 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 _Oneof_OneofMarshaler, _Oneof_OneofUnmarshaler, _Oneof_OneofSizer, []interface{}{
> -		(*Oneof_F_Bool)(nil),
> -		(*Oneof_F_Int32)(nil),
> -		(*Oneof_F_Int64)(nil),
> -		(*Oneof_F_Fixed32)(nil),
> -		(*Oneof_F_Fixed64)(nil),
> -		(*Oneof_F_Uint32)(nil),
> -		(*Oneof_F_Uint64)(nil),
> -		(*Oneof_F_Float)(nil),
> -		(*Oneof_F_Double)(nil),
> -		(*Oneof_F_String)(nil),
> -		(*Oneof_F_Bytes)(nil),
> -		(*Oneof_F_Sint32)(nil),
> -		(*Oneof_F_Sint64)(nil),
> -		(*Oneof_F_Enum)(nil),
> -		(*Oneof_F_Message)(nil),
> -		(*Oneof_FGroup)(nil),
> -		(*Oneof_F_Largest_Tag)(nil),
> -		(*Oneof_Value)(nil),
> -	}
> -}
> -
> -func _Oneof_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
> -	m := msg.(*Oneof)
> -	// union
> -	switch x := m.Union.(type) {
> -	case *Oneof_F_Bool:
> -		t := uint64(0)
> -		if x.F_Bool {
> -			t = 1
> -		}
> -		b.EncodeVarint(1<<3 | proto.WireVarint)
> -		b.EncodeVarint(t)
> -	case *Oneof_F_Int32:
> -		b.EncodeVarint(2<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.F_Int32))
> -	case *Oneof_F_Int64:
> -		b.EncodeVarint(3<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.F_Int64))
> -	case *Oneof_F_Fixed32:
> -		b.EncodeVarint(4<<3 | proto.WireFixed32)
> -		b.EncodeFixed32(uint64(x.F_Fixed32))
> -	case *Oneof_F_Fixed64:
> -		b.EncodeVarint(5<<3 | proto.WireFixed64)
> -		b.EncodeFixed64(uint64(x.F_Fixed64))
> -	case *Oneof_F_Uint32:
> -		b.EncodeVarint(6<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.F_Uint32))
> -	case *Oneof_F_Uint64:
> -		b.EncodeVarint(7<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.F_Uint64))
> -	case *Oneof_F_Float:
> -		b.EncodeVarint(8<<3 | proto.WireFixed32)
> -		b.EncodeFixed32(uint64(math.Float32bits(x.F_Float)))
> -	case *Oneof_F_Double:
> -		b.EncodeVarint(9<<3 | proto.WireFixed64)
> -		b.EncodeFixed64(math.Float64bits(x.F_Double))
> -	case *Oneof_F_String:
> -		b.EncodeVarint(10<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.F_String)
> -	case *Oneof_F_Bytes:
> -		b.EncodeVarint(11<<3 | proto.WireBytes)
> -		b.EncodeRawBytes(x.F_Bytes)
> -	case *Oneof_F_Sint32:
> -		b.EncodeVarint(12<<3 | proto.WireVarint)
> -		b.EncodeZigzag32(uint64(x.F_Sint32))
> -	case *Oneof_F_Sint64:
> -		b.EncodeVarint(13<<3 | proto.WireVarint)
> -		b.EncodeZigzag64(uint64(x.F_Sint64))
> -	case *Oneof_F_Enum:
> -		b.EncodeVarint(14<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.F_Enum))
> -	case *Oneof_F_Message:
> -		b.EncodeVarint(15<<3 | proto.WireBytes)
> -		if err := b.EncodeMessage(x.F_Message); err != nil {
> -			return err
> -		}
> -	case *Oneof_FGroup:
> -		b.EncodeVarint(16<<3 | proto.WireStartGroup)
> -		if err := b.Marshal(x.FGroup); err != nil {
> -			return err
> -		}
> -		b.EncodeVarint(16<<3 | proto.WireEndGroup)
> -	case *Oneof_F_Largest_Tag:
> -		b.EncodeVarint(536870911<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.F_Largest_Tag))
> -	case nil:
> -	default:
> -		return fmt.Errorf("Oneof.Union has unexpected type %T", x)
> -	}
> -	// tormato
> -	switch x := m.Tormato.(type) {
> -	case *Oneof_Value:
> -		b.EncodeVarint(100<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.Value))
> -	case nil:
> -	default:
> -		return fmt.Errorf("Oneof.Tormato has unexpected type %T", x)
> -	}
> -	return nil
> -}
> -
> -func _Oneof_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
> -	m := msg.(*Oneof)
> -	switch tag {
> -	case 1: // union.F_Bool
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Oneof_F_Bool{x != 0}
> -		return true, err
> -	case 2: // union.F_Int32
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Oneof_F_Int32{int32(x)}
> -		return true, err
> -	case 3: // union.F_Int64
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Oneof_F_Int64{int64(x)}
> -		return true, err
> -	case 4: // union.F_Fixed32
> -		if wire != proto.WireFixed32 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed32()
> -		m.Union = &Oneof_F_Fixed32{uint32(x)}
> -		return true, err
> -	case 5: // union.F_Fixed64
> -		if wire != proto.WireFixed64 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed64()
> -		m.Union = &Oneof_F_Fixed64{x}
> -		return true, err
> -	case 6: // union.F_Uint32
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Oneof_F_Uint32{uint32(x)}
> -		return true, err
> -	case 7: // union.F_Uint64
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Oneof_F_Uint64{x}
> -		return true, err
> -	case 8: // union.F_Float
> -		if wire != proto.WireFixed32 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed32()
> -		m.Union = &Oneof_F_Float{math.Float32frombits(uint32(x))}
> -		return true, err
> -	case 9: // union.F_Double
> -		if wire != proto.WireFixed64 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed64()
> -		m.Union = &Oneof_F_Double{math.Float64frombits(x)}
> -		return true, err
> -	case 10: // union.F_String
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Union = &Oneof_F_String{x}
> -		return true, err
> -	case 11: // union.F_Bytes
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeRawBytes(true)
> -		m.Union = &Oneof_F_Bytes{x}
> -		return true, err
> -	case 12: // union.F_Sint32
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeZigzag32()
> -		m.Union = &Oneof_F_Sint32{int32(x)}
> -		return true, err
> -	case 13: // union.F_Sint64
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeZigzag64()
> -		m.Union = &Oneof_F_Sint64{int64(x)}
> -		return true, err
> -	case 14: // union.F_Enum
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Oneof_F_Enum{MyMessage_Color(x)}
> -		return true, err
> -	case 15: // union.F_Message
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		msg := new(GoTestField)
> -		err := b.DecodeMessage(msg)
> -		m.Union = &Oneof_F_Message{msg}
> -		return true, err
> -	case 16: // union.f_group
> -		if wire != proto.WireStartGroup {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		msg := new(Oneof_F_Group)
> -		err := b.DecodeGroup(msg)
> -		m.Union = &Oneof_FGroup{msg}
> -		return true, err
> -	case 536870911: // union.F_Largest_Tag
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Oneof_F_Largest_Tag{int32(x)}
> -		return true, err
> -	case 100: // tormato.value
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Tormato = &Oneof_Value{int32(x)}
> -		return true, err
> -	default:
> -		return false, nil
> -	}
> -}
> -
> -func _Oneof_OneofSizer(msg proto.Message) (n int) {
> -	m := msg.(*Oneof)
> -	// union
> -	switch x := m.Union.(type) {
> -	case *Oneof_F_Bool:
> -		n += proto.SizeVarint(1<<3 | proto.WireVarint)
> -		n += 1
> -	case *Oneof_F_Int32:
> -		n += proto.SizeVarint(2<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.F_Int32))
> -	case *Oneof_F_Int64:
> -		n += proto.SizeVarint(3<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.F_Int64))
> -	case *Oneof_F_Fixed32:
> -		n += proto.SizeVarint(4<<3 | proto.WireFixed32)
> -		n += 4
> -	case *Oneof_F_Fixed64:
> -		n += proto.SizeVarint(5<<3 | proto.WireFixed64)
> -		n += 8
> -	case *Oneof_F_Uint32:
> -		n += proto.SizeVarint(6<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.F_Uint32))
> -	case *Oneof_F_Uint64:
> -		n += proto.SizeVarint(7<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.F_Uint64))
> -	case *Oneof_F_Float:
> -		n += proto.SizeVarint(8<<3 | proto.WireFixed32)
> -		n += 4
> -	case *Oneof_F_Double:
> -		n += proto.SizeVarint(9<<3 | proto.WireFixed64)
> -		n += 8
> -	case *Oneof_F_String:
> -		n += proto.SizeVarint(10<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.F_String)))
> -		n += len(x.F_String)
> -	case *Oneof_F_Bytes:
> -		n += proto.SizeVarint(11<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.F_Bytes)))
> -		n += len(x.F_Bytes)
> -	case *Oneof_F_Sint32:
> -		n += proto.SizeVarint(12<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64((uint32(x.F_Sint32) << 1) ^ uint32((int32(x.F_Sint32) >> 31))))
> -	case *Oneof_F_Sint64:
> -		n += proto.SizeVarint(13<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(uint64(x.F_Sint64<<1) ^ uint64((int64(x.F_Sint64) >> 63))))
> -	case *Oneof_F_Enum:
> -		n += proto.SizeVarint(14<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.F_Enum))
> -	case *Oneof_F_Message:
> -		s := proto.Size(x.F_Message)
> -		n += proto.SizeVarint(15<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(s))
> -		n += s
> -	case *Oneof_FGroup:
> -		n += proto.SizeVarint(16<<3 | proto.WireStartGroup)
> -		n += proto.Size(x.FGroup)
> -		n += proto.SizeVarint(16<<3 | proto.WireEndGroup)
> -	case *Oneof_F_Largest_Tag:
> -		n += proto.SizeVarint(536870911<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.F_Largest_Tag))
> -	case nil:
> -	default:
> -		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
> -	}
> -	// tormato
> -	switch x := m.Tormato.(type) {
> -	case *Oneof_Value:
> -		n += proto.SizeVarint(100<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.Value))
> -	case nil:
> -	default:
> -		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
> -	}
> -	return n
> -}
> -
> -type Oneof_F_Group struct {
> -	X                *int32 `protobuf:"varint,17,opt,name=x" json:"x,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *Oneof_F_Group) Reset()                    { *m = Oneof_F_Group{} }
> -func (m *Oneof_F_Group) String() string            { return proto.CompactTextString(m) }
> -func (*Oneof_F_Group) ProtoMessage()               {}
> -func (*Oneof_F_Group) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29, 0} }
> -
> -func (m *Oneof_F_Group) GetX() int32 {
> -	if m != nil && m.X != nil {
> -		return *m.X
> -	}
> -	return 0
> -}
> -
> -type Communique struct {
> -	MakeMeCry *bool `protobuf:"varint,1,opt,name=make_me_cry,json=makeMeCry" json:"make_me_cry,omitempty"`
> -	// This is a oneof, called "union".
> -	//
> -	// Types that are valid to be assigned to Union:
> -	//	*Communique_Number
> -	//	*Communique_Name
> -	//	*Communique_Data
> -	//	*Communique_TempC
> -	//	*Communique_Col
> -	//	*Communique_Msg
> -	Union            isCommunique_Union `protobuf_oneof:"union"`
> -	XXX_unrecognized []byte             `json:"-"`
> -}
> -
> -func (m *Communique) Reset()                    { *m = Communique{} }
> -func (m *Communique) String() string            { return proto.CompactTextString(m) }
> -func (*Communique) ProtoMessage()               {}
> -func (*Communique) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
> -
> -type isCommunique_Union interface {
> -	isCommunique_Union()
> -}
> -
> -type Communique_Number struct {
> -	Number int32 `protobuf:"varint,5,opt,name=number,oneof"`
> -}
> -type Communique_Name struct {
> -	Name string `protobuf:"bytes,6,opt,name=name,oneof"`
> -}
> -type Communique_Data struct {
> -	Data []byte `protobuf:"bytes,7,opt,name=data,oneof"`
> -}
> -type Communique_TempC struct {
> -	TempC float64 `protobuf:"fixed64,8,opt,name=temp_c,json=tempC,oneof"`
> -}
> -type Communique_Col struct {
> -	Col MyMessage_Color `protobuf:"varint,9,opt,name=col,enum=testdata.MyMessage_Color,oneof"`
> -}
> -type Communique_Msg struct {
> -	Msg *Strings `protobuf:"bytes,10,opt,name=msg,oneof"`
> -}
> -
> -func (*Communique_Number) isCommunique_Union() {}
> -func (*Communique_Name) isCommunique_Union()   {}
> -func (*Communique_Data) isCommunique_Union()   {}
> -func (*Communique_TempC) isCommunique_Union()  {}
> -func (*Communique_Col) isCommunique_Union()    {}
> -func (*Communique_Msg) isCommunique_Union()    {}
> -
> -func (m *Communique) GetUnion() isCommunique_Union {
> -	if m != nil {
> -		return m.Union
> -	}
> -	return nil
> -}
> -
> -func (m *Communique) GetMakeMeCry() bool {
> -	if m != nil && m.MakeMeCry != nil {
> -		return *m.MakeMeCry
> -	}
> -	return false
> -}
> -
> -func (m *Communique) GetNumber() int32 {
> -	if x, ok := m.GetUnion().(*Communique_Number); ok {
> -		return x.Number
> -	}
> -	return 0
> -}
> -
> -func (m *Communique) GetName() string {
> -	if x, ok := m.GetUnion().(*Communique_Name); ok {
> -		return x.Name
> -	}
> -	return ""
> -}
> -
> -func (m *Communique) GetData() []byte {
> -	if x, ok := m.GetUnion().(*Communique_Data); ok {
> -		return x.Data
> -	}
> -	return nil
> -}
> -
> -func (m *Communique) GetTempC() float64 {
> -	if x, ok := m.GetUnion().(*Communique_TempC); ok {
> -		return x.TempC
> -	}
> -	return 0
> -}
> -
> -func (m *Communique) GetCol() MyMessage_Color {
> -	if x, ok := m.GetUnion().(*Communique_Col); ok {
> -		return x.Col
> -	}
> -	return MyMessage_RED
> -}
> -
> -func (m *Communique) GetMsg() *Strings {
> -	if x, ok := m.GetUnion().(*Communique_Msg); ok {
> -		return x.Msg
> -	}
> -	return nil
> -}
> -
> -// XXX_OneofFuncs is for the internal use of the proto package.
> -func (*Communique) 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 _Communique_OneofMarshaler, _Communique_OneofUnmarshaler, _Communique_OneofSizer, []interface{}{
> -		(*Communique_Number)(nil),
> -		(*Communique_Name)(nil),
> -		(*Communique_Data)(nil),
> -		(*Communique_TempC)(nil),
> -		(*Communique_Col)(nil),
> -		(*Communique_Msg)(nil),
> -	}
> -}
> -
> -func _Communique_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
> -	m := msg.(*Communique)
> -	// union
> -	switch x := m.Union.(type) {
> -	case *Communique_Number:
> -		b.EncodeVarint(5<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.Number))
> -	case *Communique_Name:
> -		b.EncodeVarint(6<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.Name)
> -	case *Communique_Data:
> -		b.EncodeVarint(7<<3 | proto.WireBytes)
> -		b.EncodeRawBytes(x.Data)
> -	case *Communique_TempC:
> -		b.EncodeVarint(8<<3 | proto.WireFixed64)
> -		b.EncodeFixed64(math.Float64bits(x.TempC))
> -	case *Communique_Col:
> -		b.EncodeVarint(9<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.Col))
> -	case *Communique_Msg:
> -		b.EncodeVarint(10<<3 | proto.WireBytes)
> -		if err := b.EncodeMessage(x.Msg); err != nil {
> -			return err
> -		}
> -	case nil:
> -	default:
> -		return fmt.Errorf("Communique.Union has unexpected type %T", x)
> -	}
> -	return nil
> -}
> -
> -func _Communique_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
> -	m := msg.(*Communique)
> -	switch tag {
> -	case 5: // union.number
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Communique_Number{int32(x)}
> -		return true, err
> -	case 6: // union.name
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Union = &Communique_Name{x}
> -		return true, err
> -	case 7: // union.data
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeRawBytes(true)
> -		m.Union = &Communique_Data{x}
> -		return true, err
> -	case 8: // union.temp_c
> -		if wire != proto.WireFixed64 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed64()
> -		m.Union = &Communique_TempC{math.Float64frombits(x)}
> -		return true, err
> -	case 9: // union.col
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Communique_Col{MyMessage_Color(x)}
> -		return true, err
> -	case 10: // union.msg
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		msg := new(Strings)
> -		err := b.DecodeMessage(msg)
> -		m.Union = &Communique_Msg{msg}
> -		return true, err
> -	default:
> -		return false, nil
> -	}
> -}
> -
> -func _Communique_OneofSizer(msg proto.Message) (n int) {
> -	m := msg.(*Communique)
> -	// union
> -	switch x := m.Union.(type) {
> -	case *Communique_Number:
> -		n += proto.SizeVarint(5<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.Number))
> -	case *Communique_Name:
> -		n += proto.SizeVarint(6<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.Name)))
> -		n += len(x.Name)
> -	case *Communique_Data:
> -		n += proto.SizeVarint(7<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.Data)))
> -		n += len(x.Data)
> -	case *Communique_TempC:
> -		n += proto.SizeVarint(8<<3 | proto.WireFixed64)
> -		n += 8
> -	case *Communique_Col:
> -		n += proto.SizeVarint(9<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.Col))
> -	case *Communique_Msg:
> -		s := proto.Size(x.Msg)
> -		n += proto.SizeVarint(10<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(s))
> -		n += s
> -	case nil:
> -	default:
> -		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
> -	}
> -	return n
> -}
> -
> -var E_Greeting = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessage)(nil),
> -	ExtensionType: ([]string)(nil),
> -	Field:         106,
> -	Name:          "testdata.greeting",
> -	Tag:           "bytes,106,rep,name=greeting",
> -	Filename:      "test.proto",
> -}
> -
> -var E_Complex = &proto.ExtensionDesc{
> -	ExtendedType:  (*OtherMessage)(nil),
> -	ExtensionType: (*ComplexExtension)(nil),
> -	Field:         200,
> -	Name:          "testdata.complex",
> -	Tag:           "bytes,200,opt,name=complex",
> -	Filename:      "test.proto",
> -}
> -
> -var E_RComplex = &proto.ExtensionDesc{
> -	ExtendedType:  (*OtherMessage)(nil),
> -	ExtensionType: ([]*ComplexExtension)(nil),
> -	Field:         201,
> -	Name:          "testdata.r_complex",
> -	Tag:           "bytes,201,rep,name=r_complex,json=rComplex",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultDouble = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*float64)(nil),
> -	Field:         101,
> -	Name:          "testdata.no_default_double",
> -	Tag:           "fixed64,101,opt,name=no_default_double,json=noDefaultDouble",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultFloat = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*float32)(nil),
> -	Field:         102,
> -	Name:          "testdata.no_default_float",
> -	Tag:           "fixed32,102,opt,name=no_default_float,json=noDefaultFloat",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultInt32 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int32)(nil),
> -	Field:         103,
> -	Name:          "testdata.no_default_int32",
> -	Tag:           "varint,103,opt,name=no_default_int32,json=noDefaultInt32",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultInt64 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int64)(nil),
> -	Field:         104,
> -	Name:          "testdata.no_default_int64",
> -	Tag:           "varint,104,opt,name=no_default_int64,json=noDefaultInt64",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultUint32 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*uint32)(nil),
> -	Field:         105,
> -	Name:          "testdata.no_default_uint32",
> -	Tag:           "varint,105,opt,name=no_default_uint32,json=noDefaultUint32",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultUint64 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*uint64)(nil),
> -	Field:         106,
> -	Name:          "testdata.no_default_uint64",
> -	Tag:           "varint,106,opt,name=no_default_uint64,json=noDefaultUint64",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultSint32 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int32)(nil),
> -	Field:         107,
> -	Name:          "testdata.no_default_sint32",
> -	Tag:           "zigzag32,107,opt,name=no_default_sint32,json=noDefaultSint32",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultSint64 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int64)(nil),
> -	Field:         108,
> -	Name:          "testdata.no_default_sint64",
> -	Tag:           "zigzag64,108,opt,name=no_default_sint64,json=noDefaultSint64",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultFixed32 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*uint32)(nil),
> -	Field:         109,
> -	Name:          "testdata.no_default_fixed32",
> -	Tag:           "fixed32,109,opt,name=no_default_fixed32,json=noDefaultFixed32",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultFixed64 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*uint64)(nil),
> -	Field:         110,
> -	Name:          "testdata.no_default_fixed64",
> -	Tag:           "fixed64,110,opt,name=no_default_fixed64,json=noDefaultFixed64",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultSfixed32 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int32)(nil),
> -	Field:         111,
> -	Name:          "testdata.no_default_sfixed32",
> -	Tag:           "fixed32,111,opt,name=no_default_sfixed32,json=noDefaultSfixed32",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultSfixed64 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int64)(nil),
> -	Field:         112,
> -	Name:          "testdata.no_default_sfixed64",
> -	Tag:           "fixed64,112,opt,name=no_default_sfixed64,json=noDefaultSfixed64",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultBool = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*bool)(nil),
> -	Field:         113,
> -	Name:          "testdata.no_default_bool",
> -	Tag:           "varint,113,opt,name=no_default_bool,json=noDefaultBool",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultString = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*string)(nil),
> -	Field:         114,
> -	Name:          "testdata.no_default_string",
> -	Tag:           "bytes,114,opt,name=no_default_string,json=noDefaultString",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultBytes = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: ([]byte)(nil),
> -	Field:         115,
> -	Name:          "testdata.no_default_bytes",
> -	Tag:           "bytes,115,opt,name=no_default_bytes,json=noDefaultBytes",
> -	Filename:      "test.proto",
> -}
> -
> -var E_NoDefaultEnum = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*DefaultsMessage_DefaultsEnum)(nil),
> -	Field:         116,
> -	Name:          "testdata.no_default_enum",
> -	Tag:           "varint,116,opt,name=no_default_enum,json=noDefaultEnum,enum=testdata.DefaultsMessage_DefaultsEnum",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultDouble = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*float64)(nil),
> -	Field:         201,
> -	Name:          "testdata.default_double",
> -	Tag:           "fixed64,201,opt,name=default_double,json=defaultDouble,def=3.1415",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultFloat = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*float32)(nil),
> -	Field:         202,
> -	Name:          "testdata.default_float",
> -	Tag:           "fixed32,202,opt,name=default_float,json=defaultFloat,def=3.14",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultInt32 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int32)(nil),
> -	Field:         203,
> -	Name:          "testdata.default_int32",
> -	Tag:           "varint,203,opt,name=default_int32,json=defaultInt32,def=42",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultInt64 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int64)(nil),
> -	Field:         204,
> -	Name:          "testdata.default_int64",
> -	Tag:           "varint,204,opt,name=default_int64,json=defaultInt64,def=43",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultUint32 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*uint32)(nil),
> -	Field:         205,
> -	Name:          "testdata.default_uint32",
> -	Tag:           "varint,205,opt,name=default_uint32,json=defaultUint32,def=44",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultUint64 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*uint64)(nil),
> -	Field:         206,
> -	Name:          "testdata.default_uint64",
> -	Tag:           "varint,206,opt,name=default_uint64,json=defaultUint64,def=45",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultSint32 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int32)(nil),
> -	Field:         207,
> -	Name:          "testdata.default_sint32",
> -	Tag:           "zigzag32,207,opt,name=default_sint32,json=defaultSint32,def=46",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultSint64 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int64)(nil),
> -	Field:         208,
> -	Name:          "testdata.default_sint64",
> -	Tag:           "zigzag64,208,opt,name=default_sint64,json=defaultSint64,def=47",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultFixed32 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*uint32)(nil),
> -	Field:         209,
> -	Name:          "testdata.default_fixed32",
> -	Tag:           "fixed32,209,opt,name=default_fixed32,json=defaultFixed32,def=48",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultFixed64 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*uint64)(nil),
> -	Field:         210,
> -	Name:          "testdata.default_fixed64",
> -	Tag:           "fixed64,210,opt,name=default_fixed64,json=defaultFixed64,def=49",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultSfixed32 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int32)(nil),
> -	Field:         211,
> -	Name:          "testdata.default_sfixed32",
> -	Tag:           "fixed32,211,opt,name=default_sfixed32,json=defaultSfixed32,def=50",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultSfixed64 = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*int64)(nil),
> -	Field:         212,
> -	Name:          "testdata.default_sfixed64",
> -	Tag:           "fixed64,212,opt,name=default_sfixed64,json=defaultSfixed64,def=51",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultBool = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*bool)(nil),
> -	Field:         213,
> -	Name:          "testdata.default_bool",
> -	Tag:           "varint,213,opt,name=default_bool,json=defaultBool,def=1",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultString = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*string)(nil),
> -	Field:         214,
> -	Name:          "testdata.default_string",
> -	Tag:           "bytes,214,opt,name=default_string,json=defaultString,def=Hello, string",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultBytes = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: ([]byte)(nil),
> -	Field:         215,
> -	Name:          "testdata.default_bytes",
> -	Tag:           "bytes,215,opt,name=default_bytes,json=defaultBytes,def=Hello, bytes",
> -	Filename:      "test.proto",
> -}
> -
> -var E_DefaultEnum = &proto.ExtensionDesc{
> -	ExtendedType:  (*DefaultsMessage)(nil),
> -	ExtensionType: (*DefaultsMessage_DefaultsEnum)(nil),
> -	Field:         216,
> -	Name:          "testdata.default_enum",
> -	Tag:           "varint,216,opt,name=default_enum,json=defaultEnum,enum=testdata.DefaultsMessage_DefaultsEnum,def=1",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X201 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         201,
> -	Name:          "testdata.x201",
> -	Tag:           "bytes,201,opt,name=x201",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X202 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         202,
> -	Name:          "testdata.x202",
> -	Tag:           "bytes,202,opt,name=x202",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X203 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         203,
> -	Name:          "testdata.x203",
> -	Tag:           "bytes,203,opt,name=x203",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X204 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         204,
> -	Name:          "testdata.x204",
> -	Tag:           "bytes,204,opt,name=x204",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X205 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         205,
> -	Name:          "testdata.x205",
> -	Tag:           "bytes,205,opt,name=x205",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X206 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         206,
> -	Name:          "testdata.x206",
> -	Tag:           "bytes,206,opt,name=x206",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X207 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         207,
> -	Name:          "testdata.x207",
> -	Tag:           "bytes,207,opt,name=x207",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X208 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         208,
> -	Name:          "testdata.x208",
> -	Tag:           "bytes,208,opt,name=x208",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X209 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         209,
> -	Name:          "testdata.x209",
> -	Tag:           "bytes,209,opt,name=x209",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X210 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         210,
> -	Name:          "testdata.x210",
> -	Tag:           "bytes,210,opt,name=x210",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X211 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         211,
> -	Name:          "testdata.x211",
> -	Tag:           "bytes,211,opt,name=x211",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X212 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         212,
> -	Name:          "testdata.x212",
> -	Tag:           "bytes,212,opt,name=x212",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X213 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         213,
> -	Name:          "testdata.x213",
> -	Tag:           "bytes,213,opt,name=x213",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X214 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         214,
> -	Name:          "testdata.x214",
> -	Tag:           "bytes,214,opt,name=x214",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X215 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         215,
> -	Name:          "testdata.x215",
> -	Tag:           "bytes,215,opt,name=x215",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X216 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         216,
> -	Name:          "testdata.x216",
> -	Tag:           "bytes,216,opt,name=x216",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X217 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         217,
> -	Name:          "testdata.x217",
> -	Tag:           "bytes,217,opt,name=x217",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X218 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         218,
> -	Name:          "testdata.x218",
> -	Tag:           "bytes,218,opt,name=x218",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X219 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         219,
> -	Name:          "testdata.x219",
> -	Tag:           "bytes,219,opt,name=x219",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X220 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         220,
> -	Name:          "testdata.x220",
> -	Tag:           "bytes,220,opt,name=x220",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X221 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         221,
> -	Name:          "testdata.x221",
> -	Tag:           "bytes,221,opt,name=x221",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X222 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         222,
> -	Name:          "testdata.x222",
> -	Tag:           "bytes,222,opt,name=x222",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X223 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         223,
> -	Name:          "testdata.x223",
> -	Tag:           "bytes,223,opt,name=x223",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X224 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         224,
> -	Name:          "testdata.x224",
> -	Tag:           "bytes,224,opt,name=x224",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X225 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         225,
> -	Name:          "testdata.x225",
> -	Tag:           "bytes,225,opt,name=x225",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X226 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         226,
> -	Name:          "testdata.x226",
> -	Tag:           "bytes,226,opt,name=x226",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X227 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         227,
> -	Name:          "testdata.x227",
> -	Tag:           "bytes,227,opt,name=x227",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X228 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         228,
> -	Name:          "testdata.x228",
> -	Tag:           "bytes,228,opt,name=x228",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X229 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         229,
> -	Name:          "testdata.x229",
> -	Tag:           "bytes,229,opt,name=x229",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X230 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         230,
> -	Name:          "testdata.x230",
> -	Tag:           "bytes,230,opt,name=x230",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X231 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         231,
> -	Name:          "testdata.x231",
> -	Tag:           "bytes,231,opt,name=x231",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X232 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         232,
> -	Name:          "testdata.x232",
> -	Tag:           "bytes,232,opt,name=x232",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X233 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         233,
> -	Name:          "testdata.x233",
> -	Tag:           "bytes,233,opt,name=x233",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X234 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         234,
> -	Name:          "testdata.x234",
> -	Tag:           "bytes,234,opt,name=x234",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X235 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         235,
> -	Name:          "testdata.x235",
> -	Tag:           "bytes,235,opt,name=x235",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X236 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         236,
> -	Name:          "testdata.x236",
> -	Tag:           "bytes,236,opt,name=x236",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X237 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         237,
> -	Name:          "testdata.x237",
> -	Tag:           "bytes,237,opt,name=x237",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X238 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         238,
> -	Name:          "testdata.x238",
> -	Tag:           "bytes,238,opt,name=x238",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X239 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         239,
> -	Name:          "testdata.x239",
> -	Tag:           "bytes,239,opt,name=x239",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X240 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         240,
> -	Name:          "testdata.x240",
> -	Tag:           "bytes,240,opt,name=x240",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X241 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         241,
> -	Name:          "testdata.x241",
> -	Tag:           "bytes,241,opt,name=x241",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X242 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         242,
> -	Name:          "testdata.x242",
> -	Tag:           "bytes,242,opt,name=x242",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X243 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         243,
> -	Name:          "testdata.x243",
> -	Tag:           "bytes,243,opt,name=x243",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X244 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         244,
> -	Name:          "testdata.x244",
> -	Tag:           "bytes,244,opt,name=x244",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X245 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         245,
> -	Name:          "testdata.x245",
> -	Tag:           "bytes,245,opt,name=x245",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X246 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         246,
> -	Name:          "testdata.x246",
> -	Tag:           "bytes,246,opt,name=x246",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X247 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         247,
> -	Name:          "testdata.x247",
> -	Tag:           "bytes,247,opt,name=x247",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X248 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         248,
> -	Name:          "testdata.x248",
> -	Tag:           "bytes,248,opt,name=x248",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X249 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         249,
> -	Name:          "testdata.x249",
> -	Tag:           "bytes,249,opt,name=x249",
> -	Filename:      "test.proto",
> -}
> -
> -var E_X250 = &proto.ExtensionDesc{
> -	ExtendedType:  (*MyMessageSet)(nil),
> -	ExtensionType: (*Empty)(nil),
> -	Field:         250,
> -	Name:          "testdata.x250",
> -	Tag:           "bytes,250,opt,name=x250",
> -	Filename:      "test.proto",
> -}
> -
> -func init() {
> -	proto.RegisterType((*GoEnum)(nil), "testdata.GoEnum")
> -	proto.RegisterType((*GoTestField)(nil), "testdata.GoTestField")
> -	proto.RegisterType((*GoTest)(nil), "testdata.GoTest")
> -	proto.RegisterType((*GoTest_RequiredGroup)(nil), "testdata.GoTest.RequiredGroup")
> -	proto.RegisterType((*GoTest_RepeatedGroup)(nil), "testdata.GoTest.RepeatedGroup")
> -	proto.RegisterType((*GoTest_OptionalGroup)(nil), "testdata.GoTest.OptionalGroup")
> -	proto.RegisterType((*GoTestRequiredGroupField)(nil), "testdata.GoTestRequiredGroupField")
> -	proto.RegisterType((*GoTestRequiredGroupField_Group)(nil), "testdata.GoTestRequiredGroupField.Group")
> -	proto.RegisterType((*GoSkipTest)(nil), "testdata.GoSkipTest")
> -	proto.RegisterType((*GoSkipTest_SkipGroup)(nil), "testdata.GoSkipTest.SkipGroup")
> -	proto.RegisterType((*NonPackedTest)(nil), "testdata.NonPackedTest")
> -	proto.RegisterType((*PackedTest)(nil), "testdata.PackedTest")
> -	proto.RegisterType((*MaxTag)(nil), "testdata.MaxTag")
> -	proto.RegisterType((*OldMessage)(nil), "testdata.OldMessage")
> -	proto.RegisterType((*OldMessage_Nested)(nil), "testdata.OldMessage.Nested")
> -	proto.RegisterType((*NewMessage)(nil), "testdata.NewMessage")
> -	proto.RegisterType((*NewMessage_Nested)(nil), "testdata.NewMessage.Nested")
> -	proto.RegisterType((*InnerMessage)(nil), "testdata.InnerMessage")
> -	proto.RegisterType((*OtherMessage)(nil), "testdata.OtherMessage")
> -	proto.RegisterType((*RequiredInnerMessage)(nil), "testdata.RequiredInnerMessage")
> -	proto.RegisterType((*MyMessage)(nil), "testdata.MyMessage")
> -	proto.RegisterType((*MyMessage_SomeGroup)(nil), "testdata.MyMessage.SomeGroup")
> -	proto.RegisterType((*Ext)(nil), "testdata.Ext")
> -	proto.RegisterType((*ComplexExtension)(nil), "testdata.ComplexExtension")
> -	proto.RegisterType((*DefaultsMessage)(nil), "testdata.DefaultsMessage")
> -	proto.RegisterType((*MyMessageSet)(nil), "testdata.MyMessageSet")
> -	proto.RegisterType((*Empty)(nil), "testdata.Empty")
> -	proto.RegisterType((*MessageList)(nil), "testdata.MessageList")
> -	proto.RegisterType((*MessageList_Message)(nil), "testdata.MessageList.Message")
> -	proto.RegisterType((*Strings)(nil), "testdata.Strings")
> -	proto.RegisterType((*Defaults)(nil), "testdata.Defaults")
> -	proto.RegisterType((*SubDefaults)(nil), "testdata.SubDefaults")
> -	proto.RegisterType((*RepeatedEnum)(nil), "testdata.RepeatedEnum")
> -	proto.RegisterType((*MoreRepeated)(nil), "testdata.MoreRepeated")
> -	proto.RegisterType((*GroupOld)(nil), "testdata.GroupOld")
> -	proto.RegisterType((*GroupOld_G)(nil), "testdata.GroupOld.G")
> -	proto.RegisterType((*GroupNew)(nil), "testdata.GroupNew")
> -	proto.RegisterType((*GroupNew_G)(nil), "testdata.GroupNew.G")
> -	proto.RegisterType((*FloatingPoint)(nil), "testdata.FloatingPoint")
> -	proto.RegisterType((*MessageWithMap)(nil), "testdata.MessageWithMap")
> -	proto.RegisterType((*Oneof)(nil), "testdata.Oneof")
> -	proto.RegisterType((*Oneof_F_Group)(nil), "testdata.Oneof.F_Group")
> -	proto.RegisterType((*Communique)(nil), "testdata.Communique")
> -	proto.RegisterEnum("testdata.FOO", FOO_name, FOO_value)
> -	proto.RegisterEnum("testdata.GoTest_KIND", GoTest_KIND_name, GoTest_KIND_value)
> -	proto.RegisterEnum("testdata.MyMessage_Color", MyMessage_Color_name, MyMessage_Color_value)
> -	proto.RegisterEnum("testdata.DefaultsMessage_DefaultsEnum", DefaultsMessage_DefaultsEnum_name, DefaultsMessage_DefaultsEnum_value)
> -	proto.RegisterEnum("testdata.Defaults_Color", Defaults_Color_name, Defaults_Color_value)
> -	proto.RegisterEnum("testdata.RepeatedEnum_Color", RepeatedEnum_Color_name, RepeatedEnum_Color_value)
> -	proto.RegisterExtension(E_Ext_More)
> -	proto.RegisterExtension(E_Ext_Text)
> -	proto.RegisterExtension(E_Ext_Number)
> -	proto.RegisterExtension(E_Greeting)
> -	proto.RegisterExtension(E_Complex)
> -	proto.RegisterExtension(E_RComplex)
> -	proto.RegisterExtension(E_NoDefaultDouble)
> -	proto.RegisterExtension(E_NoDefaultFloat)
> -	proto.RegisterExtension(E_NoDefaultInt32)
> -	proto.RegisterExtension(E_NoDefaultInt64)
> -	proto.RegisterExtension(E_NoDefaultUint32)
> -	proto.RegisterExtension(E_NoDefaultUint64)
> -	proto.RegisterExtension(E_NoDefaultSint32)
> -	proto.RegisterExtension(E_NoDefaultSint64)
> -	proto.RegisterExtension(E_NoDefaultFixed32)
> -	proto.RegisterExtension(E_NoDefaultFixed64)
> -	proto.RegisterExtension(E_NoDefaultSfixed32)
> -	proto.RegisterExtension(E_NoDefaultSfixed64)
> -	proto.RegisterExtension(E_NoDefaultBool)
> -	proto.RegisterExtension(E_NoDefaultString)
> -	proto.RegisterExtension(E_NoDefaultBytes)
> -	proto.RegisterExtension(E_NoDefaultEnum)
> -	proto.RegisterExtension(E_DefaultDouble)
> -	proto.RegisterExtension(E_DefaultFloat)
> -	proto.RegisterExtension(E_DefaultInt32)
> -	proto.RegisterExtension(E_DefaultInt64)
> -	proto.RegisterExtension(E_DefaultUint32)
> -	proto.RegisterExtension(E_DefaultUint64)
> -	proto.RegisterExtension(E_DefaultSint32)
> -	proto.RegisterExtension(E_DefaultSint64)
> -	proto.RegisterExtension(E_DefaultFixed32)
> -	proto.RegisterExtension(E_DefaultFixed64)
> -	proto.RegisterExtension(E_DefaultSfixed32)
> -	proto.RegisterExtension(E_DefaultSfixed64)
> -	proto.RegisterExtension(E_DefaultBool)
> -	proto.RegisterExtension(E_DefaultString)
> -	proto.RegisterExtension(E_DefaultBytes)
> -	proto.RegisterExtension(E_DefaultEnum)
> -	proto.RegisterExtension(E_X201)
> -	proto.RegisterExtension(E_X202)
> -	proto.RegisterExtension(E_X203)
> -	proto.RegisterExtension(E_X204)
> -	proto.RegisterExtension(E_X205)
> -	proto.RegisterExtension(E_X206)
> -	proto.RegisterExtension(E_X207)
> -	proto.RegisterExtension(E_X208)
> -	proto.RegisterExtension(E_X209)
> -	proto.RegisterExtension(E_X210)
> -	proto.RegisterExtension(E_X211)
> -	proto.RegisterExtension(E_X212)
> -	proto.RegisterExtension(E_X213)
> -	proto.RegisterExtension(E_X214)
> -	proto.RegisterExtension(E_X215)
> -	proto.RegisterExtension(E_X216)
> -	proto.RegisterExtension(E_X217)
> -	proto.RegisterExtension(E_X218)
> -	proto.RegisterExtension(E_X219)
> -	proto.RegisterExtension(E_X220)
> -	proto.RegisterExtension(E_X221)
> -	proto.RegisterExtension(E_X222)
> -	proto.RegisterExtension(E_X223)
> -	proto.RegisterExtension(E_X224)
> -	proto.RegisterExtension(E_X225)
> -	proto.RegisterExtension(E_X226)
> -	proto.RegisterExtension(E_X227)
> -	proto.RegisterExtension(E_X228)
> -	proto.RegisterExtension(E_X229)
> -	proto.RegisterExtension(E_X230)
> -	proto.RegisterExtension(E_X231)
> -	proto.RegisterExtension(E_X232)
> -	proto.RegisterExtension(E_X233)
> -	proto.RegisterExtension(E_X234)
> -	proto.RegisterExtension(E_X235)
> -	proto.RegisterExtension(E_X236)
> -	proto.RegisterExtension(E_X237)
> -	proto.RegisterExtension(E_X238)
> -	proto.RegisterExtension(E_X239)
> -	proto.RegisterExtension(E_X240)
> -	proto.RegisterExtension(E_X241)
> -	proto.RegisterExtension(E_X242)
> -	proto.RegisterExtension(E_X243)
> -	proto.RegisterExtension(E_X244)
> -	proto.RegisterExtension(E_X245)
> -	proto.RegisterExtension(E_X246)
> -	proto.RegisterExtension(E_X247)
> -	proto.RegisterExtension(E_X248)
> -	proto.RegisterExtension(E_X249)
> -	proto.RegisterExtension(E_X250)
> -}
> -
> -func init() { proto.RegisterFile("test.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 4453 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x5a, 0xc9, 0x77, 0xdb, 0x48,
> -	0x7a, 0x37, 0xc0, 0xfd, 0x23, 0x25, 0x42, 0x65, 0xb5, 0x9b, 0x96, 0xbc, 0xc0, 0x9c, 0xe9, 0x6e,
> -	0x7a, 0xd3, 0x48, 0x20, 0x44, 0xdb, 0x74, 0xa7, 0xdf, 0xf3, 0x42, 0xca, 0x7a, 0x63, 0x89, 0x0a,
> -	0xa4, 0xee, 0x7e, 0xd3, 0x39, 0xf0, 0x51, 0x22, 0x44, 0xb3, 0x4d, 0x02, 0x34, 0x09, 0xc5, 0x52,
> -	0x72, 0xe9, 0x4b, 0x72, 0xcd, 0x76, 0xc9, 0x35, 0xa7, 0x9c, 0x92, 0xbc, 0x97, 0x7f, 0x22, 0xe9,
> -	0xee, 0x59, 0x7b, 0xd6, 0xac, 0x93, 0x7d, 0x99, 0xec, 0xdb, 0x4c, 0x92, 0x4b, 0xcf, 0xab, 0xaf,
> -	0x0a, 0x40, 0x01, 0x24, 0x20, 0xf9, 0x24, 0x56, 0xd5, 0xef, 0xf7, 0xd5, 0xf6, 0xab, 0xef, 0xab,
> -	0xaf, 0x20, 0x00, 0xc7, 0x9c, 0x38, 0x2b, 0xa3, 0xb1, 0xed, 0xd8, 0x24, 0x4b, 0x7f, 0x77, 0x3b,
> -	0x4e, 0xa7, 0x7c, 0x1d, 0xd2, 0x1b, 0x76, 0xc3, 0x3a, 0x1a, 0x92, 0xab, 0x90, 0x38, 0xb4, 0xed,
> -	0x92, 0xa4, 0xca, 0x95, 0x79, 0x6d, 0x6e, 0xc5, 0x45, 0xac, 0x34, 0x5b, 0x2d, 0x83, 0xb6, 0x94,
> -	0xef, 0x40, 0x7e, 0xc3, 0xde, 0x33, 0x27, 0x4e, 0xb3, 0x6f, 0x0e, 0xba, 0x64, 0x11, 0x52, 0x4f,
> -	0x3b, 0xfb, 0xe6, 0x00, 0x19, 0x39, 0x83, 0x15, 0x08, 0x81, 0xe4, 0xde, 0xc9, 0xc8, 0x2c, 0xc9,
> -	0x58, 0x89, 0xbf, 0xcb, 0xbf, 0x72, 0x85, 0x76, 0x42, 0x99, 0xe4, 0x3a, 0x24, 0xbf, 0xdc, 0xb7,
> -	0xba, 0xbc, 0x97, 0xd7, 0xfc, 0x5e, 0x58, 0xfb, 0xca, 0x97, 0x37, 0xb7, 0x1f, 0x1b, 0x08, 0xa1,
> -	0xf6, 0xf7, 0x3a, 0xfb, 0x03, 0x6a, 0x4a, 0xa2, 0xf6, 0xb1, 0x40, 0x6b, 0x77, 0x3a, 0xe3, 0xce,
> -	0xb0, 0x94, 0x50, 0xa5, 0x4a, 0xca, 0x60, 0x05, 0x72, 0x1f, 0xe6, 0x0c, 0xf3, 0xc5, 0x51, 0x7f,
> -	0x6c, 0x76, 0x71, 0x70, 0xa5, 0xa4, 0x2a, 0x57, 0xf2, 0xd3, 0xf6, 0xb1, 0xd1, 0x08, 0x62, 0x19,
> -	0x79, 0x64, 0x76, 0x1c, 0x97, 0x9c, 0x52, 0x13, 0xb1, 0x64, 0x01, 0x4b, 0xc9, 0xad, 0x91, 0xd3,
> -	0xb7, 0xad, 0xce, 0x80, 0x91, 0xd3, 0xaa, 0x14, 0x43, 0x0e, 0x60, 0xc9, 0x9b, 0x50, 0x6c, 0xb6,
> -	0x1f, 0xda, 0xf6, 0xa0, 0x3d, 0xe6, 0x23, 0x2a, 0x81, 0x2a, 0x57, 0xb2, 0xc6, 0x5c, 0x93, 0xd6,
> -	0xba, 0xc3, 0x24, 0x15, 0x50, 0x9a, 0xed, 0x4d, 0xcb, 0xa9, 0x6a, 0x3e, 0x30, 0xaf, 0xca, 0x95,
> -	0x94, 0x31, 0xdf, 0xc4, 0xea, 0x29, 0x64, 0x4d, 0xf7, 0x91, 0x05, 0x55, 0xae, 0x24, 0x18, 0xb2,
> -	0xa6, 0x7b, 0xc8, 0x5b, 0x40, 0x9a, 0xed, 0x66, 0xff, 0xd8, 0xec, 0x8a, 0x56, 0xe7, 0x54, 0xb9,
> -	0x92, 0x31, 0x94, 0x26, 0x6f, 0x98, 0x81, 0x16, 0x2d, 0xcf, 0xab, 0x72, 0x25, 0xed, 0xa2, 0x05,
> -	0xdb, 0x37, 0x60, 0xa1, 0xd9, 0x7e, 0xb7, 0x1f, 0x1c, 0x70, 0x51, 0x95, 0x2b, 0x73, 0x46, 0xb1,
> -	0xc9, 0xea, 0xa7, 0xb1, 0xa2, 0x61, 0x45, 0x95, 0x2b, 0x49, 0x8e, 0x15, 0xec, 0xe2, 0xec, 0x9a,
> -	0x03, 0xbb, 0xe3, 0xf8, 0xd0, 0x05, 0x55, 0xae, 0xc8, 0xc6, 0x7c, 0x13, 0xab, 0x83, 0x56, 0x1f,
> -	0xdb, 0x47, 0xfb, 0x03, 0xd3, 0x87, 0x12, 0x55, 0xae, 0x48, 0x46, 0xb1, 0xc9, 0xea, 0x83, 0xd8,
> -	0x5d, 0x67, 0xdc, 0xb7, 0x7a, 0x3e, 0xf6, 0x3c, 0xea, 0xb7, 0xd8, 0x64, 0xf5, 0xc1, 0x11, 0x3c,
> -	0x3c, 0x71, 0xcc, 0x89, 0x0f, 0x35, 0x55, 0xb9, 0x52, 0x30, 0xe6, 0x9b, 0x58, 0x1d, 0xb2, 0x1a,
> -	0x5a, 0x83, 0x43, 0x55, 0xae, 0x2c, 0x50, 0xab, 0x33, 0xd6, 0x60, 0x37, 0xb4, 0x06, 0x3d, 0x55,
> -	0xae, 0x10, 0x8e, 0x15, 0xd6, 0x40, 0xd4, 0x0c, 0x13, 0x62, 0x69, 0x51, 0x4d, 0x08, 0x9a, 0x61,
> -	0x95, 0x41, 0xcd, 0x70, 0xe0, 0x6b, 0x6a, 0x42, 0xd4, 0x4c, 0x08, 0x89, 0x9d, 0x73, 0xe4, 0x05,
> -	0x35, 0x21, 0x6a, 0x86, 0x23, 0x43, 0x9a, 0xe1, 0xd8, 0xd7, 0xd5, 0x44, 0x50, 0x33, 0x53, 0x68,
> -	0xd1, 0x72, 0x49, 0x4d, 0x04, 0x35, 0xc3, 0xd1, 0x41, 0xcd, 0x70, 0xf0, 0x45, 0x35, 0x11, 0xd0,
> -	0x4c, 0x18, 0x2b, 0x1a, 0x5e, 0x52, 0x13, 0x01, 0xcd, 0x88, 0xb3, 0x73, 0x35, 0xc3, 0xa1, 0xcb,
> -	0x6a, 0x42, 0xd4, 0x8c, 0x68, 0xd5, 0xd3, 0x0c, 0x87, 0x5e, 0x52, 0x13, 0x01, 0xcd, 0x88, 0x58,
> -	0x4f, 0x33, 0x1c, 0x7b, 0x59, 0x4d, 0x04, 0x34, 0xc3, 0xb1, 0xd7, 0x45, 0xcd, 0x70, 0xe8, 0xc7,
> -	0x92, 0x9a, 0x10, 0x45, 0xc3, 0xa1, 0x37, 0x03, 0xa2, 0xe1, 0xd8, 0x4f, 0x28, 0x56, 0x54, 0x4d,
> -	0x18, 0x2c, 0xae, 0xc2, 0xa7, 0x14, 0x2c, 0xca, 0x86, 0x83, 0x7d, 0xd9, 0xd8, 0xdc, 0x05, 0x95,
> -	0xae, 0xa8, 0x92, 0x27, 0x1b, 0xd7, 0x2f, 0x89, 0xb2, 0xf1, 0x80, 0x57, 0xd1, 0xd5, 0x72, 0xd9,
> -	0x4c, 0x21, 0x6b, 0xba, 0x8f, 0x54, 0x55, 0xc9, 0x97, 0x8d, 0x87, 0x0c, 0xc8, 0xc6, 0xc3, 0x5e,
> -	0x53, 0x25, 0x51, 0x36, 0x33, 0xd0, 0xa2, 0xe5, 0xb2, 0x2a, 0x89, 0xb2, 0xf1, 0xd0, 0xa2, 0x6c,
> -	0x3c, 0xf0, 0x17, 0x54, 0x49, 0x90, 0xcd, 0x34, 0x56, 0x34, 0xfc, 0x45, 0x55, 0x12, 0x64, 0x13,
> -	0x9c, 0x1d, 0x93, 0x8d, 0x07, 0x7d, 0x43, 0x95, 0x7c, 0xd9, 0x04, 0xad, 0x72, 0xd9, 0x78, 0xd0,
> -	0x37, 0x55, 0x49, 0x90, 0x4d, 0x10, 0xcb, 0x65, 0xe3, 0x61, 0xdf, 0xc2, 0xf8, 0xe6, 0xca, 0xc6,
> -	0xc3, 0x0a, 0xb2, 0xf1, 0xa0, 0xbf, 0x43, 0x63, 0xa1, 0x27, 0x1b, 0x0f, 0x2a, 0xca, 0xc6, 0xc3,
> -	0xfe, 0x2e, 0xc5, 0xfa, 0xb2, 0x99, 0x06, 0x8b, 0xab, 0xf0, 0x7b, 0x14, 0xec, 0xcb, 0xc6, 0x03,
> -	0xaf, 0xe0, 0x20, 0xa8, 0x6c, 0xba, 0xe6, 0x61, 0xe7, 0x68, 0x40, 0x25, 0x56, 0xa1, 0xba, 0xa9,
> -	0x27, 0x9d, 0xf1, 0x91, 0x49, 0x47, 0x62, 0xdb, 0x83, 0xc7, 0x6e, 0x1b, 0x59, 0xa1, 0xc6, 0x99,
> -	0x7c, 0x7c, 0xc2, 0x75, 0xaa, 0x9f, 0xba, 0x5c, 0xd5, 0x8c, 0x22, 0xd3, 0xd0, 0x34, 0xbe, 0xa6,
> -	0x0b, 0xf8, 0x1b, 0x54, 0x45, 0x75, 0xb9, 0xa6, 0x33, 0x7c, 0x4d, 0xf7, 0xf1, 0x55, 0x38, 0xef,
> -	0x4b, 0xc9, 0x67, 0xdc, 0xa4, 0x5a, 0xaa, 0x27, 0xaa, 0xda, 0xaa, 0xb1, 0xe0, 0x0a, 0x6a, 0x16,
> -	0x29, 0xd0, 0xcd, 0x2d, 0x2a, 0xa9, 0x7a, 0xa2, 0xa6, 0x7b, 0x24, 0xb1, 0x27, 0x8d, 0xca, 0x90,
> -	0x0b, 0xcb, 0xe7, 0xdc, 0xa6, 0xca, 0xaa, 0x27, 0xab, 0xda, 0xea, 0xaa, 0xa1, 0x70, 0x7d, 0xcd,
> -	0xe0, 0x04, 0xfa, 0x59, 0xa1, 0x0a, 0xab, 0x27, 0x6b, 0xba, 0xc7, 0x09, 0xf6, 0xb3, 0xe0, 0x0a,
> -	0xcd, 0xa7, 0x7c, 0x89, 0x2a, 0xad, 0x9e, 0xae, 0xae, 0xe9, 0x6b, 0xeb, 0xf7, 0x8c, 0x22, 0x53,
> -	0x9c, 0xcf, 0xd1, 0x69, 0x3f, 0x5c, 0x72, 0x3e, 0x69, 0x95, 0x6a, 0xae, 0x9e, 0xd6, 0xee, 0xac,
> -	0xdd, 0xd5, 0xee, 0x1a, 0x0a, 0xd7, 0x9e, 0xcf, 0x7a, 0x87, 0xb2, 0xb8, 0xf8, 0x7c, 0xd6, 0x1a,
> -	0x55, 0x5f, 0x5d, 0x79, 0x66, 0x0e, 0x06, 0xf6, 0x2d, 0xb5, 0xfc, 0xd2, 0x1e, 0x0f, 0xba, 0xd7,
> -	0xca, 0x60, 0x28, 0x5c, 0x8f, 0x62, 0xaf, 0x0b, 0xae, 0x20, 0x7d, 0xfa, 0xaf, 0xd1, 0x7b, 0x58,
> -	0xa1, 0x9e, 0x79, 0xd8, 0xef, 0x59, 0xf6, 0xc4, 0x34, 0x8a, 0x4c, 0x9a, 0xa1, 0x35, 0xd9, 0x0d,
> -	0xaf, 0xe3, 0xaf, 0x53, 0xda, 0x42, 0x3d, 0x71, 0xbb, 0xaa, 0xd1, 0x9e, 0x66, 0xad, 0xe3, 0x6e,
> -	0x78, 0x1d, 0x7f, 0x83, 0x72, 0x48, 0x3d, 0x71, 0xbb, 0xa6, 0x73, 0x8e, 0xb8, 0x8e, 0x77, 0xe0,
> -	0x42, 0x28, 0x2e, 0xb6, 0x47, 0x9d, 0x83, 0xe7, 0x66, 0xb7, 0xa4, 0xd1, 0xf0, 0xf8, 0x50, 0x56,
> -	0x24, 0xe3, 0x7c, 0x20, 0x44, 0xee, 0x60, 0x33, 0xb9, 0x07, 0xaf, 0x87, 0x03, 0xa5, 0xcb, 0xac,
> -	0xd2, 0x78, 0x89, 0xcc, 0xc5, 0x60, 0xcc, 0x0c, 0x51, 0x05, 0x07, 0xec, 0x52, 0x75, 0x1a, 0x40,
> -	0x7d, 0xaa, 0xef, 0x89, 0x39, 0xf5, 0x67, 0xe0, 0xe2, 0x74, 0x28, 0x75, 0xc9, 0xeb, 0x34, 0xa2,
> -	0x22, 0xf9, 0x42, 0x38, 0xaa, 0x4e, 0xd1, 0x67, 0xf4, 0x5d, 0xa3, 0x21, 0x56, 0xa4, 0x4f, 0xf5,
> -	0x7e, 0x1f, 0x4a, 0x53, 0xc1, 0xd6, 0x65, 0xdf, 0xa1, 0x31, 0x17, 0xd9, 0xaf, 0x85, 0xe2, 0x6e,
> -	0x98, 0x3c, 0xa3, 0xeb, 0xbb, 0x34, 0x08, 0x0b, 0xe4, 0xa9, 0x9e, 0x71, 0xc9, 0x82, 0xe1, 0xd8,
> -	0xe5, 0xde, 0xa3, 0x51, 0x99, 0x2f, 0x59, 0x20, 0x32, 0x8b, 0xfd, 0x86, 0xe2, 0xb3, 0xcb, 0xad,
> -	0xd3, 0x30, 0xcd, 0xfb, 0x0d, 0x86, 0x6a, 0x4e, 0x7e, 0x9b, 0x92, 0x77, 0x67, 0xcf, 0xf8, 0xc7,
> -	0x09, 0x1a, 0x60, 0x39, 0x7b, 0x77, 0xd6, 0x94, 0x3d, 0xf6, 0x8c, 0x29, 0xff, 0x84, 0xb2, 0x89,
> -	0xc0, 0x9e, 0x9a, 0xf3, 0x63, 0x98, 0x73, 0x6f, 0x75, 0xbd, 0xb1, 0x7d, 0x34, 0x2a, 0x35, 0x55,
> -	0xb9, 0x02, 0xda, 0x95, 0xa9, 0xec, 0xc7, 0xbd, 0xe4, 0x6d, 0x50, 0x94, 0x11, 0x24, 0x31, 0x2b,
> -	0xcc, 0x2e, 0xb3, 0xb2, 0xa3, 0x26, 0x22, 0xac, 0x30, 0x94, 0x67, 0x45, 0x20, 0x51, 0x2b, 0xae,
> -	0xd3, 0x67, 0x56, 0x3e, 0x50, 0xa5, 0x99, 0x56, 0xdc, 0x10, 0xc0, 0xad, 0x04, 0x48, 0x4b, 0xeb,
> -	0x7e, 0xbe, 0x85, 0xed, 0xe4, 0x8b, 0xe1, 0x04, 0x6c, 0x03, 0xef, 0xcf, 0xc1, 0x4a, 0x46, 0x13,
> -	0x06, 0x37, 0x4d, 0xfb, 0xd9, 0x08, 0x5a, 0x60, 0x34, 0xd3, 0xb4, 0x9f, 0x9b, 0x41, 0x2b, 0xff,
> -	0xa6, 0x04, 0x49, 0x9a, 0x4f, 0x92, 0x2c, 0x24, 0xdf, 0x6b, 0x6d, 0x3e, 0x56, 0xce, 0xd1, 0x5f,
> -	0x0f, 0x5b, 0xad, 0xa7, 0x8a, 0x44, 0x72, 0x90, 0x7a, 0xf8, 0x95, 0xbd, 0xc6, 0xae, 0x22, 0x93,
> -	0x22, 0xe4, 0x9b, 0x9b, 0xdb, 0x1b, 0x0d, 0x63, 0xc7, 0xd8, 0xdc, 0xde, 0x53, 0x12, 0xb4, 0xad,
> -	0xf9, 0xb4, 0xf5, 0x60, 0x4f, 0x49, 0x92, 0x0c, 0x24, 0x68, 0x5d, 0x8a, 0x00, 0xa4, 0x77, 0xf7,
> -	0x8c, 0xcd, 0xed, 0x0d, 0x25, 0x4d, 0xad, 0xec, 0x6d, 0x6e, 0x35, 0x94, 0x0c, 0x45, 0xee, 0xbd,
> -	0xbb, 0xf3, 0xb4, 0xa1, 0x64, 0xe9, 0xcf, 0x07, 0x86, 0xf1, 0xe0, 0x2b, 0x4a, 0x8e, 0x92, 0xb6,
> -	0x1e, 0xec, 0x28, 0x80, 0xcd, 0x0f, 0x1e, 0x3e, 0x6d, 0x28, 0x79, 0x52, 0x80, 0x6c, 0xf3, 0xdd,
> -	0xed, 0x47, 0x7b, 0x9b, 0xad, 0x6d, 0xa5, 0x50, 0x3e, 0x81, 0x12, 0x5b, 0xe6, 0xc0, 0x2a, 0xb2,
> -	0xa4, 0xf0, 0x1d, 0x48, 0xb1, 0x9d, 0x91, 0x50, 0x25, 0x95, 0xf0, 0xce, 0x4c, 0x53, 0x56, 0xd8,
> -	0x1e, 0x31, 0xda, 0xd2, 0x65, 0x48, 0xb1, 0x55, 0x5a, 0x84, 0x14, 0x5b, 0x1d, 0x19, 0x53, 0x45,
> -	0x56, 0x28, 0xff, 0x96, 0x0c, 0xb0, 0x61, 0xef, 0x3e, 0xef, 0x8f, 0x30, 0x21, 0xbf, 0x0c, 0x30,
> -	0x79, 0xde, 0x1f, 0xb5, 0x51, 0xf5, 0x3c, 0xa9, 0xcc, 0xd1, 0x1a, 0xf4, 0x77, 0xe4, 0x1a, 0x14,
> -	0xb0, 0xf9, 0x90, 0x79, 0x21, 0xcc, 0x25, 0x33, 0x46, 0x9e, 0xd6, 0x71, 0xc7, 0x14, 0x84, 0xd4,
> -	0x74, 0x4c, 0x21, 0xd3, 0x02, 0xa4, 0xa6, 0x93, 0xab, 0x80, 0xc5, 0xf6, 0x04, 0x23, 0x0a, 0xa6,
> -	0x8d, 0x39, 0x03, 0xfb, 0x65, 0x31, 0x86, 0xbc, 0x0d, 0xd8, 0x27, 0x9b, 0x77, 0x71, 0xfa, 0x74,
> -	0xb8, 0xc3, 0x5d, 0xa1, 0x3f, 0xd8, 0x6c, 0x7d, 0xc2, 0x52, 0x0b, 0x72, 0x5e, 0x3d, 0xed, 0x0b,
> -	0x6b, 0xf9, 0x8c, 0x14, 0x9c, 0x11, 0x60, 0x95, 0x37, 0x25, 0x06, 0xe0, 0xa3, 0x59, 0xc0, 0xd1,
> -	0x30, 0x12, 0x1b, 0x4e, 0xf9, 0x32, 0xcc, 0x6d, 0xdb, 0x16, 0x3b, 0xbd, 0xb8, 0x4a, 0x05, 0x90,
> -	0x3a, 0x25, 0x09, 0xb3, 0x27, 0xa9, 0x53, 0xbe, 0x02, 0x20, 0xb4, 0x29, 0x20, 0xed, 0xb3, 0x36,
> -	0xf4, 0x01, 0xd2, 0x7e, 0xf9, 0x26, 0xa4, 0xb7, 0x3a, 0xc7, 0x7b, 0x9d, 0x1e, 0xb9, 0x06, 0x30,
> -	0xe8, 0x4c, 0x9c, 0xf6, 0x21, 0xee, 0xc3, 0xe7, 0x9f, 0x7f, 0xfe, 0xb9, 0x84, 0x97, 0xbd, 0x1c,
> -	0xad, 0x65, 0xfb, 0xf1, 0x02, 0xa0, 0x35, 0xe8, 0x6e, 0x99, 0x93, 0x49, 0xa7, 0x67, 0x92, 0x2a,
> -	0xa4, 0x2d, 0x73, 0x42, 0xa3, 0x9d, 0x84, 0xef, 0x08, 0xcb, 0xfe, 0x2a, 0xf8, 0xa8, 0x95, 0x6d,
> -	0x84, 0x18, 0x1c, 0x4a, 0x14, 0x48, 0x58, 0x47, 0x43, 0x7c, 0x27, 0x49, 0x19, 0xf4, 0xe7, 0xd2,
> -	0x25, 0x48, 0x33, 0x0c, 0x21, 0x90, 0xb4, 0x3a, 0x43, 0xb3, 0xc4, 0xfa, 0xc5, 0xdf, 0xe5, 0x5f,
> -	0x95, 0x00, 0xb6, 0xcd, 0x97, 0x67, 0xe8, 0xd3, 0x47, 0xc5, 0xf4, 0x99, 0x60, 0x7d, 0xde, 0x8f,
> -	0xeb, 0x93, 0xea, 0xec, 0xd0, 0xb6, 0xbb, 0x6d, 0xb6, 0xc5, 0xec, 0x49, 0x27, 0x47, 0x6b, 0x70,
> -	0xd7, 0xca, 0x1f, 0x40, 0x61, 0xd3, 0xb2, 0xcc, 0xb1, 0x3b, 0x26, 0x02, 0xc9, 0x67, 0xf6, 0xc4,
> -	0xe1, 0x6f, 0x4b, 0xf8, 0x9b, 0x94, 0x20, 0x39, 0xb2, 0xc7, 0x0e, 0x9b, 0x67, 0x3d, 0xa9, 0xaf,
> -	0xae, 0xae, 0x1a, 0x58, 0x43, 0x2e, 0x41, 0xee, 0xc0, 0xb6, 0x2c, 0xf3, 0x80, 0x4e, 0x22, 0x81,
> -	0x69, 0x8d, 0x5f, 0x51, 0xfe, 0x65, 0x09, 0x0a, 0x2d, 0xe7, 0x99, 0x6f, 0x5c, 0x81, 0xc4, 0x73,
> -	0xf3, 0x04, 0x87, 0x97, 0x30, 0xe8, 0x4f, 0x7a, 0x54, 0x7e, 0xbe, 0x33, 0x38, 0x62, 0x6f, 0x4d,
> -	0x05, 0x83, 0x15, 0xc8, 0x05, 0x48, 0xbf, 0x34, 0xfb, 0xbd, 0x67, 0x0e, 0xda, 0x94, 0x0d, 0x5e,
> -	0x22, 0xb7, 0x20, 0xd5, 0xa7, 0x83, 0x2d, 0x25, 0x71, 0xbd, 0x2e, 0xf8, 0xeb, 0x25, 0xce, 0xc1,
> -	0x60, 0xa0, 0x1b, 0xd9, 0x6c, 0x57, 0xf9, 0xe8, 0xa3, 0x8f, 0x3e, 0x92, 0xcb, 0x87, 0xb0, 0xe8,
> -	0x1e, 0xde, 0xc0, 0x64, 0xb7, 0xa1, 0x34, 0x30, 0xed, 0xf6, 0x61, 0xdf, 0xea, 0x0c, 0x06, 0x27,
> -	0xed, 0x97, 0xb6, 0xd5, 0xee, 0x58, 0x6d, 0x7b, 0x72, 0xd0, 0x19, 0xe3, 0x02, 0x44, 0x77, 0xb1,
> -	0x38, 0x30, 0xed, 0x26, 0xa3, 0xbd, 0x6f, 0x5b, 0x0f, 0xac, 0x16, 0xe5, 0x94, 0xff, 0x20, 0x09,
> -	0xb9, 0xad, 0x13, 0xd7, 0xfa, 0x22, 0xa4, 0x0e, 0xec, 0x23, 0x8b, 0xad, 0x65, 0xca, 0x60, 0x05,
> -	0x6f, 0x8f, 0x64, 0x61, 0x8f, 0x16, 0x21, 0xf5, 0xe2, 0xc8, 0x76, 0x4c, 0x9c, 0x6e, 0xce, 0x60,
> -	0x05, 0xba, 0x5a, 0x23, 0xd3, 0x29, 0x25, 0x31, 0xb9, 0xa5, 0x3f, 0xfd, 0xf9, 0xa7, 0xce, 0x30,
> -	0x7f, 0xb2, 0x02, 0x69, 0x9b, 0xae, 0xfe, 0xa4, 0x94, 0xc6, 0x77, 0x35, 0x01, 0x2e, 0xee, 0x8a,
> -	0xc1, 0x51, 0x64, 0x13, 0x16, 0x5e, 0x9a, 0xed, 0xe1, 0xd1, 0xc4, 0x69, 0xf7, 0xec, 0x76, 0xd7,
> -	0x34, 0x47, 0xe6, 0xb8, 0x34, 0x87, 0x3d, 0x09, 0x3e, 0x61, 0xd6, 0x42, 0x1a, 0xf3, 0x2f, 0xcd,
> -	0xad, 0xa3, 0x89, 0xb3, 0x61, 0x3f, 0x46, 0x16, 0xa9, 0x42, 0x6e, 0x6c, 0x52, 0x4f, 0x40, 0x07,
> -	0x5b, 0x08, 0xf7, 0x1e, 0xa0, 0x66, 0xc7, 0xe6, 0x08, 0x2b, 0xc8, 0x3a, 0x64, 0xf7, 0xfb, 0xcf,
> -	0xcd, 0xc9, 0x33, 0xb3, 0x5b, 0xca, 0xa8, 0x52, 0x65, 0x5e, 0xbb, 0xe8, 0x73, 0xbc, 0x65, 0x5d,
> -	0x79, 0x64, 0x0f, 0xec, 0xb1, 0xe1, 0x41, 0xc9, 0x7d, 0xc8, 0x4d, 0xec, 0xa1, 0xc9, 0xf4, 0x9d,
> -	0xc5, 0xa0, 0x7a, 0x79, 0x16, 0x6f, 0xd7, 0x1e, 0x9a, 0xae, 0x07, 0x73, 0xf1, 0x64, 0x99, 0x0d,
> -	0x74, 0x9f, 0x5e, 0x9d, 0x4b, 0x80, 0x4f, 0x03, 0x74, 0x40, 0x78, 0x95, 0x26, 0x4b, 0x74, 0x40,
> -	0xbd, 0x43, 0x7a, 0x23, 0x2a, 0xe5, 0x31, 0xaf, 0xf4, 0xca, 0x4b, 0xb7, 0x20, 0xe7, 0x19, 0xf4,
> -	0x5d, 0x1f, 0x73, 0x37, 0x39, 0xf4, 0x07, 0xcc, 0xf5, 0x31, 0x5f, 0xf3, 0x06, 0xa4, 0x70, 0xd8,
> -	0x34, 0x42, 0x19, 0x0d, 0x1a, 0x10, 0x73, 0x90, 0xda, 0x30, 0x1a, 0x8d, 0x6d, 0x45, 0xc2, 0xd8,
> -	0xf8, 0xf4, 0xdd, 0x86, 0x22, 0x0b, 0x8a, 0xfd, 0x6d, 0x09, 0x12, 0x8d, 0x63, 0x54, 0x0b, 0x9d,
> -	0x86, 0x7b, 0xa2, 0xe9, 0x6f, 0xad, 0x06, 0xc9, 0xa1, 0x3d, 0x36, 0xc9, 0xf9, 0x19, 0xb3, 0x2c,
> -	0xf5, 0x70, 0xbf, 0x84, 0x57, 0xe4, 0xc6, 0xb1, 0x63, 0x20, 0x5e, 0x7b, 0x0b, 0x92, 0x8e, 0x79,
> -	0xec, 0xcc, 0xe6, 0x3d, 0x63, 0x1d, 0x50, 0x80, 0x76, 0x13, 0xd2, 0xd6, 0xd1, 0x70, 0xdf, 0x1c,
> -	0xcf, 0x86, 0xf6, 0x71, 0x7a, 0x1c, 0x52, 0x7e, 0x0f, 0x94, 0x47, 0xf6, 0x70, 0x34, 0x30, 0x8f,
> -	0x1b, 0xc7, 0x8e, 0x69, 0x4d, 0xfa, 0xb6, 0x45, 0xf5, 0x7c, 0xd8, 0x1f, 0xa3, 0x17, 0xc1, 0xb7,
> -	0x62, 0x2c, 0xd0, 0x53, 0x3d, 0x31, 0x0f, 0x6c, 0xab, 0xcb, 0x1d, 0x26, 0x2f, 0x51, 0xb4, 0xf3,
> -	0xac, 0x3f, 0xa6, 0x0e, 0x84, 0xfa, 0x79, 0x56, 0x28, 0x6f, 0x40, 0x91, 0xe7, 0x18, 0x13, 0xde,
> -	0x71, 0xf9, 0x06, 0x14, 0xdc, 0x2a, 0x7c, 0x38, 0xcf, 0x42, 0xf2, 0x83, 0x86, 0xd1, 0x52, 0xce,
> -	0xd1, 0x65, 0x6d, 0x6d, 0x37, 0x14, 0x89, 0xfe, 0xd8, 0x7b, 0xbf, 0x15, 0x58, 0xca, 0x4b, 0x50,
> -	0xf0, 0xc6, 0xbe, 0x6b, 0x3a, 0xd8, 0x42, 0x03, 0x42, 0xa6, 0x2e, 0x67, 0xa5, 0x72, 0x06, 0x52,
> -	0x8d, 0xe1, 0xc8, 0x39, 0x29, 0xff, 0x22, 0xe4, 0x39, 0xe8, 0x69, 0x7f, 0xe2, 0x90, 0x3b, 0x90,
> -	0x19, 0xf2, 0xf9, 0x4a, 0x78, 0xdd, 0x13, 0x35, 0xe5, 0xe3, 0xdc, 0xdf, 0x86, 0x8b, 0x5e, 0xaa,
> -	0x42, 0x46, 0xf0, 0xa5, 0xfc, 0xa8, 0xcb, 0xe2, 0x51, 0x67, 0x4e, 0x21, 0x21, 0x38, 0x85, 0xf2,
> -	0x16, 0x64, 0x58, 0x04, 0x9c, 0x60, 0x54, 0x67, 0xa9, 0x22, 0x13, 0x13, 0xdb, 0xf9, 0x3c, 0xab,
> -	0x63, 0x17, 0x95, 0xab, 0x90, 0x47, 0xc1, 0x72, 0x04, 0x73, 0x9d, 0x80, 0x55, 0x4c, 0x6e, 0xbf,
> -	0x9f, 0x82, 0xac, 0xbb, 0x52, 0x64, 0x19, 0xd2, 0x2c, 0x3f, 0x43, 0x53, 0xee, 0xfb, 0x41, 0x0a,
> -	0x33, 0x32, 0xb2, 0x0c, 0x19, 0x9e, 0x83, 0x71, 0xef, 0x2e, 0x57, 0x35, 0x23, 0xcd, 0x72, 0x2e,
> -	0xaf, 0xb1, 0xa6, 0xa3, 0x63, 0x62, 0x2f, 0x03, 0x69, 0x96, 0x55, 0x11, 0x15, 0x72, 0x5e, 0x1e,
> -	0x85, 0xfe, 0x98, 0x3f, 0x03, 0x64, 0xdd, 0xc4, 0x49, 0x40, 0xd4, 0x74, 0xf4, 0x58, 0x3c, 0xe7,
> -	0xcf, 0x36, 0xfd, 0xeb, 0x49, 0xd6, 0xcd, 0x86, 0xf0, 0xf9, 0xde, 0x4d, 0xf0, 0x33, 0x3c, 0xff,
> -	0xf1, 0x01, 0x35, 0x1d, 0x5d, 0x82, 0x9b, 0xcd, 0x67, 0x78, 0x8e, 0x43, 0xae, 0xd2, 0x21, 0x62,
> -	0xce, 0x82, 0x47, 0xdf, 0x4f, 0xdd, 0xd3, 0x2c, 0x93, 0x21, 0xd7, 0xa8, 0x05, 0x96, 0x98, 0xe0,
> -	0xb9, 0xf4, 0xf3, 0xf4, 0x0c, 0xcf, 0x57, 0xc8, 0x4d, 0x0a, 0x61, 0xcb, 0x5f, 0x82, 0x88, 0xa4,
> -	0x3c, 0xc3, 0x93, 0x72, 0xa2, 0xd2, 0x0e, 0xd1, 0x3d, 0xa0, 0x4b, 0x10, 0x12, 0xf0, 0x34, 0x4b,
> -	0xc0, 0xc9, 0x15, 0x34, 0xc7, 0x26, 0x55, 0xf0, 0x93, 0xed, 0x0c, 0x4f, 0x70, 0xfc, 0x76, 0xbc,
> -	0xb2, 0x79, 0x89, 0x75, 0x86, 0xa7, 0x30, 0xa4, 0x46, 0xf7, 0x8b, 0xea, 0xbb, 0x34, 0x8f, 0x4e,
> -	0xb0, 0xe4, 0x0b, 0xcf, 0xdd, 0x53, 0xe6, 0x03, 0xeb, 0xcc, 0x83, 0x18, 0xa9, 0x26, 0x9e, 0x86,
> -	0x25, 0xca, 0xdb, 0xe9, 0x5b, 0x87, 0xa5, 0x22, 0xae, 0x44, 0xa2, 0x6f, 0x1d, 0x1a, 0xa9, 0x26,
> -	0xad, 0x61, 0x1a, 0xd8, 0xa6, 0x6d, 0x0a, 0xb6, 0x25, 0x6f, 0xb3, 0x46, 0x5a, 0x45, 0x4a, 0x90,
> -	0x6a, 0xb6, 0xb7, 0x3b, 0x56, 0x69, 0x81, 0xf1, 0xac, 0x8e, 0x65, 0x24, 0x9b, 0xdb, 0x1d, 0x8b,
> -	0xbc, 0x05, 0x89, 0xc9, 0xd1, 0x7e, 0x89, 0x84, 0xbf, 0xac, 0xec, 0x1e, 0xed, 0xbb, 0x43, 0x31,
> -	0x28, 0x82, 0x2c, 0x43, 0x76, 0xe2, 0x8c, 0xdb, 0xbf, 0x60, 0x8e, 0xed, 0xd2, 0x79, 0x5c, 0xc2,
> -	0x73, 0x46, 0x66, 0xe2, 0x8c, 0x3f, 0x30, 0xc7, 0xf6, 0x19, 0x9d, 0x5f, 0xf9, 0x0a, 0xe4, 0x05,
> -	0xbb, 0xa4, 0x08, 0x92, 0xc5, 0x6e, 0x0a, 0x75, 0xe9, 0x8e, 0x21, 0x59, 0xe5, 0x3d, 0x28, 0xb8,
> -	0x39, 0x0c, 0xce, 0x57, 0xa3, 0x27, 0x69, 0x60, 0x8f, 0xf1, 0x7c, 0xce, 0x6b, 0x97, 0xc4, 0x10,
> -	0xe5, 0xc3, 0x78, 0xb8, 0x60, 0xd0, 0xb2, 0x12, 0x1a, 0x8a, 0x54, 0xfe, 0xa1, 0x04, 0x85, 0x2d,
> -	0x7b, 0xec, 0x3f, 0x30, 0x2f, 0x42, 0x6a, 0xdf, 0xb6, 0x07, 0x13, 0x34, 0x9b, 0x35, 0x58, 0x81,
> -	0xbc, 0x01, 0x05, 0xfc, 0xe1, 0xe6, 0x9e, 0xb2, 0xf7, 0xb4, 0x91, 0xc7, 0x7a, 0x9e, 0x70, 0x12,
> -	0x48, 0xf6, 0x2d, 0x67, 0xc2, 0x3d, 0x19, 0xfe, 0x26, 0x5f, 0x80, 0x3c, 0xfd, 0xeb, 0x32, 0x93,
> -	0xde, 0x85, 0x15, 0x68, 0x35, 0x27, 0xbe, 0x05, 0x73, 0xb8, 0xfb, 0x1e, 0x2c, 0xe3, 0x3d, 0x63,
> -	0x14, 0x58, 0x03, 0x07, 0x96, 0x20, 0xc3, 0x5c, 0xc1, 0x04, 0xbf, 0x96, 0xe5, 0x0c, 0xb7, 0x48,
> -	0xdd, 0x2b, 0x66, 0x02, 0x2c, 0xdc, 0x67, 0x0c, 0x5e, 0x2a, 0x3f, 0x80, 0x2c, 0x46, 0xa9, 0xd6,
> -	0xa0, 0x4b, 0xca, 0x20, 0xf5, 0x4a, 0x26, 0xc6, 0xc8, 0x45, 0xe1, 0x9a, 0xcf, 0x9b, 0x57, 0x36,
> -	0x0c, 0xa9, 0xb7, 0xb4, 0x00, 0xd2, 0x06, 0xbd, 0x77, 0x1f, 0x73, 0x37, 0x2d, 0x1d, 0x97, 0x5b,
> -	0xdc, 0xc4, 0xb6, 0xf9, 0x32, 0xce, 0xc4, 0xb6, 0xf9, 0x92, 0x99, 0xb8, 0x3a, 0x65, 0x82, 0x96,
> -	0x4e, 0xf8, 0xa7, 0x43, 0xe9, 0xa4, 0x5c, 0x85, 0x39, 0x3c, 0x9e, 0x7d, 0xab, 0xb7, 0x63, 0xf7,
> -	0x2d, 0xbc, 0xe7, 0x1f, 0xe2, 0x3d, 0x49, 0x32, 0xa4, 0x43, 0xba, 0x07, 0xe6, 0x71, 0xe7, 0x80,
> -	0xdd, 0x38, 0xb3, 0x06, 0x2b, 0x94, 0x3f, 0x4b, 0xc2, 0x3c, 0x77, 0xad, 0xef, 0xf7, 0x9d, 0x67,
> -	0x5b, 0x9d, 0x11, 0x79, 0x0a, 0x05, 0xea, 0x55, 0xdb, 0xc3, 0xce, 0x68, 0x44, 0x8f, 0xaf, 0x84,
> -	0x57, 0x8d, 0xeb, 0x53, 0xae, 0x9a, 0xe3, 0x57, 0xb6, 0x3b, 0x43, 0x73, 0x8b, 0x61, 0x1b, 0x96,
> -	0x33, 0x3e, 0x31, 0xf2, 0x96, 0x5f, 0x43, 0x36, 0x21, 0x3f, 0x9c, 0xf4, 0x3c, 0x63, 0x32, 0x1a,
> -	0xab, 0x44, 0x1a, 0xdb, 0x9a, 0xf4, 0x02, 0xb6, 0x60, 0xe8, 0x55, 0xd0, 0x81, 0x51, 0x7f, 0xec,
> -	0xd9, 0x4a, 0x9c, 0x32, 0x30, 0xea, 0x3a, 0x82, 0x03, 0xdb, 0xf7, 0x6b, 0xc8, 0x63, 0x00, 0x7a,
> -	0xbc, 0x1c, 0x9b, 0xa6, 0x4e, 0xa8, 0xa0, 0xbc, 0xf6, 0x66, 0xa4, 0xad, 0x5d, 0x67, 0xbc, 0x67,
> -	0xef, 0x3a, 0x63, 0x66, 0x88, 0x1e, 0x4c, 0x2c, 0x2e, 0xbd, 0x03, 0x4a, 0x78, 0xfe, 0xe2, 0x8d,
> -	0x3c, 0x35, 0xe3, 0x46, 0x9e, 0xe3, 0x37, 0xf2, 0xba, 0x7c, 0x57, 0x5a, 0x7a, 0x0f, 0x8a, 0xa1,
> -	0x29, 0x8b, 0x74, 0xc2, 0xe8, 0xb7, 0x45, 0x7a, 0x5e, 0x7b, 0x5d, 0xf8, 0x9c, 0x2d, 0x6e, 0xb8,
> -	0x68, 0xf7, 0x1d, 0x50, 0xc2, 0xd3, 0x17, 0x0d, 0x67, 0x63, 0x32, 0x05, 0xe4, 0xdf, 0x87, 0xb9,
> -	0xc0, 0x94, 0x45, 0x72, 0xee, 0x94, 0x49, 0x95, 0x7f, 0x29, 0x05, 0xa9, 0x96, 0x65, 0xda, 0x87,
> -	0xe4, 0xf5, 0x60, 0x9c, 0x7c, 0x72, 0xce, 0x8d, 0x91, 0x17, 0x43, 0x31, 0xf2, 0xc9, 0x39, 0x2f,
> -	0x42, 0x5e, 0x0c, 0x45, 0x48, 0xb7, 0xa9, 0xa6, 0x93, 0xcb, 0x53, 0xf1, 0xf1, 0xc9, 0x39, 0x21,
> -	0x38, 0x5e, 0x9e, 0x0a, 0x8e, 0x7e, 0x73, 0x4d, 0xa7, 0x0e, 0x35, 0x18, 0x19, 0x9f, 0x9c, 0xf3,
> -	0xa3, 0xe2, 0x72, 0x38, 0x2a, 0x7a, 0x8d, 0x35, 0x9d, 0x0d, 0x49, 0x88, 0x88, 0x38, 0x24, 0x16,
> -	0x0b, 0x97, 0xc3, 0xb1, 0x10, 0x79, 0x3c, 0x0a, 0x2e, 0x87, 0xa3, 0x20, 0x36, 0xf2, 0xa8, 0x77,
> -	0x31, 0x14, 0xf5, 0xd0, 0x28, 0x0b, 0x77, 0xcb, 0xe1, 0x70, 0xc7, 0x78, 0xc2, 0x48, 0xc5, 0x58,
> -	0xe7, 0x35, 0xd6, 0x74, 0xa2, 0x85, 0x02, 0x5d, 0xf4, 0x6d, 0x1f, 0xf7, 0x02, 0x9d, 0xbe, 0x4e,
> -	0x97, 0xcd, 0xbd, 0x88, 0x16, 0x63, 0xbe, 0xf8, 0xe3, 0x6a, 0xba, 0x17, 0x31, 0x0d, 0x32, 0x87,
> -	0x3c, 0x01, 0x56, 0xd0, 0x73, 0x09, 0xb2, 0xc4, 0xcd, 0x5f, 0x69, 0xb6, 0xd1, 0x83, 0xd1, 0x79,
> -	0x1d, 0xb2, 0x3b, 0x7d, 0x05, 0xe6, 0x9a, 0xed, 0xa7, 0x9d, 0x71, 0xcf, 0x9c, 0x38, 0xed, 0xbd,
> -	0x4e, 0xcf, 0x7b, 0x44, 0xa0, 0xfb, 0x9f, 0x6f, 0xf2, 0x96, 0xbd, 0x4e, 0x8f, 0x5c, 0x70, 0xc5,
> -	0xd5, 0xc5, 0x56, 0x89, 0xcb, 0x6b, 0xe9, 0x75, 0xba, 0x68, 0xcc, 0x18, 0xfa, 0xc2, 0x05, 0xee,
> -	0x0b, 0x1f, 0x66, 0x20, 0x75, 0x64, 0xf5, 0x6d, 0xeb, 0x61, 0x0e, 0x32, 0x8e, 0x3d, 0x1e, 0x76,
> -	0x1c, 0xbb, 0xfc, 0x23, 0x09, 0xe0, 0x91, 0x3d, 0x1c, 0x1e, 0x59, 0xfd, 0x17, 0x47, 0x26, 0xb9,
> -	0x02, 0xf9, 0x61, 0xe7, 0xb9, 0xd9, 0x1e, 0x9a, 0xed, 0x83, 0xb1, 0x7b, 0x0e, 0x72, 0xb4, 0x6a,
> -	0xcb, 0x7c, 0x34, 0x3e, 0x21, 0x25, 0xf7, 0x8a, 0x8e, 0xda, 0x41, 0x49, 0xf2, 0x2b, 0xfb, 0x22,
> -	0xbf, 0x74, 0xa6, 0xf9, 0x1e, 0xba, 0xd7, 0x4e, 0x96, 0x47, 0x64, 0xf8, 0xee, 0x61, 0x89, 0x4a,
> -	0xde, 0x31, 0x87, 0xa3, 0xf6, 0x01, 0x4a, 0x85, 0xca, 0x21, 0x45, 0xcb, 0x8f, 0xc8, 0x6d, 0x48,
> -	0x1c, 0xd8, 0x03, 0x14, 0xc9, 0x29, 0xfb, 0x42, 0x71, 0xe4, 0x0d, 0x48, 0x0c, 0x27, 0x4c, 0x36,
> -	0x79, 0x6d, 0x41, 0xb8, 0x27, 0xb0, 0xd0, 0x44, 0x61, 0xc3, 0x49, 0xcf, 0x9b, 0xf7, 0x8d, 0x22,
> -	0x24, 0x9a, 0xad, 0x16, 0x8d, 0xfd, 0xcd, 0x56, 0x6b, 0x4d, 0x91, 0xea, 0x5f, 0x82, 0x6c, 0x6f,
> -	0x6c, 0x9a, 0xd4, 0x3d, 0xcc, 0xce, 0x39, 0x3e, 0xc4, 0x58, 0xe7, 0x81, 0xea, 0x5b, 0x90, 0x39,
> -	0x60, 0x59, 0x07, 0x89, 0x48, 0x6b, 0x4b, 0x7f, 0xc8, 0x1e, 0x55, 0x96, 0xfc, 0xe6, 0x70, 0x9e,
> -	0x62, 0xb8, 0x36, 0xea, 0x3b, 0x90, 0x1b, 0xb7, 0x4f, 0x33, 0xf8, 0x31, 0x8b, 0x2e, 0x71, 0x06,
> -	0xb3, 0x63, 0x5e, 0x55, 0x6f, 0xc0, 0x82, 0x65, 0xbb, 0xdf, 0x50, 0xda, 0x5d, 0x76, 0xc6, 0x2e,
> -	0x4e, 0x5f, 0xe5, 0x5c, 0xe3, 0x26, 0xfb, 0x6e, 0x69, 0xd9, 0xbc, 0x81, 0x9d, 0xca, 0xfa, 0x23,
> -	0x50, 0x04, 0x33, 0x98, 0x7a, 0xc6, 0x59, 0x39, 0x64, 0x1f, 0x4a, 0x3d, 0x2b, 0x78, 0xee, 0x43,
> -	0x46, 0xd8, 0xc9, 0x8c, 0x31, 0xd2, 0x63, 0x5f, 0x9d, 0x3d, 0x23, 0xe8, 0xea, 0xa6, 0x8d, 0x50,
> -	0x5f, 0x13, 0x6d, 0xe4, 0x19, 0xfb, 0x20, 0x2d, 0x1a, 0xa9, 0xe9, 0xa1, 0x55, 0x39, 0x3a, 0x75,
> -	0x28, 0x7d, 0xf6, 0x3d, 0xd9, 0xb3, 0xc2, 0x1c, 0xe0, 0x0c, 0x33, 0xf1, 0x83, 0xf9, 0x90, 0x7d,
> -	0x6a, 0x0e, 0x98, 0x99, 0x1a, 0xcd, 0xe4, 0xd4, 0xd1, 0x3c, 0x67, 0xdf, 0x75, 0x3d, 0x33, 0xbb,
> -	0xb3, 0x46, 0x33, 0x39, 0x75, 0x34, 0x03, 0xf6, 0xc5, 0x37, 0x60, 0xa6, 0xa6, 0xd7, 0x37, 0x80,
> -	0x88, 0x5b, 0xcd, 0xe3, 0x44, 0x8c, 0x9d, 0x21, 0xfb, 0x8e, 0xef, 0x6f, 0x36, 0xa3, 0xcc, 0x32,
> -	0x14, 0x3f, 0x20, 0x8b, 0x7d, 0xe2, 0x0f, 0x1a, 0xaa, 0xe9, 0xf5, 0x4d, 0x38, 0x2f, 0x4e, 0xec,
> -	0x0c, 0x43, 0xb2, 0x55, 0xa9, 0x52, 0x34, 0x16, 0xfc, 0xa9, 0x71, 0xce, 0x4c, 0x53, 0xf1, 0x83,
> -	0x1a, 0xa9, 0x52, 0x45, 0x99, 0x32, 0x55, 0xd3, 0xeb, 0x0f, 0xa0, 0x28, 0x98, 0xda, 0xc7, 0x08,
> -	0x1d, 0x6d, 0xe6, 0x05, 0xfb, 0x5f, 0x0b, 0xcf, 0x0c, 0x8d, 0xe8, 0xe1, 0x1d, 0xe3, 0x31, 0x2e,
> -	0xda, 0xc8, 0x98, 0xfd, 0xa3, 0x80, 0x3f, 0x16, 0x64, 0x84, 0x8e, 0x04, 0xe6, 0xdf, 0x71, 0x56,
> -	0x26, 0xec, 0x5f, 0x08, 0xfc, 0xa1, 0x50, 0x42, 0xbd, 0x1f, 0x98, 0x8e, 0x49, 0x83, 0x5c, 0x8c,
> -	0x0d, 0x07, 0x3d, 0xf2, 0x9b, 0x91, 0x80, 0x15, 0xf1, 0x81, 0x44, 0x98, 0x36, 0x2d, 0xd6, 0x37,
> -	0x61, 0xfe, 0xec, 0x0e, 0xe9, 0x63, 0x89, 0x65, 0xcb, 0xd5, 0x15, 0x9a, 0x50, 0x1b, 0x73, 0xdd,
> -	0x80, 0x5f, 0x6a, 0xc0, 0xdc, 0x99, 0x9d, 0xd2, 0x27, 0x12, 0xcb, 0x39, 0xa9, 0x25, 0xa3, 0xd0,
> -	0x0d, 0x7a, 0xa6, 0xb9, 0x33, 0xbb, 0xa5, 0x4f, 0x25, 0xf6, 0x40, 0xa1, 0x6b, 0x9e, 0x11, 0xd7,
> -	0x33, 0xcd, 0x9d, 0xd9, 0x2d, 0x7d, 0x95, 0x65, 0x94, 0xb2, 0x5e, 0x15, 0x8d, 0xa0, 0x2f, 0x98,
> -	0x3f, 0xbb, 0x5b, 0xfa, 0x9a, 0x84, 0x8f, 0x15, 0xb2, 0xae, 0x7b, 0xeb, 0xe2, 0x79, 0xa6, 0xf9,
> -	0xb3, 0xbb, 0xa5, 0xaf, 0x4b, 0xf8, 0xa4, 0x21, 0xeb, 0xeb, 0x01, 0x33, 0xc1, 0xd1, 0x9c, 0xee,
> -	0x96, 0xbe, 0x21, 0xe1, 0x2b, 0x83, 0xac, 0xd7, 0x3c, 0x33, 0xbb, 0x53, 0xa3, 0x39, 0xdd, 0x2d,
> -	0x7d, 0x13, 0x6f, 0xf1, 0x75, 0x59, 0xbf, 0x13, 0x30, 0x83, 0x9e, 0xa9, 0xf8, 0x0a, 0x6e, 0xe9,
> -	0x5b, 0x12, 0x3e, 0x06, 0xc9, 0xfa, 0x5d, 0xc3, 0xed, 0xdd, 0xf7, 0x4c, 0xc5, 0x57, 0x70, 0x4b,
> -	0x9f, 0x49, 0xf8, 0x66, 0x24, 0xeb, 0xf7, 0x82, 0x86, 0xd0, 0x33, 0x29, 0xaf, 0xe2, 0x96, 0xbe,
> -	0x4d, 0x2d, 0x15, 0xeb, 0xf2, 0xfa, 0xaa, 0xe1, 0x0e, 0x40, 0xf0, 0x4c, 0xca, 0xab, 0xb8, 0xa5,
> -	0xef, 0x50, 0x53, 0x4a, 0x5d, 0x5e, 0x5f, 0x0b, 0x99, 0xaa, 0xe9, 0xf5, 0x47, 0x50, 0x38, 0xab,
> -	0x5b, 0xfa, 0xae, 0xf8, 0x16, 0x97, 0xef, 0x0a, 0xbe, 0x69, 0x47, 0xd8, 0xb3, 0x53, 0x1d, 0xd3,
> -	0xf7, 0x30, 0xc7, 0xa9, 0xcf, 0x3d, 0x61, 0xef, 0x55, 0x8c, 0xe0, 0x6f, 0x1f, 0x73, 0x53, 0x5b,
> -	0xfe, 0xf9, 0x38, 0xd5, 0x47, 0x7d, 0x5f, 0xc2, 0x47, 0xad, 0x02, 0x37, 0x88, 0x78, 0xef, 0xa4,
> -	0x30, 0x87, 0xf5, 0xa1, 0x3f, 0xcb, 0xd3, 0xbc, 0xd5, 0x0f, 0xa4, 0x57, 0x71, 0x57, 0xf5, 0x44,
> -	0x6b, 0xbb, 0xe1, 0x2d, 0x06, 0xd6, 0xbc, 0x0d, 0xc9, 0x63, 0x6d, 0x75, 0x4d, 0xbc, 0x92, 0x89,
> -	0x6f, 0xb9, 0xcc, 0x49, 0xe5, 0xb5, 0xa2, 0xf0, 0xdc, 0x3d, 0x1c, 0x39, 0x27, 0x06, 0xb2, 0x38,
> -	0x5b, 0x8b, 0x64, 0x7f, 0x12, 0xc3, 0xd6, 0x38, 0xbb, 0x1a, 0xc9, 0xfe, 0x34, 0x86, 0x5d, 0xe5,
> -	0x6c, 0x3d, 0x92, 0xfd, 0xd5, 0x18, 0xb6, 0xce, 0xd9, 0xeb, 0x91, 0xec, 0xaf, 0xc5, 0xb0, 0xd7,
> -	0x39, 0xbb, 0x16, 0xc9, 0xfe, 0x7a, 0x0c, 0xbb, 0xc6, 0xd9, 0x77, 0x22, 0xd9, 0xdf, 0x88, 0x61,
> -	0xdf, 0xe1, 0xec, 0xbb, 0x91, 0xec, 0x6f, 0xc6, 0xb0, 0xef, 0x72, 0xf6, 0xbd, 0x48, 0xf6, 0xb7,
> -	0x62, 0xd8, 0xf7, 0x18, 0x7b, 0x6d, 0x35, 0x92, 0xfd, 0x59, 0x34, 0x7b, 0x6d, 0x95, 0xb3, 0xa3,
> -	0xb5, 0xf6, 0xed, 0x18, 0x36, 0xd7, 0xda, 0x5a, 0xb4, 0xd6, 0xbe, 0x13, 0xc3, 0xe6, 0x5a, 0x5b,
> -	0x8b, 0xd6, 0xda, 0x77, 0x63, 0xd8, 0x5c, 0x6b, 0x6b, 0xd1, 0x5a, 0xfb, 0x5e, 0x0c, 0x9b, 0x6b,
> -	0x6d, 0x2d, 0x5a, 0x6b, 0xdf, 0x8f, 0x61, 0x73, 0xad, 0xad, 0x45, 0x6b, 0xed, 0x07, 0x31, 0x6c,
> -	0xae, 0xb5, 0xb5, 0x68, 0xad, 0xfd, 0x51, 0x0c, 0x9b, 0x6b, 0x6d, 0x2d, 0x5a, 0x6b, 0x7f, 0x1c,
> -	0xc3, 0xe6, 0x5a, 0x5b, 0x8b, 0xd6, 0xda, 0x9f, 0xc4, 0xb0, 0xb9, 0xd6, 0xb4, 0x68, 0xad, 0xfd,
> -	0x69, 0x34, 0x5b, 0xe3, 0x5a, 0xd3, 0xa2, 0xb5, 0xf6, 0x67, 0x31, 0x6c, 0xae, 0x35, 0x2d, 0x5a,
> -	0x6b, 0x7f, 0x1e, 0xc3, 0xe6, 0x5a, 0xd3, 0xa2, 0xb5, 0xf6, 0xc3, 0x18, 0x36, 0xd7, 0x9a, 0x16,
> -	0xad, 0xb5, 0xbf, 0x88, 0x61, 0x73, 0xad, 0x69, 0xd1, 0x5a, 0xfb, 0xcb, 0x18, 0x36, 0xd7, 0x9a,
> -	0x16, 0xad, 0xb5, 0xbf, 0x8a, 0x61, 0x73, 0xad, 0x69, 0xd1, 0x5a, 0xfb, 0xeb, 0x18, 0x36, 0xd7,
> -	0x9a, 0x16, 0xad, 0xb5, 0xbf, 0x89, 0x61, 0x73, 0xad, 0x69, 0xd1, 0x5a, 0xfb, 0xdb, 0x18, 0x36,
> -	0xd7, 0x5a, 0x35, 0x5a, 0x6b, 0x7f, 0x17, 0xcd, 0xae, 0x72, 0xad, 0x55, 0xa3, 0xb5, 0xf6, 0xf7,
> -	0x31, 0x6c, 0xae, 0xb5, 0x6a, 0xb4, 0xd6, 0xfe, 0x21, 0x86, 0xcd, 0xb5, 0x56, 0x8d, 0xd6, 0xda,
> -	0x3f, 0xc6, 0xb0, 0xb9, 0xd6, 0xaa, 0xd1, 0x5a, 0xfb, 0x51, 0x0c, 0x9b, 0x6b, 0xad, 0x1a, 0xad,
> -	0xb5, 0x7f, 0x8a, 0x61, 0x73, 0xad, 0x55, 0xa3, 0xb5, 0xf6, 0xcf, 0x31, 0x6c, 0xae, 0xb5, 0x6a,
> -	0xb4, 0xd6, 0xfe, 0x25, 0x86, 0xcd, 0xb5, 0x56, 0x8d, 0xd6, 0xda, 0xbf, 0xc6, 0xb0, 0xb9, 0xd6,
> -	0xaa, 0xd1, 0x5a, 0xfb, 0xb7, 0x18, 0x36, 0xd7, 0x9a, 0x1e, 0xad, 0xb5, 0x7f, 0x8f, 0x66, 0xeb,
> -	0x5c, 0x6b, 0x7a, 0xb4, 0xd6, 0xfe, 0x23, 0x86, 0xcd, 0xb5, 0xa6, 0x47, 0x6b, 0xed, 0x3f, 0x63,
> -	0xd8, 0x5c, 0x6b, 0x7a, 0xb4, 0xd6, 0xfe, 0x2b, 0x86, 0xcd, 0xb5, 0xa6, 0x47, 0x6b, 0xed, 0xbf,
> -	0x63, 0xd8, 0x5c, 0x6b, 0x7a, 0xb4, 0xd6, 0xfe, 0x27, 0x86, 0xcd, 0xb5, 0xa6, 0x47, 0x6b, 0xed,
> -	0xc7, 0x31, 0x6c, 0xae, 0x35, 0x3d, 0x5a, 0x6b, 0x3f, 0x89, 0x61, 0x73, 0xad, 0xe9, 0xd1, 0x5a,
> -	0xfb, 0xdf, 0x18, 0x36, 0xd7, 0x9a, 0x1e, 0xad, 0xb5, 0xff, 0x8b, 0x61, 0x73, 0xad, 0xad, 0x47,
> -	0x6b, 0xed, 0xff, 0xa3, 0xd9, 0xeb, 0xab, 0x3f, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xcd,
> -	0x32, 0x57, 0x39, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/test.proto b/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/test.proto
> deleted file mode 100644
> index 70e3cfcd..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/testdata/test.proto
> +++ /dev/null
> @@ -1,548 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// A feature-rich test file for the protocol compiler and libraries.
> -
> -syntax = "proto2";
> -
> -package testdata;
> -
> -enum FOO { FOO1 = 1; };
> -
> -message GoEnum {
> -  required FOO foo = 1;
> -}
> -
> -message GoTestField {
> -  required string Label = 1;
> -  required string Type = 2;
> -}
> -
> -message GoTest {
> -  // An enum, for completeness.
> -  enum KIND {
> -    VOID = 0;
> -
> -    // Basic types
> -    BOOL = 1;
> -    BYTES = 2;
> -    FINGERPRINT = 3;
> -    FLOAT = 4;
> -    INT = 5;
> -    STRING = 6;
> -    TIME = 7;
> -
> -    // Groupings
> -    TUPLE = 8;
> -    ARRAY = 9;
> -    MAP = 10;
> -
> -    // Table types
> -    TABLE = 11;
> -
> -    // Functions
> -    FUNCTION = 12;  // last tag
> -  };
> -
> -  // Some typical parameters
> -  required KIND Kind = 1;
> -  optional string Table = 2;
> -  optional int32 Param = 3;
> -
> -  // Required, repeated and optional foreign fields.
> -  required GoTestField RequiredField = 4;
> -  repeated GoTestField RepeatedField = 5;
> -  optional GoTestField OptionalField = 6;
> -
> -  // Required fields of all basic types
> -  required bool F_Bool_required = 10;
> -  required int32 F_Int32_required = 11;
> -  required int64 F_Int64_required = 12;
> -  required fixed32 F_Fixed32_required = 13;
> -  required fixed64 F_Fixed64_required = 14;
> -  required uint32 F_Uint32_required = 15;
> -  required uint64 F_Uint64_required = 16;
> -  required float F_Float_required = 17;
> -  required double F_Double_required = 18;
> -  required string F_String_required = 19;
> -  required bytes F_Bytes_required = 101;
> -  required sint32 F_Sint32_required = 102;
> -  required sint64 F_Sint64_required = 103;
> -
> -  // Repeated fields of all basic types
> -  repeated bool F_Bool_repeated = 20;
> -  repeated int32 F_Int32_repeated = 21;
> -  repeated int64 F_Int64_repeated = 22;
> -  repeated fixed32 F_Fixed32_repeated = 23;
> -  repeated fixed64 F_Fixed64_repeated = 24;
> -  repeated uint32 F_Uint32_repeated = 25;
> -  repeated uint64 F_Uint64_repeated = 26;
> -  repeated float F_Float_repeated = 27;
> -  repeated double F_Double_repeated = 28;
> -  repeated string F_String_repeated = 29;
> -  repeated bytes F_Bytes_repeated = 201;
> -  repeated sint32 F_Sint32_repeated = 202;
> -  repeated sint64 F_Sint64_repeated = 203;
> -
> -  // Optional fields of all basic types
> -  optional bool F_Bool_optional = 30;
> -  optional int32 F_Int32_optional = 31;
> -  optional int64 F_Int64_optional = 32;
> -  optional fixed32 F_Fixed32_optional = 33;
> -  optional fixed64 F_Fixed64_optional = 34;
> -  optional uint32 F_Uint32_optional = 35;
> -  optional uint64 F_Uint64_optional = 36;
> -  optional float F_Float_optional = 37;
> -  optional double F_Double_optional = 38;
> -  optional string F_String_optional = 39;
> -  optional bytes F_Bytes_optional = 301;
> -  optional sint32 F_Sint32_optional = 302;
> -  optional sint64 F_Sint64_optional = 303;
> -
> -  // Default-valued fields of all basic types
> -  optional bool F_Bool_defaulted = 40 [default=true];
> -  optional int32 F_Int32_defaulted = 41 [default=32];
> -  optional int64 F_Int64_defaulted = 42 [default=64];
> -  optional fixed32 F_Fixed32_defaulted = 43 [default=320];
> -  optional fixed64 F_Fixed64_defaulted = 44 [default=640];
> -  optional uint32 F_Uint32_defaulted = 45 [default=3200];
> -  optional uint64 F_Uint64_defaulted = 46 [default=6400];
> -  optional float F_Float_defaulted = 47 [default=314159.];
> -  optional double F_Double_defaulted = 48 [default=271828.];
> -  optional string F_String_defaulted = 49 [default="hello, \"world!\"\n"];
> -  optional bytes F_Bytes_defaulted = 401 [default="Bignose"];
> -  optional sint32 F_Sint32_defaulted = 402 [default = -32];
> -  optional sint64 F_Sint64_defaulted = 403 [default = -64];
> -
> -  // Packed repeated fields (no string or bytes).
> -  repeated bool F_Bool_repeated_packed = 50 [packed=true];
> -  repeated int32 F_Int32_repeated_packed = 51 [packed=true];
> -  repeated int64 F_Int64_repeated_packed = 52 [packed=true];
> -  repeated fixed32 F_Fixed32_repeated_packed = 53 [packed=true];
> -  repeated fixed64 F_Fixed64_repeated_packed = 54 [packed=true];
> -  repeated uint32 F_Uint32_repeated_packed = 55 [packed=true];
> -  repeated uint64 F_Uint64_repeated_packed = 56 [packed=true];
> -  repeated float F_Float_repeated_packed = 57 [packed=true];
> -  repeated double F_Double_repeated_packed = 58 [packed=true];
> -  repeated sint32 F_Sint32_repeated_packed = 502 [packed=true];
> -  repeated sint64 F_Sint64_repeated_packed = 503 [packed=true];
> -
> -  // Required, repeated, and optional groups.
> -  required group RequiredGroup = 70 {
> -    required string RequiredField = 71;
> -  };
> -
> -  repeated group RepeatedGroup = 80 {
> -    required string RequiredField = 81;
> -  };
> -
> -  optional group OptionalGroup = 90 {
> -    required string RequiredField = 91;
> -  };
> -}
> -
> -// For testing a group containing a required field.
> -message GoTestRequiredGroupField {
> -  required group Group = 1 {
> -    required int32 Field = 2;
> -  };
> -}
> -
> -// For testing skipping of unrecognized fields.
> -// Numbers are all big, larger than tag numbers in GoTestField,
> -// the message used in the corresponding test.
> -message GoSkipTest {
> -  required int32 skip_int32 = 11;
> -  required fixed32 skip_fixed32 = 12;
> -  required fixed64 skip_fixed64 = 13;
> -  required string skip_string = 14;
> -  required group SkipGroup = 15 {
> -    required int32 group_int32 = 16;
> -    required string group_string = 17;
> -  }
> -}
> -
> -// For testing packed/non-packed decoder switching.
> -// A serialized instance of one should be deserializable as the other.
> -message NonPackedTest {
> -  repeated int32 a = 1;
> -}
> -
> -message PackedTest {
> -  repeated int32 b = 1 [packed=true];
> -}
> -
> -message MaxTag {
> -  // Maximum possible tag number.
> -  optional string last_field = 536870911;
> -}
> -
> -message OldMessage {
> -  message Nested {
> -    optional string name = 1;
> -  }
> -  optional Nested nested = 1;
> -
> -  optional int32 num = 2;
> -}
> -
> -// NewMessage is wire compatible with OldMessage;
> -// imagine it as a future version.
> -message NewMessage {
> -  message Nested {
> -    optional string name = 1;
> -    optional string food_group = 2;
> -  }
> -  optional Nested nested = 1;
> -
> -  // This is an int32 in OldMessage.
> -  optional int64 num = 2;
> -}
> -
> -// Smaller tests for ASCII formatting.
> -
> -message InnerMessage {
> -  required string host = 1;
> -  optional int32 port = 2 [default=4000];
> -  optional bool connected = 3;
> -}
> -
> -message OtherMessage {
> -  optional int64 key = 1;
> -  optional bytes value = 2;
> -  optional float weight = 3;
> -  optional InnerMessage inner = 4;
> -
> -  extensions 100 to max;
> -}
> -
> -message RequiredInnerMessage {
> -  required InnerMessage leo_finally_won_an_oscar = 1;
> -}
> -
> -message MyMessage {
> -  required int32 count = 1;
> -  optional string name = 2;
> -  optional string quote = 3;
> -  repeated string pet = 4;
> -  optional InnerMessage inner = 5;
> -  repeated OtherMessage others = 6;
> -  optional RequiredInnerMessage we_must_go_deeper = 13;
> -  repeated InnerMessage rep_inner = 12;
> -
> -  enum Color {
> -    RED = 0;
> -    GREEN = 1;
> -    BLUE = 2;
> -  };
> -  optional Color bikeshed = 7;
> -
> -  optional group SomeGroup = 8 {
> -    optional int32 group_field = 9;
> -  }
> -
> -  // This field becomes [][]byte in the generated code.
> -  repeated bytes rep_bytes = 10;
> -
> -  optional double bigfloat = 11;
> -
> -  extensions 100 to max;
> -}
> -
> -message Ext {
> -  extend MyMessage {
> -    optional Ext more = 103;
> -    optional string text = 104;
> -    optional int32 number = 105;
> -  }
> -
> -  optional string data = 1;
> -}
> -
> -extend MyMessage {
> -  repeated string greeting = 106;
> -}
> -
> -message ComplexExtension {
> -  optional int32 first = 1;
> -  optional int32 second = 2;
> -  repeated int32 third = 3;
> -}
> -
> -extend OtherMessage {
> -  optional ComplexExtension complex = 200;
> -  repeated ComplexExtension r_complex = 201;
> -}
> -
> -message DefaultsMessage {
> -  enum DefaultsEnum {
> -    ZERO = 0;
> -    ONE = 1;
> -    TWO = 2;
> -  };
> -  extensions 100 to max;
> -}
> -
> -extend DefaultsMessage {
> -  optional double no_default_double = 101;
> -  optional float no_default_float = 102;
> -  optional int32 no_default_int32 = 103;
> -  optional int64 no_default_int64 = 104;
> -  optional uint32 no_default_uint32 = 105;
> -  optional uint64 no_default_uint64 = 106;
> -  optional sint32 no_default_sint32 = 107;
> -  optional sint64 no_default_sint64 = 108;
> -  optional fixed32 no_default_fixed32 = 109;
> -  optional fixed64 no_default_fixed64 = 110;
> -  optional sfixed32 no_default_sfixed32 = 111;
> -  optional sfixed64 no_default_sfixed64 = 112;
> -  optional bool no_default_bool = 113;
> -  optional string no_default_string = 114;
> -  optional bytes no_default_bytes = 115;
> -  optional DefaultsMessage.DefaultsEnum no_default_enum = 116;
> -
> -  optional double default_double = 201 [default = 3.1415];
> -  optional float default_float = 202 [default = 3.14];
> -  optional int32 default_int32 = 203 [default = 42];
> -  optional int64 default_int64 = 204 [default = 43];
> -  optional uint32 default_uint32 = 205 [default = 44];
> -  optional uint64 default_uint64 = 206 [default = 45];
> -  optional sint32 default_sint32 = 207 [default = 46];
> -  optional sint64 default_sint64 = 208 [default = 47];
> -  optional fixed32 default_fixed32 = 209 [default = 48];
> -  optional fixed64 default_fixed64 = 210 [default = 49];
> -  optional sfixed32 default_sfixed32 = 211 [default = 50];
> -  optional sfixed64 default_sfixed64 = 212 [default = 51];
> -  optional bool default_bool = 213 [default = true];
> -  optional string default_string = 214 [default = "Hello, string"];
> -  optional bytes default_bytes = 215 [default = "Hello, bytes"];
> -  optional DefaultsMessage.DefaultsEnum default_enum = 216 [default = ONE];
> -}
> -
> -message MyMessageSet {
> -  option message_set_wire_format = true;
> -  extensions 100 to max;
> -}
> -
> -message Empty {
> -}
> -
> -extend MyMessageSet {
> -    optional Empty x201 = 201;
> -    optional Empty x202 = 202;
> -    optional Empty x203 = 203;
> -    optional Empty x204 = 204;
> -    optional Empty x205 = 205;
> -    optional Empty x206 = 206;
> -    optional Empty x207 = 207;
> -    optional Empty x208 = 208;
> -    optional Empty x209 = 209;
> -    optional Empty x210 = 210;
> -    optional Empty x211 = 211;
> -    optional Empty x212 = 212;
> -    optional Empty x213 = 213;
> -    optional Empty x214 = 214;
> -    optional Empty x215 = 215;
> -    optional Empty x216 = 216;
> -    optional Empty x217 = 217;
> -    optional Empty x218 = 218;
> -    optional Empty x219 = 219;
> -    optional Empty x220 = 220;
> -    optional Empty x221 = 221;
> -    optional Empty x222 = 222;
> -    optional Empty x223 = 223;
> -    optional Empty x224 = 224;
> -    optional Empty x225 = 225;
> -    optional Empty x226 = 226;
> -    optional Empty x227 = 227;
> -    optional Empty x228 = 228;
> -    optional Empty x229 = 229;
> -    optional Empty x230 = 230;
> -    optional Empty x231 = 231;
> -    optional Empty x232 = 232;
> -    optional Empty x233 = 233;
> -    optional Empty x234 = 234;
> -    optional Empty x235 = 235;
> -    optional Empty x236 = 236;
> -    optional Empty x237 = 237;
> -    optional Empty x238 = 238;
> -    optional Empty x239 = 239;
> -    optional Empty x240 = 240;
> -    optional Empty x241 = 241;
> -    optional Empty x242 = 242;
> -    optional Empty x243 = 243;
> -    optional Empty x244 = 244;
> -    optional Empty x245 = 245;
> -    optional Empty x246 = 246;
> -    optional Empty x247 = 247;
> -    optional Empty x248 = 248;
> -    optional Empty x249 = 249;
> -    optional Empty x250 = 250;
> -}
> -
> -message MessageList {
> -  repeated group Message = 1 {
> -    required string name = 2;
> -    required int32 count = 3;
> -  }
> -}
> -
> -message Strings {
> -  optional string string_field = 1;
> -  optional bytes bytes_field = 2;
> -}
> -
> -message Defaults {
> -  enum Color {
> -    RED = 0;
> -    GREEN = 1;
> -    BLUE = 2;
> -  }
> -
> -  // Default-valued fields of all basic types.
> -  // Same as GoTest, but copied here to make testing easier.
> -  optional bool F_Bool = 1 [default=true];
> -  optional int32 F_Int32 = 2 [default=32];
> -  optional int64 F_Int64 = 3 [default=64];
> -  optional fixed32 F_Fixed32 = 4 [default=320];
> -  optional fixed64 F_Fixed64 = 5 [default=640];
> -  optional uint32 F_Uint32 = 6 [default=3200];
> -  optional uint64 F_Uint64 = 7 [default=6400];
> -  optional float F_Float = 8 [default=314159.];
> -  optional double F_Double = 9 [default=271828.];
> -  optional string F_String = 10 [default="hello, \"world!\"\n"];
> -  optional bytes F_Bytes = 11 [default="Bignose"];
> -  optional sint32 F_Sint32 = 12 [default=-32];
> -  optional sint64 F_Sint64 = 13 [default=-64];
> -  optional Color F_Enum = 14 [default=GREEN];
> -
> -  // More fields with crazy defaults.
> -  optional float F_Pinf = 15 [default=inf];
> -  optional float F_Ninf = 16 [default=-inf];
> -  optional float F_Nan = 17 [default=nan];
> -
> -  // Sub-message.
> -  optional SubDefaults sub = 18;
> -
> -  // Redundant but explicit defaults.
> -  optional string str_zero = 19 [default=""];
> -}
> -
> -message SubDefaults {
> -  optional int64 n = 1 [default=7];
> -}
> -
> -message RepeatedEnum {
> -  enum Color {
> -    RED = 1;
> -  }
> -  repeated Color color = 1;
> -}
> -
> -message MoreRepeated {
> -  repeated bool bools = 1;
> -  repeated bool bools_packed = 2 [packed=true];
> -  repeated int32 ints = 3;
> -  repeated int32 ints_packed = 4 [packed=true];
> -  repeated int64 int64s_packed = 7 [packed=true];
> -  repeated string strings = 5;
> -  repeated fixed32 fixeds = 6;
> -}
> -
> -// GroupOld and GroupNew have the same wire format.
> -// GroupNew has a new field inside a group.
> -
> -message GroupOld {
> -  optional group G = 101 {
> -    optional int32 x = 2;
> -  }
> -}
> -
> -message GroupNew {
> -  optional group G = 101 {
> -    optional int32 x = 2;
> -    optional int32 y = 3;
> -  }
> -}
> -
> -message FloatingPoint {
> -  required double f = 1;
> -  optional bool exact = 2;
> -}
> -
> -message MessageWithMap {
> -  map<int32, string> name_mapping = 1;
> -  map<sint64, FloatingPoint> msg_mapping = 2;
> -  map<bool, bytes> byte_mapping = 3;
> -  map<string, string> str_to_str = 4;
> -}
> -
> -message Oneof {
> -  oneof union {
> -    bool F_Bool = 1;
> -    int32 F_Int32 = 2;
> -    int64 F_Int64 = 3;
> -    fixed32 F_Fixed32 = 4;
> -    fixed64 F_Fixed64 = 5;
> -    uint32 F_Uint32 = 6;
> -    uint64 F_Uint64 = 7;
> -    float F_Float = 8;
> -    double F_Double = 9;
> -    string F_String = 10;
> -    bytes F_Bytes = 11;
> -    sint32 F_Sint32 = 12;
> -    sint64 F_Sint64 = 13;
> -    MyMessage.Color F_Enum = 14;
> -    GoTestField F_Message = 15;
> -    group F_Group = 16 {
> -      optional int32 x = 17;
> -    }
> -    int32 F_Largest_Tag = 536870911;
> -  }
> -
> -  oneof tormato {
> -    int32 value = 100;
> -  }
> -}
> -
> -message Communique {
> -  optional bool make_me_cry = 1;
> -
> -  // This is a oneof, called "union".
> -  oneof union {
> -    int32 number = 5;
> -    string name = 6;
> -    bytes data = 7;
> -    double temp_c = 8;
> -    MyMessage.Color col = 9;
> -    Strings msg = 10;
> -  }
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/text.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/text.go
> deleted file mode 100644
> index 965876bf..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/text.go
> +++ /dev/null
> @@ -1,854 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto
> -
> -// Functions for writing the text protocol buffer format.
> -
> -import (
> -	"bufio"
> -	"bytes"
> -	"encoding"
> -	"errors"
> -	"fmt"
> -	"io"
> -	"log"
> -	"math"
> -	"reflect"
> -	"sort"
> -	"strings"
> -)
> -
> -var (
> -	newline         = []byte("\n")
> -	spaces          = []byte("                                        ")
> -	gtNewline       = []byte(">\n")
> -	endBraceNewline = []byte("}\n")
> -	backslashN      = []byte{'\\', 'n'}
> -	backslashR      = []byte{'\\', 'r'}
> -	backslashT      = []byte{'\\', 't'}
> -	backslashDQ     = []byte{'\\', '"'}
> -	backslashBS     = []byte{'\\', '\\'}
> -	posInf          = []byte("inf")
> -	negInf          = []byte("-inf")
> -	nan             = []byte("nan")
> -)
> -
> -type writer interface {
> -	io.Writer
> -	WriteByte(byte) error
> -}
> -
> -// textWriter is an io.Writer that tracks its indentation level.
> -type textWriter struct {
> -	ind      int
> -	complete bool // if the current position is a complete line
> -	compact  bool // whether to write out as a one-liner
> -	w        writer
> -}
> -
> -func (w *textWriter) WriteString(s string) (n int, err error) {
> -	if !strings.Contains(s, "\n") {
> -		if !w.compact && w.complete {
> -			w.writeIndent()
> -		}
> -		w.complete = false
> -		return io.WriteString(w.w, s)
> -	}
> -	// WriteString is typically called without newlines, so this
> -	// codepath and its copy are rare.  We copy to avoid
> -	// duplicating all of Write's logic here.
> -	return w.Write([]byte(s))
> -}
> -
> -func (w *textWriter) Write(p []byte) (n int, err error) {
> -	newlines := bytes.Count(p, newline)
> -	if newlines == 0 {
> -		if !w.compact && w.complete {
> -			w.writeIndent()
> -		}
> -		n, err = w.w.Write(p)
> -		w.complete = false
> -		return n, err
> -	}
> -
> -	frags := bytes.SplitN(p, newline, newlines+1)
> -	if w.compact {
> -		for i, frag := range frags {
> -			if i > 0 {
> -				if err := w.w.WriteByte(' '); err != nil {
> -					return n, err
> -				}
> -				n++
> -			}
> -			nn, err := w.w.Write(frag)
> -			n += nn
> -			if err != nil {
> -				return n, err
> -			}
> -		}
> -		return n, nil
> -	}
> -
> -	for i, frag := range frags {
> -		if w.complete {
> -			w.writeIndent()
> -		}
> -		nn, err := w.w.Write(frag)
> -		n += nn
> -		if err != nil {
> -			return n, err
> -		}
> -		if i+1 < len(frags) {
> -			if err := w.w.WriteByte('\n'); err != nil {
> -				return n, err
> -			}
> -			n++
> -		}
> -	}
> -	w.complete = len(frags[len(frags)-1]) == 0
> -	return n, nil
> -}
> -
> -func (w *textWriter) WriteByte(c byte) error {
> -	if w.compact && c == '\n' {
> -		c = ' '
> -	}
> -	if !w.compact && w.complete {
> -		w.writeIndent()
> -	}
> -	err := w.w.WriteByte(c)
> -	w.complete = c == '\n'
> -	return err
> -}
> -
> -func (w *textWriter) indent() { w.ind++ }
> -
> -func (w *textWriter) unindent() {
> -	if w.ind == 0 {
> -		log.Print("proto: textWriter unindented too far")
> -		return
> -	}
> -	w.ind--
> -}
> -
> -func writeName(w *textWriter, props *Properties) error {
> -	if _, err := w.WriteString(props.OrigName); err != nil {
> -		return err
> -	}
> -	if props.Wire != "group" {
> -		return w.WriteByte(':')
> -	}
> -	return nil
> -}
> -
> -// raw is the interface satisfied by RawMessage.
> -type raw interface {
> -	Bytes() []byte
> -}
> -
> -func requiresQuotes(u string) bool {
> -	// When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted.
> -	for _, ch := range u {
> -		switch {
> -		case ch == '.' || ch == '/' || ch == '_':
> -			continue
> -		case '0' <= ch && ch <= '9':
> -			continue
> -		case 'A' <= ch && ch <= 'Z':
> -			continue
> -		case 'a' <= ch && ch <= 'z':
> -			continue
> -		default:
> -			return true
> -		}
> -	}
> -	return false
> -}
> -
> -// isAny reports whether sv is a google.protobuf.Any message
> -func isAny(sv reflect.Value) bool {
> -	type wkt interface {
> -		XXX_WellKnownType() string
> -	}
> -	t, ok := sv.Addr().Interface().(wkt)
> -	return ok && t.XXX_WellKnownType() == "Any"
> -}
> -
> -// writeProto3Any writes an expanded google.protobuf.Any message.
> -//
> -// It returns (false, nil) if sv value can't be unmarshaled (e.g. because
> -// required messages are not linked in).
> -//
> -// It returns (true, error) when sv was written in expanded format or an error
> -// was encountered.
> -func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) {
> -	turl := sv.FieldByName("TypeUrl")
> -	val := sv.FieldByName("Value")
> -	if !turl.IsValid() || !val.IsValid() {
> -		return true, errors.New("proto: invalid google.protobuf.Any message")
> -	}
> -
> -	b, ok := val.Interface().([]byte)
> -	if !ok {
> -		return true, errors.New("proto: invalid google.protobuf.Any message")
> -	}
> -
> -	parts := strings.Split(turl.String(), "/")
> -	mt := MessageType(parts[len(parts)-1])
> -	if mt == nil {
> -		return false, nil
> -	}
> -	m := reflect.New(mt.Elem())
> -	if err := Unmarshal(b, m.Interface().(Message)); err != nil {
> -		return false, nil
> -	}
> -	w.Write([]byte("["))
> -	u := turl.String()
> -	if requiresQuotes(u) {
> -		writeString(w, u)
> -	} else {
> -		w.Write([]byte(u))
> -	}
> -	if w.compact {
> -		w.Write([]byte("]:<"))
> -	} else {
> -		w.Write([]byte("]: <\n"))
> -		w.ind++
> -	}
> -	if err := tm.writeStruct(w, m.Elem()); err != nil {
> -		return true, err
> -	}
> -	if w.compact {
> -		w.Write([]byte("> "))
> -	} else {
> -		w.ind--
> -		w.Write([]byte(">\n"))
> -	}
> -	return true, nil
> -}
> -
> -func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
> -	if tm.ExpandAny && isAny(sv) {
> -		if canExpand, err := tm.writeProto3Any(w, sv); canExpand {
> -			return err
> -		}
> -	}
> -	st := sv.Type()
> -	sprops := GetProperties(st)
> -	for i := 0; i < sv.NumField(); i++ {
> -		fv := sv.Field(i)
> -		props := sprops.Prop[i]
> -		name := st.Field(i).Name
> -
> -		if strings.HasPrefix(name, "XXX_") {
> -			// There are two XXX_ fields:
> -			//   XXX_unrecognized []byte
> -			//   XXX_extensions   map[int32]proto.Extension
> -			// The first is handled here;
> -			// the second is handled at the bottom of this function.
> -			if name == "XXX_unrecognized" && !fv.IsNil() {
> -				if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil {
> -					return err
> -				}
> -			}
> -			continue
> -		}
> -		if fv.Kind() == reflect.Ptr && fv.IsNil() {
> -			// Field not filled in. This could be an optional field or
> -			// a required field that wasn't filled in. Either way, there
> -			// isn't anything we can show for it.
> -			continue
> -		}
> -		if fv.Kind() == reflect.Slice && fv.IsNil() {
> -			// Repeated field that is empty, or a bytes field that is unused.
> -			continue
> -		}
> -
> -		if props.Repeated && fv.Kind() == reflect.Slice {
> -			// Repeated field.
> -			for j := 0; j < fv.Len(); j++ {
> -				if err := writeName(w, props); err != nil {
> -					return err
> -				}
> -				if !w.compact {
> -					if err := w.WriteByte(' '); err != nil {
> -						return err
> -					}
> -				}
> -				v := fv.Index(j)
> -				if v.Kind() == reflect.Ptr && v.IsNil() {
> -					// A nil message in a repeated field is not valid,
> -					// but we can handle that more gracefully than panicking.
> -					if _, err := w.Write([]byte("<nil>\n")); err != nil {
> -						return err
> -					}
> -					continue
> -				}
> -				if err := tm.writeAny(w, v, props); err != nil {
> -					return err
> -				}
> -				if err := w.WriteByte('\n'); err != nil {
> -					return err
> -				}
> -			}
> -			continue
> -		}
> -		if fv.Kind() == reflect.Map {
> -			// Map fields are rendered as a repeated struct with key/value fields.
> -			keys := fv.MapKeys()
> -			sort.Sort(mapKeys(keys))
> -			for _, key := range keys {
> -				val := fv.MapIndex(key)
> -				if err := writeName(w, props); err != nil {
> -					return err
> -				}
> -				if !w.compact {
> -					if err := w.WriteByte(' '); err != nil {
> -						return err
> -					}
> -				}
> -				// open struct
> -				if err := w.WriteByte('<'); err != nil {
> -					return err
> -				}
> -				if !w.compact {
> -					if err := w.WriteByte('\n'); err != nil {
> -						return err
> -					}
> -				}
> -				w.indent()
> -				// key
> -				if _, err := w.WriteString("key:"); err != nil {
> -					return err
> -				}
> -				if !w.compact {
> -					if err := w.WriteByte(' '); err != nil {
> -						return err
> -					}
> -				}
> -				if err := tm.writeAny(w, key, props.mkeyprop); err != nil {
> -					return err
> -				}
> -				if err := w.WriteByte('\n'); err != nil {
> -					return err
> -				}
> -				// nil values aren't legal, but we can avoid panicking because of them.
> -				if val.Kind() != reflect.Ptr || !val.IsNil() {
> -					// value
> -					if _, err := w.WriteString("value:"); err != nil {
> -						return err
> -					}
> -					if !w.compact {
> -						if err := w.WriteByte(' '); err != nil {
> -							return err
> -						}
> -					}
> -					if err := tm.writeAny(w, val, props.mvalprop); err != nil {
> -						return err
> -					}
> -					if err := w.WriteByte('\n'); err != nil {
> -						return err
> -					}
> -				}
> -				// close struct
> -				w.unindent()
> -				if err := w.WriteByte('>'); err != nil {
> -					return err
> -				}
> -				if err := w.WriteByte('\n'); err != nil {
> -					return err
> -				}
> -			}
> -			continue
> -		}
> -		if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 {
> -			// empty bytes field
> -			continue
> -		}
> -		if fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice {
> -			// proto3 non-repeated scalar field; skip if zero value
> -			if isProto3Zero(fv) {
> -				continue
> -			}
> -		}
> -
> -		if fv.Kind() == reflect.Interface {
> -			// Check if it is a oneof.
> -			if st.Field(i).Tag.Get("protobuf_oneof") != "" {
> -				// fv is nil, or holds a pointer to generated struct.
> -				// That generated struct has exactly one field,
> -				// which has a protobuf struct tag.
> -				if fv.IsNil() {
> -					continue
> -				}
> -				inner := fv.Elem().Elem() // interface -> *T -> T
> -				tag := inner.Type().Field(0).Tag.Get("protobuf")
> -				props = new(Properties) // Overwrite the outer props var, but not its pointee.
> -				props.Parse(tag)
> -				// Write the value in the oneof, not the oneof itself.
> -				fv = inner.Field(0)
> -
> -				// Special case to cope with malformed messages gracefully:
> -				// If the value in the oneof is a nil pointer, don't panic
> -				// in writeAny.
> -				if fv.Kind() == reflect.Ptr && fv.IsNil() {
> -					// Use errors.New so writeAny won't render quotes.
> -					msg := errors.New("/* nil */")
> -					fv = reflect.ValueOf(&msg).Elem()
> -				}
> -			}
> -		}
> -
> -		if err := writeName(w, props); err != nil {
> -			return err
> -		}
> -		if !w.compact {
> -			if err := w.WriteByte(' '); err != nil {
> -				return err
> -			}
> -		}
> -		if b, ok := fv.Interface().(raw); ok {
> -			if err := writeRaw(w, b.Bytes()); err != nil {
> -				return err
> -			}
> -			continue
> -		}
> -
> -		// Enums have a String method, so writeAny will work fine.
> -		if err := tm.writeAny(w, fv, props); err != nil {
> -			return err
> -		}
> -
> -		if err := w.WriteByte('\n'); err != nil {
> -			return err
> -		}
> -	}
> -
> -	// Extensions (the XXX_extensions field).
> -	pv := sv.Addr()
> -	if _, ok := extendable(pv.Interface()); ok {
> -		if err := tm.writeExtensions(w, pv); err != nil {
> -			return err
> -		}
> -	}
> -
> -	return nil
> -}
> -
> -// writeRaw writes an uninterpreted raw message.
> -func writeRaw(w *textWriter, b []byte) error {
> -	if err := w.WriteByte('<'); err != nil {
> -		return err
> -	}
> -	if !w.compact {
> -		if err := w.WriteByte('\n'); err != nil {
> -			return err
> -		}
> -	}
> -	w.indent()
> -	if err := writeUnknownStruct(w, b); err != nil {
> -		return err
> -	}
> -	w.unindent()
> -	if err := w.WriteByte('>'); err != nil {
> -		return err
> -	}
> -	return nil
> -}
> -
> -// writeAny writes an arbitrary field.
> -func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {
> -	v = reflect.Indirect(v)
> -
> -	// Floats have special cases.
> -	if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 {
> -		x := v.Float()
> -		var b []byte
> -		switch {
> -		case math.IsInf(x, 1):
> -			b = posInf
> -		case math.IsInf(x, -1):
> -			b = negInf
> -		case math.IsNaN(x):
> -			b = nan
> -		}
> -		if b != nil {
> -			_, err := w.Write(b)
> -			return err
> -		}
> -		// Other values are handled below.
> -	}
> -
> -	// We don't attempt to serialise every possible value type; only those
> -	// that can occur in protocol buffers.
> -	switch v.Kind() {
> -	case reflect.Slice:
> -		// Should only be a []byte; repeated fields are handled in writeStruct.
> -		if err := writeString(w, string(v.Bytes())); err != nil {
> -			return err
> -		}
> -	case reflect.String:
> -		if err := writeString(w, v.String()); err != nil {
> -			return err
> -		}
> -	case reflect.Struct:
> -		// Required/optional group/message.
> -		var bra, ket byte = '<', '>'
> -		if props != nil && props.Wire == "group" {
> -			bra, ket = '{', '}'
> -		}
> -		if err := w.WriteByte(bra); err != nil {
> -			return err
> -		}
> -		if !w.compact {
> -			if err := w.WriteByte('\n'); err != nil {
> -				return err
> -			}
> -		}
> -		w.indent()
> -		if etm, ok := v.Interface().(encoding.TextMarshaler); ok {
> -			text, err := etm.MarshalText()
> -			if err != nil {
> -				return err
> -			}
> -			if _, err = w.Write(text); err != nil {
> -				return err
> -			}
> -		} else if err := tm.writeStruct(w, v); err != nil {
> -			return err
> -		}
> -		w.unindent()
> -		if err := w.WriteByte(ket); err != nil {
> -			return err
> -		}
> -	default:
> -		_, err := fmt.Fprint(w, v.Interface())
> -		return err
> -	}
> -	return nil
> -}
> -
> -// equivalent to C's isprint.
> -func isprint(c byte) bool {
> -	return c >= 0x20 && c < 0x7f
> -}
> -
> -// writeString writes a string in the protocol buffer text format.
> -// It is similar to strconv.Quote except we don't use Go escape sequences,
> -// we treat the string as a byte sequence, and we use octal escapes.
> -// These differences are to maintain interoperability with the other
> -// languages' implementations of the text format.
> -func writeString(w *textWriter, s string) error {
> -	// use WriteByte here to get any needed indent
> -	if err := w.WriteByte('"'); err != nil {
> -		return err
> -	}
> -	// Loop over the bytes, not the runes.
> -	for i := 0; i < len(s); i++ {
> -		var err error
> -		// Divergence from C++: we don't escape apostrophes.
> -		// There's no need to escape them, and the C++ parser
> -		// copes with a naked apostrophe.
> -		switch c := s[i]; c {
> -		case '\n':
> -			_, err = w.w.Write(backslashN)
> -		case '\r':
> -			_, err = w.w.Write(backslashR)
> -		case '\t':
> -			_, err = w.w.Write(backslashT)
> -		case '"':
> -			_, err = w.w.Write(backslashDQ)
> -		case '\\':
> -			_, err = w.w.Write(backslashBS)
> -		default:
> -			if isprint(c) {
> -				err = w.w.WriteByte(c)
> -			} else {
> -				_, err = fmt.Fprintf(w.w, "\\%03o", c)
> -			}
> -		}
> -		if err != nil {
> -			return err
> -		}
> -	}
> -	return w.WriteByte('"')
> -}
> -
> -func writeUnknownStruct(w *textWriter, data []byte) (err error) {
> -	if !w.compact {
> -		if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil {
> -			return err
> -		}
> -	}
> -	b := NewBuffer(data)
> -	for b.index < len(b.buf) {
> -		x, err := b.DecodeVarint()
> -		if err != nil {
> -			_, err := fmt.Fprintf(w, "/* %v */\n", err)
> -			return err
> -		}
> -		wire, tag := x&7, x>>3
> -		if wire == WireEndGroup {
> -			w.unindent()
> -			if _, err := w.Write(endBraceNewline); err != nil {
> -				return err
> -			}
> -			continue
> -		}
> -		if _, err := fmt.Fprint(w, tag); err != nil {
> -			return err
> -		}
> -		if wire != WireStartGroup {
> -			if err := w.WriteByte(':'); err != nil {
> -				return err
> -			}
> -		}
> -		if !w.compact || wire == WireStartGroup {
> -			if err := w.WriteByte(' '); err != nil {
> -				return err
> -			}
> -		}
> -		switch wire {
> -		case WireBytes:
> -			buf, e := b.DecodeRawBytes(false)
> -			if e == nil {
> -				_, err = fmt.Fprintf(w, "%q", buf)
> -			} else {
> -				_, err = fmt.Fprintf(w, "/* %v */", e)
> -			}
> -		case WireFixed32:
> -			x, err = b.DecodeFixed32()
> -			err = writeUnknownInt(w, x, err)
> -		case WireFixed64:
> -			x, err = b.DecodeFixed64()
> -			err = writeUnknownInt(w, x, err)
> -		case WireStartGroup:
> -			err = w.WriteByte('{')
> -			w.indent()
> -		case WireVarint:
> -			x, err = b.DecodeVarint()
> -			err = writeUnknownInt(w, x, err)
> -		default:
> -			_, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire)
> -		}
> -		if err != nil {
> -			return err
> -		}
> -		if err = w.WriteByte('\n'); err != nil {
> -			return err
> -		}
> -	}
> -	return nil
> -}
> -
> -func writeUnknownInt(w *textWriter, x uint64, err error) error {
> -	if err == nil {
> -		_, err = fmt.Fprint(w, x)
> -	} else {
> -		_, err = fmt.Fprintf(w, "/* %v */", err)
> -	}
> -	return err
> -}
> -
> -type int32Slice []int32
> -
> -func (s int32Slice) Len() int           { return len(s) }
> -func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }
> -func (s int32Slice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
> -
> -// writeExtensions writes all the extensions in pv.
> -// pv is assumed to be a pointer to a protocol message struct that is extendable.
> -func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error {
> -	emap := extensionMaps[pv.Type().Elem()]
> -	ep, _ := extendable(pv.Interface())
> -
> -	// Order the extensions by ID.
> -	// This isn't strictly necessary, but it will give us
> -	// canonical output, which will also make testing easier.
> -	m, mu := ep.extensionsRead()
> -	if m == nil {
> -		return nil
> -	}
> -	mu.Lock()
> -	ids := make([]int32, 0, len(m))
> -	for id := range m {
> -		ids = append(ids, id)
> -	}
> -	sort.Sort(int32Slice(ids))
> -	mu.Unlock()
> -
> -	for _, extNum := range ids {
> -		ext := m[extNum]
> -		var desc *ExtensionDesc
> -		if emap != nil {
> -			desc = emap[extNum]
> -		}
> -		if desc == nil {
> -			// Unknown extension.
> -			if err := writeUnknownStruct(w, ext.enc); err != nil {
> -				return err
> -			}
> -			continue
> -		}
> -
> -		pb, err := GetExtension(ep, desc)
> -		if err != nil {
> -			return fmt.Errorf("failed getting extension: %v", err)
> -		}
> -
> -		// Repeated extensions will appear as a slice.
> -		if !desc.repeated() {
> -			if err := tm.writeExtension(w, desc.Name, pb); err != nil {
> -				return err
> -			}
> -		} else {
> -			v := reflect.ValueOf(pb)
> -			for i := 0; i < v.Len(); i++ {
> -				if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil {
> -					return err
> -				}
> -			}
> -		}
> -	}
> -	return nil
> -}
> -
> -func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error {
> -	if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil {
> -		return err
> -	}
> -	if !w.compact {
> -		if err := w.WriteByte(' '); err != nil {
> -			return err
> -		}
> -	}
> -	if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil {
> -		return err
> -	}
> -	if err := w.WriteByte('\n'); err != nil {
> -		return err
> -	}
> -	return nil
> -}
> -
> -func (w *textWriter) writeIndent() {
> -	if !w.complete {
> -		return
> -	}
> -	remain := w.ind * 2
> -	for remain > 0 {
> -		n := remain
> -		if n > len(spaces) {
> -			n = len(spaces)
> -		}
> -		w.w.Write(spaces[:n])
> -		remain -= n
> -	}
> -	w.complete = false
> -}
> -
> -// TextMarshaler is a configurable text format marshaler.
> -type TextMarshaler struct {
> -	Compact   bool // use compact text format (one line).
> -	ExpandAny bool // expand google.protobuf.Any messages of known types
> -}
> -
> -// Marshal writes a given protocol buffer in text format.
> -// The only errors returned are from w.
> -func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error {
> -	val := reflect.ValueOf(pb)
> -	if pb == nil || val.IsNil() {
> -		w.Write([]byte("<nil>"))
> -		return nil
> -	}
> -	var bw *bufio.Writer
> -	ww, ok := w.(writer)
> -	if !ok {
> -		bw = bufio.NewWriter(w)
> -		ww = bw
> -	}
> -	aw := &textWriter{
> -		w:        ww,
> -		complete: true,
> -		compact:  tm.Compact,
> -	}
> -
> -	if etm, ok := pb.(encoding.TextMarshaler); ok {
> -		text, err := etm.MarshalText()
> -		if err != nil {
> -			return err
> -		}
> -		if _, err = aw.Write(text); err != nil {
> -			return err
> -		}
> -		if bw != nil {
> -			return bw.Flush()
> -		}
> -		return nil
> -	}
> -	// Dereference the received pointer so we don't have outer < and >.
> -	v := reflect.Indirect(val)
> -	if err := tm.writeStruct(aw, v); err != nil {
> -		return err
> -	}
> -	if bw != nil {
> -		return bw.Flush()
> -	}
> -	return nil
> -}
> -
> -// Text is the same as Marshal, but returns the string directly.
> -func (tm *TextMarshaler) Text(pb Message) string {
> -	var buf bytes.Buffer
> -	tm.Marshal(&buf, pb)
> -	return buf.String()
> -}
> -
> -var (
> -	defaultTextMarshaler = TextMarshaler{}
> -	compactTextMarshaler = TextMarshaler{Compact: true}
> -)
> -
> -// TODO: consider removing some of the Marshal functions below.
> -
> -// MarshalText writes a given protocol buffer in text format.
> -// The only errors returned are from w.
> -func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) }
> -
> -// MarshalTextString is the same as MarshalText, but returns the string directly.
> -func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) }
> -
> -// CompactText writes a given protocol buffer in compact text format (one line).
> -func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) }
> -
> -// CompactTextString is the same as CompactText, but returns the string directly.
> -func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) }
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/text_parser.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/text_parser.go
> deleted file mode 100644
> index 5e14513f..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/text_parser.go
> +++ /dev/null
> @@ -1,895 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto
> -
> -// Functions for parsing the Text protocol buffer format.
> -// TODO: message sets.
> -
> -import (
> -	"encoding"
> -	"errors"
> -	"fmt"
> -	"reflect"
> -	"strconv"
> -	"strings"
> -	"unicode/utf8"
> -)
> -
> -// Error string emitted when deserializing Any and fields are already set
> -const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set"
> -
> -type ParseError struct {
> -	Message string
> -	Line    int // 1-based line number
> -	Offset  int // 0-based byte offset from start of input
> -}
> -
> -func (p *ParseError) Error() string {
> -	if p.Line == 1 {
> -		// show offset only for first line
> -		return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message)
> -	}
> -	return fmt.Sprintf("line %d: %v", p.Line, p.Message)
> -}
> -
> -type token struct {
> -	value    string
> -	err      *ParseError
> -	line     int    // line number
> -	offset   int    // byte number from start of input, not start of line
> -	unquoted string // the unquoted version of value, if it was a quoted string
> -}
> -
> -func (t *token) String() string {
> -	if t.err == nil {
> -		return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset)
> -	}
> -	return fmt.Sprintf("parse error: %v", t.err)
> -}
> -
> -type textParser struct {
> -	s            string // remaining input
> -	done         bool   // whether the parsing is finished (success or error)
> -	backed       bool   // whether back() was called
> -	offset, line int
> -	cur          token
> -}
> -
> -func newTextParser(s string) *textParser {
> -	p := new(textParser)
> -	p.s = s
> -	p.line = 1
> -	p.cur.line = 1
> -	return p
> -}
> -
> -func (p *textParser) errorf(format string, a ...interface{}) *ParseError {
> -	pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset}
> -	p.cur.err = pe
> -	p.done = true
> -	return pe
> -}
> -
> -// Numbers and identifiers are matched by [-+._A-Za-z0-9]
> -func isIdentOrNumberChar(c byte) bool {
> -	switch {
> -	case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z':
> -		return true
> -	case '0' <= c && c <= '9':
> -		return true
> -	}
> -	switch c {
> -	case '-', '+', '.', '_':
> -		return true
> -	}
> -	return false
> -}
> -
> -func isWhitespace(c byte) bool {
> -	switch c {
> -	case ' ', '\t', '\n', '\r':
> -		return true
> -	}
> -	return false
> -}
> -
> -func isQuote(c byte) bool {
> -	switch c {
> -	case '"', '\'':
> -		return true
> -	}
> -	return false
> -}
> -
> -func (p *textParser) skipWhitespace() {
> -	i := 0
> -	for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') {
> -		if p.s[i] == '#' {
> -			// comment; skip to end of line or input
> -			for i < len(p.s) && p.s[i] != '\n' {
> -				i++
> -			}
> -			if i == len(p.s) {
> -				break
> -			}
> -		}
> -		if p.s[i] == '\n' {
> -			p.line++
> -		}
> -		i++
> -	}
> -	p.offset += i
> -	p.s = p.s[i:len(p.s)]
> -	if len(p.s) == 0 {
> -		p.done = true
> -	}
> -}
> -
> -func (p *textParser) advance() {
> -	// Skip whitespace
> -	p.skipWhitespace()
> -	if p.done {
> -		return
> -	}
> -
> -	// Start of non-whitespace
> -	p.cur.err = nil
> -	p.cur.offset, p.cur.line = p.offset, p.line
> -	p.cur.unquoted = ""
> -	switch p.s[0] {
> -	case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/':
> -		// Single symbol
> -		p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)]
> -	case '"', '\'':
> -		// Quoted string
> -		i := 1
> -		for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' {
> -			if p.s[i] == '\\' && i+1 < len(p.s) {
> -				// skip escaped char
> -				i++
> -			}
> -			i++
> -		}
> -		if i >= len(p.s) || p.s[i] != p.s[0] {
> -			p.errorf("unmatched quote")
> -			return
> -		}
> -		unq, err := unquoteC(p.s[1:i], rune(p.s[0]))
> -		if err != nil {
> -			p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err)
> -			return
> -		}
> -		p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)]
> -		p.cur.unquoted = unq
> -	default:
> -		i := 0
> -		for i < len(p.s) && isIdentOrNumberChar(p.s[i]) {
> -			i++
> -		}
> -		if i == 0 {
> -			p.errorf("unexpected byte %#x", p.s[0])
> -			return
> -		}
> -		p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)]
> -	}
> -	p.offset += len(p.cur.value)
> -}
> -
> -var (
> -	errBadUTF8 = errors.New("proto: bad UTF-8")
> -	errBadHex  = errors.New("proto: bad hexadecimal")
> -)
> -
> -func unquoteC(s string, quote rune) (string, error) {
> -	// This is based on C++'s tokenizer.cc.
> -	// Despite its name, this is *not* parsing C syntax.
> -	// For instance, "\0" is an invalid quoted string.
> -
> -	// Avoid allocation in trivial cases.
> -	simple := true
> -	for _, r := range s {
> -		if r == '\\' || r == quote {
> -			simple = false
> -			break
> -		}
> -	}
> -	if simple {
> -		return s, nil
> -	}
> -
> -	buf := make([]byte, 0, 3*len(s)/2)
> -	for len(s) > 0 {
> -		r, n := utf8.DecodeRuneInString(s)
> -		if r == utf8.RuneError && n == 1 {
> -			return "", errBadUTF8
> -		}
> -		s = s[n:]
> -		if r != '\\' {
> -			if r < utf8.RuneSelf {
> -				buf = append(buf, byte(r))
> -			} else {
> -				buf = append(buf, string(r)...)
> -			}
> -			continue
> -		}
> -
> -		ch, tail, err := unescape(s)
> -		if err != nil {
> -			return "", err
> -		}
> -		buf = append(buf, ch...)
> -		s = tail
> -	}
> -	return string(buf), nil
> -}
> -
> -func unescape(s string) (ch string, tail string, err error) {
> -	r, n := utf8.DecodeRuneInString(s)
> -	if r == utf8.RuneError && n == 1 {
> -		return "", "", errBadUTF8
> -	}
> -	s = s[n:]
> -	switch r {
> -	case 'a':
> -		return "\a", s, nil
> -	case 'b':
> -		return "\b", s, nil
> -	case 'f':
> -		return "\f", s, nil
> -	case 'n':
> -		return "\n", s, nil
> -	case 'r':
> -		return "\r", s, nil
> -	case 't':
> -		return "\t", s, nil
> -	case 'v':
> -		return "\v", s, nil
> -	case '?':
> -		return "?", s, nil // trigraph workaround
> -	case '\'', '"', '\\':
> -		return string(r), s, nil
> -	case '0', '1', '2', '3', '4', '5', '6', '7', 'x', 'X':
> -		if len(s) < 2 {
> -			return "", "", fmt.Errorf(`\%c requires 2 following digits`, r)
> -		}
> -		base := 8
> -		ss := s[:2]
> -		s = s[2:]
> -		if r == 'x' || r == 'X' {
> -			base = 16
> -		} else {
> -			ss = string(r) + ss
> -		}
> -		i, err := strconv.ParseUint(ss, base, 8)
> -		if err != nil {
> -			return "", "", err
> -		}
> -		return string([]byte{byte(i)}), s, nil
> -	case 'u', 'U':
> -		n := 4
> -		if r == 'U' {
> -			n = 8
> -		}
> -		if len(s) < n {
> -			return "", "", fmt.Errorf(`\%c requires %d digits`, r, n)
> -		}
> -
> -		bs := make([]byte, n/2)
> -		for i := 0; i < n; i += 2 {
> -			a, ok1 := unhex(s[i])
> -			b, ok2 := unhex(s[i+1])
> -			if !ok1 || !ok2 {
> -				return "", "", errBadHex
> -			}
> -			bs[i/2] = a<<4 | b
> -		}
> -		s = s[n:]
> -		return string(bs), s, nil
> -	}
> -	return "", "", fmt.Errorf(`unknown escape \%c`, r)
> -}
> -
> -// Adapted from src/pkg/strconv/quote.go.
> -func unhex(b byte) (v byte, ok bool) {
> -	switch {
> -	case '0' <= b && b <= '9':
> -		return b - '0', true
> -	case 'a' <= b && b <= 'f':
> -		return b - 'a' + 10, true
> -	case 'A' <= b && b <= 'F':
> -		return b - 'A' + 10, true
> -	}
> -	return 0, false
> -}
> -
> -// Back off the parser by one token. Can only be done between calls to next().
> -// It makes the next advance() a no-op.
> -func (p *textParser) back() { p.backed = true }
> -
> -// Advances the parser and returns the new current token.
> -func (p *textParser) next() *token {
> -	if p.backed || p.done {
> -		p.backed = false
> -		return &p.cur
> -	}
> -	p.advance()
> -	if p.done {
> -		p.cur.value = ""
> -	} else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) {
> -		// Look for multiple quoted strings separated by whitespace,
> -		// and concatenate them.
> -		cat := p.cur
> -		for {
> -			p.skipWhitespace()
> -			if p.done || !isQuote(p.s[0]) {
> -				break
> -			}
> -			p.advance()
> -			if p.cur.err != nil {
> -				return &p.cur
> -			}
> -			cat.value += " " + p.cur.value
> -			cat.unquoted += p.cur.unquoted
> -		}
> -		p.done = false // parser may have seen EOF, but we want to return cat
> -		p.cur = cat
> -	}
> -	return &p.cur
> -}
> -
> -func (p *textParser) consumeToken(s string) error {
> -	tok := p.next()
> -	if tok.err != nil {
> -		return tok.err
> -	}
> -	if tok.value != s {
> -		p.back()
> -		return p.errorf("expected %q, found %q", s, tok.value)
> -	}
> -	return nil
> -}
> -
> -// Return a RequiredNotSetError indicating which required field was not set.
> -func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError {
> -	st := sv.Type()
> -	sprops := GetProperties(st)
> -	for i := 0; i < st.NumField(); i++ {
> -		if !isNil(sv.Field(i)) {
> -			continue
> -		}
> -
> -		props := sprops.Prop[i]
> -		if props.Required {
> -			return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)}
> -		}
> -	}
> -	return &RequiredNotSetError{fmt.Sprintf("%v.<unknown field name>", st)} // should not happen
> -}
> -
> -// Returns the index in the struct for the named field, as well as the parsed tag properties.
> -func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) {
> -	i, ok := sprops.decoderOrigNames[name]
> -	if ok {
> -		return i, sprops.Prop[i], true
> -	}
> -	return -1, nil, false
> -}
> -
> -// Consume a ':' from the input stream (if the next token is a colon),
> -// returning an error if a colon is needed but not present.
> -func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError {
> -	tok := p.next()
> -	if tok.err != nil {
> -		return tok.err
> -	}
> -	if tok.value != ":" {
> -		// Colon is optional when the field is a group or message.
> -		needColon := true
> -		switch props.Wire {
> -		case "group":
> -			needColon = false
> -		case "bytes":
> -			// A "bytes" field is either a message, a string, or a repeated field;
> -			// those three become *T, *string and []T respectively, so we can check for
> -			// this field being a pointer to a non-string.
> -			if typ.Kind() == reflect.Ptr {
> -				// *T or *string
> -				if typ.Elem().Kind() == reflect.String {
> -					break
> -				}
> -			} else if typ.Kind() == reflect.Slice {
> -				// []T or []*T
> -				if typ.Elem().Kind() != reflect.Ptr {
> -					break
> -				}
> -			} else if typ.Kind() == reflect.String {
> -				// The proto3 exception is for a string field,
> -				// which requires a colon.
> -				break
> -			}
> -			needColon = false
> -		}
> -		if needColon {
> -			return p.errorf("expected ':', found %q", tok.value)
> -		}
> -		p.back()
> -	}
> -	return nil
> -}
> -
> -func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
> -	st := sv.Type()
> -	sprops := GetProperties(st)
> -	reqCount := sprops.reqCount
> -	var reqFieldErr error
> -	fieldSet := make(map[string]bool)
> -	// A struct is a sequence of "name: value", terminated by one of
> -	// '>' or '}', or the end of the input.  A name may also be
> -	// "[extension]" or "[type/url]".
> -	//
> -	// The whole struct can also be an expanded Any message, like:
> -	// [type/url] < ... struct contents ... >
> -	for {
> -		tok := p.next()
> -		if tok.err != nil {
> -			return tok.err
> -		}
> -		if tok.value == terminator {
> -			break
> -		}
> -		if tok.value == "[" {
> -			// Looks like an extension or an Any.
> -			//
> -			// TODO: Check whether we need to handle
> -			// namespace rooted names (e.g. ".something.Foo").
> -			extName, err := p.consumeExtName()
> -			if err != nil {
> -				return err
> -			}
> -
> -			if s := strings.LastIndex(extName, "/"); s >= 0 {
> -				// If it contains a slash, it's an Any type URL.
> -				messageName := extName[s+1:]
> -				mt := MessageType(messageName)
> -				if mt == nil {
> -					return p.errorf("unrecognized message %q in google.protobuf.Any", messageName)
> -				}
> -				tok = p.next()
> -				if tok.err != nil {
> -					return tok.err
> -				}
> -				// consume an optional colon
> -				if tok.value == ":" {
> -					tok = p.next()
> -					if tok.err != nil {
> -						return tok.err
> -					}
> -				}
> -				var terminator string
> -				switch tok.value {
> -				case "<":
> -					terminator = ">"
> -				case "{":
> -					terminator = "}"
> -				default:
> -					return p.errorf("expected '{' or '<', found %q", tok.value)
> -				}
> -				v := reflect.New(mt.Elem())
> -				if pe := p.readStruct(v.Elem(), terminator); pe != nil {
> -					return pe
> -				}
> -				b, err := Marshal(v.Interface().(Message))
> -				if err != nil {
> -					return p.errorf("failed to marshal message of type %q: %v", messageName, err)
> -				}
> -				if fieldSet["type_url"] {
> -					return p.errorf(anyRepeatedlyUnpacked, "type_url")
> -				}
> -				if fieldSet["value"] {
> -					return p.errorf(anyRepeatedlyUnpacked, "value")
> -				}
> -				sv.FieldByName("TypeUrl").SetString(extName)
> -				sv.FieldByName("Value").SetBytes(b)
> -				fieldSet["type_url"] = true
> -				fieldSet["value"] = true
> -				continue
> -			}
> -
> -			var desc *ExtensionDesc
> -			// This could be faster, but it's functional.
> -			// TODO: Do something smarter than a linear scan.
> -			for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) {
> -				if d.Name == extName {
> -					desc = d
> -					break
> -				}
> -			}
> -			if desc == nil {
> -				return p.errorf("unrecognized extension %q", extName)
> -			}
> -
> -			props := &Properties{}
> -			props.Parse(desc.Tag)
> -
> -			typ := reflect.TypeOf(desc.ExtensionType)
> -			if err := p.checkForColon(props, typ); err != nil {
> -				return err
> -			}
> -
> -			rep := desc.repeated()
> -
> -			// Read the extension structure, and set it in
> -			// the value we're constructing.
> -			var ext reflect.Value
> -			if !rep {
> -				ext = reflect.New(typ).Elem()
> -			} else {
> -				ext = reflect.New(typ.Elem()).Elem()
> -			}
> -			if err := p.readAny(ext, props); err != nil {
> -				if _, ok := err.(*RequiredNotSetError); !ok {
> -					return err
> -				}
> -				reqFieldErr = err
> -			}
> -			ep := sv.Addr().Interface().(Message)
> -			if !rep {
> -				SetExtension(ep, desc, ext.Interface())
> -			} else {
> -				old, err := GetExtension(ep, desc)
> -				var sl reflect.Value
> -				if err == nil {
> -					sl = reflect.ValueOf(old) // existing slice
> -				} else {
> -					sl = reflect.MakeSlice(typ, 0, 1)
> -				}
> -				sl = reflect.Append(sl, ext)
> -				SetExtension(ep, desc, sl.Interface())
> -			}
> -			if err := p.consumeOptionalSeparator(); err != nil {
> -				return err
> -			}
> -			continue
> -		}
> -
> -		// This is a normal, non-extension field.
> -		name := tok.value
> -		var dst reflect.Value
> -		fi, props, ok := structFieldByName(sprops, name)
> -		if ok {
> -			dst = sv.Field(fi)
> -		} else if oop, ok := sprops.OneofTypes[name]; ok {
> -			// It is a oneof.
> -			props = oop.Prop
> -			nv := reflect.New(oop.Type.Elem())
> -			dst = nv.Elem().Field(0)
> -			field := sv.Field(oop.Field)
> -			if !field.IsNil() {
> -				return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name)
> -			}
> -			field.Set(nv)
> -		}
> -		if !dst.IsValid() {
> -			return p.errorf("unknown field name %q in %v", name, st)
> -		}
> -
> -		if dst.Kind() == reflect.Map {
> -			// Consume any colon.
> -			if err := p.checkForColon(props, dst.Type()); err != nil {
> -				return err
> -			}
> -
> -			// Construct the map if it doesn't already exist.
> -			if dst.IsNil() {
> -				dst.Set(reflect.MakeMap(dst.Type()))
> -			}
> -			key := reflect.New(dst.Type().Key()).Elem()
> -			val := reflect.New(dst.Type().Elem()).Elem()
> -
> -			// The map entry should be this sequence of tokens:
> -			//	< key : KEY value : VALUE >
> -			// However, implementations may omit key or value, and technically
> -			// we should support them in any order.  See b/28924776 for a time
> -			// this went wrong.
> -
> -			tok := p.next()
> -			var terminator string
> -			switch tok.value {
> -			case "<":
> -				terminator = ">"
> -			case "{":
> -				terminator = "}"
> -			default:
> -				return p.errorf("expected '{' or '<', found %q", tok.value)
> -			}
> -			for {
> -				tok := p.next()
> -				if tok.err != nil {
> -					return tok.err
> -				}
> -				if tok.value == terminator {
> -					break
> -				}
> -				switch tok.value {
> -				case "key":
> -					if err := p.consumeToken(":"); err != nil {
> -						return err
> -					}
> -					if err := p.readAny(key, props.mkeyprop); err != nil {
> -						return err
> -					}
> -					if err := p.consumeOptionalSeparator(); err != nil {
> -						return err
> -					}
> -				case "value":
> -					if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil {
> -						return err
> -					}
> -					if err := p.readAny(val, props.mvalprop); err != nil {
> -						return err
> -					}
> -					if err := p.consumeOptionalSeparator(); err != nil {
> -						return err
> -					}
> -				default:
> -					p.back()
> -					return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value)
> -				}
> -			}
> -
> -			dst.SetMapIndex(key, val)
> -			continue
> -		}
> -
> -		// Check that it's not already set if it's not a repeated field.
> -		if !props.Repeated && fieldSet[name] {
> -			return p.errorf("non-repeated field %q was repeated", name)
> -		}
> -
> -		if err := p.checkForColon(props, dst.Type()); err != nil {
> -			return err
> -		}
> -
> -		// Parse into the field.
> -		fieldSet[name] = true
> -		if err := p.readAny(dst, props); err != nil {
> -			if _, ok := err.(*RequiredNotSetError); !ok {
> -				return err
> -			}
> -			reqFieldErr = err
> -		}
> -		if props.Required {
> -			reqCount--
> -		}
> -
> -		if err := p.consumeOptionalSeparator(); err != nil {
> -			return err
> -		}
> -
> -	}
> -
> -	if reqCount > 0 {
> -		return p.missingRequiredFieldError(sv)
> -	}
> -	return reqFieldErr
> -}
> -
> -// consumeExtName consumes extension name or expanded Any type URL and the
> -// following ']'. It returns the name or URL consumed.
> -func (p *textParser) consumeExtName() (string, error) {
> -	tok := p.next()
> -	if tok.err != nil {
> -		return "", tok.err
> -	}
> -
> -	// If extension name or type url is quoted, it's a single token.
> -	if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] {
> -		name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0]))
> -		if err != nil {
> -			return "", err
> -		}
> -		return name, p.consumeToken("]")
> -	}
> -
> -	// Consume everything up to "]"
> -	var parts []string
> -	for tok.value != "]" {
> -		parts = append(parts, tok.value)
> -		tok = p.next()
> -		if tok.err != nil {
> -			return "", p.errorf("unrecognized type_url or extension name: %s", tok.err)
> -		}
> -	}
> -	return strings.Join(parts, ""), nil
> -}
> -
> -// consumeOptionalSeparator consumes an optional semicolon or comma.
> -// It is used in readStruct to provide backward compatibility.
> -func (p *textParser) consumeOptionalSeparator() error {
> -	tok := p.next()
> -	if tok.err != nil {
> -		return tok.err
> -	}
> -	if tok.value != ";" && tok.value != "," {
> -		p.back()
> -	}
> -	return nil
> -}
> -
> -func (p *textParser) readAny(v reflect.Value, props *Properties) error {
> -	tok := p.next()
> -	if tok.err != nil {
> -		return tok.err
> -	}
> -	if tok.value == "" {
> -		return p.errorf("unexpected EOF")
> -	}
> -
> -	switch fv := v; fv.Kind() {
> -	case reflect.Slice:
> -		at := v.Type()
> -		if at.Elem().Kind() == reflect.Uint8 {
> -			// Special case for []byte
> -			if tok.value[0] != '"' && tok.value[0] != '\'' {
> -				// Deliberately written out here, as the error after
> -				// this switch statement would write "invalid []byte: ...",
> -				// which is not as user-friendly.
> -				return p.errorf("invalid string: %v", tok.value)
> -			}
> -			bytes := []byte(tok.unquoted)
> -			fv.Set(reflect.ValueOf(bytes))
> -			return nil
> -		}
> -		// Repeated field.
> -		if tok.value == "[" {
> -			// Repeated field with list notation, like [1,2,3].
> -			for {
> -				fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))
> -				err := p.readAny(fv.Index(fv.Len()-1), props)
> -				if err != nil {
> -					return err
> -				}
> -				tok := p.next()
> -				if tok.err != nil {
> -					return tok.err
> -				}
> -				if tok.value == "]" {
> -					break
> -				}
> -				if tok.value != "," {
> -					return p.errorf("Expected ']' or ',' found %q", tok.value)
> -				}
> -			}
> -			return nil
> -		}
> -		// One value of the repeated field.
> -		p.back()
> -		fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))
> -		return p.readAny(fv.Index(fv.Len()-1), props)
> -	case reflect.Bool:
> -		// true/1/t/True or false/f/0/False.
> -		switch tok.value {
> -		case "true", "1", "t", "True":
> -			fv.SetBool(true)
> -			return nil
> -		case "false", "0", "f", "False":
> -			fv.SetBool(false)
> -			return nil
> -		}
> -	case reflect.Float32, reflect.Float64:
> -		v := tok.value
> -		// Ignore 'f' for compatibility with output generated by C++, but don't
> -		// remove 'f' when the value is "-inf" or "inf".
> -		if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" {
> -			v = v[:len(v)-1]
> -		}
> -		if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil {
> -			fv.SetFloat(f)
> -			return nil
> -		}
> -	case reflect.Int32:
> -		if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil {
> -			fv.SetInt(x)
> -			return nil
> -		}
> -
> -		if len(props.Enum) == 0 {
> -			break
> -		}
> -		m, ok := enumValueMaps[props.Enum]
> -		if !ok {
> -			break
> -		}
> -		x, ok := m[tok.value]
> -		if !ok {
> -			break
> -		}
> -		fv.SetInt(int64(x))
> -		return nil
> -	case reflect.Int64:
> -		if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil {
> -			fv.SetInt(x)
> -			return nil
> -		}
> -
> -	case reflect.Ptr:
> -		// A basic field (indirected through pointer), or a repeated message/group
> -		p.back()
> -		fv.Set(reflect.New(fv.Type().Elem()))
> -		return p.readAny(fv.Elem(), props)
> -	case reflect.String:
> -		if tok.value[0] == '"' || tok.value[0] == '\'' {
> -			fv.SetString(tok.unquoted)
> -			return nil
> -		}
> -	case reflect.Struct:
> -		var terminator string
> -		switch tok.value {
> -		case "{":
> -			terminator = "}"
> -		case "<":
> -			terminator = ">"
> -		default:
> -			return p.errorf("expected '{' or '<', found %q", tok.value)
> -		}
> -		// TODO: Handle nested messages which implement encoding.TextUnmarshaler.
> -		return p.readStruct(fv, terminator)
> -	case reflect.Uint32:
> -		if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil {
> -			fv.SetUint(x)
> -			return nil
> -		}
> -	case reflect.Uint64:
> -		if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil {
> -			fv.SetUint(x)
> -			return nil
> -		}
> -	}
> -	return p.errorf("invalid %v: %v", v.Type(), tok.value)
> -}
> -
> -// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb
> -// before starting to unmarshal, so any existing data in pb is always removed.
> -// If a required field is not set and no other error occurs,
> -// UnmarshalText returns *RequiredNotSetError.
> -func UnmarshalText(s string, pb Message) error {
> -	if um, ok := pb.(encoding.TextUnmarshaler); ok {
> -		err := um.UnmarshalText([]byte(s))
> -		return err
> -	}
> -	pb.Reset()
> -	v := reflect.ValueOf(pb)
> -	if pe := newTextParser(s).readStruct(v.Elem(), ""); pe != nil {
> -		return pe
> -	}
> -	return nil
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/text_parser_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/text_parser_test.go
> deleted file mode 100644
> index 8f7cb4d2..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/text_parser_test.go
> +++ /dev/null
> @@ -1,673 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto_test
> -
> -import (
> -	"math"
> -	"reflect"
> -	"testing"
> -
> -	. "github.com/golang/protobuf/proto"
> -	proto3pb "github.com/golang/protobuf/proto/proto3_proto"
> -	. "github.com/golang/protobuf/proto/testdata"
> -)
> -
> -type UnmarshalTextTest struct {
> -	in  string
> -	err string // if "", no error expected
> -	out *MyMessage
> -}
> -
> -func buildExtStructTest(text string) UnmarshalTextTest {
> -	msg := &MyMessage{
> -		Count: Int32(42),
> -	}
> -	SetExtension(msg, E_Ext_More, &Ext{
> -		Data: String("Hello, world!"),
> -	})
> -	return UnmarshalTextTest{in: text, out: msg}
> -}
> -
> -func buildExtDataTest(text string) UnmarshalTextTest {
> -	msg := &MyMessage{
> -		Count: Int32(42),
> -	}
> -	SetExtension(msg, E_Ext_Text, String("Hello, world!"))
> -	SetExtension(msg, E_Ext_Number, Int32(1729))
> -	return UnmarshalTextTest{in: text, out: msg}
> -}
> -
> -func buildExtRepStringTest(text string) UnmarshalTextTest {
> -	msg := &MyMessage{
> -		Count: Int32(42),
> -	}
> -	if err := SetExtension(msg, E_Greeting, []string{"bula", "hola"}); err != nil {
> -		panic(err)
> -	}
> -	return UnmarshalTextTest{in: text, out: msg}
> -}
> -
> -var unMarshalTextTests = []UnmarshalTextTest{
> -	// Basic
> -	{
> -		in: " count:42\n  name:\"Dave\" ",
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String("Dave"),
> -		},
> -	},
> -
> -	// Empty quoted string
> -	{
> -		in: `count:42 name:""`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String(""),
> -		},
> -	},
> -
> -	// Quoted string concatenation with double quotes
> -	{
> -		in: `count:42 name: "My name is "` + "\n" + `"elsewhere"`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String("My name is elsewhere"),
> -		},
> -	},
> -
> -	// Quoted string concatenation with single quotes
> -	{
> -		in: "count:42 name: 'My name is '\n'elsewhere'",
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String("My name is elsewhere"),
> -		},
> -	},
> -
> -	// Quoted string concatenations with mixed quotes
> -	{
> -		in: "count:42 name: 'My name is '\n\"elsewhere\"",
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String("My name is elsewhere"),
> -		},
> -	},
> -	{
> -		in: "count:42 name: \"My name is \"\n'elsewhere'",
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String("My name is elsewhere"),
> -		},
> -	},
> -
> -	// Quoted string with escaped apostrophe
> -	{
> -		in: `count:42 name: "HOLIDAY - New Year\'s Day"`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String("HOLIDAY - New Year's Day"),
> -		},
> -	},
> -
> -	// Quoted string with single quote
> -	{
> -		in: `count:42 name: 'Roger "The Ramster" Ramjet'`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String(`Roger "The Ramster" Ramjet`),
> -		},
> -	},
> -
> -	// Quoted string with all the accepted special characters from the C++ test
> -	{
> -		in: `count:42 name: ` + "\"\\\"A string with \\' characters \\n and \\r newlines and \\t tabs and \\001 slashes \\\\ and  multiple   spaces\"",
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String("\"A string with ' characters \n and \r newlines and \t tabs and \001 slashes \\ and  multiple   spaces"),
> -		},
> -	},
> -
> -	// Quoted string with quoted backslash
> -	{
> -		in: `count:42 name: "\\'xyz"`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String(`\'xyz`),
> -		},
> -	},
> -
> -	// Quoted string with UTF-8 bytes.
> -	{
> -		in: "count:42 name: '\303\277\302\201\xAB'",
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String("\303\277\302\201\xAB"),
> -		},
> -	},
> -
> -	// Bad quoted string
> -	{
> -		in:  `inner: < host: "\0" >` + "\n",
> -		err: `line 1.15: invalid quoted string "\0": \0 requires 2 following digits`,
> -	},
> -
> -	// Number too large for int64
> -	{
> -		in:  "count: 1 others { key: 123456789012345678901 }",
> -		err: "line 1.23: invalid int64: 123456789012345678901",
> -	},
> -
> -	// Number too large for int32
> -	{
> -		in:  "count: 1234567890123",
> -		err: "line 1.7: invalid int32: 1234567890123",
> -	},
> -
> -	// Number in hexadecimal
> -	{
> -		in: "count: 0x2beef",
> -		out: &MyMessage{
> -			Count: Int32(0x2beef),
> -		},
> -	},
> -
> -	// Number in octal
> -	{
> -		in: "count: 024601",
> -		out: &MyMessage{
> -			Count: Int32(024601),
> -		},
> -	},
> -
> -	// Floating point number with "f" suffix
> -	{
> -		in: "count: 4 others:< weight: 17.0f >",
> -		out: &MyMessage{
> -			Count: Int32(4),
> -			Others: []*OtherMessage{
> -				{
> -					Weight: Float32(17),
> -				},
> -			},
> -		},
> -	},
> -
> -	// Floating point positive infinity
> -	{
> -		in: "count: 4 bigfloat: inf",
> -		out: &MyMessage{
> -			Count:    Int32(4),
> -			Bigfloat: Float64(math.Inf(1)),
> -		},
> -	},
> -
> -	// Floating point negative infinity
> -	{
> -		in: "count: 4 bigfloat: -inf",
> -		out: &MyMessage{
> -			Count:    Int32(4),
> -			Bigfloat: Float64(math.Inf(-1)),
> -		},
> -	},
> -
> -	// Number too large for float32
> -	{
> -		in:  "others:< weight: 12345678901234567890123456789012345678901234567890 >",
> -		err: "line 1.17: invalid float32: 12345678901234567890123456789012345678901234567890",
> -	},
> -
> -	// Number posing as a quoted string
> -	{
> -		in:  `inner: < host: 12 >` + "\n",
> -		err: `line 1.15: invalid string: 12`,
> -	},
> -
> -	// Quoted string posing as int32
> -	{
> -		in:  `count: "12"`,
> -		err: `line 1.7: invalid int32: "12"`,
> -	},
> -
> -	// Quoted string posing a float32
> -	{
> -		in:  `others:< weight: "17.4" >`,
> -		err: `line 1.17: invalid float32: "17.4"`,
> -	},
> -
> -	// Enum
> -	{
> -		in: `count:42 bikeshed: BLUE`,
> -		out: &MyMessage{
> -			Count:    Int32(42),
> -			Bikeshed: MyMessage_BLUE.Enum(),
> -		},
> -	},
> -
> -	// Repeated field
> -	{
> -		in: `count:42 pet: "horsey" pet:"bunny"`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Pet:   []string{"horsey", "bunny"},
> -		},
> -	},
> -
> -	// Repeated field with list notation
> -	{
> -		in: `count:42 pet: ["horsey", "bunny"]`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Pet:   []string{"horsey", "bunny"},
> -		},
> -	},
> -
> -	// Repeated message with/without colon and <>/{}
> -	{
> -		in: `count:42 others:{} others{} others:<> others:{}`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Others: []*OtherMessage{
> -				{},
> -				{},
> -				{},
> -				{},
> -			},
> -		},
> -	},
> -
> -	// Missing colon for inner message
> -	{
> -		in: `count:42 inner < host: "cauchy.syd" >`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Inner: &InnerMessage{
> -				Host: String("cauchy.syd"),
> -			},
> -		},
> -	},
> -
> -	// Missing colon for string field
> -	{
> -		in:  `name "Dave"`,
> -		err: `line 1.5: expected ':', found "\"Dave\""`,
> -	},
> -
> -	// Missing colon for int32 field
> -	{
> -		in:  `count 42`,
> -		err: `line 1.6: expected ':', found "42"`,
> -	},
> -
> -	// Missing required field
> -	{
> -		in:  `name: "Pawel"`,
> -		err: `proto: required field "testdata.MyMessage.count" not set`,
> -		out: &MyMessage{
> -			Name: String("Pawel"),
> -		},
> -	},
> -
> -	// Missing required field in a required submessage
> -	{
> -		in:  `count: 42 we_must_go_deeper < leo_finally_won_an_oscar <> >`,
> -		err: `proto: required field "testdata.InnerMessage.host" not set`,
> -		out: &MyMessage{
> -			Count:          Int32(42),
> -			WeMustGoDeeper: &RequiredInnerMessage{LeoFinallyWonAnOscar: &InnerMessage{}},
> -		},
> -	},
> -
> -	// Repeated non-repeated field
> -	{
> -		in:  `name: "Rob" name: "Russ"`,
> -		err: `line 1.12: non-repeated field "name" was repeated`,
> -	},
> -
> -	// Group
> -	{
> -		in: `count: 17 SomeGroup { group_field: 12 }`,
> -		out: &MyMessage{
> -			Count: Int32(17),
> -			Somegroup: &MyMessage_SomeGroup{
> -				GroupField: Int32(12),
> -			},
> -		},
> -	},
> -
> -	// Semicolon between fields
> -	{
> -		in: `count:3;name:"Calvin"`,
> -		out: &MyMessage{
> -			Count: Int32(3),
> -			Name:  String("Calvin"),
> -		},
> -	},
> -	// Comma between fields
> -	{
> -		in: `count:4,name:"Ezekiel"`,
> -		out: &MyMessage{
> -			Count: Int32(4),
> -			Name:  String("Ezekiel"),
> -		},
> -	},
> -
> -	// Boolean false
> -	{
> -		in: `count:42 inner { host: "example.com" connected: false }`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Inner: &InnerMessage{
> -				Host:      String("example.com"),
> -				Connected: Bool(false),
> -			},
> -		},
> -	},
> -	// Boolean true
> -	{
> -		in: `count:42 inner { host: "example.com" connected: true }`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Inner: &InnerMessage{
> -				Host:      String("example.com"),
> -				Connected: Bool(true),
> -			},
> -		},
> -	},
> -	// Boolean 0
> -	{
> -		in: `count:42 inner { host: "example.com" connected: 0 }`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Inner: &InnerMessage{
> -				Host:      String("example.com"),
> -				Connected: Bool(false),
> -			},
> -		},
> -	},
> -	// Boolean 1
> -	{
> -		in: `count:42 inner { host: "example.com" connected: 1 }`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Inner: &InnerMessage{
> -				Host:      String("example.com"),
> -				Connected: Bool(true),
> -			},
> -		},
> -	},
> -	// Boolean f
> -	{
> -		in: `count:42 inner { host: "example.com" connected: f }`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Inner: &InnerMessage{
> -				Host:      String("example.com"),
> -				Connected: Bool(false),
> -			},
> -		},
> -	},
> -	// Boolean t
> -	{
> -		in: `count:42 inner { host: "example.com" connected: t }`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Inner: &InnerMessage{
> -				Host:      String("example.com"),
> -				Connected: Bool(true),
> -			},
> -		},
> -	},
> -	// Boolean False
> -	{
> -		in: `count:42 inner { host: "example.com" connected: False }`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Inner: &InnerMessage{
> -				Host:      String("example.com"),
> -				Connected: Bool(false),
> -			},
> -		},
> -	},
> -	// Boolean True
> -	{
> -		in: `count:42 inner { host: "example.com" connected: True }`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Inner: &InnerMessage{
> -				Host:      String("example.com"),
> -				Connected: Bool(true),
> -			},
> -		},
> -	},
> -
> -	// Extension
> -	buildExtStructTest(`count: 42 [testdata.Ext.more]:<data:"Hello, world!" >`),
> -	buildExtStructTest(`count: 42 [testdata.Ext.more] {data:"Hello, world!"}`),
> -	buildExtDataTest(`count: 42 [testdata.Ext.text]:"Hello, world!" [testdata.Ext.number]:1729`),
> -	buildExtRepStringTest(`count: 42 [testdata.greeting]:"bula" [testdata.greeting]:"hola"`),
> -
> -	// Big all-in-one
> -	{
> -		in: "count:42  # Meaning\n" +
> -			`name:"Dave" ` +
> -			`quote:"\"I didn't want to go.\"" ` +
> -			`pet:"bunny" ` +
> -			`pet:"kitty" ` +
> -			`pet:"horsey" ` +
> -			`inner:<` +
> -			`  host:"footrest.syd" ` +
> -			`  port:7001 ` +
> -			`  connected:true ` +
> -			`> ` +
> -			`others:<` +
> -			`  key:3735928559 ` +
> -			`  value:"\x01A\a\f" ` +
> -			`> ` +
> -			`others:<` +
> -			"  weight:58.9  # Atomic weight of Co\n" +
> -			`  inner:<` +
> -			`    host:"lesha.mtv" ` +
> -			`    port:8002 ` +
> -			`  >` +
> -			`>`,
> -		out: &MyMessage{
> -			Count: Int32(42),
> -			Name:  String("Dave"),
> -			Quote: String(`"I didn't want to go."`),
> -			Pet:   []string{"bunny", "kitty", "horsey"},
> -			Inner: &InnerMessage{
> -				Host:      String("footrest.syd"),
> -				Port:      Int32(7001),
> -				Connected: Bool(true),
> -			},
> -			Others: []*OtherMessage{
> -				{
> -					Key:   Int64(3735928559),
> -					Value: []byte{0x1, 'A', '\a', '\f'},
> -				},
> -				{
> -					Weight: Float32(58.9),
> -					Inner: &InnerMessage{
> -						Host: String("lesha.mtv"),
> -						Port: Int32(8002),
> -					},
> -				},
> -			},
> -		},
> -	},
> -}
> -
> -func TestUnmarshalText(t *testing.T) {
> -	for i, test := range unMarshalTextTests {
> -		pb := new(MyMessage)
> -		err := UnmarshalText(test.in, pb)
> -		if test.err == "" {
> -			// We don't expect failure.
> -			if err != nil {
> -				t.Errorf("Test %d: Unexpected error: %v", i, err)
> -			} else if !reflect.DeepEqual(pb, test.out) {
> -				t.Errorf("Test %d: Incorrect populated \nHave: %v\nWant: %v",
> -					i, pb, test.out)
> -			}
> -		} else {
> -			// We do expect failure.
> -			if err == nil {
> -				t.Errorf("Test %d: Didn't get expected error: %v", i, test.err)
> -			} else if err.Error() != test.err {
> -				t.Errorf("Test %d: Incorrect error.\nHave: %v\nWant: %v",
> -					i, err.Error(), test.err)
> -			} else if _, ok := err.(*RequiredNotSetError); ok && test.out != nil && !reflect.DeepEqual(pb, test.out) {
> -				t.Errorf("Test %d: Incorrect populated \nHave: %v\nWant: %v",
> -					i, pb, test.out)
> -			}
> -		}
> -	}
> -}
> -
> -func TestUnmarshalTextCustomMessage(t *testing.T) {
> -	msg := &textMessage{}
> -	if err := UnmarshalText("custom", msg); err != nil {
> -		t.Errorf("Unexpected error from custom unmarshal: %v", err)
> -	}
> -	if UnmarshalText("not custom", msg) == nil {
> -		t.Errorf("Didn't get expected error from custom unmarshal")
> -	}
> -}
> -
> -// Regression test; this caused a panic.
> -func TestRepeatedEnum(t *testing.T) {
> -	pb := new(RepeatedEnum)
> -	if err := UnmarshalText("color: RED", pb); err != nil {
> -		t.Fatal(err)
> -	}
> -	exp := &RepeatedEnum{
> -		Color: []RepeatedEnum_Color{RepeatedEnum_RED},
> -	}
> -	if !Equal(pb, exp) {
> -		t.Errorf("Incorrect populated \nHave: %v\nWant: %v", pb, exp)
> -	}
> -}
> -
> -func TestProto3TextParsing(t *testing.T) {
> -	m := new(proto3pb.Message)
> -	const in = `name: "Wallace" true_scotsman: true`
> -	want := &proto3pb.Message{
> -		Name:         "Wallace",
> -		TrueScotsman: true,
> -	}
> -	if err := UnmarshalText(in, m); err != nil {
> -		t.Fatal(err)
> -	}
> -	if !Equal(m, want) {
> -		t.Errorf("\n got %v\nwant %v", m, want)
> -	}
> -}
> -
> -func TestMapParsing(t *testing.T) {
> -	m := new(MessageWithMap)
> -	const in = `name_mapping:<key:1234 value:"Feist"> name_mapping:<key:1 value:"Beatles">` +
> -		`msg_mapping:<key:-4, value:<f: 2.0>,>` + // separating commas are okay
> -		`msg_mapping<key:-2 value<f: 4.0>>` + // no colon after "value"
> -		`msg_mapping:<value:<f: 5.0>>` + // omitted key
> -		`msg_mapping:<key:1>` + // omitted value
> -		`byte_mapping:<key:true value:"so be it">` +
> -		`byte_mapping:<>` // omitted key and value
> -	want := &MessageWithMap{
> -		NameMapping: map[int32]string{
> -			1:    "Beatles",
> -			1234: "Feist",
> -		},
> -		MsgMapping: map[int64]*FloatingPoint{
> -			-4: {F: Float64(2.0)},
> -			-2: {F: Float64(4.0)},
> -			0:  {F: Float64(5.0)},
> -			1:  nil,
> -		},
> -		ByteMapping: map[bool][]byte{
> -			false: nil,
> -			true:  []byte("so be it"),
> -		},
> -	}
> -	if err := UnmarshalText(in, m); err != nil {
> -		t.Fatal(err)
> -	}
> -	if !Equal(m, want) {
> -		t.Errorf("\n got %v\nwant %v", m, want)
> -	}
> -}
> -
> -func TestOneofParsing(t *testing.T) {
> -	const in = `name:"Shrek"`
> -	m := new(Communique)
> -	want := &Communique{Union: &Communique_Name{"Shrek"}}
> -	if err := UnmarshalText(in, m); err != nil {
> -		t.Fatal(err)
> -	}
> -	if !Equal(m, want) {
> -		t.Errorf("\n got %v\nwant %v", m, want)
> -	}
> -
> -	const inOverwrite = `name:"Shrek" number:42`
> -	m = new(Communique)
> -	testErr := "line 1.13: field 'number' would overwrite already parsed oneof 'Union'"
> -	if err := UnmarshalText(inOverwrite, m); err == nil {
> -		t.Errorf("TestOneofParsing: Didn't get expected error: %v", testErr)
> -	} else if err.Error() != testErr {
> -		t.Errorf("TestOneofParsing: Incorrect error.\nHave: %v\nWant: %v",
> -			err.Error(), testErr)
> -	}
> -
> -}
> -
> -var benchInput string
> -
> -func init() {
> -	benchInput = "count: 4\n"
> -	for i := 0; i < 1000; i++ {
> -		benchInput += "pet: \"fido\"\n"
> -	}
> -
> -	// Check it is valid input.
> -	pb := new(MyMessage)
> -	err := UnmarshalText(benchInput, pb)
> -	if err != nil {
> -		panic("Bad benchmark input: " + err.Error())
> -	}
> -}
> -
> -func BenchmarkUnmarshalText(b *testing.B) {
> -	pb := new(MyMessage)
> -	for i := 0; i < b.N; i++ {
> -		UnmarshalText(benchInput, pb)
> -	}
> -	b.SetBytes(int64(len(benchInput)))
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/proto/text_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/proto/text_test.go
> deleted file mode 100644
> index 3eabacac..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/proto/text_test.go
> +++ /dev/null
> @@ -1,474 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package proto_test
> -
> -import (
> -	"bytes"
> -	"errors"
> -	"io/ioutil"
> -	"math"
> -	"strings"
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -
> -	proto3pb "github.com/golang/protobuf/proto/proto3_proto"
> -	pb "github.com/golang/protobuf/proto/testdata"
> -)
> -
> -// textMessage implements the methods that allow it to marshal and unmarshal
> -// itself as text.
> -type textMessage struct {
> -}
> -
> -func (*textMessage) MarshalText() ([]byte, error) {
> -	return []byte("custom"), nil
> -}
> -
> -func (*textMessage) UnmarshalText(bytes []byte) error {
> -	if string(bytes) != "custom" {
> -		return errors.New("expected 'custom'")
> -	}
> -	return nil
> -}
> -
> -func (*textMessage) Reset()         {}
> -func (*textMessage) String() string { return "" }
> -func (*textMessage) ProtoMessage()  {}
> -
> -func newTestMessage() *pb.MyMessage {
> -	msg := &pb.MyMessage{
> -		Count: proto.Int32(42),
> -		Name:  proto.String("Dave"),
> -		Quote: proto.String(`"I didn't want to go."`),
> -		Pet:   []string{"bunny", "kitty", "horsey"},
> -		Inner: &pb.InnerMessage{
> -			Host:      proto.String("footrest.syd"),
> -			Port:      proto.Int32(7001),
> -			Connected: proto.Bool(true),
> -		},
> -		Others: []*pb.OtherMessage{
> -			{
> -				Key:   proto.Int64(0xdeadbeef),
> -				Value: []byte{1, 65, 7, 12},
> -			},
> -			{
> -				Weight: proto.Float32(6.022),
> -				Inner: &pb.InnerMessage{
> -					Host: proto.String("lesha.mtv"),
> -					Port: proto.Int32(8002),
> -				},
> -			},
> -		},
> -		Bikeshed: pb.MyMessage_BLUE.Enum(),
> -		Somegroup: &pb.MyMessage_SomeGroup{
> -			GroupField: proto.Int32(8),
> -		},
> -		// One normally wouldn't do this.
> -		// This is an undeclared tag 13, as a varint (wire type 0) with value 4.
> -		XXX_unrecognized: []byte{13<<3 | 0, 4},
> -	}
> -	ext := &pb.Ext{
> -		Data: proto.String("Big gobs for big rats"),
> -	}
> -	if err := proto.SetExtension(msg, pb.E_Ext_More, ext); err != nil {
> -		panic(err)
> -	}
> -	greetings := []string{"adg", "easy", "cow"}
> -	if err := proto.SetExtension(msg, pb.E_Greeting, greetings); err != nil {
> -		panic(err)
> -	}
> -
> -	// Add an unknown extension. We marshal a pb.Ext, and fake the ID.
> -	b, err := proto.Marshal(&pb.Ext{Data: proto.String("3G skiing")})
> -	if err != nil {
> -		panic(err)
> -	}
> -	b = append(proto.EncodeVarint(201<<3|proto.WireBytes), b...)
> -	proto.SetRawExtension(msg, 201, b)
> -
> -	// Extensions can be plain fields, too, so let's test that.
> -	b = append(proto.EncodeVarint(202<<3|proto.WireVarint), 19)
> -	proto.SetRawExtension(msg, 202, b)
> -
> -	return msg
> -}
> -
> -const text = `count: 42
> -name: "Dave"
> -quote: "\"I didn't want to go.\""
> -pet: "bunny"
> -pet: "kitty"
> -pet: "horsey"
> -inner: <
> -  host: "footrest.syd"
> -  port: 7001
> -  connected: true
> ->
> -others: <
> -  key: 3735928559
> -  value: "\001A\007\014"
> ->
> -others: <
> -  weight: 6.022
> -  inner: <
> -    host: "lesha.mtv"
> -    port: 8002
> -  >
> ->
> -bikeshed: BLUE
> -SomeGroup {
> -  group_field: 8
> -}
> -/* 2 unknown bytes */
> -13: 4
> -[testdata.Ext.more]: <
> -  data: "Big gobs for big rats"
> ->
> -[testdata.greeting]: "adg"
> -[testdata.greeting]: "easy"
> -[testdata.greeting]: "cow"
> -/* 13 unknown bytes */
> -201: "\t3G skiing"
> -/* 3 unknown bytes */
> -202: 19
> -`
> -
> -func TestMarshalText(t *testing.T) {
> -	buf := new(bytes.Buffer)
> -	if err := proto.MarshalText(buf, newTestMessage()); err != nil {
> -		t.Fatalf("proto.MarshalText: %v", err)
> -	}
> -	s := buf.String()
> -	if s != text {
> -		t.Errorf("Got:\n===\n%v===\nExpected:\n===\n%v===\n", s, text)
> -	}
> -}
> -
> -func TestMarshalTextCustomMessage(t *testing.T) {
> -	buf := new(bytes.Buffer)
> -	if err := proto.MarshalText(buf, &textMessage{}); err != nil {
> -		t.Fatalf("proto.MarshalText: %v", err)
> -	}
> -	s := buf.String()
> -	if s != "custom" {
> -		t.Errorf("Got %q, expected %q", s, "custom")
> -	}
> -}
> -func TestMarshalTextNil(t *testing.T) {
> -	want := "<nil>"
> -	tests := []proto.Message{nil, (*pb.MyMessage)(nil)}
> -	for i, test := range tests {
> -		buf := new(bytes.Buffer)
> -		if err := proto.MarshalText(buf, test); err != nil {
> -			t.Fatal(err)
> -		}
> -		if got := buf.String(); got != want {
> -			t.Errorf("%d: got %q want %q", i, got, want)
> -		}
> -	}
> -}
> -
> -func TestMarshalTextUnknownEnum(t *testing.T) {
> -	// The Color enum only specifies values 0-2.
> -	m := &pb.MyMessage{Bikeshed: pb.MyMessage_Color(3).Enum()}
> -	got := m.String()
> -	const want = `bikeshed:3 `
> -	if got != want {
> -		t.Errorf("\n got %q\nwant %q", got, want)
> -	}
> -}
> -
> -func TestTextOneof(t *testing.T) {
> -	tests := []struct {
> -		m    proto.Message
> -		want string
> -	}{
> -		// zero message
> -		{&pb.Communique{}, ``},
> -		// scalar field
> -		{&pb.Communique{Union: &pb.Communique_Number{4}}, `number:4`},
> -		// message field
> -		{&pb.Communique{Union: &pb.Communique_Msg{
> -			&pb.Strings{StringField: proto.String("why hello!")},
> -		}}, `msg:<string_field:"why hello!" >`},
> -		// bad oneof (should not panic)
> -		{&pb.Communique{Union: &pb.Communique_Msg{nil}}, `msg:/* nil */`},
> -	}
> -	for _, test := range tests {
> -		got := strings.TrimSpace(test.m.String())
> -		if got != test.want {
> -			t.Errorf("\n got %s\nwant %s", got, test.want)
> -		}
> -	}
> -}
> -
> -func BenchmarkMarshalTextBuffered(b *testing.B) {
> -	buf := new(bytes.Buffer)
> -	m := newTestMessage()
> -	for i := 0; i < b.N; i++ {
> -		buf.Reset()
> -		proto.MarshalText(buf, m)
> -	}
> -}
> -
> -func BenchmarkMarshalTextUnbuffered(b *testing.B) {
> -	w := ioutil.Discard
> -	m := newTestMessage()
> -	for i := 0; i < b.N; i++ {
> -		proto.MarshalText(w, m)
> -	}
> -}
> -
> -func compact(src string) string {
> -	// s/[ \n]+/ /g; s/ $//;
> -	dst := make([]byte, len(src))
> -	space, comment := false, false
> -	j := 0
> -	for i := 0; i < len(src); i++ {
> -		if strings.HasPrefix(src[i:], "/*") {
> -			comment = true
> -			i++
> -			continue
> -		}
> -		if comment && strings.HasPrefix(src[i:], "*/") {
> -			comment = false
> -			i++
> -			continue
> -		}
> -		if comment {
> -			continue
> -		}
> -		c := src[i]
> -		if c == ' ' || c == '\n' {
> -			space = true
> -			continue
> -		}
> -		if j > 0 && (dst[j-1] == ':' || dst[j-1] == '<' || dst[j-1] == '{') {
> -			space = false
> -		}
> -		if c == '{' {
> -			space = false
> -		}
> -		if space {
> -			dst[j] = ' '
> -			j++
> -			space = false
> -		}
> -		dst[j] = c
> -		j++
> -	}
> -	if space {
> -		dst[j] = ' '
> -		j++
> -	}
> -	return string(dst[0:j])
> -}
> -
> -var compactText = compact(text)
> -
> -func TestCompactText(t *testing.T) {
> -	s := proto.CompactTextString(newTestMessage())
> -	if s != compactText {
> -		t.Errorf("Got:\n===\n%v===\nExpected:\n===\n%v\n===\n", s, compactText)
> -	}
> -}
> -
> -func TestStringEscaping(t *testing.T) {
> -	testCases := []struct {
> -		in  *pb.Strings
> -		out string
> -	}{
> -		{
> -			// Test data from C++ test (TextFormatTest.StringEscape).
> -			// Single divergence: we don't escape apostrophes.
> -			&pb.Strings{StringField: proto.String("\"A string with ' characters \n and \r newlines and \t tabs and \001 slashes \\ and  multiple   spaces")},
> -			"string_field: \"\\\"A string with ' characters \\n and \\r newlines and \\t tabs and \\001 slashes \\\\ and  multiple   spaces\"\n",
> -		},
> -		{
> -			// Test data from the same C++ test.
> -			&pb.Strings{StringField: proto.String("\350\260\267\346\255\214")},
> -			"string_field: \"\\350\\260\\267\\346\\255\\214\"\n",
> -		},
> -		{
> -			// Some UTF-8.
> -			&pb.Strings{StringField: proto.String("\x00\x01\xff\x81")},
> -			`string_field: "\000\001\377\201"` + "\n",
> -		},
> -	}
> -
> -	for i, tc := range testCases {
> -		var buf bytes.Buffer
> -		if err := proto.MarshalText(&buf, tc.in); err != nil {
> -			t.Errorf("proto.MarsalText: %v", err)
> -			continue
> -		}
> -		s := buf.String()
> -		if s != tc.out {
> -			t.Errorf("#%d: Got:\n%s\nExpected:\n%s\n", i, s, tc.out)
> -			continue
> -		}
> -
> -		// Check round-trip.
> -		pb := new(pb.Strings)
> -		if err := proto.UnmarshalText(s, pb); err != nil {
> -			t.Errorf("#%d: UnmarshalText: %v", i, err)
> -			continue
> -		}
> -		if !proto.Equal(pb, tc.in) {
> -			t.Errorf("#%d: Round-trip failed:\nstart: %v\n  end: %v", i, tc.in, pb)
> -		}
> -	}
> -}
> -
> -// A limitedWriter accepts some output before it fails.
> -// This is a proxy for something like a nearly-full or imminently-failing disk,
> -// or a network connection that is about to die.
> -type limitedWriter struct {
> -	b     bytes.Buffer
> -	limit int
> -}
> -
> -var outOfSpace = errors.New("proto: insufficient space")
> -
> -func (w *limitedWriter) Write(p []byte) (n int, err error) {
> -	var avail = w.limit - w.b.Len()
> -	if avail <= 0 {
> -		return 0, outOfSpace
> -	}
> -	if len(p) <= avail {
> -		return w.b.Write(p)
> -	}
> -	n, _ = w.b.Write(p[:avail])
> -	return n, outOfSpace
> -}
> -
> -func TestMarshalTextFailing(t *testing.T) {
> -	// Try lots of different sizes to exercise more error code-paths.
> -	for lim := 0; lim < len(text); lim++ {
> -		buf := new(limitedWriter)
> -		buf.limit = lim
> -		err := proto.MarshalText(buf, newTestMessage())
> -		// We expect a certain error, but also some partial results in the buffer.
> -		if err != outOfSpace {
> -			t.Errorf("Got:\n===\n%v===\nExpected:\n===\n%v===\n", err, outOfSpace)
> -		}
> -		s := buf.b.String()
> -		x := text[:buf.limit]
> -		if s != x {
> -			t.Errorf("Got:\n===\n%v===\nExpected:\n===\n%v===\n", s, x)
> -		}
> -	}
> -}
> -
> -func TestFloats(t *testing.T) {
> -	tests := []struct {
> -		f    float64
> -		want string
> -	}{
> -		{0, "0"},
> -		{4.7, "4.7"},
> -		{math.Inf(1), "inf"},
> -		{math.Inf(-1), "-inf"},
> -		{math.NaN(), "nan"},
> -	}
> -	for _, test := range tests {
> -		msg := &pb.FloatingPoint{F: &test.f}
> -		got := strings.TrimSpace(msg.String())
> -		want := `f:` + test.want
> -		if got != want {
> -			t.Errorf("f=%f: got %q, want %q", test.f, got, want)
> -		}
> -	}
> -}
> -
> -func TestRepeatedNilText(t *testing.T) {
> -	m := &pb.MessageList{
> -		Message: []*pb.MessageList_Message{
> -			nil,
> -			&pb.MessageList_Message{
> -				Name: proto.String("Horse"),
> -			},
> -			nil,
> -		},
> -	}
> -	want := `Message <nil>
> -Message {
> -  name: "Horse"
> -}
> -Message <nil>
> -`
> -	if s := proto.MarshalTextString(m); s != want {
> -		t.Errorf(" got: %s\nwant: %s", s, want)
> -	}
> -}
> -
> -func TestProto3Text(t *testing.T) {
> -	tests := []struct {
> -		m    proto.Message
> -		want string
> -	}{
> -		// zero message
> -		{&proto3pb.Message{}, ``},
> -		// zero message except for an empty byte slice
> -		{&proto3pb.Message{Data: []byte{}}, ``},
> -		// trivial case
> -		{&proto3pb.Message{Name: "Rob", HeightInCm: 175}, `name:"Rob" height_in_cm:175`},
> -		// empty map
> -		{&pb.MessageWithMap{}, ``},
> -		// non-empty map; map format is the same as a repeated struct,
> -		// and they are sorted by key (numerically for numeric keys).
> -		{
> -			&pb.MessageWithMap{NameMapping: map[int32]string{
> -				-1:      "Negatory",
> -				7:       "Lucky",
> -				1234:    "Feist",
> -				6345789: "Otis",
> -			}},
> -			`name_mapping:<key:-1 value:"Negatory" > ` +
> -				`name_mapping:<key:7 value:"Lucky" > ` +
> -				`name_mapping:<key:1234 value:"Feist" > ` +
> -				`name_mapping:<key:6345789 value:"Otis" >`,
> -		},
> -		// map with nil value; not well-defined, but we shouldn't crash
> -		{
> -			&pb.MessageWithMap{MsgMapping: map[int64]*pb.FloatingPoint{7: nil}},
> -			`msg_mapping:<key:7 >`,
> -		},
> -	}
> -	for _, test := range tests {
> -		got := strings.TrimSpace(test.m.String())
> -		if got != test.want {
> -			t.Errorf("\n got %s\nwant %s", got, test.want)
> -		}
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/Makefile b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/Makefile
> deleted file mode 100644
> index a42cc371..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/Makefile
> +++ /dev/null
> @@ -1,33 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2010 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -test:
> -	cd testdata && make test
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile
> deleted file mode 100644
> index f706871a..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile
> +++ /dev/null
> @@ -1,37 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2010 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -# Not stored here, but descriptor.proto is in https://github.com/google/protobuf/
> -# at src/google/protobuf/descriptor.proto
> -regenerate:
> -	@echo WARNING! THIS RULE IS PROBABLY NOT RIGHT FOR YOUR INSTALLATION
> -	cp $(HOME)/src/protobuf/include/google/protobuf/descriptor.proto .
> -	protoc --go_out=../../../../.. -I$(HOME)/src/protobuf/include $(HOME)/src/protobuf/include/google/protobuf/descriptor.proto
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go
> deleted file mode 100644
> index 1d92cb27..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go
> +++ /dev/null
> @@ -1,2174 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: google/protobuf/descriptor.proto
> -
> -/*
> -Package descriptor is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	google/protobuf/descriptor.proto
> -
> -It has these top-level messages:
> -	FileDescriptorSet
> -	FileDescriptorProto
> -	DescriptorProto
> -	FieldDescriptorProto
> -	OneofDescriptorProto
> -	EnumDescriptorProto
> -	EnumValueDescriptorProto
> -	ServiceDescriptorProto
> -	MethodDescriptorProto
> -	FileOptions
> -	MessageOptions
> -	FieldOptions
> -	OneofOptions
> -	EnumOptions
> -	EnumValueOptions
> -	ServiceOptions
> -	MethodOptions
> -	UninterpretedOption
> -	SourceCodeInfo
> -	GeneratedCodeInfo
> -*/
> -package descriptor
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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 FieldDescriptorProto_Type int32
> -
> -const (
> -	// 0 is reserved for errors.
> -	// Order is weird for historical reasons.
> -	FieldDescriptorProto_TYPE_DOUBLE FieldDescriptorProto_Type = 1
> -	FieldDescriptorProto_TYPE_FLOAT  FieldDescriptorProto_Type = 2
> -	// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
> -	// negative values are likely.
> -	FieldDescriptorProto_TYPE_INT64  FieldDescriptorProto_Type = 3
> -	FieldDescriptorProto_TYPE_UINT64 FieldDescriptorProto_Type = 4
> -	// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
> -	// negative values are likely.
> -	FieldDescriptorProto_TYPE_INT32   FieldDescriptorProto_Type = 5
> -	FieldDescriptorProto_TYPE_FIXED64 FieldDescriptorProto_Type = 6
> -	FieldDescriptorProto_TYPE_FIXED32 FieldDescriptorProto_Type = 7
> -	FieldDescriptorProto_TYPE_BOOL    FieldDescriptorProto_Type = 8
> -	FieldDescriptorProto_TYPE_STRING  FieldDescriptorProto_Type = 9
> -	// Tag-delimited aggregate.
> -	// Group type is deprecated and not supported in proto3. However, Proto3
> -	// implementations should still be able to parse the group wire format and
> -	// treat group fields as unknown fields.
> -	FieldDescriptorProto_TYPE_GROUP   FieldDescriptorProto_Type = 10
> -	FieldDescriptorProto_TYPE_MESSAGE FieldDescriptorProto_Type = 11
> -	// New in version 2.
> -	FieldDescriptorProto_TYPE_BYTES    FieldDescriptorProto_Type = 12
> -	FieldDescriptorProto_TYPE_UINT32   FieldDescriptorProto_Type = 13
> -	FieldDescriptorProto_TYPE_ENUM     FieldDescriptorProto_Type = 14
> -	FieldDescriptorProto_TYPE_SFIXED32 FieldDescriptorProto_Type = 15
> -	FieldDescriptorProto_TYPE_SFIXED64 FieldDescriptorProto_Type = 16
> -	FieldDescriptorProto_TYPE_SINT32   FieldDescriptorProto_Type = 17
> -	FieldDescriptorProto_TYPE_SINT64   FieldDescriptorProto_Type = 18
> -)
> -
> -var FieldDescriptorProto_Type_name = map[int32]string{
> -	1:  "TYPE_DOUBLE",
> -	2:  "TYPE_FLOAT",
> -	3:  "TYPE_INT64",
> -	4:  "TYPE_UINT64",
> -	5:  "TYPE_INT32",
> -	6:  "TYPE_FIXED64",
> -	7:  "TYPE_FIXED32",
> -	8:  "TYPE_BOOL",
> -	9:  "TYPE_STRING",
> -	10: "TYPE_GROUP",
> -	11: "TYPE_MESSAGE",
> -	12: "TYPE_BYTES",
> -	13: "TYPE_UINT32",
> -	14: "TYPE_ENUM",
> -	15: "TYPE_SFIXED32",
> -	16: "TYPE_SFIXED64",
> -	17: "TYPE_SINT32",
> -	18: "TYPE_SINT64",
> -}
> -var FieldDescriptorProto_Type_value = map[string]int32{
> -	"TYPE_DOUBLE":   1,
> -	"TYPE_FLOAT":    2,
> -	"TYPE_INT64":    3,
> -	"TYPE_UINT64":   4,
> -	"TYPE_INT32":    5,
> -	"TYPE_FIXED64":  6,
> -	"TYPE_FIXED32":  7,
> -	"TYPE_BOOL":     8,
> -	"TYPE_STRING":   9,
> -	"TYPE_GROUP":    10,
> -	"TYPE_MESSAGE":  11,
> -	"TYPE_BYTES":    12,
> -	"TYPE_UINT32":   13,
> -	"TYPE_ENUM":     14,
> -	"TYPE_SFIXED32": 15,
> -	"TYPE_SFIXED64": 16,
> -	"TYPE_SINT32":   17,
> -	"TYPE_SINT64":   18,
> -}
> -
> -func (x FieldDescriptorProto_Type) Enum() *FieldDescriptorProto_Type {
> -	p := new(FieldDescriptorProto_Type)
> -	*p = x
> -	return p
> -}
> -func (x FieldDescriptorProto_Type) String() string {
> -	return proto.EnumName(FieldDescriptorProto_Type_name, int32(x))
> -}
> -func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, "FieldDescriptorProto_Type")
> -	if err != nil {
> -		return err
> -	}
> -	*x = FieldDescriptorProto_Type(value)
> -	return nil
> -}
> -func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} }
> -
> -type FieldDescriptorProto_Label int32
> -
> -const (
> -	// 0 is reserved for errors
> -	FieldDescriptorProto_LABEL_OPTIONAL FieldDescriptorProto_Label = 1
> -	FieldDescriptorProto_LABEL_REQUIRED FieldDescriptorProto_Label = 2
> -	FieldDescriptorProto_LABEL_REPEATED FieldDescriptorProto_Label = 3
> -)
> -
> -var FieldDescriptorProto_Label_name = map[int32]string{
> -	1: "LABEL_OPTIONAL",
> -	2: "LABEL_REQUIRED",
> -	3: "LABEL_REPEATED",
> -}
> -var FieldDescriptorProto_Label_value = map[string]int32{
> -	"LABEL_OPTIONAL": 1,
> -	"LABEL_REQUIRED": 2,
> -	"LABEL_REPEATED": 3,
> -}
> -
> -func (x FieldDescriptorProto_Label) Enum() *FieldDescriptorProto_Label {
> -	p := new(FieldDescriptorProto_Label)
> -	*p = x
> -	return p
> -}
> -func (x FieldDescriptorProto_Label) String() string {
> -	return proto.EnumName(FieldDescriptorProto_Label_name, int32(x))
> -}
> -func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, "FieldDescriptorProto_Label")
> -	if err != nil {
> -		return err
> -	}
> -	*x = FieldDescriptorProto_Label(value)
> -	return nil
> -}
> -func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) {
> -	return fileDescriptor0, []int{3, 1}
> -}
> -
> -// Generated classes can be optimized for speed or code size.
> -type FileOptions_OptimizeMode int32
> -
> -const (
> -	FileOptions_SPEED FileOptions_OptimizeMode = 1
> -	// etc.
> -	FileOptions_CODE_SIZE    FileOptions_OptimizeMode = 2
> -	FileOptions_LITE_RUNTIME FileOptions_OptimizeMode = 3
> -)
> -
> -var FileOptions_OptimizeMode_name = map[int32]string{
> -	1: "SPEED",
> -	2: "CODE_SIZE",
> -	3: "LITE_RUNTIME",
> -}
> -var FileOptions_OptimizeMode_value = map[string]int32{
> -	"SPEED":        1,
> -	"CODE_SIZE":    2,
> -	"LITE_RUNTIME": 3,
> -}
> -
> -func (x FileOptions_OptimizeMode) Enum() *FileOptions_OptimizeMode {
> -	p := new(FileOptions_OptimizeMode)
> -	*p = x
> -	return p
> -}
> -func (x FileOptions_OptimizeMode) String() string {
> -	return proto.EnumName(FileOptions_OptimizeMode_name, int32(x))
> -}
> -func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, "FileOptions_OptimizeMode")
> -	if err != nil {
> -		return err
> -	}
> -	*x = FileOptions_OptimizeMode(value)
> -	return nil
> -}
> -func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} }
> -
> -type FieldOptions_CType int32
> -
> -const (
> -	// Default mode.
> -	FieldOptions_STRING       FieldOptions_CType = 0
> -	FieldOptions_CORD         FieldOptions_CType = 1
> -	FieldOptions_STRING_PIECE FieldOptions_CType = 2
> -)
> -
> -var FieldOptions_CType_name = map[int32]string{
> -	0: "STRING",
> -	1: "CORD",
> -	2: "STRING_PIECE",
> -}
> -var FieldOptions_CType_value = map[string]int32{
> -	"STRING":       0,
> -	"CORD":         1,
> -	"STRING_PIECE": 2,
> -}
> -
> -func (x FieldOptions_CType) Enum() *FieldOptions_CType {
> -	p := new(FieldOptions_CType)
> -	*p = x
> -	return p
> -}
> -func (x FieldOptions_CType) String() string {
> -	return proto.EnumName(FieldOptions_CType_name, int32(x))
> -}
> -func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(FieldOptions_CType_value, data, "FieldOptions_CType")
> -	if err != nil {
> -		return err
> -	}
> -	*x = FieldOptions_CType(value)
> -	return nil
> -}
> -func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{11, 0} }
> -
> -type FieldOptions_JSType int32
> -
> -const (
> -	// Use the default type.
> -	FieldOptions_JS_NORMAL FieldOptions_JSType = 0
> -	// Use JavaScript strings.
> -	FieldOptions_JS_STRING FieldOptions_JSType = 1
> -	// Use JavaScript numbers.
> -	FieldOptions_JS_NUMBER FieldOptions_JSType = 2
> -)
> -
> -var FieldOptions_JSType_name = map[int32]string{
> -	0: "JS_NORMAL",
> -	1: "JS_STRING",
> -	2: "JS_NUMBER",
> -}
> -var FieldOptions_JSType_value = map[string]int32{
> -	"JS_NORMAL": 0,
> -	"JS_STRING": 1,
> -	"JS_NUMBER": 2,
> -}
> -
> -func (x FieldOptions_JSType) Enum() *FieldOptions_JSType {
> -	p := new(FieldOptions_JSType)
> -	*p = x
> -	return p
> -}
> -func (x FieldOptions_JSType) String() string {
> -	return proto.EnumName(FieldOptions_JSType_name, int32(x))
> -}
> -func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(FieldOptions_JSType_value, data, "FieldOptions_JSType")
> -	if err != nil {
> -		return err
> -	}
> -	*x = FieldOptions_JSType(value)
> -	return nil
> -}
> -func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{11, 1} }
> -
> -// Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
> -// or neither? HTTP based RPC implementation may choose GET verb for safe
> -// methods, and PUT verb for idempotent methods instead of the default POST.
> -type MethodOptions_IdempotencyLevel int32
> -
> -const (
> -	MethodOptions_IDEMPOTENCY_UNKNOWN MethodOptions_IdempotencyLevel = 0
> -	MethodOptions_NO_SIDE_EFFECTS     MethodOptions_IdempotencyLevel = 1
> -	MethodOptions_IDEMPOTENT          MethodOptions_IdempotencyLevel = 2
> -)
> -
> -var MethodOptions_IdempotencyLevel_name = map[int32]string{
> -	0: "IDEMPOTENCY_UNKNOWN",
> -	1: "NO_SIDE_EFFECTS",
> -	2: "IDEMPOTENT",
> -}
> -var MethodOptions_IdempotencyLevel_value = map[string]int32{
> -	"IDEMPOTENCY_UNKNOWN": 0,
> -	"NO_SIDE_EFFECTS":     1,
> -	"IDEMPOTENT":          2,
> -}
> -
> -func (x MethodOptions_IdempotencyLevel) Enum() *MethodOptions_IdempotencyLevel {
> -	p := new(MethodOptions_IdempotencyLevel)
> -	*p = x
> -	return p
> -}
> -func (x MethodOptions_IdempotencyLevel) String() string {
> -	return proto.EnumName(MethodOptions_IdempotencyLevel_name, int32(x))
> -}
> -func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, "MethodOptions_IdempotencyLevel")
> -	if err != nil {
> -		return err
> -	}
> -	*x = MethodOptions_IdempotencyLevel(value)
> -	return nil
> -}
> -func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) {
> -	return fileDescriptor0, []int{16, 0}
> -}
> -
> -// The protocol compiler can output a FileDescriptorSet containing the .proto
> -// files it parses.
> -type FileDescriptorSet struct {
> -	File             []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"`
> -	XXX_unrecognized []byte                 `json:"-"`
> -}
> -
> -func (m *FileDescriptorSet) Reset()                    { *m = FileDescriptorSet{} }
> -func (m *FileDescriptorSet) String() string            { return proto.CompactTextString(m) }
> -func (*FileDescriptorSet) ProtoMessage()               {}
> -func (*FileDescriptorSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -func (m *FileDescriptorSet) GetFile() []*FileDescriptorProto {
> -	if m != nil {
> -		return m.File
> -	}
> -	return nil
> -}
> -
> -// Describes a complete .proto file.
> -type FileDescriptorProto struct {
> -	Name    *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	Package *string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"`
> -	// Names of files imported by this file.
> -	Dependency []string `protobuf:"bytes,3,rep,name=dependency" json:"dependency,omitempty"`
> -	// Indexes of the public imported files in the dependency list above.
> -	PublicDependency []int32 `protobuf:"varint,10,rep,name=public_dependency,json=publicDependency" json:"public_dependency,omitempty"`
> -	// Indexes of the weak imported files in the dependency list.
> -	// For Google-internal migration only. Do not use.
> -	WeakDependency []int32 `protobuf:"varint,11,rep,name=weak_dependency,json=weakDependency" json:"weak_dependency,omitempty"`
> -	// All top-level definitions in this file.
> -	MessageType []*DescriptorProto        `protobuf:"bytes,4,rep,name=message_type,json=messageType" json:"message_type,omitempty"`
> -	EnumType    []*EnumDescriptorProto    `protobuf:"bytes,5,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"`
> -	Service     []*ServiceDescriptorProto `protobuf:"bytes,6,rep,name=service" json:"service,omitempty"`
> -	Extension   []*FieldDescriptorProto   `protobuf:"bytes,7,rep,name=extension" json:"extension,omitempty"`
> -	Options     *FileOptions              `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"`
> -	// This field contains optional information about the original source code.
> -	// You may safely remove this entire field without harming runtime
> -	// functionality of the descriptors -- the information is needed only by
> -	// development tools.
> -	SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"`
> -	// The syntax of the proto file.
> -	// The supported values are "proto2" and "proto3".
> -	Syntax           *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *FileDescriptorProto) Reset()                    { *m = FileDescriptorProto{} }
> -func (m *FileDescriptorProto) String() string            { return proto.CompactTextString(m) }
> -func (*FileDescriptorProto) ProtoMessage()               {}
> -func (*FileDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -
> -func (m *FileDescriptorProto) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *FileDescriptorProto) GetPackage() string {
> -	if m != nil && m.Package != nil {
> -		return *m.Package
> -	}
> -	return ""
> -}
> -
> -func (m *FileDescriptorProto) GetDependency() []string {
> -	if m != nil {
> -		return m.Dependency
> -	}
> -	return nil
> -}
> -
> -func (m *FileDescriptorProto) GetPublicDependency() []int32 {
> -	if m != nil {
> -		return m.PublicDependency
> -	}
> -	return nil
> -}
> -
> -func (m *FileDescriptorProto) GetWeakDependency() []int32 {
> -	if m != nil {
> -		return m.WeakDependency
> -	}
> -	return nil
> -}
> -
> -func (m *FileDescriptorProto) GetMessageType() []*DescriptorProto {
> -	if m != nil {
> -		return m.MessageType
> -	}
> -	return nil
> -}
> -
> -func (m *FileDescriptorProto) GetEnumType() []*EnumDescriptorProto {
> -	if m != nil {
> -		return m.EnumType
> -	}
> -	return nil
> -}
> -
> -func (m *FileDescriptorProto) GetService() []*ServiceDescriptorProto {
> -	if m != nil {
> -		return m.Service
> -	}
> -	return nil
> -}
> -
> -func (m *FileDescriptorProto) GetExtension() []*FieldDescriptorProto {
> -	if m != nil {
> -		return m.Extension
> -	}
> -	return nil
> -}
> -
> -func (m *FileDescriptorProto) GetOptions() *FileOptions {
> -	if m != nil {
> -		return m.Options
> -	}
> -	return nil
> -}
> -
> -func (m *FileDescriptorProto) GetSourceCodeInfo() *SourceCodeInfo {
> -	if m != nil {
> -		return m.SourceCodeInfo
> -	}
> -	return nil
> -}
> -
> -func (m *FileDescriptorProto) GetSyntax() string {
> -	if m != nil && m.Syntax != nil {
> -		return *m.Syntax
> -	}
> -	return ""
> -}
> -
> -// Describes a message type.
> -type DescriptorProto struct {
> -	Name           *string                           `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	Field          []*FieldDescriptorProto           `protobuf:"bytes,2,rep,name=field" json:"field,omitempty"`
> -	Extension      []*FieldDescriptorProto           `protobuf:"bytes,6,rep,name=extension" json:"extension,omitempty"`
> -	NestedType     []*DescriptorProto                `protobuf:"bytes,3,rep,name=nested_type,json=nestedType" json:"nested_type,omitempty"`
> -	EnumType       []*EnumDescriptorProto            `protobuf:"bytes,4,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"`
> -	ExtensionRange []*DescriptorProto_ExtensionRange `protobuf:"bytes,5,rep,name=extension_range,json=extensionRange" json:"extension_range,omitempty"`
> -	OneofDecl      []*OneofDescriptorProto           `protobuf:"bytes,8,rep,name=oneof_decl,json=oneofDecl" json:"oneof_decl,omitempty"`
> -	Options        *MessageOptions                   `protobuf:"bytes,7,opt,name=options" json:"options,omitempty"`
> -	ReservedRange  []*DescriptorProto_ReservedRange  `protobuf:"bytes,9,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"`
> -	// Reserved field names, which may not be used by fields in the same message.
> -	// A given name may only be reserved once.
> -	ReservedName     []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"`
> -	XXX_unrecognized []byte   `json:"-"`
> -}
> -
> -func (m *DescriptorProto) Reset()                    { *m = DescriptorProto{} }
> -func (m *DescriptorProto) String() string            { return proto.CompactTextString(m) }
> -func (*DescriptorProto) ProtoMessage()               {}
> -func (*DescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
> -
> -func (m *DescriptorProto) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *DescriptorProto) GetField() []*FieldDescriptorProto {
> -	if m != nil {
> -		return m.Field
> -	}
> -	return nil
> -}
> -
> -func (m *DescriptorProto) GetExtension() []*FieldDescriptorProto {
> -	if m != nil {
> -		return m.Extension
> -	}
> -	return nil
> -}
> -
> -func (m *DescriptorProto) GetNestedType() []*DescriptorProto {
> -	if m != nil {
> -		return m.NestedType
> -	}
> -	return nil
> -}
> -
> -func (m *DescriptorProto) GetEnumType() []*EnumDescriptorProto {
> -	if m != nil {
> -		return m.EnumType
> -	}
> -	return nil
> -}
> -
> -func (m *DescriptorProto) GetExtensionRange() []*DescriptorProto_ExtensionRange {
> -	if m != nil {
> -		return m.ExtensionRange
> -	}
> -	return nil
> -}
> -
> -func (m *DescriptorProto) GetOneofDecl() []*OneofDescriptorProto {
> -	if m != nil {
> -		return m.OneofDecl
> -	}
> -	return nil
> -}
> -
> -func (m *DescriptorProto) GetOptions() *MessageOptions {
> -	if m != nil {
> -		return m.Options
> -	}
> -	return nil
> -}
> -
> -func (m *DescriptorProto) GetReservedRange() []*DescriptorProto_ReservedRange {
> -	if m != nil {
> -		return m.ReservedRange
> -	}
> -	return nil
> -}
> -
> -func (m *DescriptorProto) GetReservedName() []string {
> -	if m != nil {
> -		return m.ReservedName
> -	}
> -	return nil
> -}
> -
> -type DescriptorProto_ExtensionRange struct {
> -	Start            *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
> -	End              *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *DescriptorProto_ExtensionRange) Reset()         { *m = DescriptorProto_ExtensionRange{} }
> -func (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) }
> -func (*DescriptorProto_ExtensionRange) ProtoMessage()    {}
> -func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) {
> -	return fileDescriptor0, []int{2, 0}
> -}
> -
> -func (m *DescriptorProto_ExtensionRange) GetStart() int32 {
> -	if m != nil && m.Start != nil {
> -		return *m.Start
> -	}
> -	return 0
> -}
> -
> -func (m *DescriptorProto_ExtensionRange) GetEnd() int32 {
> -	if m != nil && m.End != nil {
> -		return *m.End
> -	}
> -	return 0
> -}
> -
> -// Range of reserved tag numbers. Reserved tag numbers may not be used by
> -// fields or extension ranges in the same message. Reserved ranges may
> -// not overlap.
> -type DescriptorProto_ReservedRange struct {
> -	Start            *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
> -	End              *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *DescriptorProto_ReservedRange) Reset()         { *m = DescriptorProto_ReservedRange{} }
> -func (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) }
> -func (*DescriptorProto_ReservedRange) ProtoMessage()    {}
> -func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) {
> -	return fileDescriptor0, []int{2, 1}
> -}
> -
> -func (m *DescriptorProto_ReservedRange) GetStart() int32 {
> -	if m != nil && m.Start != nil {
> -		return *m.Start
> -	}
> -	return 0
> -}
> -
> -func (m *DescriptorProto_ReservedRange) GetEnd() int32 {
> -	if m != nil && m.End != nil {
> -		return *m.End
> -	}
> -	return 0
> -}
> -
> -// Describes a field within a message.
> -type FieldDescriptorProto struct {
> -	Name   *string                     `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	Number *int32                      `protobuf:"varint,3,opt,name=number" json:"number,omitempty"`
> -	Label  *FieldDescriptorProto_Label `protobuf:"varint,4,opt,name=label,enum=google.protobuf.FieldDescriptorProto_Label" json:"label,omitempty"`
> -	// If type_name is set, this need not be set.  If both this and type_name
> -	// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
> -	Type *FieldDescriptorProto_Type `protobuf:"varint,5,opt,name=type,enum=google.protobuf.FieldDescriptorProto_Type" json:"type,omitempty"`
> -	// For message and enum types, this is the name of the type.  If the name
> -	// starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
> -	// rules are used to find the type (i.e. first the nested types within this
> -	// message are searched, then within the parent, on up to the root
> -	// namespace).
> -	TypeName *string `protobuf:"bytes,6,opt,name=type_name,json=typeName" json:"type_name,omitempty"`
> -	// For extensions, this is the name of the type being extended.  It is
> -	// resolved in the same manner as type_name.
> -	Extendee *string `protobuf:"bytes,2,opt,name=extendee" json:"extendee,omitempty"`
> -	// For numeric types, contains the original text representation of the value.
> -	// For booleans, "true" or "false".
> -	// For strings, contains the default text contents (not escaped in any way).
> -	// For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
> -	// TODO(kenton):  Base-64 encode?
> -	DefaultValue *string `protobuf:"bytes,7,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"`
> -	// If set, gives the index of a oneof in the containing type's oneof_decl
> -	// list.  This field is a member of that oneof.
> -	OneofIndex *int32 `protobuf:"varint,9,opt,name=oneof_index,json=oneofIndex" json:"oneof_index,omitempty"`
> -	// JSON name of this field. The value is set by protocol compiler. If the
> -	// user has set a "json_name" option on this field, that option's value
> -	// will be used. Otherwise, it's deduced from the field's name by converting
> -	// it to camelCase.
> -	JsonName         *string       `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"`
> -	Options          *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"`
> -	XXX_unrecognized []byte        `json:"-"`
> -}
> -
> -func (m *FieldDescriptorProto) Reset()                    { *m = FieldDescriptorProto{} }
> -func (m *FieldDescriptorProto) String() string            { return proto.CompactTextString(m) }
> -func (*FieldDescriptorProto) ProtoMessage()               {}
> -func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
> -
> -func (m *FieldDescriptorProto) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *FieldDescriptorProto) GetNumber() int32 {
> -	if m != nil && m.Number != nil {
> -		return *m.Number
> -	}
> -	return 0
> -}
> -
> -func (m *FieldDescriptorProto) GetLabel() FieldDescriptorProto_Label {
> -	if m != nil && m.Label != nil {
> -		return *m.Label
> -	}
> -	return FieldDescriptorProto_LABEL_OPTIONAL
> -}
> -
> -func (m *FieldDescriptorProto) GetType() FieldDescriptorProto_Type {
> -	if m != nil && m.Type != nil {
> -		return *m.Type
> -	}
> -	return FieldDescriptorProto_TYPE_DOUBLE
> -}
> -
> -func (m *FieldDescriptorProto) GetTypeName() string {
> -	if m != nil && m.TypeName != nil {
> -		return *m.TypeName
> -	}
> -	return ""
> -}
> -
> -func (m *FieldDescriptorProto) GetExtendee() string {
> -	if m != nil && m.Extendee != nil {
> -		return *m.Extendee
> -	}
> -	return ""
> -}
> -
> -func (m *FieldDescriptorProto) GetDefaultValue() string {
> -	if m != nil && m.DefaultValue != nil {
> -		return *m.DefaultValue
> -	}
> -	return ""
> -}
> -
> -func (m *FieldDescriptorProto) GetOneofIndex() int32 {
> -	if m != nil && m.OneofIndex != nil {
> -		return *m.OneofIndex
> -	}
> -	return 0
> -}
> -
> -func (m *FieldDescriptorProto) GetJsonName() string {
> -	if m != nil && m.JsonName != nil {
> -		return *m.JsonName
> -	}
> -	return ""
> -}
> -
> -func (m *FieldDescriptorProto) GetOptions() *FieldOptions {
> -	if m != nil {
> -		return m.Options
> -	}
> -	return nil
> -}
> -
> -// Describes a oneof.
> -type OneofDescriptorProto struct {
> -	Name             *string       `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	Options          *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"`
> -	XXX_unrecognized []byte        `json:"-"`
> -}
> -
> -func (m *OneofDescriptorProto) Reset()                    { *m = OneofDescriptorProto{} }
> -func (m *OneofDescriptorProto) String() string            { return proto.CompactTextString(m) }
> -func (*OneofDescriptorProto) ProtoMessage()               {}
> -func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
> -
> -func (m *OneofDescriptorProto) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *OneofDescriptorProto) GetOptions() *OneofOptions {
> -	if m != nil {
> -		return m.Options
> -	}
> -	return nil
> -}
> -
> -// Describes an enum type.
> -type EnumDescriptorProto struct {
> -	Name             *string                     `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	Value            []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"`
> -	Options          *EnumOptions                `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
> -	XXX_unrecognized []byte                      `json:"-"`
> -}
> -
> -func (m *EnumDescriptorProto) Reset()                    { *m = EnumDescriptorProto{} }
> -func (m *EnumDescriptorProto) String() string            { return proto.CompactTextString(m) }
> -func (*EnumDescriptorProto) ProtoMessage()               {}
> -func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
> -
> -func (m *EnumDescriptorProto) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *EnumDescriptorProto) GetValue() []*EnumValueDescriptorProto {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return nil
> -}
> -
> -func (m *EnumDescriptorProto) GetOptions() *EnumOptions {
> -	if m != nil {
> -		return m.Options
> -	}
> -	return nil
> -}
> -
> -// Describes a value within an enum.
> -type EnumValueDescriptorProto struct {
> -	Name             *string           `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	Number           *int32            `protobuf:"varint,2,opt,name=number" json:"number,omitempty"`
> -	Options          *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
> -	XXX_unrecognized []byte            `json:"-"`
> -}
> -
> -func (m *EnumValueDescriptorProto) Reset()                    { *m = EnumValueDescriptorProto{} }
> -func (m *EnumValueDescriptorProto) String() string            { return proto.CompactTextString(m) }
> -func (*EnumValueDescriptorProto) ProtoMessage()               {}
> -func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
> -
> -func (m *EnumValueDescriptorProto) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *EnumValueDescriptorProto) GetNumber() int32 {
> -	if m != nil && m.Number != nil {
> -		return *m.Number
> -	}
> -	return 0
> -}
> -
> -func (m *EnumValueDescriptorProto) GetOptions() *EnumValueOptions {
> -	if m != nil {
> -		return m.Options
> -	}
> -	return nil
> -}
> -
> -// Describes a service.
> -type ServiceDescriptorProto struct {
> -	Name             *string                  `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	Method           []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"`
> -	Options          *ServiceOptions          `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
> -	XXX_unrecognized []byte                   `json:"-"`
> -}
> -
> -func (m *ServiceDescriptorProto) Reset()                    { *m = ServiceDescriptorProto{} }
> -func (m *ServiceDescriptorProto) String() string            { return proto.CompactTextString(m) }
> -func (*ServiceDescriptorProto) ProtoMessage()               {}
> -func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
> -
> -func (m *ServiceDescriptorProto) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *ServiceDescriptorProto) GetMethod() []*MethodDescriptorProto {
> -	if m != nil {
> -		return m.Method
> -	}
> -	return nil
> -}
> -
> -func (m *ServiceDescriptorProto) GetOptions() *ServiceOptions {
> -	if m != nil {
> -		return m.Options
> -	}
> -	return nil
> -}
> -
> -// Describes a method of a service.
> -type MethodDescriptorProto struct {
> -	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	// Input and output type names.  These are resolved in the same way as
> -	// FieldDescriptorProto.type_name, but must refer to a message type.
> -	InputType  *string        `protobuf:"bytes,2,opt,name=input_type,json=inputType" json:"input_type,omitempty"`
> -	OutputType *string        `protobuf:"bytes,3,opt,name=output_type,json=outputType" json:"output_type,omitempty"`
> -	Options    *MethodOptions `protobuf:"bytes,4,opt,name=options" json:"options,omitempty"`
> -	// Identifies if client streams multiple client messages
> -	ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"`
> -	// Identifies if server streams multiple server messages
> -	ServerStreaming  *bool  `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *MethodDescriptorProto) Reset()                    { *m = MethodDescriptorProto{} }
> -func (m *MethodDescriptorProto) String() string            { return proto.CompactTextString(m) }
> -func (*MethodDescriptorProto) ProtoMessage()               {}
> -func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
> -
> -const Default_MethodDescriptorProto_ClientStreaming bool = false
> -const Default_MethodDescriptorProto_ServerStreaming bool = false
> -
> -func (m *MethodDescriptorProto) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *MethodDescriptorProto) GetInputType() string {
> -	if m != nil && m.InputType != nil {
> -		return *m.InputType
> -	}
> -	return ""
> -}
> -
> -func (m *MethodDescriptorProto) GetOutputType() string {
> -	if m != nil && m.OutputType != nil {
> -		return *m.OutputType
> -	}
> -	return ""
> -}
> -
> -func (m *MethodDescriptorProto) GetOptions() *MethodOptions {
> -	if m != nil {
> -		return m.Options
> -	}
> -	return nil
> -}
> -
> -func (m *MethodDescriptorProto) GetClientStreaming() bool {
> -	if m != nil && m.ClientStreaming != nil {
> -		return *m.ClientStreaming
> -	}
> -	return Default_MethodDescriptorProto_ClientStreaming
> -}
> -
> -func (m *MethodDescriptorProto) GetServerStreaming() bool {
> -	if m != nil && m.ServerStreaming != nil {
> -		return *m.ServerStreaming
> -	}
> -	return Default_MethodDescriptorProto_ServerStreaming
> -}
> -
> -type FileOptions struct {
> -	// Sets the Java package where classes generated from this .proto will be
> -	// placed.  By default, the proto package is used, but this is often
> -	// inappropriate because proto packages do not normally start with backwards
> -	// domain names.
> -	JavaPackage *string `protobuf:"bytes,1,opt,name=java_package,json=javaPackage" json:"java_package,omitempty"`
> -	// If set, all the classes from the .proto file are wrapped in a single
> -	// outer class with the given name.  This applies to both Proto1
> -	// (equivalent to the old "--one_java_file" option) and Proto2 (where
> -	// a .proto always translates to a single class, but you may want to
> -	// explicitly choose the class name).
> -	JavaOuterClassname *string `protobuf:"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname" json:"java_outer_classname,omitempty"`
> -	// If set true, then the Java code generator will generate a separate .java
> -	// file for each top-level message, enum, and service defined in the .proto
> -	// file.  Thus, these types will *not* be nested inside the outer class
> -	// named by java_outer_classname.  However, the outer class will still be
> -	// generated to contain the file's getDescriptor() method as well as any
> -	// top-level extensions defined in the file.
> -	JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"`
> -	// This option does nothing.
> -	JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"`
> -	// If set true, then the Java2 code generator will generate code that
> -	// throws an exception whenever an attempt is made to assign a non-UTF-8
> -	// byte sequence to a string field.
> -	// Message reflection will do the same.
> -	// However, an extension field still accepts non-UTF-8 byte sequences.
> -	// This option has no effect on when used with the lite runtime.
> -	JavaStringCheckUtf8 *bool                     `protobuf:"varint,27,opt,name=java_string_check_utf8,json=javaStringCheckUtf8,def=0" json:"java_string_check_utf8,omitempty"`
> -	OptimizeFor         *FileOptions_OptimizeMode `protobuf:"varint,9,opt,name=optimize_for,json=optimizeFor,enum=google.protobuf.FileOptions_OptimizeMode,def=1" json:"optimize_for,omitempty"`
> -	// Sets the Go package where structs generated from this .proto will be
> -	// placed. If omitted, the Go package will be derived from the following:
> -	//   - The basename of the package import path, if provided.
> -	//   - Otherwise, the package statement in the .proto file, if present.
> -	//   - Otherwise, the basename of the .proto file, without extension.
> -	GoPackage *string `protobuf:"bytes,11,opt,name=go_package,json=goPackage" json:"go_package,omitempty"`
> -	// Should generic services be generated in each language?  "Generic" services
> -	// are not specific to any particular RPC system.  They are generated by the
> -	// main code generators in each language (without additional plugins).
> -	// Generic services were the only kind of service generation supported by
> -	// early versions of google.protobuf.
> -	//
> -	// Generic services are now considered deprecated in favor of using plugins
> -	// that generate code specific to your particular RPC system.  Therefore,
> -	// these default to false.  Old code which depends on generic services should
> -	// explicitly set them to true.
> -	CcGenericServices   *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"`
> -	JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"`
> -	PyGenericServices   *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"`
> -	PhpGenericServices  *bool `protobuf:"varint,19,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"`
> -	// Is this file deprecated?
> -	// Depending on the target platform, this can emit Deprecated annotations
> -	// for everything in the file, or it will be completely ignored; in the very
> -	// least, this is a formalization for deprecating files.
> -	Deprecated *bool `protobuf:"varint,23,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
> -	// Enables the use of arenas for the proto messages in this file. This applies
> -	// only to generated classes for C++.
> -	CcEnableArenas *bool `protobuf:"varint,31,opt,name=cc_enable_arenas,json=ccEnableArenas,def=0" json:"cc_enable_arenas,omitempty"`
> -	// Sets the objective c class prefix which is prepended to all objective c
> -	// generated classes from this .proto. There is no default.
> -	ObjcClassPrefix *string `protobuf:"bytes,36,opt,name=objc_class_prefix,json=objcClassPrefix" json:"objc_class_prefix,omitempty"`
> -	// Namespace for generated classes; defaults to the package.
> -	CsharpNamespace *string `protobuf:"bytes,37,opt,name=csharp_namespace,json=csharpNamespace" json:"csharp_namespace,omitempty"`
> -	// By default Swift generators will take the proto package and CamelCase it
> -	// replacing '.' with underscore and use that to prefix the types/symbols
> -	// defined. When this options is provided, they will use this value instead
> -	// to prefix the types/symbols defined.
> -	SwiftPrefix *string `protobuf:"bytes,39,opt,name=swift_prefix,json=swiftPrefix" json:"swift_prefix,omitempty"`
> -	// Sets the php class prefix which is prepended to all php generated classes
> -	// from this .proto. Default is empty.
> -	PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"`
> -	// Use this option to change the namespace of php generated classes. Default
> -	// is empty. When this option is empty, the package name will be used for
> -	// determining the namespace.
> -	PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"`
> -	// The parser stores options it doesn't recognize here. See above.
> -	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *FileOptions) Reset()                    { *m = FileOptions{} }
> -func (m *FileOptions) String() string            { return proto.CompactTextString(m) }
> -func (*FileOptions) ProtoMessage()               {}
> -func (*FileOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
> -
> -var extRange_FileOptions = []proto.ExtensionRange{
> -	{1000, 536870911},
> -}
> -
> -func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_FileOptions
> -}
> -
> -const Default_FileOptions_JavaMultipleFiles bool = false
> -const Default_FileOptions_JavaStringCheckUtf8 bool = false
> -const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED
> -const Default_FileOptions_CcGenericServices bool = false
> -const Default_FileOptions_JavaGenericServices bool = false
> -const Default_FileOptions_PyGenericServices bool = false
> -const Default_FileOptions_PhpGenericServices bool = false
> -const Default_FileOptions_Deprecated bool = false
> -const Default_FileOptions_CcEnableArenas bool = false
> -
> -func (m *FileOptions) GetJavaPackage() string {
> -	if m != nil && m.JavaPackage != nil {
> -		return *m.JavaPackage
> -	}
> -	return ""
> -}
> -
> -func (m *FileOptions) GetJavaOuterClassname() string {
> -	if m != nil && m.JavaOuterClassname != nil {
> -		return *m.JavaOuterClassname
> -	}
> -	return ""
> -}
> -
> -func (m *FileOptions) GetJavaMultipleFiles() bool {
> -	if m != nil && m.JavaMultipleFiles != nil {
> -		return *m.JavaMultipleFiles
> -	}
> -	return Default_FileOptions_JavaMultipleFiles
> -}
> -
> -func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool {
> -	if m != nil && m.JavaGenerateEqualsAndHash != nil {
> -		return *m.JavaGenerateEqualsAndHash
> -	}
> -	return false
> -}
> -
> -func (m *FileOptions) GetJavaStringCheckUtf8() bool {
> -	if m != nil && m.JavaStringCheckUtf8 != nil {
> -		return *m.JavaStringCheckUtf8
> -	}
> -	return Default_FileOptions_JavaStringCheckUtf8
> -}
> -
> -func (m *FileOptions) GetOptimizeFor() FileOptions_OptimizeMode {
> -	if m != nil && m.OptimizeFor != nil {
> -		return *m.OptimizeFor
> -	}
> -	return Default_FileOptions_OptimizeFor
> -}
> -
> -func (m *FileOptions) GetGoPackage() string {
> -	if m != nil && m.GoPackage != nil {
> -		return *m.GoPackage
> -	}
> -	return ""
> -}
> -
> -func (m *FileOptions) GetCcGenericServices() bool {
> -	if m != nil && m.CcGenericServices != nil {
> -		return *m.CcGenericServices
> -	}
> -	return Default_FileOptions_CcGenericServices
> -}
> -
> -func (m *FileOptions) GetJavaGenericServices() bool {
> -	if m != nil && m.JavaGenericServices != nil {
> -		return *m.JavaGenericServices
> -	}
> -	return Default_FileOptions_JavaGenericServices
> -}
> -
> -func (m *FileOptions) GetPyGenericServices() bool {
> -	if m != nil && m.PyGenericServices != nil {
> -		return *m.PyGenericServices
> -	}
> -	return Default_FileOptions_PyGenericServices
> -}
> -
> -func (m *FileOptions) GetPhpGenericServices() bool {
> -	if m != nil && m.PhpGenericServices != nil {
> -		return *m.PhpGenericServices
> -	}
> -	return Default_FileOptions_PhpGenericServices
> -}
> -
> -func (m *FileOptions) GetDeprecated() bool {
> -	if m != nil && m.Deprecated != nil {
> -		return *m.Deprecated
> -	}
> -	return Default_FileOptions_Deprecated
> -}
> -
> -func (m *FileOptions) GetCcEnableArenas() bool {
> -	if m != nil && m.CcEnableArenas != nil {
> -		return *m.CcEnableArenas
> -	}
> -	return Default_FileOptions_CcEnableArenas
> -}
> -
> -func (m *FileOptions) GetObjcClassPrefix() string {
> -	if m != nil && m.ObjcClassPrefix != nil {
> -		return *m.ObjcClassPrefix
> -	}
> -	return ""
> -}
> -
> -func (m *FileOptions) GetCsharpNamespace() string {
> -	if m != nil && m.CsharpNamespace != nil {
> -		return *m.CsharpNamespace
> -	}
> -	return ""
> -}
> -
> -func (m *FileOptions) GetSwiftPrefix() string {
> -	if m != nil && m.SwiftPrefix != nil {
> -		return *m.SwiftPrefix
> -	}
> -	return ""
> -}
> -
> -func (m *FileOptions) GetPhpClassPrefix() string {
> -	if m != nil && m.PhpClassPrefix != nil {
> -		return *m.PhpClassPrefix
> -	}
> -	return ""
> -}
> -
> -func (m *FileOptions) GetPhpNamespace() string {
> -	if m != nil && m.PhpNamespace != nil {
> -		return *m.PhpNamespace
> -	}
> -	return ""
> -}
> -
> -func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption {
> -	if m != nil {
> -		return m.UninterpretedOption
> -	}
> -	return nil
> -}
> -
> -type MessageOptions struct {
> -	// Set true to use the old proto1 MessageSet wire format for extensions.
> -	// This is provided for backwards-compatibility with the MessageSet wire
> -	// format.  You should not use this for any other reason:  It's less
> -	// efficient, has fewer features, and is more complicated.
> -	//
> -	// The message must be defined exactly as follows:
> -	//   message Foo {
> -	//     option message_set_wire_format = true;
> -	//     extensions 4 to max;
> -	//   }
> -	// Note that the message cannot have any defined fields; MessageSets only
> -	// have extensions.
> -	//
> -	// All extensions of your type must be singular messages; e.g. they cannot
> -	// be int32s, enums, or repeated messages.
> -	//
> -	// Because this is an option, the above two restrictions are not enforced by
> -	// the protocol compiler.
> -	MessageSetWireFormat *bool `protobuf:"varint,1,opt,name=message_set_wire_format,json=messageSetWireFormat,def=0" json:"message_set_wire_format,omitempty"`
> -	// Disables the generation of the standard "descriptor()" accessor, which can
> -	// conflict with a field of the same name.  This is meant to make migration
> -	// from proto1 easier; new code should avoid fields named "descriptor".
> -	NoStandardDescriptorAccessor *bool `protobuf:"varint,2,opt,name=no_standard_descriptor_accessor,json=noStandardDescriptorAccessor,def=0" json:"no_standard_descriptor_accessor,omitempty"`
> -	// Is this message deprecated?
> -	// Depending on the target platform, this can emit Deprecated annotations
> -	// for the message, or it will be completely ignored; in the very least,
> -	// this is a formalization for deprecating messages.
> -	Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
> -	// Whether the message is an automatically generated map entry type for the
> -	// maps field.
> -	//
> -	// For maps fields:
> -	//     map<KeyType, ValueType> map_field = 1;
> -	// The parsed descriptor looks like:
> -	//     message MapFieldEntry {
> -	//         option map_entry = true;
> -	//         optional KeyType key = 1;
> -	//         optional ValueType value = 2;
> -	//     }
> -	//     repeated MapFieldEntry map_field = 1;
> -	//
> -	// Implementations may choose not to generate the map_entry=true message, but
> -	// use a native map in the target language to hold the keys and values.
> -	// The reflection APIs in such implementions still need to work as
> -	// if the field is a repeated message field.
> -	//
> -	// NOTE: Do not set the option in .proto files. Always use the maps syntax
> -	// instead. The option should only be implicitly set by the proto compiler
> -	// parser.
> -	MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"`
> -	// The parser stores options it doesn't recognize here. See above.
> -	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *MessageOptions) Reset()                    { *m = MessageOptions{} }
> -func (m *MessageOptions) String() string            { return proto.CompactTextString(m) }
> -func (*MessageOptions) ProtoMessage()               {}
> -func (*MessageOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
> -
> -var extRange_MessageOptions = []proto.ExtensionRange{
> -	{1000, 536870911},
> -}
> -
> -func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_MessageOptions
> -}
> -
> -const Default_MessageOptions_MessageSetWireFormat bool = false
> -const Default_MessageOptions_NoStandardDescriptorAccessor bool = false
> -const Default_MessageOptions_Deprecated bool = false
> -
> -func (m *MessageOptions) GetMessageSetWireFormat() bool {
> -	if m != nil && m.MessageSetWireFormat != nil {
> -		return *m.MessageSetWireFormat
> -	}
> -	return Default_MessageOptions_MessageSetWireFormat
> -}
> -
> -func (m *MessageOptions) GetNoStandardDescriptorAccessor() bool {
> -	if m != nil && m.NoStandardDescriptorAccessor != nil {
> -		return *m.NoStandardDescriptorAccessor
> -	}
> -	return Default_MessageOptions_NoStandardDescriptorAccessor
> -}
> -
> -func (m *MessageOptions) GetDeprecated() bool {
> -	if m != nil && m.Deprecated != nil {
> -		return *m.Deprecated
> -	}
> -	return Default_MessageOptions_Deprecated
> -}
> -
> -func (m *MessageOptions) GetMapEntry() bool {
> -	if m != nil && m.MapEntry != nil {
> -		return *m.MapEntry
> -	}
> -	return false
> -}
> -
> -func (m *MessageOptions) GetUninterpretedOption() []*UninterpretedOption {
> -	if m != nil {
> -		return m.UninterpretedOption
> -	}
> -	return nil
> -}
> -
> -type FieldOptions struct {
> -	// The ctype option instructs the C++ code generator to use a different
> -	// representation of the field than it normally would.  See the specific
> -	// options below.  This option is not yet implemented in the open source
> -	// release -- sorry, we'll try to include it in a future version!
> -	Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"`
> -	// The packed option can be enabled for repeated primitive fields to enable
> -	// a more efficient representation on the wire. Rather than repeatedly
> -	// writing the tag and type for each element, the entire array is encoded as
> -	// a single length-delimited blob. In proto3, only explicit setting it to
> -	// false will avoid using packed encoding.
> -	Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"`
> -	// The jstype option determines the JavaScript type used for values of the
> -	// field.  The option is permitted only for 64 bit integral and fixed types
> -	// (int64, uint64, sint64, fixed64, sfixed64).  By default these types are
> -	// represented as JavaScript strings.  This avoids loss of precision that can
> -	// happen when a large value is converted to a floating point JavaScript
> -	// numbers.  Specifying JS_NUMBER for the jstype causes the generated
> -	// JavaScript code to use the JavaScript "number" type instead of strings.
> -	// This option is an enum to permit additional types to be added,
> -	// e.g. goog.math.Integer.
> -	Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"`
> -	// Should this field be parsed lazily?  Lazy applies only to message-type
> -	// fields.  It means that when the outer message is initially parsed, the
> -	// inner message's contents will not be parsed but instead stored in encoded
> -	// form.  The inner message will actually be parsed when it is first accessed.
> -	//
> -	// This is only a hint.  Implementations are free to choose whether to use
> -	// eager or lazy parsing regardless of the value of this option.  However,
> -	// setting this option true suggests that the protocol author believes that
> -	// using lazy parsing on this field is worth the additional bookkeeping
> -	// overhead typically needed to implement it.
> -	//
> -	// This option does not affect the public interface of any generated code;
> -	// all method signatures remain the same.  Furthermore, thread-safety of the
> -	// interface is not affected by this option; const methods remain safe to
> -	// call from multiple threads concurrently, while non-const methods continue
> -	// to require exclusive access.
> -	//
> -	//
> -	// Note that implementations may choose not to check required fields within
> -	// a lazy sub-message.  That is, calling IsInitialized() on the outer message
> -	// may return true even if the inner message has missing required fields.
> -	// This is necessary because otherwise the inner message would have to be
> -	// parsed in order to perform the check, defeating the purpose of lazy
> -	// parsing.  An implementation which chooses not to check required fields
> -	// must be consistent about it.  That is, for any particular sub-message, the
> -	// implementation must either *always* check its required fields, or *never*
> -	// check its required fields, regardless of whether or not the message has
> -	// been parsed.
> -	Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"`
> -	// Is this field deprecated?
> -	// Depending on the target platform, this can emit Deprecated annotations
> -	// for accessors, or it will be completely ignored; in the very least, this
> -	// is a formalization for deprecating fields.
> -	Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
> -	// For Google-internal migration only. Do not use.
> -	Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"`
> -	// The parser stores options it doesn't recognize here. See above.
> -	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *FieldOptions) Reset()                    { *m = FieldOptions{} }
> -func (m *FieldOptions) String() string            { return proto.CompactTextString(m) }
> -func (*FieldOptions) ProtoMessage()               {}
> -func (*FieldOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
> -
> -var extRange_FieldOptions = []proto.ExtensionRange{
> -	{1000, 536870911},
> -}
> -
> -func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_FieldOptions
> -}
> -
> -const Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING
> -const Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL
> -const Default_FieldOptions_Lazy bool = false
> -const Default_FieldOptions_Deprecated bool = false
> -const Default_FieldOptions_Weak bool = false
> -
> -func (m *FieldOptions) GetCtype() FieldOptions_CType {
> -	if m != nil && m.Ctype != nil {
> -		return *m.Ctype
> -	}
> -	return Default_FieldOptions_Ctype
> -}
> -
> -func (m *FieldOptions) GetPacked() bool {
> -	if m != nil && m.Packed != nil {
> -		return *m.Packed
> -	}
> -	return false
> -}
> -
> -func (m *FieldOptions) GetJstype() FieldOptions_JSType {
> -	if m != nil && m.Jstype != nil {
> -		return *m.Jstype
> -	}
> -	return Default_FieldOptions_Jstype
> -}
> -
> -func (m *FieldOptions) GetLazy() bool {
> -	if m != nil && m.Lazy != nil {
> -		return *m.Lazy
> -	}
> -	return Default_FieldOptions_Lazy
> -}
> -
> -func (m *FieldOptions) GetDeprecated() bool {
> -	if m != nil && m.Deprecated != nil {
> -		return *m.Deprecated
> -	}
> -	return Default_FieldOptions_Deprecated
> -}
> -
> -func (m *FieldOptions) GetWeak() bool {
> -	if m != nil && m.Weak != nil {
> -		return *m.Weak
> -	}
> -	return Default_FieldOptions_Weak
> -}
> -
> -func (m *FieldOptions) GetUninterpretedOption() []*UninterpretedOption {
> -	if m != nil {
> -		return m.UninterpretedOption
> -	}
> -	return nil
> -}
> -
> -type OneofOptions struct {
> -	// The parser stores options it doesn't recognize here. See above.
> -	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *OneofOptions) Reset()                    { *m = OneofOptions{} }
> -func (m *OneofOptions) String() string            { return proto.CompactTextString(m) }
> -func (*OneofOptions) ProtoMessage()               {}
> -func (*OneofOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
> -
> -var extRange_OneofOptions = []proto.ExtensionRange{
> -	{1000, 536870911},
> -}
> -
> -func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_OneofOptions
> -}
> -
> -func (m *OneofOptions) GetUninterpretedOption() []*UninterpretedOption {
> -	if m != nil {
> -		return m.UninterpretedOption
> -	}
> -	return nil
> -}
> -
> -type EnumOptions struct {
> -	// Set this option to true to allow mapping different tag names to the same
> -	// value.
> -	AllowAlias *bool `protobuf:"varint,2,opt,name=allow_alias,json=allowAlias" json:"allow_alias,omitempty"`
> -	// Is this enum deprecated?
> -	// Depending on the target platform, this can emit Deprecated annotations
> -	// for the enum, or it will be completely ignored; in the very least, this
> -	// is a formalization for deprecating enums.
> -	Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
> -	// The parser stores options it doesn't recognize here. See above.
> -	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *EnumOptions) Reset()                    { *m = EnumOptions{} }
> -func (m *EnumOptions) String() string            { return proto.CompactTextString(m) }
> -func (*EnumOptions) ProtoMessage()               {}
> -func (*EnumOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
> -
> -var extRange_EnumOptions = []proto.ExtensionRange{
> -	{1000, 536870911},
> -}
> -
> -func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_EnumOptions
> -}
> -
> -const Default_EnumOptions_Deprecated bool = false
> -
> -func (m *EnumOptions) GetAllowAlias() bool {
> -	if m != nil && m.AllowAlias != nil {
> -		return *m.AllowAlias
> -	}
> -	return false
> -}
> -
> -func (m *EnumOptions) GetDeprecated() bool {
> -	if m != nil && m.Deprecated != nil {
> -		return *m.Deprecated
> -	}
> -	return Default_EnumOptions_Deprecated
> -}
> -
> -func (m *EnumOptions) GetUninterpretedOption() []*UninterpretedOption {
> -	if m != nil {
> -		return m.UninterpretedOption
> -	}
> -	return nil
> -}
> -
> -type EnumValueOptions struct {
> -	// Is this enum value deprecated?
> -	// Depending on the target platform, this can emit Deprecated annotations
> -	// for the enum value, or it will be completely ignored; in the very least,
> -	// this is a formalization for deprecating enum values.
> -	Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
> -	// The parser stores options it doesn't recognize here. See above.
> -	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *EnumValueOptions) Reset()                    { *m = EnumValueOptions{} }
> -func (m *EnumValueOptions) String() string            { return proto.CompactTextString(m) }
> -func (*EnumValueOptions) ProtoMessage()               {}
> -func (*EnumValueOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
> -
> -var extRange_EnumValueOptions = []proto.ExtensionRange{
> -	{1000, 536870911},
> -}
> -
> -func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_EnumValueOptions
> -}
> -
> -const Default_EnumValueOptions_Deprecated bool = false
> -
> -func (m *EnumValueOptions) GetDeprecated() bool {
> -	if m != nil && m.Deprecated != nil {
> -		return *m.Deprecated
> -	}
> -	return Default_EnumValueOptions_Deprecated
> -}
> -
> -func (m *EnumValueOptions) GetUninterpretedOption() []*UninterpretedOption {
> -	if m != nil {
> -		return m.UninterpretedOption
> -	}
> -	return nil
> -}
> -
> -type ServiceOptions struct {
> -	// Is this service deprecated?
> -	// Depending on the target platform, this can emit Deprecated annotations
> -	// for the service, or it will be completely ignored; in the very least,
> -	// this is a formalization for deprecating services.
> -	Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
> -	// The parser stores options it doesn't recognize here. See above.
> -	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *ServiceOptions) Reset()                    { *m = ServiceOptions{} }
> -func (m *ServiceOptions) String() string            { return proto.CompactTextString(m) }
> -func (*ServiceOptions) ProtoMessage()               {}
> -func (*ServiceOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
> -
> -var extRange_ServiceOptions = []proto.ExtensionRange{
> -	{1000, 536870911},
> -}
> -
> -func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_ServiceOptions
> -}
> -
> -const Default_ServiceOptions_Deprecated bool = false
> -
> -func (m *ServiceOptions) GetDeprecated() bool {
> -	if m != nil && m.Deprecated != nil {
> -		return *m.Deprecated
> -	}
> -	return Default_ServiceOptions_Deprecated
> -}
> -
> -func (m *ServiceOptions) GetUninterpretedOption() []*UninterpretedOption {
> -	if m != nil {
> -		return m.UninterpretedOption
> -	}
> -	return nil
> -}
> -
> -type MethodOptions struct {
> -	// Is this method deprecated?
> -	// Depending on the target platform, this can emit Deprecated annotations
> -	// for the method, or it will be completely ignored; in the very least,
> -	// this is a formalization for deprecating methods.
> -	Deprecated       *bool                           `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
> -	IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"`
> -	// The parser stores options it doesn't recognize here. See above.
> -	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *MethodOptions) Reset()                    { *m = MethodOptions{} }
> -func (m *MethodOptions) String() string            { return proto.CompactTextString(m) }
> -func (*MethodOptions) ProtoMessage()               {}
> -func (*MethodOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
> -
> -var extRange_MethodOptions = []proto.ExtensionRange{
> -	{1000, 536870911},
> -}
> -
> -func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_MethodOptions
> -}
> -
> -const Default_MethodOptions_Deprecated bool = false
> -const Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN
> -
> -func (m *MethodOptions) GetDeprecated() bool {
> -	if m != nil && m.Deprecated != nil {
> -		return *m.Deprecated
> -	}
> -	return Default_MethodOptions_Deprecated
> -}
> -
> -func (m *MethodOptions) GetIdempotencyLevel() MethodOptions_IdempotencyLevel {
> -	if m != nil && m.IdempotencyLevel != nil {
> -		return *m.IdempotencyLevel
> -	}
> -	return Default_MethodOptions_IdempotencyLevel
> -}
> -
> -func (m *MethodOptions) GetUninterpretedOption() []*UninterpretedOption {
> -	if m != nil {
> -		return m.UninterpretedOption
> -	}
> -	return nil
> -}
> -
> -// A message representing a option the parser does not recognize. This only
> -// appears in options protos created by the compiler::Parser class.
> -// DescriptorPool resolves these when building Descriptor objects. Therefore,
> -// options protos in descriptor objects (e.g. returned by Descriptor::options(),
> -// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
> -// in them.
> -type UninterpretedOption struct {
> -	Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"`
> -	// The value of the uninterpreted option, in whatever type the tokenizer
> -	// identified it as during parsing. Exactly one of these should be set.
> -	IdentifierValue  *string  `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"`
> -	PositiveIntValue *uint64  `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"`
> -	NegativeIntValue *int64   `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"`
> -	DoubleValue      *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"`
> -	StringValue      []byte   `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"`
> -	AggregateValue   *string  `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"`
> -	XXX_unrecognized []byte   `json:"-"`
> -}
> -
> -func (m *UninterpretedOption) Reset()                    { *m = UninterpretedOption{} }
> -func (m *UninterpretedOption) String() string            { return proto.CompactTextString(m) }
> -func (*UninterpretedOption) ProtoMessage()               {}
> -func (*UninterpretedOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
> -
> -func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart {
> -	if m != nil {
> -		return m.Name
> -	}
> -	return nil
> -}
> -
> -func (m *UninterpretedOption) GetIdentifierValue() string {
> -	if m != nil && m.IdentifierValue != nil {
> -		return *m.IdentifierValue
> -	}
> -	return ""
> -}
> -
> -func (m *UninterpretedOption) GetPositiveIntValue() uint64 {
> -	if m != nil && m.PositiveIntValue != nil {
> -		return *m.PositiveIntValue
> -	}
> -	return 0
> -}
> -
> -func (m *UninterpretedOption) GetNegativeIntValue() int64 {
> -	if m != nil && m.NegativeIntValue != nil {
> -		return *m.NegativeIntValue
> -	}
> -	return 0
> -}
> -
> -func (m *UninterpretedOption) GetDoubleValue() float64 {
> -	if m != nil && m.DoubleValue != nil {
> -		return *m.DoubleValue
> -	}
> -	return 0
> -}
> -
> -func (m *UninterpretedOption) GetStringValue() []byte {
> -	if m != nil {
> -		return m.StringValue
> -	}
> -	return nil
> -}
> -
> -func (m *UninterpretedOption) GetAggregateValue() string {
> -	if m != nil && m.AggregateValue != nil {
> -		return *m.AggregateValue
> -	}
> -	return ""
> -}
> -
> -// The name of the uninterpreted option.  Each string represents a segment in
> -// a dot-separated name.  is_extension is true iff a segment represents an
> -// extension (denoted with parentheses in options specs in .proto files).
> -// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
> -// "foo.(bar.baz).qux".
> -type UninterpretedOption_NamePart struct {
> -	NamePart         *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"`
> -	IsExtension      *bool   `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *UninterpretedOption_NamePart) Reset()         { *m = UninterpretedOption_NamePart{} }
> -func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) }
> -func (*UninterpretedOption_NamePart) ProtoMessage()    {}
> -func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) {
> -	return fileDescriptor0, []int{17, 0}
> -}
> -
> -func (m *UninterpretedOption_NamePart) GetNamePart() string {
> -	if m != nil && m.NamePart != nil {
> -		return *m.NamePart
> -	}
> -	return ""
> -}
> -
> -func (m *UninterpretedOption_NamePart) GetIsExtension() bool {
> -	if m != nil && m.IsExtension != nil {
> -		return *m.IsExtension
> -	}
> -	return false
> -}
> -
> -// Encapsulates information about the original source file from which a
> -// FileDescriptorProto was generated.
> -type SourceCodeInfo struct {
> -	// A Location identifies a piece of source code in a .proto file which
> -	// corresponds to a particular definition.  This information is intended
> -	// to be useful to IDEs, code indexers, documentation generators, and similar
> -	// tools.
> -	//
> -	// For example, say we have a file like:
> -	//   message Foo {
> -	//     optional string foo = 1;
> -	//   }
> -	// Let's look at just the field definition:
> -	//   optional string foo = 1;
> -	//   ^       ^^     ^^  ^  ^^^
> -	//   a       bc     de  f  ghi
> -	// We have the following locations:
> -	//   span   path               represents
> -	//   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
> -	//   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
> -	//   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
> -	//   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
> -	//   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
> -	//
> -	// Notes:
> -	// - A location may refer to a repeated field itself (i.e. not to any
> -	//   particular index within it).  This is used whenever a set of elements are
> -	//   logically enclosed in a single code segment.  For example, an entire
> -	//   extend block (possibly containing multiple extension definitions) will
> -	//   have an outer location whose path refers to the "extensions" repeated
> -	//   field without an index.
> -	// - Multiple locations may have the same path.  This happens when a single
> -	//   logical declaration is spread out across multiple places.  The most
> -	//   obvious example is the "extend" block again -- there may be multiple
> -	//   extend blocks in the same scope, each of which will have the same path.
> -	// - A location's span is not always a subset of its parent's span.  For
> -	//   example, the "extendee" of an extension declaration appears at the
> -	//   beginning of the "extend" block and is shared by all extensions within
> -	//   the block.
> -	// - Just because a location's span is a subset of some other location's span
> -	//   does not mean that it is a descendent.  For example, a "group" defines
> -	//   both a type and a field in a single declaration.  Thus, the locations
> -	//   corresponding to the type and field and their components will overlap.
> -	// - Code which tries to interpret locations should probably be designed to
> -	//   ignore those that it doesn't understand, as more types of locations could
> -	//   be recorded in the future.
> -	Location         []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"`
> -	XXX_unrecognized []byte                     `json:"-"`
> -}
> -
> -func (m *SourceCodeInfo) Reset()                    { *m = SourceCodeInfo{} }
> -func (m *SourceCodeInfo) String() string            { return proto.CompactTextString(m) }
> -func (*SourceCodeInfo) ProtoMessage()               {}
> -func (*SourceCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
> -
> -func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location {
> -	if m != nil {
> -		return m.Location
> -	}
> -	return nil
> -}
> -
> -type SourceCodeInfo_Location struct {
> -	// Identifies which part of the FileDescriptorProto was defined at this
> -	// location.
> -	//
> -	// Each element is a field number or an index.  They form a path from
> -	// the root FileDescriptorProto to the place where the definition.  For
> -	// example, this path:
> -	//   [ 4, 3, 2, 7, 1 ]
> -	// refers to:
> -	//   file.message_type(3)  // 4, 3
> -	//       .field(7)         // 2, 7
> -	//       .name()           // 1
> -	// This is because FileDescriptorProto.message_type has field number 4:
> -	//   repeated DescriptorProto message_type = 4;
> -	// and DescriptorProto.field has field number 2:
> -	//   repeated FieldDescriptorProto field = 2;
> -	// and FieldDescriptorProto.name has field number 1:
> -	//   optional string name = 1;
> -	//
> -	// Thus, the above path gives the location of a field name.  If we removed
> -	// the last element:
> -	//   [ 4, 3, 2, 7 ]
> -	// this path refers to the whole field declaration (from the beginning
> -	// of the label to the terminating semicolon).
> -	Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"`
> -	// Always has exactly three or four elements: start line, start column,
> -	// end line (optional, otherwise assumed same as start line), end column.
> -	// These are packed into a single field for efficiency.  Note that line
> -	// and column numbers are zero-based -- typically you will want to add
> -	// 1 to each before displaying to a user.
> -	Span []int32 `protobuf:"varint,2,rep,packed,name=span" json:"span,omitempty"`
> -	// If this SourceCodeInfo represents a complete declaration, these are any
> -	// comments appearing before and after the declaration which appear to be
> -	// attached to the declaration.
> -	//
> -	// A series of line comments appearing on consecutive lines, with no other
> -	// tokens appearing on those lines, will be treated as a single comment.
> -	//
> -	// leading_detached_comments will keep paragraphs of comments that appear
> -	// before (but not connected to) the current element. Each paragraph,
> -	// separated by empty lines, will be one comment element in the repeated
> -	// field.
> -	//
> -	// Only the comment content is provided; comment markers (e.g. //) are
> -	// stripped out.  For block comments, leading whitespace and an asterisk
> -	// will be stripped from the beginning of each line other than the first.
> -	// Newlines are included in the output.
> -	//
> -	// Examples:
> -	//
> -	//   optional int32 foo = 1;  // Comment attached to foo.
> -	//   // Comment attached to bar.
> -	//   optional int32 bar = 2;
> -	//
> -	//   optional string baz = 3;
> -	//   // Comment attached to baz.
> -	//   // Another line attached to baz.
> -	//
> -	//   // Comment attached to qux.
> -	//   //
> -	//   // Another line attached to qux.
> -	//   optional double qux = 4;
> -	//
> -	//   // Detached comment for corge. This is not leading or trailing comments
> -	//   // to qux or corge because there are blank lines separating it from
> -	//   // both.
> -	//
> -	//   // Detached comment for corge paragraph 2.
> -	//
> -	//   optional string corge = 5;
> -	//   /* Block comment attached
> -	//    * to corge.  Leading asterisks
> -	//    * will be removed. */
> -	//   /* Block comment attached to
> -	//    * grault. */
> -	//   optional int32 grault = 6;
> -	//
> -	//   // ignored detached comments.
> -	LeadingComments         *string  `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"`
> -	TrailingComments        *string  `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"`
> -	LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"`
> -	XXX_unrecognized        []byte   `json:"-"`
> -}
> -
> -func (m *SourceCodeInfo_Location) Reset()                    { *m = SourceCodeInfo_Location{} }
> -func (m *SourceCodeInfo_Location) String() string            { return proto.CompactTextString(m) }
> -func (*SourceCodeInfo_Location) ProtoMessage()               {}
> -func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18, 0} }
> -
> -func (m *SourceCodeInfo_Location) GetPath() []int32 {
> -	if m != nil {
> -		return m.Path
> -	}
> -	return nil
> -}
> -
> -func (m *SourceCodeInfo_Location) GetSpan() []int32 {
> -	if m != nil {
> -		return m.Span
> -	}
> -	return nil
> -}
> -
> -func (m *SourceCodeInfo_Location) GetLeadingComments() string {
> -	if m != nil && m.LeadingComments != nil {
> -		return *m.LeadingComments
> -	}
> -	return ""
> -}
> -
> -func (m *SourceCodeInfo_Location) GetTrailingComments() string {
> -	if m != nil && m.TrailingComments != nil {
> -		return *m.TrailingComments
> -	}
> -	return ""
> -}
> -
> -func (m *SourceCodeInfo_Location) GetLeadingDetachedComments() []string {
> -	if m != nil {
> -		return m.LeadingDetachedComments
> -	}
> -	return nil
> -}
> -
> -// Describes the relationship between generated code and its original source
> -// file. A GeneratedCodeInfo message is associated with only one generated
> -// source file, but may contain references to different source .proto files.
> -type GeneratedCodeInfo struct {
> -	// An Annotation connects some span of text in generated code to an element
> -	// of its generating .proto file.
> -	Annotation       []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"`
> -	XXX_unrecognized []byte                          `json:"-"`
> -}
> -
> -func (m *GeneratedCodeInfo) Reset()                    { *m = GeneratedCodeInfo{} }
> -func (m *GeneratedCodeInfo) String() string            { return proto.CompactTextString(m) }
> -func (*GeneratedCodeInfo) ProtoMessage()               {}
> -func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
> -
> -func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation {
> -	if m != nil {
> -		return m.Annotation
> -	}
> -	return nil
> -}
> -
> -type GeneratedCodeInfo_Annotation struct {
> -	// Identifies the element in the original source .proto file. This field
> -	// is formatted the same as SourceCodeInfo.Location.path.
> -	Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"`
> -	// Identifies the filesystem path to the original source .proto.
> -	SourceFile *string `protobuf:"bytes,2,opt,name=source_file,json=sourceFile" json:"source_file,omitempty"`
> -	// Identifies the starting offset in bytes in the generated code
> -	// that relates to the identified object.
> -	Begin *int32 `protobuf:"varint,3,opt,name=begin" json:"begin,omitempty"`
> -	// Identifies the ending offset in bytes in the generated code that
> -	// relates to the identified offset. The end offset should be one past
> -	// the last relevant byte (so the length of the text = end - begin).
> -	End              *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *GeneratedCodeInfo_Annotation) Reset()         { *m = GeneratedCodeInfo_Annotation{} }
> -func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) }
> -func (*GeneratedCodeInfo_Annotation) ProtoMessage()    {}
> -func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) {
> -	return fileDescriptor0, []int{19, 0}
> -}
> -
> -func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 {
> -	if m != nil {
> -		return m.Path
> -	}
> -	return nil
> -}
> -
> -func (m *GeneratedCodeInfo_Annotation) GetSourceFile() string {
> -	if m != nil && m.SourceFile != nil {
> -		return *m.SourceFile
> -	}
> -	return ""
> -}
> -
> -func (m *GeneratedCodeInfo_Annotation) GetBegin() int32 {
> -	if m != nil && m.Begin != nil {
> -		return *m.Begin
> -	}
> -	return 0
> -}
> -
> -func (m *GeneratedCodeInfo_Annotation) GetEnd() int32 {
> -	if m != nil && m.End != nil {
> -		return *m.End
> -	}
> -	return 0
> -}
> -
> -func init() {
> -	proto.RegisterType((*FileDescriptorSet)(nil), "google.protobuf.FileDescriptorSet")
> -	proto.RegisterType((*FileDescriptorProto)(nil), "google.protobuf.FileDescriptorProto")
> -	proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto")
> -	proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange")
> -	proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange")
> -	proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto")
> -	proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto")
> -	proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto")
> -	proto.RegisterType((*EnumValueDescriptorProto)(nil), "google.protobuf.EnumValueDescriptorProto")
> -	proto.RegisterType((*ServiceDescriptorProto)(nil), "google.protobuf.ServiceDescriptorProto")
> -	proto.RegisterType((*MethodDescriptorProto)(nil), "google.protobuf.MethodDescriptorProto")
> -	proto.RegisterType((*FileOptions)(nil), "google.protobuf.FileOptions")
> -	proto.RegisterType((*MessageOptions)(nil), "google.protobuf.MessageOptions")
> -	proto.RegisterType((*FieldOptions)(nil), "google.protobuf.FieldOptions")
> -	proto.RegisterType((*OneofOptions)(nil), "google.protobuf.OneofOptions")
> -	proto.RegisterType((*EnumOptions)(nil), "google.protobuf.EnumOptions")
> -	proto.RegisterType((*EnumValueOptions)(nil), "google.protobuf.EnumValueOptions")
> -	proto.RegisterType((*ServiceOptions)(nil), "google.protobuf.ServiceOptions")
> -	proto.RegisterType((*MethodOptions)(nil), "google.protobuf.MethodOptions")
> -	proto.RegisterType((*UninterpretedOption)(nil), "google.protobuf.UninterpretedOption")
> -	proto.RegisterType((*UninterpretedOption_NamePart)(nil), "google.protobuf.UninterpretedOption.NamePart")
> -	proto.RegisterType((*SourceCodeInfo)(nil), "google.protobuf.SourceCodeInfo")
> -	proto.RegisterType((*SourceCodeInfo_Location)(nil), "google.protobuf.SourceCodeInfo.Location")
> -	proto.RegisterType((*GeneratedCodeInfo)(nil), "google.protobuf.GeneratedCodeInfo")
> -	proto.RegisterType((*GeneratedCodeInfo_Annotation)(nil), "google.protobuf.GeneratedCodeInfo.Annotation")
> -	proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value)
> -	proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value)
> -	proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value)
> -	proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value)
> -	proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value)
> -	proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value)
> -}
> -
> -func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 2490 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x8e, 0xdb, 0xc6,
> -	0x15, 0x8e, 0x7e, 0x57, 0x3a, 0xd2, 0x6a, 0x67, 0x67, 0x37, 0x36, 0xbd, 0xf9, 0xf1, 0x5a, 0xf9,
> -	0xf1, 0x3a, 0x69, 0xb4, 0xc1, 0xc6, 0x76, 0x9c, 0x4d, 0xe1, 0x42, 0x2b, 0xd1, 0x1b, 0xb9, 0x5a,
> -	0x49, 0xa5, 0xb4, 0x8d, 0x9d, 0x1b, 0x62, 0x96, 0x1c, 0x49, 0xb4, 0x29, 0x92, 0x21, 0x29, 0xdb,
> -	0x9b, 0x2b, 0x03, 0xbd, 0x2a, 0xd0, 0x07, 0x28, 0x8a, 0xa2, 0x17, 0xb9, 0x09, 0xd0, 0x07, 0x28,
> -	0xd0, 0xbb, 0x3e, 0x41, 0x81, 0xbc, 0x41, 0x51, 0x14, 0x68, 0xdf, 0xa0, 0xb7, 0xc5, 0xcc, 0x90,
> -	0x14, 0xa9, 0x1f, 0x7b, 0x1b, 0xc0, 0xc9, 0x95, 0x34, 0xdf, 0xf9, 0xce, 0x99, 0x33, 0x67, 0xce,
> -	0xcc, 0x9c, 0x19, 0xc2, 0xee, 0xc8, 0xb6, 0x47, 0x26, 0xdd, 0x77, 0x5c, 0xdb, 0xb7, 0xcf, 0xa6,
> -	0xc3, 0x7d, 0x9d, 0x7a, 0x9a, 0x6b, 0x38, 0xbe, 0xed, 0xd6, 0x38, 0x86, 0x37, 0x04, 0xa3, 0x16,
> -	0x32, 0xaa, 0x27, 0xb0, 0x79, 0xcf, 0x30, 0x69, 0x33, 0x22, 0xf6, 0xa9, 0x8f, 0xef, 0x40, 0x76,
> -	0x68, 0x98, 0x54, 0x4a, 0xed, 0x66, 0xf6, 0x4a, 0x07, 0xef, 0xd6, 0xe6, 0x94, 0x6a, 0x49, 0x8d,
> -	0x1e, 0x83, 0x15, 0xae, 0x51, 0xfd, 0x57, 0x16, 0xb6, 0x96, 0x48, 0x31, 0x86, 0xac, 0x45, 0x26,
> -	0xcc, 0x62, 0x6a, 0xaf, 0xa8, 0xf0, 0xff, 0x58, 0x82, 0x35, 0x87, 0x68, 0x8f, 0xc9, 0x88, 0x4a,
> -	0x69, 0x0e, 0x87, 0x4d, 0xfc, 0x36, 0x80, 0x4e, 0x1d, 0x6a, 0xe9, 0xd4, 0xd2, 0xce, 0xa5, 0xcc,
> -	0x6e, 0x66, 0xaf, 0xa8, 0xc4, 0x10, 0xfc, 0x21, 0x6c, 0x3a, 0xd3, 0x33, 0xd3, 0xd0, 0xd4, 0x18,
> -	0x0d, 0x76, 0x33, 0x7b, 0x39, 0x05, 0x09, 0x41, 0x73, 0x46, 0xbe, 0x0e, 0x1b, 0x4f, 0x29, 0x79,
> -	0x1c, 0xa7, 0x96, 0x38, 0xb5, 0xc2, 0xe0, 0x18, 0xb1, 0x01, 0xe5, 0x09, 0xf5, 0x3c, 0x32, 0xa2,
> -	0xaa, 0x7f, 0xee, 0x50, 0x29, 0xcb, 0x47, 0xbf, 0xbb, 0x30, 0xfa, 0xf9, 0x91, 0x97, 0x02, 0xad,
> -	0xc1, 0xb9, 0x43, 0x71, 0x1d, 0x8a, 0xd4, 0x9a, 0x4e, 0x84, 0x85, 0xdc, 0x8a, 0xf8, 0xc9, 0xd6,
> -	0x74, 0x32, 0x6f, 0xa5, 0xc0, 0xd4, 0x02, 0x13, 0x6b, 0x1e, 0x75, 0x9f, 0x18, 0x1a, 0x95, 0xf2,
> -	0xdc, 0xc0, 0xf5, 0x05, 0x03, 0x7d, 0x21, 0x9f, 0xb7, 0x11, 0xea, 0xe1, 0x06, 0x14, 0xe9, 0x33,
> -	0x9f, 0x5a, 0x9e, 0x61, 0x5b, 0xd2, 0x1a, 0x37, 0xf2, 0xde, 0x92, 0x59, 0xa4, 0xa6, 0x3e, 0x6f,
> -	0x62, 0xa6, 0x87, 0x6f, 0xc3, 0x9a, 0xed, 0xf8, 0x86, 0x6d, 0x79, 0x52, 0x61, 0x37, 0xb5, 0x57,
> -	0x3a, 0x78, 0x73, 0x69, 0x22, 0x74, 0x05, 0x47, 0x09, 0xc9, 0xb8, 0x05, 0xc8, 0xb3, 0xa7, 0xae,
> -	0x46, 0x55, 0xcd, 0xd6, 0xa9, 0x6a, 0x58, 0x43, 0x5b, 0x2a, 0x72, 0x03, 0x57, 0x17, 0x07, 0xc2,
> -	0x89, 0x0d, 0x5b, 0xa7, 0x2d, 0x6b, 0x68, 0x2b, 0x15, 0x2f, 0xd1, 0xc6, 0x97, 0x20, 0xef, 0x9d,
> -	0x5b, 0x3e, 0x79, 0x26, 0x95, 0x79, 0x86, 0x04, 0xad, 0xea, 0x7f, 0x73, 0xb0, 0x71, 0x91, 0x14,
> -	0xfb, 0x1c, 0x72, 0x43, 0x36, 0x4a, 0x29, 0xfd, 0xff, 0xc4, 0x40, 0xe8, 0x24, 0x83, 0x98, 0xff,
> -	0x81, 0x41, 0xac, 0x43, 0xc9, 0xa2, 0x9e, 0x4f, 0x75, 0x91, 0x11, 0x99, 0x0b, 0xe6, 0x14, 0x08,
> -	0xa5, 0xc5, 0x94, 0xca, 0xfe, 0xa0, 0x94, 0x7a, 0x00, 0x1b, 0x91, 0x4b, 0xaa, 0x4b, 0xac, 0x51,
> -	0x98, 0x9b, 0xfb, 0x2f, 0xf3, 0xa4, 0x26, 0x87, 0x7a, 0x0a, 0x53, 0x53, 0x2a, 0x34, 0xd1, 0xc6,
> -	0x4d, 0x00, 0xdb, 0xa2, 0xf6, 0x50, 0xd5, 0xa9, 0x66, 0x4a, 0x85, 0x15, 0x51, 0xea, 0x32, 0xca,
> -	0x42, 0x94, 0x6c, 0x81, 0x6a, 0x26, 0xfe, 0x6c, 0x96, 0x6a, 0x6b, 0x2b, 0x32, 0xe5, 0x44, 0x2c,
> -	0xb2, 0x85, 0x6c, 0x3b, 0x85, 0x8a, 0x4b, 0x59, 0xde, 0x53, 0x3d, 0x18, 0x59, 0x91, 0x3b, 0x51,
> -	0x7b, 0xe9, 0xc8, 0x94, 0x40, 0x4d, 0x0c, 0x6c, 0xdd, 0x8d, 0x37, 0xf1, 0x3b, 0x10, 0x01, 0x2a,
> -	0x4f, 0x2b, 0xe0, 0xbb, 0x50, 0x39, 0x04, 0x3b, 0x64, 0x42, 0x77, 0xee, 0x40, 0x25, 0x19, 0x1e,
> -	0xbc, 0x0d, 0x39, 0xcf, 0x27, 0xae, 0xcf, 0xb3, 0x30, 0xa7, 0x88, 0x06, 0x46, 0x90, 0xa1, 0x96,
> -	0xce, 0x77, 0xb9, 0x9c, 0xc2, 0xfe, 0xee, 0x7c, 0x0a, 0xeb, 0x89, 0xee, 0x2f, 0xaa, 0x58, 0xfd,
> -	0x7d, 0x1e, 0xb6, 0x97, 0xe5, 0xdc, 0xd2, 0xf4, 0xbf, 0x04, 0x79, 0x6b, 0x3a, 0x39, 0xa3, 0xae,
> -	0x94, 0xe1, 0x16, 0x82, 0x16, 0xae, 0x43, 0xce, 0x24, 0x67, 0xd4, 0x94, 0xb2, 0xbb, 0xa9, 0xbd,
> -	0xca, 0xc1, 0x87, 0x17, 0xca, 0xea, 0x5a, 0x9b, 0xa9, 0x28, 0x42, 0x13, 0xdf, 0x85, 0x6c, 0xb0,
> -	0xc5, 0x31, 0x0b, 0x1f, 0x5c, 0xcc, 0x02, 0xcb, 0x45, 0x85, 0xeb, 0xe1, 0x37, 0xa0, 0xc8, 0x7e,
> -	0x45, 0x6c, 0xf3, 0xdc, 0xe7, 0x02, 0x03, 0x58, 0x5c, 0xf1, 0x0e, 0x14, 0x78, 0x9a, 0xe9, 0x34,
> -	0x3c, 0x1a, 0xa2, 0x36, 0x9b, 0x18, 0x9d, 0x0e, 0xc9, 0xd4, 0xf4, 0xd5, 0x27, 0xc4, 0x9c, 0x52,
> -	0x9e, 0x30, 0x45, 0xa5, 0x1c, 0x80, 0xbf, 0x66, 0x18, 0xbe, 0x0a, 0x25, 0x91, 0x95, 0x86, 0xa5,
> -	0xd3, 0x67, 0x7c, 0xf7, 0xc9, 0x29, 0x22, 0x51, 0x5b, 0x0c, 0x61, 0xdd, 0x3f, 0xf2, 0x6c, 0x2b,
> -	0x9c, 0x5a, 0xde, 0x05, 0x03, 0x78, 0xf7, 0x9f, 0xce, 0x6f, 0x7c, 0x6f, 0x2d, 0x1f, 0xde, 0x7c,
> -	0x2e, 0x56, 0xff, 0x92, 0x86, 0x2c, 0x5f, 0x6f, 0x1b, 0x50, 0x1a, 0x3c, 0xec, 0xc9, 0x6a, 0xb3,
> -	0x7b, 0x7a, 0xd4, 0x96, 0x51, 0x0a, 0x57, 0x00, 0x38, 0x70, 0xaf, 0xdd, 0xad, 0x0f, 0x50, 0x3a,
> -	0x6a, 0xb7, 0x3a, 0x83, 0xdb, 0x37, 0x51, 0x26, 0x52, 0x38, 0x15, 0x40, 0x36, 0x4e, 0xf8, 0xe4,
> -	0x00, 0xe5, 0x30, 0x82, 0xb2, 0x30, 0xd0, 0x7a, 0x20, 0x37, 0x6f, 0xdf, 0x44, 0xf9, 0x24, 0xf2,
> -	0xc9, 0x01, 0x5a, 0xc3, 0xeb, 0x50, 0xe4, 0xc8, 0x51, 0xb7, 0xdb, 0x46, 0x85, 0xc8, 0x66, 0x7f,
> -	0xa0, 0xb4, 0x3a, 0xc7, 0xa8, 0x18, 0xd9, 0x3c, 0x56, 0xba, 0xa7, 0x3d, 0x04, 0x91, 0x85, 0x13,
> -	0xb9, 0xdf, 0xaf, 0x1f, 0xcb, 0xa8, 0x14, 0x31, 0x8e, 0x1e, 0x0e, 0xe4, 0x3e, 0x2a, 0x27, 0xdc,
> -	0xfa, 0xe4, 0x00, 0xad, 0x47, 0x5d, 0xc8, 0x9d, 0xd3, 0x13, 0x54, 0xc1, 0x9b, 0xb0, 0x2e, 0xba,
> -	0x08, 0x9d, 0xd8, 0x98, 0x83, 0x6e, 0xdf, 0x44, 0x68, 0xe6, 0x88, 0xb0, 0xb2, 0x99, 0x00, 0x6e,
> -	0xdf, 0x44, 0xb8, 0xda, 0x80, 0x1c, 0xcf, 0x2e, 0x8c, 0xa1, 0xd2, 0xae, 0x1f, 0xc9, 0x6d, 0xb5,
> -	0xdb, 0x1b, 0xb4, 0xba, 0x9d, 0x7a, 0x1b, 0xa5, 0x66, 0x98, 0x22, 0xff, 0xea, 0xb4, 0xa5, 0xc8,
> -	0x4d, 0x94, 0x8e, 0x63, 0x3d, 0xb9, 0x3e, 0x90, 0x9b, 0x28, 0x53, 0xd5, 0x60, 0x7b, 0xd9, 0x3e,
> -	0xb3, 0x74, 0x65, 0xc4, 0xa6, 0x38, 0xbd, 0x62, 0x8a, 0xb9, 0xad, 0x85, 0x29, 0xfe, 0x36, 0x05,
> -	0x5b, 0x4b, 0xf6, 0xda, 0xa5, 0x9d, 0xfc, 0x02, 0x72, 0x22, 0x45, 0xc5, 0xe9, 0x73, 0x63, 0xe9,
> -	0xa6, 0xcd, 0x13, 0x76, 0xe1, 0x04, 0xe2, 0x7a, 0xf1, 0x13, 0x38, 0xb3, 0xe2, 0x04, 0x66, 0x26,
> -	0x16, 0x9c, 0xfc, 0x4d, 0x0a, 0xa4, 0x55, 0xb6, 0x5f, 0xb2, 0x51, 0xa4, 0x13, 0x1b, 0xc5, 0xe7,
> -	0xf3, 0x0e, 0x5c, 0x5b, 0x3d, 0x86, 0x05, 0x2f, 0xbe, 0x4b, 0xc1, 0xa5, 0xe5, 0x85, 0xca, 0x52,
> -	0x1f, 0xee, 0x42, 0x7e, 0x42, 0xfd, 0xb1, 0x1d, 0x1e, 0xd6, 0xef, 0x2f, 0x39, 0x02, 0x98, 0x78,
> -	0x3e, 0x56, 0x81, 0x56, 0xfc, 0x0c, 0xc9, 0xac, 0xaa, 0x36, 0x84, 0x37, 0x0b, 0x9e, 0xfe, 0x36,
> -	0x0d, 0xaf, 0x2f, 0x35, 0xbe, 0xd4, 0xd1, 0xb7, 0x00, 0x0c, 0xcb, 0x99, 0xfa, 0xe2, 0x40, 0x16,
> -	0xfb, 0x53, 0x91, 0x23, 0x7c, 0xed, 0xb3, 0xbd, 0x67, 0xea, 0x47, 0xf2, 0x0c, 0x97, 0x83, 0x80,
> -	0x38, 0xe1, 0xce, 0xcc, 0xd1, 0x2c, 0x77, 0xf4, 0xed, 0x15, 0x23, 0x5d, 0x38, 0xeb, 0x3e, 0x06,
> -	0xa4, 0x99, 0x06, 0xb5, 0x7c, 0xd5, 0xf3, 0x5d, 0x4a, 0x26, 0x86, 0x35, 0xe2, 0x1b, 0x70, 0xe1,
> -	0x30, 0x37, 0x24, 0xa6, 0x47, 0x95, 0x0d, 0x21, 0xee, 0x87, 0x52, 0xa6, 0xc1, 0x4f, 0x19, 0x37,
> -	0xa6, 0x91, 0x4f, 0x68, 0x08, 0x71, 0xa4, 0x51, 0xfd, 0x6b, 0x01, 0x4a, 0xb1, 0xb2, 0x0e, 0x5f,
> -	0x83, 0xf2, 0x23, 0xf2, 0x84, 0xa8, 0x61, 0xa9, 0x2e, 0x22, 0x51, 0x62, 0x58, 0x2f, 0x28, 0xd7,
> -	0x3f, 0x86, 0x6d, 0x4e, 0xb1, 0xa7, 0x3e, 0x75, 0x55, 0xcd, 0x24, 0x9e, 0xc7, 0x83, 0x56, 0xe0,
> -	0x54, 0xcc, 0x64, 0x5d, 0x26, 0x6a, 0x84, 0x12, 0x7c, 0x0b, 0xb6, 0xb8, 0xc6, 0x64, 0x6a, 0xfa,
> -	0x86, 0x63, 0x52, 0x95, 0x5d, 0x1e, 0x3c, 0xbe, 0x11, 0x47, 0x9e, 0x6d, 0x32, 0xc6, 0x49, 0x40,
> -	0x60, 0x1e, 0x79, 0xb8, 0x09, 0x6f, 0x71, 0xb5, 0x11, 0xb5, 0xa8, 0x4b, 0x7c, 0xaa, 0xd2, 0xaf,
> -	0xa7, 0xc4, 0xf4, 0x54, 0x62, 0xe9, 0xea, 0x98, 0x78, 0x63, 0x69, 0x9b, 0x19, 0x38, 0x4a, 0x4b,
> -	0x29, 0xe5, 0x0a, 0x23, 0x1e, 0x07, 0x3c, 0x99, 0xd3, 0xea, 0x96, 0xfe, 0x05, 0xf1, 0xc6, 0xf8,
> -	0x10, 0x2e, 0x71, 0x2b, 0x9e, 0xef, 0x1a, 0xd6, 0x48, 0xd5, 0xc6, 0x54, 0x7b, 0xac, 0x4e, 0xfd,
> -	0xe1, 0x1d, 0xe9, 0x8d, 0x78, 0xff, 0xdc, 0xc3, 0x3e, 0xe7, 0x34, 0x18, 0xe5, 0xd4, 0x1f, 0xde,
> -	0xc1, 0x7d, 0x28, 0xb3, 0xc9, 0x98, 0x18, 0xdf, 0x50, 0x75, 0x68, 0xbb, 0xfc, 0x64, 0xa9, 0x2c,
> -	0x59, 0xd9, 0xb1, 0x08, 0xd6, 0xba, 0x81, 0xc2, 0x89, 0xad, 0xd3, 0xc3, 0x5c, 0xbf, 0x27, 0xcb,
> -	0x4d, 0xa5, 0x14, 0x5a, 0xb9, 0x67, 0xbb, 0x2c, 0xa1, 0x46, 0x76, 0x14, 0xe0, 0x92, 0x48, 0xa8,
> -	0x91, 0x1d, 0x86, 0xf7, 0x16, 0x6c, 0x69, 0x9a, 0x18, 0xb3, 0xa1, 0xa9, 0x41, 0x89, 0xef, 0x49,
> -	0x28, 0x11, 0x2c, 0x4d, 0x3b, 0x16, 0x84, 0x20, 0xc7, 0x3d, 0xfc, 0x19, 0xbc, 0x3e, 0x0b, 0x56,
> -	0x5c, 0x71, 0x73, 0x61, 0x94, 0xf3, 0xaa, 0xb7, 0x60, 0xcb, 0x39, 0x5f, 0x54, 0xc4, 0x89, 0x1e,
> -	0x9d, 0xf3, 0x79, 0xb5, 0x4f, 0x61, 0xdb, 0x19, 0x3b, 0x8b, 0x7a, 0x5b, 0x71, 0x3d, 0xec, 0x8c,
> -	0x9d, 0x79, 0xc5, 0xf7, 0xf8, 0x7d, 0xcf, 0xa5, 0x1a, 0xf1, 0xa9, 0x2e, 0x5d, 0x8e, 0xd3, 0x63,
> -	0x02, 0xbc, 0x0f, 0x48, 0xd3, 0x54, 0x6a, 0x91, 0x33, 0x93, 0xaa, 0xc4, 0xa5, 0x16, 0xf1, 0xa4,
> -	0xab, 0x71, 0x72, 0x45, 0xd3, 0x64, 0x2e, 0xad, 0x73, 0x21, 0xfe, 0x00, 0x36, 0xed, 0xb3, 0x47,
> -	0x9a, 0x48, 0x49, 0xd5, 0x71, 0xe9, 0xd0, 0x78, 0x26, 0xbd, 0xcb, 0xe3, 0xbb, 0xc1, 0x04, 0x3c,
> -	0x21, 0x7b, 0x1c, 0xc6, 0x37, 0x00, 0x69, 0xde, 0x98, 0xb8, 0x0e, 0xaf, 0x09, 0x3c, 0x87, 0x68,
> -	0x54, 0x7a, 0x4f, 0x50, 0x05, 0xde, 0x09, 0x61, 0xb6, 0x24, 0xbc, 0xa7, 0xc6, 0xd0, 0x0f, 0x2d,
> -	0x5e, 0x17, 0x4b, 0x82, 0x63, 0x81, 0xb5, 0x3d, 0x40, 0x2c, 0x14, 0x89, 0x8e, 0xf7, 0x38, 0xad,
> -	0xe2, 0x8c, 0x9d, 0x78, 0xbf, 0xef, 0xc0, 0x3a, 0x63, 0xce, 0x3a, 0xbd, 0x21, 0xea, 0x19, 0x67,
> -	0x1c, 0xeb, 0xf1, 0x01, 0x6c, 0x4f, 0x2d, 0xc3, 0xf2, 0xa9, 0xeb, 0xb8, 0x94, 0x5d, 0x26, 0xc4,
> -	0x8e, 0x20, 0xfd, 0x7b, 0x6d, 0xc5, 0x75, 0xe0, 0x34, 0xce, 0x16, 0x89, 0xa8, 0x6c, 0x4d, 0x17,
> -	0xc1, 0xea, 0x21, 0x94, 0xe3, 0xf9, 0x89, 0x8b, 0x20, 0x32, 0x14, 0xa5, 0xd8, 0x59, 0xdf, 0xe8,
> -	0x36, 0xd9, 0x29, 0xfd, 0x95, 0x8c, 0xd2, 0xac, 0x5a, 0x68, 0xb7, 0x06, 0xb2, 0xaa, 0x9c, 0x76,
> -	0x06, 0xad, 0x13, 0x19, 0x65, 0x3e, 0x28, 0x16, 0xfe, 0xb3, 0x86, 0x9e, 0x3f, 0x7f, 0xfe, 0x3c,
> -	0x7d, 0x3f, 0x5b, 0x78, 0x1f, 0x5d, 0xaf, 0x7e, 0x9f, 0x86, 0x4a, 0xb2, 0x4e, 0xc7, 0x3f, 0x87,
> -	0xcb, 0xe1, 0xa5, 0xda, 0xa3, 0xbe, 0xfa, 0xd4, 0x70, 0xf9, 0xc2, 0x99, 0x10, 0x51, 0xe9, 0x46,
> -	0x53, 0xb7, 0x1d, 0xb0, 0xfa, 0xd4, 0xff, 0xd2, 0x70, 0xd9, 0xb2, 0x98, 0x10, 0x1f, 0xb7, 0xe1,
> -	0xaa, 0x65, 0xab, 0x9e, 0x4f, 0x2c, 0x9d, 0xb8, 0xba, 0x3a, 0x7b, 0xce, 0x50, 0x89, 0xa6, 0x51,
> -	0xcf, 0xb3, 0xc5, 0x81, 0x15, 0x59, 0x79, 0xd3, 0xb2, 0xfb, 0x01, 0x79, 0xb6, 0x93, 0xd7, 0x03,
> -	0xea, 0x5c, 0x9a, 0x65, 0x56, 0xa5, 0xd9, 0x1b, 0x50, 0x9c, 0x10, 0x47, 0xa5, 0x96, 0xef, 0x9e,
> -	0xf3, 0xea, 0xb2, 0xa0, 0x14, 0x26, 0xc4, 0x91, 0x59, 0xfb, 0xd5, 0xcd, 0x44, 0x32, 0x9a, 0x05,
> -	0x54, 0xbc, 0x9f, 0x2d, 0x14, 0x11, 0x54, 0xff, 0x99, 0x81, 0x72, 0xbc, 0xda, 0x64, 0xc5, 0xbb,
> -	0xc6, 0x4f, 0x96, 0x14, 0xdf, 0x7b, 0xde, 0x79, 0x61, 0x6d, 0x5a, 0x6b, 0xb0, 0x23, 0xe7, 0x30,
> -	0x2f, 0x6a, 0x40, 0x45, 0x68, 0xb2, 0xe3, 0x9e, 0xed, 0x36, 0x54, 0xdc, 0x2c, 0x0a, 0x4a, 0xd0,
> -	0xc2, 0xc7, 0x90, 0x7f, 0xe4, 0x71, 0xdb, 0x79, 0x6e, 0xfb, 0xdd, 0x17, 0xdb, 0xbe, 0xdf, 0xe7,
> -	0xc6, 0x8b, 0xf7, 0xfb, 0x6a, 0xa7, 0xab, 0x9c, 0xd4, 0xdb, 0x4a, 0xa0, 0x8e, 0xaf, 0x40, 0xd6,
> -	0x24, 0xdf, 0x9c, 0x27, 0x0f, 0x27, 0x0e, 0x5d, 0x74, 0x12, 0xae, 0x40, 0xf6, 0x29, 0x25, 0x8f,
> -	0x93, 0x47, 0x02, 0x87, 0x5e, 0xe1, 0x62, 0xd8, 0x87, 0x1c, 0x8f, 0x17, 0x06, 0x08, 0x22, 0x86,
> -	0x5e, 0xc3, 0x05, 0xc8, 0x36, 0xba, 0x0a, 0x5b, 0x10, 0x08, 0xca, 0x02, 0x55, 0x7b, 0x2d, 0xb9,
> -	0x21, 0xa3, 0x74, 0xf5, 0x16, 0xe4, 0x45, 0x10, 0xd8, 0x62, 0x89, 0xc2, 0x80, 0x5e, 0x0b, 0x9a,
> -	0x81, 0x8d, 0x54, 0x28, 0x3d, 0x3d, 0x39, 0x92, 0x15, 0x94, 0x4e, 0x4e, 0x75, 0x16, 0xe5, 0xaa,
> -	0x1e, 0x94, 0xe3, 0xe5, 0xe6, 0x8f, 0x92, 0x65, 0xd5, 0xbf, 0xa5, 0xa0, 0x14, 0x2b, 0x1f, 0x59,
> -	0xe1, 0x42, 0x4c, 0xd3, 0x7e, 0xaa, 0x12, 0xd3, 0x20, 0x5e, 0x90, 0x1a, 0xc0, 0xa1, 0x3a, 0x43,
> -	0x2e, 0x3a, 0x75, 0x3f, 0xd2, 0x12, 0xc9, 0xa1, 0x7c, 0xf5, 0x4f, 0x29, 0x40, 0xf3, 0x05, 0xe8,
> -	0x9c, 0x9b, 0xa9, 0x9f, 0xd2, 0xcd, 0xea, 0x1f, 0x53, 0x50, 0x49, 0x56, 0x9d, 0x73, 0xee, 0x5d,
> -	0xfb, 0x49, 0xdd, 0xfb, 0x47, 0x1a, 0xd6, 0x13, 0xb5, 0xe6, 0x45, 0xbd, 0xfb, 0x1a, 0x36, 0x0d,
> -	0x9d, 0x4e, 0x1c, 0xdb, 0xa7, 0x96, 0x76, 0xae, 0x9a, 0xf4, 0x09, 0x35, 0xa5, 0x2a, 0xdf, 0x34,
> -	0xf6, 0x5f, 0x5c, 0xcd, 0xd6, 0x5a, 0x33, 0xbd, 0x36, 0x53, 0x3b, 0xdc, 0x6a, 0x35, 0xe5, 0x93,
> -	0x5e, 0x77, 0x20, 0x77, 0x1a, 0x0f, 0xd5, 0xd3, 0xce, 0x2f, 0x3b, 0xdd, 0x2f, 0x3b, 0x0a, 0x32,
> -	0xe6, 0x68, 0xaf, 0x70, 0xd9, 0xf7, 0x00, 0xcd, 0x3b, 0x85, 0x2f, 0xc3, 0x32, 0xb7, 0xd0, 0x6b,
> -	0x78, 0x0b, 0x36, 0x3a, 0x5d, 0xb5, 0xdf, 0x6a, 0xca, 0xaa, 0x7c, 0xef, 0x9e, 0xdc, 0x18, 0xf4,
> -	0xc5, 0xf5, 0x3e, 0x62, 0x0f, 0x12, 0x0b, 0xbc, 0xfa, 0x87, 0x0c, 0x6c, 0x2d, 0xf1, 0x04, 0xd7,
> -	0x83, 0x9b, 0x85, 0xb8, 0xec, 0x7c, 0x74, 0x11, 0xef, 0x6b, 0xac, 0x20, 0xe8, 0x11, 0xd7, 0x0f,
> -	0x2e, 0x22, 0x37, 0x80, 0x45, 0xc9, 0xf2, 0x8d, 0xa1, 0x41, 0xdd, 0xe0, 0x35, 0x44, 0x5c, 0x37,
> -	0x36, 0x66, 0xb8, 0x78, 0x10, 0xf9, 0x19, 0x60, 0xc7, 0xf6, 0x0c, 0xdf, 0x78, 0x42, 0x55, 0xc3,
> -	0x0a, 0x9f, 0x4e, 0xd8, 0xf5, 0x23, 0xab, 0xa0, 0x50, 0xd2, 0xb2, 0xfc, 0x88, 0x6d, 0xd1, 0x11,
> -	0x99, 0x63, 0xb3, 0xcd, 0x3c, 0xa3, 0xa0, 0x50, 0x12, 0xb1, 0xaf, 0x41, 0x59, 0xb7, 0xa7, 0xac,
> -	0x26, 0x13, 0x3c, 0x76, 0x76, 0xa4, 0x94, 0x92, 0xc0, 0x22, 0x4a, 0x50, 0x6d, 0xcf, 0xde, 0x6c,
> -	0xca, 0x4a, 0x49, 0x60, 0x82, 0x72, 0x1d, 0x36, 0xc8, 0x68, 0xe4, 0x32, 0xe3, 0xa1, 0x21, 0x71,
> -	0x7f, 0xa8, 0x44, 0x30, 0x27, 0xee, 0xdc, 0x87, 0x42, 0x18, 0x07, 0x76, 0x54, 0xb3, 0x48, 0xa8,
> -	0x8e, 0x78, 0x39, 0x4b, 0xef, 0x15, 0x95, 0x82, 0x15, 0x0a, 0xaf, 0x41, 0xd9, 0xf0, 0xd4, 0xd9,
> -	0x13, 0x6e, 0x7a, 0x37, 0xbd, 0x57, 0x50, 0x4a, 0x86, 0x17, 0xbd, 0xd9, 0x55, 0xbf, 0x4b, 0x43,
> -	0x25, 0xf9, 0x04, 0x8d, 0x9b, 0x50, 0x30, 0x6d, 0x8d, 0xf0, 0xd4, 0x12, 0xdf, 0x3f, 0xf6, 0x5e,
> -	0xf2, 0x6a, 0x5d, 0x6b, 0x07, 0x7c, 0x25, 0xd2, 0xdc, 0xf9, 0x7b, 0x0a, 0x0a, 0x21, 0x8c, 0x2f,
> -	0x41, 0xd6, 0x21, 0xfe, 0x98, 0x9b, 0xcb, 0x1d, 0xa5, 0x51, 0x4a, 0xe1, 0x6d, 0x86, 0x7b, 0x0e,
> -	0xb1, 0x78, 0x0a, 0x04, 0x38, 0x6b, 0xb3, 0x79, 0x35, 0x29, 0xd1, 0xf9, 0xe5, 0xc4, 0x9e, 0x4c,
> -	0xa8, 0xe5, 0x7b, 0xe1, 0xbc, 0x06, 0x78, 0x23, 0x80, 0xf1, 0x87, 0xb0, 0xe9, 0xbb, 0xc4, 0x30,
> -	0x13, 0xdc, 0x2c, 0xe7, 0xa2, 0x50, 0x10, 0x91, 0x0f, 0xe1, 0x4a, 0x68, 0x57, 0xa7, 0x3e, 0xd1,
> -	0xc6, 0x54, 0x9f, 0x29, 0xe5, 0xf9, 0xfb, 0xe6, 0xe5, 0x80, 0xd0, 0x0c, 0xe4, 0xa1, 0x6e, 0xf5,
> -	0xfb, 0x14, 0x6c, 0x86, 0xd7, 0x29, 0x3d, 0x0a, 0xd6, 0x09, 0x00, 0xb1, 0x2c, 0xdb, 0x8f, 0x87,
> -	0x6b, 0x31, 0x95, 0x17, 0xf4, 0x6a, 0xf5, 0x48, 0x49, 0x89, 0x19, 0xd8, 0x99, 0x00, 0xcc, 0x24,
> -	0x2b, 0xc3, 0x76, 0x15, 0x4a, 0xc1, 0xf7, 0x05, 0xfe, 0x91, 0x4a, 0x5c, 0xc0, 0x41, 0x40, 0xec,
> -	0xde, 0x85, 0xb7, 0x21, 0x77, 0x46, 0x47, 0x86, 0x15, 0xbc, 0x7a, 0x8a, 0x46, 0xf8, 0x96, 0x9a,
> -	0x8d, 0xde, 0x52, 0x8f, 0x7e, 0x97, 0x82, 0x2d, 0xcd, 0x9e, 0xcc, 0xfb, 0x7b, 0x84, 0xe6, 0x5e,
> -	0x01, 0xbc, 0x2f, 0x52, 0x5f, 0xdd, 0x1d, 0x19, 0xfe, 0x78, 0x7a, 0x56, 0xd3, 0xec, 0xc9, 0xfe,
> -	0xc8, 0x36, 0x89, 0x35, 0x9a, 0x7d, 0x65, 0xe3, 0x7f, 0xb4, 0x8f, 0x46, 0xd4, 0xfa, 0x68, 0x64,
> -	0xc7, 0xbe, 0xb9, 0x7d, 0x3e, 0xfb, 0xfb, 0x6d, 0x3a, 0x73, 0xdc, 0x3b, 0xfa, 0x73, 0x7a, 0xe7,
> -	0x58, 0xf4, 0xd5, 0x0b, 0x63, 0xa3, 0xd0, 0xa1, 0x49, 0x35, 0x36, 0xde, 0xff, 0x05, 0x00, 0x00,
> -	0xff, 0xff, 0xa2, 0xc3, 0x4e, 0x18, 0xbe, 0x1b, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto
> deleted file mode 100644
> index 70b82a4d..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto
> +++ /dev/null
> @@ -1,837 +0,0 @@
> -// Protocol Buffers - Google's data interchange format
> -// Copyright 2008 Google Inc.  All rights reserved.
> -// https://developers.google.com/protocol-buffers/
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// Author: kenton at google.com (Kenton Varda)
> -//  Based on original Protocol Buffers design by
> -//  Sanjay Ghemawat, Jeff Dean, and others.
> -//
> -// The messages in this file describe the definitions found in .proto files.
> -// A valid .proto file can be translated directly to a FileDescriptorProto
> -// without any other information (e.g. without reading its imports).
> -
> -
> -syntax = "proto2";
> -
> -package google.protobuf;
> -option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor";
> -option java_package = "com.google.protobuf";
> -option java_outer_classname = "DescriptorProtos";
> -option csharp_namespace = "Google.Protobuf.Reflection";
> -option objc_class_prefix = "GPB";
> -
> -// descriptor.proto must be optimized for speed because reflection-based
> -// algorithms don't work during bootstrapping.
> -option optimize_for = SPEED;
> -
> -// The protocol compiler can output a FileDescriptorSet containing the .proto
> -// files it parses.
> -message FileDescriptorSet {
> -  repeated FileDescriptorProto file = 1;
> -}
> -
> -// Describes a complete .proto file.
> -message FileDescriptorProto {
> -  optional string name = 1;       // file name, relative to root of source tree
> -  optional string package = 2;    // e.g. "foo", "foo.bar", etc.
> -
> -  // Names of files imported by this file.
> -  repeated string dependency = 3;
> -  // Indexes of the public imported files in the dependency list above.
> -  repeated int32 public_dependency = 10;
> -  // Indexes of the weak imported files in the dependency list.
> -  // For Google-internal migration only. Do not use.
> -  repeated int32 weak_dependency = 11;
> -
> -  // All top-level definitions in this file.
> -  repeated DescriptorProto message_type = 4;
> -  repeated EnumDescriptorProto enum_type = 5;
> -  repeated ServiceDescriptorProto service = 6;
> -  repeated FieldDescriptorProto extension = 7;
> -
> -  optional FileOptions options = 8;
> -
> -  // This field contains optional information about the original source code.
> -  // You may safely remove this entire field without harming runtime
> -  // functionality of the descriptors -- the information is needed only by
> -  // development tools.
> -  optional SourceCodeInfo source_code_info = 9;
> -
> -  // The syntax of the proto file.
> -  // The supported values are "proto2" and "proto3".
> -  optional string syntax = 12;
> -}
> -
> -// Describes a message type.
> -message DescriptorProto {
> -  optional string name = 1;
> -
> -  repeated FieldDescriptorProto field = 2;
> -  repeated FieldDescriptorProto extension = 6;
> -
> -  repeated DescriptorProto nested_type = 3;
> -  repeated EnumDescriptorProto enum_type = 4;
> -
> -  message ExtensionRange {
> -    optional int32 start = 1;
> -    optional int32 end = 2;
> -  }
> -  repeated ExtensionRange extension_range = 5;
> -
> -  repeated OneofDescriptorProto oneof_decl = 8;
> -
> -  optional MessageOptions options = 7;
> -
> -  // Range of reserved tag numbers. Reserved tag numbers may not be used by
> -  // fields or extension ranges in the same message. Reserved ranges may
> -  // not overlap.
> -  message ReservedRange {
> -    optional int32 start = 1; // Inclusive.
> -    optional int32 end = 2;   // Exclusive.
> -  }
> -  repeated ReservedRange reserved_range = 9;
> -  // Reserved field names, which may not be used by fields in the same message.
> -  // A given name may only be reserved once.
> -  repeated string reserved_name = 10;
> -}
> -
> -// Describes a field within a message.
> -message FieldDescriptorProto {
> -  enum Type {
> -    // 0 is reserved for errors.
> -    // Order is weird for historical reasons.
> -    TYPE_DOUBLE         = 1;
> -    TYPE_FLOAT          = 2;
> -    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
> -    // negative values are likely.
> -    TYPE_INT64          = 3;
> -    TYPE_UINT64         = 4;
> -    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
> -    // negative values are likely.
> -    TYPE_INT32          = 5;
> -    TYPE_FIXED64        = 6;
> -    TYPE_FIXED32        = 7;
> -    TYPE_BOOL           = 8;
> -    TYPE_STRING         = 9;
> -    // Tag-delimited aggregate.
> -    // Group type is deprecated and not supported in proto3. However, Proto3
> -    // implementations should still be able to parse the group wire format and
> -    // treat group fields as unknown fields.
> -    TYPE_GROUP          = 10;
> -    TYPE_MESSAGE        = 11;  // Length-delimited aggregate.
> -
> -    // New in version 2.
> -    TYPE_BYTES          = 12;
> -    TYPE_UINT32         = 13;
> -    TYPE_ENUM           = 14;
> -    TYPE_SFIXED32       = 15;
> -    TYPE_SFIXED64       = 16;
> -    TYPE_SINT32         = 17;  // Uses ZigZag encoding.
> -    TYPE_SINT64         = 18;  // Uses ZigZag encoding.
> -  };
> -
> -  enum Label {
> -    // 0 is reserved for errors
> -    LABEL_OPTIONAL      = 1;
> -    LABEL_REQUIRED      = 2;
> -    LABEL_REPEATED      = 3;
> -  };
> -
> -  optional string name = 1;
> -  optional int32 number = 3;
> -  optional Label label = 4;
> -
> -  // If type_name is set, this need not be set.  If both this and type_name
> -  // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
> -  optional Type type = 5;
> -
> -  // For message and enum types, this is the name of the type.  If the name
> -  // starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
> -  // rules are used to find the type (i.e. first the nested types within this
> -  // message are searched, then within the parent, on up to the root
> -  // namespace).
> -  optional string type_name = 6;
> -
> -  // For extensions, this is the name of the type being extended.  It is
> -  // resolved in the same manner as type_name.
> -  optional string extendee = 2;
> -
> -  // For numeric types, contains the original text representation of the value.
> -  // For booleans, "true" or "false".
> -  // For strings, contains the default text contents (not escaped in any way).
> -  // For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
> -  // TODO(kenton):  Base-64 encode?
> -  optional string default_value = 7;
> -
> -  // If set, gives the index of a oneof in the containing type's oneof_decl
> -  // list.  This field is a member of that oneof.
> -  optional int32 oneof_index = 9;
> -
> -  // JSON name of this field. The value is set by protocol compiler. If the
> -  // user has set a "json_name" option on this field, that option's value
> -  // will be used. Otherwise, it's deduced from the field's name by converting
> -  // it to camelCase.
> -  optional string json_name = 10;
> -
> -  optional FieldOptions options = 8;
> -}
> -
> -// Describes a oneof.
> -message OneofDescriptorProto {
> -  optional string name = 1;
> -  optional OneofOptions options = 2;
> -}
> -
> -// Describes an enum type.
> -message EnumDescriptorProto {
> -  optional string name = 1;
> -
> -  repeated EnumValueDescriptorProto value = 2;
> -
> -  optional EnumOptions options = 3;
> -}
> -
> -// Describes a value within an enum.
> -message EnumValueDescriptorProto {
> -  optional string name = 1;
> -  optional int32 number = 2;
> -
> -  optional EnumValueOptions options = 3;
> -}
> -
> -// Describes a service.
> -message ServiceDescriptorProto {
> -  optional string name = 1;
> -  repeated MethodDescriptorProto method = 2;
> -
> -  optional ServiceOptions options = 3;
> -}
> -
> -// Describes a method of a service.
> -message MethodDescriptorProto {
> -  optional string name = 1;
> -
> -  // Input and output type names.  These are resolved in the same way as
> -  // FieldDescriptorProto.type_name, but must refer to a message type.
> -  optional string input_type = 2;
> -  optional string output_type = 3;
> -
> -  optional MethodOptions options = 4;
> -
> -  // Identifies if client streams multiple client messages
> -  optional bool client_streaming = 5 [default=false];
> -  // Identifies if server streams multiple server messages
> -  optional bool server_streaming = 6 [default=false];
> -}
> -
> -
> -// ===================================================================
> -// Options
> -
> -// Each of the definitions above may have "options" attached.  These are
> -// just annotations which may cause code to be generated slightly differently
> -// or may contain hints for code that manipulates protocol messages.
> -//
> -// Clients may define custom options as extensions of the *Options messages.
> -// These extensions may not yet be known at parsing time, so the parser cannot
> -// store the values in them.  Instead it stores them in a field in the *Options
> -// message called uninterpreted_option. This field must have the same name
> -// across all *Options messages. We then use this field to populate the
> -// extensions when we build a descriptor, at which point all protos have been
> -// parsed and so all extensions are known.
> -//
> -// Extension numbers for custom options may be chosen as follows:
> -// * For options which will only be used within a single application or
> -//   organization, or for experimental options, use field numbers 50000
> -//   through 99999.  It is up to you to ensure that you do not use the
> -//   same number for multiple options.
> -// * For options which will be published and used publicly by multiple
> -//   independent entities, e-mail protobuf-global-extension-registry at google.com
> -//   to reserve extension numbers. Simply provide your project name (e.g.
> -//   Objective-C plugin) and your project website (if available) -- there's no
> -//   need to explain how you intend to use them. Usually you only need one
> -//   extension number. You can declare multiple options with only one extension
> -//   number by putting them in a sub-message. See the Custom Options section of
> -//   the docs for examples:
> -//   https://developers.google.com/protocol-buffers/docs/proto#options
> -//   If this turns out to be popular, a web service will be set up
> -//   to automatically assign option numbers.
> -
> -
> -message FileOptions {
> -
> -  // Sets the Java package where classes generated from this .proto will be
> -  // placed.  By default, the proto package is used, but this is often
> -  // inappropriate because proto packages do not normally start with backwards
> -  // domain names.
> -  optional string java_package = 1;
> -
> -
> -  // If set, all the classes from the .proto file are wrapped in a single
> -  // outer class with the given name.  This applies to both Proto1
> -  // (equivalent to the old "--one_java_file" option) and Proto2 (where
> -  // a .proto always translates to a single class, but you may want to
> -  // explicitly choose the class name).
> -  optional string java_outer_classname = 8;
> -
> -  // If set true, then the Java code generator will generate a separate .java
> -  // file for each top-level message, enum, and service defined in the .proto
> -  // file.  Thus, these types will *not* be nested inside the outer class
> -  // named by java_outer_classname.  However, the outer class will still be
> -  // generated to contain the file's getDescriptor() method as well as any
> -  // top-level extensions defined in the file.
> -  optional bool java_multiple_files = 10 [default=false];
> -
> -  // This option does nothing.
> -  optional bool java_generate_equals_and_hash = 20 [deprecated=true];
> -
> -  // If set true, then the Java2 code generator will generate code that
> -  // throws an exception whenever an attempt is made to assign a non-UTF-8
> -  // byte sequence to a string field.
> -  // Message reflection will do the same.
> -  // However, an extension field still accepts non-UTF-8 byte sequences.
> -  // This option has no effect on when used with the lite runtime.
> -  optional bool java_string_check_utf8 = 27 [default=false];
> -
> -
> -  // Generated classes can be optimized for speed or code size.
> -  enum OptimizeMode {
> -    SPEED = 1;        // Generate complete code for parsing, serialization,
> -                      // etc.
> -    CODE_SIZE = 2;    // Use ReflectionOps to implement these methods.
> -    LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime.
> -  }
> -  optional OptimizeMode optimize_for = 9 [default=SPEED];
> -
> -  // Sets the Go package where structs generated from this .proto will be
> -  // placed. If omitted, the Go package will be derived from the following:
> -  //   - The basename of the package import path, if provided.
> -  //   - Otherwise, the package statement in the .proto file, if present.
> -  //   - Otherwise, the basename of the .proto file, without extension.
> -  optional string go_package = 11;
> -
> -
> -
> -  // Should generic services be generated in each language?  "Generic" services
> -  // are not specific to any particular RPC system.  They are generated by the
> -  // main code generators in each language (without additional plugins).
> -  // Generic services were the only kind of service generation supported by
> -  // early versions of google.protobuf.
> -  //
> -  // Generic services are now considered deprecated in favor of using plugins
> -  // that generate code specific to your particular RPC system.  Therefore,
> -  // these default to false.  Old code which depends on generic services should
> -  // explicitly set them to true.
> -  optional bool cc_generic_services = 16 [default=false];
> -  optional bool java_generic_services = 17 [default=false];
> -  optional bool py_generic_services = 18 [default=false];
> -  optional bool php_generic_services = 19 [default=false];
> -
> -  // Is this file deprecated?
> -  // Depending on the target platform, this can emit Deprecated annotations
> -  // for everything in the file, or it will be completely ignored; in the very
> -  // least, this is a formalization for deprecating files.
> -  optional bool deprecated = 23 [default=false];
> -
> -  // Enables the use of arenas for the proto messages in this file. This applies
> -  // only to generated classes for C++.
> -  optional bool cc_enable_arenas = 31 [default=false];
> -
> -
> -  // Sets the objective c class prefix which is prepended to all objective c
> -  // generated classes from this .proto. There is no default.
> -  optional string objc_class_prefix = 36;
> -
> -  // Namespace for generated classes; defaults to the package.
> -  optional string csharp_namespace = 37;
> -
> -  // By default Swift generators will take the proto package and CamelCase it
> -  // replacing '.' with underscore and use that to prefix the types/symbols
> -  // defined. When this options is provided, they will use this value instead
> -  // to prefix the types/symbols defined.
> -  optional string swift_prefix = 39;
> -
> -  // Sets the php class prefix which is prepended to all php generated classes
> -  // from this .proto. Default is empty.
> -  optional string php_class_prefix = 40;
> -
> -  // Use this option to change the namespace of php generated classes. Default
> -  // is empty. When this option is empty, the package name will be used for
> -  // determining the namespace.
> -  optional string php_namespace = 41;
> -
> -  // The parser stores options it doesn't recognize here. See above.
> -  repeated UninterpretedOption uninterpreted_option = 999;
> -
> -  // Clients can define custom options in extensions of this message. See above.
> -  extensions 1000 to max;
> -
> -  reserved 38;
> -}
> -
> -message MessageOptions {
> -  // Set true to use the old proto1 MessageSet wire format for extensions.
> -  // This is provided for backwards-compatibility with the MessageSet wire
> -  // format.  You should not use this for any other reason:  It's less
> -  // efficient, has fewer features, and is more complicated.
> -  //
> -  // The message must be defined exactly as follows:
> -  //   message Foo {
> -  //     option message_set_wire_format = true;
> -  //     extensions 4 to max;
> -  //   }
> -  // Note that the message cannot have any defined fields; MessageSets only
> -  // have extensions.
> -  //
> -  // All extensions of your type must be singular messages; e.g. they cannot
> -  // be int32s, enums, or repeated messages.
> -  //
> -  // Because this is an option, the above two restrictions are not enforced by
> -  // the protocol compiler.
> -  optional bool message_set_wire_format = 1 [default=false];
> -
> -  // Disables the generation of the standard "descriptor()" accessor, which can
> -  // conflict with a field of the same name.  This is meant to make migration
> -  // from proto1 easier; new code should avoid fields named "descriptor".
> -  optional bool no_standard_descriptor_accessor = 2 [default=false];
> -
> -  // Is this message deprecated?
> -  // Depending on the target platform, this can emit Deprecated annotations
> -  // for the message, or it will be completely ignored; in the very least,
> -  // this is a formalization for deprecating messages.
> -  optional bool deprecated = 3 [default=false];
> -
> -  // Whether the message is an automatically generated map entry type for the
> -  // maps field.
> -  //
> -  // For maps fields:
> -  //     map<KeyType, ValueType> map_field = 1;
> -  // The parsed descriptor looks like:
> -  //     message MapFieldEntry {
> -  //         option map_entry = true;
> -  //         optional KeyType key = 1;
> -  //         optional ValueType value = 2;
> -  //     }
> -  //     repeated MapFieldEntry map_field = 1;
> -  //
> -  // Implementations may choose not to generate the map_entry=true message, but
> -  // use a native map in the target language to hold the keys and values.
> -  // The reflection APIs in such implementions still need to work as
> -  // if the field is a repeated message field.
> -  //
> -  // NOTE: Do not set the option in .proto files. Always use the maps syntax
> -  // instead. The option should only be implicitly set by the proto compiler
> -  // parser.
> -  optional bool map_entry = 7;
> -
> -  reserved 8;  // javalite_serializable
> -  reserved 9;  // javanano_as_lite
> -
> -  // The parser stores options it doesn't recognize here. See above.
> -  repeated UninterpretedOption uninterpreted_option = 999;
> -
> -  // Clients can define custom options in extensions of this message. See above.
> -  extensions 1000 to max;
> -}
> -
> -message FieldOptions {
> -  // The ctype option instructs the C++ code generator to use a different
> -  // representation of the field than it normally would.  See the specific
> -  // options below.  This option is not yet implemented in the open source
> -  // release -- sorry, we'll try to include it in a future version!
> -  optional CType ctype = 1 [default = STRING];
> -  enum CType {
> -    // Default mode.
> -    STRING = 0;
> -
> -    CORD = 1;
> -
> -    STRING_PIECE = 2;
> -  }
> -  // The packed option can be enabled for repeated primitive fields to enable
> -  // a more efficient representation on the wire. Rather than repeatedly
> -  // writing the tag and type for each element, the entire array is encoded as
> -  // a single length-delimited blob. In proto3, only explicit setting it to
> -  // false will avoid using packed encoding.
> -  optional bool packed = 2;
> -
> -  // The jstype option determines the JavaScript type used for values of the
> -  // field.  The option is permitted only for 64 bit integral and fixed types
> -  // (int64, uint64, sint64, fixed64, sfixed64).  By default these types are
> -  // represented as JavaScript strings.  This avoids loss of precision that can
> -  // happen when a large value is converted to a floating point JavaScript
> -  // numbers.  Specifying JS_NUMBER for the jstype causes the generated
> -  // JavaScript code to use the JavaScript "number" type instead of strings.
> -  // This option is an enum to permit additional types to be added,
> -  // e.g. goog.math.Integer.
> -  optional JSType jstype = 6 [default = JS_NORMAL];
> -  enum JSType {
> -    // Use the default type.
> -    JS_NORMAL = 0;
> -
> -    // Use JavaScript strings.
> -    JS_STRING = 1;
> -
> -    // Use JavaScript numbers.
> -    JS_NUMBER = 2;
> -  }
> -
> -  // Should this field be parsed lazily?  Lazy applies only to message-type
> -  // fields.  It means that when the outer message is initially parsed, the
> -  // inner message's contents will not be parsed but instead stored in encoded
> -  // form.  The inner message will actually be parsed when it is first accessed.
> -  //
> -  // This is only a hint.  Implementations are free to choose whether to use
> -  // eager or lazy parsing regardless of the value of this option.  However,
> -  // setting this option true suggests that the protocol author believes that
> -  // using lazy parsing on this field is worth the additional bookkeeping
> -  // overhead typically needed to implement it.
> -  //
> -  // This option does not affect the public interface of any generated code;
> -  // all method signatures remain the same.  Furthermore, thread-safety of the
> -  // interface is not affected by this option; const methods remain safe to
> -  // call from multiple threads concurrently, while non-const methods continue
> -  // to require exclusive access.
> -  //
> -  //
> -  // Note that implementations may choose not to check required fields within
> -  // a lazy sub-message.  That is, calling IsInitialized() on the outer message
> -  // may return true even if the inner message has missing required fields.
> -  // This is necessary because otherwise the inner message would have to be
> -  // parsed in order to perform the check, defeating the purpose of lazy
> -  // parsing.  An implementation which chooses not to check required fields
> -  // must be consistent about it.  That is, for any particular sub-message, the
> -  // implementation must either *always* check its required fields, or *never*
> -  // check its required fields, regardless of whether or not the message has
> -  // been parsed.
> -  optional bool lazy = 5 [default=false];
> -
> -  // Is this field deprecated?
> -  // Depending on the target platform, this can emit Deprecated annotations
> -  // for accessors, or it will be completely ignored; in the very least, this
> -  // is a formalization for deprecating fields.
> -  optional bool deprecated = 3 [default=false];
> -
> -  // For Google-internal migration only. Do not use.
> -  optional bool weak = 10 [default=false];
> -
> -
> -  // The parser stores options it doesn't recognize here. See above.
> -  repeated UninterpretedOption uninterpreted_option = 999;
> -
> -  // Clients can define custom options in extensions of this message. See above.
> -  extensions 1000 to max;
> -
> -  reserved 4;  // removed jtype
> -}
> -
> -message OneofOptions {
> -  // The parser stores options it doesn't recognize here. See above.
> -  repeated UninterpretedOption uninterpreted_option = 999;
> -
> -  // Clients can define custom options in extensions of this message. See above.
> -  extensions 1000 to max;
> -}
> -
> -message EnumOptions {
> -
> -  // Set this option to true to allow mapping different tag names to the same
> -  // value.
> -  optional bool allow_alias = 2;
> -
> -  // Is this enum deprecated?
> -  // Depending on the target platform, this can emit Deprecated annotations
> -  // for the enum, or it will be completely ignored; in the very least, this
> -  // is a formalization for deprecating enums.
> -  optional bool deprecated = 3 [default=false];
> -
> -  reserved 5;  // javanano_as_lite
> -
> -  // The parser stores options it doesn't recognize here. See above.
> -  repeated UninterpretedOption uninterpreted_option = 999;
> -
> -  // Clients can define custom options in extensions of this message. See above.
> -  extensions 1000 to max;
> -}
> -
> -message EnumValueOptions {
> -  // Is this enum value deprecated?
> -  // Depending on the target platform, this can emit Deprecated annotations
> -  // for the enum value, or it will be completely ignored; in the very least,
> -  // this is a formalization for deprecating enum values.
> -  optional bool deprecated = 1 [default=false];
> -
> -  // The parser stores options it doesn't recognize here. See above.
> -  repeated UninterpretedOption uninterpreted_option = 999;
> -
> -  // Clients can define custom options in extensions of this message. See above.
> -  extensions 1000 to max;
> -}
> -
> -message ServiceOptions {
> -
> -  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
> -  //   framework.  We apologize for hoarding these numbers to ourselves, but
> -  //   we were already using them long before we decided to release Protocol
> -  //   Buffers.
> -
> -  // Is this service deprecated?
> -  // Depending on the target platform, this can emit Deprecated annotations
> -  // for the service, or it will be completely ignored; in the very least,
> -  // this is a formalization for deprecating services.
> -  optional bool deprecated = 33 [default=false];
> -
> -  // The parser stores options it doesn't recognize here. See above.
> -  repeated UninterpretedOption uninterpreted_option = 999;
> -
> -  // Clients can define custom options in extensions of this message. See above.
> -  extensions 1000 to max;
> -}
> -
> -message MethodOptions {
> -
> -  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
> -  //   framework.  We apologize for hoarding these numbers to ourselves, but
> -  //   we were already using them long before we decided to release Protocol
> -  //   Buffers.
> -
> -  // Is this method deprecated?
> -  // Depending on the target platform, this can emit Deprecated annotations
> -  // for the method, or it will be completely ignored; in the very least,
> -  // this is a formalization for deprecating methods.
> -  optional bool deprecated = 33 [default=false];
> -
> -  // Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
> -  // or neither? HTTP based RPC implementation may choose GET verb for safe
> -  // methods, and PUT verb for idempotent methods instead of the default POST.
> -  enum IdempotencyLevel {
> -    IDEMPOTENCY_UNKNOWN = 0;
> -    NO_SIDE_EFFECTS     = 1; // implies idempotent
> -    IDEMPOTENT          = 2; // idempotent, but may have side effects
> -  }
> -  optional IdempotencyLevel idempotency_level =
> -      34 [default=IDEMPOTENCY_UNKNOWN];
> -
> -  // The parser stores options it doesn't recognize here. See above.
> -  repeated UninterpretedOption uninterpreted_option = 999;
> -
> -  // Clients can define custom options in extensions of this message. See above.
> -  extensions 1000 to max;
> -}
> -
> -
> -// A message representing a option the parser does not recognize. This only
> -// appears in options protos created by the compiler::Parser class.
> -// DescriptorPool resolves these when building Descriptor objects. Therefore,
> -// options protos in descriptor objects (e.g. returned by Descriptor::options(),
> -// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
> -// in them.
> -message UninterpretedOption {
> -  // The name of the uninterpreted option.  Each string represents a segment in
> -  // a dot-separated name.  is_extension is true iff a segment represents an
> -  // extension (denoted with parentheses in options specs in .proto files).
> -  // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
> -  // "foo.(bar.baz).qux".
> -  message NamePart {
> -    required string name_part = 1;
> -    required bool is_extension = 2;
> -  }
> -  repeated NamePart name = 2;
> -
> -  // The value of the uninterpreted option, in whatever type the tokenizer
> -  // identified it as during parsing. Exactly one of these should be set.
> -  optional string identifier_value = 3;
> -  optional uint64 positive_int_value = 4;
> -  optional int64 negative_int_value = 5;
> -  optional double double_value = 6;
> -  optional bytes string_value = 7;
> -  optional string aggregate_value = 8;
> -}
> -
> -// ===================================================================
> -// Optional source code info
> -
> -// Encapsulates information about the original source file from which a
> -// FileDescriptorProto was generated.
> -message SourceCodeInfo {
> -  // A Location identifies a piece of source code in a .proto file which
> -  // corresponds to a particular definition.  This information is intended
> -  // to be useful to IDEs, code indexers, documentation generators, and similar
> -  // tools.
> -  //
> -  // For example, say we have a file like:
> -  //   message Foo {
> -  //     optional string foo = 1;
> -  //   }
> -  // Let's look at just the field definition:
> -  //   optional string foo = 1;
> -  //   ^       ^^     ^^  ^  ^^^
> -  //   a       bc     de  f  ghi
> -  // We have the following locations:
> -  //   span   path               represents
> -  //   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
> -  //   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
> -  //   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
> -  //   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
> -  //   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
> -  //
> -  // Notes:
> -  // - A location may refer to a repeated field itself (i.e. not to any
> -  //   particular index within it).  This is used whenever a set of elements are
> -  //   logically enclosed in a single code segment.  For example, an entire
> -  //   extend block (possibly containing multiple extension definitions) will
> -  //   have an outer location whose path refers to the "extensions" repeated
> -  //   field without an index.
> -  // - Multiple locations may have the same path.  This happens when a single
> -  //   logical declaration is spread out across multiple places.  The most
> -  //   obvious example is the "extend" block again -- there may be multiple
> -  //   extend blocks in the same scope, each of which will have the same path.
> -  // - A location's span is not always a subset of its parent's span.  For
> -  //   example, the "extendee" of an extension declaration appears at the
> -  //   beginning of the "extend" block and is shared by all extensions within
> -  //   the block.
> -  // - Just because a location's span is a subset of some other location's span
> -  //   does not mean that it is a descendent.  For example, a "group" defines
> -  //   both a type and a field in a single declaration.  Thus, the locations
> -  //   corresponding to the type and field and their components will overlap.
> -  // - Code which tries to interpret locations should probably be designed to
> -  //   ignore those that it doesn't understand, as more types of locations could
> -  //   be recorded in the future.
> -  repeated Location location = 1;
> -  message Location {
> -    // Identifies which part of the FileDescriptorProto was defined at this
> -    // location.
> -    //
> -    // Each element is a field number or an index.  They form a path from
> -    // the root FileDescriptorProto to the place where the definition.  For
> -    // example, this path:
> -    //   [ 4, 3, 2, 7, 1 ]
> -    // refers to:
> -    //   file.message_type(3)  // 4, 3
> -    //       .field(7)         // 2, 7
> -    //       .name()           // 1
> -    // This is because FileDescriptorProto.message_type has field number 4:
> -    //   repeated DescriptorProto message_type = 4;
> -    // and DescriptorProto.field has field number 2:
> -    //   repeated FieldDescriptorProto field = 2;
> -    // and FieldDescriptorProto.name has field number 1:
> -    //   optional string name = 1;
> -    //
> -    // Thus, the above path gives the location of a field name.  If we removed
> -    // the last element:
> -    //   [ 4, 3, 2, 7 ]
> -    // this path refers to the whole field declaration (from the beginning
> -    // of the label to the terminating semicolon).
> -    repeated int32 path = 1 [packed=true];
> -
> -    // Always has exactly three or four elements: start line, start column,
> -    // end line (optional, otherwise assumed same as start line), end column.
> -    // These are packed into a single field for efficiency.  Note that line
> -    // and column numbers are zero-based -- typically you will want to add
> -    // 1 to each before displaying to a user.
> -    repeated int32 span = 2 [packed=true];
> -
> -    // If this SourceCodeInfo represents a complete declaration, these are any
> -    // comments appearing before and after the declaration which appear to be
> -    // attached to the declaration.
> -    //
> -    // A series of line comments appearing on consecutive lines, with no other
> -    // tokens appearing on those lines, will be treated as a single comment.
> -    //
> -    // leading_detached_comments will keep paragraphs of comments that appear
> -    // before (but not connected to) the current element. Each paragraph,
> -    // separated by empty lines, will be one comment element in the repeated
> -    // field.
> -    //
> -    // Only the comment content is provided; comment markers (e.g. //) are
> -    // stripped out.  For block comments, leading whitespace and an asterisk
> -    // will be stripped from the beginning of each line other than the first.
> -    // Newlines are included in the output.
> -    //
> -    // Examples:
> -    //
> -    //   optional int32 foo = 1;  // Comment attached to foo.
> -    //   // Comment attached to bar.
> -    //   optional int32 bar = 2;
> -    //
> -    //   optional string baz = 3;
> -    //   // Comment attached to baz.
> -    //   // Another line attached to baz.
> -    //
> -    //   // Comment attached to qux.
> -    //   //
> -    //   // Another line attached to qux.
> -    //   optional double qux = 4;
> -    //
> -    //   // Detached comment for corge. This is not leading or trailing comments
> -    //   // to qux or corge because there are blank lines separating it from
> -    //   // both.
> -    //
> -    //   // Detached comment for corge paragraph 2.
> -    //
> -    //   optional string corge = 5;
> -    //   /* Block comment attached
> -    //    * to corge.  Leading asterisks
> -    //    * will be removed. */
> -    //   /* Block comment attached to
> -    //    * grault. */
> -    //   optional int32 grault = 6;
> -    //
> -    //   // ignored detached comments.
> -    optional string leading_comments = 3;
> -    optional string trailing_comments = 4;
> -    repeated string leading_detached_comments = 6;
> -  }
> -}
> -
> -// Describes the relationship between generated code and its original source
> -// file. A GeneratedCodeInfo message is associated with only one generated
> -// source file, but may contain references to different source .proto files.
> -message GeneratedCodeInfo {
> -  // An Annotation connects some span of text in generated code to an element
> -  // of its generating .proto file.
> -  repeated Annotation annotation = 1;
> -  message Annotation {
> -    // Identifies the element in the original source .proto file. This field
> -    // is formatted the same as SourceCodeInfo.Location.path.
> -    repeated int32 path = 1 [packed=true];
> -
> -    // Identifies the filesystem path to the original source .proto.
> -    optional string source_file = 2;
> -
> -    // Identifies the starting offset in bytes in the generated code
> -    // that relates to the identified object.
> -    optional int32 begin = 3;
> -
> -    // Identifies the ending offset in bytes in the generated code that
> -    // relates to the identified offset. The end offset should be one past
> -    // the last relevant byte (so the length of the text = end - begin).
> -    optional int32 end = 4;
> -  }
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/doc.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/doc.go
> deleted file mode 100644
> index 0d6055d6..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/doc.go
> +++ /dev/null
> @@ -1,51 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -/*
> -	A plugin for the Google protocol buffer compiler to generate Go code.
> -	Run it by building this program and putting it in your path with the name
> -		protoc-gen-go
> -	That word 'go' at the end becomes part of the option string set for the
> -	protocol compiler, so once the protocol compiler (protoc) is installed
> -	you can run
> -		protoc --go_out=output_directory input_directory/file.proto
> -	to generate Go bindings for the protocol defined by file.proto.
> -	With that input, the output will be written to
> -		output_directory/file.pb.go
> -
> -	The generated code is documented in the package comment for
> -	the library.
> -
> -	See the README and documentation for protocol buffers to learn more:
> -		https://developers.google.com/protocol-buffers/
> -
> -*/
> -package documentation
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/Makefile b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/Makefile
> deleted file mode 100644
> index b5715c35..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/Makefile
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2010 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -include $(GOROOT)/src/Make.inc
> -
> -TARG=github.com/golang/protobuf/compiler/generator
> -GOFILES=\
> -	generator.go\
> -
> -DEPS=../descriptor ../plugin ../../proto
> -
> -include $(GOROOT)/src/Make.pkg
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go
> deleted file mode 100644
> index 211ab5d3..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go
> +++ /dev/null
> @@ -1,2805 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -/*
> -	The code generator for the plugin for the Google protocol buffer compiler.
> -	It generates Go code from the protocol buffer description files read by the
> -	main routine.
> -*/
> -package generator
> -
> -import (
> -	"bufio"
> -	"bytes"
> -	"compress/gzip"
> -	"fmt"
> -	"go/parser"
> -	"go/printer"
> -	"go/token"
> -	"log"
> -	"os"
> -	"path"
> -	"strconv"
> -	"strings"
> -	"unicode"
> -	"unicode/utf8"
> -
> -	"github.com/golang/protobuf/proto"
> -
> -	"github.com/golang/protobuf/protoc-gen-go/descriptor"
> -	plugin "github.com/golang/protobuf/protoc-gen-go/plugin"
> -)
> -
> -// generatedCodeVersion indicates a version of the generated code.
> -// It is incremented whenever an incompatibility between the generated code and
> -// proto package is introduced; the generated code references
> -// a constant, proto.ProtoPackageIsVersionN (where N is generatedCodeVersion).
> -const generatedCodeVersion = 2
> -
> -// A Plugin provides functionality to add to the output during Go code generation,
> -// such as to produce RPC stubs.
> -type Plugin interface {
> -	// Name identifies the plugin.
> -	Name() string
> -	// Init is called once after data structures are built but before
> -	// code generation begins.
> -	Init(g *Generator)
> -	// Generate produces the code generated by the plugin for this file,
> -	// except for the imports, by calling the generator's methods P, In, and Out.
> -	Generate(file *FileDescriptor)
> -	// GenerateImports produces the import declarations for this file.
> -	// It is called after Generate.
> -	GenerateImports(file *FileDescriptor)
> -}
> -
> -var plugins []Plugin
> -
> -// RegisterPlugin installs a (second-order) plugin to be run when the Go output is generated.
> -// It is typically called during initialization.
> -func RegisterPlugin(p Plugin) {
> -	plugins = append(plugins, p)
> -}
> -
> -// Each type we import as a protocol buffer (other than FileDescriptorProto) needs
> -// a pointer to the FileDescriptorProto that represents it.  These types achieve that
> -// wrapping by placing each Proto inside a struct with the pointer to its File. The
> -// structs have the same names as their contents, with "Proto" removed.
> -// FileDescriptor is used to store the things that it points to.
> -
> -// The file and package name method are common to messages and enums.
> -type common struct {
> -	file *descriptor.FileDescriptorProto // File this object comes from.
> -}
> -
> -// PackageName is name in the package clause in the generated file.
> -func (c *common) PackageName() string { return uniquePackageOf(c.file) }
> -
> -func (c *common) File() *descriptor.FileDescriptorProto { return c.file }
> -
> -func fileIsProto3(file *descriptor.FileDescriptorProto) bool {
> -	return file.GetSyntax() == "proto3"
> -}
> -
> -func (c *common) proto3() bool { return fileIsProto3(c.file) }
> -
> -// Descriptor represents a protocol buffer message.
> -type Descriptor struct {
> -	common
> -	*descriptor.DescriptorProto
> -	parent   *Descriptor            // The containing message, if any.
> -	nested   []*Descriptor          // Inner messages, if any.
> -	enums    []*EnumDescriptor      // Inner enums, if any.
> -	ext      []*ExtensionDescriptor // Extensions, if any.
> -	typename []string               // Cached typename vector.
> -	index    int                    // The index into the container, whether the file or another message.
> -	path     string                 // The SourceCodeInfo path as comma-separated integers.
> -	group    bool
> -}
> -
> -// TypeName returns the elements of the dotted type name.
> -// The package name is not part of this name.
> -func (d *Descriptor) TypeName() []string {
> -	if d.typename != nil {
> -		return d.typename
> -	}
> -	n := 0
> -	for parent := d; parent != nil; parent = parent.parent {
> -		n++
> -	}
> -	s := make([]string, n, n)
> -	for parent := d; parent != nil; parent = parent.parent {
> -		n--
> -		s[n] = parent.GetName()
> -	}
> -	d.typename = s
> -	return s
> -}
> -
> -// EnumDescriptor describes an enum. If it's at top level, its parent will be nil.
> -// Otherwise it will be the descriptor of the message in which it is defined.
> -type EnumDescriptor struct {
> -	common
> -	*descriptor.EnumDescriptorProto
> -	parent   *Descriptor // The containing message, if any.
> -	typename []string    // Cached typename vector.
> -	index    int         // The index into the container, whether the file or a message.
> -	path     string      // The SourceCodeInfo path as comma-separated integers.
> -}
> -
> -// TypeName returns the elements of the dotted type name.
> -// The package name is not part of this name.
> -func (e *EnumDescriptor) TypeName() (s []string) {
> -	if e.typename != nil {
> -		return e.typename
> -	}
> -	name := e.GetName()
> -	if e.parent == nil {
> -		s = make([]string, 1)
> -	} else {
> -		pname := e.parent.TypeName()
> -		s = make([]string, len(pname)+1)
> -		copy(s, pname)
> -	}
> -	s[len(s)-1] = name
> -	e.typename = s
> -	return s
> -}
> -
> -// Everything but the last element of the full type name, CamelCased.
> -// The values of type Foo.Bar are call Foo_value1... not Foo_Bar_value1... .
> -func (e *EnumDescriptor) prefix() string {
> -	if e.parent == nil {
> -		// If the enum is not part of a message, the prefix is just the type name.
> -		return CamelCase(*e.Name) + "_"
> -	}
> -	typeName := e.TypeName()
> -	return CamelCaseSlice(typeName[0:len(typeName)-1]) + "_"
> -}
> -
> -// The integer value of the named constant in this enumerated type.
> -func (e *EnumDescriptor) integerValueAsString(name string) string {
> -	for _, c := range e.Value {
> -		if c.GetName() == name {
> -			return fmt.Sprint(c.GetNumber())
> -		}
> -	}
> -	log.Fatal("cannot find value for enum constant")
> -	return ""
> -}
> -
> -// ExtensionDescriptor describes an extension. If it's at top level, its parent will be nil.
> -// Otherwise it will be the descriptor of the message in which it is defined.
> -type ExtensionDescriptor struct {
> -	common
> -	*descriptor.FieldDescriptorProto
> -	parent *Descriptor // The containing message, if any.
> -}
> -
> -// TypeName returns the elements of the dotted type name.
> -// The package name is not part of this name.
> -func (e *ExtensionDescriptor) TypeName() (s []string) {
> -	name := e.GetName()
> -	if e.parent == nil {
> -		// top-level extension
> -		s = make([]string, 1)
> -	} else {
> -		pname := e.parent.TypeName()
> -		s = make([]string, len(pname)+1)
> -		copy(s, pname)
> -	}
> -	s[len(s)-1] = name
> -	return s
> -}
> -
> -// DescName returns the variable name used for the generated descriptor.
> -func (e *ExtensionDescriptor) DescName() string {
> -	// The full type name.
> -	typeName := e.TypeName()
> -	// Each scope of the extension is individually CamelCased, and all are joined with "_" with an "E_" prefix.
> -	for i, s := range typeName {
> -		typeName[i] = CamelCase(s)
> -	}
> -	return "E_" + strings.Join(typeName, "_")
> -}
> -
> -// ImportedDescriptor describes a type that has been publicly imported from another file.
> -type ImportedDescriptor struct {
> -	common
> -	o Object
> -}
> -
> -func (id *ImportedDescriptor) TypeName() []string { return id.o.TypeName() }
> -
> -// FileDescriptor describes an protocol buffer descriptor file (.proto).
> -// It includes slices of all the messages and enums defined within it.
> -// Those slices are constructed by WrapTypes.
> -type FileDescriptor struct {
> -	*descriptor.FileDescriptorProto
> -	desc []*Descriptor          // All the messages defined in this file.
> -	enum []*EnumDescriptor      // All the enums defined in this file.
> -	ext  []*ExtensionDescriptor // All the top-level extensions defined in this file.
> -	imp  []*ImportedDescriptor  // All types defined in files publicly imported by this file.
> -
> -	// Comments, stored as a map of path (comma-separated integers) to the comment.
> -	comments map[string]*descriptor.SourceCodeInfo_Location
> -
> -	// The full list of symbols that are exported,
> -	// as a map from the exported object to its symbols.
> -	// This is used for supporting public imports.
> -	exported map[Object][]symbol
> -
> -	index int // The index of this file in the list of files to generate code for
> -
> -	proto3 bool // whether to generate proto3 code for this file
> -}
> -
> -// PackageName is the package name we'll use in the generated code to refer to this file.
> -func (d *FileDescriptor) PackageName() string { return uniquePackageOf(d.FileDescriptorProto) }
> -
> -// VarName is the variable name we'll use in the generated code to refer
> -// to the compressed bytes of this descriptor. It is not exported, so
> -// it is only valid inside the generated package.
> -func (d *FileDescriptor) VarName() string { return fmt.Sprintf("fileDescriptor%d", d.index) }
> -
> -// goPackageOption interprets the file's go_package option.
> -// If there is no go_package, it returns ("", "", false).
> -// If there's a simple name, it returns ("", pkg, true).
> -// If the option implies an import path, it returns (impPath, pkg, true).
> -func (d *FileDescriptor) goPackageOption() (impPath, pkg string, ok bool) {
> -	pkg = d.GetOptions().GetGoPackage()
> -	if pkg == "" {
> -		return
> -	}
> -	ok = true
> -	// The presence of a slash implies there's an import path.
> -	slash := strings.LastIndex(pkg, "/")
> -	if slash < 0 {
> -		return
> -	}
> -	impPath, pkg = pkg, pkg[slash+1:]
> -	// A semicolon-delimited suffix overrides the package name.
> -	sc := strings.IndexByte(impPath, ';')
> -	if sc < 0 {
> -		return
> -	}
> -	impPath, pkg = impPath[:sc], impPath[sc+1:]
> -	return
> -}
> -
> -// goPackageName returns the Go package name to use in the
> -// generated Go file.  The result explicit reports whether the name
> -// came from an option go_package statement.  If explicit is false,
> -// the name was derived from the protocol buffer's package statement
> -// or the input file name.
> -func (d *FileDescriptor) goPackageName() (name string, explicit bool) {
> -	// Does the file have a "go_package" option?
> -	if _, pkg, ok := d.goPackageOption(); ok {
> -		return pkg, true
> -	}
> -
> -	// Does the file have a package clause?
> -	if pkg := d.GetPackage(); pkg != "" {
> -		return pkg, false
> -	}
> -	// Use the file base name.
> -	return baseName(d.GetName()), false
> -}
> -
> -// goFileName returns the output name for the generated Go file.
> -func (d *FileDescriptor) goFileName() string {
> -	name := *d.Name
> -	if ext := path.Ext(name); ext == ".proto" || ext == ".protodevel" {
> -		name = name[:len(name)-len(ext)]
> -	}
> -	name += ".pb.go"
> -
> -	// Does the file have a "go_package" option?
> -	// If it does, it may override the filename.
> -	if impPath, _, ok := d.goPackageOption(); ok && impPath != "" {
> -		// Replace the existing dirname with the declared import path.
> -		_, name = path.Split(name)
> -		name = path.Join(impPath, name)
> -		return name
> -	}
> -
> -	return name
> -}
> -
> -func (d *FileDescriptor) addExport(obj Object, sym symbol) {
> -	d.exported[obj] = append(d.exported[obj], sym)
> -}
> -
> -// symbol is an interface representing an exported Go symbol.
> -type symbol interface {
> -	// GenerateAlias should generate an appropriate alias
> -	// for the symbol from the named package.
> -	GenerateAlias(g *Generator, pkg string)
> -}
> -
> -type messageSymbol struct {
> -	sym                         string
> -	hasExtensions, isMessageSet bool
> -	hasOneof                    bool
> -	getters                     []getterSymbol
> -}
> -
> -type getterSymbol struct {
> -	name     string
> -	typ      string
> -	typeName string // canonical name in proto world; empty for proto.Message and similar
> -	genType  bool   // whether typ contains a generated type (message/group/enum)
> -}
> -
> -func (ms *messageSymbol) GenerateAlias(g *Generator, pkg string) {
> -	remoteSym := pkg + "." + ms.sym
> -
> -	g.P("type ", ms.sym, " ", remoteSym)
> -	g.P("func (m *", ms.sym, ") Reset() { (*", remoteSym, ")(m).Reset() }")
> -	g.P("func (m *", ms.sym, ") String() string { return (*", remoteSym, ")(m).String() }")
> -	g.P("func (*", ms.sym, ") ProtoMessage() {}")
> -	if ms.hasExtensions {
> -		g.P("func (*", ms.sym, ") ExtensionRangeArray() []", g.Pkg["proto"], ".ExtensionRange ",
> -			"{ return (*", remoteSym, ")(nil).ExtensionRangeArray() }")
> -		if ms.isMessageSet {
> -			g.P("func (m *", ms.sym, ") Marshal() ([]byte, error) ",
> -				"{ return (*", remoteSym, ")(m).Marshal() }")
> -			g.P("func (m *", ms.sym, ") Unmarshal(buf []byte) error ",
> -				"{ return (*", remoteSym, ")(m).Unmarshal(buf) }")
> -		}
> -	}
> -	if ms.hasOneof {
> -		// Oneofs and public imports do not mix well.
> -		// We can make them work okay for the binary format,
> -		// but they're going to break weirdly for text/JSON.
> -		enc := "_" + ms.sym + "_OneofMarshaler"
> -		dec := "_" + ms.sym + "_OneofUnmarshaler"
> -		size := "_" + ms.sym + "_OneofSizer"
> -		encSig := "(msg " + g.Pkg["proto"] + ".Message, b *" + g.Pkg["proto"] + ".Buffer) error"
> -		decSig := "(msg " + g.Pkg["proto"] + ".Message, tag, wire int, b *" + g.Pkg["proto"] + ".Buffer) (bool, error)"
> -		sizeSig := "(msg " + g.Pkg["proto"] + ".Message) int"
> -		g.P("func (m *", ms.sym, ") XXX_OneofFuncs() (func", encSig, ", func", decSig, ", func", sizeSig, ", []interface{}) {")
> -		g.P("return ", enc, ", ", dec, ", ", size, ", nil")
> -		g.P("}")
> -
> -		g.P("func ", enc, encSig, " {")
> -		g.P("m := msg.(*", ms.sym, ")")
> -		g.P("m0 := (*", remoteSym, ")(m)")
> -		g.P("enc, _, _, _ := m0.XXX_OneofFuncs()")
> -		g.P("return enc(m0, b)")
> -		g.P("}")
> -
> -		g.P("func ", dec, decSig, " {")
> -		g.P("m := msg.(*", ms.sym, ")")
> -		g.P("m0 := (*", remoteSym, ")(m)")
> -		g.P("_, dec, _, _ := m0.XXX_OneofFuncs()")
> -		g.P("return dec(m0, tag, wire, b)")
> -		g.P("}")
> -
> -		g.P("func ", size, sizeSig, " {")
> -		g.P("m := msg.(*", ms.sym, ")")
> -		g.P("m0 := (*", remoteSym, ")(m)")
> -		g.P("_, _, size, _ := m0.XXX_OneofFuncs()")
> -		g.P("return size(m0)")
> -		g.P("}")
> -	}
> -	for _, get := range ms.getters {
> -
> -		if get.typeName != "" {
> -			g.RecordTypeUse(get.typeName)
> -		}
> -		typ := get.typ
> -		val := "(*" + remoteSym + ")(m)." + get.name + "()"
> -		if get.genType {
> -			// typ will be "*pkg.T" (message/group) or "pkg.T" (enum)
> -			// or "map[t]*pkg.T" (map to message/enum).
> -			// The first two of those might have a "[]" prefix if it is repeated.
> -			// Drop any package qualifier since we have hoisted the type into this package.
> -			rep := strings.HasPrefix(typ, "[]")
> -			if rep {
> -				typ = typ[2:]
> -			}
> -			isMap := strings.HasPrefix(typ, "map[")
> -			star := typ[0] == '*'
> -			if !isMap { // map types handled lower down
> -				typ = typ[strings.Index(typ, ".")+1:]
> -			}
> -			if star {
> -				typ = "*" + typ
> -			}
> -			if rep {
> -				// Go does not permit conversion between slice types where both
> -				// element types are named. That means we need to generate a bit
> -				// of code in this situation.
> -				// typ is the element type.
> -				// val is the expression to get the slice from the imported type.
> -
> -				ctyp := typ // conversion type expression; "Foo" or "(*Foo)"
> -				if star {
> -					ctyp = "(" + typ + ")"
> -				}
> -
> -				g.P("func (m *", ms.sym, ") ", get.name, "() []", typ, " {")
> -				g.In()
> -				g.P("o := ", val)
> -				g.P("if o == nil {")
> -				g.In()
> -				g.P("return nil")
> -				g.Out()
> -				g.P("}")
> -				g.P("s := make([]", typ, ", len(o))")
> -				g.P("for i, x := range o {")
> -				g.In()
> -				g.P("s[i] = ", ctyp, "(x)")
> -				g.Out()
> -				g.P("}")
> -				g.P("return s")
> -				g.Out()
> -				g.P("}")
> -				continue
> -			}
> -			if isMap {
> -				// Split map[keyTyp]valTyp.
> -				bra, ket := strings.Index(typ, "["), strings.Index(typ, "]")
> -				keyTyp, valTyp := typ[bra+1:ket], typ[ket+1:]
> -				// Drop any package qualifier.
> -				// Only the value type may be foreign.
> -				star := valTyp[0] == '*'
> -				valTyp = valTyp[strings.Index(valTyp, ".")+1:]
> -				if star {
> -					valTyp = "*" + valTyp
> -				}
> -
> -				typ := "map[" + keyTyp + "]" + valTyp
> -				g.P("func (m *", ms.sym, ") ", get.name, "() ", typ, " {")
> -				g.P("o := ", val)
> -				g.P("if o == nil { return nil }")
> -				g.P("s := make(", typ, ", len(o))")
> -				g.P("for k, v := range o {")
> -				g.P("s[k] = (", valTyp, ")(v)")
> -				g.P("}")
> -				g.P("return s")
> -				g.P("}")
> -				continue
> -			}
> -			// Convert imported type into the forwarding type.
> -			val = "(" + typ + ")(" + val + ")"
> -		}
> -
> -		g.P("func (m *", ms.sym, ") ", get.name, "() ", typ, " { return ", val, " }")
> -	}
> -
> -}
> -
> -type enumSymbol struct {
> -	name   string
> -	proto3 bool // Whether this came from a proto3 file.
> -}
> -
> -func (es enumSymbol) GenerateAlias(g *Generator, pkg string) {
> -	s := es.name
> -	g.P("type ", s, " ", pkg, ".", s)
> -	g.P("var ", s, "_name = ", pkg, ".", s, "_name")
> -	g.P("var ", s, "_value = ", pkg, ".", s, "_value")
> -	g.P("func (x ", s, ") String() string { return (", pkg, ".", s, ")(x).String() }")
> -	if !es.proto3 {
> -		g.P("func (x ", s, ") Enum() *", s, "{ return (*", s, ")((", pkg, ".", s, ")(x).Enum()) }")
> -		g.P("func (x *", s, ") UnmarshalJSON(data []byte) error { return (*", pkg, ".", s, ")(x).UnmarshalJSON(data) }")
> -	}
> -}
> -
> -type constOrVarSymbol struct {
> -	sym  string
> -	typ  string // either "const" or "var"
> -	cast string // if non-empty, a type cast is required (used for enums)
> -}
> -
> -func (cs constOrVarSymbol) GenerateAlias(g *Generator, pkg string) {
> -	v := pkg + "." + cs.sym
> -	if cs.cast != "" {
> -		v = cs.cast + "(" + v + ")"
> -	}
> -	g.P(cs.typ, " ", cs.sym, " = ", v)
> -}
> -
> -// Object is an interface abstracting the abilities shared by enums, messages, extensions and imported objects.
> -type Object interface {
> -	PackageName() string // The name we use in our output (a_b_c), possibly renamed for uniqueness.
> -	TypeName() []string
> -	File() *descriptor.FileDescriptorProto
> -}
> -
> -// Each package name we generate must be unique. The package we're generating
> -// gets its own name but every other package must have a unique name that does
> -// not conflict in the code we generate.  These names are chosen globally (although
> -// they don't have to be, it simplifies things to do them globally).
> -func uniquePackageOf(fd *descriptor.FileDescriptorProto) string {
> -	s, ok := uniquePackageName[fd]
> -	if !ok {
> -		log.Fatal("internal error: no package name defined for " + fd.GetName())
> -	}
> -	return s
> -}
> -
> -// Generator is the type whose methods generate the output, stored in the associated response structure.
> -type Generator struct {
> -	*bytes.Buffer
> -
> -	Request  *plugin.CodeGeneratorRequest  // The input.
> -	Response *plugin.CodeGeneratorResponse // The output.
> -
> -	Param             map[string]string // Command-line parameters.
> -	PackageImportPath string            // Go import path of the package we're generating code for
> -	ImportPrefix      string            // String to prefix to imported package file names.
> -	ImportMap         map[string]string // Mapping from .proto file name to import path
> -
> -	Pkg map[string]string // The names under which we import support packages
> -
> -	packageName      string                     // What we're calling ourselves.
> -	allFiles         []*FileDescriptor          // All files in the tree
> -	allFilesByName   map[string]*FileDescriptor // All files by filename.
> -	genFiles         []*FileDescriptor          // Those files we will generate output for.
> -	file             *FileDescriptor            // The file we are compiling now.
> -	usedPackages     map[string]bool            // Names of packages used in current file.
> -	typeNameToObject map[string]Object          // Key is a fully-qualified name in input syntax.
> -	init             []string                   // Lines to emit in the init function.
> -	indent           string
> -	writeOutput      bool
> -}
> -
> -// New creates a new generator and allocates the request and response protobufs.
> -func New() *Generator {
> -	g := new(Generator)
> -	g.Buffer = new(bytes.Buffer)
> -	g.Request = new(plugin.CodeGeneratorRequest)
> -	g.Response = new(plugin.CodeGeneratorResponse)
> -	return g
> -}
> -
> -// Error reports a problem, including an error, and exits the program.
> -func (g *Generator) Error(err error, msgs ...string) {
> -	s := strings.Join(msgs, " ") + ":" + err.Error()
> -	log.Print("protoc-gen-go: error:", s)
> -	os.Exit(1)
> -}
> -
> -// Fail reports a problem and exits the program.
> -func (g *Generator) Fail(msgs ...string) {
> -	s := strings.Join(msgs, " ")
> -	log.Print("protoc-gen-go: error:", s)
> -	os.Exit(1)
> -}
> -
> -// CommandLineParameters breaks the comma-separated list of key=value pairs
> -// in the parameter (a member of the request protobuf) into a key/value map.
> -// It then sets file name mappings defined by those entries.
> -func (g *Generator) CommandLineParameters(parameter string) {
> -	g.Param = make(map[string]string)
> -	for _, p := range strings.Split(parameter, ",") {
> -		if i := strings.Index(p, "="); i < 0 {
> -			g.Param[p] = ""
> -		} else {
> -			g.Param[p[0:i]] = p[i+1:]
> -		}
> -	}
> -
> -	g.ImportMap = make(map[string]string)
> -	pluginList := "none" // Default list of plugin names to enable (empty means all).
> -	for k, v := range g.Param {
> -		switch k {
> -		case "import_prefix":
> -			g.ImportPrefix = v
> -		case "import_path":
> -			g.PackageImportPath = v
> -		case "plugins":
> -			pluginList = v
> -		default:
> -			if len(k) > 0 && k[0] == 'M' {
> -				g.ImportMap[k[1:]] = v
> -			}
> -		}
> -	}
> -	if pluginList != "" {
> -		// Amend the set of plugins.
> -		enabled := make(map[string]bool)
> -		for _, name := range strings.Split(pluginList, "+") {
> -			enabled[name] = true
> -		}
> -		var nplugins []Plugin
> -		for _, p := range plugins {
> -			if enabled[p.Name()] {
> -				nplugins = append(nplugins, p)
> -			}
> -		}
> -		plugins = nplugins
> -	}
> -}
> -
> -// DefaultPackageName returns the package name printed for the object.
> -// If its file is in a different package, it returns the package name we're using for this file, plus ".".
> -// Otherwise it returns the empty string.
> -func (g *Generator) DefaultPackageName(obj Object) string {
> -	pkg := obj.PackageName()
> -	if pkg == g.packageName {
> -		return ""
> -	}
> -	return pkg + "."
> -}
> -
> -// For each input file, the unique package name to use, underscored.
> -var uniquePackageName = make(map[*descriptor.FileDescriptorProto]string)
> -
> -// Package names already registered.  Key is the name from the .proto file;
> -// value is the name that appears in the generated code.
> -var pkgNamesInUse = make(map[string]bool)
> -
> -// Create and remember a guaranteed unique package name for this file descriptor.
> -// Pkg is the candidate name.  If f is nil, it's a builtin package like "proto" and
> -// has no file descriptor.
> -func RegisterUniquePackageName(pkg string, f *FileDescriptor) string {
> -	// Convert dots to underscores before finding a unique alias.
> -	pkg = strings.Map(badToUnderscore, pkg)
> -
> -	for i, orig := 1, pkg; pkgNamesInUse[pkg]; i++ {
> -		// It's a duplicate; must rename.
> -		pkg = orig + strconv.Itoa(i)
> -	}
> -	// Install it.
> -	pkgNamesInUse[pkg] = true
> -	if f != nil {
> -		uniquePackageName[f.FileDescriptorProto] = pkg
> -	}
> -	return pkg
> -}
> -
> -var isGoKeyword = map[string]bool{
> -	"break":       true,
> -	"case":        true,
> -	"chan":        true,
> -	"const":       true,
> -	"continue":    true,
> -	"default":     true,
> -	"else":        true,
> -	"defer":       true,
> -	"fallthrough": true,
> -	"for":         true,
> -	"func":        true,
> -	"go":          true,
> -	"goto":        true,
> -	"if":          true,
> -	"import":      true,
> -	"interface":   true,
> -	"map":         true,
> -	"package":     true,
> -	"range":       true,
> -	"return":      true,
> -	"select":      true,
> -	"struct":      true,
> -	"switch":      true,
> -	"type":        true,
> -	"var":         true,
> -}
> -
> -// defaultGoPackage returns the package name to use,
> -// derived from the import path of the package we're building code for.
> -func (g *Generator) defaultGoPackage() string {
> -	p := g.PackageImportPath
> -	if i := strings.LastIndex(p, "/"); i >= 0 {
> -		p = p[i+1:]
> -	}
> -	if p == "" {
> -		return ""
> -	}
> -
> -	p = strings.Map(badToUnderscore, p)
> -	// Identifier must not be keyword: insert _.
> -	if isGoKeyword[p] {
> -		p = "_" + p
> -	}
> -	// Identifier must not begin with digit: insert _.
> -	if r, _ := utf8.DecodeRuneInString(p); unicode.IsDigit(r) {
> -		p = "_" + p
> -	}
> -	return p
> -}
> -
> -// SetPackageNames sets the package name for this run.
> -// The package name must agree across all files being generated.
> -// It also defines unique package names for all imported files.
> -func (g *Generator) SetPackageNames() {
> -	// Register the name for this package.  It will be the first name
> -	// registered so is guaranteed to be unmodified.
> -	pkg, explicit := g.genFiles[0].goPackageName()
> -
> -	// Check all files for an explicit go_package option.
> -	for _, f := range g.genFiles {
> -		thisPkg, thisExplicit := f.goPackageName()
> -		if thisExplicit {
> -			if !explicit {
> -				// Let this file's go_package option serve for all input files.
> -				pkg, explicit = thisPkg, true
> -			} else if thisPkg != pkg {
> -				g.Fail("inconsistent package names:", thisPkg, pkg)
> -			}
> -		}
> -	}
> -
> -	// If we don't have an explicit go_package option but we have an
> -	// import path, use that.
> -	if !explicit {
> -		p := g.defaultGoPackage()
> -		if p != "" {
> -			pkg, explicit = p, true
> -		}
> -	}
> -
> -	// If there was no go_package and no import path to use,
> -	// double-check that all the inputs have the same implicit
> -	// Go package name.
> -	if !explicit {
> -		for _, f := range g.genFiles {
> -			thisPkg, _ := f.goPackageName()
> -			if thisPkg != pkg {
> -				g.Fail("inconsistent package names:", thisPkg, pkg)
> -			}
> -		}
> -	}
> -
> -	g.packageName = RegisterUniquePackageName(pkg, g.genFiles[0])
> -
> -	// Register the support package names. They might collide with the
> -	// name of a package we import.
> -	g.Pkg = map[string]string{
> -		"fmt":   RegisterUniquePackageName("fmt", nil),
> -		"math":  RegisterUniquePackageName("math", nil),
> -		"proto": RegisterUniquePackageName("proto", nil),
> -	}
> -
> -AllFiles:
> -	for _, f := range g.allFiles {
> -		for _, genf := range g.genFiles {
> -			if f == genf {
> -				// In this package already.
> -				uniquePackageName[f.FileDescriptorProto] = g.packageName
> -				continue AllFiles
> -			}
> -		}
> -		// The file is a dependency, so we want to ignore its go_package option
> -		// because that is only relevant for its specific generated output.
> -		pkg := f.GetPackage()
> -		if pkg == "" {
> -			pkg = baseName(*f.Name)
> -		}
> -		RegisterUniquePackageName(pkg, f)
> -	}
> -}
> -
> -// WrapTypes walks the incoming data, wrapping DescriptorProtos, EnumDescriptorProtos
> -// and FileDescriptorProtos into file-referenced objects within the Generator.
> -// It also creates the list of files to generate and so should be called before GenerateAllFiles.
> -func (g *Generator) WrapTypes() {
> -	g.allFiles = make([]*FileDescriptor, 0, len(g.Request.ProtoFile))
> -	g.allFilesByName = make(map[string]*FileDescriptor, len(g.allFiles))
> -	for _, f := range g.Request.ProtoFile {
> -		// We must wrap the descriptors before we wrap the enums
> -		descs := wrapDescriptors(f)
> -		g.buildNestedDescriptors(descs)
> -		enums := wrapEnumDescriptors(f, descs)
> -		g.buildNestedEnums(descs, enums)
> -		exts := wrapExtensions(f)
> -		fd := &FileDescriptor{
> -			FileDescriptorProto: f,
> -			desc:                descs,
> -			enum:                enums,
> -			ext:                 exts,
> -			exported:            make(map[Object][]symbol),
> -			proto3:              fileIsProto3(f),
> -		}
> -		extractComments(fd)
> -		g.allFiles = append(g.allFiles, fd)
> -		g.allFilesByName[f.GetName()] = fd
> -	}
> -	for _, fd := range g.allFiles {
> -		fd.imp = wrapImported(fd.FileDescriptorProto, g)
> -	}
> -
> -	g.genFiles = make([]*FileDescriptor, 0, len(g.Request.FileToGenerate))
> -	for _, fileName := range g.Request.FileToGenerate {
> -		fd := g.allFilesByName[fileName]
> -		if fd == nil {
> -			g.Fail("could not find file named", fileName)
> -		}
> -		fd.index = len(g.genFiles)
> -		g.genFiles = append(g.genFiles, fd)
> -	}
> -}
> -
> -// Scan the descriptors in this file.  For each one, build the slice of nested descriptors
> -func (g *Generator) buildNestedDescriptors(descs []*Descriptor) {
> -	for _, desc := range descs {
> -		if len(desc.NestedType) != 0 {
> -			for _, nest := range descs {
> -				if nest.parent == desc {
> -					desc.nested = append(desc.nested, nest)
> -				}
> -			}
> -			if len(desc.nested) != len(desc.NestedType) {
> -				g.Fail("internal error: nesting failure for", desc.GetName())
> -			}
> -		}
> -	}
> -}
> -
> -func (g *Generator) buildNestedEnums(descs []*Descriptor, enums []*EnumDescriptor) {
> -	for _, desc := range descs {
> -		if len(desc.EnumType) != 0 {
> -			for _, enum := range enums {
> -				if enum.parent == desc {
> -					desc.enums = append(desc.enums, enum)
> -				}
> -			}
> -			if len(desc.enums) != len(desc.EnumType) {
> -				g.Fail("internal error: enum nesting failure for", desc.GetName())
> -			}
> -		}
> -	}
> -}
> -
> -// Construct the Descriptor
> -func newDescriptor(desc *descriptor.DescriptorProto, parent *Descriptor, file *descriptor.FileDescriptorProto, index int) *Descriptor {
> -	d := &Descriptor{
> -		common:          common{file},
> -		DescriptorProto: desc,
> -		parent:          parent,
> -		index:           index,
> -	}
> -	if parent == nil {
> -		d.path = fmt.Sprintf("%d,%d", messagePath, index)
> -	} else {
> -		d.path = fmt.Sprintf("%s,%d,%d", parent.path, messageMessagePath, index)
> -	}
> -
> -	// The only way to distinguish a group from a message is whether
> -	// the containing message has a TYPE_GROUP field that matches.
> -	if parent != nil {
> -		parts := d.TypeName()
> -		if file.Package != nil {
> -			parts = append([]string{*file.Package}, parts...)
> -		}
> -		exp := "." + strings.Join(parts, ".")
> -		for _, field := range parent.Field {
> -			if field.GetType() == descriptor.FieldDescriptorProto_TYPE_GROUP && field.GetTypeName() == exp {
> -				d.group = true
> -				break
> -			}
> -		}
> -	}
> -
> -	for _, field := range desc.Extension {
> -		d.ext = append(d.ext, &ExtensionDescriptor{common{file}, field, d})
> -	}
> -
> -	return d
> -}
> -
> -// Return a slice of all the Descriptors defined within this file
> -func wrapDescriptors(file *descriptor.FileDescriptorProto) []*Descriptor {
> -	sl := make([]*Descriptor, 0, len(file.MessageType)+10)
> -	for i, desc := range file.MessageType {
> -		sl = wrapThisDescriptor(sl, desc, nil, file, i)
> -	}
> -	return sl
> -}
> -
> -// Wrap this Descriptor, recursively
> -func wrapThisDescriptor(sl []*Descriptor, desc *descriptor.DescriptorProto, parent *Descriptor, file *descriptor.FileDescriptorProto, index int) []*Descriptor {
> -	sl = append(sl, newDescriptor(desc, parent, file, index))
> -	me := sl[len(sl)-1]
> -	for i, nested := range desc.NestedType {
> -		sl = wrapThisDescriptor(sl, nested, me, file, i)
> -	}
> -	return sl
> -}
> -
> -// Construct the EnumDescriptor
> -func newEnumDescriptor(desc *descriptor.EnumDescriptorProto, parent *Descriptor, file *descriptor.FileDescriptorProto, index int) *EnumDescriptor {
> -	ed := &EnumDescriptor{
> -		common:              common{file},
> -		EnumDescriptorProto: desc,
> -		parent:              parent,
> -		index:               index,
> -	}
> -	if parent == nil {
> -		ed.path = fmt.Sprintf("%d,%d", enumPath, index)
> -	} else {
> -		ed.path = fmt.Sprintf("%s,%d,%d", parent.path, messageEnumPath, index)
> -	}
> -	return ed
> -}
> -
> -// Return a slice of all the EnumDescriptors defined within this file
> -func wrapEnumDescriptors(file *descriptor.FileDescriptorProto, descs []*Descriptor) []*EnumDescriptor {
> -	sl := make([]*EnumDescriptor, 0, len(file.EnumType)+10)
> -	// Top-level enums.
> -	for i, enum := range file.EnumType {
> -		sl = append(sl, newEnumDescriptor(enum, nil, file, i))
> -	}
> -	// Enums within messages. Enums within embedded messages appear in the outer-most message.
> -	for _, nested := range descs {
> -		for i, enum := range nested.EnumType {
> -			sl = append(sl, newEnumDescriptor(enum, nested, file, i))
> -		}
> -	}
> -	return sl
> -}
> -
> -// Return a slice of all the top-level ExtensionDescriptors defined within this file.
> -func wrapExtensions(file *descriptor.FileDescriptorProto) []*ExtensionDescriptor {
> -	var sl []*ExtensionDescriptor
> -	for _, field := range file.Extension {
> -		sl = append(sl, &ExtensionDescriptor{common{file}, field, nil})
> -	}
> -	return sl
> -}
> -
> -// Return a slice of all the types that are publicly imported into this file.
> -func wrapImported(file *descriptor.FileDescriptorProto, g *Generator) (sl []*ImportedDescriptor) {
> -	for _, index := range file.PublicDependency {
> -		df := g.fileByName(file.Dependency[index])
> -		for _, d := range df.desc {
> -			if d.GetOptions().GetMapEntry() {
> -				continue
> -			}
> -			sl = append(sl, &ImportedDescriptor{common{file}, d})
> -		}
> -		for _, e := range df.enum {
> -			sl = append(sl, &ImportedDescriptor{common{file}, e})
> -		}
> -		for _, ext := range df.ext {
> -			sl = append(sl, &ImportedDescriptor{common{file}, ext})
> -		}
> -	}
> -	return
> -}
> -
> -func extractComments(file *FileDescriptor) {
> -	file.comments = make(map[string]*descriptor.SourceCodeInfo_Location)
> -	for _, loc := range file.GetSourceCodeInfo().GetLocation() {
> -		if loc.LeadingComments == nil {
> -			continue
> -		}
> -		var p []string
> -		for _, n := range loc.Path {
> -			p = append(p, strconv.Itoa(int(n)))
> -		}
> -		file.comments[strings.Join(p, ",")] = loc
> -	}
> -}
> -
> -// BuildTypeNameMap builds the map from fully qualified type names to objects.
> -// The key names for the map come from the input data, which puts a period at the beginning.
> -// It should be called after SetPackageNames and before GenerateAllFiles.
> -func (g *Generator) BuildTypeNameMap() {
> -	g.typeNameToObject = make(map[string]Object)
> -	for _, f := range g.allFiles {
> -		// The names in this loop are defined by the proto world, not us, so the
> -		// package name may be empty.  If so, the dotted package name of X will
> -		// be ".X"; otherwise it will be ".pkg.X".
> -		dottedPkg := "." + f.GetPackage()
> -		if dottedPkg != "." {
> -			dottedPkg += "."
> -		}
> -		for _, enum := range f.enum {
> -			name := dottedPkg + dottedSlice(enum.TypeName())
> -			g.typeNameToObject[name] = enum
> -		}
> -		for _, desc := range f.desc {
> -			name := dottedPkg + dottedSlice(desc.TypeName())
> -			g.typeNameToObject[name] = desc
> -		}
> -	}
> -}
> -
> -// ObjectNamed, given a fully-qualified input type name as it appears in the input data,
> -// returns the descriptor for the message or enum with that name.
> -func (g *Generator) ObjectNamed(typeName string) Object {
> -	o, ok := g.typeNameToObject[typeName]
> -	if !ok {
> -		g.Fail("can't find object with type", typeName)
> -	}
> -
> -	// If the file of this object isn't a direct dependency of the current file,
> -	// or in the current file, then this object has been publicly imported into
> -	// a dependency of the current file.
> -	// We should return the ImportedDescriptor object for it instead.
> -	direct := *o.File().Name == *g.file.Name
> -	if !direct {
> -		for _, dep := range g.file.Dependency {
> -			if *g.fileByName(dep).Name == *o.File().Name {
> -				direct = true
> -				break
> -			}
> -		}
> -	}
> -	if !direct {
> -		found := false
> -	Loop:
> -		for _, dep := range g.file.Dependency {
> -			df := g.fileByName(*g.fileByName(dep).Name)
> -			for _, td := range df.imp {
> -				if td.o == o {
> -					// Found it!
> -					o = td
> -					found = true
> -					break Loop
> -				}
> -			}
> -		}
> -		if !found {
> -			log.Printf("protoc-gen-go: WARNING: failed finding publicly imported dependency for %v, used in %v", typeName, *g.file.Name)
> -		}
> -	}
> -
> -	return o
> -}
> -
> -// P prints the arguments to the generated output.  It handles strings and int32s, plus
> -// handling indirections because they may be *string, etc.
> -func (g *Generator) P(str ...interface{}) {
> -	if !g.writeOutput {
> -		return
> -	}
> -	g.WriteString(g.indent)
> -	for _, v := range str {
> -		switch s := v.(type) {
> -		case string:
> -			g.WriteString(s)
> -		case *string:
> -			g.WriteString(*s)
> -		case bool:
> -			fmt.Fprintf(g, "%t", s)
> -		case *bool:
> -			fmt.Fprintf(g, "%t", *s)
> -		case int:
> -			fmt.Fprintf(g, "%d", s)
> -		case *int32:
> -			fmt.Fprintf(g, "%d", *s)
> -		case *int64:
> -			fmt.Fprintf(g, "%d", *s)
> -		case float64:
> -			fmt.Fprintf(g, "%g", s)
> -		case *float64:
> -			fmt.Fprintf(g, "%g", *s)
> -		default:
> -			g.Fail(fmt.Sprintf("unknown type in printer: %T", v))
> -		}
> -	}
> -	g.WriteByte('\n')
> -}
> -
> -// addInitf stores the given statement to be printed inside the file's init function.
> -// The statement is given as a format specifier and arguments.
> -func (g *Generator) addInitf(stmt string, a ...interface{}) {
> -	g.init = append(g.init, fmt.Sprintf(stmt, a...))
> -}
> -
> -// In Indents the output one tab stop.
> -func (g *Generator) In() { g.indent += "\t" }
> -
> -// Out unindents the output one tab stop.
> -func (g *Generator) Out() {
> -	if len(g.indent) > 0 {
> -		g.indent = g.indent[1:]
> -	}
> -}
> -
> -// GenerateAllFiles generates the output for all the files we're outputting.
> -func (g *Generator) GenerateAllFiles() {
> -	// Initialize the plugins
> -	for _, p := range plugins {
> -		p.Init(g)
> -	}
> -	// Generate the output. The generator runs for every file, even the files
> -	// that we don't generate output for, so that we can collate the full list
> -	// of exported symbols to support public imports.
> -	genFileMap := make(map[*FileDescriptor]bool, len(g.genFiles))
> -	for _, file := range g.genFiles {
> -		genFileMap[file] = true
> -	}
> -	for _, file := range g.allFiles {
> -		g.Reset()
> -		g.writeOutput = genFileMap[file]
> -		g.generate(file)
> -		if !g.writeOutput {
> -			continue
> -		}
> -		g.Response.File = append(g.Response.File, &plugin.CodeGeneratorResponse_File{
> -			Name:    proto.String(file.goFileName()),
> -			Content: proto.String(g.String()),
> -		})
> -	}
> -}
> -
> -// Run all the plugins associated with the file.
> -func (g *Generator) runPlugins(file *FileDescriptor) {
> -	for _, p := range plugins {
> -		p.Generate(file)
> -	}
> -}
> -
> -// FileOf return the FileDescriptor for this FileDescriptorProto.
> -func (g *Generator) FileOf(fd *descriptor.FileDescriptorProto) *FileDescriptor {
> -	for _, file := range g.allFiles {
> -		if file.FileDescriptorProto == fd {
> -			return file
> -		}
> -	}
> -	g.Fail("could not find file in table:", fd.GetName())
> -	return nil
> -}
> -
> -// Fill the response protocol buffer with the generated output for all the files we're
> -// supposed to generate.
> -func (g *Generator) generate(file *FileDescriptor) {
> -	g.file = g.FileOf(file.FileDescriptorProto)
> -	g.usedPackages = make(map[string]bool)
> -
> -	if g.file.index == 0 {
> -		// For one file in the package, assert version compatibility.
> -		g.P("// This is a compile-time assertion to ensure that this generated file")
> -		g.P("// is compatible with the proto package it is being compiled against.")
> -		g.P("// A compilation error at this line likely means your copy of the")
> -		g.P("// proto package needs to be updated.")
> -		g.P("const _ = ", g.Pkg["proto"], ".ProtoPackageIsVersion", generatedCodeVersion, " // please upgrade the proto package")
> -		g.P()
> -	}
> -	for _, td := range g.file.imp {
> -		g.generateImported(td)
> -	}
> -	for _, enum := range g.file.enum {
> -		g.generateEnum(enum)
> -	}
> -	for _, desc := range g.file.desc {
> -		// Don't generate virtual messages for maps.
> -		if desc.GetOptions().GetMapEntry() {
> -			continue
> -		}
> -		g.generateMessage(desc)
> -	}
> -	for _, ext := range g.file.ext {
> -		g.generateExtension(ext)
> -	}
> -	g.generateInitFunction()
> -
> -	// Run the plugins before the imports so we know which imports are necessary.
> -	g.runPlugins(file)
> -
> -	g.generateFileDescriptor(file)
> -
> -	// Generate header and imports last, though they appear first in the output.
> -	rem := g.Buffer
> -	g.Buffer = new(bytes.Buffer)
> -	g.generateHeader()
> -	g.generateImports()
> -	if !g.writeOutput {
> -		return
> -	}
> -	g.Write(rem.Bytes())
> -
> -	// Reformat generated code.
> -	fset := token.NewFileSet()
> -	raw := g.Bytes()
> -	ast, err := parser.ParseFile(fset, "", g, parser.ParseComments)
> -	if err != nil {
> -		// Print out the bad code with line numbers.
> -		// This should never happen in practice, but it can while changing generated code,
> -		// so consider this a debugging aid.
> -		var src bytes.Buffer
> -		s := bufio.NewScanner(bytes.NewReader(raw))
> -		for line := 1; s.Scan(); line++ {
> -			fmt.Fprintf(&src, "%5d\t%s\n", line, s.Bytes())
> -		}
> -		g.Fail("bad Go source code was generated:", err.Error(), "\n"+src.String())
> -	}
> -	g.Reset()
> -	err = (&printer.Config{Mode: printer.TabIndent | printer.UseSpaces, Tabwidth: 8}).Fprint(g, fset, ast)
> -	if err != nil {
> -		g.Fail("generated Go source code could not be reformatted:", err.Error())
> -	}
> -}
> -
> -// Generate the header, including package definition
> -func (g *Generator) generateHeader() {
> -	g.P("// Code generated by protoc-gen-go. DO NOT EDIT.")
> -	g.P("// source: ", g.file.Name)
> -	g.P()
> -
> -	name := g.file.PackageName()
> -
> -	if g.file.index == 0 {
> -		// Generate package docs for the first file in the package.
> -		g.P("/*")
> -		g.P("Package ", name, " is a generated protocol buffer package.")
> -		g.P()
> -		if loc, ok := g.file.comments[strconv.Itoa(packagePath)]; ok {
> -			// not using g.PrintComments because this is a /* */ comment block.
> -			text := strings.TrimSuffix(loc.GetLeadingComments(), "\n")
> -			for _, line := range strings.Split(text, "\n") {
> -				line = strings.TrimPrefix(line, " ")
> -				// ensure we don't escape from the block comment
> -				line = strings.Replace(line, "*/", "* /", -1)
> -				g.P(line)
> -			}
> -			g.P()
> -		}
> -		var topMsgs []string
> -		g.P("It is generated from these files:")
> -		for _, f := range g.genFiles {
> -			g.P("\t", f.Name)
> -			for _, msg := range f.desc {
> -				if msg.parent != nil {
> -					continue
> -				}
> -				topMsgs = append(topMsgs, CamelCaseSlice(msg.TypeName()))
> -			}
> -		}
> -		g.P()
> -		g.P("It has these top-level messages:")
> -		for _, msg := range topMsgs {
> -			g.P("\t", msg)
> -		}
> -		g.P("*/")
> -	}
> -
> -	g.P("package ", name)
> -	g.P()
> -}
> -
> -// PrintComments prints any comments from the source .proto file.
> -// The path is a comma-separated list of integers.
> -// It returns an indication of whether any comments were printed.
> -// See descriptor.proto for its format.
> -func (g *Generator) PrintComments(path string) bool {
> -	if !g.writeOutput {
> -		return false
> -	}
> -	if loc, ok := g.file.comments[path]; ok {
> -		text := strings.TrimSuffix(loc.GetLeadingComments(), "\n")
> -		for _, line := range strings.Split(text, "\n") {
> -			g.P("// ", strings.TrimPrefix(line, " "))
> -		}
> -		return true
> -	}
> -	return false
> -}
> -
> -func (g *Generator) fileByName(filename string) *FileDescriptor {
> -	return g.allFilesByName[filename]
> -}
> -
> -// weak returns whether the ith import of the current file is a weak import.
> -func (g *Generator) weak(i int32) bool {
> -	for _, j := range g.file.WeakDependency {
> -		if j == i {
> -			return true
> -		}
> -	}
> -	return false
> -}
> -
> -// Generate the imports
> -func (g *Generator) generateImports() {
> -	// We almost always need a proto import.  Rather than computing when we
> -	// do, which is tricky when there's a plugin, just import it and
> -	// reference it later. The same argument applies to the fmt and math packages.
> -	g.P("import " + g.Pkg["proto"] + " " + strconv.Quote(g.ImportPrefix+"github.com/golang/protobuf/proto"))
> -	g.P("import " + g.Pkg["fmt"] + ` "fmt"`)
> -	g.P("import " + g.Pkg["math"] + ` "math"`)
> -	for i, s := range g.file.Dependency {
> -		fd := g.fileByName(s)
> -		// Do not import our own package.
> -		if fd.PackageName() == g.packageName {
> -			continue
> -		}
> -		filename := fd.goFileName()
> -		// By default, import path is the dirname of the Go filename.
> -		importPath := path.Dir(filename)
> -		if substitution, ok := g.ImportMap[s]; ok {
> -			importPath = substitution
> -		}
> -		importPath = g.ImportPrefix + importPath
> -		// Skip weak imports.
> -		if g.weak(int32(i)) {
> -			g.P("// skipping weak import ", fd.PackageName(), " ", strconv.Quote(importPath))
> -			continue
> -		}
> -		// We need to import all the dependencies, even if we don't reference them,
> -		// because other code and tools depend on having the full transitive closure
> -		// of protocol buffer types in the binary.
> -		pname := fd.PackageName()
> -		if _, ok := g.usedPackages[pname]; !ok {
> -			pname = "_"
> -		}
> -		g.P("import ", pname, " ", strconv.Quote(importPath))
> -	}
> -	g.P()
> -	// TODO: may need to worry about uniqueness across plugins
> -	for _, p := range plugins {
> -		p.GenerateImports(g.file)
> -		g.P()
> -	}
> -	g.P("// Reference imports to suppress errors if they are not otherwise used.")
> -	g.P("var _ = ", g.Pkg["proto"], ".Marshal")
> -	g.P("var _ = ", g.Pkg["fmt"], ".Errorf")
> -	g.P("var _ = ", g.Pkg["math"], ".Inf")
> -	g.P()
> -}
> -
> -func (g *Generator) generateImported(id *ImportedDescriptor) {
> -	// Don't generate public import symbols for files that we are generating
> -	// code for, since those symbols will already be in this package.
> -	// We can't simply avoid creating the ImportedDescriptor objects,
> -	// because g.genFiles isn't populated at that stage.
> -	tn := id.TypeName()
> -	sn := tn[len(tn)-1]
> -	df := g.FileOf(id.o.File())
> -	filename := *df.Name
> -	for _, fd := range g.genFiles {
> -		if *fd.Name == filename {
> -			g.P("// Ignoring public import of ", sn, " from ", filename)
> -			g.P()
> -			return
> -		}
> -	}
> -	g.P("// ", sn, " from public import ", filename)
> -	g.usedPackages[df.PackageName()] = true
> -
> -	for _, sym := range df.exported[id.o] {
> -		sym.GenerateAlias(g, df.PackageName())
> -	}
> -
> -	g.P()
> -}
> -
> -// Generate the enum definitions for this EnumDescriptor.
> -func (g *Generator) generateEnum(enum *EnumDescriptor) {
> -	// The full type name
> -	typeName := enum.TypeName()
> -	// The full type name, CamelCased.
> -	ccTypeName := CamelCaseSlice(typeName)
> -	ccPrefix := enum.prefix()
> -
> -	g.PrintComments(enum.path)
> -	g.P("type ", ccTypeName, " int32")
> -	g.file.addExport(enum, enumSymbol{ccTypeName, enum.proto3()})
> -	g.P("const (")
> -	g.In()
> -	for i, e := range enum.Value {
> -		g.PrintComments(fmt.Sprintf("%s,%d,%d", enum.path, enumValuePath, i))
> -
> -		name := ccPrefix + *e.Name
> -		g.P(name, " ", ccTypeName, " = ", e.Number)
> -		g.file.addExport(enum, constOrVarSymbol{name, "const", ccTypeName})
> -	}
> -	g.Out()
> -	g.P(")")
> -	g.P("var ", ccTypeName, "_name = map[int32]string{")
> -	g.In()
> -	generated := make(map[int32]bool) // avoid duplicate values
> -	for _, e := range enum.Value {
> -		duplicate := ""
> -		if _, present := generated[*e.Number]; present {
> -			duplicate = "// Duplicate value: "
> -		}
> -		g.P(duplicate, e.Number, ": ", strconv.Quote(*e.Name), ",")
> -		generated[*e.Number] = true
> -	}
> -	g.Out()
> -	g.P("}")
> -	g.P("var ", ccTypeName, "_value = map[string]int32{")
> -	g.In()
> -	for _, e := range enum.Value {
> -		g.P(strconv.Quote(*e.Name), ": ", e.Number, ",")
> -	}
> -	g.Out()
> -	g.P("}")
> -
> -	if !enum.proto3() {
> -		g.P("func (x ", ccTypeName, ") Enum() *", ccTypeName, " {")
> -		g.In()
> -		g.P("p := new(", ccTypeName, ")")
> -		g.P("*p = x")
> -		g.P("return p")
> -		g.Out()
> -		g.P("}")
> -	}
> -
> -	g.P("func (x ", ccTypeName, ") String() string {")
> -	g.In()
> -	g.P("return ", g.Pkg["proto"], ".EnumName(", ccTypeName, "_name, int32(x))")
> -	g.Out()
> -	g.P("}")
> -
> -	if !enum.proto3() {
> -		g.P("func (x *", ccTypeName, ") UnmarshalJSON(data []byte) error {")
> -		g.In()
> -		g.P("value, err := ", g.Pkg["proto"], ".UnmarshalJSONEnum(", ccTypeName, `_value, data, "`, ccTypeName, `")`)
> -		g.P("if err != nil {")
> -		g.In()
> -		g.P("return err")
> -		g.Out()
> -		g.P("}")
> -		g.P("*x = ", ccTypeName, "(value)")
> -		g.P("return nil")
> -		g.Out()
> -		g.P("}")
> -	}
> -
> -	var indexes []string
> -	for m := enum.parent; m != nil; m = m.parent {
> -		// XXX: skip groups?
> -		indexes = append([]string{strconv.Itoa(m.index)}, indexes...)
> -	}
> -	indexes = append(indexes, strconv.Itoa(enum.index))
> -	g.P("func (", ccTypeName, ") EnumDescriptor() ([]byte, []int) { return ", g.file.VarName(), ", []int{", strings.Join(indexes, ", "), "} }")
> -	if enum.file.GetPackage() == "google.protobuf" && enum.GetName() == "NullValue" {
> -		g.P("func (", ccTypeName, `) XXX_WellKnownType() string { return "`, enum.GetName(), `" }`)
> -	}
> -
> -	g.P()
> -}
> -
> -// The tag is a string like "varint,2,opt,name=fieldname,def=7" that
> -// identifies details of the field for the protocol buffer marshaling and unmarshaling
> -// code.  The fields are:
> -//	wire encoding
> -//	protocol tag number
> -//	opt,req,rep for optional, required, or repeated
> -//	packed whether the encoding is "packed" (optional; repeated primitives only)
> -//	name= the original declared name
> -//	enum= the name of the enum type if it is an enum-typed field.
> -//	proto3 if this field is in a proto3 message
> -//	def= string representation of the default value, if any.
> -// The default value must be in a representation that can be used at run-time
> -// to generate the default value. Thus bools become 0 and 1, for instance.
> -func (g *Generator) goTag(message *Descriptor, field *descriptor.FieldDescriptorProto, wiretype string) string {
> -	optrepreq := ""
> -	switch {
> -	case isOptional(field):
> -		optrepreq = "opt"
> -	case isRequired(field):
> -		optrepreq = "req"
> -	case isRepeated(field):
> -		optrepreq = "rep"
> -	}
> -	var defaultValue string
> -	if dv := field.DefaultValue; dv != nil { // set means an explicit default
> -		defaultValue = *dv
> -		// Some types need tweaking.
> -		switch *field.Type {
> -		case descriptor.FieldDescriptorProto_TYPE_BOOL:
> -			if defaultValue == "true" {
> -				defaultValue = "1"
> -			} else {
> -				defaultValue = "0"
> -			}
> -		case descriptor.FieldDescriptorProto_TYPE_STRING,
> -			descriptor.FieldDescriptorProto_TYPE_BYTES:
> -			// Nothing to do. Quoting is done for the whole tag.
> -		case descriptor.FieldDescriptorProto_TYPE_ENUM:
> -			// For enums we need to provide the integer constant.
> -			obj := g.ObjectNamed(field.GetTypeName())
> -			if id, ok := obj.(*ImportedDescriptor); ok {
> -				// It is an enum that was publicly imported.
> -				// We need the underlying type.
> -				obj = id.o
> -			}
> -			enum, ok := obj.(*EnumDescriptor)
> -			if !ok {
> -				log.Printf("obj is a %T", obj)
> -				if id, ok := obj.(*ImportedDescriptor); ok {
> -					log.Printf("id.o is a %T", id.o)
> -				}
> -				g.Fail("unknown enum type", CamelCaseSlice(obj.TypeName()))
> -			}
> -			defaultValue = enum.integerValueAsString(defaultValue)
> -		}
> -		defaultValue = ",def=" + defaultValue
> -	}
> -	enum := ""
> -	if *field.Type == descriptor.FieldDescriptorProto_TYPE_ENUM {
> -		// We avoid using obj.PackageName(), because we want to use the
> -		// original (proto-world) package name.
> -		obj := g.ObjectNamed(field.GetTypeName())
> -		if id, ok := obj.(*ImportedDescriptor); ok {
> -			obj = id.o
> -		}
> -		enum = ",enum="
> -		if pkg := obj.File().GetPackage(); pkg != "" {
> -			enum += pkg + "."
> -		}
> -		enum += CamelCaseSlice(obj.TypeName())
> -	}
> -	packed := ""
> -	if (field.Options != nil && field.Options.GetPacked()) ||
> -		// Per https://developers.google.com/protocol-buffers/docs/proto3#simple:
> -		// "In proto3, repeated fields of scalar numeric types use packed encoding by default."
> -		(message.proto3() && (field.Options == nil || field.Options.Packed == nil) &&
> -			isRepeated(field) && isScalar(field)) {
> -		packed = ",packed"
> -	}
> -	fieldName := field.GetName()
> -	name := fieldName
> -	if *field.Type == descriptor.FieldDescriptorProto_TYPE_GROUP {
> -		// We must use the type name for groups instead of
> -		// the field name to preserve capitalization.
> -		// type_name in FieldDescriptorProto is fully-qualified,
> -		// but we only want the local part.
> -		name = *field.TypeName
> -		if i := strings.LastIndex(name, "."); i >= 0 {
> -			name = name[i+1:]
> -		}
> -	}
> -	if json := field.GetJsonName(); json != "" && json != name {
> -		// TODO: escaping might be needed, in which case
> -		// perhaps this should be in its own "json" tag.
> -		name += ",json=" + json
> -	}
> -	name = ",name=" + name
> -	if message.proto3() {
> -		// We only need the extra tag for []byte fields;
> -		// no need to add noise for the others.
> -		if *field.Type == descriptor.FieldDescriptorProto_TYPE_BYTES {
> -			name += ",proto3"
> -		}
> -
> -	}
> -	oneof := ""
> -	if field.OneofIndex != nil {
> -		oneof = ",oneof"
> -	}
> -	return strconv.Quote(fmt.Sprintf("%s,%d,%s%s%s%s%s%s",
> -		wiretype,
> -		field.GetNumber(),
> -		optrepreq,
> -		packed,
> -		name,
> -		enum,
> -		oneof,
> -		defaultValue))
> -}
> -
> -func needsStar(typ descriptor.FieldDescriptorProto_Type) bool {
> -	switch typ {
> -	case descriptor.FieldDescriptorProto_TYPE_GROUP:
> -		return false
> -	case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
> -		return false
> -	case descriptor.FieldDescriptorProto_TYPE_BYTES:
> -		return false
> -	}
> -	return true
> -}
> -
> -// TypeName is the printed name appropriate for an item. If the object is in the current file,
> -// TypeName drops the package name and underscores the rest.
> -// Otherwise the object is from another package; and the result is the underscored
> -// package name followed by the item name.
> -// The result always has an initial capital.
> -func (g *Generator) TypeName(obj Object) string {
> -	return g.DefaultPackageName(obj) + CamelCaseSlice(obj.TypeName())
> -}
> -
> -// TypeNameWithPackage is like TypeName, but always includes the package
> -// name even if the object is in our own package.
> -func (g *Generator) TypeNameWithPackage(obj Object) string {
> -	return obj.PackageName() + CamelCaseSlice(obj.TypeName())
> -}
> -
> -// GoType returns a string representing the type name, and the wire type
> -func (g *Generator) GoType(message *Descriptor, field *descriptor.FieldDescriptorProto) (typ string, wire string) {
> -	// TODO: Options.
> -	switch *field.Type {
> -	case descriptor.FieldDescriptorProto_TYPE_DOUBLE:
> -		typ, wire = "float64", "fixed64"
> -	case descriptor.FieldDescriptorProto_TYPE_FLOAT:
> -		typ, wire = "float32", "fixed32"
> -	case descriptor.FieldDescriptorProto_TYPE_INT64:
> -		typ, wire = "int64", "varint"
> -	case descriptor.FieldDescriptorProto_TYPE_UINT64:
> -		typ, wire = "uint64", "varint"
> -	case descriptor.FieldDescriptorProto_TYPE_INT32:
> -		typ, wire = "int32", "varint"
> -	case descriptor.FieldDescriptorProto_TYPE_UINT32:
> -		typ, wire = "uint32", "varint"
> -	case descriptor.FieldDescriptorProto_TYPE_FIXED64:
> -		typ, wire = "uint64", "fixed64"
> -	case descriptor.FieldDescriptorProto_TYPE_FIXED32:
> -		typ, wire = "uint32", "fixed32"
> -	case descriptor.FieldDescriptorProto_TYPE_BOOL:
> -		typ, wire = "bool", "varint"
> -	case descriptor.FieldDescriptorProto_TYPE_STRING:
> -		typ, wire = "string", "bytes"
> -	case descriptor.FieldDescriptorProto_TYPE_GROUP:
> -		desc := g.ObjectNamed(field.GetTypeName())
> -		typ, wire = "*"+g.TypeName(desc), "group"
> -	case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
> -		desc := g.ObjectNamed(field.GetTypeName())
> -		typ, wire = "*"+g.TypeName(desc), "bytes"
> -	case descriptor.FieldDescriptorProto_TYPE_BYTES:
> -		typ, wire = "[]byte", "bytes"
> -	case descriptor.FieldDescriptorProto_TYPE_ENUM:
> -		desc := g.ObjectNamed(field.GetTypeName())
> -		typ, wire = g.TypeName(desc), "varint"
> -	case descriptor.FieldDescriptorProto_TYPE_SFIXED32:
> -		typ, wire = "int32", "fixed32"
> -	case descriptor.FieldDescriptorProto_TYPE_SFIXED64:
> -		typ, wire = "int64", "fixed64"
> -	case descriptor.FieldDescriptorProto_TYPE_SINT32:
> -		typ, wire = "int32", "zigzag32"
> -	case descriptor.FieldDescriptorProto_TYPE_SINT64:
> -		typ, wire = "int64", "zigzag64"
> -	default:
> -		g.Fail("unknown type for", field.GetName())
> -	}
> -	if isRepeated(field) {
> -		typ = "[]" + typ
> -	} else if message != nil && message.proto3() {
> -		return
> -	} else if field.OneofIndex != nil && message != nil {
> -		return
> -	} else if needsStar(*field.Type) {
> -		typ = "*" + typ
> -	}
> -	return
> -}
> -
> -func (g *Generator) RecordTypeUse(t string) {
> -	if obj, ok := g.typeNameToObject[t]; ok {
> -		// Call ObjectNamed to get the true object to record the use.
> -		obj = g.ObjectNamed(t)
> -		g.usedPackages[obj.PackageName()] = true
> -	}
> -}
> -
> -// Method names that may be generated.  Fields with these names get an
> -// underscore appended. Any change to this set is a potential incompatible
> -// API change because it changes generated field names.
> -var methodNames = [...]string{
> -	"Reset",
> -	"String",
> -	"ProtoMessage",
> -	"Marshal",
> -	"Unmarshal",
> -	"ExtensionRangeArray",
> -	"ExtensionMap",
> -	"Descriptor",
> -}
> -
> -// Names of messages in the `google.protobuf` package for which
> -// we will generate XXX_WellKnownType methods.
> -var wellKnownTypes = map[string]bool{
> -	"Any":       true,
> -	"Duration":  true,
> -	"Empty":     true,
> -	"Struct":    true,
> -	"Timestamp": true,
> -
> -	"Value":       true,
> -	"ListValue":   true,
> -	"DoubleValue": true,
> -	"FloatValue":  true,
> -	"Int64Value":  true,
> -	"UInt64Value": true,
> -	"Int32Value":  true,
> -	"UInt32Value": true,
> -	"BoolValue":   true,
> -	"StringValue": true,
> -	"BytesValue":  true,
> -}
> -
> -// Generate the type and default constant definitions for this Descriptor.
> -func (g *Generator) generateMessage(message *Descriptor) {
> -	// The full type name
> -	typeName := message.TypeName()
> -	// The full type name, CamelCased.
> -	ccTypeName := CamelCaseSlice(typeName)
> -
> -	usedNames := make(map[string]bool)
> -	for _, n := range methodNames {
> -		usedNames[n] = true
> -	}
> -	fieldNames := make(map[*descriptor.FieldDescriptorProto]string)
> -	fieldGetterNames := make(map[*descriptor.FieldDescriptorProto]string)
> -	fieldTypes := make(map[*descriptor.FieldDescriptorProto]string)
> -	mapFieldTypes := make(map[*descriptor.FieldDescriptorProto]string)
> -
> -	oneofFieldName := make(map[int32]string)                           // indexed by oneof_index field of FieldDescriptorProto
> -	oneofDisc := make(map[int32]string)                                // name of discriminator method
> -	oneofTypeName := make(map[*descriptor.FieldDescriptorProto]string) // without star
> -	oneofInsertPoints := make(map[int32]int)                           // oneof_index => offset of g.Buffer
> -
> -	g.PrintComments(message.path)
> -	g.P("type ", ccTypeName, " struct {")
> -	g.In()
> -
> -	// allocNames finds a conflict-free variation of the given strings,
> -	// consistently mutating their suffixes.
> -	// It returns the same number of strings.
> -	allocNames := func(ns ...string) []string {
> -	Loop:
> -		for {
> -			for _, n := range ns {
> -				if usedNames[n] {
> -					for i := range ns {
> -						ns[i] += "_"
> -					}
> -					continue Loop
> -				}
> -			}
> -			for _, n := range ns {
> -				usedNames[n] = true
> -			}
> -			return ns
> -		}
> -	}
> -
> -	for i, field := range message.Field {
> -		// Allocate the getter and the field at the same time so name
> -		// collisions create field/method consistent names.
> -		// TODO: This allocation occurs based on the order of the fields
> -		// in the proto file, meaning that a change in the field
> -		// ordering can change generated Method/Field names.
> -		base := CamelCase(*field.Name)
> -		ns := allocNames(base, "Get"+base)
> -		fieldName, fieldGetterName := ns[0], ns[1]
> -		typename, wiretype := g.GoType(message, field)
> -		jsonName := *field.Name
> -		tag := fmt.Sprintf("protobuf:%s json:%q", g.goTag(message, field, wiretype), jsonName+",omitempty")
> -
> -		fieldNames[field] = fieldName
> -		fieldGetterNames[field] = fieldGetterName
> -
> -		oneof := field.OneofIndex != nil
> -		if oneof && oneofFieldName[*field.OneofIndex] == "" {
> -			odp := message.OneofDecl[int(*field.OneofIndex)]
> -			fname := allocNames(CamelCase(odp.GetName()))[0]
> -
> -			// This is the first field of a oneof we haven't seen before.
> -			// Generate the union field.
> -			com := g.PrintComments(fmt.Sprintf("%s,%d,%d", message.path, messageOneofPath, *field.OneofIndex))
> -			if com {
> -				g.P("//")
> -			}
> -			g.P("// Types that are valid to be assigned to ", fname, ":")
> -			// Generate the rest of this comment later,
> -			// when we've computed any disambiguation.
> -			oneofInsertPoints[*field.OneofIndex] = g.Buffer.Len()
> -
> -			dname := "is" + ccTypeName + "_" + fname
> -			oneofFieldName[*field.OneofIndex] = fname
> -			oneofDisc[*field.OneofIndex] = dname
> -			tag := `protobuf_oneof:"` + odp.GetName() + `"`
> -			g.P(fname, " ", dname, " `", tag, "`")
> -		}
> -
> -		if *field.Type == descriptor.FieldDescriptorProto_TYPE_MESSAGE {
> -			desc := g.ObjectNamed(field.GetTypeName())
> -			if d, ok := desc.(*Descriptor); ok && d.GetOptions().GetMapEntry() {
> -				// Figure out the Go types and tags for the key and value types.
> -				keyField, valField := d.Field[0], d.Field[1]
> -				keyType, keyWire := g.GoType(d, keyField)
> -				valType, valWire := g.GoType(d, valField)
> -				keyTag, valTag := g.goTag(d, keyField, keyWire), g.goTag(d, valField, valWire)
> -
> -				// We don't use stars, except for message-typed values.
> -				// Message and enum types are the only two possibly foreign types used in maps,
> -				// so record their use. They are not permitted as map keys.
> -				keyType = strings.TrimPrefix(keyType, "*")
> -				switch *valField.Type {
> -				case descriptor.FieldDescriptorProto_TYPE_ENUM:
> -					valType = strings.TrimPrefix(valType, "*")
> -					g.RecordTypeUse(valField.GetTypeName())
> -				case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
> -					g.RecordTypeUse(valField.GetTypeName())
> -				default:
> -					valType = strings.TrimPrefix(valType, "*")
> -				}
> -
> -				typename = fmt.Sprintf("map[%s]%s", keyType, valType)
> -				mapFieldTypes[field] = typename // record for the getter generation
> -
> -				tag += fmt.Sprintf(" protobuf_key:%s protobuf_val:%s", keyTag, valTag)
> -			}
> -		}
> -
> -		fieldTypes[field] = typename
> -
> -		if oneof {
> -			tname := ccTypeName + "_" + fieldName
> -			// It is possible for this to collide with a message or enum
> -			// nested in this message. Check for collisions.
> -			for {
> -				ok := true
> -				for _, desc := range message.nested {
> -					if CamelCaseSlice(desc.TypeName()) == tname {
> -						ok = false
> -						break
> -					}
> -				}
> -				for _, enum := range message.enums {
> -					if CamelCaseSlice(enum.TypeName()) == tname {
> -						ok = false
> -						break
> -					}
> -				}
> -				if !ok {
> -					tname += "_"
> -					continue
> -				}
> -				break
> -			}
> -
> -			oneofTypeName[field] = tname
> -			continue
> -		}
> -
> -		g.PrintComments(fmt.Sprintf("%s,%d,%d", message.path, messageFieldPath, i))
> -		g.P(fieldName, "\t", typename, "\t`", tag, "`")
> -		g.RecordTypeUse(field.GetTypeName())
> -	}
> -	if len(message.ExtensionRange) > 0 {
> -		g.P(g.Pkg["proto"], ".XXX_InternalExtensions `json:\"-\"`")
> -	}
> -	if !message.proto3() {
> -		g.P("XXX_unrecognized\t[]byte `json:\"-\"`")
> -	}
> -	g.Out()
> -	g.P("}")
> -
> -	// Update g.Buffer to list valid oneof types.
> -	// We do this down here, after we've disambiguated the oneof type names.
> -	// We go in reverse order of insertion point to avoid invalidating offsets.
> -	for oi := int32(len(message.OneofDecl)); oi >= 0; oi-- {
> -		ip := oneofInsertPoints[oi]
> -		all := g.Buffer.Bytes()
> -		rem := all[ip:]
> -		g.Buffer = bytes.NewBuffer(all[:ip:ip]) // set cap so we don't scribble on rem
> -		for _, field := range message.Field {
> -			if field.OneofIndex == nil || *field.OneofIndex != oi {
> -				continue
> -			}
> -			g.P("//\t*", oneofTypeName[field])
> -		}
> -		g.Buffer.Write(rem)
> -	}
> -
> -	// Reset, String and ProtoMessage methods.
> -	g.P("func (m *", ccTypeName, ") Reset() { *m = ", ccTypeName, "{} }")
> -	g.P("func (m *", ccTypeName, ") String() string { return ", g.Pkg["proto"], ".CompactTextString(m) }")
> -	g.P("func (*", ccTypeName, ") ProtoMessage() {}")
> -	var indexes []string
> -	for m := message; m != nil; m = m.parent {
> -		indexes = append([]string{strconv.Itoa(m.index)}, indexes...)
> -	}
> -	g.P("func (*", ccTypeName, ") Descriptor() ([]byte, []int) { return ", g.file.VarName(), ", []int{", strings.Join(indexes, ", "), "} }")
> -	// TODO: Revisit the decision to use a XXX_WellKnownType method
> -	// if we change proto.MessageName to work with multiple equivalents.
> -	if message.file.GetPackage() == "google.protobuf" && wellKnownTypes[message.GetName()] {
> -		g.P("func (*", ccTypeName, `) XXX_WellKnownType() string { return "`, message.GetName(), `" }`)
> -	}
> -
> -	// Extension support methods
> -	var hasExtensions, isMessageSet bool
> -	if len(message.ExtensionRange) > 0 {
> -		hasExtensions = true
> -		// message_set_wire_format only makes sense when extensions are defined.
> -		if opts := message.Options; opts != nil && opts.GetMessageSetWireFormat() {
> -			isMessageSet = true
> -			g.P()
> -			g.P("func (m *", ccTypeName, ") Marshal() ([]byte, error) {")
> -			g.In()
> -			g.P("return ", g.Pkg["proto"], ".MarshalMessageSet(&m.XXX_InternalExtensions)")
> -			g.Out()
> -			g.P("}")
> -			g.P("func (m *", ccTypeName, ") Unmarshal(buf []byte) error {")
> -			g.In()
> -			g.P("return ", g.Pkg["proto"], ".UnmarshalMessageSet(buf, &m.XXX_InternalExtensions)")
> -			g.Out()
> -			g.P("}")
> -			g.P("func (m *", ccTypeName, ") MarshalJSON() ([]byte, error) {")
> -			g.In()
> -			g.P("return ", g.Pkg["proto"], ".MarshalMessageSetJSON(&m.XXX_InternalExtensions)")
> -			g.Out()
> -			g.P("}")
> -			g.P("func (m *", ccTypeName, ") UnmarshalJSON(buf []byte) error {")
> -			g.In()
> -			g.P("return ", g.Pkg["proto"], ".UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions)")
> -			g.Out()
> -			g.P("}")
> -			g.P("// ensure ", ccTypeName, " satisfies proto.Marshaler and proto.Unmarshaler")
> -			g.P("var _ ", g.Pkg["proto"], ".Marshaler = (*", ccTypeName, ")(nil)")
> -			g.P("var _ ", g.Pkg["proto"], ".Unmarshaler = (*", ccTypeName, ")(nil)")
> -		}
> -
> -		g.P()
> -		g.P("var extRange_", ccTypeName, " = []", g.Pkg["proto"], ".ExtensionRange{")
> -		g.In()
> -		for _, r := range message.ExtensionRange {
> -			end := fmt.Sprint(*r.End - 1) // make range inclusive on both ends
> -			g.P("{", r.Start, ", ", end, "},")
> -		}
> -		g.Out()
> -		g.P("}")
> -		g.P("func (*", ccTypeName, ") ExtensionRangeArray() []", g.Pkg["proto"], ".ExtensionRange {")
> -		g.In()
> -		g.P("return extRange_", ccTypeName)
> -		g.Out()
> -		g.P("}")
> -	}
> -
> -	// Default constants
> -	defNames := make(map[*descriptor.FieldDescriptorProto]string)
> -	for _, field := range message.Field {
> -		def := field.GetDefaultValue()
> -		if def == "" {
> -			continue
> -		}
> -		fieldname := "Default_" + ccTypeName + "_" + CamelCase(*field.Name)
> -		defNames[field] = fieldname
> -		typename, _ := g.GoType(message, field)
> -		if typename[0] == '*' {
> -			typename = typename[1:]
> -		}
> -		kind := "const "
> -		switch {
> -		case typename == "bool":
> -		case typename == "string":
> -			def = strconv.Quote(def)
> -		case typename == "[]byte":
> -			def = "[]byte(" + strconv.Quote(def) + ")"
> -			kind = "var "
> -		case def == "inf", def == "-inf", def == "nan":
> -			// These names are known to, and defined by, the protocol language.
> -			switch def {
> -			case "inf":
> -				def = "math.Inf(1)"
> -			case "-inf":
> -				def = "math.Inf(-1)"
> -			case "nan":
> -				def = "math.NaN()"
> -			}
> -			if *field.Type == descriptor.FieldDescriptorProto_TYPE_FLOAT {
> -				def = "float32(" + def + ")"
> -			}
> -			kind = "var "
> -		case *field.Type == descriptor.FieldDescriptorProto_TYPE_ENUM:
> -			// Must be an enum.  Need to construct the prefixed name.
> -			obj := g.ObjectNamed(field.GetTypeName())
> -			var enum *EnumDescriptor
> -			if id, ok := obj.(*ImportedDescriptor); ok {
> -				// The enum type has been publicly imported.
> -				enum, _ = id.o.(*EnumDescriptor)
> -			} else {
> -				enum, _ = obj.(*EnumDescriptor)
> -			}
> -			if enum == nil {
> -				log.Printf("don't know how to generate constant for %s", fieldname)
> -				continue
> -			}
> -			def = g.DefaultPackageName(obj) + enum.prefix() + def
> -		}
> -		g.P(kind, fieldname, " ", typename, " = ", def)
> -		g.file.addExport(message, constOrVarSymbol{fieldname, kind, ""})
> -	}
> -	g.P()
> -
> -	// Oneof per-field types, discriminants and getters.
> -	//
> -	// Generate unexported named types for the discriminant interfaces.
> -	// We shouldn't have to do this, but there was (~19 Aug 2015) a compiler/linker bug
> -	// that was triggered by using anonymous interfaces here.
> -	// TODO: Revisit this and consider reverting back to anonymous interfaces.
> -	for oi := range message.OneofDecl {
> -		dname := oneofDisc[int32(oi)]
> -		g.P("type ", dname, " interface { ", dname, "() }")
> -	}
> -	g.P()
> -	for _, field := range message.Field {
> -		if field.OneofIndex == nil {
> -			continue
> -		}
> -		_, wiretype := g.GoType(message, field)
> -		tag := "protobuf:" + g.goTag(message, field, wiretype)
> -		g.P("type ", oneofTypeName[field], " struct{ ", fieldNames[field], " ", fieldTypes[field], " `", tag, "` }")
> -		g.RecordTypeUse(field.GetTypeName())
> -	}
> -	g.P()
> -	for _, field := range message.Field {
> -		if field.OneofIndex == nil {
> -			continue
> -		}
> -		g.P("func (*", oneofTypeName[field], ") ", oneofDisc[*field.OneofIndex], "() {}")
> -	}
> -	g.P()
> -	for oi := range message.OneofDecl {
> -		fname := oneofFieldName[int32(oi)]
> -		g.P("func (m *", ccTypeName, ") Get", fname, "() ", oneofDisc[int32(oi)], " {")
> -		g.P("if m != nil { return m.", fname, " }")
> -		g.P("return nil")
> -		g.P("}")
> -	}
> -	g.P()
> -
> -	// Field getters
> -	var getters []getterSymbol
> -	for _, field := range message.Field {
> -		oneof := field.OneofIndex != nil
> -
> -		fname := fieldNames[field]
> -		typename, _ := g.GoType(message, field)
> -		if t, ok := mapFieldTypes[field]; ok {
> -			typename = t
> -		}
> -		mname := fieldGetterNames[field]
> -		star := ""
> -		if needsStar(*field.Type) && typename[0] == '*' {
> -			typename = typename[1:]
> -			star = "*"
> -		}
> -
> -		// Only export getter symbols for basic types,
> -		// and for messages and enums in the same package.
> -		// Groups are not exported.
> -		// Foreign types can't be hoisted through a public import because
> -		// the importer may not already be importing the defining .proto.
> -		// As an example, imagine we have an import tree like this:
> -		//   A.proto -> B.proto -> C.proto
> -		// If A publicly imports B, we need to generate the getters from B in A's output,
> -		// but if one such getter returns something from C then we cannot do that
> -		// because A is not importing C already.
> -		var getter, genType bool
> -		switch *field.Type {
> -		case descriptor.FieldDescriptorProto_TYPE_GROUP:
> -			getter = false
> -		case descriptor.FieldDescriptorProto_TYPE_MESSAGE, descriptor.FieldDescriptorProto_TYPE_ENUM:
> -			// Only export getter if its return type is in this package.
> -			getter = g.ObjectNamed(field.GetTypeName()).PackageName() == message.PackageName()
> -			genType = true
> -		default:
> -			getter = true
> -		}
> -		if getter {
> -			getters = append(getters, getterSymbol{
> -				name:     mname,
> -				typ:      typename,
> -				typeName: field.GetTypeName(),
> -				genType:  genType,
> -			})
> -		}
> -
> -		g.P("func (m *", ccTypeName, ") "+mname+"() "+typename+" {")
> -		g.In()
> -		def, hasDef := defNames[field]
> -		typeDefaultIsNil := false // whether this field type's default value is a literal nil unless specified
> -		switch *field.Type {
> -		case descriptor.FieldDescriptorProto_TYPE_BYTES:
> -			typeDefaultIsNil = !hasDef
> -		case descriptor.FieldDescriptorProto_TYPE_GROUP, descriptor.FieldDescriptorProto_TYPE_MESSAGE:
> -			typeDefaultIsNil = true
> -		}
> -		if isRepeated(field) {
> -			typeDefaultIsNil = true
> -		}
> -		if typeDefaultIsNil && !oneof {
> -			// A bytes field with no explicit default needs less generated code,
> -			// as does a message or group field, or a repeated field.
> -			g.P("if m != nil {")
> -			g.In()
> -			g.P("return m." + fname)
> -			g.Out()
> -			g.P("}")
> -			g.P("return nil")
> -			g.Out()
> -			g.P("}")
> -			g.P()
> -			continue
> -		}
> -		if !oneof {
> -			if message.proto3() {
> -				g.P("if m != nil {")
> -			} else {
> -				g.P("if m != nil && m." + fname + " != nil {")
> -			}
> -			g.In()
> -			g.P("return " + star + "m." + fname)
> -			g.Out()
> -			g.P("}")
> -		} else {
> -			uname := oneofFieldName[*field.OneofIndex]
> -			tname := oneofTypeName[field]
> -			g.P("if x, ok := m.Get", uname, "().(*", tname, "); ok {")
> -			g.P("return x.", fname)
> -			g.P("}")
> -		}
> -		if hasDef {
> -			if *field.Type != descriptor.FieldDescriptorProto_TYPE_BYTES {
> -				g.P("return " + def)
> -			} else {
> -				// The default is a []byte var.
> -				// Make a copy when returning it to be safe.
> -				g.P("return append([]byte(nil), ", def, "...)")
> -			}
> -		} else {
> -			switch *field.Type {
> -			case descriptor.FieldDescriptorProto_TYPE_BOOL:
> -				g.P("return false")
> -			case descriptor.FieldDescriptorProto_TYPE_STRING:
> -				g.P(`return ""`)
> -			case descriptor.FieldDescriptorProto_TYPE_GROUP,
> -				descriptor.FieldDescriptorProto_TYPE_MESSAGE,
> -				descriptor.FieldDescriptorProto_TYPE_BYTES:
> -				// This is only possible for oneof fields.
> -				g.P("return nil")
> -			case descriptor.FieldDescriptorProto_TYPE_ENUM:
> -				// The default default for an enum is the first value in the enum,
> -				// not zero.
> -				obj := g.ObjectNamed(field.GetTypeName())
> -				var enum *EnumDescriptor
> -				if id, ok := obj.(*ImportedDescriptor); ok {
> -					// The enum type has been publicly imported.
> -					enum, _ = id.o.(*EnumDescriptor)
> -				} else {
> -					enum, _ = obj.(*EnumDescriptor)
> -				}
> -				if enum == nil {
> -					log.Printf("don't know how to generate getter for %s", field.GetName())
> -					continue
> -				}
> -				if len(enum.Value) == 0 {
> -					g.P("return 0 // empty enum")
> -				} else {
> -					first := enum.Value[0].GetName()
> -					g.P("return ", g.DefaultPackageName(obj)+enum.prefix()+first)
> -				}
> -			default:
> -				g.P("return 0")
> -			}
> -		}
> -		g.Out()
> -		g.P("}")
> -		g.P()
> -	}
> -
> -	if !message.group {
> -		ms := &messageSymbol{
> -			sym:           ccTypeName,
> -			hasExtensions: hasExtensions,
> -			isMessageSet:  isMessageSet,
> -			hasOneof:      len(message.OneofDecl) > 0,
> -			getters:       getters,
> -		}
> -		g.file.addExport(message, ms)
> -	}
> -
> -	// Oneof functions
> -	if len(message.OneofDecl) > 0 {
> -		fieldWire := make(map[*descriptor.FieldDescriptorProto]string)
> -
> -		// method
> -		enc := "_" + ccTypeName + "_OneofMarshaler"
> -		dec := "_" + ccTypeName + "_OneofUnmarshaler"
> -		size := "_" + ccTypeName + "_OneofSizer"
> -		encSig := "(msg " + g.Pkg["proto"] + ".Message, b *" + g.Pkg["proto"] + ".Buffer) error"
> -		decSig := "(msg " + g.Pkg["proto"] + ".Message, tag, wire int, b *" + g.Pkg["proto"] + ".Buffer) (bool, error)"
> -		sizeSig := "(msg " + g.Pkg["proto"] + ".Message) (n int)"
> -
> -		g.P("// XXX_OneofFuncs is for the internal use of the proto package.")
> -		g.P("func (*", ccTypeName, ") XXX_OneofFuncs() (func", encSig, ", func", decSig, ", func", sizeSig, ", []interface{}) {")
> -		g.P("return ", enc, ", ", dec, ", ", size, ", []interface{}{")
> -		for _, field := range message.Field {
> -			if field.OneofIndex == nil {
> -				continue
> -			}
> -			g.P("(*", oneofTypeName[field], ")(nil),")
> -		}
> -		g.P("}")
> -		g.P("}")
> -		g.P()
> -
> -		// marshaler
> -		g.P("func ", enc, encSig, " {")
> -		g.P("m := msg.(*", ccTypeName, ")")
> -		for oi, odp := range message.OneofDecl {
> -			g.P("// ", odp.GetName())
> -			fname := oneofFieldName[int32(oi)]
> -			g.P("switch x := m.", fname, ".(type) {")
> -			for _, field := range message.Field {
> -				if field.OneofIndex == nil || int(*field.OneofIndex) != oi {
> -					continue
> -				}
> -				g.P("case *", oneofTypeName[field], ":")
> -				var wire, pre, post string
> -				val := "x." + fieldNames[field] // overridden for TYPE_BOOL
> -				canFail := false                // only TYPE_MESSAGE and TYPE_GROUP can fail
> -				switch *field.Type {
> -				case descriptor.FieldDescriptorProto_TYPE_DOUBLE:
> -					wire = "WireFixed64"
> -					pre = "b.EncodeFixed64(" + g.Pkg["math"] + ".Float64bits("
> -					post = "))"
> -				case descriptor.FieldDescriptorProto_TYPE_FLOAT:
> -					wire = "WireFixed32"
> -					pre = "b.EncodeFixed32(uint64(" + g.Pkg["math"] + ".Float32bits("
> -					post = ")))"
> -				case descriptor.FieldDescriptorProto_TYPE_INT64,
> -					descriptor.FieldDescriptorProto_TYPE_UINT64:
> -					wire = "WireVarint"
> -					pre, post = "b.EncodeVarint(uint64(", "))"
> -				case descriptor.FieldDescriptorProto_TYPE_INT32,
> -					descriptor.FieldDescriptorProto_TYPE_UINT32,
> -					descriptor.FieldDescriptorProto_TYPE_ENUM:
> -					wire = "WireVarint"
> -					pre, post = "b.EncodeVarint(uint64(", "))"
> -				case descriptor.FieldDescriptorProto_TYPE_FIXED64,
> -					descriptor.FieldDescriptorProto_TYPE_SFIXED64:
> -					wire = "WireFixed64"
> -					pre, post = "b.EncodeFixed64(uint64(", "))"
> -				case descriptor.FieldDescriptorProto_TYPE_FIXED32,
> -					descriptor.FieldDescriptorProto_TYPE_SFIXED32:
> -					wire = "WireFixed32"
> -					pre, post = "b.EncodeFixed32(uint64(", "))"
> -				case descriptor.FieldDescriptorProto_TYPE_BOOL:
> -					// bool needs special handling.
> -					g.P("t := uint64(0)")
> -					g.P("if ", val, " { t = 1 }")
> -					val = "t"
> -					wire = "WireVarint"
> -					pre, post = "b.EncodeVarint(", ")"
> -				case descriptor.FieldDescriptorProto_TYPE_STRING:
> -					wire = "WireBytes"
> -					pre, post = "b.EncodeStringBytes(", ")"
> -				case descriptor.FieldDescriptorProto_TYPE_GROUP:
> -					wire = "WireStartGroup"
> -					pre, post = "b.Marshal(", ")"
> -					canFail = true
> -				case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
> -					wire = "WireBytes"
> -					pre, post = "b.EncodeMessage(", ")"
> -					canFail = true
> -				case descriptor.FieldDescriptorProto_TYPE_BYTES:
> -					wire = "WireBytes"
> -					pre, post = "b.EncodeRawBytes(", ")"
> -				case descriptor.FieldDescriptorProto_TYPE_SINT32:
> -					wire = "WireVarint"
> -					pre, post = "b.EncodeZigzag32(uint64(", "))"
> -				case descriptor.FieldDescriptorProto_TYPE_SINT64:
> -					wire = "WireVarint"
> -					pre, post = "b.EncodeZigzag64(uint64(", "))"
> -				default:
> -					g.Fail("unhandled oneof field type ", field.Type.String())
> -				}
> -				fieldWire[field] = wire
> -				g.P("b.EncodeVarint(", field.Number, "<<3|", g.Pkg["proto"], ".", wire, ")")
> -				if !canFail {
> -					g.P(pre, val, post)
> -				} else {
> -					g.P("if err := ", pre, val, post, "; err != nil {")
> -					g.P("return err")
> -					g.P("}")
> -				}
> -				if *field.Type == descriptor.FieldDescriptorProto_TYPE_GROUP {
> -					g.P("b.EncodeVarint(", field.Number, "<<3|", g.Pkg["proto"], ".WireEndGroup)")
> -				}
> -			}
> -			g.P("case nil:")
> -			g.P("default: return ", g.Pkg["fmt"], `.Errorf("`, ccTypeName, ".", fname, ` has unexpected type %T", x)`)
> -			g.P("}")
> -		}
> -		g.P("return nil")
> -		g.P("}")
> -		g.P()
> -
> -		// unmarshaler
> -		g.P("func ", dec, decSig, " {")
> -		g.P("m := msg.(*", ccTypeName, ")")
> -		g.P("switch tag {")
> -		for _, field := range message.Field {
> -			if field.OneofIndex == nil {
> -				continue
> -			}
> -			odp := message.OneofDecl[int(*field.OneofIndex)]
> -			g.P("case ", field.Number, ": // ", odp.GetName(), ".", *field.Name)
> -			g.P("if wire != ", g.Pkg["proto"], ".", fieldWire[field], " {")
> -			g.P("return true, ", g.Pkg["proto"], ".ErrInternalBadWireType")
> -			g.P("}")
> -			lhs := "x, err" // overridden for TYPE_MESSAGE and TYPE_GROUP
> -			var dec, cast, cast2 string
> -			switch *field.Type {
> -			case descriptor.FieldDescriptorProto_TYPE_DOUBLE:
> -				dec, cast = "b.DecodeFixed64()", g.Pkg["math"]+".Float64frombits"
> -			case descriptor.FieldDescriptorProto_TYPE_FLOAT:
> -				dec, cast, cast2 = "b.DecodeFixed32()", "uint32", g.Pkg["math"]+".Float32frombits"
> -			case descriptor.FieldDescriptorProto_TYPE_INT64:
> -				dec, cast = "b.DecodeVarint()", "int64"
> -			case descriptor.FieldDescriptorProto_TYPE_UINT64:
> -				dec = "b.DecodeVarint()"
> -			case descriptor.FieldDescriptorProto_TYPE_INT32:
> -				dec, cast = "b.DecodeVarint()", "int32"
> -			case descriptor.FieldDescriptorProto_TYPE_FIXED64:
> -				dec = "b.DecodeFixed64()"
> -			case descriptor.FieldDescriptorProto_TYPE_FIXED32:
> -				dec, cast = "b.DecodeFixed32()", "uint32"
> -			case descriptor.FieldDescriptorProto_TYPE_BOOL:
> -				dec = "b.DecodeVarint()"
> -				// handled specially below
> -			case descriptor.FieldDescriptorProto_TYPE_STRING:
> -				dec = "b.DecodeStringBytes()"
> -			case descriptor.FieldDescriptorProto_TYPE_GROUP:
> -				g.P("msg := new(", fieldTypes[field][1:], ")") // drop star
> -				lhs = "err"
> -				dec = "b.DecodeGroup(msg)"
> -				// handled specially below
> -			case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
> -				g.P("msg := new(", fieldTypes[field][1:], ")") // drop star
> -				lhs = "err"
> -				dec = "b.DecodeMessage(msg)"
> -				// handled specially below
> -			case descriptor.FieldDescriptorProto_TYPE_BYTES:
> -				dec = "b.DecodeRawBytes(true)"
> -			case descriptor.FieldDescriptorProto_TYPE_UINT32:
> -				dec, cast = "b.DecodeVarint()", "uint32"
> -			case descriptor.FieldDescriptorProto_TYPE_ENUM:
> -				dec, cast = "b.DecodeVarint()", fieldTypes[field]
> -			case descriptor.FieldDescriptorProto_TYPE_SFIXED32:
> -				dec, cast = "b.DecodeFixed32()", "int32"
> -			case descriptor.FieldDescriptorProto_TYPE_SFIXED64:
> -				dec, cast = "b.DecodeFixed64()", "int64"
> -			case descriptor.FieldDescriptorProto_TYPE_SINT32:
> -				dec, cast = "b.DecodeZigzag32()", "int32"
> -			case descriptor.FieldDescriptorProto_TYPE_SINT64:
> -				dec, cast = "b.DecodeZigzag64()", "int64"
> -			default:
> -				g.Fail("unhandled oneof field type ", field.Type.String())
> -			}
> -			g.P(lhs, " := ", dec)
> -			val := "x"
> -			if cast != "" {
> -				val = cast + "(" + val + ")"
> -			}
> -			if cast2 != "" {
> -				val = cast2 + "(" + val + ")"
> -			}
> -			switch *field.Type {
> -			case descriptor.FieldDescriptorProto_TYPE_BOOL:
> -				val += " != 0"
> -			case descriptor.FieldDescriptorProto_TYPE_GROUP,
> -				descriptor.FieldDescriptorProto_TYPE_MESSAGE:
> -				val = "msg"
> -			}
> -			g.P("m.", oneofFieldName[*field.OneofIndex], " = &", oneofTypeName[field], "{", val, "}")
> -			g.P("return true, err")
> -		}
> -		g.P("default: return false, nil")
> -		g.P("}")
> -		g.P("}")
> -		g.P()
> -
> -		// sizer
> -		g.P("func ", size, sizeSig, " {")
> -		g.P("m := msg.(*", ccTypeName, ")")
> -		for oi, odp := range message.OneofDecl {
> -			g.P("// ", odp.GetName())
> -			fname := oneofFieldName[int32(oi)]
> -			g.P("switch x := m.", fname, ".(type) {")
> -			for _, field := range message.Field {
> -				if field.OneofIndex == nil || int(*field.OneofIndex) != oi {
> -					continue
> -				}
> -				g.P("case *", oneofTypeName[field], ":")
> -				val := "x." + fieldNames[field]
> -				var wire, varint, fixed string
> -				switch *field.Type {
> -				case descriptor.FieldDescriptorProto_TYPE_DOUBLE:
> -					wire = "WireFixed64"
> -					fixed = "8"
> -				case descriptor.FieldDescriptorProto_TYPE_FLOAT:
> -					wire = "WireFixed32"
> -					fixed = "4"
> -				case descriptor.FieldDescriptorProto_TYPE_INT64,
> -					descriptor.FieldDescriptorProto_TYPE_UINT64,
> -					descriptor.FieldDescriptorProto_TYPE_INT32,
> -					descriptor.FieldDescriptorProto_TYPE_UINT32,
> -					descriptor.FieldDescriptorProto_TYPE_ENUM:
> -					wire = "WireVarint"
> -					varint = val
> -				case descriptor.FieldDescriptorProto_TYPE_FIXED64,
> -					descriptor.FieldDescriptorProto_TYPE_SFIXED64:
> -					wire = "WireFixed64"
> -					fixed = "8"
> -				case descriptor.FieldDescriptorProto_TYPE_FIXED32,
> -					descriptor.FieldDescriptorProto_TYPE_SFIXED32:
> -					wire = "WireFixed32"
> -					fixed = "4"
> -				case descriptor.FieldDescriptorProto_TYPE_BOOL:
> -					wire = "WireVarint"
> -					fixed = "1"
> -				case descriptor.FieldDescriptorProto_TYPE_STRING:
> -					wire = "WireBytes"
> -					fixed = "len(" + val + ")"
> -					varint = fixed
> -				case descriptor.FieldDescriptorProto_TYPE_GROUP:
> -					wire = "WireStartGroup"
> -					fixed = g.Pkg["proto"] + ".Size(" + val + ")"
> -				case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
> -					wire = "WireBytes"
> -					g.P("s := ", g.Pkg["proto"], ".Size(", val, ")")
> -					fixed = "s"
> -					varint = fixed
> -				case descriptor.FieldDescriptorProto_TYPE_BYTES:
> -					wire = "WireBytes"
> -					fixed = "len(" + val + ")"
> -					varint = fixed
> -				case descriptor.FieldDescriptorProto_TYPE_SINT32:
> -					wire = "WireVarint"
> -					varint = "(uint32(" + val + ") << 1) ^ uint32((int32(" + val + ") >> 31))"
> -				case descriptor.FieldDescriptorProto_TYPE_SINT64:
> -					wire = "WireVarint"
> -					varint = "uint64(" + val + " << 1) ^ uint64((int64(" + val + ") >> 63))"
> -				default:
> -					g.Fail("unhandled oneof field type ", field.Type.String())
> -				}
> -				g.P("n += ", g.Pkg["proto"], ".SizeVarint(", field.Number, "<<3|", g.Pkg["proto"], ".", wire, ")")
> -				if varint != "" {
> -					g.P("n += ", g.Pkg["proto"], ".SizeVarint(uint64(", varint, "))")
> -				}
> -				if fixed != "" {
> -					g.P("n += ", fixed)
> -				}
> -				if *field.Type == descriptor.FieldDescriptorProto_TYPE_GROUP {
> -					g.P("n += ", g.Pkg["proto"], ".SizeVarint(", field.Number, "<<3|", g.Pkg["proto"], ".WireEndGroup)")
> -				}
> -			}
> -			g.P("case nil:")
> -			g.P("default:")
> -			g.P("panic(", g.Pkg["fmt"], ".Sprintf(\"proto: unexpected type %T in oneof\", x))")
> -			g.P("}")
> -		}
> -		g.P("return n")
> -		g.P("}")
> -		g.P()
> -	}
> -
> -	for _, ext := range message.ext {
> -		g.generateExtension(ext)
> -	}
> -
> -	fullName := strings.Join(message.TypeName(), ".")
> -	if g.file.Package != nil {
> -		fullName = *g.file.Package + "." + fullName
> -	}
> -
> -	g.addInitf("%s.RegisterType((*%s)(nil), %q)", g.Pkg["proto"], ccTypeName, fullName)
> -}
> -
> -func (g *Generator) generateExtension(ext *ExtensionDescriptor) {
> -	ccTypeName := ext.DescName()
> -
> -	extObj := g.ObjectNamed(*ext.Extendee)
> -	var extDesc *Descriptor
> -	if id, ok := extObj.(*ImportedDescriptor); ok {
> -		// This is extending a publicly imported message.
> -		// We need the underlying type for goTag.
> -		extDesc = id.o.(*Descriptor)
> -	} else {
> -		extDesc = extObj.(*Descriptor)
> -	}
> -	extendedType := "*" + g.TypeName(extObj) // always use the original
> -	field := ext.FieldDescriptorProto
> -	fieldType, wireType := g.GoType(ext.parent, field)
> -	tag := g.goTag(extDesc, field, wireType)
> -	g.RecordTypeUse(*ext.Extendee)
> -	if n := ext.FieldDescriptorProto.TypeName; n != nil {
> -		// foreign extension type
> -		g.RecordTypeUse(*n)
> -	}
> -
> -	typeName := ext.TypeName()
> -
> -	// Special case for proto2 message sets: If this extension is extending
> -	// proto2_bridge.MessageSet, and its final name component is "message_set_extension",
> -	// then drop that last component.
> -	mset := false
> -	if extendedType == "*proto2_bridge.MessageSet" && typeName[len(typeName)-1] == "message_set_extension" {
> -		typeName = typeName[:len(typeName)-1]
> -		mset = true
> -	}
> -
> -	// For text formatting, the package must be exactly what the .proto file declares,
> -	// ignoring overrides such as the go_package option, and with no dot/underscore mapping.
> -	extName := strings.Join(typeName, ".")
> -	if g.file.Package != nil {
> -		extName = *g.file.Package + "." + extName
> -	}
> -
> -	g.P("var ", ccTypeName, " = &", g.Pkg["proto"], ".ExtensionDesc{")
> -	g.In()
> -	g.P("ExtendedType: (", extendedType, ")(nil),")
> -	g.P("ExtensionType: (", fieldType, ")(nil),")
> -	g.P("Field: ", field.Number, ",")
> -	g.P(`Name: "`, extName, `",`)
> -	g.P("Tag: ", tag, ",")
> -	g.P(`Filename: "`, g.file.GetName(), `",`)
> -
> -	g.Out()
> -	g.P("}")
> -	g.P()
> -
> -	if mset {
> -		// Generate a bit more code to register with message_set.go.
> -		g.addInitf("%s.RegisterMessageSetType((%s)(nil), %d, %q)", g.Pkg["proto"], fieldType, *field.Number, extName)
> -	}
> -
> -	g.file.addExport(ext, constOrVarSymbol{ccTypeName, "var", ""})
> -}
> -
> -func (g *Generator) generateInitFunction() {
> -	for _, enum := range g.file.enum {
> -		g.generateEnumRegistration(enum)
> -	}
> -	for _, d := range g.file.desc {
> -		for _, ext := range d.ext {
> -			g.generateExtensionRegistration(ext)
> -		}
> -	}
> -	for _, ext := range g.file.ext {
> -		g.generateExtensionRegistration(ext)
> -	}
> -	if len(g.init) == 0 {
> -		return
> -	}
> -	g.P("func init() {")
> -	g.In()
> -	for _, l := range g.init {
> -		g.P(l)
> -	}
> -	g.Out()
> -	g.P("}")
> -	g.init = nil
> -}
> -
> -func (g *Generator) generateFileDescriptor(file *FileDescriptor) {
> -	// Make a copy and trim source_code_info data.
> -	// TODO: Trim this more when we know exactly what we need.
> -	pb := proto.Clone(file.FileDescriptorProto).(*descriptor.FileDescriptorProto)
> -	pb.SourceCodeInfo = nil
> -
> -	b, err := proto.Marshal(pb)
> -	if err != nil {
> -		g.Fail(err.Error())
> -	}
> -
> -	var buf bytes.Buffer
> -	w, _ := gzip.NewWriterLevel(&buf, gzip.BestCompression)
> -	w.Write(b)
> -	w.Close()
> -	b = buf.Bytes()
> -
> -	v := file.VarName()
> -	g.P()
> -	g.P("func init() { ", g.Pkg["proto"], ".RegisterFile(", strconv.Quote(*file.Name), ", ", v, ") }")
> -	g.P("var ", v, " = []byte{")
> -	g.In()
> -	g.P("// ", len(b), " bytes of a gzipped FileDescriptorProto")
> -	for len(b) > 0 {
> -		n := 16
> -		if n > len(b) {
> -			n = len(b)
> -		}
> -
> -		s := ""
> -		for _, c := range b[:n] {
> -			s += fmt.Sprintf("0x%02x,", c)
> -		}
> -		g.P(s)
> -
> -		b = b[n:]
> -	}
> -	g.Out()
> -	g.P("}")
> -}
> -
> -func (g *Generator) generateEnumRegistration(enum *EnumDescriptor) {
> -	// // We always print the full (proto-world) package name here.
> -	pkg := enum.File().GetPackage()
> -	if pkg != "" {
> -		pkg += "."
> -	}
> -	// The full type name
> -	typeName := enum.TypeName()
> -	// The full type name, CamelCased.
> -	ccTypeName := CamelCaseSlice(typeName)
> -	g.addInitf("%s.RegisterEnum(%q, %[3]s_name, %[3]s_value)", g.Pkg["proto"], pkg+ccTypeName, ccTypeName)
> -}
> -
> -func (g *Generator) generateExtensionRegistration(ext *ExtensionDescriptor) {
> -	g.addInitf("%s.RegisterExtension(%s)", g.Pkg["proto"], ext.DescName())
> -}
> -
> -// And now lots of helper functions.
> -
> -// Is c an ASCII lower-case letter?
> -func isASCIILower(c byte) bool {
> -	return 'a' <= c && c <= 'z'
> -}
> -
> -// Is c an ASCII digit?
> -func isASCIIDigit(c byte) bool {
> -	return '0' <= c && c <= '9'
> -}
> -
> -// CamelCase returns the CamelCased name.
> -// If there is an interior underscore followed by a lower case letter,
> -// drop the underscore and convert the letter to upper case.
> -// There is a remote possibility of this rewrite causing a name collision,
> -// but it's so remote we're prepared to pretend it's nonexistent - since the
> -// C++ generator lowercases names, it's extremely unlikely to have two fields
> -// with different capitalizations.
> -// In short, _my_field_name_2 becomes XMyFieldName_2.
> -func CamelCase(s string) string {
> -	if s == "" {
> -		return ""
> -	}
> -	t := make([]byte, 0, 32)
> -	i := 0
> -	if s[0] == '_' {
> -		// Need a capital letter; drop the '_'.
> -		t = append(t, 'X')
> -		i++
> -	}
> -	// Invariant: if the next letter is lower case, it must be converted
> -	// to upper case.
> -	// That is, we process a word at a time, where words are marked by _ or
> -	// upper case letter. Digits are treated as words.
> -	for ; i < len(s); i++ {
> -		c := s[i]
> -		if c == '_' && i+1 < len(s) && isASCIILower(s[i+1]) {
> -			continue // Skip the underscore in s.
> -		}
> -		if isASCIIDigit(c) {
> -			t = append(t, c)
> -			continue
> -		}
> -		// Assume we have a letter now - if not, it's a bogus identifier.
> -		// The next word is a sequence of characters that must start upper case.
> -		if isASCIILower(c) {
> -			c ^= ' ' // Make it a capital letter.
> -		}
> -		t = append(t, c) // Guaranteed not lower case.
> -		// Accept lower case sequence that follows.
> -		for i+1 < len(s) && isASCIILower(s[i+1]) {
> -			i++
> -			t = append(t, s[i])
> -		}
> -	}
> -	return string(t)
> -}
> -
> -// CamelCaseSlice is like CamelCase, but the argument is a slice of strings to
> -// be joined with "_".
> -func CamelCaseSlice(elem []string) string { return CamelCase(strings.Join(elem, "_")) }
> -
> -// dottedSlice turns a sliced name into a dotted name.
> -func dottedSlice(elem []string) string { return strings.Join(elem, ".") }
> -
> -// Is this field optional?
> -func isOptional(field *descriptor.FieldDescriptorProto) bool {
> -	return field.Label != nil && *field.Label == descriptor.FieldDescriptorProto_LABEL_OPTIONAL
> -}
> -
> -// Is this field required?
> -func isRequired(field *descriptor.FieldDescriptorProto) bool {
> -	return field.Label != nil && *field.Label == descriptor.FieldDescriptorProto_LABEL_REQUIRED
> -}
> -
> -// Is this field repeated?
> -func isRepeated(field *descriptor.FieldDescriptorProto) bool {
> -	return field.Label != nil && *field.Label == descriptor.FieldDescriptorProto_LABEL_REPEATED
> -}
> -
> -// Is this field a scalar numeric type?
> -func isScalar(field *descriptor.FieldDescriptorProto) bool {
> -	if field.Type == nil {
> -		return false
> -	}
> -	switch *field.Type {
> -	case descriptor.FieldDescriptorProto_TYPE_DOUBLE,
> -		descriptor.FieldDescriptorProto_TYPE_FLOAT,
> -		descriptor.FieldDescriptorProto_TYPE_INT64,
> -		descriptor.FieldDescriptorProto_TYPE_UINT64,
> -		descriptor.FieldDescriptorProto_TYPE_INT32,
> -		descriptor.FieldDescriptorProto_TYPE_FIXED64,
> -		descriptor.FieldDescriptorProto_TYPE_FIXED32,
> -		descriptor.FieldDescriptorProto_TYPE_BOOL,
> -		descriptor.FieldDescriptorProto_TYPE_UINT32,
> -		descriptor.FieldDescriptorProto_TYPE_ENUM,
> -		descriptor.FieldDescriptorProto_TYPE_SFIXED32,
> -		descriptor.FieldDescriptorProto_TYPE_SFIXED64,
> -		descriptor.FieldDescriptorProto_TYPE_SINT32,
> -		descriptor.FieldDescriptorProto_TYPE_SINT64:
> -		return true
> -	default:
> -		return false
> -	}
> -}
> -
> -// badToUnderscore is the mapping function used to generate Go names from package names,
> -// which can be dotted in the input .proto file.  It replaces non-identifier characters such as
> -// dot or dash with underscore.
> -func badToUnderscore(r rune) rune {
> -	if unicode.IsLetter(r) || unicode.IsDigit(r) || r == '_' {
> -		return r
> -	}
> -	return '_'
> -}
> -
> -// baseName returns the last path element of the name, with the last dotted suffix removed.
> -func baseName(name string) string {
> -	// First, find the last element
> -	if i := strings.LastIndex(name, "/"); i >= 0 {
> -		name = name[i+1:]
> -	}
> -	// Now drop the suffix
> -	if i := strings.LastIndex(name, "."); i >= 0 {
> -		name = name[0:i]
> -	}
> -	return name
> -}
> -
> -// The SourceCodeInfo message describes the location of elements of a parsed
> -// .proto file by way of a "path", which is a sequence of integers that
> -// describe the route from a FileDescriptorProto to the relevant submessage.
> -// The path alternates between a field number of a repeated field, and an index
> -// into that repeated field. The constants below define the field numbers that
> -// are used.
> -//
> -// See descriptor.proto for more information about this.
> -const (
> -	// tag numbers in FileDescriptorProto
> -	packagePath = 2 // package
> -	messagePath = 4 // message_type
> -	enumPath    = 5 // enum_type
> -	// tag numbers in DescriptorProto
> -	messageFieldPath   = 2 // field
> -	messageMessagePath = 3 // nested_type
> -	messageEnumPath    = 4 // enum_type
> -	messageOneofPath   = 8 // oneof_decl
> -	// tag numbers in EnumDescriptorProto
> -	enumValuePath = 2 // value
> -)
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go
> deleted file mode 100644
> index a5ebc853..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go
> +++ /dev/null
> @@ -1,85 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2013 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package generator
> -
> -import (
> -	"testing"
> -
> -	"github.com/golang/protobuf/protoc-gen-go/descriptor"
> -)
> -
> -func TestCamelCase(t *testing.T) {
> -	tests := []struct {
> -		in, want string
> -	}{
> -		{"one", "One"},
> -		{"one_two", "OneTwo"},
> -		{"_my_field_name_2", "XMyFieldName_2"},
> -		{"Something_Capped", "Something_Capped"},
> -		{"my_Name", "My_Name"},
> -		{"OneTwo", "OneTwo"},
> -		{"_", "X"},
> -		{"_a_", "XA_"},
> -	}
> -	for _, tc := range tests {
> -		if got := CamelCase(tc.in); got != tc.want {
> -			t.Errorf("CamelCase(%q) = %q, want %q", tc.in, got, tc.want)
> -		}
> -	}
> -}
> -
> -func TestGoPackageOption(t *testing.T) {
> -	tests := []struct {
> -		in           string
> -		impPath, pkg string
> -		ok           bool
> -	}{
> -		{"", "", "", false},
> -		{"foo", "", "foo", true},
> -		{"github.com/golang/bar", "github.com/golang/bar", "bar", true},
> -		{"github.com/golang/bar;baz", "github.com/golang/bar", "baz", true},
> -	}
> -	for _, tc := range tests {
> -		d := &FileDescriptor{
> -			FileDescriptorProto: &descriptor.FileDescriptorProto{
> -				Options: &descriptor.FileOptions{
> -					GoPackage: &tc.in,
> -				},
> -			},
> -		}
> -		impPath, pkg, ok := d.goPackageOption()
> -		if impPath != tc.impPath || pkg != tc.pkg || ok != tc.ok {
> -			t.Errorf("go_package = %q => (%q, %q, %t), want (%q, %q, %t)", tc.in,
> -				impPath, pkg, ok, tc.impPath, tc.pkg, tc.ok)
> -		}
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go
> deleted file mode 100644
> index 2660e47a..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go
> +++ /dev/null
> @@ -1,463 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2015 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// Package grpc outputs gRPC service descriptions in Go code.
> -// It runs as a plugin for the Go protocol buffer compiler plugin.
> -// It is linked in to protoc-gen-go.
> -package grpc
> -
> -import (
> -	"fmt"
> -	"path"
> -	"strconv"
> -	"strings"
> -
> -	pb "github.com/golang/protobuf/protoc-gen-go/descriptor"
> -	"github.com/golang/protobuf/protoc-gen-go/generator"
> -)
> -
> -// generatedCodeVersion indicates a version of the generated code.
> -// It is incremented whenever an incompatibility between the generated code and
> -// the grpc package is introduced; the generated code references
> -// a constant, grpc.SupportPackageIsVersionN (where N is generatedCodeVersion).
> -const generatedCodeVersion = 4
> -
> -// Paths for packages used by code generated in this file,
> -// relative to the import_prefix of the generator.Generator.
> -const (
> -	contextPkgPath = "golang.org/x/net/context"
> -	grpcPkgPath    = "google.golang.org/grpc"
> -)
> -
> -func init() {
> -	generator.RegisterPlugin(new(grpc))
> -}
> -
> -// grpc is an implementation of the Go protocol buffer compiler's
> -// plugin architecture.  It generates bindings for gRPC support.
> -type grpc struct {
> -	gen *generator.Generator
> -}
> -
> -// Name returns the name of this plugin, "grpc".
> -func (g *grpc) Name() string {
> -	return "grpc"
> -}
> -
> -// The names for packages imported in the generated code.
> -// They may vary from the final path component of the import path
> -// if the name is used by other packages.
> -var (
> -	contextPkg string
> -	grpcPkg    string
> -)
> -
> -// Init initializes the plugin.
> -func (g *grpc) Init(gen *generator.Generator) {
> -	g.gen = gen
> -	contextPkg = generator.RegisterUniquePackageName("context", nil)
> -	grpcPkg = generator.RegisterUniquePackageName("grpc", nil)
> -}
> -
> -// Given a type name defined in a .proto, return its object.
> -// Also record that we're using it, to guarantee the associated import.
> -func (g *grpc) objectNamed(name string) generator.Object {
> -	g.gen.RecordTypeUse(name)
> -	return g.gen.ObjectNamed(name)
> -}
> -
> -// Given a type name defined in a .proto, return its name as we will print it.
> -func (g *grpc) typeName(str string) string {
> -	return g.gen.TypeName(g.objectNamed(str))
> -}
> -
> -// P forwards to g.gen.P.
> -func (g *grpc) P(args ...interface{}) { g.gen.P(args...) }
> -
> -// Generate generates code for the services in the given file.
> -func (g *grpc) Generate(file *generator.FileDescriptor) {
> -	if len(file.FileDescriptorProto.Service) == 0 {
> -		return
> -	}
> -
> -	g.P("// Reference imports to suppress errors if they are not otherwise used.")
> -	g.P("var _ ", contextPkg, ".Context")
> -	g.P("var _ ", grpcPkg, ".ClientConn")
> -	g.P()
> -
> -	// Assert version compatibility.
> -	g.P("// This is a compile-time assertion to ensure that this generated file")
> -	g.P("// is compatible with the grpc package it is being compiled against.")
> -	g.P("const _ = ", grpcPkg, ".SupportPackageIsVersion", generatedCodeVersion)
> -	g.P()
> -
> -	for i, service := range file.FileDescriptorProto.Service {
> -		g.generateService(file, service, i)
> -	}
> -}
> -
> -// GenerateImports generates the import declaration for this file.
> -func (g *grpc) GenerateImports(file *generator.FileDescriptor) {
> -	if len(file.FileDescriptorProto.Service) == 0 {
> -		return
> -	}
> -	g.P("import (")
> -	g.P(contextPkg, " ", strconv.Quote(path.Join(g.gen.ImportPrefix, contextPkgPath)))
> -	g.P(grpcPkg, " ", strconv.Quote(path.Join(g.gen.ImportPrefix, grpcPkgPath)))
> -	g.P(")")
> -	g.P()
> -}
> -
> -// reservedClientName records whether a client name is reserved on the client side.
> -var reservedClientName = map[string]bool{
> -// TODO: do we need any in gRPC?
> -}
> -
> -func unexport(s string) string { return strings.ToLower(s[:1]) + s[1:] }
> -
> -// generateService generates all the code for the named service.
> -func (g *grpc) generateService(file *generator.FileDescriptor, service *pb.ServiceDescriptorProto, index int) {
> -	path := fmt.Sprintf("6,%d", index) // 6 means service.
> -
> -	origServName := service.GetName()
> -	fullServName := origServName
> -	if pkg := file.GetPackage(); pkg != "" {
> -		fullServName = pkg + "." + fullServName
> -	}
> -	servName := generator.CamelCase(origServName)
> -
> -	g.P()
> -	g.P("// Client API for ", servName, " service")
> -	g.P()
> -
> -	// Client interface.
> -	g.P("type ", servName, "Client interface {")
> -	for i, method := range service.Method {
> -		g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service.
> -		g.P(g.generateClientSignature(servName, method))
> -	}
> -	g.P("}")
> -	g.P()
> -
> -	// Client structure.
> -	g.P("type ", unexport(servName), "Client struct {")
> -	g.P("cc *", grpcPkg, ".ClientConn")
> -	g.P("}")
> -	g.P()
> -
> -	// NewClient factory.
> -	g.P("func New", servName, "Client (cc *", grpcPkg, ".ClientConn) ", servName, "Client {")
> -	g.P("return &", unexport(servName), "Client{cc}")
> -	g.P("}")
> -	g.P()
> -
> -	var methodIndex, streamIndex int
> -	serviceDescVar := "_" + servName + "_serviceDesc"
> -	// Client method implementations.
> -	for _, method := range service.Method {
> -		var descExpr string
> -		if !method.GetServerStreaming() && !method.GetClientStreaming() {
> -			// Unary RPC method
> -			descExpr = fmt.Sprintf("&%s.Methods[%d]", serviceDescVar, methodIndex)
> -			methodIndex++
> -		} else {
> -			// Streaming RPC method
> -			descExpr = fmt.Sprintf("&%s.Streams[%d]", serviceDescVar, streamIndex)
> -			streamIndex++
> -		}
> -		g.generateClientMethod(servName, fullServName, serviceDescVar, method, descExpr)
> -	}
> -
> -	g.P("// Server API for ", servName, " service")
> -	g.P()
> -
> -	// Server interface.
> -	serverType := servName + "Server"
> -	g.P("type ", serverType, " interface {")
> -	for i, method := range service.Method {
> -		g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service.
> -		g.P(g.generateServerSignature(servName, method))
> -	}
> -	g.P("}")
> -	g.P()
> -
> -	// Server registration.
> -	g.P("func Register", servName, "Server(s *", grpcPkg, ".Server, srv ", serverType, ") {")
> -	g.P("s.RegisterService(&", serviceDescVar, `, srv)`)
> -	g.P("}")
> -	g.P()
> -
> -	// Server handler implementations.
> -	var handlerNames []string
> -	for _, method := range service.Method {
> -		hname := g.generateServerMethod(servName, fullServName, method)
> -		handlerNames = append(handlerNames, hname)
> -	}
> -
> -	// Service descriptor.
> -	g.P("var ", serviceDescVar, " = ", grpcPkg, ".ServiceDesc {")
> -	g.P("ServiceName: ", strconv.Quote(fullServName), ",")
> -	g.P("HandlerType: (*", serverType, ")(nil),")
> -	g.P("Methods: []", grpcPkg, ".MethodDesc{")
> -	for i, method := range service.Method {
> -		if method.GetServerStreaming() || method.GetClientStreaming() {
> -			continue
> -		}
> -		g.P("{")
> -		g.P("MethodName: ", strconv.Quote(method.GetName()), ",")
> -		g.P("Handler: ", handlerNames[i], ",")
> -		g.P("},")
> -	}
> -	g.P("},")
> -	g.P("Streams: []", grpcPkg, ".StreamDesc{")
> -	for i, method := range service.Method {
> -		if !method.GetServerStreaming() && !method.GetClientStreaming() {
> -			continue
> -		}
> -		g.P("{")
> -		g.P("StreamName: ", strconv.Quote(method.GetName()), ",")
> -		g.P("Handler: ", handlerNames[i], ",")
> -		if method.GetServerStreaming() {
> -			g.P("ServerStreams: true,")
> -		}
> -		if method.GetClientStreaming() {
> -			g.P("ClientStreams: true,")
> -		}
> -		g.P("},")
> -	}
> -	g.P("},")
> -	g.P("Metadata: \"", file.GetName(), "\",")
> -	g.P("}")
> -	g.P()
> -}
> -
> -// generateClientSignature returns the client-side signature for a method.
> -func (g *grpc) generateClientSignature(servName string, method *pb.MethodDescriptorProto) string {
> -	origMethName := method.GetName()
> -	methName := generator.CamelCase(origMethName)
> -	if reservedClientName[methName] {
> -		methName += "_"
> -	}
> -	reqArg := ", in *" + g.typeName(method.GetInputType())
> -	if method.GetClientStreaming() {
> -		reqArg = ""
> -	}
> -	respName := "*" + g.typeName(method.GetOutputType())
> -	if method.GetServerStreaming() || method.GetClientStreaming() {
> -		respName = servName + "_" + generator.CamelCase(origMethName) + "Client"
> -	}
> -	return fmt.Sprintf("%s(ctx %s.Context%s, opts ...%s.CallOption) (%s, error)", methName, contextPkg, reqArg, grpcPkg, respName)
> -}
> -
> -func (g *grpc) generateClientMethod(servName, fullServName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string) {
> -	sname := fmt.Sprintf("/%s/%s", fullServName, method.GetName())
> -	methName := generator.CamelCase(method.GetName())
> -	inType := g.typeName(method.GetInputType())
> -	outType := g.typeName(method.GetOutputType())
> -
> -	g.P("func (c *", unexport(servName), "Client) ", g.generateClientSignature(servName, method), "{")
> -	if !method.GetServerStreaming() && !method.GetClientStreaming() {
> -		g.P("out := new(", outType, ")")
> -		// TODO: Pass descExpr to Invoke.
> -		g.P("err := ", grpcPkg, `.Invoke(ctx, "`, sname, `", in, out, c.cc, opts...)`)
> -		g.P("if err != nil { return nil, err }")
> -		g.P("return out, nil")
> -		g.P("}")
> -		g.P()
> -		return
> -	}
> -	streamType := unexport(servName) + methName + "Client"
> -	g.P("stream, err := ", grpcPkg, ".NewClientStream(ctx, ", descExpr, `, c.cc, "`, sname, `", opts...)`)
> -	g.P("if err != nil { return nil, err }")
> -	g.P("x := &", streamType, "{stream}")
> -	if !method.GetClientStreaming() {
> -		g.P("if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }")
> -		g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
> -	}
> -	g.P("return x, nil")
> -	g.P("}")
> -	g.P()
> -
> -	genSend := method.GetClientStreaming()
> -	genRecv := method.GetServerStreaming()
> -	genCloseAndRecv := !method.GetServerStreaming()
> -
> -	// Stream auxiliary types and methods.
> -	g.P("type ", servName, "_", methName, "Client interface {")
> -	if genSend {
> -		g.P("Send(*", inType, ") error")
> -	}
> -	if genRecv {
> -		g.P("Recv() (*", outType, ", error)")
> -	}
> -	if genCloseAndRecv {
> -		g.P("CloseAndRecv() (*", outType, ", error)")
> -	}
> -	g.P(grpcPkg, ".ClientStream")
> -	g.P("}")
> -	g.P()
> -
> -	g.P("type ", streamType, " struct {")
> -	g.P(grpcPkg, ".ClientStream")
> -	g.P("}")
> -	g.P()
> -
> -	if genSend {
> -		g.P("func (x *", streamType, ") Send(m *", inType, ") error {")
> -		g.P("return x.ClientStream.SendMsg(m)")
> -		g.P("}")
> -		g.P()
> -	}
> -	if genRecv {
> -		g.P("func (x *", streamType, ") Recv() (*", outType, ", error) {")
> -		g.P("m := new(", outType, ")")
> -		g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }")
> -		g.P("return m, nil")
> -		g.P("}")
> -		g.P()
> -	}
> -	if genCloseAndRecv {
> -		g.P("func (x *", streamType, ") CloseAndRecv() (*", outType, ", error) {")
> -		g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
> -		g.P("m := new(", outType, ")")
> -		g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }")
> -		g.P("return m, nil")
> -		g.P("}")
> -		g.P()
> -	}
> -}
> -
> -// generateServerSignature returns the server-side signature for a method.
> -func (g *grpc) generateServerSignature(servName string, method *pb.MethodDescriptorProto) string {
> -	origMethName := method.GetName()
> -	methName := generator.CamelCase(origMethName)
> -	if reservedClientName[methName] {
> -		methName += "_"
> -	}
> -
> -	var reqArgs []string
> -	ret := "error"
> -	if !method.GetServerStreaming() && !method.GetClientStreaming() {
> -		reqArgs = append(reqArgs, contextPkg+".Context")
> -		ret = "(*" + g.typeName(method.GetOutputType()) + ", error)"
> -	}
> -	if !method.GetClientStreaming() {
> -		reqArgs = append(reqArgs, "*"+g.typeName(method.GetInputType()))
> -	}
> -	if method.GetServerStreaming() || method.GetClientStreaming() {
> -		reqArgs = append(reqArgs, servName+"_"+generator.CamelCase(origMethName)+"Server")
> -	}
> -
> -	return methName + "(" + strings.Join(reqArgs, ", ") + ") " + ret
> -}
> -
> -func (g *grpc) generateServerMethod(servName, fullServName string, method *pb.MethodDescriptorProto) string {
> -	methName := generator.CamelCase(method.GetName())
> -	hname := fmt.Sprintf("_%s_%s_Handler", servName, methName)
> -	inType := g.typeName(method.GetInputType())
> -	outType := g.typeName(method.GetOutputType())
> -
> -	if !method.GetServerStreaming() && !method.GetClientStreaming() {
> -		g.P("func ", hname, "(srv interface{}, ctx ", contextPkg, ".Context, dec func(interface{}) error, interceptor ", grpcPkg, ".UnaryServerInterceptor) (interface{}, error) {")
> -		g.P("in := new(", inType, ")")
> -		g.P("if err := dec(in); err != nil { return nil, err }")
> -		g.P("if interceptor == nil { return srv.(", servName, "Server).", methName, "(ctx, in) }")
> -		g.P("info := &", grpcPkg, ".UnaryServerInfo{")
> -		g.P("Server: srv,")
> -		g.P("FullMethod: ", strconv.Quote(fmt.Sprintf("/%s/%s", fullServName, methName)), ",")
> -		g.P("}")
> -		g.P("handler := func(ctx ", contextPkg, ".Context, req interface{}) (interface{}, error) {")
> -		g.P("return srv.(", servName, "Server).", methName, "(ctx, req.(*", inType, "))")
> -		g.P("}")
> -		g.P("return interceptor(ctx, in, info, handler)")
> -		g.P("}")
> -		g.P()
> -		return hname
> -	}
> -	streamType := unexport(servName) + methName + "Server"
> -	g.P("func ", hname, "(srv interface{}, stream ", grpcPkg, ".ServerStream) error {")
> -	if !method.GetClientStreaming() {
> -		g.P("m := new(", inType, ")")
> -		g.P("if err := stream.RecvMsg(m); err != nil { return err }")
> -		g.P("return srv.(", servName, "Server).", methName, "(m, &", streamType, "{stream})")
> -	} else {
> -		g.P("return srv.(", servName, "Server).", methName, "(&", streamType, "{stream})")
> -	}
> -	g.P("}")
> -	g.P()
> -
> -	genSend := method.GetServerStreaming()
> -	genSendAndClose := !method.GetServerStreaming()
> -	genRecv := method.GetClientStreaming()
> -
> -	// Stream auxiliary types and methods.
> -	g.P("type ", servName, "_", methName, "Server interface {")
> -	if genSend {
> -		g.P("Send(*", outType, ") error")
> -	}
> -	if genSendAndClose {
> -		g.P("SendAndClose(*", outType, ") error")
> -	}
> -	if genRecv {
> -		g.P("Recv() (*", inType, ", error)")
> -	}
> -	g.P(grpcPkg, ".ServerStream")
> -	g.P("}")
> -	g.P()
> -
> -	g.P("type ", streamType, " struct {")
> -	g.P(grpcPkg, ".ServerStream")
> -	g.P("}")
> -	g.P()
> -
> -	if genSend {
> -		g.P("func (x *", streamType, ") Send(m *", outType, ") error {")
> -		g.P("return x.ServerStream.SendMsg(m)")
> -		g.P("}")
> -		g.P()
> -	}
> -	if genSendAndClose {
> -		g.P("func (x *", streamType, ") SendAndClose(m *", outType, ") error {")
> -		g.P("return x.ServerStream.SendMsg(m)")
> -		g.P("}")
> -		g.P()
> -	}
> -	if genRecv {
> -		g.P("func (x *", streamType, ") Recv() (*", inType, ", error) {")
> -		g.P("m := new(", inType, ")")
> -		g.P("if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err }")
> -		g.P("return m, nil")
> -		g.P("}")
> -		g.P()
> -	}
> -
> -	return hname
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/link_grpc.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/link_grpc.go
> deleted file mode 100644
> index 532a5500..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/link_grpc.go
> +++ /dev/null
> @@ -1,34 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2015 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package main
> -
> -import _ "github.com/golang/protobuf/protoc-gen-go/grpc"
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/main.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/main.go
> deleted file mode 100644
> index 8e2486de..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/main.go
> +++ /dev/null
> @@ -1,98 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// protoc-gen-go is a plugin for the Google protocol buffer compiler to generate
> -// Go code.  Run it by building this program and putting it in your path with
> -// the name
> -// 	protoc-gen-go
> -// That word 'go' at the end becomes part of the option string set for the
> -// protocol compiler, so once the protocol compiler (protoc) is installed
> -// you can run
> -// 	protoc --go_out=output_directory input_directory/file.proto
> -// to generate Go bindings for the protocol defined by file.proto.
> -// With that input, the output will be written to
> -// 	output_directory/file.pb.go
> -//
> -// The generated code is documented in the package comment for
> -// the library.
> -//
> -// See the README and documentation for protocol buffers to learn more:
> -// 	https://developers.google.com/protocol-buffers/
> -package main
> -
> -import (
> -	"io/ioutil"
> -	"os"
> -
> -	"github.com/golang/protobuf/proto"
> -	"github.com/golang/protobuf/protoc-gen-go/generator"
> -)
> -
> -func main() {
> -	// Begin by allocating a generator. The request and response structures are stored there
> -	// so we can do error handling easily - the response structure contains the field to
> -	// report failure.
> -	g := generator.New()
> -
> -	data, err := ioutil.ReadAll(os.Stdin)
> -	if err != nil {
> -		g.Error(err, "reading input")
> -	}
> -
> -	if err := proto.Unmarshal(data, g.Request); err != nil {
> -		g.Error(err, "parsing input proto")
> -	}
> -
> -	if len(g.Request.FileToGenerate) == 0 {
> -		g.Fail("no files to generate")
> -	}
> -
> -	g.CommandLineParameters(g.Request.GetParameter())
> -
> -	// Create a wrapped version of the Descriptors and EnumDescriptors that
> -	// point to the file that defines them.
> -	g.WrapTypes()
> -
> -	g.SetPackageNames()
> -	g.BuildTypeNameMap()
> -
> -	g.GenerateAllFiles()
> -
> -	// Send back the results.
> -	data, err = proto.Marshal(g.Response)
> -	if err != nil {
> -		g.Error(err, "failed to marshal output proto")
> -	}
> -	_, err = os.Stdout.Write(data)
> -	if err != nil {
> -		g.Error(err, "failed to write output proto")
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile
> deleted file mode 100644
> index bc0463d5..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile
> +++ /dev/null
> @@ -1,45 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2010 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -# Not stored here, but plugin.proto is in https://github.com/google/protobuf/
> -# at src/google/protobuf/compiler/plugin.proto
> -# Also we need to fix an import.
> -regenerate:
> -	@echo WARNING! THIS RULE IS PROBABLY NOT RIGHT FOR YOUR INSTALLATION
> -	cp $(HOME)/src/protobuf/include/google/protobuf/compiler/plugin.proto .
> -	protoc --go_out=Mgoogle/protobuf/descriptor.proto=github.com/golang/protobuf/protoc-gen-go/descriptor:../../../../.. \
> -		-I$(HOME)/src/protobuf/include $(HOME)/src/protobuf/include/google/protobuf/compiler/plugin.proto
> -
> -restore:
> -	cp plugin.pb.golden plugin.pb.go
> -
> -preserve:
> -	cp plugin.pb.go plugin.pb.golden
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.go
> deleted file mode 100644
> index c608a248..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.go
> +++ /dev/null
> @@ -1,293 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: google/protobuf/compiler/plugin.proto
> -
> -/*
> -Package plugin_go is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	google/protobuf/compiler/plugin.proto
> -
> -It has these top-level messages:
> -	Version
> -	CodeGeneratorRequest
> -	CodeGeneratorResponse
> -*/
> -package plugin_go
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
> -
> -// 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
> -
> -// The version number of protocol compiler.
> -type Version struct {
> -	Major *int32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"`
> -	Minor *int32 `protobuf:"varint,2,opt,name=minor" json:"minor,omitempty"`
> -	Patch *int32 `protobuf:"varint,3,opt,name=patch" json:"patch,omitempty"`
> -	// A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
> -	// be empty for mainline stable releases.
> -	Suffix           *string `protobuf:"bytes,4,opt,name=suffix" json:"suffix,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *Version) Reset()                    { *m = Version{} }
> -func (m *Version) String() string            { return proto.CompactTextString(m) }
> -func (*Version) ProtoMessage()               {}
> -func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -
> -func (m *Version) GetMajor() int32 {
> -	if m != nil && m.Major != nil {
> -		return *m.Major
> -	}
> -	return 0
> -}
> -
> -func (m *Version) GetMinor() int32 {
> -	if m != nil && m.Minor != nil {
> -		return *m.Minor
> -	}
> -	return 0
> -}
> -
> -func (m *Version) GetPatch() int32 {
> -	if m != nil && m.Patch != nil {
> -		return *m.Patch
> -	}
> -	return 0
> -}
> -
> -func (m *Version) GetSuffix() string {
> -	if m != nil && m.Suffix != nil {
> -		return *m.Suffix
> -	}
> -	return ""
> -}
> -
> -// An encoded CodeGeneratorRequest is written to the plugin's stdin.
> -type CodeGeneratorRequest struct {
> -	// The .proto files that were explicitly listed on the command-line.  The
> -	// code generator should generate code only for these files.  Each file's
> -	// descriptor will be included in proto_file, below.
> -	FileToGenerate []string `protobuf:"bytes,1,rep,name=file_to_generate,json=fileToGenerate" json:"file_to_generate,omitempty"`
> -	// The generator parameter passed on the command-line.
> -	Parameter *string `protobuf:"bytes,2,opt,name=parameter" json:"parameter,omitempty"`
> -	// FileDescriptorProtos for all files in files_to_generate and everything
> -	// they import.  The files will appear in topological order, so each file
> -	// appears before any file that imports it.
> -	//
> -	// protoc guarantees that all proto_files will be written after
> -	// the fields above, even though this is not technically guaranteed by the
> -	// protobuf wire format.  This theoretically could allow a plugin to stream
> -	// in the FileDescriptorProtos and handle them one by one rather than read
> -	// the entire set into memory at once.  However, as of this writing, this
> -	// is not similarly optimized on protoc's end -- it will store all fields in
> -	// memory at once before sending them to the plugin.
> -	//
> -	// Type names of fields and extensions in the FileDescriptorProto are always
> -	// fully qualified.
> -	ProtoFile []*google_protobuf.FileDescriptorProto `protobuf:"bytes,15,rep,name=proto_file,json=protoFile" json:"proto_file,omitempty"`
> -	// The version number of protocol compiler.
> -	CompilerVersion  *Version `protobuf:"bytes,3,opt,name=compiler_version,json=compilerVersion" json:"compiler_version,omitempty"`
> -	XXX_unrecognized []byte   `json:"-"`
> -}
> -
> -func (m *CodeGeneratorRequest) Reset()                    { *m = CodeGeneratorRequest{} }
> -func (m *CodeGeneratorRequest) String() string            { return proto.CompactTextString(m) }
> -func (*CodeGeneratorRequest) ProtoMessage()               {}
> -func (*CodeGeneratorRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -
> -func (m *CodeGeneratorRequest) GetFileToGenerate() []string {
> -	if m != nil {
> -		return m.FileToGenerate
> -	}
> -	return nil
> -}
> -
> -func (m *CodeGeneratorRequest) GetParameter() string {
> -	if m != nil && m.Parameter != nil {
> -		return *m.Parameter
> -	}
> -	return ""
> -}
> -
> -func (m *CodeGeneratorRequest) GetProtoFile() []*google_protobuf.FileDescriptorProto {
> -	if m != nil {
> -		return m.ProtoFile
> -	}
> -	return nil
> -}
> -
> -func (m *CodeGeneratorRequest) GetCompilerVersion() *Version {
> -	if m != nil {
> -		return m.CompilerVersion
> -	}
> -	return nil
> -}
> -
> -// The plugin writes an encoded CodeGeneratorResponse to stdout.
> -type CodeGeneratorResponse struct {
> -	// Error message.  If non-empty, code generation failed.  The plugin process
> -	// should exit with status code zero even if it reports an error in this way.
> -	//
> -	// This should be used to indicate errors in .proto files which prevent the
> -	// code generator from generating correct code.  Errors which indicate a
> -	// problem in protoc itself -- such as the input CodeGeneratorRequest being
> -	// unparseable -- should be reported by writing a message to stderr and
> -	// exiting with a non-zero status code.
> -	Error            *string                       `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"`
> -	File             []*CodeGeneratorResponse_File `protobuf:"bytes,15,rep,name=file" json:"file,omitempty"`
> -	XXX_unrecognized []byte                        `json:"-"`
> -}
> -
> -func (m *CodeGeneratorResponse) Reset()                    { *m = CodeGeneratorResponse{} }
> -func (m *CodeGeneratorResponse) String() string            { return proto.CompactTextString(m) }
> -func (*CodeGeneratorResponse) ProtoMessage()               {}
> -func (*CodeGeneratorResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
> -
> -func (m *CodeGeneratorResponse) GetError() string {
> -	if m != nil && m.Error != nil {
> -		return *m.Error
> -	}
> -	return ""
> -}
> -
> -func (m *CodeGeneratorResponse) GetFile() []*CodeGeneratorResponse_File {
> -	if m != nil {
> -		return m.File
> -	}
> -	return nil
> -}
> -
> -// Represents a single generated file.
> -type CodeGeneratorResponse_File struct {
> -	// The file name, relative to the output directory.  The name must not
> -	// contain "." or ".." components and must be relative, not be absolute (so,
> -	// the file cannot lie outside the output directory).  "/" must be used as
> -	// the path separator, not "\".
> -	//
> -	// If the name is omitted, the content will be appended to the previous
> -	// file.  This allows the generator to break large files into small chunks,
> -	// and allows the generated text to be streamed back to protoc so that large
> -	// files need not reside completely in memory at one time.  Note that as of
> -	// this writing protoc does not optimize for this -- it will read the entire
> -	// CodeGeneratorResponse before writing files to disk.
> -	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	// If non-empty, indicates that the named file should already exist, and the
> -	// content here is to be inserted into that file at a defined insertion
> -	// point.  This feature allows a code generator to extend the output
> -	// produced by another code generator.  The original generator may provide
> -	// insertion points by placing special annotations in the file that look
> -	// like:
> -	//   @@protoc_insertion_point(NAME)
> -	// The annotation can have arbitrary text before and after it on the line,
> -	// which allows it to be placed in a comment.  NAME should be replaced with
> -	// an identifier naming the point -- this is what other generators will use
> -	// as the insertion_point.  Code inserted at this point will be placed
> -	// immediately above the line containing the insertion point (thus multiple
> -	// insertions to the same point will come out in the order they were added).
> -	// The double-@ is intended to make it unlikely that the generated code
> -	// could contain things that look like insertion points by accident.
> -	//
> -	// For example, the C++ code generator places the following line in the
> -	// .pb.h files that it generates:
> -	//   // @@protoc_insertion_point(namespace_scope)
> -	// This line appears within the scope of the file's package namespace, but
> -	// outside of any particular class.  Another plugin can then specify the
> -	// insertion_point "namespace_scope" to generate additional classes or
> -	// other declarations that should be placed in this scope.
> -	//
> -	// Note that if the line containing the insertion point begins with
> -	// whitespace, the same whitespace will be added to every line of the
> -	// inserted text.  This is useful for languages like Python, where
> -	// indentation matters.  In these languages, the insertion point comment
> -	// should be indented the same amount as any inserted code will need to be
> -	// in order to work correctly in that context.
> -	//
> -	// The code generator that generates the initial file and the one which
> -	// inserts into it must both run as part of a single invocation of protoc.
> -	// Code generators are executed in the order in which they appear on the
> -	// command line.
> -	//
> -	// If |insertion_point| is present, |name| must also be present.
> -	InsertionPoint *string `protobuf:"bytes,2,opt,name=insertion_point,json=insertionPoint" json:"insertion_point,omitempty"`
> -	// The file contents.
> -	Content          *string `protobuf:"bytes,15,opt,name=content" json:"content,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *CodeGeneratorResponse_File) Reset()                    { *m = CodeGeneratorResponse_File{} }
> -func (m *CodeGeneratorResponse_File) String() string            { return proto.CompactTextString(m) }
> -func (*CodeGeneratorResponse_File) ProtoMessage()               {}
> -func (*CodeGeneratorResponse_File) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
> -
> -func (m *CodeGeneratorResponse_File) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -func (m *CodeGeneratorResponse_File) GetInsertionPoint() string {
> -	if m != nil && m.InsertionPoint != nil {
> -		return *m.InsertionPoint
> -	}
> -	return ""
> -}
> -
> -func (m *CodeGeneratorResponse_File) GetContent() string {
> -	if m != nil && m.Content != nil {
> -		return *m.Content
> -	}
> -	return ""
> -}
> -
> -func init() {
> -	proto.RegisterType((*Version)(nil), "google.protobuf.compiler.Version")
> -	proto.RegisterType((*CodeGeneratorRequest)(nil), "google.protobuf.compiler.CodeGeneratorRequest")
> -	proto.RegisterType((*CodeGeneratorResponse)(nil), "google.protobuf.compiler.CodeGeneratorResponse")
> -	proto.RegisterType((*CodeGeneratorResponse_File)(nil), "google.protobuf.compiler.CodeGeneratorResponse.File")
> -}
> -
> -func init() { proto.RegisterFile("google/protobuf/compiler/plugin.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 417 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x6a, 0x14, 0x41,
> -	0x10, 0xc6, 0x19, 0x77, 0x63, 0x98, 0x8a, 0x64, 0x43, 0x13, 0xa5, 0x09, 0x39, 0x8c, 0x8b, 0xe2,
> -	0x5c, 0x32, 0x0b, 0xc1, 0x8b, 0x78, 0x4b, 0x44, 0x3d, 0x78, 0x58, 0x1a, 0xf1, 0x20, 0xc8, 0x30,
> -	0x99, 0xd4, 0x74, 0x5a, 0x66, 0xba, 0xc6, 0xee, 0x1e, 0xf1, 0x49, 0x7d, 0x0f, 0xdf, 0x40, 0xfa,
> -	0xcf, 0x24, 0xb2, 0xb8, 0xa7, 0xee, 0xef, 0x57, 0xd5, 0xd5, 0x55, 0x1f, 0x05, 0x2f, 0x25, 0x91,
> -	0xec, 0x71, 0x33, 0x1a, 0x72, 0x74, 0x33, 0x75, 0x9b, 0x96, 0x86, 0x51, 0xf5, 0x68, 0x36, 0x63,
> -	0x3f, 0x49, 0xa5, 0xab, 0x10, 0x60, 0x3c, 0xa6, 0x55, 0x73, 0x5a, 0x35, 0xa7, 0x9d, 0x15, 0xbb,
> -	0x05, 0x6e, 0xd1, 0xb6, 0x46, 0x8d, 0x8e, 0x4c, 0xcc, 0x5e, 0xb7, 0x70, 0xf8, 0x05, 0x8d, 0x55,
> -	0xa4, 0xd9, 0x29, 0x1c, 0x0c, 0xcd, 0x77, 0x32, 0x3c, 0x2b, 0xb2, 0xf2, 0x40, 0x44, 0x11, 0xa8,
> -	0xd2, 0x64, 0xf8, 0xa3, 0x44, 0xbd, 0xf0, 0x74, 0x6c, 0x5c, 0x7b, 0xc7, 0x17, 0x91, 0x06, 0xc1,
> -	0x9e, 0xc1, 0x63, 0x3b, 0x75, 0x9d, 0xfa, 0xc5, 0x97, 0x45, 0x56, 0xe6, 0x22, 0xa9, 0xf5, 0x9f,
> -	0x0c, 0x4e, 0xaf, 0xe9, 0x16, 0x3f, 0xa0, 0x46, 0xd3, 0x38, 0x32, 0x02, 0x7f, 0x4c, 0x68, 0x1d,
> -	0x2b, 0xe1, 0xa4, 0x53, 0x3d, 0xd6, 0x8e, 0x6a, 0x19, 0x63, 0xc8, 0xb3, 0x62, 0x51, 0xe6, 0xe2,
> -	0xd8, 0xf3, 0xcf, 0x94, 0x5e, 0x20, 0x3b, 0x87, 0x7c, 0x6c, 0x4c, 0x33, 0xa0, 0xc3, 0xd8, 0x4a,
> -	0x2e, 0x1e, 0x00, 0xbb, 0x06, 0x08, 0xe3, 0xd4, 0xfe, 0x15, 0x5f, 0x15, 0x8b, 0xf2, 0xe8, 0xf2,
> -	0x45, 0xb5, 0x6b, 0xcb, 0x7b, 0xd5, 0xe3, 0xbb, 0x7b, 0x03, 0xb6, 0x1e, 0x8b, 0x3c, 0x44, 0x7d,
> -	0x84, 0x7d, 0x82, 0x93, 0xd9, 0xb8, 0xfa, 0x67, 0xf4, 0x24, 0x8c, 0x77, 0x74, 0xf9, 0xbc, 0xda,
> -	0xe7, 0x70, 0x95, 0xcc, 0x13, 0xab, 0x99, 0x24, 0xb0, 0xfe, 0x9d, 0xc1, 0xd3, 0x9d, 0x99, 0xed,
> -	0x48, 0xda, 0xa2, 0xf7, 0x0e, 0x8d, 0x49, 0x3e, 0xe7, 0x22, 0x0a, 0xf6, 0x11, 0x96, 0xff, 0x34,
> -	0xff, 0x7a, 0xff, 0x8f, 0xff, 0x2d, 0x1a, 0x66, 0x13, 0xa1, 0xc2, 0xd9, 0x37, 0x58, 0x86, 0x79,
> -	0x18, 0x2c, 0x75, 0x33, 0x60, 0xfa, 0x26, 0xdc, 0xd9, 0x2b, 0x58, 0x29, 0x6d, 0xd1, 0x38, 0x45,
> -	0xba, 0x1e, 0x49, 0x69, 0x97, 0xcc, 0x3c, 0xbe, 0xc7, 0x5b, 0x4f, 0x19, 0x87, 0xc3, 0x96, 0xb4,
> -	0x43, 0xed, 0xf8, 0x2a, 0x24, 0xcc, 0xf2, 0x4a, 0xc2, 0x79, 0x4b, 0xc3, 0xde, 0xfe, 0xae, 0x9e,
> -	0x6c, 0xc3, 0x6e, 0x06, 0x7b, 0xed, 0xd7, 0x37, 0x52, 0xb9, 0xbb, 0xe9, 0xc6, 0x87, 0x37, 0x92,
> -	0xfa, 0x46, 0xcb, 0x87, 0x65, 0x0c, 0x97, 0xf6, 0x42, 0xa2, 0xbe, 0x90, 0x94, 0x56, 0xfa, 0x6d,
> -	0x3c, 0x6a, 0x49, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x15, 0x40, 0xc5, 0xfe, 0x02, 0x00,
> -	0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.golden b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.golden
> deleted file mode 100644
> index 8953d0ff..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.golden
> +++ /dev/null
> @@ -1,83 +0,0 @@
> -// Code generated by protoc-gen-go.
> -// source: google/protobuf/compiler/plugin.proto
> -// DO NOT EDIT!
> -
> -package google_protobuf_compiler
> -
> -import proto "github.com/golang/protobuf/proto"
> -import "math"
> -import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
> -
> -// Reference proto and math imports to suppress error if they are not otherwise used.
> -var _ = proto.GetString
> -var _ = math.Inf
> -
> -type CodeGeneratorRequest struct {
> -	FileToGenerate   []string                               `protobuf:"bytes,1,rep,name=file_to_generate" json:"file_to_generate,omitempty"`
> -	Parameter        *string                                `protobuf:"bytes,2,opt,name=parameter" json:"parameter,omitempty"`
> -	ProtoFile        []*google_protobuf.FileDescriptorProto `protobuf:"bytes,15,rep,name=proto_file" json:"proto_file,omitempty"`
> -	XXX_unrecognized []byte                                 `json:"-"`
> -}
> -
> -func (this *CodeGeneratorRequest) Reset()         { *this = CodeGeneratorRequest{} }
> -func (this *CodeGeneratorRequest) String() string { return proto.CompactTextString(this) }
> -func (*CodeGeneratorRequest) ProtoMessage()       {}
> -
> -func (this *CodeGeneratorRequest) GetParameter() string {
> -	if this != nil && this.Parameter != nil {
> -		return *this.Parameter
> -	}
> -	return ""
> -}
> -
> -type CodeGeneratorResponse struct {
> -	Error            *string                       `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"`
> -	File             []*CodeGeneratorResponse_File `protobuf:"bytes,15,rep,name=file" json:"file,omitempty"`
> -	XXX_unrecognized []byte                        `json:"-"`
> -}
> -
> -func (this *CodeGeneratorResponse) Reset()         { *this = CodeGeneratorResponse{} }
> -func (this *CodeGeneratorResponse) String() string { return proto.CompactTextString(this) }
> -func (*CodeGeneratorResponse) ProtoMessage()       {}
> -
> -func (this *CodeGeneratorResponse) GetError() string {
> -	if this != nil && this.Error != nil {
> -		return *this.Error
> -	}
> -	return ""
> -}
> -
> -type CodeGeneratorResponse_File struct {
> -	Name             *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	InsertionPoint   *string `protobuf:"bytes,2,opt,name=insertion_point" json:"insertion_point,omitempty"`
> -	Content          *string `protobuf:"bytes,15,opt,name=content" json:"content,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (this *CodeGeneratorResponse_File) Reset()         { *this = CodeGeneratorResponse_File{} }
> -func (this *CodeGeneratorResponse_File) String() string { return proto.CompactTextString(this) }
> -func (*CodeGeneratorResponse_File) ProtoMessage()       {}
> -
> -func (this *CodeGeneratorResponse_File) GetName() string {
> -	if this != nil && this.Name != nil {
> -		return *this.Name
> -	}
> -	return ""
> -}
> -
> -func (this *CodeGeneratorResponse_File) GetInsertionPoint() string {
> -	if this != nil && this.InsertionPoint != nil {
> -		return *this.InsertionPoint
> -	}
> -	return ""
> -}
> -
> -func (this *CodeGeneratorResponse_File) GetContent() string {
> -	if this != nil && this.Content != nil {
> -		return *this.Content
> -	}
> -	return ""
> -}
> -
> -func init() {
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto
> deleted file mode 100644
> index f04dc73c..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto
> +++ /dev/null
> @@ -1,166 +0,0 @@
> -// Protocol Buffers - Google's data interchange format
> -// Copyright 2008 Google Inc.  All rights reserved.
> -// https://developers.google.com/protocol-buffers/
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// Author: kenton at google.com (Kenton Varda)
> -//
> -// WARNING:  The plugin interface is currently EXPERIMENTAL and is subject to
> -//   change.
> -//
> -// protoc (aka the Protocol Compiler) can be extended via plugins.  A plugin is
> -// just a program that reads a CodeGeneratorRequest from stdin and writes a
> -// CodeGeneratorResponse to stdout.
> -//
> -// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead
> -// of dealing with the raw protocol defined here.
> -//
> -// A plugin executable needs only to be placed somewhere in the path.  The
> -// plugin should be named "protoc-gen-$NAME", and will then be used when the
> -// flag "--${NAME}_out" is passed to protoc.
> -
> -syntax = "proto2";
> -package google.protobuf.compiler;
> -option java_package = "com.google.protobuf.compiler";
> -option java_outer_classname = "PluginProtos";
> -
> -option go_package = "github.com/golang/protobuf/protoc-gen-go/plugin;plugin_go";
> -
> -import "google/protobuf/descriptor.proto";
> -
> -// The version number of protocol compiler.
> -message Version {
> -  optional int32 major = 1;
> -  optional int32 minor = 2;
> -  optional int32 patch = 3;
> -  // A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
> -  // be empty for mainline stable releases.
> -  optional string suffix = 4;
> -}
> -
> -// An encoded CodeGeneratorRequest is written to the plugin's stdin.
> -message CodeGeneratorRequest {
> -  // The .proto files that were explicitly listed on the command-line.  The
> -  // code generator should generate code only for these files.  Each file's
> -  // descriptor will be included in proto_file, below.
> -  repeated string file_to_generate = 1;
> -
> -  // The generator parameter passed on the command-line.
> -  optional string parameter = 2;
> -
> -  // FileDescriptorProtos for all files in files_to_generate and everything
> -  // they import.  The files will appear in topological order, so each file
> -  // appears before any file that imports it.
> -  //
> -  // protoc guarantees that all proto_files will be written after
> -  // the fields above, even though this is not technically guaranteed by the
> -  // protobuf wire format.  This theoretically could allow a plugin to stream
> -  // in the FileDescriptorProtos and handle them one by one rather than read
> -  // the entire set into memory at once.  However, as of this writing, this
> -  // is not similarly optimized on protoc's end -- it will store all fields in
> -  // memory at once before sending them to the plugin.
> -  //
> -  // Type names of fields and extensions in the FileDescriptorProto are always
> -  // fully qualified.
> -  repeated FileDescriptorProto proto_file = 15;
> -
> -  // The version number of protocol compiler.
> -  optional Version compiler_version = 3;
> -}
> -
> -// The plugin writes an encoded CodeGeneratorResponse to stdout.
> -message CodeGeneratorResponse {
> -  // Error message.  If non-empty, code generation failed.  The plugin process
> -  // should exit with status code zero even if it reports an error in this way.
> -  //
> -  // This should be used to indicate errors in .proto files which prevent the
> -  // code generator from generating correct code.  Errors which indicate a
> -  // problem in protoc itself -- such as the input CodeGeneratorRequest being
> -  // unparseable -- should be reported by writing a message to stderr and
> -  // exiting with a non-zero status code.
> -  optional string error = 1;
> -
> -  // Represents a single generated file.
> -  message File {
> -    // The file name, relative to the output directory.  The name must not
> -    // contain "." or ".." components and must be relative, not be absolute (so,
> -    // the file cannot lie outside the output directory).  "/" must be used as
> -    // the path separator, not "\".
> -    //
> -    // If the name is omitted, the content will be appended to the previous
> -    // file.  This allows the generator to break large files into small chunks,
> -    // and allows the generated text to be streamed back to protoc so that large
> -    // files need not reside completely in memory at one time.  Note that as of
> -    // this writing protoc does not optimize for this -- it will read the entire
> -    // CodeGeneratorResponse before writing files to disk.
> -    optional string name = 1;
> -
> -    // If non-empty, indicates that the named file should already exist, and the
> -    // content here is to be inserted into that file at a defined insertion
> -    // point.  This feature allows a code generator to extend the output
> -    // produced by another code generator.  The original generator may provide
> -    // insertion points by placing special annotations in the file that look
> -    // like:
> -    //   @@protoc_insertion_point(NAME)
> -    // The annotation can have arbitrary text before and after it on the line,
> -    // which allows it to be placed in a comment.  NAME should be replaced with
> -    // an identifier naming the point -- this is what other generators will use
> -    // as the insertion_point.  Code inserted at this point will be placed
> -    // immediately above the line containing the insertion point (thus multiple
> -    // insertions to the same point will come out in the order they were added).
> -    // The double-@ is intended to make it unlikely that the generated code
> -    // could contain things that look like insertion points by accident.
> -    //
> -    // For example, the C++ code generator places the following line in the
> -    // .pb.h files that it generates:
> -    //   // @@protoc_insertion_point(namespace_scope)
> -    // This line appears within the scope of the file's package namespace, but
> -    // outside of any particular class.  Another plugin can then specify the
> -    // insertion_point "namespace_scope" to generate additional classes or
> -    // other declarations that should be placed in this scope.
> -    //
> -    // Note that if the line containing the insertion point begins with
> -    // whitespace, the same whitespace will be added to every line of the
> -    // inserted text.  This is useful for languages like Python, where
> -    // indentation matters.  In these languages, the insertion point comment
> -    // should be indented the same amount as any inserted code will need to be
> -    // in order to work correctly in that context.
> -    //
> -    // The code generator that generates the initial file and the one which
> -    // inserts into it must both run as part of a single invocation of protoc.
> -    // Code generators are executed in the order in which they appear on the
> -    // command line.
> -    //
> -    // If |insertion_point| is present, |name| must also be present.
> -    optional string insertion_point = 2;
> -
> -    // The file contents.
> -    optional string content = 15;
> -  }
> -  repeated File file = 15;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile
> deleted file mode 100644
> index a0bf9fef..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile
> +++ /dev/null
> @@ -1,73 +0,0 @@
> -# Go support for Protocol Buffers - Google's data interchange format
> -#
> -# Copyright 2010 The Go Authors.  All rights reserved.
> -# https://github.com/golang/protobuf
> -#
> -# 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 Google Inc. 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
> -# OWNER 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.
> -
> -all:
> -	@echo run make test
> -
> -include ../../Make.protobuf
> -
> -test:	golden testbuild
> -
> -#test:	golden testbuild extension_test
> -#	./extension_test
> -#	@echo PASS
> -
> -my_test/test.pb.go: my_test/test.proto
> -	protoc --go_out=Mmulti/multi1.proto=github.com/golang/protobuf/protoc-gen-go/testdata/multi:. $<
> -
> -golden:
> -	make -B my_test/test.pb.go
> -	sed -i -e '/return.*fileDescriptor/d' my_test/test.pb.go
> -	sed -i -e '/^var fileDescriptor/,/^}/d' my_test/test.pb.go
> -	sed -i -e '/proto.RegisterFile.*fileDescriptor/d' my_test/test.pb.go
> -	gofmt -w my_test/test.pb.go
> -	diff -w my_test/test.pb.go my_test/test.pb.go.golden
> -
> -nuke:	clean
> -
> -testbuild:	regenerate
> -	go test
> -
> -regenerate:
> -	# Invoke protoc once to generate three independent .pb.go files in the same package.
> -	protoc --go_out=. multi/multi1.proto multi/multi2.proto multi/multi3.proto
> -
> -#extension_test:	extension_test.$O
> -#	$(LD) -L. -o $@ $<
> -
> -#multi.a: multi3.pb.$O multi2.pb.$O multi1.pb.$O
> -#	rm -f multi.a
> -#	$(QUOTED_GOBIN)/gopack grc $@ $<
> -
> -#test.pb.go:	imp.pb.go
> -#multi1.pb.go:	multi2.pb.go multi3.pb.go
> -#main.$O: imp.pb.$O test.pb.$O multi.a
> -#extension_test.$O: extension_base.pb.$O extension_extra.pb.$O extension_user.pb.$O
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base.proto
> deleted file mode 100644
> index 94acfc1b..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base.proto
> +++ /dev/null
> @@ -1,46 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -package extension_base;
> -
> -message BaseMessage {
> -  optional int32 height = 1;
> -  extensions 4 to 9;
> -  extensions 16 to max;
> -}
> -
> -// Another message that may be extended, using message_set_wire_format.
> -message OldStyleMessage {
> -  option message_set_wire_format = true;
> -  extensions 100 to max;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra.proto
> deleted file mode 100644
> index fca7f600..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra.proto
> +++ /dev/null
> @@ -1,38 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2011 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -package extension_extra;
> -
> -message ExtraMessage {
> -  optional int32 width = 1;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_test.go
> deleted file mode 100644
> index 86e9c118..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_test.go
> +++ /dev/null
> @@ -1,210 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// Test that we can use protocol buffers that use extensions.
> -
> -package testdata
> -
> -/*
> -
> -import (
> -	"bytes"
> -	"regexp"
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -	base "extension_base.pb"
> -	user "extension_user.pb"
> -)
> -
> -func TestSingleFieldExtension(t *testing.T) {
> -	bm := &base.BaseMessage{
> -		Height: proto.Int32(178),
> -	}
> -
> -	// Use extension within scope of another type.
> -	vol := proto.Uint32(11)
> -	err := proto.SetExtension(bm, user.E_LoudMessage_Volume, vol)
> -	if err != nil {
> -		t.Fatal("Failed setting extension:", err)
> -	}
> -	buf, err := proto.Marshal(bm)
> -	if err != nil {
> -		t.Fatal("Failed encoding message with extension:", err)
> -	}
> -	bm_new := new(base.BaseMessage)
> -	if err := proto.Unmarshal(buf, bm_new); err != nil {
> -		t.Fatal("Failed decoding message with extension:", err)
> -	}
> -	if !proto.HasExtension(bm_new, user.E_LoudMessage_Volume) {
> -		t.Fatal("Decoded message didn't contain extension.")
> -	}
> -	vol_out, err := proto.GetExtension(bm_new, user.E_LoudMessage_Volume)
> -	if err != nil {
> -		t.Fatal("Failed getting extension:", err)
> -	}
> -	if v := vol_out.(*uint32); *v != *vol {
> -		t.Errorf("vol_out = %v, expected %v", *v, *vol)
> -	}
> -	proto.ClearExtension(bm_new, user.E_LoudMessage_Volume)
> -	if proto.HasExtension(bm_new, user.E_LoudMessage_Volume) {
> -		t.Fatal("Failed clearing extension.")
> -	}
> -}
> -
> -func TestMessageExtension(t *testing.T) {
> -	bm := &base.BaseMessage{
> -		Height: proto.Int32(179),
> -	}
> -
> -	// Use extension that is itself a message.
> -	um := &user.UserMessage{
> -		Name: proto.String("Dave"),
> -		Rank: proto.String("Major"),
> -	}
> -	err := proto.SetExtension(bm, user.E_LoginMessage_UserMessage, um)
> -	if err != nil {
> -		t.Fatal("Failed setting extension:", err)
> -	}
> -	buf, err := proto.Marshal(bm)
> -	if err != nil {
> -		t.Fatal("Failed encoding message with extension:", err)
> -	}
> -	bm_new := new(base.BaseMessage)
> -	if err := proto.Unmarshal(buf, bm_new); err != nil {
> -		t.Fatal("Failed decoding message with extension:", err)
> -	}
> -	if !proto.HasExtension(bm_new, user.E_LoginMessage_UserMessage) {
> -		t.Fatal("Decoded message didn't contain extension.")
> -	}
> -	um_out, err := proto.GetExtension(bm_new, user.E_LoginMessage_UserMessage)
> -	if err != nil {
> -		t.Fatal("Failed getting extension:", err)
> -	}
> -	if n := um_out.(*user.UserMessage).Name; *n != *um.Name {
> -		t.Errorf("um_out.Name = %q, expected %q", *n, *um.Name)
> -	}
> -	if r := um_out.(*user.UserMessage).Rank; *r != *um.Rank {
> -		t.Errorf("um_out.Rank = %q, expected %q", *r, *um.Rank)
> -	}
> -	proto.ClearExtension(bm_new, user.E_LoginMessage_UserMessage)
> -	if proto.HasExtension(bm_new, user.E_LoginMessage_UserMessage) {
> -		t.Fatal("Failed clearing extension.")
> -	}
> -}
> -
> -func TestTopLevelExtension(t *testing.T) {
> -	bm := &base.BaseMessage{
> -		Height: proto.Int32(179),
> -	}
> -
> -	width := proto.Int32(17)
> -	err := proto.SetExtension(bm, user.E_Width, width)
> -	if err != nil {
> -		t.Fatal("Failed setting extension:", err)
> -	}
> -	buf, err := proto.Marshal(bm)
> -	if err != nil {
> -		t.Fatal("Failed encoding message with extension:", err)
> -	}
> -	bm_new := new(base.BaseMessage)
> -	if err := proto.Unmarshal(buf, bm_new); err != nil {
> -		t.Fatal("Failed decoding message with extension:", err)
> -	}
> -	if !proto.HasExtension(bm_new, user.E_Width) {
> -		t.Fatal("Decoded message didn't contain extension.")
> -	}
> -	width_out, err := proto.GetExtension(bm_new, user.E_Width)
> -	if err != nil {
> -		t.Fatal("Failed getting extension:", err)
> -	}
> -	if w := width_out.(*int32); *w != *width {
> -		t.Errorf("width_out = %v, expected %v", *w, *width)
> -	}
> -	proto.ClearExtension(bm_new, user.E_Width)
> -	if proto.HasExtension(bm_new, user.E_Width) {
> -		t.Fatal("Failed clearing extension.")
> -	}
> -}
> -
> -func TestMessageSetWireFormat(t *testing.T) {
> -	osm := new(base.OldStyleMessage)
> -	osp := &user.OldStyleParcel{
> -		Name:   proto.String("Dave"),
> -		Height: proto.Int32(178),
> -	}
> -
> -	err := proto.SetExtension(osm, user.E_OldStyleParcel_MessageSetExtension, osp)
> -	if err != nil {
> -		t.Fatal("Failed setting extension:", err)
> -	}
> -
> -	buf, err := proto.Marshal(osm)
> -	if err != nil {
> -		t.Fatal("Failed encoding message:", err)
> -	}
> -
> -	// Data generated from Python implementation.
> -	expected := []byte{
> -		11, 16, 209, 15, 26, 9, 10, 4, 68, 97, 118, 101, 16, 178, 1, 12,
> -	}
> -
> -	if !bytes.Equal(expected, buf) {
> -		t.Errorf("Encoding mismatch.\nwant %+v\n got %+v", expected, buf)
> -	}
> -
> -	// Check that it is restored correctly.
> -	osm = new(base.OldStyleMessage)
> -	if err := proto.Unmarshal(buf, osm); err != nil {
> -		t.Fatal("Failed decoding message:", err)
> -	}
> -	osp_out, err := proto.GetExtension(osm, user.E_OldStyleParcel_MessageSetExtension)
> -	if err != nil {
> -		t.Fatal("Failed getting extension:", err)
> -	}
> -	osp = osp_out.(*user.OldStyleParcel)
> -	if *osp.Name != "Dave" || *osp.Height != 178 {
> -		t.Errorf("Retrieved extension from decoded message is not correct: %+v", osp)
> -	}
> -}
> -
> -func main() {
> -	// simpler than rigging up gotest
> -	testing.Main(regexp.MatchString, []testing.InternalTest{
> -		{"TestSingleFieldExtension", TestSingleFieldExtension},
> -		{"TestMessageExtension", TestMessageExtension},
> -		{"TestTopLevelExtension", TestTopLevelExtension},
> -	},
> -		[]testing.InternalBenchmark{},
> -		[]testing.InternalExample{})
> -}
> -
> -*/
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user.proto
> deleted file mode 100644
> index ff65873d..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user.proto
> +++ /dev/null
> @@ -1,100 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -import "extension_base.proto";
> -import "extension_extra.proto";
> -
> -package extension_user;
> -
> -message UserMessage {
> -  optional string name = 1;
> -  optional string rank = 2;
> -}
> -
> -// Extend with a message
> -extend extension_base.BaseMessage {
> -  optional UserMessage user_message = 5;
> -}
> -
> -// Extend with a foreign message
> -extend extension_base.BaseMessage {
> -  optional extension_extra.ExtraMessage extra_message = 9;
> -}
> -
> -// Extend with some primitive types
> -extend extension_base.BaseMessage {
> -  optional int32 width = 6;
> -  optional int64 area = 7;
> -}
> -
> -// Extend inside the scope of another type
> -message LoudMessage {
> -  extend extension_base.BaseMessage {
> -    optional uint32 volume = 8;
> -  }
> -  extensions 100 to max;
> -}
> -
> -// Extend inside the scope of another type, using a message.
> -message LoginMessage {
> -  extend extension_base.BaseMessage {
> -    optional UserMessage user_message = 16;
> -  }
> -}
> -
> -// Extend with a repeated field
> -extend extension_base.BaseMessage {
> -  repeated Detail detail = 17;
> -}
> -
> -message Detail {
> -  optional string color = 1;
> -}
> -
> -// An extension of an extension
> -message Announcement {
> -  optional string words = 1;
> -  extend LoudMessage {
> -    optional Announcement loud_ext = 100;
> -  }
> -}
> -
> -// Something that can be put in a message set.
> -message OldStyleParcel {
> -  extend extension_base.OldStyleMessage {
> -    optional OldStyleParcel message_set_extension = 2001;
> -  }
> -
> -  required string name = 1;
> -  optional int32 height = 2;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/grpc.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/grpc.proto
> deleted file mode 100644
> index b8bc41ac..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/grpc.proto
> +++ /dev/null
> @@ -1,59 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2015 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto3";
> -
> -package grpc.testing;
> -
> -message SimpleRequest {
> -}
> -
> -message SimpleResponse {
> -}
> -
> -message StreamMsg {
> -}
> -
> -message StreamMsg2 {
> -}
> -
> -service Test {
> -  rpc UnaryCall(SimpleRequest) returns (SimpleResponse);
> -
> -  // This RPC streams from the server only.
> -  rpc Downstream(SimpleRequest) returns (stream StreamMsg);
> -
> -  // This RPC streams from the client.
> -  rpc Upstream(stream StreamMsg) returns (SimpleResponse);
> -
> -  // This one streams in both directions.
> -  rpc Bidi(stream StreamMsg) returns (stream StreamMsg2);
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.pb.go.golden b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.pb.go.golden
> deleted file mode 100644
> index 784a4f86..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.pb.go.golden
> +++ /dev/null
> @@ -1,113 +0,0 @@
> -// Code generated by protoc-gen-go.
> -// source: imp.proto
> -// DO NOT EDIT!
> -
> -package imp
> -
> -import proto "github.com/golang/protobuf/proto"
> -import "math"
> -import "os"
> -import imp1 "imp2.pb"
> -
> -// Reference proto & math imports to suppress error if they are not otherwise used.
> -var _ = proto.GetString
> -var _ = math.Inf
> -
> -// Types from public import imp2.proto
> -type PubliclyImportedMessage imp1.PubliclyImportedMessage
> -
> -func (this *PubliclyImportedMessage) Reset() { (*imp1.PubliclyImportedMessage)(this).Reset() }
> -func (this *PubliclyImportedMessage) String() string {
> -	return (*imp1.PubliclyImportedMessage)(this).String()
> -}
> -
> -// PubliclyImportedMessage from public import imp.proto
> -
> -type ImportedMessage_Owner int32
> -
> -const (
> -	ImportedMessage_DAVE ImportedMessage_Owner = 1
> -	ImportedMessage_MIKE ImportedMessage_Owner = 2
> -)
> -
> -var ImportedMessage_Owner_name = map[int32]string{
> -	1: "DAVE",
> -	2: "MIKE",
> -}
> -var ImportedMessage_Owner_value = map[string]int32{
> -	"DAVE": 1,
> -	"MIKE": 2,
> -}
> -
> -// NewImportedMessage_Owner is deprecated. Use x.Enum() instead.
> -func NewImportedMessage_Owner(x ImportedMessage_Owner) *ImportedMessage_Owner {
> -	e := ImportedMessage_Owner(x)
> -	return &e
> -}
> -func (x ImportedMessage_Owner) Enum() *ImportedMessage_Owner {
> -	p := new(ImportedMessage_Owner)
> -	*p = x
> -	return p
> -}
> -func (x ImportedMessage_Owner) String() string {
> -	return proto.EnumName(ImportedMessage_Owner_name, int32(x))
> -}
> -
> -type ImportedMessage struct {
> -	Field            *int64           `protobuf:"varint,1,req,name=field" json:"field,omitempty"`
> -	XXX_extensions   map[int32][]byte `json:",omitempty"`
> -	XXX_unrecognized []byte           `json:",omitempty"`
> -}
> -
> -func (this *ImportedMessage) Reset()         { *this = ImportedMessage{} }
> -func (this *ImportedMessage) String() string { return proto.CompactTextString(this) }
> -
> -var extRange_ImportedMessage = []proto.ExtensionRange{
> -	proto.ExtensionRange{90, 100},
> -}
> -
> -func (*ImportedMessage) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_ImportedMessage
> -}
> -func (this *ImportedMessage) ExtensionMap() map[int32][]byte {
> -	if this.XXX_extensions == nil {
> -		this.XXX_extensions = make(map[int32][]byte)
> -	}
> -	return this.XXX_extensions
> -}
> -
> -type ImportedExtendable struct {
> -	XXX_extensions   map[int32][]byte `json:",omitempty"`
> -	XXX_unrecognized []byte           `json:",omitempty"`
> -}
> -
> -func (this *ImportedExtendable) Reset()         { *this = ImportedExtendable{} }
> -func (this *ImportedExtendable) String() string { return proto.CompactTextString(this) }
> -
> -func (this *ImportedExtendable) Marshal() ([]byte, error) {
> -	return proto.MarshalMessageSet(this.ExtensionMap())
> -}
> -func (this *ImportedExtendable) Unmarshal(buf []byte) error {
> -	return proto.UnmarshalMessageSet(buf, this.ExtensionMap())
> -}
> -// ensure ImportedExtendable satisfies proto.Marshaler and proto.Unmarshaler
> -var _ proto.Marshaler = (*ImportedExtendable)(nil)
> -var _ proto.Unmarshaler = (*ImportedExtendable)(nil)
> -
> -var extRange_ImportedExtendable = []proto.ExtensionRange{
> -	proto.ExtensionRange{100, 536870911},
> -}
> -
> -func (*ImportedExtendable) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_ImportedExtendable
> -}
> -func (this *ImportedExtendable) ExtensionMap() map[int32][]byte {
> -	if this.XXX_extensions == nil {
> -		this.XXX_extensions = make(map[int32][]byte)
> -	}
> -	return this.XXX_extensions
> -}
> -
> -func init() {
> -	proto.RegisterEnum("imp.ImportedMessage_Owner", ImportedMessage_Owner_name, ImportedMessage_Owner_value)
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.proto
> deleted file mode 100644
> index 156e078d..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.proto
> +++ /dev/null
> @@ -1,70 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -package imp;
> -
> -import "imp2.proto";
> -import "imp3.proto";
> -
> -message ImportedMessage {
> -  required int64 field = 1;
> -
> -  // The forwarded getters for these fields are fiddly to get right.
> -  optional ImportedMessage2 local_msg = 2;
> -  optional ForeignImportedMessage foreign_msg = 3;  // in imp3.proto
> -  optional Owner enum_field = 4;
> -  oneof union {
> -    int32 state = 9;
> -  }
> -
> -  repeated string name = 5;
> -  repeated Owner boss = 6;
> -  repeated ImportedMessage2 memo = 7;
> -
> -  map<string, ImportedMessage2> msg_map = 8;
> -
> -  enum Owner {
> -    DAVE = 1;
> -    MIKE = 2;
> -  }
> -
> -  extensions 90 to 100;
> -}
> -
> -message ImportedMessage2 {
> -}
> -
> -message ImportedExtendable {
> -  option message_set_wire_format = true;
> -  extensions 100 to max;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp2.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp2.proto
> deleted file mode 100644
> index 3bb0632b..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp2.proto
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2011 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -package imp;
> -
> -message PubliclyImportedMessage {
> -  optional int64 field = 1;
> -}
> -
> -enum PubliclyImportedEnum {
> -  GLASSES = 1;
> -  HAIR = 2;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp3.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp3.proto
> deleted file mode 100644
> index 58fc7598..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp3.proto
> +++ /dev/null
> @@ -1,38 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2012 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -package imp;
> -
> -message ForeignImportedMessage {
> -  optional string tuber = 1;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/main_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/main_test.go
> deleted file mode 100644
> index f9b5ccf2..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/main_test.go
> +++ /dev/null
> @@ -1,46 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// A simple binary to link together the protocol buffers in this test.
> -
> -package testdata
> -
> -import (
> -	"testing"
> -
> -	mytestpb "./my_test"
> -	multipb "github.com/golang/protobuf/protoc-gen-go/testdata/multi"
> -)
> -
> -func TestLink(t *testing.T) {
> -	_ = &multipb.Multi1{}
> -	_ = &mytestpb.Request{}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.proto
> deleted file mode 100644
> index 0da6e0af..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.proto
> +++ /dev/null
> @@ -1,44 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -import "multi/multi2.proto";
> -import "multi/multi3.proto";
> -
> -package multitest;
> -
> -message Multi1 {
> -  required Multi2 multi2 = 1;
> -  optional Multi2.Color color = 2;
> -  optional Multi3.HatType hat_type = 3;
> -}
> -
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.proto
> deleted file mode 100644
> index e6bfc71b..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.proto
> +++ /dev/null
> @@ -1,46 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -package multitest;
> -
> -message Multi2 {
> -  required int32 required_value = 1;
> -
> -  enum Color {
> -    BLUE = 1;
> -    GREEN = 2;
> -    RED = 3;
> -  };
> -  optional Color color = 2;
> -}
> -
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.proto
> deleted file mode 100644
> index 146c255b..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.proto
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -package multitest;
> -
> -message Multi3 {
> -  enum HatType {
> -    FEDORA = 1;
> -    FEZ = 2;
> -  };
> -  optional HatType hat_type = 1;
> -}
> -
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go
> deleted file mode 100644
> index 1954e3fb..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go
> +++ /dev/null
> @@ -1,870 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: my_test/test.proto
> -
> -/*
> -Package my_test is a generated protocol buffer package.
> -
> -This package holds interesting messages.
> -
> -It is generated from these files:
> -	my_test/test.proto
> -
> -It has these top-level messages:
> -	Request
> -	Reply
> -	OtherBase
> -	ReplyExtensions
> -	OtherReplyExtensions
> -	OldReply
> -	Communique
> -*/
> -package my_test
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -import _ "github.com/golang/protobuf/protoc-gen-go/testdata/multi"
> -
> -// 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 HatType int32
> -
> -const (
> -	// deliberately skipping 0
> -	HatType_FEDORA HatType = 1
> -	HatType_FEZ    HatType = 2
> -)
> -
> -var HatType_name = map[int32]string{
> -	1: "FEDORA",
> -	2: "FEZ",
> -}
> -var HatType_value = map[string]int32{
> -	"FEDORA": 1,
> -	"FEZ":    2,
> -}
> -
> -func (x HatType) Enum() *HatType {
> -	p := new(HatType)
> -	*p = x
> -	return p
> -}
> -func (x HatType) String() string {
> -	return proto.EnumName(HatType_name, int32(x))
> -}
> -func (x *HatType) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(HatType_value, data, "HatType")
> -	if err != nil {
> -		return err
> -	}
> -	*x = HatType(value)
> -	return nil
> -}
> -
> -// This enum represents days of the week.
> -type Days int32
> -
> -const (
> -	Days_MONDAY  Days = 1
> -	Days_TUESDAY Days = 2
> -	Days_LUNDI   Days = 1
> -)
> -
> -var Days_name = map[int32]string{
> -	1: "MONDAY",
> -	2: "TUESDAY",
> -	// Duplicate value: 1: "LUNDI",
> -}
> -var Days_value = map[string]int32{
> -	"MONDAY":  1,
> -	"TUESDAY": 2,
> -	"LUNDI":   1,
> -}
> -
> -func (x Days) Enum() *Days {
> -	p := new(Days)
> -	*p = x
> -	return p
> -}
> -func (x Days) String() string {
> -	return proto.EnumName(Days_name, int32(x))
> -}
> -func (x *Days) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(Days_value, data, "Days")
> -	if err != nil {
> -		return err
> -	}
> -	*x = Days(value)
> -	return nil
> -}
> -
> -type Request_Color int32
> -
> -const (
> -	Request_RED   Request_Color = 0
> -	Request_GREEN Request_Color = 1
> -	Request_BLUE  Request_Color = 2
> -)
> -
> -var Request_Color_name = map[int32]string{
> -	0: "RED",
> -	1: "GREEN",
> -	2: "BLUE",
> -}
> -var Request_Color_value = map[string]int32{
> -	"RED":   0,
> -	"GREEN": 1,
> -	"BLUE":  2,
> -}
> -
> -func (x Request_Color) Enum() *Request_Color {
> -	p := new(Request_Color)
> -	*p = x
> -	return p
> -}
> -func (x Request_Color) String() string {
> -	return proto.EnumName(Request_Color_name, int32(x))
> -}
> -func (x *Request_Color) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(Request_Color_value, data, "Request_Color")
> -	if err != nil {
> -		return err
> -	}
> -	*x = Request_Color(value)
> -	return nil
> -}
> -
> -type Reply_Entry_Game int32
> -
> -const (
> -	Reply_Entry_FOOTBALL Reply_Entry_Game = 1
> -	Reply_Entry_TENNIS   Reply_Entry_Game = 2
> -)
> -
> -var Reply_Entry_Game_name = map[int32]string{
> -	1: "FOOTBALL",
> -	2: "TENNIS",
> -}
> -var Reply_Entry_Game_value = map[string]int32{
> -	"FOOTBALL": 1,
> -	"TENNIS":   2,
> -}
> -
> -func (x Reply_Entry_Game) Enum() *Reply_Entry_Game {
> -	p := new(Reply_Entry_Game)
> -	*p = x
> -	return p
> -}
> -func (x Reply_Entry_Game) String() string {
> -	return proto.EnumName(Reply_Entry_Game_name, int32(x))
> -}
> -func (x *Reply_Entry_Game) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(Reply_Entry_Game_value, data, "Reply_Entry_Game")
> -	if err != nil {
> -		return err
> -	}
> -	*x = Reply_Entry_Game(value)
> -	return nil
> -}
> -
> -// This is a message that might be sent somewhere.
> -type Request struct {
> -	Key []int64 `protobuf:"varint,1,rep,name=key" json:"key,omitempty"`
> -	//  optional imp.ImportedMessage imported_message = 2;
> -	Hue *Request_Color `protobuf:"varint,3,opt,name=hue,enum=my.test.Request_Color" json:"hue,omitempty"`
> -	Hat *HatType       `protobuf:"varint,4,opt,name=hat,enum=my.test.HatType,def=1" json:"hat,omitempty"`
> -	//  optional imp.ImportedMessage.Owner owner = 6;
> -	Deadline  *float32           `protobuf:"fixed32,7,opt,name=deadline,def=inf" json:"deadline,omitempty"`
> -	Somegroup *Request_SomeGroup `protobuf:"group,8,opt,name=SomeGroup,json=somegroup" json:"somegroup,omitempty"`
> -	// This is a map field. It will generate map[int32]string.
> -	NameMapping map[int32]string `protobuf:"bytes,14,rep,name=name_mapping,json=nameMapping" json:"name_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	// This is a map field whose value type is a message.
> -	MsgMapping map[int64]*Reply `protobuf:"bytes,15,rep,name=msg_mapping,json=msgMapping" json:"msg_mapping,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	Reset_     *int32           `protobuf:"varint,12,opt,name=reset" json:"reset,omitempty"`
> -	// This field should not conflict with any getters.
> -	GetKey_          *string `protobuf:"bytes,16,opt,name=get_key,json=getKey" json:"get_key,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *Request) Reset()         { *m = Request{} }
> -func (m *Request) String() string { return proto.CompactTextString(m) }
> -func (*Request) ProtoMessage()    {}
> -
> -const Default_Request_Hat HatType = HatType_FEDORA
> -
> -var Default_Request_Deadline float32 = float32(math.Inf(1))
> -
> -func (m *Request) GetKey() []int64 {
> -	if m != nil {
> -		return m.Key
> -	}
> -	return nil
> -}
> -
> -func (m *Request) GetHue() Request_Color {
> -	if m != nil && m.Hue != nil {
> -		return *m.Hue
> -	}
> -	return Request_RED
> -}
> -
> -func (m *Request) GetHat() HatType {
> -	if m != nil && m.Hat != nil {
> -		return *m.Hat
> -	}
> -	return Default_Request_Hat
> -}
> -
> -func (m *Request) GetDeadline() float32 {
> -	if m != nil && m.Deadline != nil {
> -		return *m.Deadline
> -	}
> -	return Default_Request_Deadline
> -}
> -
> -func (m *Request) GetSomegroup() *Request_SomeGroup {
> -	if m != nil {
> -		return m.Somegroup
> -	}
> -	return nil
> -}
> -
> -func (m *Request) GetNameMapping() map[int32]string {
> -	if m != nil {
> -		return m.NameMapping
> -	}
> -	return nil
> -}
> -
> -func (m *Request) GetMsgMapping() map[int64]*Reply {
> -	if m != nil {
> -		return m.MsgMapping
> -	}
> -	return nil
> -}
> -
> -func (m *Request) GetReset_() int32 {
> -	if m != nil && m.Reset_ != nil {
> -		return *m.Reset_
> -	}
> -	return 0
> -}
> -
> -func (m *Request) GetGetKey_() string {
> -	if m != nil && m.GetKey_ != nil {
> -		return *m.GetKey_
> -	}
> -	return ""
> -}
> -
> -type Request_SomeGroup struct {
> -	GroupField       *int32 `protobuf:"varint,9,opt,name=group_field,json=groupField" json:"group_field,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *Request_SomeGroup) Reset()         { *m = Request_SomeGroup{} }
> -func (m *Request_SomeGroup) String() string { return proto.CompactTextString(m) }
> -func (*Request_SomeGroup) ProtoMessage()    {}
> -
> -func (m *Request_SomeGroup) GetGroupField() int32 {
> -	if m != nil && m.GroupField != nil {
> -		return *m.GroupField
> -	}
> -	return 0
> -}
> -
> -type Reply struct {
> -	Found                        []*Reply_Entry `protobuf:"bytes,1,rep,name=found" json:"found,omitempty"`
> -	CompactKeys                  []int32        `protobuf:"varint,2,rep,packed,name=compact_keys,json=compactKeys" json:"compact_keys,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *Reply) Reset()         { *m = Reply{} }
> -func (m *Reply) String() string { return proto.CompactTextString(m) }
> -func (*Reply) ProtoMessage()    {}
> -
> -var extRange_Reply = []proto.ExtensionRange{
> -	{100, 536870911},
> -}
> -
> -func (*Reply) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_Reply
> -}
> -
> -func (m *Reply) GetFound() []*Reply_Entry {
> -	if m != nil {
> -		return m.Found
> -	}
> -	return nil
> -}
> -
> -func (m *Reply) GetCompactKeys() []int32 {
> -	if m != nil {
> -		return m.CompactKeys
> -	}
> -	return nil
> -}
> -
> -type Reply_Entry struct {
> -	KeyThatNeeds_1234Camel_CasIng *int64 `protobuf:"varint,1,req,name=key_that_needs_1234camel_CasIng,json=keyThatNeeds1234camelCasIng" json:"key_that_needs_1234camel_CasIng,omitempty"`
> -	Value                         *int64 `protobuf:"varint,2,opt,name=value,def=7" json:"value,omitempty"`
> -	XMyFieldName_2                *int64 `protobuf:"varint,3,opt,name=_my_field_name_2,json=MyFieldName2" json:"_my_field_name_2,omitempty"`
> -	XXX_unrecognized              []byte `json:"-"`
> -}
> -
> -func (m *Reply_Entry) Reset()         { *m = Reply_Entry{} }
> -func (m *Reply_Entry) String() string { return proto.CompactTextString(m) }
> -func (*Reply_Entry) ProtoMessage()    {}
> -
> -const Default_Reply_Entry_Value int64 = 7
> -
> -func (m *Reply_Entry) GetKeyThatNeeds_1234Camel_CasIng() int64 {
> -	if m != nil && m.KeyThatNeeds_1234Camel_CasIng != nil {
> -		return *m.KeyThatNeeds_1234Camel_CasIng
> -	}
> -	return 0
> -}
> -
> -func (m *Reply_Entry) GetValue() int64 {
> -	if m != nil && m.Value != nil {
> -		return *m.Value
> -	}
> -	return Default_Reply_Entry_Value
> -}
> -
> -func (m *Reply_Entry) GetXMyFieldName_2() int64 {
> -	if m != nil && m.XMyFieldName_2 != nil {
> -		return *m.XMyFieldName_2
> -	}
> -	return 0
> -}
> -
> -type OtherBase struct {
> -	Name                         *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *OtherBase) Reset()         { *m = OtherBase{} }
> -func (m *OtherBase) String() string { return proto.CompactTextString(m) }
> -func (*OtherBase) ProtoMessage()    {}
> -
> -var extRange_OtherBase = []proto.ExtensionRange{
> -	{100, 536870911},
> -}
> -
> -func (*OtherBase) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_OtherBase
> -}
> -
> -func (m *OtherBase) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -type ReplyExtensions struct {
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *ReplyExtensions) Reset()         { *m = ReplyExtensions{} }
> -func (m *ReplyExtensions) String() string { return proto.CompactTextString(m) }
> -func (*ReplyExtensions) ProtoMessage()    {}
> -
> -var E_ReplyExtensions_Time = &proto.ExtensionDesc{
> -	ExtendedType:  (*Reply)(nil),
> -	ExtensionType: (*float64)(nil),
> -	Field:         101,
> -	Name:          "my.test.ReplyExtensions.time",
> -	Tag:           "fixed64,101,opt,name=time",
> -	Filename:      "my_test/test.proto",
> -}
> -
> -var E_ReplyExtensions_Carrot = &proto.ExtensionDesc{
> -	ExtendedType:  (*Reply)(nil),
> -	ExtensionType: (*ReplyExtensions)(nil),
> -	Field:         105,
> -	Name:          "my.test.ReplyExtensions.carrot",
> -	Tag:           "bytes,105,opt,name=carrot",
> -	Filename:      "my_test/test.proto",
> -}
> -
> -var E_ReplyExtensions_Donut = &proto.ExtensionDesc{
> -	ExtendedType:  (*OtherBase)(nil),
> -	ExtensionType: (*ReplyExtensions)(nil),
> -	Field:         101,
> -	Name:          "my.test.ReplyExtensions.donut",
> -	Tag:           "bytes,101,opt,name=donut",
> -	Filename:      "my_test/test.proto",
> -}
> -
> -type OtherReplyExtensions struct {
> -	Key              *int32 `protobuf:"varint,1,opt,name=key" json:"key,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *OtherReplyExtensions) Reset()         { *m = OtherReplyExtensions{} }
> -func (m *OtherReplyExtensions) String() string { return proto.CompactTextString(m) }
> -func (*OtherReplyExtensions) ProtoMessage()    {}
> -
> -func (m *OtherReplyExtensions) GetKey() int32 {
> -	if m != nil && m.Key != nil {
> -		return *m.Key
> -	}
> -	return 0
> -}
> -
> -type OldReply struct {
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *OldReply) Reset()         { *m = OldReply{} }
> -func (m *OldReply) String() string { return proto.CompactTextString(m) }
> -func (*OldReply) ProtoMessage()    {}
> -
> -func (m *OldReply) Marshal() ([]byte, error) {
> -	return proto.MarshalMessageSet(&m.XXX_InternalExtensions)
> -}
> -func (m *OldReply) Unmarshal(buf []byte) error {
> -	return proto.UnmarshalMessageSet(buf, &m.XXX_InternalExtensions)
> -}
> -func (m *OldReply) MarshalJSON() ([]byte, error) {
> -	return proto.MarshalMessageSetJSON(&m.XXX_InternalExtensions)
> -}
> -func (m *OldReply) UnmarshalJSON(buf []byte) error {
> -	return proto.UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions)
> -}
> -
> -// ensure OldReply satisfies proto.Marshaler and proto.Unmarshaler
> -var _ proto.Marshaler = (*OldReply)(nil)
> -var _ proto.Unmarshaler = (*OldReply)(nil)
> -
> -var extRange_OldReply = []proto.ExtensionRange{
> -	{100, 2147483646},
> -}
> -
> -func (*OldReply) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_OldReply
> -}
> -
> -type Communique struct {
> -	MakeMeCry *bool `protobuf:"varint,1,opt,name=make_me_cry,json=makeMeCry" json:"make_me_cry,omitempty"`
> -	// This is a oneof, called "union".
> -	//
> -	// Types that are valid to be assigned to Union:
> -	//	*Communique_Number
> -	//	*Communique_Name
> -	//	*Communique_Data
> -	//	*Communique_TempC
> -	//	*Communique_Height
> -	//	*Communique_Today
> -	//	*Communique_Maybe
> -	//	*Communique_Delta_
> -	//	*Communique_Msg
> -	//	*Communique_Somegroup
> -	Union            isCommunique_Union `protobuf_oneof:"union"`
> -	XXX_unrecognized []byte             `json:"-"`
> -}
> -
> -func (m *Communique) Reset()         { *m = Communique{} }
> -func (m *Communique) String() string { return proto.CompactTextString(m) }
> -func (*Communique) ProtoMessage()    {}
> -
> -type isCommunique_Union interface {
> -	isCommunique_Union()
> -}
> -
> -type Communique_Number struct {
> -	Number int32 `protobuf:"varint,5,opt,name=number,oneof"`
> -}
> -type Communique_Name struct {
> -	Name string `protobuf:"bytes,6,opt,name=name,oneof"`
> -}
> -type Communique_Data struct {
> -	Data []byte `protobuf:"bytes,7,opt,name=data,oneof"`
> -}
> -type Communique_TempC struct {
> -	TempC float64 `protobuf:"fixed64,8,opt,name=temp_c,json=tempC,oneof"`
> -}
> -type Communique_Height struct {
> -	Height float32 `protobuf:"fixed32,9,opt,name=height,oneof"`
> -}
> -type Communique_Today struct {
> -	Today Days `protobuf:"varint,10,opt,name=today,enum=my.test.Days,oneof"`
> -}
> -type Communique_Maybe struct {
> -	Maybe bool `protobuf:"varint,11,opt,name=maybe,oneof"`
> -}
> -type Communique_Delta_ struct {
> -	Delta int32 `protobuf:"zigzag32,12,opt,name=delta,oneof"`
> -}
> -type Communique_Msg struct {
> -	Msg *Reply `protobuf:"bytes,13,opt,name=msg,oneof"`
> -}
> -type Communique_Somegroup struct {
> -	Somegroup *Communique_SomeGroup `protobuf:"group,14,opt,name=SomeGroup,json=somegroup,oneof"`
> -}
> -
> -func (*Communique_Number) isCommunique_Union()    {}
> -func (*Communique_Name) isCommunique_Union()      {}
> -func (*Communique_Data) isCommunique_Union()      {}
> -func (*Communique_TempC) isCommunique_Union()     {}
> -func (*Communique_Height) isCommunique_Union()    {}
> -func (*Communique_Today) isCommunique_Union()     {}
> -func (*Communique_Maybe) isCommunique_Union()     {}
> -func (*Communique_Delta_) isCommunique_Union()    {}
> -func (*Communique_Msg) isCommunique_Union()       {}
> -func (*Communique_Somegroup) isCommunique_Union() {}
> -
> -func (m *Communique) GetUnion() isCommunique_Union {
> -	if m != nil {
> -		return m.Union
> -	}
> -	return nil
> -}
> -
> -func (m *Communique) GetMakeMeCry() bool {
> -	if m != nil && m.MakeMeCry != nil {
> -		return *m.MakeMeCry
> -	}
> -	return false
> -}
> -
> -func (m *Communique) GetNumber() int32 {
> -	if x, ok := m.GetUnion().(*Communique_Number); ok {
> -		return x.Number
> -	}
> -	return 0
> -}
> -
> -func (m *Communique) GetName() string {
> -	if x, ok := m.GetUnion().(*Communique_Name); ok {
> -		return x.Name
> -	}
> -	return ""
> -}
> -
> -func (m *Communique) GetData() []byte {
> -	if x, ok := m.GetUnion().(*Communique_Data); ok {
> -		return x.Data
> -	}
> -	return nil
> -}
> -
> -func (m *Communique) GetTempC() float64 {
> -	if x, ok := m.GetUnion().(*Communique_TempC); ok {
> -		return x.TempC
> -	}
> -	return 0
> -}
> -
> -func (m *Communique) GetHeight() float32 {
> -	if x, ok := m.GetUnion().(*Communique_Height); ok {
> -		return x.Height
> -	}
> -	return 0
> -}
> -
> -func (m *Communique) GetToday() Days {
> -	if x, ok := m.GetUnion().(*Communique_Today); ok {
> -		return x.Today
> -	}
> -	return Days_MONDAY
> -}
> -
> -func (m *Communique) GetMaybe() bool {
> -	if x, ok := m.GetUnion().(*Communique_Maybe); ok {
> -		return x.Maybe
> -	}
> -	return false
> -}
> -
> -func (m *Communique) GetDelta() int32 {
> -	if x, ok := m.GetUnion().(*Communique_Delta_); ok {
> -		return x.Delta
> -	}
> -	return 0
> -}
> -
> -func (m *Communique) GetMsg() *Reply {
> -	if x, ok := m.GetUnion().(*Communique_Msg); ok {
> -		return x.Msg
> -	}
> -	return nil
> -}
> -
> -func (m *Communique) GetSomegroup() *Communique_SomeGroup {
> -	if x, ok := m.GetUnion().(*Communique_Somegroup); ok {
> -		return x.Somegroup
> -	}
> -	return nil
> -}
> -
> -// XXX_OneofFuncs is for the internal use of the proto package.
> -func (*Communique) 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 _Communique_OneofMarshaler, _Communique_OneofUnmarshaler, _Communique_OneofSizer, []interface{}{
> -		(*Communique_Number)(nil),
> -		(*Communique_Name)(nil),
> -		(*Communique_Data)(nil),
> -		(*Communique_TempC)(nil),
> -		(*Communique_Height)(nil),
> -		(*Communique_Today)(nil),
> -		(*Communique_Maybe)(nil),
> -		(*Communique_Delta_)(nil),
> -		(*Communique_Msg)(nil),
> -		(*Communique_Somegroup)(nil),
> -	}
> -}
> -
> -func _Communique_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
> -	m := msg.(*Communique)
> -	// union
> -	switch x := m.Union.(type) {
> -	case *Communique_Number:
> -		b.EncodeVarint(5<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.Number))
> -	case *Communique_Name:
> -		b.EncodeVarint(6<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.Name)
> -	case *Communique_Data:
> -		b.EncodeVarint(7<<3 | proto.WireBytes)
> -		b.EncodeRawBytes(x.Data)
> -	case *Communique_TempC:
> -		b.EncodeVarint(8<<3 | proto.WireFixed64)
> -		b.EncodeFixed64(math.Float64bits(x.TempC))
> -	case *Communique_Height:
> -		b.EncodeVarint(9<<3 | proto.WireFixed32)
> -		b.EncodeFixed32(uint64(math.Float32bits(x.Height)))
> -	case *Communique_Today:
> -		b.EncodeVarint(10<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.Today))
> -	case *Communique_Maybe:
> -		t := uint64(0)
> -		if x.Maybe {
> -			t = 1
> -		}
> -		b.EncodeVarint(11<<3 | proto.WireVarint)
> -		b.EncodeVarint(t)
> -	case *Communique_Delta_:
> -		b.EncodeVarint(12<<3 | proto.WireVarint)
> -		b.EncodeZigzag32(uint64(x.Delta))
> -	case *Communique_Msg:
> -		b.EncodeVarint(13<<3 | proto.WireBytes)
> -		if err := b.EncodeMessage(x.Msg); err != nil {
> -			return err
> -		}
> -	case *Communique_Somegroup:
> -		b.EncodeVarint(14<<3 | proto.WireStartGroup)
> -		if err := b.Marshal(x.Somegroup); err != nil {
> -			return err
> -		}
> -		b.EncodeVarint(14<<3 | proto.WireEndGroup)
> -	case nil:
> -	default:
> -		return fmt.Errorf("Communique.Union has unexpected type %T", x)
> -	}
> -	return nil
> -}
> -
> -func _Communique_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
> -	m := msg.(*Communique)
> -	switch tag {
> -	case 5: // union.number
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Communique_Number{int32(x)}
> -		return true, err
> -	case 6: // union.name
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Union = &Communique_Name{x}
> -		return true, err
> -	case 7: // union.data
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeRawBytes(true)
> -		m.Union = &Communique_Data{x}
> -		return true, err
> -	case 8: // union.temp_c
> -		if wire != proto.WireFixed64 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed64()
> -		m.Union = &Communique_TempC{math.Float64frombits(x)}
> -		return true, err
> -	case 9: // union.height
> -		if wire != proto.WireFixed32 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed32()
> -		m.Union = &Communique_Height{math.Float32frombits(uint32(x))}
> -		return true, err
> -	case 10: // union.today
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Communique_Today{Days(x)}
> -		return true, err
> -	case 11: // union.maybe
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Communique_Maybe{x != 0}
> -		return true, err
> -	case 12: // union.delta
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeZigzag32()
> -		m.Union = &Communique_Delta_{int32(x)}
> -		return true, err
> -	case 13: // union.msg
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		msg := new(Reply)
> -		err := b.DecodeMessage(msg)
> -		m.Union = &Communique_Msg{msg}
> -		return true, err
> -	case 14: // union.somegroup
> -		if wire != proto.WireStartGroup {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		msg := new(Communique_SomeGroup)
> -		err := b.DecodeGroup(msg)
> -		m.Union = &Communique_Somegroup{msg}
> -		return true, err
> -	default:
> -		return false, nil
> -	}
> -}
> -
> -func _Communique_OneofSizer(msg proto.Message) (n int) {
> -	m := msg.(*Communique)
> -	// union
> -	switch x := m.Union.(type) {
> -	case *Communique_Number:
> -		n += proto.SizeVarint(5<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.Number))
> -	case *Communique_Name:
> -		n += proto.SizeVarint(6<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.Name)))
> -		n += len(x.Name)
> -	case *Communique_Data:
> -		n += proto.SizeVarint(7<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.Data)))
> -		n += len(x.Data)
> -	case *Communique_TempC:
> -		n += proto.SizeVarint(8<<3 | proto.WireFixed64)
> -		n += 8
> -	case *Communique_Height:
> -		n += proto.SizeVarint(9<<3 | proto.WireFixed32)
> -		n += 4
> -	case *Communique_Today:
> -		n += proto.SizeVarint(10<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.Today))
> -	case *Communique_Maybe:
> -		n += proto.SizeVarint(11<<3 | proto.WireVarint)
> -		n += 1
> -	case *Communique_Delta_:
> -		n += proto.SizeVarint(12<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64((uint32(x.Delta) << 1) ^ uint32((int32(x.Delta) >> 31))))
> -	case *Communique_Msg:
> -		s := proto.Size(x.Msg)
> -		n += proto.SizeVarint(13<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(s))
> -		n += s
> -	case *Communique_Somegroup:
> -		n += proto.SizeVarint(14<<3 | proto.WireStartGroup)
> -		n += proto.Size(x.Somegroup)
> -		n += proto.SizeVarint(14<<3 | proto.WireEndGroup)
> -	case nil:
> -	default:
> -		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
> -	}
> -	return n
> -}
> -
> -type Communique_SomeGroup struct {
> -	Member           *string `protobuf:"bytes,15,opt,name=member" json:"member,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *Communique_SomeGroup) Reset()         { *m = Communique_SomeGroup{} }
> -func (m *Communique_SomeGroup) String() string { return proto.CompactTextString(m) }
> -func (*Communique_SomeGroup) ProtoMessage()    {}
> -
> -func (m *Communique_SomeGroup) GetMember() string {
> -	if m != nil && m.Member != nil {
> -		return *m.Member
> -	}
> -	return ""
> -}
> -
> -type Communique_Delta struct {
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *Communique_Delta) Reset()         { *m = Communique_Delta{} }
> -func (m *Communique_Delta) String() string { return proto.CompactTextString(m) }
> -func (*Communique_Delta) ProtoMessage()    {}
> -
> -var E_Tag = &proto.ExtensionDesc{
> -	ExtendedType:  (*Reply)(nil),
> -	ExtensionType: (*string)(nil),
> -	Field:         103,
> -	Name:          "my.test.tag",
> -	Tag:           "bytes,103,opt,name=tag",
> -	Filename:      "my_test/test.proto",
> -}
> -
> -var E_Donut = &proto.ExtensionDesc{
> -	ExtendedType:  (*Reply)(nil),
> -	ExtensionType: (*OtherReplyExtensions)(nil),
> -	Field:         106,
> -	Name:          "my.test.donut",
> -	Tag:           "bytes,106,opt,name=donut",
> -	Filename:      "my_test/test.proto",
> -}
> -
> -func init() {
> -	proto.RegisterType((*Request)(nil), "my.test.Request")
> -	proto.RegisterType((*Request_SomeGroup)(nil), "my.test.Request.SomeGroup")
> -	proto.RegisterType((*Reply)(nil), "my.test.Reply")
> -	proto.RegisterType((*Reply_Entry)(nil), "my.test.Reply.Entry")
> -	proto.RegisterType((*OtherBase)(nil), "my.test.OtherBase")
> -	proto.RegisterType((*ReplyExtensions)(nil), "my.test.ReplyExtensions")
> -	proto.RegisterType((*OtherReplyExtensions)(nil), "my.test.OtherReplyExtensions")
> -	proto.RegisterType((*OldReply)(nil), "my.test.OldReply")
> -	proto.RegisterType((*Communique)(nil), "my.test.Communique")
> -	proto.RegisterType((*Communique_SomeGroup)(nil), "my.test.Communique.SomeGroup")
> -	proto.RegisterType((*Communique_Delta)(nil), "my.test.Communique.Delta")
> -	proto.RegisterEnum("my.test.HatType", HatType_name, HatType_value)
> -	proto.RegisterEnum("my.test.Days", Days_name, Days_value)
> -	proto.RegisterEnum("my.test.Request_Color", Request_Color_name, Request_Color_value)
> -	proto.RegisterEnum("my.test.Reply_Entry_Game", Reply_Entry_Game_name, Reply_Entry_Game_value)
> -	proto.RegisterExtension(E_ReplyExtensions_Time)
> -	proto.RegisterExtension(E_ReplyExtensions_Carrot)
> -	proto.RegisterExtension(E_ReplyExtensions_Donut)
> -	proto.RegisterExtension(E_Tag)
> -	proto.RegisterExtension(E_Donut)
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden
> deleted file mode 100644
> index 1954e3fb..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden
> +++ /dev/null
> @@ -1,870 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: my_test/test.proto
> -
> -/*
> -Package my_test is a generated protocol buffer package.
> -
> -This package holds interesting messages.
> -
> -It is generated from these files:
> -	my_test/test.proto
> -
> -It has these top-level messages:
> -	Request
> -	Reply
> -	OtherBase
> -	ReplyExtensions
> -	OtherReplyExtensions
> -	OldReply
> -	Communique
> -*/
> -package my_test
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -import _ "github.com/golang/protobuf/protoc-gen-go/testdata/multi"
> -
> -// 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 HatType int32
> -
> -const (
> -	// deliberately skipping 0
> -	HatType_FEDORA HatType = 1
> -	HatType_FEZ    HatType = 2
> -)
> -
> -var HatType_name = map[int32]string{
> -	1: "FEDORA",
> -	2: "FEZ",
> -}
> -var HatType_value = map[string]int32{
> -	"FEDORA": 1,
> -	"FEZ":    2,
> -}
> -
> -func (x HatType) Enum() *HatType {
> -	p := new(HatType)
> -	*p = x
> -	return p
> -}
> -func (x HatType) String() string {
> -	return proto.EnumName(HatType_name, int32(x))
> -}
> -func (x *HatType) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(HatType_value, data, "HatType")
> -	if err != nil {
> -		return err
> -	}
> -	*x = HatType(value)
> -	return nil
> -}
> -
> -// This enum represents days of the week.
> -type Days int32
> -
> -const (
> -	Days_MONDAY  Days = 1
> -	Days_TUESDAY Days = 2
> -	Days_LUNDI   Days = 1
> -)
> -
> -var Days_name = map[int32]string{
> -	1: "MONDAY",
> -	2: "TUESDAY",
> -	// Duplicate value: 1: "LUNDI",
> -}
> -var Days_value = map[string]int32{
> -	"MONDAY":  1,
> -	"TUESDAY": 2,
> -	"LUNDI":   1,
> -}
> -
> -func (x Days) Enum() *Days {
> -	p := new(Days)
> -	*p = x
> -	return p
> -}
> -func (x Days) String() string {
> -	return proto.EnumName(Days_name, int32(x))
> -}
> -func (x *Days) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(Days_value, data, "Days")
> -	if err != nil {
> -		return err
> -	}
> -	*x = Days(value)
> -	return nil
> -}
> -
> -type Request_Color int32
> -
> -const (
> -	Request_RED   Request_Color = 0
> -	Request_GREEN Request_Color = 1
> -	Request_BLUE  Request_Color = 2
> -)
> -
> -var Request_Color_name = map[int32]string{
> -	0: "RED",
> -	1: "GREEN",
> -	2: "BLUE",
> -}
> -var Request_Color_value = map[string]int32{
> -	"RED":   0,
> -	"GREEN": 1,
> -	"BLUE":  2,
> -}
> -
> -func (x Request_Color) Enum() *Request_Color {
> -	p := new(Request_Color)
> -	*p = x
> -	return p
> -}
> -func (x Request_Color) String() string {
> -	return proto.EnumName(Request_Color_name, int32(x))
> -}
> -func (x *Request_Color) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(Request_Color_value, data, "Request_Color")
> -	if err != nil {
> -		return err
> -	}
> -	*x = Request_Color(value)
> -	return nil
> -}
> -
> -type Reply_Entry_Game int32
> -
> -const (
> -	Reply_Entry_FOOTBALL Reply_Entry_Game = 1
> -	Reply_Entry_TENNIS   Reply_Entry_Game = 2
> -)
> -
> -var Reply_Entry_Game_name = map[int32]string{
> -	1: "FOOTBALL",
> -	2: "TENNIS",
> -}
> -var Reply_Entry_Game_value = map[string]int32{
> -	"FOOTBALL": 1,
> -	"TENNIS":   2,
> -}
> -
> -func (x Reply_Entry_Game) Enum() *Reply_Entry_Game {
> -	p := new(Reply_Entry_Game)
> -	*p = x
> -	return p
> -}
> -func (x Reply_Entry_Game) String() string {
> -	return proto.EnumName(Reply_Entry_Game_name, int32(x))
> -}
> -func (x *Reply_Entry_Game) UnmarshalJSON(data []byte) error {
> -	value, err := proto.UnmarshalJSONEnum(Reply_Entry_Game_value, data, "Reply_Entry_Game")
> -	if err != nil {
> -		return err
> -	}
> -	*x = Reply_Entry_Game(value)
> -	return nil
> -}
> -
> -// This is a message that might be sent somewhere.
> -type Request struct {
> -	Key []int64 `protobuf:"varint,1,rep,name=key" json:"key,omitempty"`
> -	//  optional imp.ImportedMessage imported_message = 2;
> -	Hue *Request_Color `protobuf:"varint,3,opt,name=hue,enum=my.test.Request_Color" json:"hue,omitempty"`
> -	Hat *HatType       `protobuf:"varint,4,opt,name=hat,enum=my.test.HatType,def=1" json:"hat,omitempty"`
> -	//  optional imp.ImportedMessage.Owner owner = 6;
> -	Deadline  *float32           `protobuf:"fixed32,7,opt,name=deadline,def=inf" json:"deadline,omitempty"`
> -	Somegroup *Request_SomeGroup `protobuf:"group,8,opt,name=SomeGroup,json=somegroup" json:"somegroup,omitempty"`
> -	// This is a map field. It will generate map[int32]string.
> -	NameMapping map[int32]string `protobuf:"bytes,14,rep,name=name_mapping,json=nameMapping" json:"name_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	// This is a map field whose value type is a message.
> -	MsgMapping map[int64]*Reply `protobuf:"bytes,15,rep,name=msg_mapping,json=msgMapping" json:"msg_mapping,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -	Reset_     *int32           `protobuf:"varint,12,opt,name=reset" json:"reset,omitempty"`
> -	// This field should not conflict with any getters.
> -	GetKey_          *string `protobuf:"bytes,16,opt,name=get_key,json=getKey" json:"get_key,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *Request) Reset()         { *m = Request{} }
> -func (m *Request) String() string { return proto.CompactTextString(m) }
> -func (*Request) ProtoMessage()    {}
> -
> -const Default_Request_Hat HatType = HatType_FEDORA
> -
> -var Default_Request_Deadline float32 = float32(math.Inf(1))
> -
> -func (m *Request) GetKey() []int64 {
> -	if m != nil {
> -		return m.Key
> -	}
> -	return nil
> -}
> -
> -func (m *Request) GetHue() Request_Color {
> -	if m != nil && m.Hue != nil {
> -		return *m.Hue
> -	}
> -	return Request_RED
> -}
> -
> -func (m *Request) GetHat() HatType {
> -	if m != nil && m.Hat != nil {
> -		return *m.Hat
> -	}
> -	return Default_Request_Hat
> -}
> -
> -func (m *Request) GetDeadline() float32 {
> -	if m != nil && m.Deadline != nil {
> -		return *m.Deadline
> -	}
> -	return Default_Request_Deadline
> -}
> -
> -func (m *Request) GetSomegroup() *Request_SomeGroup {
> -	if m != nil {
> -		return m.Somegroup
> -	}
> -	return nil
> -}
> -
> -func (m *Request) GetNameMapping() map[int32]string {
> -	if m != nil {
> -		return m.NameMapping
> -	}
> -	return nil
> -}
> -
> -func (m *Request) GetMsgMapping() map[int64]*Reply {
> -	if m != nil {
> -		return m.MsgMapping
> -	}
> -	return nil
> -}
> -
> -func (m *Request) GetReset_() int32 {
> -	if m != nil && m.Reset_ != nil {
> -		return *m.Reset_
> -	}
> -	return 0
> -}
> -
> -func (m *Request) GetGetKey_() string {
> -	if m != nil && m.GetKey_ != nil {
> -		return *m.GetKey_
> -	}
> -	return ""
> -}
> -
> -type Request_SomeGroup struct {
> -	GroupField       *int32 `protobuf:"varint,9,opt,name=group_field,json=groupField" json:"group_field,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *Request_SomeGroup) Reset()         { *m = Request_SomeGroup{} }
> -func (m *Request_SomeGroup) String() string { return proto.CompactTextString(m) }
> -func (*Request_SomeGroup) ProtoMessage()    {}
> -
> -func (m *Request_SomeGroup) GetGroupField() int32 {
> -	if m != nil && m.GroupField != nil {
> -		return *m.GroupField
> -	}
> -	return 0
> -}
> -
> -type Reply struct {
> -	Found                        []*Reply_Entry `protobuf:"bytes,1,rep,name=found" json:"found,omitempty"`
> -	CompactKeys                  []int32        `protobuf:"varint,2,rep,packed,name=compact_keys,json=compactKeys" json:"compact_keys,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *Reply) Reset()         { *m = Reply{} }
> -func (m *Reply) String() string { return proto.CompactTextString(m) }
> -func (*Reply) ProtoMessage()    {}
> -
> -var extRange_Reply = []proto.ExtensionRange{
> -	{100, 536870911},
> -}
> -
> -func (*Reply) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_Reply
> -}
> -
> -func (m *Reply) GetFound() []*Reply_Entry {
> -	if m != nil {
> -		return m.Found
> -	}
> -	return nil
> -}
> -
> -func (m *Reply) GetCompactKeys() []int32 {
> -	if m != nil {
> -		return m.CompactKeys
> -	}
> -	return nil
> -}
> -
> -type Reply_Entry struct {
> -	KeyThatNeeds_1234Camel_CasIng *int64 `protobuf:"varint,1,req,name=key_that_needs_1234camel_CasIng,json=keyThatNeeds1234camelCasIng" json:"key_that_needs_1234camel_CasIng,omitempty"`
> -	Value                         *int64 `protobuf:"varint,2,opt,name=value,def=7" json:"value,omitempty"`
> -	XMyFieldName_2                *int64 `protobuf:"varint,3,opt,name=_my_field_name_2,json=MyFieldName2" json:"_my_field_name_2,omitempty"`
> -	XXX_unrecognized              []byte `json:"-"`
> -}
> -
> -func (m *Reply_Entry) Reset()         { *m = Reply_Entry{} }
> -func (m *Reply_Entry) String() string { return proto.CompactTextString(m) }
> -func (*Reply_Entry) ProtoMessage()    {}
> -
> -const Default_Reply_Entry_Value int64 = 7
> -
> -func (m *Reply_Entry) GetKeyThatNeeds_1234Camel_CasIng() int64 {
> -	if m != nil && m.KeyThatNeeds_1234Camel_CasIng != nil {
> -		return *m.KeyThatNeeds_1234Camel_CasIng
> -	}
> -	return 0
> -}
> -
> -func (m *Reply_Entry) GetValue() int64 {
> -	if m != nil && m.Value != nil {
> -		return *m.Value
> -	}
> -	return Default_Reply_Entry_Value
> -}
> -
> -func (m *Reply_Entry) GetXMyFieldName_2() int64 {
> -	if m != nil && m.XMyFieldName_2 != nil {
> -		return *m.XMyFieldName_2
> -	}
> -	return 0
> -}
> -
> -type OtherBase struct {
> -	Name                         *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *OtherBase) Reset()         { *m = OtherBase{} }
> -func (m *OtherBase) String() string { return proto.CompactTextString(m) }
> -func (*OtherBase) ProtoMessage()    {}
> -
> -var extRange_OtherBase = []proto.ExtensionRange{
> -	{100, 536870911},
> -}
> -
> -func (*OtherBase) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_OtherBase
> -}
> -
> -func (m *OtherBase) GetName() string {
> -	if m != nil && m.Name != nil {
> -		return *m.Name
> -	}
> -	return ""
> -}
> -
> -type ReplyExtensions struct {
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *ReplyExtensions) Reset()         { *m = ReplyExtensions{} }
> -func (m *ReplyExtensions) String() string { return proto.CompactTextString(m) }
> -func (*ReplyExtensions) ProtoMessage()    {}
> -
> -var E_ReplyExtensions_Time = &proto.ExtensionDesc{
> -	ExtendedType:  (*Reply)(nil),
> -	ExtensionType: (*float64)(nil),
> -	Field:         101,
> -	Name:          "my.test.ReplyExtensions.time",
> -	Tag:           "fixed64,101,opt,name=time",
> -	Filename:      "my_test/test.proto",
> -}
> -
> -var E_ReplyExtensions_Carrot = &proto.ExtensionDesc{
> -	ExtendedType:  (*Reply)(nil),
> -	ExtensionType: (*ReplyExtensions)(nil),
> -	Field:         105,
> -	Name:          "my.test.ReplyExtensions.carrot",
> -	Tag:           "bytes,105,opt,name=carrot",
> -	Filename:      "my_test/test.proto",
> -}
> -
> -var E_ReplyExtensions_Donut = &proto.ExtensionDesc{
> -	ExtendedType:  (*OtherBase)(nil),
> -	ExtensionType: (*ReplyExtensions)(nil),
> -	Field:         101,
> -	Name:          "my.test.ReplyExtensions.donut",
> -	Tag:           "bytes,101,opt,name=donut",
> -	Filename:      "my_test/test.proto",
> -}
> -
> -type OtherReplyExtensions struct {
> -	Key              *int32 `protobuf:"varint,1,opt,name=key" json:"key,omitempty"`
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *OtherReplyExtensions) Reset()         { *m = OtherReplyExtensions{} }
> -func (m *OtherReplyExtensions) String() string { return proto.CompactTextString(m) }
> -func (*OtherReplyExtensions) ProtoMessage()    {}
> -
> -func (m *OtherReplyExtensions) GetKey() int32 {
> -	if m != nil && m.Key != nil {
> -		return *m.Key
> -	}
> -	return 0
> -}
> -
> -type OldReply struct {
> -	proto.XXX_InternalExtensions `json:"-"`
> -	XXX_unrecognized             []byte `json:"-"`
> -}
> -
> -func (m *OldReply) Reset()         { *m = OldReply{} }
> -func (m *OldReply) String() string { return proto.CompactTextString(m) }
> -func (*OldReply) ProtoMessage()    {}
> -
> -func (m *OldReply) Marshal() ([]byte, error) {
> -	return proto.MarshalMessageSet(&m.XXX_InternalExtensions)
> -}
> -func (m *OldReply) Unmarshal(buf []byte) error {
> -	return proto.UnmarshalMessageSet(buf, &m.XXX_InternalExtensions)
> -}
> -func (m *OldReply) MarshalJSON() ([]byte, error) {
> -	return proto.MarshalMessageSetJSON(&m.XXX_InternalExtensions)
> -}
> -func (m *OldReply) UnmarshalJSON(buf []byte) error {
> -	return proto.UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions)
> -}
> -
> -// ensure OldReply satisfies proto.Marshaler and proto.Unmarshaler
> -var _ proto.Marshaler = (*OldReply)(nil)
> -var _ proto.Unmarshaler = (*OldReply)(nil)
> -
> -var extRange_OldReply = []proto.ExtensionRange{
> -	{100, 2147483646},
> -}
> -
> -func (*OldReply) ExtensionRangeArray() []proto.ExtensionRange {
> -	return extRange_OldReply
> -}
> -
> -type Communique struct {
> -	MakeMeCry *bool `protobuf:"varint,1,opt,name=make_me_cry,json=makeMeCry" json:"make_me_cry,omitempty"`
> -	// This is a oneof, called "union".
> -	//
> -	// Types that are valid to be assigned to Union:
> -	//	*Communique_Number
> -	//	*Communique_Name
> -	//	*Communique_Data
> -	//	*Communique_TempC
> -	//	*Communique_Height
> -	//	*Communique_Today
> -	//	*Communique_Maybe
> -	//	*Communique_Delta_
> -	//	*Communique_Msg
> -	//	*Communique_Somegroup
> -	Union            isCommunique_Union `protobuf_oneof:"union"`
> -	XXX_unrecognized []byte             `json:"-"`
> -}
> -
> -func (m *Communique) Reset()         { *m = Communique{} }
> -func (m *Communique) String() string { return proto.CompactTextString(m) }
> -func (*Communique) ProtoMessage()    {}
> -
> -type isCommunique_Union interface {
> -	isCommunique_Union()
> -}
> -
> -type Communique_Number struct {
> -	Number int32 `protobuf:"varint,5,opt,name=number,oneof"`
> -}
> -type Communique_Name struct {
> -	Name string `protobuf:"bytes,6,opt,name=name,oneof"`
> -}
> -type Communique_Data struct {
> -	Data []byte `protobuf:"bytes,7,opt,name=data,oneof"`
> -}
> -type Communique_TempC struct {
> -	TempC float64 `protobuf:"fixed64,8,opt,name=temp_c,json=tempC,oneof"`
> -}
> -type Communique_Height struct {
> -	Height float32 `protobuf:"fixed32,9,opt,name=height,oneof"`
> -}
> -type Communique_Today struct {
> -	Today Days `protobuf:"varint,10,opt,name=today,enum=my.test.Days,oneof"`
> -}
> -type Communique_Maybe struct {
> -	Maybe bool `protobuf:"varint,11,opt,name=maybe,oneof"`
> -}
> -type Communique_Delta_ struct {
> -	Delta int32 `protobuf:"zigzag32,12,opt,name=delta,oneof"`
> -}
> -type Communique_Msg struct {
> -	Msg *Reply `protobuf:"bytes,13,opt,name=msg,oneof"`
> -}
> -type Communique_Somegroup struct {
> -	Somegroup *Communique_SomeGroup `protobuf:"group,14,opt,name=SomeGroup,json=somegroup,oneof"`
> -}
> -
> -func (*Communique_Number) isCommunique_Union()    {}
> -func (*Communique_Name) isCommunique_Union()      {}
> -func (*Communique_Data) isCommunique_Union()      {}
> -func (*Communique_TempC) isCommunique_Union()     {}
> -func (*Communique_Height) isCommunique_Union()    {}
> -func (*Communique_Today) isCommunique_Union()     {}
> -func (*Communique_Maybe) isCommunique_Union()     {}
> -func (*Communique_Delta_) isCommunique_Union()    {}
> -func (*Communique_Msg) isCommunique_Union()       {}
> -func (*Communique_Somegroup) isCommunique_Union() {}
> -
> -func (m *Communique) GetUnion() isCommunique_Union {
> -	if m != nil {
> -		return m.Union
> -	}
> -	return nil
> -}
> -
> -func (m *Communique) GetMakeMeCry() bool {
> -	if m != nil && m.MakeMeCry != nil {
> -		return *m.MakeMeCry
> -	}
> -	return false
> -}
> -
> -func (m *Communique) GetNumber() int32 {
> -	if x, ok := m.GetUnion().(*Communique_Number); ok {
> -		return x.Number
> -	}
> -	return 0
> -}
> -
> -func (m *Communique) GetName() string {
> -	if x, ok := m.GetUnion().(*Communique_Name); ok {
> -		return x.Name
> -	}
> -	return ""
> -}
> -
> -func (m *Communique) GetData() []byte {
> -	if x, ok := m.GetUnion().(*Communique_Data); ok {
> -		return x.Data
> -	}
> -	return nil
> -}
> -
> -func (m *Communique) GetTempC() float64 {
> -	if x, ok := m.GetUnion().(*Communique_TempC); ok {
> -		return x.TempC
> -	}
> -	return 0
> -}
> -
> -func (m *Communique) GetHeight() float32 {
> -	if x, ok := m.GetUnion().(*Communique_Height); ok {
> -		return x.Height
> -	}
> -	return 0
> -}
> -
> -func (m *Communique) GetToday() Days {
> -	if x, ok := m.GetUnion().(*Communique_Today); ok {
> -		return x.Today
> -	}
> -	return Days_MONDAY
> -}
> -
> -func (m *Communique) GetMaybe() bool {
> -	if x, ok := m.GetUnion().(*Communique_Maybe); ok {
> -		return x.Maybe
> -	}
> -	return false
> -}
> -
> -func (m *Communique) GetDelta() int32 {
> -	if x, ok := m.GetUnion().(*Communique_Delta_); ok {
> -		return x.Delta
> -	}
> -	return 0
> -}
> -
> -func (m *Communique) GetMsg() *Reply {
> -	if x, ok := m.GetUnion().(*Communique_Msg); ok {
> -		return x.Msg
> -	}
> -	return nil
> -}
> -
> -func (m *Communique) GetSomegroup() *Communique_SomeGroup {
> -	if x, ok := m.GetUnion().(*Communique_Somegroup); ok {
> -		return x.Somegroup
> -	}
> -	return nil
> -}
> -
> -// XXX_OneofFuncs is for the internal use of the proto package.
> -func (*Communique) 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 _Communique_OneofMarshaler, _Communique_OneofUnmarshaler, _Communique_OneofSizer, []interface{}{
> -		(*Communique_Number)(nil),
> -		(*Communique_Name)(nil),
> -		(*Communique_Data)(nil),
> -		(*Communique_TempC)(nil),
> -		(*Communique_Height)(nil),
> -		(*Communique_Today)(nil),
> -		(*Communique_Maybe)(nil),
> -		(*Communique_Delta_)(nil),
> -		(*Communique_Msg)(nil),
> -		(*Communique_Somegroup)(nil),
> -	}
> -}
> -
> -func _Communique_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
> -	m := msg.(*Communique)
> -	// union
> -	switch x := m.Union.(type) {
> -	case *Communique_Number:
> -		b.EncodeVarint(5<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.Number))
> -	case *Communique_Name:
> -		b.EncodeVarint(6<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.Name)
> -	case *Communique_Data:
> -		b.EncodeVarint(7<<3 | proto.WireBytes)
> -		b.EncodeRawBytes(x.Data)
> -	case *Communique_TempC:
> -		b.EncodeVarint(8<<3 | proto.WireFixed64)
> -		b.EncodeFixed64(math.Float64bits(x.TempC))
> -	case *Communique_Height:
> -		b.EncodeVarint(9<<3 | proto.WireFixed32)
> -		b.EncodeFixed32(uint64(math.Float32bits(x.Height)))
> -	case *Communique_Today:
> -		b.EncodeVarint(10<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.Today))
> -	case *Communique_Maybe:
> -		t := uint64(0)
> -		if x.Maybe {
> -			t = 1
> -		}
> -		b.EncodeVarint(11<<3 | proto.WireVarint)
> -		b.EncodeVarint(t)
> -	case *Communique_Delta_:
> -		b.EncodeVarint(12<<3 | proto.WireVarint)
> -		b.EncodeZigzag32(uint64(x.Delta))
> -	case *Communique_Msg:
> -		b.EncodeVarint(13<<3 | proto.WireBytes)
> -		if err := b.EncodeMessage(x.Msg); err != nil {
> -			return err
> -		}
> -	case *Communique_Somegroup:
> -		b.EncodeVarint(14<<3 | proto.WireStartGroup)
> -		if err := b.Marshal(x.Somegroup); err != nil {
> -			return err
> -		}
> -		b.EncodeVarint(14<<3 | proto.WireEndGroup)
> -	case nil:
> -	default:
> -		return fmt.Errorf("Communique.Union has unexpected type %T", x)
> -	}
> -	return nil
> -}
> -
> -func _Communique_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
> -	m := msg.(*Communique)
> -	switch tag {
> -	case 5: // union.number
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Communique_Number{int32(x)}
> -		return true, err
> -	case 6: // union.name
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Union = &Communique_Name{x}
> -		return true, err
> -	case 7: // union.data
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeRawBytes(true)
> -		m.Union = &Communique_Data{x}
> -		return true, err
> -	case 8: // union.temp_c
> -		if wire != proto.WireFixed64 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed64()
> -		m.Union = &Communique_TempC{math.Float64frombits(x)}
> -		return true, err
> -	case 9: // union.height
> -		if wire != proto.WireFixed32 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed32()
> -		m.Union = &Communique_Height{math.Float32frombits(uint32(x))}
> -		return true, err
> -	case 10: // union.today
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Communique_Today{Days(x)}
> -		return true, err
> -	case 11: // union.maybe
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Union = &Communique_Maybe{x != 0}
> -		return true, err
> -	case 12: // union.delta
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeZigzag32()
> -		m.Union = &Communique_Delta_{int32(x)}
> -		return true, err
> -	case 13: // union.msg
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		msg := new(Reply)
> -		err := b.DecodeMessage(msg)
> -		m.Union = &Communique_Msg{msg}
> -		return true, err
> -	case 14: // union.somegroup
> -		if wire != proto.WireStartGroup {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		msg := new(Communique_SomeGroup)
> -		err := b.DecodeGroup(msg)
> -		m.Union = &Communique_Somegroup{msg}
> -		return true, err
> -	default:
> -		return false, nil
> -	}
> -}
> -
> -func _Communique_OneofSizer(msg proto.Message) (n int) {
> -	m := msg.(*Communique)
> -	// union
> -	switch x := m.Union.(type) {
> -	case *Communique_Number:
> -		n += proto.SizeVarint(5<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.Number))
> -	case *Communique_Name:
> -		n += proto.SizeVarint(6<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.Name)))
> -		n += len(x.Name)
> -	case *Communique_Data:
> -		n += proto.SizeVarint(7<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.Data)))
> -		n += len(x.Data)
> -	case *Communique_TempC:
> -		n += proto.SizeVarint(8<<3 | proto.WireFixed64)
> -		n += 8
> -	case *Communique_Height:
> -		n += proto.SizeVarint(9<<3 | proto.WireFixed32)
> -		n += 4
> -	case *Communique_Today:
> -		n += proto.SizeVarint(10<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.Today))
> -	case *Communique_Maybe:
> -		n += proto.SizeVarint(11<<3 | proto.WireVarint)
> -		n += 1
> -	case *Communique_Delta_:
> -		n += proto.SizeVarint(12<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64((uint32(x.Delta) << 1) ^ uint32((int32(x.Delta) >> 31))))
> -	case *Communique_Msg:
> -		s := proto.Size(x.Msg)
> -		n += proto.SizeVarint(13<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(s))
> -		n += s
> -	case *Communique_Somegroup:
> -		n += proto.SizeVarint(14<<3 | proto.WireStartGroup)
> -		n += proto.Size(x.Somegroup)
> -		n += proto.SizeVarint(14<<3 | proto.WireEndGroup)
> -	case nil:
> -	default:
> -		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
> -	}
> -	return n
> -}
> -
> -type Communique_SomeGroup struct {
> -	Member           *string `protobuf:"bytes,15,opt,name=member" json:"member,omitempty"`
> -	XXX_unrecognized []byte  `json:"-"`
> -}
> -
> -func (m *Communique_SomeGroup) Reset()         { *m = Communique_SomeGroup{} }
> -func (m *Communique_SomeGroup) String() string { return proto.CompactTextString(m) }
> -func (*Communique_SomeGroup) ProtoMessage()    {}
> -
> -func (m *Communique_SomeGroup) GetMember() string {
> -	if m != nil && m.Member != nil {
> -		return *m.Member
> -	}
> -	return ""
> -}
> -
> -type Communique_Delta struct {
> -	XXX_unrecognized []byte `json:"-"`
> -}
> -
> -func (m *Communique_Delta) Reset()         { *m = Communique_Delta{} }
> -func (m *Communique_Delta) String() string { return proto.CompactTextString(m) }
> -func (*Communique_Delta) ProtoMessage()    {}
> -
> -var E_Tag = &proto.ExtensionDesc{
> -	ExtendedType:  (*Reply)(nil),
> -	ExtensionType: (*string)(nil),
> -	Field:         103,
> -	Name:          "my.test.tag",
> -	Tag:           "bytes,103,opt,name=tag",
> -	Filename:      "my_test/test.proto",
> -}
> -
> -var E_Donut = &proto.ExtensionDesc{
> -	ExtendedType:  (*Reply)(nil),
> -	ExtensionType: (*OtherReplyExtensions)(nil),
> -	Field:         106,
> -	Name:          "my.test.donut",
> -	Tag:           "bytes,106,opt,name=donut",
> -	Filename:      "my_test/test.proto",
> -}
> -
> -func init() {
> -	proto.RegisterType((*Request)(nil), "my.test.Request")
> -	proto.RegisterType((*Request_SomeGroup)(nil), "my.test.Request.SomeGroup")
> -	proto.RegisterType((*Reply)(nil), "my.test.Reply")
> -	proto.RegisterType((*Reply_Entry)(nil), "my.test.Reply.Entry")
> -	proto.RegisterType((*OtherBase)(nil), "my.test.OtherBase")
> -	proto.RegisterType((*ReplyExtensions)(nil), "my.test.ReplyExtensions")
> -	proto.RegisterType((*OtherReplyExtensions)(nil), "my.test.OtherReplyExtensions")
> -	proto.RegisterType((*OldReply)(nil), "my.test.OldReply")
> -	proto.RegisterType((*Communique)(nil), "my.test.Communique")
> -	proto.RegisterType((*Communique_SomeGroup)(nil), "my.test.Communique.SomeGroup")
> -	proto.RegisterType((*Communique_Delta)(nil), "my.test.Communique.Delta")
> -	proto.RegisterEnum("my.test.HatType", HatType_name, HatType_value)
> -	proto.RegisterEnum("my.test.Days", Days_name, Days_value)
> -	proto.RegisterEnum("my.test.Request_Color", Request_Color_name, Request_Color_value)
> -	proto.RegisterEnum("my.test.Reply_Entry_Game", Reply_Entry_Game_name, Reply_Entry_Game_value)
> -	proto.RegisterExtension(E_ReplyExtensions_Time)
> -	proto.RegisterExtension(E_ReplyExtensions_Carrot)
> -	proto.RegisterExtension(E_ReplyExtensions_Donut)
> -	proto.RegisterExtension(E_Tag)
> -	proto.RegisterExtension(E_Donut)
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto
> deleted file mode 100644
> index 8e709463..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto
> +++ /dev/null
> @@ -1,156 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2010 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto2";
> -
> -// This package holds interesting messages.
> -package my.test;  // dotted package name
> -
> -//import "imp.proto";
> -import "multi/multi1.proto";  // unused import
> -
> -enum HatType {
> -  // deliberately skipping 0
> -  FEDORA = 1;
> -  FEZ = 2;
> -}
> -
> -// This enum represents days of the week.
> -enum Days {
> -  option allow_alias = true;
> -
> -  MONDAY = 1;
> -  TUESDAY = 2;
> -  LUNDI = 1;  // same value as MONDAY
> -}
> -
> -// This is a message that might be sent somewhere.
> -message Request {
> -  enum Color {
> -    RED = 0;
> -    GREEN = 1;
> -    BLUE = 2;
> -  }
> -  repeated int64 key = 1;
> -//  optional imp.ImportedMessage imported_message = 2;
> -  optional Color hue = 3; // no default
> -  optional HatType hat = 4 [default=FEDORA];
> -//  optional imp.ImportedMessage.Owner owner = 6;
> -  optional float deadline = 7 [default=inf];
> -  optional group SomeGroup = 8 {
> -    optional int32 group_field = 9;
> -  }
> -
> -  // These foreign types are in imp2.proto,
> -  // which is publicly imported by imp.proto.
> -//  optional imp.PubliclyImportedMessage pub = 10;
> -//  optional imp.PubliclyImportedEnum pub_enum = 13 [default=HAIR];
> -
> -
> -  // This is a map field. It will generate map[int32]string.
> -  map<int32, string> name_mapping = 14;
> -  // This is a map field whose value type is a message.
> -  map<sint64, Reply> msg_mapping = 15;
> -
> -  optional int32 reset = 12;
> -  // This field should not conflict with any getters.
> -  optional string get_key = 16;
> -}
> -
> -message Reply {
> -  message Entry {
> -    required int64 key_that_needs_1234camel_CasIng = 1;
> -    optional int64 value = 2 [default=7];
> -    optional int64 _my_field_name_2 = 3;
> -    enum Game {
> -      FOOTBALL = 1;
> -      TENNIS = 2;
> -    }
> -  }
> -  repeated Entry found = 1;
> -  repeated int32 compact_keys = 2 [packed=true];
> -  extensions 100 to max;
> -}
> -
> -message OtherBase {
> -  optional string name = 1;
> -  extensions 100 to max;
> -}
> -
> -message ReplyExtensions {
> -  extend Reply {
> -    optional double time = 101;
> -    optional ReplyExtensions carrot = 105;
> -  }
> -  extend OtherBase {
> -    optional ReplyExtensions donut = 101;
> -  }
> -}
> -
> -message OtherReplyExtensions {
> -  optional int32 key = 1;
> -}
> -
> -// top-level extension
> -extend Reply {
> -  optional string tag = 103;
> -  optional OtherReplyExtensions donut = 106;
> -//  optional imp.ImportedMessage elephant = 107;  // extend with message from another file.
> -}
> -
> -message OldReply {
> -  // Extensions will be encoded in MessageSet wire format.
> -  option message_set_wire_format = true;
> -  extensions 100 to max;
> -}
> -
> -message Communique {
> -  optional bool make_me_cry = 1;
> -
> -  // This is a oneof, called "union".
> -  oneof union {
> -    int32 number = 5;
> -    string name = 6;
> -    bytes data = 7;
> -    double temp_c = 8;
> -    float height = 9;
> -    Days today = 10;
> -    bool maybe = 11;
> -    sint32 delta = 12;  // name will conflict with Delta below
> -    Reply msg = 13;
> -    group SomeGroup = 14 {
> -      optional string member = 15;
> -    }
> -  }
> -
> -  message Delta {}
> -}
> -
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/proto3.proto b/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/proto3.proto
> deleted file mode 100644
> index 869b9af5..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/proto3.proto
> +++ /dev/null
> @@ -1,53 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2014 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto3";
> -
> -package proto3;
> -
> -message Request {
> -  enum Flavour {
> -    SWEET = 0;
> -    SOUR = 1;
> -    UMAMI = 2;
> -    GOPHERLICIOUS = 3;
> -  }
> -  string name = 1;
> -  repeated int64 key = 2;
> -  Flavour taste = 3;
> -  Book book = 4;
> -  repeated int64 unpacked = 5 [packed=false];
> -}
> -
> -message Book {
> -  string title = 1;
> -  bytes raw_data = 2;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any.go
> deleted file mode 100644
> index b2af97f4..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any.go
> +++ /dev/null
> @@ -1,139 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2016 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package ptypes
> -
> -// This file implements functions to marshal proto.Message to/from
> -// google.protobuf.Any message.
> -
> -import (
> -	"fmt"
> -	"reflect"
> -	"strings"
> -
> -	"github.com/golang/protobuf/proto"
> -	"github.com/golang/protobuf/ptypes/any"
> -)
> -
> -const googleApis = "type.googleapis.com/"
> -
> -// AnyMessageName returns the name of the message contained in a google.protobuf.Any message.
> -//
> -// Note that regular type assertions should be done using the Is
> -// function. AnyMessageName is provided for less common use cases like filtering a
> -// sequence of Any messages based on a set of allowed message type names.
> -func AnyMessageName(any *any.Any) (string, error) {
> -	if any == nil {
> -		return "", fmt.Errorf("message is nil")
> -	}
> -	slash := strings.LastIndex(any.TypeUrl, "/")
> -	if slash < 0 {
> -		return "", fmt.Errorf("message type url %q is invalid", any.TypeUrl)
> -	}
> -	return any.TypeUrl[slash+1:], nil
> -}
> -
> -// MarshalAny takes the protocol buffer and encodes it into google.protobuf.Any.
> -func MarshalAny(pb proto.Message) (*any.Any, error) {
> -	value, err := proto.Marshal(pb)
> -	if err != nil {
> -		return nil, err
> -	}
> -	return &any.Any{TypeUrl: googleApis + proto.MessageName(pb), Value: value}, nil
> -}
> -
> -// DynamicAny is a value that can be passed to UnmarshalAny to automatically
> -// allocate a proto.Message for the type specified in a google.protobuf.Any
> -// message. The allocated message is stored in the embedded proto.Message.
> -//
> -// Example:
> -//
> -//   var x ptypes.DynamicAny
> -//   if err := ptypes.UnmarshalAny(a, &x); err != nil { ... }
> -//   fmt.Printf("unmarshaled message: %v", x.Message)
> -type DynamicAny struct {
> -	proto.Message
> -}
> -
> -// Empty returns a new proto.Message of the type specified in a
> -// google.protobuf.Any message. It returns an error if corresponding message
> -// type isn't linked in.
> -func Empty(any *any.Any) (proto.Message, error) {
> -	aname, err := AnyMessageName(any)
> -	if err != nil {
> -		return nil, err
> -	}
> -
> -	t := proto.MessageType(aname)
> -	if t == nil {
> -		return nil, fmt.Errorf("any: message type %q isn't linked in", aname)
> -	}
> -	return reflect.New(t.Elem()).Interface().(proto.Message), nil
> -}
> -
> -// UnmarshalAny parses the protocol buffer representation in a google.protobuf.Any
> -// message and places the decoded result in pb. It returns an error if type of
> -// contents of Any message does not match type of pb message.
> -//
> -// pb can be a proto.Message, or a *DynamicAny.
> -func UnmarshalAny(any *any.Any, pb proto.Message) error {
> -	if d, ok := pb.(*DynamicAny); ok {
> -		if d.Message == nil {
> -			var err error
> -			d.Message, err = Empty(any)
> -			if err != nil {
> -				return err
> -			}
> -		}
> -		return UnmarshalAny(any, d.Message)
> -	}
> -
> -	aname, err := AnyMessageName(any)
> -	if err != nil {
> -		return err
> -	}
> -
> -	mname := proto.MessageName(pb)
> -	if aname != mname {
> -		return fmt.Errorf("mismatched message type: got %q want %q", aname, mname)
> -	}
> -	return proto.Unmarshal(any.Value, pb)
> -}
> -
> -// Is returns true if any value contains a given message type.
> -func Is(any *any.Any, pb proto.Message) bool {
> -	aname, err := AnyMessageName(any)
> -	if err != nil {
> -		return false
> -	}
> -
> -	return aname == proto.MessageName(pb)
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go
> deleted file mode 100644
> index 6c9a6cf7..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go
> +++ /dev/null
> @@ -1,168 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: google/protobuf/any.proto
> -
> -/*
> -Package any is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	google/protobuf/any.proto
> -
> -It has these top-level messages:
> -	Any
> -*/
> -package any
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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
> -
> -// `Any` contains an arbitrary serialized protocol buffer message along with a
> -// URL that describes the type of the serialized message.
> -//
> -// Protobuf library provides support to pack/unpack Any values in the form
> -// of utility functions or additional generated methods of the Any type.
> -//
> -// Example 1: Pack and unpack a message in C++.
> -//
> -//     Foo foo = ...;
> -//     Any any;
> -//     any.PackFrom(foo);
> -//     ...
> -//     if (any.UnpackTo(&foo)) {
> -//       ...
> -//     }
> -//
> -// Example 2: Pack and unpack a message in Java.
> -//
> -//     Foo foo = ...;
> -//     Any any = Any.pack(foo);
> -//     ...
> -//     if (any.is(Foo.class)) {
> -//       foo = any.unpack(Foo.class);
> -//     }
> -//
> -//  Example 3: Pack and unpack a message in Python.
> -//
> -//     foo = Foo(...)
> -//     any = Any()
> -//     any.Pack(foo)
> -//     ...
> -//     if any.Is(Foo.DESCRIPTOR):
> -//       any.Unpack(foo)
> -//       ...
> -//
> -// The pack methods provided by protobuf library will by default use
> -// 'type.googleapis.com/full.type.name' as the type URL and the unpack
> -// methods only use the fully qualified type name after the last '/'
> -// in the type URL, for example "foo.bar.com/x/y.z" will yield type
> -// name "y.z".
> -//
> -//
> -// JSON
> -// ====
> -// The JSON representation of an `Any` value uses the regular
> -// representation of the deserialized, embedded message, with an
> -// additional field `@type` which contains the type URL. Example:
> -//
> -//     package google.profile;
> -//     message Person {
> -//       string first_name = 1;
> -//       string last_name = 2;
> -//     }
> -//
> -//     {
> -//       "@type": "type.googleapis.com/google.profile.Person",
> -//       "firstName": <string>,
> -//       "lastName": <string>
> -//     }
> -//
> -// If the embedded message type is well-known and has a custom JSON
> -// representation, that representation will be embedded adding a field
> -// `value` which holds the custom JSON in addition to the `@type`
> -// field. Example (for message [google.protobuf.Duration][]):
> -//
> -//     {
> -//       "@type": "type.googleapis.com/google.protobuf.Duration",
> -//       "value": "1.212s"
> -//     }
> -//
> -type Any struct {
> -	// A URL/resource name whose content describes the type of the
> -	// serialized protocol buffer message.
> -	//
> -	// For URLs which use the scheme `http`, `https`, or no scheme, the
> -	// following restrictions and interpretations apply:
> -	//
> -	// * If no scheme is provided, `https` is assumed.
> -	// * The last segment of the URL's path must represent the fully
> -	//   qualified name of the type (as in `path/google.protobuf.Duration`).
> -	//   The name should be in a canonical form (e.g., leading "." is
> -	//   not accepted).
> -	// * An HTTP GET on the URL must yield a [google.protobuf.Type][]
> -	//   value in binary format, or produce an error.
> -	// * Applications are allowed to cache lookup results based on the
> -	//   URL, or have them precompiled into a binary to avoid any
> -	//   lookup. Therefore, binary compatibility needs to be preserved
> -	//   on changes to types. (Use versioned type names to manage
> -	//   breaking changes.)
> -	//
> -	// Schemes other than `http`, `https` (or the empty scheme) might be
> -	// used with implementation specific semantics.
> -	//
> -	TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl" json:"type_url,omitempty"`
> -	// Must be a valid serialized protocol buffer of the above specified type.
> -	Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
> -}
> -
> -func (m *Any) Reset()                    { *m = Any{} }
> -func (m *Any) String() string            { return proto.CompactTextString(m) }
> -func (*Any) ProtoMessage()               {}
> -func (*Any) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -func (*Any) XXX_WellKnownType() string   { return "Any" }
> -
> -func (m *Any) GetTypeUrl() string {
> -	if m != nil {
> -		return m.TypeUrl
> -	}
> -	return ""
> -}
> -
> -func (m *Any) GetValue() []byte {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return nil
> -}
> -
> -func init() {
> -	proto.RegisterType((*Any)(nil), "google.protobuf.Any")
> -}
> -
> -func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 185 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f,
> -	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcc, 0xab, 0xd4,
> -	0x03, 0x73, 0x84, 0xf8, 0x21, 0x52, 0x7a, 0x30, 0x29, 0x25, 0x33, 0x2e, 0x66, 0xc7, 0xbc, 0x4a,
> -	0x21, 0x49, 0x2e, 0x8e, 0x92, 0xca, 0x82, 0xd4, 0xf8, 0xd2, 0xa2, 0x1c, 0x09, 0x46, 0x05, 0x46,
> -	0x0d, 0xce, 0x20, 0x76, 0x10, 0x3f, 0xb4, 0x28, 0x47, 0x48, 0x84, 0x8b, 0xb5, 0x2c, 0x31, 0xa7,
> -	0x34, 0x55, 0x82, 0x49, 0x81, 0x51, 0x83, 0x27, 0x08, 0xc2, 0x71, 0xca, 0xe7, 0x12, 0x4e, 0xce,
> -	0xcf, 0xd5, 0x43, 0x33, 0xce, 0x89, 0xc3, 0x31, 0xaf, 0x32, 0x00, 0xc4, 0x09, 0x60, 0x8c, 0x52,
> -	0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc,
> -	0x4b, 0x47, 0xb8, 0xa8, 0x00, 0x64, 0x7a, 0x31, 0xc8, 0x61, 0x8b, 0x98, 0x98, 0xdd, 0x03, 0x9c,
> -	0x56, 0x31, 0xc9, 0xb9, 0x43, 0x8c, 0x0a, 0x80, 0x2a, 0xd1, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce,
> -	0xcb, 0x2f, 0xcf, 0x0b, 0x01, 0x29, 0x4d, 0x62, 0x03, 0xeb, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff,
> -	0xff, 0x13, 0xf8, 0xe8, 0x42, 0xdd, 0x00, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any/any.proto b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any/any.proto
> deleted file mode 100644
> index 9bd3f50a..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any/any.proto
> +++ /dev/null
> @@ -1,139 +0,0 @@
> -// Protocol Buffers - Google's data interchange format
> -// Copyright 2008 Google Inc.  All rights reserved.
> -// https://developers.google.com/protocol-buffers/
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto3";
> -
> -package google.protobuf;
> -
> -option csharp_namespace = "Google.Protobuf.WellKnownTypes";
> -option go_package = "github.com/golang/protobuf/ptypes/any";
> -option java_package = "com.google.protobuf";
> -option java_outer_classname = "AnyProto";
> -option java_multiple_files = true;
> -option objc_class_prefix = "GPB";
> -
> -// `Any` contains an arbitrary serialized protocol buffer message along with a
> -// URL that describes the type of the serialized message.
> -//
> -// Protobuf library provides support to pack/unpack Any values in the form
> -// of utility functions or additional generated methods of the Any type.
> -//
> -// Example 1: Pack and unpack a message in C++.
> -//
> -//     Foo foo = ...;
> -//     Any any;
> -//     any.PackFrom(foo);
> -//     ...
> -//     if (any.UnpackTo(&foo)) {
> -//       ...
> -//     }
> -//
> -// Example 2: Pack and unpack a message in Java.
> -//
> -//     Foo foo = ...;
> -//     Any any = Any.pack(foo);
> -//     ...
> -//     if (any.is(Foo.class)) {
> -//       foo = any.unpack(Foo.class);
> -//     }
> -//
> -//  Example 3: Pack and unpack a message in Python.
> -//
> -//     foo = Foo(...)
> -//     any = Any()
> -//     any.Pack(foo)
> -//     ...
> -//     if any.Is(Foo.DESCRIPTOR):
> -//       any.Unpack(foo)
> -//       ...
> -//
> -// The pack methods provided by protobuf library will by default use
> -// 'type.googleapis.com/full.type.name' as the type URL and the unpack
> -// methods only use the fully qualified type name after the last '/'
> -// in the type URL, for example "foo.bar.com/x/y.z" will yield type
> -// name "y.z".
> -//
> -//
> -// JSON
> -// ====
> -// The JSON representation of an `Any` value uses the regular
> -// representation of the deserialized, embedded message, with an
> -// additional field `@type` which contains the type URL. Example:
> -//
> -//     package google.profile;
> -//     message Person {
> -//       string first_name = 1;
> -//       string last_name = 2;
> -//     }
> -//
> -//     {
> -//       "@type": "type.googleapis.com/google.profile.Person",
> -//       "firstName": <string>,
> -//       "lastName": <string>
> -//     }
> -//
> -// If the embedded message type is well-known and has a custom JSON
> -// representation, that representation will be embedded adding a field
> -// `value` which holds the custom JSON in addition to the `@type`
> -// field. Example (for message [google.protobuf.Duration][]):
> -//
> -//     {
> -//       "@type": "type.googleapis.com/google.protobuf.Duration",
> -//       "value": "1.212s"
> -//     }
> -//
> -message Any {
> -  // A URL/resource name whose content describes the type of the
> -  // serialized protocol buffer message.
> -  //
> -  // For URLs which use the scheme `http`, `https`, or no scheme, the
> -  // following restrictions and interpretations apply:
> -  //
> -  // * If no scheme is provided, `https` is assumed.
> -  // * The last segment of the URL's path must represent the fully
> -  //   qualified name of the type (as in `path/google.protobuf.Duration`).
> -  //   The name should be in a canonical form (e.g., leading "." is
> -  //   not accepted).
> -  // * An HTTP GET on the URL must yield a [google.protobuf.Type][]
> -  //   value in binary format, or produce an error.
> -  // * Applications are allowed to cache lookup results based on the
> -  //   URL, or have them precompiled into a binary to avoid any
> -  //   lookup. Therefore, binary compatibility needs to be preserved
> -  //   on changes to types. (Use versioned type names to manage
> -  //   breaking changes.)
> -  //
> -  // Schemes other than `http`, `https` (or the empty scheme) might be
> -  // used with implementation specific semantics.
> -  //
> -  string type_url = 1;
> -
> -  // Must be a valid serialized protocol buffer of the above specified type.
> -  bytes value = 2;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any_test.go
> deleted file mode 100644
> index ed675b48..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/any_test.go
> +++ /dev/null
> @@ -1,113 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2016 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package ptypes
> -
> -import (
> -	"testing"
> -
> -	"github.com/golang/protobuf/proto"
> -	pb "github.com/golang/protobuf/protoc-gen-go/descriptor"
> -	"github.com/golang/protobuf/ptypes/any"
> -)
> -
> -func TestMarshalUnmarshal(t *testing.T) {
> -	orig := &any.Any{Value: []byte("test")}
> -
> -	packed, err := MarshalAny(orig)
> -	if err != nil {
> -		t.Errorf("MarshalAny(%+v): got: _, %v exp: _, nil", orig, err)
> -	}
> -
> -	unpacked := &any.Any{}
> -	err = UnmarshalAny(packed, unpacked)
> -	if err != nil || !proto.Equal(unpacked, orig) {
> -		t.Errorf("got: %v, %+v; want nil, %+v", err, unpacked, orig)
> -	}
> -}
> -
> -func TestIs(t *testing.T) {
> -	a, err := MarshalAny(&pb.FileDescriptorProto{})
> -	if err != nil {
> -		t.Fatal(err)
> -	}
> -	if Is(a, &pb.DescriptorProto{}) {
> -		t.Error("FileDescriptorProto is not a DescriptorProto, but Is says it is")
> -	}
> -	if !Is(a, &pb.FileDescriptorProto{}) {
> -		t.Error("FileDescriptorProto is indeed a FileDescriptorProto, but Is says it is not")
> -	}
> -}
> -
> -func TestIsDifferentUrlPrefixes(t *testing.T) {
> -	m := &pb.FileDescriptorProto{}
> -	a := &any.Any{TypeUrl: "foo/bar/" + proto.MessageName(m)}
> -	if !Is(a, m) {
> -		t.Errorf("message with type url %q didn't satisfy Is for type %q", a.TypeUrl, proto.MessageName(m))
> -	}
> -}
> -
> -func TestUnmarshalDynamic(t *testing.T) {
> -	want := &pb.FileDescriptorProto{Name: proto.String("foo")}
> -	a, err := MarshalAny(want)
> -	if err != nil {
> -		t.Fatal(err)
> -	}
> -	var got DynamicAny
> -	if err := UnmarshalAny(a, &got); err != nil {
> -		t.Fatal(err)
> -	}
> -	if !proto.Equal(got.Message, want) {
> -		t.Errorf("invalid result from UnmarshalAny, got %q want %q", got.Message, want)
> -	}
> -}
> -
> -func TestEmpty(t *testing.T) {
> -	want := &pb.FileDescriptorProto{}
> -	a, err := MarshalAny(want)
> -	if err != nil {
> -		t.Fatal(err)
> -	}
> -	got, err := Empty(a)
> -	if err != nil {
> -		t.Fatal(err)
> -	}
> -	if !proto.Equal(got, want) {
> -		t.Errorf("unequal empty message, got %q, want %q", got, want)
> -	}
> -
> -	// that's a valid type_url for a message which shouldn't be linked into this
> -	// test binary. We want an error.
> -	a.TypeUrl = "type.googleapis.com/google.protobuf.FieldMask"
> -	if _, err := Empty(a); err == nil {
> -		t.Errorf("got no error for an attempt to create a message of type %q, which shouldn't be linked in", a.TypeUrl)
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/doc.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/doc.go
> deleted file mode 100644
> index c0d595da..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/doc.go
> +++ /dev/null
> @@ -1,35 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2016 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -/*
> -Package ptypes contains code for interacting with well-known types.
> -*/
> -package ptypes
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration.go
> deleted file mode 100644
> index 65cb0f8e..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration.go
> +++ /dev/null
> @@ -1,102 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2016 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package ptypes
> -
> -// This file implements conversions between google.protobuf.Duration
> -// and time.Duration.
> -
> -import (
> -	"errors"
> -	"fmt"
> -	"time"
> -
> -	durpb "github.com/golang/protobuf/ptypes/duration"
> -)
> -
> -const (
> -	// Range of a durpb.Duration in seconds, as specified in
> -	// google/protobuf/duration.proto. This is about 10,000 years in seconds.
> -	maxSeconds = int64(10000 * 365.25 * 24 * 60 * 60)
> -	minSeconds = -maxSeconds
> -)
> -
> -// validateDuration determines whether the durpb.Duration is valid according to the
> -// definition in google/protobuf/duration.proto. A valid durpb.Duration
> -// may still be too large to fit into a time.Duration (the range of durpb.Duration
> -// is about 10,000 years, and the range of time.Duration is about 290).
> -func validateDuration(d *durpb.Duration) error {
> -	if d == nil {
> -		return errors.New("duration: nil Duration")
> -	}
> -	if d.Seconds < minSeconds || d.Seconds > maxSeconds {
> -		return fmt.Errorf("duration: %v: seconds out of range", d)
> -	}
> -	if d.Nanos <= -1e9 || d.Nanos >= 1e9 {
> -		return fmt.Errorf("duration: %v: nanos out of range", d)
> -	}
> -	// Seconds and Nanos must have the same sign, unless d.Nanos is zero.
> -	if (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) {
> -		return fmt.Errorf("duration: %v: seconds and nanos have different signs", d)
> -	}
> -	return nil
> -}
> -
> -// Duration converts a durpb.Duration to a time.Duration. Duration
> -// returns an error if the durpb.Duration is invalid or is too large to be
> -// represented in a time.Duration.
> -func Duration(p *durpb.Duration) (time.Duration, error) {
> -	if err := validateDuration(p); err != nil {
> -		return 0, err
> -	}
> -	d := time.Duration(p.Seconds) * time.Second
> -	if int64(d/time.Second) != p.Seconds {
> -		return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p)
> -	}
> -	if p.Nanos != 0 {
> -		d += time.Duration(p.Nanos)
> -		if (d < 0) != (p.Nanos < 0) {
> -			return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p)
> -		}
> -	}
> -	return d, nil
> -}
> -
> -// DurationProto converts a time.Duration to a durpb.Duration.
> -func DurationProto(d time.Duration) *durpb.Duration {
> -	nanos := d.Nanoseconds()
> -	secs := nanos / 1e9
> -	nanos -= secs * 1e9
> -	return &durpb.Duration{
> -		Seconds: secs,
> -		Nanos:   int32(nanos),
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go
> deleted file mode 100644
> index b2410a09..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go
> +++ /dev/null
> @@ -1,144 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: google/protobuf/duration.proto
> -
> -/*
> -Package duration is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	google/protobuf/duration.proto
> -
> -It has these top-level messages:
> -	Duration
> -*/
> -package duration
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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
> -
> -// A Duration represents a signed, fixed-length span of time represented
> -// as a count of seconds and fractions of seconds at nanosecond
> -// resolution. It is independent of any calendar and concepts like "day"
> -// or "month". It is related to Timestamp in that the difference between
> -// two Timestamp values is a Duration and it can be added or subtracted
> -// from a Timestamp. Range is approximately +-10,000 years.
> -//
> -// # Examples
> -//
> -// Example 1: Compute Duration from two Timestamps in pseudo code.
> -//
> -//     Timestamp start = ...;
> -//     Timestamp end = ...;
> -//     Duration duration = ...;
> -//
> -//     duration.seconds = end.seconds - start.seconds;
> -//     duration.nanos = end.nanos - start.nanos;
> -//
> -//     if (duration.seconds < 0 && duration.nanos > 0) {
> -//       duration.seconds += 1;
> -//       duration.nanos -= 1000000000;
> -//     } else if (durations.seconds > 0 && duration.nanos < 0) {
> -//       duration.seconds -= 1;
> -//       duration.nanos += 1000000000;
> -//     }
> -//
> -// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
> -//
> -//     Timestamp start = ...;
> -//     Duration duration = ...;
> -//     Timestamp end = ...;
> -//
> -//     end.seconds = start.seconds + duration.seconds;
> -//     end.nanos = start.nanos + duration.nanos;
> -//
> -//     if (end.nanos < 0) {
> -//       end.seconds -= 1;
> -//       end.nanos += 1000000000;
> -//     } else if (end.nanos >= 1000000000) {
> -//       end.seconds += 1;
> -//       end.nanos -= 1000000000;
> -//     }
> -//
> -// Example 3: Compute Duration from datetime.timedelta in Python.
> -//
> -//     td = datetime.timedelta(days=3, minutes=10)
> -//     duration = Duration()
> -//     duration.FromTimedelta(td)
> -//
> -// # JSON Mapping
> -//
> -// In JSON format, the Duration type is encoded as a string rather than an
> -// object, where the string ends in the suffix "s" (indicating seconds) and
> -// is preceded by the number of seconds, with nanoseconds expressed as
> -// fractional seconds. For example, 3 seconds with 0 nanoseconds should be
> -// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
> -// be expressed in JSON format as "3.000000001s", and 3 seconds and 1
> -// microsecond should be expressed in JSON format as "3.000001s".
> -//
> -//
> -type Duration struct {
> -	// Signed seconds of the span of time. Must be from -315,576,000,000
> -	// to +315,576,000,000 inclusive. Note: these bounds are computed from:
> -	// 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
> -	Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"`
> -	// Signed fractions of a second at nanosecond resolution of the span
> -	// of time. Durations less than one second are represented with a 0
> -	// `seconds` field and a positive or negative `nanos` field. For durations
> -	// of one second or more, a non-zero value for the `nanos` field must be
> -	// of the same sign as the `seconds` field. Must be from -999,999,999
> -	// to +999,999,999 inclusive.
> -	Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"`
> -}
> -
> -func (m *Duration) Reset()                    { *m = Duration{} }
> -func (m *Duration) String() string            { return proto.CompactTextString(m) }
> -func (*Duration) ProtoMessage()               {}
> -func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -func (*Duration) XXX_WellKnownType() string   { return "Duration" }
> -
> -func (m *Duration) GetSeconds() int64 {
> -	if m != nil {
> -		return m.Seconds
> -	}
> -	return 0
> -}
> -
> -func (m *Duration) GetNanos() int32 {
> -	if m != nil {
> -		return m.Nanos
> -	}
> -	return 0
> -}
> -
> -func init() {
> -	proto.RegisterType((*Duration)(nil), "google.protobuf.Duration")
> -}
> -
> -func init() { proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 190 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f,
> -	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a,
> -	0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0x56,
> -	0x5c, 0x1c, 0x2e, 0x50, 0x25, 0x42, 0x12, 0x5c, 0xec, 0xc5, 0xa9, 0xc9, 0xf9, 0x79, 0x29, 0xc5,
> -	0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xcc, 0x41, 0x30, 0xae, 0x90, 0x08, 0x17, 0x6b, 0x5e, 0x62, 0x5e,
> -	0x7e, 0xb1, 0x04, 0x93, 0x02, 0xa3, 0x06, 0x6b, 0x10, 0x84, 0xe3, 0x54, 0xc3, 0x25, 0x9c, 0x9c,
> -	0x9f, 0xab, 0x87, 0x66, 0xa4, 0x13, 0x2f, 0xcc, 0xc0, 0x00, 0x90, 0x48, 0x00, 0x63, 0x94, 0x56,
> -	0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7a, 0x7e, 0x4e, 0x62, 0x5e,
> -	0x3a, 0xc2, 0x7d, 0x05, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x70, 0x67, 0xfe, 0x60, 0x64, 0x5c, 0xc4,
> -	0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e, 0x00, 0x54, 0xa9, 0x5e, 0x78,
> -	0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b, 0x12, 0x1b, 0xd8, 0x0c, 0x63,
> -	0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x84, 0x30, 0xff, 0xf3, 0x00, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto
> deleted file mode 100644
> index 975fce41..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto
> +++ /dev/null
> @@ -1,117 +0,0 @@
> -// Protocol Buffers - Google's data interchange format
> -// Copyright 2008 Google Inc.  All rights reserved.
> -// https://developers.google.com/protocol-buffers/
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto3";
> -
> -package google.protobuf;
> -
> -option csharp_namespace = "Google.Protobuf.WellKnownTypes";
> -option cc_enable_arenas = true;
> -option go_package = "github.com/golang/protobuf/ptypes/duration";
> -option java_package = "com.google.protobuf";
> -option java_outer_classname = "DurationProto";
> -option java_multiple_files = true;
> -option objc_class_prefix = "GPB";
> -
> -// A Duration represents a signed, fixed-length span of time represented
> -// as a count of seconds and fractions of seconds at nanosecond
> -// resolution. It is independent of any calendar and concepts like "day"
> -// or "month". It is related to Timestamp in that the difference between
> -// two Timestamp values is a Duration and it can be added or subtracted
> -// from a Timestamp. Range is approximately +-10,000 years.
> -//
> -// # Examples
> -//
> -// Example 1: Compute Duration from two Timestamps in pseudo code.
> -//
> -//     Timestamp start = ...;
> -//     Timestamp end = ...;
> -//     Duration duration = ...;
> -//
> -//     duration.seconds = end.seconds - start.seconds;
> -//     duration.nanos = end.nanos - start.nanos;
> -//
> -//     if (duration.seconds < 0 && duration.nanos > 0) {
> -//       duration.seconds += 1;
> -//       duration.nanos -= 1000000000;
> -//     } else if (durations.seconds > 0 && duration.nanos < 0) {
> -//       duration.seconds -= 1;
> -//       duration.nanos += 1000000000;
> -//     }
> -//
> -// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
> -//
> -//     Timestamp start = ...;
> -//     Duration duration = ...;
> -//     Timestamp end = ...;
> -//
> -//     end.seconds = start.seconds + duration.seconds;
> -//     end.nanos = start.nanos + duration.nanos;
> -//
> -//     if (end.nanos < 0) {
> -//       end.seconds -= 1;
> -//       end.nanos += 1000000000;
> -//     } else if (end.nanos >= 1000000000) {
> -//       end.seconds += 1;
> -//       end.nanos -= 1000000000;
> -//     }
> -//
> -// Example 3: Compute Duration from datetime.timedelta in Python.
> -//
> -//     td = datetime.timedelta(days=3, minutes=10)
> -//     duration = Duration()
> -//     duration.FromTimedelta(td)
> -//
> -// # JSON Mapping
> -//
> -// In JSON format, the Duration type is encoded as a string rather than an
> -// object, where the string ends in the suffix "s" (indicating seconds) and
> -// is preceded by the number of seconds, with nanoseconds expressed as
> -// fractional seconds. For example, 3 seconds with 0 nanoseconds should be
> -// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
> -// be expressed in JSON format as "3.000000001s", and 3 seconds and 1
> -// microsecond should be expressed in JSON format as "3.000001s".
> -//
> -//
> -message Duration {
> -
> -  // Signed seconds of the span of time. Must be from -315,576,000,000
> -  // to +315,576,000,000 inclusive. Note: these bounds are computed from:
> -  // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
> -  int64 seconds = 1;
> -
> -  // Signed fractions of a second at nanosecond resolution of the span
> -  // of time. Durations less than one second are represented with a 0
> -  // `seconds` field and a positive or negative `nanos` field. For durations
> -  // of one second or more, a non-zero value for the `nanos` field must be
> -  // of the same sign as the `seconds` field. Must be from -999,999,999
> -  // to +999,999,999 inclusive.
> -  int32 nanos = 2;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration_test.go
> deleted file mode 100644
> index e00491a3..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/duration_test.go
> +++ /dev/null
> @@ -1,121 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2016 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package ptypes
> -
> -import (
> -	"math"
> -	"testing"
> -	"time"
> -
> -	"github.com/golang/protobuf/proto"
> -	durpb "github.com/golang/protobuf/ptypes/duration"
> -)
> -
> -const (
> -	minGoSeconds = math.MinInt64 / int64(1e9)
> -	maxGoSeconds = math.MaxInt64 / int64(1e9)
> -)
> -
> -var durationTests = []struct {
> -	proto   *durpb.Duration
> -	isValid bool
> -	inRange bool
> -	dur     time.Duration
> -}{
> -	// The zero duration.
> -	{&durpb.Duration{Seconds: 0, Nanos: 0}, true, true, 0},
> -	// Some ordinary non-zero durations.
> -	{&durpb.Duration{Seconds: 100, Nanos: 0}, true, true, 100 * time.Second},
> -	{&durpb.Duration{Seconds: -100, Nanos: 0}, true, true, -100 * time.Second},
> -	{&durpb.Duration{Seconds: 100, Nanos: 987}, true, true, 100*time.Second + 987},
> -	{&durpb.Duration{Seconds: -100, Nanos: -987}, true, true, -(100*time.Second + 987)},
> -	// The largest duration representable in Go.
> -	{&durpb.Duration{Seconds: maxGoSeconds, Nanos: int32(math.MaxInt64 - 1e9*maxGoSeconds)}, true, true, math.MaxInt64},
> -	// The smallest duration representable in Go.
> -	{&durpb.Duration{Seconds: minGoSeconds, Nanos: int32(math.MinInt64 - 1e9*minGoSeconds)}, true, true, math.MinInt64},
> -	{nil, false, false, 0},
> -	{&durpb.Duration{Seconds: -100, Nanos: 987}, false, false, 0},
> -	{&durpb.Duration{Seconds: 100, Nanos: -987}, false, false, 0},
> -	{&durpb.Duration{Seconds: math.MinInt64, Nanos: 0}, false, false, 0},
> -	{&durpb.Duration{Seconds: math.MaxInt64, Nanos: 0}, false, false, 0},
> -	// The largest valid duration.
> -	{&durpb.Duration{Seconds: maxSeconds, Nanos: 1e9 - 1}, true, false, 0},
> -	// The smallest valid duration.
> -	{&durpb.Duration{Seconds: minSeconds, Nanos: -(1e9 - 1)}, true, false, 0},
> -	// The smallest invalid duration above the valid range.
> -	{&durpb.Duration{Seconds: maxSeconds + 1, Nanos: 0}, false, false, 0},
> -	// The largest invalid duration below the valid range.
> -	{&durpb.Duration{Seconds: minSeconds - 1, Nanos: -(1e9 - 1)}, false, false, 0},
> -	// One nanosecond past the largest duration representable in Go.
> -	{&durpb.Duration{Seconds: maxGoSeconds, Nanos: int32(math.MaxInt64-1e9*maxGoSeconds) + 1}, true, false, 0},
> -	// One nanosecond past the smallest duration representable in Go.
> -	{&durpb.Duration{Seconds: minGoSeconds, Nanos: int32(math.MinInt64-1e9*minGoSeconds) - 1}, true, false, 0},
> -	// One second past the largest duration representable in Go.
> -	{&durpb.Duration{Seconds: maxGoSeconds + 1, Nanos: int32(math.MaxInt64 - 1e9*maxGoSeconds)}, true, false, 0},
> -	// One second past the smallest duration representable in Go.
> -	{&durpb.Duration{Seconds: minGoSeconds - 1, Nanos: int32(math.MinInt64 - 1e9*minGoSeconds)}, true, false, 0},
> -}
> -
> -func TestValidateDuration(t *testing.T) {
> -	for _, test := range durationTests {
> -		err := validateDuration(test.proto)
> -		gotValid := (err == nil)
> -		if gotValid != test.isValid {
> -			t.Errorf("validateDuration(%v) = %t, want %t", test.proto, gotValid, test.isValid)
> -		}
> -	}
> -}
> -
> -func TestDuration(t *testing.T) {
> -	for _, test := range durationTests {
> -		got, err := Duration(test.proto)
> -		gotOK := (err == nil)
> -		wantOK := test.isValid && test.inRange
> -		if gotOK != wantOK {
> -			t.Errorf("Duration(%v) ok = %t, want %t", test.proto, gotOK, wantOK)
> -		}
> -		if err == nil && got != test.dur {
> -			t.Errorf("Duration(%v) = %v, want %v", test.proto, got, test.dur)
> -		}
> -	}
> -}
> -
> -func TestDurationProto(t *testing.T) {
> -	for _, test := range durationTests {
> -		if test.isValid && test.inRange {
> -			got := DurationProto(test.dur)
> -			if !proto.Equal(got, test.proto) {
> -				t.Errorf("DurationProto(%v) = %v, want %v", test.dur, got, test.proto)
> -			}
> -		}
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go
> deleted file mode 100644
> index e877b72c..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go
> +++ /dev/null
> @@ -1,66 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: google/protobuf/empty.proto
> -
> -/*
> -Package empty is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	google/protobuf/empty.proto
> -
> -It has these top-level messages:
> -	Empty
> -*/
> -package empty
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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
> -
> -// A generic empty message that you can re-use to avoid defining duplicated
> -// empty messages in your APIs. A typical example is to use it as the request
> -// or the response type of an API method. For instance:
> -//
> -//     service Foo {
> -//       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
> -//     }
> -//
> -// The JSON representation for `Empty` is empty JSON object `{}`.
> -type Empty struct {
> -}
> -
> -func (m *Empty) Reset()                    { *m = Empty{} }
> -func (m *Empty) String() string            { return proto.CompactTextString(m) }
> -func (*Empty) ProtoMessage()               {}
> -func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -func (*Empty) XXX_WellKnownType() string   { return "Empty" }
> -
> -func init() {
> -	proto.RegisterType((*Empty)(nil), "google.protobuf.Empty")
> -}
> -
> -func init() { proto.RegisterFile("google/protobuf/empty.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 148 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0xcf, 0xcf, 0x4f,
> -	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcd, 0x2d, 0x28,
> -	0xa9, 0xd4, 0x03, 0x73, 0x85, 0xf8, 0x21, 0x92, 0x7a, 0x30, 0x49, 0x25, 0x76, 0x2e, 0x56, 0x57,
> -	0x90, 0xbc, 0x53, 0x19, 0x97, 0x70, 0x72, 0x7e, 0xae, 0x1e, 0x9a, 0xbc, 0x13, 0x17, 0x58, 0x36,
> -	0x00, 0xc4, 0x0d, 0x60, 0x8c, 0x52, 0x4f, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf,
> -	0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0x47, 0x58, 0x53, 0x50, 0x52, 0x59, 0x90, 0x5a, 0x0c,
> -	0xb1, 0xed, 0x07, 0x23, 0xe3, 0x22, 0x26, 0x66, 0xf7, 0x00, 0xa7, 0x55, 0x4c, 0x72, 0xee, 0x10,
> -	0x13, 0x03, 0xa0, 0xea, 0xf4, 0xc2, 0x53, 0x73, 0x72, 0xbc, 0xf3, 0xf2, 0xcb, 0xf3, 0x42, 0x40,
> -	0xea, 0x93, 0xd8, 0xc0, 0x06, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x64, 0xd4, 0xb3, 0xa6,
> -	0xb7, 0x00, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/empty/empty.proto b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/empty/empty.proto
> deleted file mode 100644
> index 03cacd23..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/empty/empty.proto
> +++ /dev/null
> @@ -1,52 +0,0 @@
> -// Protocol Buffers - Google's data interchange format
> -// Copyright 2008 Google Inc.  All rights reserved.
> -// https://developers.google.com/protocol-buffers/
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto3";
> -
> -package google.protobuf;
> -
> -option csharp_namespace = "Google.Protobuf.WellKnownTypes";
> -option go_package = "github.com/golang/protobuf/ptypes/empty";
> -option java_package = "com.google.protobuf";
> -option java_outer_classname = "EmptyProto";
> -option java_multiple_files = true;
> -option objc_class_prefix = "GPB";
> -option cc_enable_arenas = true;
> -
> -// A generic empty message that you can re-use to avoid defining duplicated
> -// empty messages in your APIs. A typical example is to use it as the request
> -// or the response type of an API method. For instance:
> -//
> -//     service Foo {
> -//       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
> -//     }
> -//
> -// The JSON representation for `Empty` is empty JSON object `{}`.
> -message Empty {}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/regen.sh b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/regen.sh
> deleted file mode 100755
> index b50a9414..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/regen.sh
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -#!/bin/bash -e
> -#
> -# This script fetches and rebuilds the "well-known types" protocol buffers.
> -# To run this you will need protoc and goprotobuf installed;
> -# see https://github.com/golang/protobuf for instructions.
> -# You also need Go and Git installed.
> -
> -PKG=github.com/golang/protobuf/ptypes
> -UPSTREAM=https://github.com/google/protobuf
> -UPSTREAM_SUBDIR=src/google/protobuf
> -PROTO_FILES=(any duration empty struct timestamp wrappers)
> -
> -function die() {
> -  echo 1>&2 $*
> -  exit 1
> -}
> -
> -# Sanity check that the right tools are accessible.
> -for tool in go git protoc protoc-gen-go; do
> -  q=$(which $tool) || die "didn't find $tool"
> -  echo 1>&2 "$tool: $q"
> -done
> -
> -tmpdir=$(mktemp -d -t regen-wkt.XXXXXX)
> -trap 'rm -rf $tmpdir' EXIT
> -
> -echo -n 1>&2 "finding package dir... "
> -pkgdir=$(go list -f '{{.Dir}}' $PKG)
> -echo 1>&2 $pkgdir
> -base=$(echo $pkgdir | sed "s,/$PKG\$,,")
> -echo 1>&2 "base: $base"
> -cd "$base"
> -
> -echo 1>&2 "fetching latest protos... "
> -git clone -q $UPSTREAM $tmpdir
> -
> -for file in ${PROTO_FILES[@]}; do
> -  echo 1>&2 "* $file"
> -  protoc --go_out=. -I$tmpdir/src $tmpdir/src/google/protobuf/$file.proto || die
> -  cp $tmpdir/src/google/protobuf/$file.proto $PKG/$file
> -done
> -
> -echo 1>&2 "All OK"
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go
> deleted file mode 100644
> index 4cfe6081..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go
> +++ /dev/null
> @@ -1,380 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: google/protobuf/struct.proto
> -
> -/*
> -Package structpb is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	google/protobuf/struct.proto
> -
> -It has these top-level messages:
> -	Struct
> -	Value
> -	ListValue
> -*/
> -package structpb
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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
> -
> -// `NullValue` is a singleton enumeration to represent the null value for the
> -// `Value` type union.
> -//
> -//  The JSON representation for `NullValue` is JSON `null`.
> -type NullValue int32
> -
> -const (
> -	// Null value.
> -	NullValue_NULL_VALUE NullValue = 0
> -)
> -
> -var NullValue_name = map[int32]string{
> -	0: "NULL_VALUE",
> -}
> -var NullValue_value = map[string]int32{
> -	"NULL_VALUE": 0,
> -}
> -
> -func (x NullValue) String() string {
> -	return proto.EnumName(NullValue_name, int32(x))
> -}
> -func (NullValue) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -func (NullValue) XXX_WellKnownType() string       { return "NullValue" }
> -
> -// `Struct` represents a structured data value, consisting of fields
> -// which map to dynamically typed values. In some languages, `Struct`
> -// might be supported by a native representation. For example, in
> -// scripting languages like JS a struct is represented as an
> -// object. The details of that representation are described together
> -// with the proto support for the language.
> -//
> -// The JSON representation for `Struct` is JSON object.
> -type Struct struct {
> -	// Unordered map of dynamically typed values.
> -	Fields map[string]*Value `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
> -}
> -
> -func (m *Struct) Reset()                    { *m = Struct{} }
> -func (m *Struct) String() string            { return proto.CompactTextString(m) }
> -func (*Struct) ProtoMessage()               {}
> -func (*Struct) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -func (*Struct) XXX_WellKnownType() string   { return "Struct" }
> -
> -func (m *Struct) GetFields() map[string]*Value {
> -	if m != nil {
> -		return m.Fields
> -	}
> -	return nil
> -}
> -
> -// `Value` represents a dynamically typed value which can be either
> -// null, a number, a string, a boolean, a recursive struct value, or a
> -// list of values. A producer of value is expected to set one of that
> -// variants, absence of any variant indicates an error.
> -//
> -// The JSON representation for `Value` is JSON value.
> -type Value struct {
> -	// The kind of value.
> -	//
> -	// Types that are valid to be assigned to Kind:
> -	//	*Value_NullValue
> -	//	*Value_NumberValue
> -	//	*Value_StringValue
> -	//	*Value_BoolValue
> -	//	*Value_StructValue
> -	//	*Value_ListValue
> -	Kind isValue_Kind `protobuf_oneof:"kind"`
> -}
> -
> -func (m *Value) Reset()                    { *m = Value{} }
> -func (m *Value) String() string            { return proto.CompactTextString(m) }
> -func (*Value) ProtoMessage()               {}
> -func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -func (*Value) XXX_WellKnownType() string   { return "Value" }
> -
> -type isValue_Kind interface {
> -	isValue_Kind()
> -}
> -
> -type Value_NullValue struct {
> -	NullValue NullValue `protobuf:"varint,1,opt,name=null_value,json=nullValue,enum=google.protobuf.NullValue,oneof"`
> -}
> -type Value_NumberValue struct {
> -	NumberValue float64 `protobuf:"fixed64,2,opt,name=number_value,json=numberValue,oneof"`
> -}
> -type Value_StringValue struct {
> -	StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,oneof"`
> -}
> -type Value_BoolValue struct {
> -	BoolValue bool `protobuf:"varint,4,opt,name=bool_value,json=boolValue,oneof"`
> -}
> -type Value_StructValue struct {
> -	StructValue *Struct `protobuf:"bytes,5,opt,name=struct_value,json=structValue,oneof"`
> -}
> -type Value_ListValue struct {
> -	ListValue *ListValue `protobuf:"bytes,6,opt,name=list_value,json=listValue,oneof"`
> -}
> -
> -func (*Value_NullValue) isValue_Kind()   {}
> -func (*Value_NumberValue) isValue_Kind() {}
> -func (*Value_StringValue) isValue_Kind() {}
> -func (*Value_BoolValue) isValue_Kind()   {}
> -func (*Value_StructValue) isValue_Kind() {}
> -func (*Value_ListValue) isValue_Kind()   {}
> -
> -func (m *Value) GetKind() isValue_Kind {
> -	if m != nil {
> -		return m.Kind
> -	}
> -	return nil
> -}
> -
> -func (m *Value) GetNullValue() NullValue {
> -	if x, ok := m.GetKind().(*Value_NullValue); ok {
> -		return x.NullValue
> -	}
> -	return NullValue_NULL_VALUE
> -}
> -
> -func (m *Value) GetNumberValue() float64 {
> -	if x, ok := m.GetKind().(*Value_NumberValue); ok {
> -		return x.NumberValue
> -	}
> -	return 0
> -}
> -
> -func (m *Value) GetStringValue() string {
> -	if x, ok := m.GetKind().(*Value_StringValue); ok {
> -		return x.StringValue
> -	}
> -	return ""
> -}
> -
> -func (m *Value) GetBoolValue() bool {
> -	if x, ok := m.GetKind().(*Value_BoolValue); ok {
> -		return x.BoolValue
> -	}
> -	return false
> -}
> -
> -func (m *Value) GetStructValue() *Struct {
> -	if x, ok := m.GetKind().(*Value_StructValue); ok {
> -		return x.StructValue
> -	}
> -	return nil
> -}
> -
> -func (m *Value) GetListValue() *ListValue {
> -	if x, ok := m.GetKind().(*Value_ListValue); ok {
> -		return x.ListValue
> -	}
> -	return nil
> -}
> -
> -// XXX_OneofFuncs is for the internal use of the proto package.
> -func (*Value) 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 _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{
> -		(*Value_NullValue)(nil),
> -		(*Value_NumberValue)(nil),
> -		(*Value_StringValue)(nil),
> -		(*Value_BoolValue)(nil),
> -		(*Value_StructValue)(nil),
> -		(*Value_ListValue)(nil),
> -	}
> -}
> -
> -func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
> -	m := msg.(*Value)
> -	// kind
> -	switch x := m.Kind.(type) {
> -	case *Value_NullValue:
> -		b.EncodeVarint(1<<3 | proto.WireVarint)
> -		b.EncodeVarint(uint64(x.NullValue))
> -	case *Value_NumberValue:
> -		b.EncodeVarint(2<<3 | proto.WireFixed64)
> -		b.EncodeFixed64(math.Float64bits(x.NumberValue))
> -	case *Value_StringValue:
> -		b.EncodeVarint(3<<3 | proto.WireBytes)
> -		b.EncodeStringBytes(x.StringValue)
> -	case *Value_BoolValue:
> -		t := uint64(0)
> -		if x.BoolValue {
> -			t = 1
> -		}
> -		b.EncodeVarint(4<<3 | proto.WireVarint)
> -		b.EncodeVarint(t)
> -	case *Value_StructValue:
> -		b.EncodeVarint(5<<3 | proto.WireBytes)
> -		if err := b.EncodeMessage(x.StructValue); err != nil {
> -			return err
> -		}
> -	case *Value_ListValue:
> -		b.EncodeVarint(6<<3 | proto.WireBytes)
> -		if err := b.EncodeMessage(x.ListValue); err != nil {
> -			return err
> -		}
> -	case nil:
> -	default:
> -		return fmt.Errorf("Value.Kind has unexpected type %T", x)
> -	}
> -	return nil
> -}
> -
> -func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
> -	m := msg.(*Value)
> -	switch tag {
> -	case 1: // kind.null_value
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Kind = &Value_NullValue{NullValue(x)}
> -		return true, err
> -	case 2: // kind.number_value
> -		if wire != proto.WireFixed64 {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeFixed64()
> -		m.Kind = &Value_NumberValue{math.Float64frombits(x)}
> -		return true, err
> -	case 3: // kind.string_value
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeStringBytes()
> -		m.Kind = &Value_StringValue{x}
> -		return true, err
> -	case 4: // kind.bool_value
> -		if wire != proto.WireVarint {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		x, err := b.DecodeVarint()
> -		m.Kind = &Value_BoolValue{x != 0}
> -		return true, err
> -	case 5: // kind.struct_value
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		msg := new(Struct)
> -		err := b.DecodeMessage(msg)
> -		m.Kind = &Value_StructValue{msg}
> -		return true, err
> -	case 6: // kind.list_value
> -		if wire != proto.WireBytes {
> -			return true, proto.ErrInternalBadWireType
> -		}
> -		msg := new(ListValue)
> -		err := b.DecodeMessage(msg)
> -		m.Kind = &Value_ListValue{msg}
> -		return true, err
> -	default:
> -		return false, nil
> -	}
> -}
> -
> -func _Value_OneofSizer(msg proto.Message) (n int) {
> -	m := msg.(*Value)
> -	// kind
> -	switch x := m.Kind.(type) {
> -	case *Value_NullValue:
> -		n += proto.SizeVarint(1<<3 | proto.WireVarint)
> -		n += proto.SizeVarint(uint64(x.NullValue))
> -	case *Value_NumberValue:
> -		n += proto.SizeVarint(2<<3 | proto.WireFixed64)
> -		n += 8
> -	case *Value_StringValue:
> -		n += proto.SizeVarint(3<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(len(x.StringValue)))
> -		n += len(x.StringValue)
> -	case *Value_BoolValue:
> -		n += proto.SizeVarint(4<<3 | proto.WireVarint)
> -		n += 1
> -	case *Value_StructValue:
> -		s := proto.Size(x.StructValue)
> -		n += proto.SizeVarint(5<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(s))
> -		n += s
> -	case *Value_ListValue:
> -		s := proto.Size(x.ListValue)
> -		n += proto.SizeVarint(6<<3 | proto.WireBytes)
> -		n += proto.SizeVarint(uint64(s))
> -		n += s
> -	case nil:
> -	default:
> -		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
> -	}
> -	return n
> -}
> -
> -// `ListValue` is a wrapper around a repeated field of values.
> -//
> -// The JSON representation for `ListValue` is JSON array.
> -type ListValue struct {
> -	// Repeated field of dynamically typed values.
> -	Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"`
> -}
> -
> -func (m *ListValue) Reset()                    { *m = ListValue{} }
> -func (m *ListValue) String() string            { return proto.CompactTextString(m) }
> -func (*ListValue) ProtoMessage()               {}
> -func (*ListValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
> -func (*ListValue) XXX_WellKnownType() string   { return "ListValue" }
> -
> -func (m *ListValue) GetValues() []*Value {
> -	if m != nil {
> -		return m.Values
> -	}
> -	return nil
> -}
> -
> -func init() {
> -	proto.RegisterType((*Struct)(nil), "google.protobuf.Struct")
> -	proto.RegisterType((*Value)(nil), "google.protobuf.Value")
> -	proto.RegisterType((*ListValue)(nil), "google.protobuf.ListValue")
> -	proto.RegisterEnum("google.protobuf.NullValue", NullValue_name, NullValue_value)
> -}
> -
> -func init() { proto.RegisterFile("google/protobuf/struct.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 417 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x41, 0x8b, 0xd3, 0x40,
> -	0x14, 0xc7, 0x3b, 0xc9, 0x36, 0x98, 0x17, 0x59, 0x97, 0x11, 0xb4, 0xac, 0xa2, 0xa1, 0x7b, 0x09,
> -	0x22, 0x29, 0xd6, 0x8b, 0x18, 0x2f, 0x06, 0xd6, 0x5d, 0x30, 0x2c, 0x31, 0xba, 0x15, 0xbc, 0x94,
> -	0x26, 0x4d, 0x63, 0xe8, 0x74, 0x26, 0x24, 0x33, 0x4a, 0x8f, 0x7e, 0x0b, 0xcf, 0x1e, 0x3d, 0xfa,
> -	0xe9, 0x3c, 0xca, 0xcc, 0x24, 0xa9, 0xb4, 0xf4, 0x94, 0xbc, 0xf7, 0x7e, 0xef, 0x3f, 0xef, 0xff,
> -	0x66, 0xe0, 0x71, 0xc1, 0x58, 0x41, 0xf2, 0x49, 0x55, 0x33, 0xce, 0x52, 0xb1, 0x9a, 0x34, 0xbc,
> -	0x16, 0x19, 0xf7, 0x55, 0x8c, 0xef, 0xe9, 0xaa, 0xdf, 0x55, 0xc7, 0x3f, 0x11, 0x58, 0x1f, 0x15,
> -	0x81, 0x03, 0xb0, 0x56, 0x65, 0x4e, 0x96, 0xcd, 0x08, 0xb9, 0xa6, 0xe7, 0x4c, 0x2f, 0xfc, 0x3d,
> -	0xd8, 0xd7, 0xa0, 0xff, 0x4e, 0x51, 0x97, 0x94, 0xd7, 0xdb, 0xa4, 0x6d, 0x39, 0xff, 0x00, 0xce,
> -	0x7f, 0x69, 0x7c, 0x06, 0xe6, 0x3a, 0xdf, 0x8e, 0x90, 0x8b, 0x3c, 0x3b, 0x91, 0xbf, 0xf8, 0x39,
> -	0x0c, 0xbf, 0x2d, 0x88, 0xc8, 0x47, 0x86, 0x8b, 0x3c, 0x67, 0xfa, 0xe0, 0x40, 0x7c, 0x26, 0xab,
> -	0x89, 0x86, 0x5e, 0x1b, 0xaf, 0xd0, 0xf8, 0x8f, 0x01, 0x43, 0x95, 0xc4, 0x01, 0x00, 0x15, 0x84,
> -	0xcc, 0xb5, 0x80, 0x14, 0x3d, 0x9d, 0x9e, 0x1f, 0x08, 0xdc, 0x08, 0x42, 0x14, 0x7f, 0x3d, 0x48,
> -	0x6c, 0xda, 0x05, 0xf8, 0x02, 0xee, 0x52, 0xb1, 0x49, 0xf3, 0x7a, 0xbe, 0x3b, 0x1f, 0x5d, 0x0f,
> -	0x12, 0x47, 0x67, 0x7b, 0xa8, 0xe1, 0x75, 0x49, 0x8b, 0x16, 0x32, 0xe5, 0xe0, 0x12, 0xd2, 0x59,
> -	0x0d, 0x3d, 0x05, 0x48, 0x19, 0xeb, 0xc6, 0x38, 0x71, 0x91, 0x77, 0x47, 0x1e, 0x25, 0x73, 0x1a,
> -	0x78, 0xa3, 0x54, 0x44, 0xc6, 0x5b, 0x64, 0xa8, 0xac, 0x3e, 0x3c, 0xb2, 0xc7, 0x56, 0x5e, 0x64,
> -	0xbc, 0x77, 0x49, 0xca, 0xa6, 0xeb, 0xb5, 0x54, 0xef, 0xa1, 0xcb, 0xa8, 0x6c, 0x78, 0xef, 0x92,
> -	0x74, 0x41, 0x68, 0xc1, 0xc9, 0xba, 0xa4, 0xcb, 0x71, 0x00, 0x76, 0x4f, 0x60, 0x1f, 0x2c, 0x25,
> -	0xd6, 0xdd, 0xe8, 0xb1, 0xa5, 0xb7, 0xd4, 0xb3, 0x47, 0x60, 0xf7, 0x4b, 0xc4, 0xa7, 0x00, 0x37,
> -	0xb7, 0x51, 0x34, 0x9f, 0xbd, 0x8d, 0x6e, 0x2f, 0xcf, 0x06, 0xe1, 0x0f, 0x04, 0xf7, 0x33, 0xb6,
> -	0xd9, 0x97, 0x08, 0x1d, 0xed, 0x26, 0x96, 0x71, 0x8c, 0xbe, 0xbc, 0x28, 0x4a, 0xfe, 0x55, 0xa4,
> -	0x7e, 0xc6, 0x36, 0x93, 0x82, 0x91, 0x05, 0x2d, 0x76, 0x4f, 0xb1, 0xe2, 0xdb, 0x2a, 0x6f, 0xda,
> -	0x17, 0x19, 0xe8, 0x4f, 0x95, 0xfe, 0x45, 0xe8, 0x97, 0x61, 0x5e, 0xc5, 0xe1, 0x6f, 0xe3, 0xc9,
> -	0x95, 0x16, 0x8f, 0xbb, 0xf9, 0x3e, 0xe7, 0x84, 0xbc, 0xa7, 0xec, 0x3b, 0xfd, 0x24, 0x3b, 0x53,
> -	0x4b, 0x49, 0xbd, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x1b, 0x59, 0xf8, 0xe5, 0x02, 0x00,
> -	0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/struct/struct.proto b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/struct/struct.proto
> deleted file mode 100644
> index 7d7808e7..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/struct/struct.proto
> +++ /dev/null
> @@ -1,96 +0,0 @@
> -// Protocol Buffers - Google's data interchange format
> -// Copyright 2008 Google Inc.  All rights reserved.
> -// https://developers.google.com/protocol-buffers/
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto3";
> -
> -package google.protobuf;
> -
> -option csharp_namespace = "Google.Protobuf.WellKnownTypes";
> -option cc_enable_arenas = true;
> -option go_package = "github.com/golang/protobuf/ptypes/struct;structpb";
> -option java_package = "com.google.protobuf";
> -option java_outer_classname = "StructProto";
> -option java_multiple_files = true;
> -option objc_class_prefix = "GPB";
> -
> -
> -// `Struct` represents a structured data value, consisting of fields
> -// which map to dynamically typed values. In some languages, `Struct`
> -// might be supported by a native representation. For example, in
> -// scripting languages like JS a struct is represented as an
> -// object. The details of that representation are described together
> -// with the proto support for the language.
> -//
> -// The JSON representation for `Struct` is JSON object.
> -message Struct {
> -  // Unordered map of dynamically typed values.
> -  map<string, Value> fields = 1;
> -}
> -
> -// `Value` represents a dynamically typed value which can be either
> -// null, a number, a string, a boolean, a recursive struct value, or a
> -// list of values. A producer of value is expected to set one of that
> -// variants, absence of any variant indicates an error.
> -//
> -// The JSON representation for `Value` is JSON value.
> -message Value {
> -  // The kind of value.
> -  oneof kind {
> -    // Represents a null value.
> -    NullValue null_value = 1;
> -    // Represents a double value.
> -    double number_value = 2;
> -    // Represents a string value.
> -    string string_value = 3;
> -    // Represents a boolean value.
> -    bool bool_value = 4;
> -    // Represents a structured value.
> -    Struct struct_value = 5;
> -    // Represents a repeated `Value`.
> -    ListValue list_value = 6;
> -  }
> -}
> -
> -// `NullValue` is a singleton enumeration to represent the null value for the
> -// `Value` type union.
> -//
> -//  The JSON representation for `NullValue` is JSON `null`.
> -enum NullValue {
> -  // Null value.
> -  NULL_VALUE = 0;
> -}
> -
> -// `ListValue` is a wrapper around a repeated field of values.
> -//
> -// The JSON representation for `ListValue` is JSON array.
> -message ListValue {
> -  // Repeated field of dynamically typed values.
> -  repeated Value values = 1;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp.go
> deleted file mode 100644
> index 47f10dbc..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp.go
> +++ /dev/null
> @@ -1,134 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2016 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package ptypes
> -
> -// This file implements operations on google.protobuf.Timestamp.
> -
> -import (
> -	"errors"
> -	"fmt"
> -	"time"
> -
> -	tspb "github.com/golang/protobuf/ptypes/timestamp"
> -)
> -
> -const (
> -	// Seconds field of the earliest valid Timestamp.
> -	// This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix().
> -	minValidSeconds = -62135596800
> -	// Seconds field just after the latest valid Timestamp.
> -	// This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix().
> -	maxValidSeconds = 253402300800
> -)
> -
> -// validateTimestamp determines whether a Timestamp is valid.
> -// A valid timestamp represents a time in the range
> -// [0001-01-01, 10000-01-01) and has a Nanos field
> -// in the range [0, 1e9).
> -//
> -// If the Timestamp is valid, validateTimestamp returns nil.
> -// Otherwise, it returns an error that describes
> -// the problem.
> -//
> -// Every valid Timestamp can be represented by a time.Time, but the converse is not true.
> -func validateTimestamp(ts *tspb.Timestamp) error {
> -	if ts == nil {
> -		return errors.New("timestamp: nil Timestamp")
> -	}
> -	if ts.Seconds < minValidSeconds {
> -		return fmt.Errorf("timestamp: %v before 0001-01-01", ts)
> -	}
> -	if ts.Seconds >= maxValidSeconds {
> -		return fmt.Errorf("timestamp: %v after 10000-01-01", ts)
> -	}
> -	if ts.Nanos < 0 || ts.Nanos >= 1e9 {
> -		return fmt.Errorf("timestamp: %v: nanos not in range [0, 1e9)", ts)
> -	}
> -	return nil
> -}
> -
> -// Timestamp converts a google.protobuf.Timestamp proto to a time.Time.
> -// It returns an error if the argument is invalid.
> -//
> -// Unlike most Go functions, if Timestamp returns an error, the first return value
> -// is not the zero time.Time. Instead, it is the value obtained from the
> -// time.Unix function when passed the contents of the Timestamp, in the UTC
> -// locale. This may or may not be a meaningful time; many invalid Timestamps
> -// do map to valid time.Times.
> -//
> -// A nil Timestamp returns an error. The first return value in that case is
> -// undefined.
> -func Timestamp(ts *tspb.Timestamp) (time.Time, error) {
> -	// Don't return the zero value on error, because corresponds to a valid
> -	// timestamp. Instead return whatever time.Unix gives us.
> -	var t time.Time
> -	if ts == nil {
> -		t = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp
> -	} else {
> -		t = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC()
> -	}
> -	return t, validateTimestamp(ts)
> -}
> -
> -// TimestampNow returns a google.protobuf.Timestamp for the current time.
> -func TimestampNow() *tspb.Timestamp {
> -	ts, err := TimestampProto(time.Now())
> -	if err != nil {
> -		panic("ptypes: time.Now() out of Timestamp range")
> -	}
> -	return ts
> -}
> -
> -// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.
> -// It returns an error if the resulting Timestamp is invalid.
> -func TimestampProto(t time.Time) (*tspb.Timestamp, error) {
> -	seconds := t.Unix()
> -	nanos := int32(t.Sub(time.Unix(seconds, 0)))
> -	ts := &tspb.Timestamp{
> -		Seconds: seconds,
> -		Nanos:   nanos,
> -	}
> -	if err := validateTimestamp(ts); err != nil {
> -		return nil, err
> -	}
> -	return ts, nil
> -}
> -
> -// TimestampString returns the RFC 3339 string for valid Timestamps. For invalid
> -// Timestamps, it returns an error message in parentheses.
> -func TimestampString(ts *tspb.Timestamp) string {
> -	t, err := Timestamp(ts)
> -	if err != nil {
> -		return fmt.Sprintf("(%v)", err)
> -	}
> -	return t.Format(time.RFC3339Nano)
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go
> deleted file mode 100644
> index e23e4a25..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go
> +++ /dev/null
> @@ -1,160 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: google/protobuf/timestamp.proto
> -
> -/*
> -Package timestamp is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	google/protobuf/timestamp.proto
> -
> -It has these top-level messages:
> -	Timestamp
> -*/
> -package timestamp
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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
> -
> -// A Timestamp represents a point in time independent of any time zone
> -// or calendar, represented as seconds and fractions of seconds at
> -// nanosecond resolution in UTC Epoch time. It is encoded using the
> -// Proleptic Gregorian Calendar which extends the Gregorian calendar
> -// backwards to year one. It is encoded assuming all minutes are 60
> -// seconds long, i.e. leap seconds are "smeared" so that no leap second
> -// table is needed for interpretation. Range is from
> -// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
> -// By restricting to that range, we ensure that we can convert to
> -// and from  RFC 3339 date strings.
> -// See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
> -//
> -// # Examples
> -//
> -// Example 1: Compute Timestamp from POSIX `time()`.
> -//
> -//     Timestamp timestamp;
> -//     timestamp.set_seconds(time(NULL));
> -//     timestamp.set_nanos(0);
> -//
> -// Example 2: Compute Timestamp from POSIX `gettimeofday()`.
> -//
> -//     struct timeval tv;
> -//     gettimeofday(&tv, NULL);
> -//
> -//     Timestamp timestamp;
> -//     timestamp.set_seconds(tv.tv_sec);
> -//     timestamp.set_nanos(tv.tv_usec * 1000);
> -//
> -// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
> -//
> -//     FILETIME ft;
> -//     GetSystemTimeAsFileTime(&ft);
> -//     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
> -//
> -//     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
> -//     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
> -//     Timestamp timestamp;
> -//     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
> -//     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
> -//
> -// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
> -//
> -//     long millis = System.currentTimeMillis();
> -//
> -//     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
> -//         .setNanos((int) ((millis % 1000) * 1000000)).build();
> -//
> -//
> -// Example 5: Compute Timestamp from current time in Python.
> -//
> -//     timestamp = Timestamp()
> -//     timestamp.GetCurrentTime()
> -//
> -// # JSON Mapping
> -//
> -// In JSON format, the Timestamp type is encoded as a string in the
> -// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
> -// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
> -// where {year} is always expressed using four digits while {month}, {day},
> -// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
> -// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
> -// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
> -// is required, though only UTC (as indicated by "Z") is presently supported.
> -//
> -// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
> -// 01:30 UTC on January 15, 2017.
> -//
> -// In JavaScript, one can convert a Date object to this format using the
> -// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString]
> -// method. In Python, a standard `datetime.datetime` object can be converted
> -// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
> -// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
> -// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
> -// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime())
> -// to obtain a formatter capable of generating timestamps in this format.
> -//
> -//
> -type Timestamp struct {
> -	// Represents seconds of UTC time since Unix epoch
> -	// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
> -	// 9999-12-31T23:59:59Z inclusive.
> -	Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"`
> -	// Non-negative fractions of a second at nanosecond resolution. Negative
> -	// second values with fractions must still have non-negative nanos values
> -	// that count forward in time. Must be from 0 to 999,999,999
> -	// inclusive.
> -	Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"`
> -}
> -
> -func (m *Timestamp) Reset()                    { *m = Timestamp{} }
> -func (m *Timestamp) String() string            { return proto.CompactTextString(m) }
> -func (*Timestamp) ProtoMessage()               {}
> -func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -func (*Timestamp) XXX_WellKnownType() string   { return "Timestamp" }
> -
> -func (m *Timestamp) GetSeconds() int64 {
> -	if m != nil {
> -		return m.Seconds
> -	}
> -	return 0
> -}
> -
> -func (m *Timestamp) GetNanos() int32 {
> -	if m != nil {
> -		return m.Nanos
> -	}
> -	return 0
> -}
> -
> -func init() {
> -	proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp")
> -}
> -
> -func init() { proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 191 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcf, 0xcf, 0x4f,
> -	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xc9, 0xcc, 0x4d,
> -	0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0xd0, 0x03, 0x0b, 0x09, 0xf1, 0x43, 0x14, 0xe8, 0xc1, 0x14, 0x28,
> -	0x59, 0x73, 0x71, 0x86, 0xc0, 0xd4, 0x08, 0x49, 0x70, 0xb1, 0x17, 0xa7, 0x26, 0xe7, 0xe7, 0xa5,
> -	0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x30, 0x07, 0xc1, 0xb8, 0x42, 0x22, 0x5c, 0xac, 0x79, 0x89,
> -	0x79, 0xf9, 0xc5, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xac, 0x41, 0x10, 0x8e, 0x53, 0x1d, 0x97, 0x70,
> -	0x72, 0x7e, 0xae, 0x1e, 0x9a, 0x99, 0x4e, 0x7c, 0x70, 0x13, 0x03, 0x40, 0x42, 0x01, 0x8c, 0x51,
> -	0xda, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xe9, 0xf9, 0x39, 0x89,
> -	0x79, 0xe9, 0x08, 0x27, 0x16, 0x94, 0x54, 0x16, 0xa4, 0x16, 0x23, 0x5c, 0xfa, 0x83, 0x91, 0x71,
> -	0x11, 0x13, 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xc9, 0x01, 0x50, 0xb5, 0x7a,
> -	0xe1, 0xa9, 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20, 0x3d, 0x49, 0x6c, 0x60, 0x43,
> -	0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x77, 0x4a, 0x07, 0xf7, 0x00, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto
> deleted file mode 100644
> index b7cbd175..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto
> +++ /dev/null
> @@ -1,133 +0,0 @@
> -// Protocol Buffers - Google's data interchange format
> -// Copyright 2008 Google Inc.  All rights reserved.
> -// https://developers.google.com/protocol-buffers/
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -syntax = "proto3";
> -
> -package google.protobuf;
> -
> -option csharp_namespace = "Google.Protobuf.WellKnownTypes";
> -option cc_enable_arenas = true;
> -option go_package = "github.com/golang/protobuf/ptypes/timestamp";
> -option java_package = "com.google.protobuf";
> -option java_outer_classname = "TimestampProto";
> -option java_multiple_files = true;
> -option objc_class_prefix = "GPB";
> -
> -// A Timestamp represents a point in time independent of any time zone
> -// or calendar, represented as seconds and fractions of seconds at
> -// nanosecond resolution in UTC Epoch time. It is encoded using the
> -// Proleptic Gregorian Calendar which extends the Gregorian calendar
> -// backwards to year one. It is encoded assuming all minutes are 60
> -// seconds long, i.e. leap seconds are "smeared" so that no leap second
> -// table is needed for interpretation. Range is from
> -// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
> -// By restricting to that range, we ensure that we can convert to
> -// and from  RFC 3339 date strings.
> -// See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
> -//
> -// # Examples
> -//
> -// Example 1: Compute Timestamp from POSIX `time()`.
> -//
> -//     Timestamp timestamp;
> -//     timestamp.set_seconds(time(NULL));
> -//     timestamp.set_nanos(0);
> -//
> -// Example 2: Compute Timestamp from POSIX `gettimeofday()`.
> -//
> -//     struct timeval tv;
> -//     gettimeofday(&tv, NULL);
> -//
> -//     Timestamp timestamp;
> -//     timestamp.set_seconds(tv.tv_sec);
> -//     timestamp.set_nanos(tv.tv_usec * 1000);
> -//
> -// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
> -//
> -//     FILETIME ft;
> -//     GetSystemTimeAsFileTime(&ft);
> -//     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
> -//
> -//     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
> -//     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
> -//     Timestamp timestamp;
> -//     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
> -//     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
> -//
> -// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
> -//
> -//     long millis = System.currentTimeMillis();
> -//
> -//     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
> -//         .setNanos((int) ((millis % 1000) * 1000000)).build();
> -//
> -//
> -// Example 5: Compute Timestamp from current time in Python.
> -//
> -//     timestamp = Timestamp()
> -//     timestamp.GetCurrentTime()
> -//
> -// # JSON Mapping
> -//
> -// In JSON format, the Timestamp type is encoded as a string in the
> -// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
> -// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
> -// where {year} is always expressed using four digits while {month}, {day},
> -// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
> -// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
> -// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
> -// is required, though only UTC (as indicated by "Z") is presently supported.
> -//
> -// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
> -// 01:30 UTC on January 15, 2017.
> -//
> -// In JavaScript, one can convert a Date object to this format using the
> -// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString]
> -// method. In Python, a standard `datetime.datetime` object can be converted
> -// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
> -// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
> -// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
> -// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime())
> -// to obtain a formatter capable of generating timestamps in this format.
> -//
> -//
> -message Timestamp {
> -
> -  // Represents seconds of UTC time since Unix epoch
> -  // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
> -  // 9999-12-31T23:59:59Z inclusive.
> -  int64 seconds = 1;
> -
> -  // Non-negative fractions of a second at nanosecond resolution. Negative
> -  // second values with fractions must still have non-negative nanos values
> -  // that count forward in time. Must be from 0 to 999,999,999
> -  // inclusive.
> -  int32 nanos = 2;
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go
> deleted file mode 100644
> index 6e3c969b..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go
> +++ /dev/null
> @@ -1,153 +0,0 @@
> -// Go support for Protocol Buffers - Google's data interchange format
> -//
> -// Copyright 2016 The Go Authors.  All rights reserved.
> -// https://github.com/golang/protobuf
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -package ptypes
> -
> -import (
> -	"math"
> -	"testing"
> -	"time"
> -
> -	"github.com/golang/protobuf/proto"
> -	tspb "github.com/golang/protobuf/ptypes/timestamp"
> -)
> -
> -var tests = []struct {
> -	ts    *tspb.Timestamp
> -	valid bool
> -	t     time.Time
> -}{
> -	// The timestamp representing the Unix epoch date.
> -	{&tspb.Timestamp{Seconds: 0, Nanos: 0}, true, utcDate(1970, 1, 1)},
> -	// The smallest representable timestamp.
> -	{&tspb.Timestamp{Seconds: math.MinInt64, Nanos: math.MinInt32}, false,
> -		time.Unix(math.MinInt64, math.MinInt32).UTC()},
> -	// The smallest representable timestamp with non-negative nanos.
> -	{&tspb.Timestamp{Seconds: math.MinInt64, Nanos: 0}, false, time.Unix(math.MinInt64, 0).UTC()},
> -	// The earliest valid timestamp.
> -	{&tspb.Timestamp{Seconds: minValidSeconds, Nanos: 0}, true, utcDate(1, 1, 1)},
> -	//"0001-01-01T00:00:00Z"},
> -	// The largest representable timestamp.
> -	{&tspb.Timestamp{Seconds: math.MaxInt64, Nanos: math.MaxInt32}, false,
> -		time.Unix(math.MaxInt64, math.MaxInt32).UTC()},
> -	// The largest representable timestamp with nanos in range.
> -	{&tspb.Timestamp{Seconds: math.MaxInt64, Nanos: 1e9 - 1}, false,
> -		time.Unix(math.MaxInt64, 1e9-1).UTC()},
> -	// The largest valid timestamp.
> -	{&tspb.Timestamp{Seconds: maxValidSeconds - 1, Nanos: 1e9 - 1}, true,
> -		time.Date(9999, 12, 31, 23, 59, 59, 1e9-1, time.UTC)},
> -	// The smallest invalid timestamp that is larger than the valid range.
> -	{&tspb.Timestamp{Seconds: maxValidSeconds, Nanos: 0}, false, time.Unix(maxValidSeconds, 0).UTC()},
> -	// A date before the epoch.
> -	{&tspb.Timestamp{Seconds: -281836800, Nanos: 0}, true, utcDate(1961, 1, 26)},
> -	// A date after the epoch.
> -	{&tspb.Timestamp{Seconds: 1296000000, Nanos: 0}, true, utcDate(2011, 1, 26)},
> -	// A date after the epoch, in the middle of the day.
> -	{&tspb.Timestamp{Seconds: 1296012345, Nanos: 940483}, true,
> -		time.Date(2011, 1, 26, 3, 25, 45, 940483, time.UTC)},
> -}
> -
> -func TestValidateTimestamp(t *testing.T) {
> -	for _, s := range tests {
> -		got := validateTimestamp(s.ts)
> -		if (got == nil) != s.valid {
> -			t.Errorf("validateTimestamp(%v) = %v, want %v", s.ts, got, s.valid)
> -		}
> -	}
> -}
> -
> -func TestTimestamp(t *testing.T) {
> -	for _, s := range tests {
> -		got, err := Timestamp(s.ts)
> -		if (err == nil) != s.valid {
> -			t.Errorf("Timestamp(%v) error = %v, but valid = %t", s.ts, err, s.valid)
> -		} else if s.valid && got != s.t {
> -			t.Errorf("Timestamp(%v) = %v, want %v", s.ts, got, s.t)
> -		}
> -	}
> -	// Special case: a nil Timestamp is an error, but returns the 0 Unix time.
> -	got, err := Timestamp(nil)
> -	want := time.Unix(0, 0).UTC()
> -	if got != want {
> -		t.Errorf("Timestamp(nil) = %v, want %v", got, want)
> -	}
> -	if err == nil {
> -		t.Errorf("Timestamp(nil) error = nil, expected error")
> -	}
> -}
> -
> -func TestTimestampProto(t *testing.T) {
> -	for _, s := range tests {
> -		got, err := TimestampProto(s.t)
> -		if (err == nil) != s.valid {
> -			t.Errorf("TimestampProto(%v) error = %v, but valid = %t", s.t, err, s.valid)
> -		} else if s.valid && !proto.Equal(got, s.ts) {
> -			t.Errorf("TimestampProto(%v) = %v, want %v", s.t, got, s.ts)
> -		}
> -	}
> -	// No corresponding special case here: no time.Time results in a nil Timestamp.
> -}
> -
> -func TestTimestampString(t *testing.T) {
> -	for _, test := range []struct {
> -		ts   *tspb.Timestamp
> -		want string
> -	}{
> -		// Not much testing needed because presumably time.Format is
> -		// well-tested.
> -		{&tspb.Timestamp{Seconds: 0, Nanos: 0}, "1970-01-01T00:00:00Z"},
> -		{&tspb.Timestamp{Seconds: minValidSeconds - 1, Nanos: 0}, "(timestamp: seconds:-62135596801  before 0001-01-01)"},
> -	} {
> -		got := TimestampString(test.ts)
> -		if got != test.want {
> -			t.Errorf("TimestampString(%v) = %q, want %q", test.ts, got, test.want)
> -		}
> -	}
> -}
> -
> -func utcDate(year, month, day int) time.Time {
> -	return time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.UTC)
> -}
> -
> -func TestTimestampNow(t *testing.T) {
> -	// Bracket the expected time.
> -	before := time.Now()
> -	ts := TimestampNow()
> -	after := time.Now()
> -
> -	tm, err := Timestamp(ts)
> -	if err != nil {
> -		t.Errorf("between %v and %v\nTimestampNow() = %v\nwhich is invalid (%v)", before, after, ts, err)
> -	}
> -	if tm.Before(before) || tm.After(after) {
> -		t.Errorf("between %v and %v\nTimestamp(TimestampNow()) = %v", before, after, tm)
> -	}
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go
> deleted file mode 100644
> index 0ed59bf1..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go
> +++ /dev/null
> @@ -1,260 +0,0 @@
> -// Code generated by protoc-gen-go. DO NOT EDIT.
> -// source: google/protobuf/wrappers.proto
> -
> -/*
> -Package wrappers is a generated protocol buffer package.
> -
> -It is generated from these files:
> -	google/protobuf/wrappers.proto
> -
> -It has these top-level messages:
> -	DoubleValue
> -	FloatValue
> -	Int64Value
> -	UInt64Value
> -	Int32Value
> -	UInt32Value
> -	BoolValue
> -	StringValue
> -	BytesValue
> -*/
> -package wrappers
> -
> -import proto "github.com/golang/protobuf/proto"
> -import fmt "fmt"
> -import math "math"
> -
> -// 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
> -
> -// Wrapper message for `double`.
> -//
> -// The JSON representation for `DoubleValue` is JSON number.
> -type DoubleValue struct {
> -	// The double value.
> -	Value float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
> -}
> -
> -func (m *DoubleValue) Reset()                    { *m = DoubleValue{} }
> -func (m *DoubleValue) String() string            { return proto.CompactTextString(m) }
> -func (*DoubleValue) ProtoMessage()               {}
> -func (*DoubleValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
> -func (*DoubleValue) XXX_WellKnownType() string   { return "DoubleValue" }
> -
> -func (m *DoubleValue) GetValue() float64 {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return 0
> -}
> -
> -// Wrapper message for `float`.
> -//
> -// The JSON representation for `FloatValue` is JSON number.
> -type FloatValue struct {
> -	// The float value.
> -	Value float32 `protobuf:"fixed32,1,opt,name=value" json:"value,omitempty"`
> -}
> -
> -func (m *FloatValue) Reset()                    { *m = FloatValue{} }
> -func (m *FloatValue) String() string            { return proto.CompactTextString(m) }
> -func (*FloatValue) ProtoMessage()               {}
> -func (*FloatValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
> -func (*FloatValue) XXX_WellKnownType() string   { return "FloatValue" }
> -
> -func (m *FloatValue) GetValue() float32 {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return 0
> -}
> -
> -// Wrapper message for `int64`.
> -//
> -// The JSON representation for `Int64Value` is JSON string.
> -type Int64Value struct {
> -	// The int64 value.
> -	Value int64 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"`
> -}
> -
> -func (m *Int64Value) Reset()                    { *m = Int64Value{} }
> -func (m *Int64Value) String() string            { return proto.CompactTextString(m) }
> -func (*Int64Value) ProtoMessage()               {}
> -func (*Int64Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
> -func (*Int64Value) XXX_WellKnownType() string   { return "Int64Value" }
> -
> -func (m *Int64Value) GetValue() int64 {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return 0
> -}
> -
> -// Wrapper message for `uint64`.
> -//
> -// The JSON representation for `UInt64Value` is JSON string.
> -type UInt64Value struct {
> -	// The uint64 value.
> -	Value uint64 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"`
> -}
> -
> -func (m *UInt64Value) Reset()                    { *m = UInt64Value{} }
> -func (m *UInt64Value) String() string            { return proto.CompactTextString(m) }
> -func (*UInt64Value) ProtoMessage()               {}
> -func (*UInt64Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
> -func (*UInt64Value) XXX_WellKnownType() string   { return "UInt64Value" }
> -
> -func (m *UInt64Value) GetValue() uint64 {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return 0
> -}
> -
> -// Wrapper message for `int32`.
> -//
> -// The JSON representation for `Int32Value` is JSON number.
> -type Int32Value struct {
> -	// The int32 value.
> -	Value int32 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"`
> -}
> -
> -func (m *Int32Value) Reset()                    { *m = Int32Value{} }
> -func (m *Int32Value) String() string            { return proto.CompactTextString(m) }
> -func (*Int32Value) ProtoMessage()               {}
> -func (*Int32Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
> -func (*Int32Value) XXX_WellKnownType() string   { return "Int32Value" }
> -
> -func (m *Int32Value) GetValue() int32 {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return 0
> -}
> -
> -// Wrapper message for `uint32`.
> -//
> -// The JSON representation for `UInt32Value` is JSON number.
> -type UInt32Value struct {
> -	// The uint32 value.
> -	Value uint32 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"`
> -}
> -
> -func (m *UInt32Value) Reset()                    { *m = UInt32Value{} }
> -func (m *UInt32Value) String() string            { return proto.CompactTextString(m) }
> -func (*UInt32Value) ProtoMessage()               {}
> -func (*UInt32Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
> -func (*UInt32Value) XXX_WellKnownType() string   { return "UInt32Value" }
> -
> -func (m *UInt32Value) GetValue() uint32 {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return 0
> -}
> -
> -// Wrapper message for `bool`.
> -//
> -// The JSON representation for `BoolValue` is JSON `true` and `false`.
> -type BoolValue struct {
> -	// The bool value.
> -	Value bool `protobuf:"varint,1,opt,name=value" json:"value,omitempty"`
> -}
> -
> -func (m *BoolValue) Reset()                    { *m = BoolValue{} }
> -func (m *BoolValue) String() string            { return proto.CompactTextString(m) }
> -func (*BoolValue) ProtoMessage()               {}
> -func (*BoolValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
> -func (*BoolValue) XXX_WellKnownType() string   { return "BoolValue" }
> -
> -func (m *BoolValue) GetValue() bool {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return false
> -}
> -
> -// Wrapper message for `string`.
> -//
> -// The JSON representation for `StringValue` is JSON string.
> -type StringValue struct {
> -	// The string value.
> -	Value string `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"`
> -}
> -
> -func (m *StringValue) Reset()                    { *m = StringValue{} }
> -func (m *StringValue) String() string            { return proto.CompactTextString(m) }
> -func (*StringValue) ProtoMessage()               {}
> -func (*StringValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
> -func (*StringValue) XXX_WellKnownType() string   { return "StringValue" }
> -
> -func (m *StringValue) GetValue() string {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return ""
> -}
> -
> -// Wrapper message for `bytes`.
> -//
> -// The JSON representation for `BytesValue` is JSON string.
> -type BytesValue struct {
> -	// The bytes value.
> -	Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
> -}
> -
> -func (m *BytesValue) Reset()                    { *m = BytesValue{} }
> -func (m *BytesValue) String() string            { return proto.CompactTextString(m) }
> -func (*BytesValue) ProtoMessage()               {}
> -func (*BytesValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
> -func (*BytesValue) XXX_WellKnownType() string   { return "BytesValue" }
> -
> -func (m *BytesValue) GetValue() []byte {
> -	if m != nil {
> -		return m.Value
> -	}
> -	return nil
> -}
> -
> -func init() {
> -	proto.RegisterType((*DoubleValue)(nil), "google.protobuf.DoubleValue")
> -	proto.RegisterType((*FloatValue)(nil), "google.protobuf.FloatValue")
> -	proto.RegisterType((*Int64Value)(nil), "google.protobuf.Int64Value")
> -	proto.RegisterType((*UInt64Value)(nil), "google.protobuf.UInt64Value")
> -	proto.RegisterType((*Int32Value)(nil), "google.protobuf.Int32Value")
> -	proto.RegisterType((*UInt32Value)(nil), "google.protobuf.UInt32Value")
> -	proto.RegisterType((*BoolValue)(nil), "google.protobuf.BoolValue")
> -	proto.RegisterType((*StringValue)(nil), "google.protobuf.StringValue")
> -	proto.RegisterType((*BytesValue)(nil), "google.protobuf.BytesValue")
> -}
> -
> -func init() { proto.RegisterFile("google/protobuf/wrappers.proto", fileDescriptor0) }
> -
> -var fileDescriptor0 = []byte{
> -	// 259 bytes of a gzipped FileDescriptorProto
> -	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f,
> -	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x2f, 0x4a, 0x2c,
> -	0x28, 0x48, 0x2d, 0x2a, 0xd6, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0xca,
> -	0x5c, 0xdc, 0x2e, 0xf9, 0xa5, 0x49, 0x39, 0xa9, 0x61, 0x89, 0x39, 0xa5, 0xa9, 0x42, 0x22, 0x5c,
> -	0xac, 0x65, 0x20, 0x86, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x63, 0x10, 0x84, 0xa3, 0xa4, 0xc4, 0xc5,
> -	0xe5, 0x96, 0x93, 0x9f, 0x58, 0x82, 0x45, 0x0d, 0x13, 0x92, 0x1a, 0xcf, 0xbc, 0x12, 0x33, 0x13,
> -	0x2c, 0x6a, 0x98, 0x61, 0x6a, 0x94, 0xb9, 0xb8, 0x43, 0x71, 0x29, 0x62, 0x41, 0x35, 0xc8, 0xd8,
> -	0x08, 0x8b, 0x1a, 0x56, 0x34, 0x83, 0xb0, 0x2a, 0xe2, 0x85, 0x29, 0x52, 0xe4, 0xe2, 0x74, 0xca,
> -	0xcf, 0xcf, 0xc1, 0xa2, 0x84, 0x03, 0xc9, 0x9c, 0xe0, 0x92, 0xa2, 0xcc, 0xbc, 0x74, 0x2c, 0x8a,
> -	0x38, 0x91, 0x1c, 0xe4, 0x54, 0x59, 0x92, 0x5a, 0x8c, 0x45, 0x0d, 0x0f, 0x54, 0x8d, 0x53, 0x0d,
> -	0x97, 0x70, 0x72, 0x7e, 0xae, 0x1e, 0x5a, 0xe8, 0x3a, 0xf1, 0x86, 0x43, 0x83, 0x3f, 0x00, 0x24,
> -	0x12, 0xc0, 0x18, 0xa5, 0x95, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f,
> -	0x9e, 0x9f, 0x93, 0x98, 0x97, 0x8e, 0x88, 0xaa, 0x82, 0x92, 0xca, 0x82, 0xd4, 0x62, 0x78, 0x8c,
> -	0xfd, 0x60, 0x64, 0x5c, 0xc4, 0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e,
> -	0x00, 0x54, 0xa9, 0x5e, 0x78, 0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b,
> -	0x12, 0x1b, 0xd8, 0x0c, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x19, 0x6c, 0xb9, 0xb8, 0xfe,
> -	0x01, 0x00, 0x00,
> -}
> diff --git a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.proto b/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.proto
> deleted file mode 100644
> index 01947639..00000000
> --- a/phaul/src/test/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.proto
> +++ /dev/null
> @@ -1,118 +0,0 @@
> -// Protocol Buffers - Google's data interchange format
> -// Copyright 2008 Google Inc.  All rights reserved.
> -// https://developers.google.com/protocol-buffers/
> -//
> -// 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 Google Inc. 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
> -// OWNER 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.
> -
> -// Wrappers for primitive (non-message) types. These types are useful
> -// for embedding primitives in the `google.protobuf.Any` type and for places
> -// where we need to distinguish between the absence of a primitive
> -// typed field and its default value.
> -
> -syntax = "proto3";
> -
> -package google.protobuf;
> -
> -option csharp_namespace = "Google.Protobuf.WellKnownTypes";
> -option cc_enable_arenas = true;
> -option go_package = "github.com/golang/protobuf/ptypes/wrappers";
> -option java_package = "com.google.protobuf";
> -option java_outer_classname = "WrappersProto";
> -option java_multiple_files = true;
> -option objc_class_prefix = "GPB";
> -
> -// Wrapper message for `double`.
> -//
> -// The JSON representation for `DoubleValue` is JSON number.
> -message DoubleValue {
> -  // The double value.
> -  double value = 1;
> -}
> -
> -// Wrapper message for `float`.
> -//
> -// The JSON representation for `FloatValue` is JSON number.
> -message FloatValue {
> -  // The float value.
> -  float value = 1;
> -}
> -
> -// Wrapper message for `int64`.
> -//
> -// The JSON representation for `Int64Value` is JSON string.
> -message Int64Value {
> -  // The int64 value.
> -  int64 value = 1;
> -}
> -
> -// Wrapper message for `uint64`.
> -//
> -// The JSON representation for `UInt64Value` is JSON string.
> -message UInt64Value {
> -  // The uint64 value.
> -  uint64 value = 1;
> -}
> -
> -// Wrapper message for `int32`.
> -//
> -// The JSON representation for `Int32Value` is JSON number.
> -message Int32Value {
> -  // The int32 value.
> -  int32 value = 1;
> -}
> -
> -// Wrapper message for `uint32`.
> -//
> -// The JSON representation for `UInt32Value` is JSON number.
> -message UInt32Value {
> -  // The uint32 value.
> -  uint32 value = 1;
> -}
> -
> -// Wrapper message for `bool`.
> -//
> -// The JSON representation for `BoolValue` is JSON `true` and `false`.
> -message BoolValue {
> -  // The bool value.
> -  bool value = 1;
> -}
> -
> -// Wrapper message for `string`.
> -//
> -// The JSON representation for `StringValue` is JSON string.
> -message StringValue {
> -  // The string value.
> -  string value = 1;
> -}
> -
> -// Wrapper message for `bytes`.
> -//
> -// The JSON representation for `BytesValue` is JSON string.
> -message BytesValue {
> -  // The bytes value.
> -  bytes value = 1;
> -}
> diff --git a/phaul/test.sh b/phaul/test.sh
> deleted file mode 100755
> index 23036bd1..00000000
> --- a/phaul/test.sh
> +++ /dev/null
> @@ -1,7 +0,0 @@
> -#!/bin/sh
> -
> -set -e -x
> -
> -./piggie
> -
> -./src/test/test `pidof piggie`
> diff --git a/scripts/travis/Makefile b/scripts/travis/Makefile
> index f7181acb..1b285828 100644
> --- a/scripts/travis/Makefile
> +++ b/scripts/travis/Makefile
> @@ -11,7 +11,7 @@ ifdef CLANG
>  	target-suffix = -clang
>  endif
>  
> -TARGETS := alpine fedora-rawhide centos phaul
> +TARGETS := alpine fedora-rawhide centos
>  ZDTM_OPTIONS :=
>  
>  alpine: ZDTM_OPTIONS=-x zdtm/static/binfmt_misc -x zdtm/static/netns-nf -x zdtm/static/sched_policy00 -x zdtm/static/seccomp_strict -x zdtm/static/sigaltstack -x zdtm/static/signalfd00 -x zdtm/static/config_inotify_irmap
> @@ -28,12 +28,6 @@ fedora-asan:
>  	$(MAKE) -C ../build $@$(target-suffix)
>  	docker run --rm -it --privileged -v /lib/modules:/lib/modules --tmpfs /run criu-$@ ./scripts/travis/asan.sh $(ZDTM_OPTIONS)
>  
> -phaul-test:
> -	echo 'DOCKER_OPTS="--storage-driver=devicemapper"' > /etc/default/docker
> -	restart docker
> -	$(MAKE) -C ../build alpine
> -	docker run --rm -it --privileged -v /lib/modules:/lib/modules --tmpfs /run criu-alpine ./scripts/travis/phaul
> -
>  docker-test:
>  	./docker-test.sh
>  
> diff --git a/scripts/travis/phaul b/scripts/travis/phaul
> deleted file mode 100755
> index 21e5a124..00000000
> --- a/scripts/travis/phaul
> +++ /dev/null
> @@ -1,12 +0,0 @@
> -#!/bin/bash
> -
> -set -e -x
> -
> -export CC=gcc
> -export PATH=`pwd`/criu:$PATH &&
> -cd phaul/
> -mkdir -p src/github.com/xemul/criu &&
> -ln -s ../../../../ src/github.com/xemul/criu/phaul &&
> -export GOPATH=`pwd` &&
> -cd src/github.com/xemul/criu/phaul &&
> -make run_test
> -- 
> 2.19.1
> 
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list