Repository: gobuffalo/buffalo
Pull request #1974 (2020-04-20 19:09:40)

v0.16.6


Patch:
diff --git a/.codeclimate.yml b/.codeclimate.yml
index 8582c3af..a6456d0e 100644
--- a/.codeclimate.yml
+++ b/.codeclimate.yml
@@ -24,3 +24,4 @@ exclude_paths:
   - "*_test.go"
   - "**_test.go"
   - "middleware_test.go"
+  - packrd/**.go 
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 60d9d7b1..6783fca4 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -10,10 +10,10 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       -
-        name: Set up Go 1.13
+        name: Set up Go 1.14
         uses: actions/setup-go@v1
         with:
-          go-version: 1.13
+          go-version: 1.14
         id: go
       -
         name: Checkout Code
diff --git a/.goreleaser.yml b/.goreleaser.yml
index ce7fef0c..01a27ce3 100644
--- a/.goreleaser.yml
+++ b/.goreleaser.yml
@@ -17,6 +17,8 @@ builds:
     goarm:
       - 6
       - 7
+    hooks:
+      post: tar -czvf dist/buffalo_Linux_x86_64.tar.gz dist/buffalo_linux_amd64
 archives:
   -
     replacements:
@@ -35,6 +37,9 @@ changelog:
     exclude:
       - '^docs:'
       - '^test:'
+release:
+  extra_files:
+    - glob: ./dist/buffalo_Linux_x86_64.tar.gz
 brews:
   -
     name: 'buffalo'
diff --git a/Dockerfile.build b/Dockerfile.build
index dbf1af10..ec533d61 100644
--- a/Dockerfile.build
+++ b/Dockerfile.build
@@ -3,7 +3,7 @@ FROM golang:latest
 EXPOSE 3000
 
 ENV GOPROXY=https://proxy.golang.org
-ENV GO111MODULE=ON
+ENV GO111MODULE=on
 
 RUN go version
 
@@ -33,10 +33,12 @@ RUN npm install -g --no-progress yarn \
 RUN curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.24.0
 
 # Pulling docker binary from releases
-RUN wget https://github.com/gobuffalo/buffalo/releases/download/v0.16.3/buffalo_0.16.3_Linux_x86_64.tar.gz \
-    && tar -xzf buffalo_0.16.3_Linux_x86_64.tar.gz \
+RUN wget https://github.com/gobuffalo/buffalo/releases/latest/download/buffalo_Linux_x86_64.tar.gz \
+    && tar -xzf buffalo_Linux_x86_64.tar.gz \
     && mv buffalo $(go env GOPATH)/bin/buffalo
 
+RUN buffalo plugins install github.com/gobuffalo/buffalo-pop/v2
 RUN buffalo version
 
-WORKDIR $GOPATH/src
+RUN mkdir /src
+WORKDIR /src
diff --git a/Dockerfile.slim.build b/Dockerfile.slim.build
index 4d019a00..3d3f3d98 100644
--- a/Dockerfile.slim.build
+++ b/Dockerfile.slim.build
@@ -2,9 +2,8 @@ FROM golang:alpine
 EXPOSE 3000
 
 ENV GOPROXY=https://proxy.golang.org
-ENV GO111MODULE=ON
+ENV GO111MODULE=on
 
-ENV BP=$GOPATH/src/github.com/gobuffalo/buffalo
 ENV GOPROXY=https://proxy.golang.org 
 
 RUN apk add --no-cache --upgrade apk-tools \
@@ -20,10 +19,12 @@ RUN npm i -g --no-progress yarn \
     && yarn config set yarn-offline-mirror-pruning true
 
 # Pulling docker binary from releases
-RUN wget https://github.com/gobuffalo/buffalo/releases/download/v0.16.3/buffalo_0.16.3_Linux_x86_64.tar.gz \
-    && tar -xzf buffalo_0.16.3_Linux_x86_64.tar.gz \
+RUN wget https://github.com/gobuffalo/buffalo/releases/latest/download/buffalo_Linux_x86_64.tar.gz \
+    && tar -xzf buffalo_Linux_x86_64.tar.gz \
     && mv buffalo $(go env GOPATH)/bin/buffalo
 
+RUN buffalo plugins install github.com/gobuffalo/buffalo-pop/v2
 RUN buffalo version
 
-WORKDIR $GOPATH/src
+RUN mkdir /src
+WORKDIR /src
diff --git a/buffalo/cmd/new.go b/buffalo/cmd/new.go
index d1cedcad..b8573bc8 100644
--- a/buffalo/cmd/new.go
+++ b/buffalo/cmd/new.go
@@ -273,7 +273,7 @@ func init() {
 	newCmd.Flags().Bool("skip-yarn", false, "use npm instead of yarn for frontend dependencies management")
 	newCmd.Flags().String("db-type", "postgres", fmt.Sprintf("specify the type of database you want to use [%s]", strings.Join(pop.AvailableDialects, ", ")))
 	newCmd.Flags().String("docker", "multi", "specify the type of Docker file to generate [none, multi, standard]")
-	newCmd.Flags().String("ci-provider", "none", "specify the type of ci file you would like buffalo to generate [none, travis, gitlab-ci]")
+	newCmd.Flags().String("ci-provider", "none", "specify the type of ci file you would like buffalo to generate [none, travis, gitlab-ci, circleci]")
 	newCmd.Flags().String("vcs", "git", "specify the Version control system you would like to use [none, git, bzr]")
 	newCmd.Flags().String("module", "", "specify the root module (package) name. [defaults to 'automatic']")
 	viper.BindPFlags(newCmd.Flags())
diff --git a/genny/ci/ci.go b/genny/ci/ci.go
index d47e2a74..736d8b55 100644
--- a/genny/ci/ci.go
+++ b/genny/ci/ci.go
@@ -9,7 +9,7 @@ import (
 	"github.com/gobuffalo/packr/v2"
 )
 
-// New generator for adding travis or gitlab
+// New generator for adding travis, gitlab, or circleci
 func New(opts *Options) (*genny.Generator, error) {
 	g := genny.New()
 
@@ -32,6 +32,8 @@ func New(opts *Options) (*genny.Generator, error) {
 		} else {
 			fname = "-dot-gitlab-ci-no-pop.yml.tmpl"
 		}
+	case "circleci":
+		fname = "-dot-circleci/config.yml.tmpl"
 	default:
 		return g, fmt.Errorf("could not find a template for %s", opts.Provider)
 	}
diff --git a/genny/ci/options.go b/genny/ci/options.go
index 96417c97..e809df0a 100644
--- a/genny/ci/options.go
+++ b/genny/ci/options.go
@@ -11,7 +11,7 @@ import (
 )
 
 // Available CI implementations
-var Available = []string{"travis", "gitlab"}
+var Available = []string{"travis", "gitlab", "circleci"}
 
 // Options for CI
 type Options struct {
diff --git a/genny/ci/templates/-dot-circleci/config.yml.tmpl b/genny/ci/templates/-dot-circleci/config.yml.tmpl
new file mode 100644
index 00000000..708bd6dd
--- /dev/null
+++ b/genny/ci/templates/-dot-circleci/config.yml.tmpl
@@ -0,0 +1,45 @@
+version: 2
+jobs: 
+  build:
+    docker:
+      - image: circleci/golang:1.12
+      {{ if eq .opts.DBType "postgres" -}}
+      - image: circleci/postgres:9.6-alpine
+        environment:
+          POSTGRES_USER: postgres
+          POSTGRES_DB: {{.opts.App.Name.File}}_test
+      {{- end }}
+
+    environment:
+      TEST_RESULTS: /tmp/test-results
+
+    steps:
+      - checkout
+      - run: mkdir -p $TEST_RESULTS
+
+      - restore_cache:
+          keys:
+            - v1-pkg-cache
+
+      - run: go get github.com/jstemmer/go-junit-report
+
+      - run: go get github.com/gobuffalo/buffalo/buffalo
+      - run: go mod download
+
+      - run:
+          name: Run unit tests
+          command: |
+            trap "go-junit-report <${TEST_RESULTS}/go-test.out > ${TEST_RESULTS}/go-test-report.xml" EXIT
+            buffalo test | tee ${TEST_RESULTS}/go-test.out
+
+      - save_cache:
+          key: v1-pkg-cache
+          paths:
+            - "/go/pkg"
+
+      - store_artifacts:
+          path: /tmp/test-results
+          destination: raw-test-output
+
+      - store_test_results:
+          path: /tmp/test-results
diff --git a/genny/ci/templates/-dot-gitlab-ci-no-pop.yml.tmpl b/genny/ci/templates/-dot-gitlab-ci-no-pop.yml.tmpl
index e5bd670d..35736fd3 100644
--- a/genny/ci/templates/-dot-gitlab-ci-no-pop.yml.tmpl
+++ b/genny/ci/templates/-dot-gitlab-ci-no-pop.yml.tmpl
@@ -3,7 +3,7 @@ before_script:
   - cd /go/src/{{.opts.App.PackagePkg}}
   - mkdir -p public/assets
   - go get -u github.com/gobuffalo/buffalo/buffalo
-  - go get -t -v ./...
+  - go mod download
   - export PATH="$PATH:$GOPATH/bin"
 
 stages:
diff --git a/genny/ci/templates/-dot-gitlab-ci.yml.tmpl b/genny/ci/templates/-dot-gitlab-ci.yml.tmpl
index 0086a47d..aa355cb0 100644
--- a/genny/ci/templates/-dot-gitlab-ci.yml.tmpl
+++ b/genny/ci/templates/-dot-gitlab-ci.yml.tmpl
@@ -8,7 +8,7 @@ before_script:
   - cd /go/src/{{.opts.App.PackagePkg}}
   - mkdir -p public/assets
   - go get -u github.com/gobuffalo/buffalo/buffalo
-  - go get -t -v ./...
+  - go mod download
   - export PATH="$PATH:$GOPATH/bin"
 
 stages:
diff --git a/genny/ci/templates/-dot-travis.yml.tmpl b/genny/ci/templates/-dot-travis.yml.tmpl
index 8b7eb933..b6fd4e70 100644
--- a/genny/ci/templates/-dot-travis.yml.tmpl
+++ b/genny/ci/templates/-dot-travis.yml.tmpl
@@ -21,6 +21,6 @@ go_import_path: {{.opts.App.PackagePkg}}
 
 install:
   - go get github.com/gobuffalo/buffalo/buffalo
-  - go get $(go list ./... | grep -v /vendor/)
+  - go mod download
 
 script: buffalo test
diff --git a/genny/docker/templates/multi/Dockerfile.tmpl b/genny/docker/templates/multi/Dockerfile.tmpl
index d2f20a18..a1610a71 100644
--- a/genny/docker/templates/multi/Dockerfile.tmpl
+++ b/genny/docker/templates/multi/Dockerfile.tmpl
@@ -5,8 +5,8 @@ FROM gobuffalo/buffalo:{{.opts.Version}} as builder
 ENV GO111MODULE on
 ENV GOPROXY http://proxy.golang.org
 
-RUN mkdir -p $GOPATH/src/{{.opts.App.PackagePkg}}
-WORKDIR $GOPATH/src/{{.opts.App.PackagePkg}}
+RUN mkdir -p /src/{{.opts.App.PackagePkg}}
+WORKDIR /src/{{.opts.App.PackagePkg}}
 
 {{if .opts.App.WithWebpack -}}
 # this will cache the npm install step, unless package.json changes
diff --git a/genny/docker/templates/standard/Dockerfile.tmpl b/genny/docker/templates/standard/Dockerfile.tmpl
index 760dc89c..4c2e9050 100644
--- a/genny/docker/templates/standard/Dockerfile.tmpl
+++ b/genny/docker/templates/standard/Dockerfile.tmpl
@@ -3,8 +3,8 @@ FROM gobuffalo/buffalo:{{.opts.Version}}
 ENV GO111MODULE on
 ENV GOPROXY http://proxy.golang.org
 
-RUN mkdir -p $GOPATH/src/{{.opts.App.PackagePkg}}
-WORKDIR $GOPATH/src/{{.opts.App.PackagePkg}}
+RUN mkdir -p /src/{{.opts.App.PackagePkg}}
+WORKDIR /src/{{.opts.App.PackagePkg}}
 
 {{if .opts.App.AsWeb -}}
 {{if .opts.App.WithWebpack -}}
diff --git a/go.mod b/go.mod
index 77761230..c0a933c6 100644
--- a/go.mod
+++ b/go.mod
@@ -25,6 +25,7 @@ require (
 	github.com/gobuffalo/pop/v5 v5.0.11
 	github.com/gobuffalo/tags/v3 v3.1.0
 	github.com/google/go-cmp v0.4.0
+	github.com/gorilla/handlers v1.4.2
 	github.com/gorilla/mux v1.7.4
 	github.com/gorilla/sessions v1.2.0
 	github.com/karrick/godirwalk v1.15.5
diff --git a/go.sum b/go.sum
index 6ddd68f2..3facfde0 100644
--- a/go.sum
+++ b/go.sum
@@ -609,6 +609,8 @@ github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE0
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
+github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg=
+github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
 github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
diff --git a/options.go b/options.go
index 04c8d34f..9959d68f 100644
--- a/options.go
+++ b/options.go
@@ -62,6 +62,11 @@ type Options struct {
 	// a Buffalo application.
 	PreWares []PreWare `json:"-"`
 
+	// CompressFiles enables gzip compression of static files served by ServeFiles using
+	// gorilla's CompressHandler (https://godoc.org/github.com/gorilla/handlers#CompressHandler).
+	// Default is "false".
+	CompressFiles bool `json:"compress_files"`
+
 	Prefix  string          `json:"prefix"`
 	Context context.Context `json:"-"`
 
diff --git a/packrd/packed-packr.go b/packrd/packed-packr.go
index d37f3fe7..5ec23ee1 100644
--- a/packrd/packed-packr.go
+++ b/packrd/packed-packr.go
@@ -14,13 +14,13 @@ var _ = func() error {
 	const gk = "4dcbdf8144bda526614a21c6047cc42a"
 	g := packr.New(gk, "")
 	hgr, err := resolver.NewHexGzip(map[string]string{
-		"02e9568ee200d1f95e13ba2235a3085a": "1f8b08000000000000ff9454c16edb3a10bceb2b064c60bc57801272281008e9c1a95df790c6aeadb4e849a0e4354d84161592321ab8faf74292e5c449d3a4a715863b332277c88c56c652ea72ab4a1f07bb1d875a81ee109ad2bb707499dc9704561ae7a525c750d701c0214acf257954e55278c260704054e1bcd01afc1e3deb4ef35c2b2a7cab4fdad11f4d36f7ee4eff9b434b39122f96bd802ec01da2ac527ae9104913399b47a7ff51be3660bb5d673e2ccb7026f25b2169762beb9ae117f2ca832fc12206be3afbbf55cb97078997a86ddfe676a92c7889b2cab4ca23e11c79d72e4983e6f77905a9fcbacac2dc6c2269b26ab512da444fea11c5836f11466118b630fd2c8df5980d93cf1fd86953e2d3c9b4a951a60a1604ce0b492e6e9b3d391f046153f85658176370f80e80adb04a64baeb0626d3747cfd2d066b7ad85b0301cca68b64321f2fd2d1657c7cbad76243e127a5a9aed307d137a500f8f263f1f52a1d0d93e1e570317e55f981329f4e9374365c2cbe4fe7a318cc1ad33bf7110192f1223988a737f3abcea0d11a653756d7350b82134c8c1685c496ac53a640be362a27ac49976483b072c465dbc1d546488a31780469d19e3fb05febe0780fbfc63ee3e7cfa867e1791034ec666027f8b81685247803767111e3dd336fd6ac558ee0d7840ec2c4f4bb0980a7b4ceb4451f07a5cd548cfd761cd9adca9bd4bc1491e341f2eeaec6efff3efd67b9e28757a43fb3a319f60f57d7babf3add3ffe0e0000ffff943495a3db040000",
+		"02e9568ee200d1f95e13ba2235a3085a": "1f8b08000000000000ff9454c16edb3814bceb2b064c60ec2e4009392c1008e9c1a95df790c6aea5b4e849a0a46799082d2a24e53670f5ef8524cb8993a6494f4f18be9911f9864c69a50d253633b272a1b7db71c815e80ebeae9cf52797f17d456095b6ae3064199ac6033844e578410e75950b47188d0e882cad134a81df6360dd299e2949a5ebf44959faadc9e6dedea9bf73e82847e2653e08a812dc22486ba9728ba0d081355970fa0f656b0db6dbf5e6e3aaf21722bb15052d6e8ba661f889ac76e03958c0c05767ff766a597e907889daf56d6e7369c02b5475aa6416086bc9d96ea9d0687f9fd728a45bd7a99fe94d50e8b45ead84d2c1933a50363a47aebf974a8bbcc3e847a58dc3621c7f7cc74edb129ecee66d0d525932cfb34e1464c3aed991759ee7b7856f85b12146876f0fd80a2345aafa6e60364fa6d75f42b0b687bd350dc0621ec5b3e5344a2697e1f1d15e8b0df91fa4a2a6491e44df1401e0d3b7e8f3553219c7e3cb71347d55f981b29ccfe364318ea2aff3e52404335a0fce433e80781ac507f1e46679d51bb45a93f4c6a8a6619e77829956a22cb02563a52e91adb5cc086b521519cfaf2df1a2ebe072230a0a317a0429d19d3fb05febe1700fbfc63ee3e7cfa867feb9e7b5ec76602778bf166541701aece222c47fcfbc59bb565b825b137a08333decc6039ed27ad30e7d1c942e5321f6dbb164b6326b53f352448e07c9fb8b1afeffe7e93fcb153f3c21c3991dcd7078b5fad6fdbde9fff157000000ffff99f35612d8040000",
 		"04485932d90f92b1f6d01ac655f3b3d2": "1f8b08000000000000ffa4935b4cd3671887ff26de6d59d8922d9b2eb33aa6558aadd406e3d45a40c64108300373ba1a8452a0500e838156401ca70844c7383928c7164a2dd0ca414e15778893a51048c620dbc230195bb22cc8b8a63c0b2064f77b9237bf2f5fbee77baf7e82b04bd82578786ca44848dc2d086f0882201604c143100491b075bfc96e4178eda5add98617acadb937f3f9f3659a4d7da87515f845e57136328f8bdadb7cf9958da53ffedc79bbbebebeade2766f9dedfde3f886e4f2e6891cde3e654074c680e8d475f61ccfe6755926126526f75a1cb0beb6e96fccb65b5963c1439c88e7f9124ec616732cbe0ec9d53abce38d48a38bf009c9c033a89457c449a4196a5ffcb1b5bfbbcfc9ab122d074f5fc753994de0d57c62efd850dfed475d35486c652767626f7128bc0cb1d2c0cbe238caab4c9beef2df7fa1d21bf1d2b4228b337230b21275452fe9ed8f894a2f223aa7820cf3d7846519d92bcfe4685809b24bb5482e55323bf70b2d3d4ec4da0e14993dc8756df8e5b4139e5e8ad7c9300e78fb73c05b85541941f8a795f86aeea248ef24a0681c454e3f85f71cc4df6cc24b67c3476f45a16be1d4875af61c3cc33b9200ce4705e11f1acc5b87fcd92f0d40f5710e87833fc7d3ff069ee70af8405d4a68463d47d3ecc8d36c48350dec93a808bb10c4a0ed0263c3597cebd4d1d61081af4ac561df18fc937bf152d72055d713a83111906e449a6a439e66c53bae91d331494c4d14b3f49b93d68e62ec0faa595eeaa3c79ec989c81b84660fe095d080546f2144dfcdfb294dc852adc8f55d48932d4414753038d2c4946b9edfe7ef303f6361c6354daba39ae8422731d726507e3688a2e009970d03f8c455732cb50b9f940e8e6adbf0cbed22bfc5ccf0680521091a92f232187df405ba9a2e0c75e32494b8f8e4d614970b2729ab1b22bfda8a58d3caf1e4667c7466e4574a286fba4f424115fb4e46f3eed98b14d69ac82a6f446d3061ec71d1f77896fc2a3b13ae196e37f6225237234bb17248634671a58ce8f85444de4a8e28cef19e4cc511df603e4acce2669505ebc8240ee7534cf7fb8175565756d116d713985c4a446e2389e5163a1f0c11a54e65efe1b3ec97faa1bf5648f7c8180ee7389d030fa96e32b3b2f2cf4e7fa6e77e64e1d90293ae27d807da714d7fc7af8b0b34771ae91f3633fbf337fc30fd90c1d12e0686fa585d5dddf4fedba1ed362e3e5be4d1b883a1e1562626cc3cfddec4d8580b63ce1ee6e67ec2ed76efb81b08ff937f030000ffff6ddbe2317e040000",
 		"06a6a4ca9e718a10ee1efef1c2e49b52": "1f8b08000000000000ff8c57df6fdb36107ef75f71130258ca6409d8a30aaf0f59500c68936eebd607db4868e964d39649954729716dffef03454a967f645d1e2c9bbcefbbe3dde93b269582347cc579c9d2358c41e1b78a2bf4bd17bbe405ef06d6e64321e77d834521e7c7dd3b596e1dcbe7a25a70d1374d65b91d39c251d96c1f919fb8e07744f7af5ab1545f82375cf0514a34426b7149c004cf91ae405b971b677101bd2b9089c739c90235de2d2bb1a66bf8d4988da4b31ba58de191e50b2a4275e95e37eb6f1efc23aff14f2c24cbde8ebce035aac6a60777f8548a9c2f2ac5b4543086dd000085561c2981bc12a9e652f8815906a8996a379da9f9636559f09419c304266e116018c54266f8b491595520c5ab6f15aaeda85a514c2a8d15e305452b1a867d0423424d714a14f768234ae96838b35f0e83e6611a2aa2ad487daf83dfc6b7d1ad1744b954f72c5dfabe097a1bc0f8d72e689e835d85f178fc23cf41070350a82b25dc4f170340811ad6b88571939f6da4b02c588a7eec4fa3a9e39ec63ea974bfa27d4ab45fc8601a07fb69e46b326b3461e9ccaec78b1086c3a08bd45fe33622cd94a6af5c2f7defc90b60bf073fbec4dec43c883492eece3c869c15843f3e03cffdb6ba93356e67062aaaa2e8234ff761d23899fd80b80f8aca8a962e365b46fbb0c8d6740070080ddcb62bf96d0ca603dd9a71ef1c087c69c527faac64cd33b42f83bfbb49c0b39de785ab3fccf3b87008c21ec13505f177392f50b00d26e04dcc73164d5229340abd64b49c4529d119cf8586f9935daee42681ae41bd50cb043cef300b616764ed6fb19119cf396609685561c817422a4c60e29986bcbdf542f056ed17f3fadcde7a333875dc66e0a36419aac7d2f42fb5e730fab7e1dfd1f16738af1689ed8cb3349ce8a04dc0834d402b80d18aa4383ff5a506fab6b2b377837e855df5ba0a5b7970d1f625c755dcc1da1654464bfa3273ec4d00d3f709c4d3c8bd103771d8dbad08fb40f377ade651d1e42f3c31dc815d4dc01464647f7821c836ee1dc94aa5f8899536c387c39b04c4fe27438fe0f88af57877c7036b7a7d7f1387f68c9eeef1e36b5a54192670aac6d7695696a60b75cee658745c6f50bd1192ff22f37c6f3e7ed96b9defa95e04fef47d3d9e663f4fa3f62330fe6cd495ea5c5d6744a9ff93c0b46acb702d2837172385248b1afd56070287c7d75252cbf0deaac54fa78b376f84b690c7ec2f64b944b5ea6ad0d671e6c656dbf9f38a17d95d337e2f476d1cc3c3e397fb047ecf612b2b600a61c96a2e16c0892a2478e17a097ac90984d43047b345a8c12b952c51155b2f840d5b634b47954243a5e0c3e3d3fdc33fc0a9b16fcd81113ccfab3c6785b4b13d83ac51299e21c1c3e36ff706d5b235de5f964c638de78c5a8254e065586321cb0d0aed450dcede3850d430366e53248a50d4514b6e86da09cc4987517d7b4fe95d3b36d2b4228a3aec8d996d7272a189dc3cf13bad92952e2b9dc03561b78abe222f8492e96502cf37bba7a78c2bb37f88cb6a5ef0d449f873d7074ed0ce1c77832b3c865b15786675227e475bd7a0497ff0be6a14649562328c340d431836d7a7e621c570d68d5d380e5f3bd3ebe692739259085a6e1b501bb09dcf46d1cf2f96fe8e95258aecaf54f1527f610b275341d045dd28b5e5eb0761cb6eefb1306ec645ffb2ebb791588b6e141c0f9fca4da990cc5aeff5db30b1284e9204b0462c9f72532fb2e15dd3cdae077ac0546e4c5ec8cdc4f012d77d71ff41dc5d431c82eec826a946dc37fc7b7395ecb7ae1bc62a81893df4ac9faff3441e0687c1c0b64a64e4486973f93969a49e96f8c1e0df000000ffffb1c5bb578f0d0000",
 		"09debad446adbbaa70992811a3b479d2": "1f8b08000000000000ff72c8cc2dc82f2a5150aa4bcacf2f292e294a2cd02f4e2e2ed68773f5405c256b2e844a87b4fca292c4f2d4e2fcdc54fdb4fc3c185b37ad2835551fa4393127472f37334f0fa213a135a9342d2d31275fc99a0b100000ffff04baf43578000000",
 		"0ac9c97b14565a81e81adc4ef482ff28": "1f8b08000000000000ff7c94c1ab1b3710c6cfd55f31cf2ea4599c7d4e7b28bc4b49531a7269030998107a186bc796b0ac11d2c8db25e47f2fa3f53a79f491e38ad137bfef9bd1ae6147c1f29940187eaf870306be33e683c37882892b1c388375ccc5c7e352d00e27ae1946dac340170a9cce140522d1507a633e7f067f809e9394fe554afdce8b7bc7095e7cf962d66bf80305f75808de93d464cc5b81c07c2a10fc895a5bebb834a6420235cddd30a5e02d8ae708b501210c57a93bf813a360116f1b3fc1c1e722204eeb5452d9547160f005385154617104ab45a49fce6105071f08300e408317f0a297aad23802cb399315fdce11cf543690b09491f35036e0b848d90089edfb1ec4a1006652eecc297b14fa1a1dc58bcf1c35b6de988f5c61f4210086c237d4339e084acd346b75ddc4b5eba00866b9f7b10886d0b01603c08759dd3af696fadbc4ba6ee4f84cba0e966b6ab009a9c32b556fcc7abd86d79914f5a30a2da32ac6fc7dda4061ad7b76a1168e527e27bf264fc34cb4d46c20f278e3b218c1ceedbef551c0c7d97313bbe23d18f3c38fb0bf5e4d9c96ab2f50578ee2d0164c37ecbdb6d6c9abeaabaf7b63ccd2b9389f0a8c5e1c20583e9f95b8b56c731851acfbffda691156e1338ab718c20499f6d5873988370c7b1f314f735d9c004b2129b77ce143dbbfd626d738a7b7181ae8b25a481e5b1de862ccdb365a48eca3cc60fbcc63a1ac9bf2c989a487fbfb973fffda6ffb6dfff2e197ed76fbcf4f4f1e3f6f42c5710d03142240583df11b5841c223f5c674dd6b8ec78c52434ba1dc759d6e479ba4c30bcd384bb28f9e696a51e41aa38fc7b65fb053f77fd1bff29b313b824cea5987a7548e70d0b9f1e5b1b1235fc3e83ddf6c7d7bf87c6e44174f63fb3584a0af41133eea96c0c0b6ea6b9bc1c451566f6f980708d59eee8cf9f48e47ca34c07e5acc3cddcafc170000ffff90de672137050000",
 		"1766fb2f5a37b14997d2efd7a94119b8": "1f8b08000000000000ff7c52cd8a1b3d10bcfb29fa1318fc416686dc72900cf9bb267b302c3985b6a667d56b8d24a4f62c8ef1bb87b16cafc3929c24d155d5adaad6ff7df9fe79f3e3e12b3819fd7aa1eb01a01d613f5f00f44882107024a326a69714b328b031080531ea857b71a6a7892d35e7c73be0c0c2e89b62d19379afee85acc35c488cdacbd07cb89684c5d3fad37e18d04768e07884362629edc794da6f3852bb9911fc8be074d25d852f008ec706788010e50effc8e21e699bd0eee074aa0d96068a1c3c1547241b7c5aa96d6dd6da52d4ffb0bcaa51e8ff41c2943c5b148ee19ef8a74bb6e4a1499871bcf309f7e228085b96c34f893b0a0ababf702fe51b771ee42d1f96eb5709cf610799bc516c6350e0320d176229240f286ea578c4272add80d30c6ad9c6f307ce21e8ee1ab9dec6feb05e54dd9e27b01e4b316a1e073950be84560d4a98e7ac576af0585c3b2fd0ab2b157260f2fdcda8aee7e9aabe34f08c13169b39bd35f8f9e6afeeea4cbaab0bfa3b0000ffff85cad3beb8020000",
-		"1a498e3f79e792cf588697578944bc27": "1f8b08000000000000ff8c534d6fdb3810bdf3570ce205f6b2921dec2d8b1cbc919b16ad23c36de2e45450e458624dcd1024d5c430fcdf0bcab2dd362d50e8406ade7cbcf748be599673a8b9ead66b69793cac57bb5dce2e86fc017d304cfbbd10b3bb07b82d2f2f2fe76571ff61064c4368b12c1f9fa089d15d8dc7cef3cb36afd94aaa73f6b510cbfb3b6837da78c81cfc755b2ea69fde8e8357e3e38ca973f942aa8dac71b1a9f77bb12a97ef8b77cb3f4b16bb9d59c3199c86155690edf73f032b139b15564eaa4d0f8f203626c0b3b11694540d426c10c8b5602844692d8488ee1fe8c86208e00e43f32f81095423a9c620a645f12390ff6aea93f4d48f4ce95be929b7ac3690f7d6a4ffd3c42c23ce9ce7da630862b7431bb0af4c99df537b95487ad0fc7a274670c36edbcbbb6598b3ee2c06682599358618c44db978829af396f5b09c42a16b87458c069734ba0015aed923549db1da500d92342876dbb40fdc798510186223233c2368a6bf2310a286c8e031d3fc4c96a50619a0ed5423467d8763c9d06170792837f4555aa36544e0cec3b1056ab0728bbeb7a86648228e98e81dcf07a787bb7d200d5916a28c4641c630ae0c8da573c9aa7b52dcb648b1a7da516f5b6548fa2d18820be759772a1aa68b340bafc4080eefe0f3eceee1fa0ca766ff1bd27d03e95cea37c9fb2f0935119424a8100222c1da730bdcc560f4e1222aa6280da1ef5fd9b42896d743b510b3c745f97106ff4e2693df526e4ded65e2713a2cdf11a5f3390b4adc6fe6c549ff5084ff9d1d4930bea03a47be050000ffff8f7034c132040000",
+		"1a498e3f79e792cf588697578944bc27": "1f8b08000000000000ff8453c16e133110bdfb2b46cd810bbb49c5ada887d00d158274a3a036ed0979edc9ae8977c6b2bdb451947f47de6c12a02094831dbf9937ef3d7b3f2ecb39d45c75ebb5b43c1ed6abdd2e671743fe803e18a6fd5e88d9dd03dc96979797f3b2b8ff3203a6e168b12c1f9fa089d15d8dc7cef3cb36afd94aaa73f6b510cbfb3b6837da78c81c8c8357e323f9d4b97c21d546d6b8d8d4fbbd5895cbcfc5a7e57faac46e67d67006a761851564fbfd9fc0cac4668595936ad3c323888d09f06cac05255583101b04722d180a515a0b21a27b0b1d590c01dc6168fe3d30816a24d518c4b4287e07f2bf4d7d929efa91a97c2b3de596d506f23e8cf4ff3431cb8833e7b9f61882d8edd006ec3b53e5afd25e15921e3cbfde8911dcb0dbf6f66e19e6ac3b8b015a49668d210671532e9ea0e6bc653d2ca7a3d0b5c32246434a1a5d800ad7ec11aace586da806491a14bb6dda07eebc42080cb191119e1134d39b0884a8213278cc343f9365a94106683bd58851cf706c191886948776433fa4355a4604ee3c1c295083955bf47d4435433271c4449f783e243dbce68368c8b21065340a32867165682c9d4b51dd93e2b6458abdd48efad82a43d26fc1105c38cfba53d1305da4597825467078f9df66770fd76738917d30a47b02e95ce29be4fd2f1935119424a8100222c1da730bdcc560f4e1212aa6280da1efbfab69512caf876e21668f8bf2eb0cde4d26937f4a6e4ded65d271ba2cdf11a5fb391b4ada6fe6c5c9ffd084efcf8924185f509d4f7e060000ffff7cd3d84624040000",
 		"1ad33d32c175564c3b3ccb60ccc718c9": "1f8b08000000000000ff9456dd6ee3bc11bdf7534c75651b36857e57858b2c90cd269b02de2488bcbb058a2261a4914d84e2b02465c50dfceec590926307c86ebf8bc00a393c73e687676865f92cd708b20c8a8c1f8d5463c905188f00b2b50a9bf64994d4e46b7a6aeb5a6acad16c77d987bbfd2f1bd4e44af45e7f60d974f3c182adad74b2d1b45ea3fbf8c091d17b0aad71a43556b9c7b275988d4600afafa06a10648317e7d68a9f2a6ceec8c27ecf875f5fdf76be5185dadf3daff7fbdfc636b764f3ed1f39ff58b24d972557682a98eff7ecb8f4aefe380adee533eaaf7f331f5bf1eec75cb86e2edffe918d26a3519ec3e5cd0f501e5a8f1504820d6a0bbe53a1dc80c71094597b7892bc4b06ba0d3a84b0413e29add5aa945c7e46784265d6e05a23e00bd6b2d58157b30ab7a8c936684226465be9a2c733e06e105f318cb3afb70f97373fb2d9a9ed24da4a6b61da53e77cc7c5154c3946b172d2782d03b918c9b9b5ec3171945a83a336a007692a68545569eca443ee2ee811f994df50ab2b7842a8b056062b01ab8df28c14360806dd16a14413d001d5b0a3d6bd0b5e8cf29c97eea9e574cd8e9ccd60eda8b57e06184a210430810a4b2d1d56b0babd83f927f872fbf3863192df06a5f1dc7d3b6a415615c863f281e0515afb0853590774d31e8c332f1922ba9b41d8c890bea1535ac3cded0a36728b69c3607784c9f12278d9c4a272d8ae450ed5a1a7d69503e118ab07e9a143ad87a0ff11406a4f3ded083fa4dd21941b2c9fb102656232c955e8f86b77928818fc63c199be521afd23b3907071bebab89e9f2f970971069e4085a160527772c75dc787ad962556a0a50f83af78e684fa8cb9ab9032621d6ed10c6419e350969859360c0406b7e8b8394ac91a2146756b4aeeb4f1e4a42fe195af651dfbf5ec0c8cd27105d2c2d06fe206bbf1f07d6b23ab64067069b60bbe1ab3feff02bd57646e64830bc81e8e3587d704676abf7ff0c92c4bc7f69351fce5dbd0066a64504c7c070e2be5b08c3115c572a026be7b1c47312d8ae578f2767a496b70f89f167d48028b019d8771ad74fce0f6df4dc409ce91c68abbe1cc32feff067ce728300fb996caf80017c5fd15c81064f9ec056c42b07e91e75dd709eaa4b782dc3a57a6c217613736bf70e4fdbc50011fee13bb872b726b74bb8731234d0637f7d8d0365e974a79f9a4b9f3953fe5cb6aca15e9c9fd52f323e84f27ad0794e5e6901b654042601d4a73500cb6508a1f52b738cec24b3611e3a9252b2ec8188c767f8a689c1549ed92977113a78ef8f2793219b8f310493324e216185a1ba5aff59818ea740d1627d8c73b8706e0cdaf97ab71966733b8a606afa5a9f4a18cbcfd765b9395f41e83ff4c2f13f6eea36ad6bc0db5a326de48db3e6955426a4472bb1140e4eb30b4ce30ea681f85fc9853baad9a64059a4aa97bd4190f27686d040e8739008ffd7344ac1e6751a64d95100627efc4342687123e4395e4e235197c918bf566a8bee451ac78bd2187a04c4dae89541787ee3d0c5ba1f8d5935754fa3c22aaff46d3a422a7a93f68c4b703c12bb6627de0a1872efe914b42b39ac595b3f81688ba12077bfccaa4b58b1481e7b12a443efc3799418666febdc8267f8f007f792756a20864c7e8dc2496e7509dd511aff1a42fd4a01cbf48310f847eb75720694099929af85a48398d83a766c9551e0c05b85eadee0a0119677491e7f8221bab915f32199c7d4aebfeddc6d1087df35f117a984e0d85e914d0c40b56144b112bc8b3fc6490c38aa0a2489ac13a048725350dc66b14872c58472fbbdfd43adafc1f7df2e123344f1df2a6ccbfea8e3eefc39bf8b85009ed74d414c5f2beafc5224d1e7e8f9d41661d556dbc3efd34298ae51d47728db242e717d048fb2f1ff8b5f1eff4f39afd737e45ae93aec26aceda4ed9a22f4fb667943df7caff020000ffffcc4ac5ca2c0c0000",
 		"242b39ad54264b3a991f6244cef7c7fe": "1f8b08000000000000ff2c8d4b6a03310c86f73a8536597a085d9ab647e8054a311a5be31864c9f8119adb974cbaf9d0e3e7fba9b5d0cda6c70d4a56eb9cc26192b80f0f0eefacc93a3814cb2f0e704863f07c0e6ded522238ccbd1ce765d6060ef7a2e0502d71a89696f0f3b50d1ac3458a3786a25156e214f877b28e627ad66dd99e64bdc3be8aa4d068defc297ded89851e1edfae571db017a5fe084a953dbe5f3e905adbbea8325e3edd998768b592a67008e5e1f1fb075869170ed1c4faf038fb6210cbff967d1d0789c15f000000ffff20a0099817010000",
 		"24acb3645d0c223724ce264b932033fd": "1f8b08000000000000ffb2c930b42b49cd2dc8492c492dd6cf4dcccc492d2ad6cf49accc2f2dd12bc8292dced0cb28c9cdb1d1cf30b4e3e2b251b555a8cc4ccd495150b5e302040000ffff448386763b000000",
@@ -34,12 +34,13 @@ var _ = func() error {
 		"3baa9872a06bb993286ec8aa69b4f41f": "1f8b08000000000000ff5490cf4ec3300c87ef3cc54f968640a2aae04ad20b4fe22d5e172d69a6381b428877476bba35bbe49f3ffbb3639cbf601758d5524edf343c01eddb2e852ebaeefd638e006663b14f192fc7374451e551f4157ec23eb01ef08b4de51a32ea381337bc851e651c2417cc6b774d3f623310720ab2c468cdab82a8635b0c30db73296942f93989a57aa1fb3021a9101c17ee9cd7e8ef520267cf5de0ad044b5f33d796058c9e78aad4c13b2793a592cf42c373f151f4d3f457e0a195beea9b597be72febffe0efd6fb7a5e9065fb0f0000ffff829b6c549e010000",
 		"42ef67a69104cc24dbb29e2ddffdf564": "1f8b08000000000000ffbc544f6b1b3f10bde7530c22fee14064c32f3db9eb2d213625d006d386dcb5d6d82ba295965939ae2bf4dd8bf68fbd9bbabeb5975d09cd8cde7b9a3789546fb0d6a2aae6ac3cf00f5064fc7f965e0124f95d7720b9325a19e499b6eb57967a3fb1a5ab265fad443df94c765786904cf3bb3aaf5771a3ad709cd43677754d80643407adccebb31d1bdc77859e4481936f58d91dad31849570f9f8e6167c5d66062c730632677849aa107460e1063c8c9a8a000f84c2213ce11e86c856644ba410da9b213439c954aab7f4aafd5d254e641a3bc8cda6fef2dcbe21b5ebcc924442d968e37214f29812375cf7587a0f24cc16e1ba84d91c1a4cf7ce5105bc85138338a80d98183579b04561cdf3a144600e7f38d60b4c5c9e7a1fa36a9d56a25a0bad7e2244d15d9ef6eaa191c7c46edff17779fa9fc9aaf2639714ff28644328b3f2707aa28d25180fc57c11f4202afcaecc56630837a00c9c8d58e91d091d42ff891247ddb2af4e71419e77121597358a571c1f4468b535bc50526a6469e4e3fdf5052e13ef63fda1ba21764b3275327d07a8aff1199d5b2cfdaccb9638469dac31f0c53bb0b5393c0c42568244f1b8086176fe498e441f1710ce194b998d65b7109b6006ec45e13e7a6cf4478028951b2268adf657d0ed051965b627804ba9dc6580ff5c41193b9ad82d30299ce005badc4a3603b6587e593e2f8f076b6b368a8a78724f0807bb836a47f8e9446e8195237bf88d5f3baf4edb539325d3ce5ffd29d77a3a99d6132c4eba5e1f4603f1351a87d48cb4d11c4ab15546384be376a5aca941b457ff0a0000ffffc89382642d060000",
 		"4334b0f46d779c32dd8a3ee235a4b42e": "1f8b08000000000000ff84565f6fdb38127fd7a718e8c9361c0ab8470329906bd3e60eae6354bee680a26818716c714b71b82465c730f4dd174349891d20bb4f92c8dffc9ff98d9cac7ecb1d82aca2261bb24c378e7c84490690ef74acdb27515153ece8a9dd6ea5a102edfe98bf7b3b3c19b0255f6108e61d6473b81a118c76d2cbc6d06e87fe7d8133d05b175aebc9185445c0aaf5986719c0e9047a0b825c0ce2c639f1a063bd26075dc7c2a7d3ebcd575268c2faf7aeebfe31b62b47aed8ffabe08723d71cf2de145a05575d97bd91f7a1a8c887f7d53e170143e0ec33a6221bd1c67874f87e1ece407936cdb2a280dbd577d001da800a22418dc64138e858d51030466d77019e24df9285438d1e21d6c892d239a32bc9f5670d4fa8ed0e7c6b057cc2ad6c4de4d35ce11e0db9066dcc45b6973e59bc066e07f105e324ff72ffeb76f53d9f5f62a7092b9d83d91000273cb97ce31cabee9d91c680a73662006915345a298307e991fb080651960a35b546c11382c2adb6a8046c6a1d5853ac112cfa3d428536a207dac2915aff264a9115051f7da396f3323f3336879da7d6853960ac8410c00e28ac8cf4a86073bf86ab0ff0e9fe61c53a7abb0d4a1bb8cf8ed482540ae4b9f391e0513af70833b98de86783324eb16415c9dc1c622d63ff0e076d0cacee3750cb3df617160f673a395e84209b543d0edbb7c8a17a0cd4fa6a7438c51a400638a03163d0ff89204da0c1eda47e4cbb47a86aac7ea3026d5332c92bf4fc76bc48440afeb1e44c7fd606c3237b21e1e3cde6e3ddd5cd72d96b9c4320d0712c98340779e4f662616764850a8c0c71b495642e5c9fb3ef3af619711ef768476759c74b5952661918092ceed173735492d94064dbd656dc6993e94503c229032e1a37e6f535586dd209f40763bf89151e26e3fbbd4b5ef530805bbb5ff00ccc87efb21fe23292c7058c232d56ad31a76e04ad3d3e488f61013f7e8e7a87b3512f53800f6298bdc954dc49ab0cfa5145f7c6e04a36b880fcd7399df199e0d274ddafc193bc17eba6597af2f8b5911a193567ea081e95f658a52496e572cc85f85fc049e2e9b25c4ea6afd24bda81c73f5b0cb1e76e8ce8034cb6daa4179eb7e3545ce839a36fb11e6596e9fb557189b1ef8741f9c07590183112fcb7bc5f5d683d23435132119d8d7af147209b8f6effed3e48c61fbc74015056f58b7d6d4142f4d2867e478a110b95f82e4d8b933c3ee75331993972e223598b09371d71dfb0a17d725de9209f0c0fb50e6f32c37b446c5ead4c9ab491c4a77f4fa7a3efbc60fafdd20b7eb9dd4cf2229fc31d353874098313c4636cbd655cd625b61d8bd88fd3787dc1554c06c3edd00cd282b615356925f40949a4b3e571d3012c45b8db6cd6a580bc8ed12d8a029f65e30cf2d2cae1fa437f1ede5c9cd1e7ab7d45186036b3146733409b5255964b913600f3f80589c3864051729a951db8632a6a1ace521b12c182f3f47c5cc0e8c1cb0e159aff630a4555281266481034e411b4dd926f929533d9777f358a9e635e87e4853dbebec4f69911a7d7b28c7f3e679049afed9266ca72f96da8c5a2671d5ebad7903b4faa4d9d320c76592ed71cc91d4a853e2ca091ee4788bc697ef68f53feffabcfe40fd22b54576b4f91f2c5509e3cb14a37cdbaecaf000000ffff4ca8780e120a0000",
-		"47cdc99cfd7800b23c57b35568e02598": "1f8b08000000000000ff8c535d6f2b35107df7af18dd20f1c2eea64208a9a848a50905419b28dcb6b74fc8b167774dbc33c61ff44651fe3bb2779380e04a5779f0c66766ceccf19919bcef4d001340c2906c345588b24358b0daa16f8d4590a4c1e39fc9780cf0fdcd04c1d5b7f5fc1b31833e4617ae9b46b30ab52e58ad7868903a43d8a480be4b4663bea8cc203b6c0a51e1a9b6c958dd881f37ab07e8789bda565a6ea6f3fa70a8d9c5503fa30f86e9780419a0a4a01762f9f80cf7abababab87d5e2e9d725304d57ebcdeac36b69ecba699ce78ffbba632ba9abd977426c9e1e61d869e3a172f0c5fd6a7dfbfea72678d59ce86e9dabd752ed6487eb5d773c8a97d5e697c5cf9bcf0b16878369e102be98d8bfe0d649b583ea7814338859f237632d28a97a84d823901bc05088d25a0811dd5790c86208e0c6daf51f8109542fa9c3206e178b7f03f5ffb1be4a4f853287efa5a7dab2da415d14c8ffcf8c55455c39cf9dc710c4e1803660c9cc91ff6ced3f81a44bdce54bcce08eddbe0c75cff0c03a590c3048322d8618c4dd6afd0a1dd703ebe9385f85344c87984dda687401b6d8b2c7f1e50d75c5928add3e7f074e5e210486d8cb086f089ae9cb0884a8213278ac34bf9165a9b37b86a47a312b154e29538549db29ddd05fd21a2d2302270fa712a8c1ca3dfa224cc790873861a2e85c4ffa4e1e1e9b862aef55340a2a86666ba891ce89d1f6d23a435872a4db81d47a54799c7f2b43ff294cc94aa18fa6354a460ce2ecd3c2204659abaaf53cdc4c5b7326873abfd413291e06a458944a545e6d6b48fa3d188277ceb34e2a1aa6777954bc16331877ecf7e5e3f3cd05cec57e30a44b815c3e32ccebf2cb3a9b084a126c11022241ee0838c560f4e87ec514a521f465836f178bcdcd942dc4f2c37af5db12be9ecfe79f6c79309d97b98fb3577c22caf6b80c947bbf7b585c141893f0bbcb8364183fa2badcfc1d0000ffffc85e53a620050000",
+		"47cdc99cfd7800b23c57b35568e02598": "1f8b08000000000000ff8453d16e2b35107df7578c6e1e7861775321845454a4d2842b046da240dbdb27e4d893dd21de19637be98da2fc3bb2779b80a04279f0c66766ceccf19919fcda51048aa0a11f5ca22a26dd222cc4ec31ecc82168b610f08f810246f8ee6682e0ea9b7afeb59a4197928fd74d63c5c4da16ac36d237c82d313643c4d00e64315f54d4eb169b425478aaed40ce36ea87cdea1e5ad90ebb9d76d24ce7f5f1588b4fb17ec21049f874021da1a460506af9f0041f57575757f7abc5e3cf4b109eaed69bd5a797d2d875d3f8209f0f752b4e735b4b6895da3c3e40bfb714a0f2d0c4609a379e5befebb5367bdde27adf9e4eea79b5f969f1e3e67fa2d4f1483bb880cf94ba67dc7a6df6509d4e6a06298bfc4ace81d1a643481d02fb1e8863d2ce414ce8bf84811dc6087eac5dff1e85c1749a5b8cea76b1f82750ff17eb8b0e5c2873f84107ae9d983dd465e6fcffcc58552c950fd2068c511d8fe82296cc1cf9f7d6fe15c8b6c45dbed40ceec41fca501f05eec50e0e23f49a6987314575b75abf402b752f763ace5771e8a743cd266d2cfa085bdc49c0f1ad89db624223fe90bfa30cc1204481d4e904af0856f88b048c68210904acacbcb2136db35ffac1746a562abca54c15266da774e23fb523ab13820c01de4aa005a70f188a30ad401ee20d5345e77ad27772edd8345479931219a8049a2d71a3bd57a3d1b5f3c45872b4df83b67654799c7fab63f71e6674653024da91d109a3ba183433a851d6aada05e96fa63d3993439d5fea918df43d722a4a0d5c5e6d4bacc30188e1830f62079348f8431e15afd50cc6adfa6df9f074738173b1ef896d2990cb2781795d7e59674a6034c316212232e48e408614c98eee37c2491363283b7bbb586c6ea66ca5969fd6ab5f96f0d57c3e7fb7e59edaa0731f67af848139dbe33250eefdee7e7151604cc26f2f0f9261fc8ce672f357000000ffffc5fa989b12050000",
 		"4e577aceb26efd4aa3e9ef3ab5ae5884": "1f8b08000000000000ff9c55df8be336107ef75f311504649a53ee36f4a1ee65e176cb9642f70877d7f6611b0ec5961d114b32929c0b2cf9dfcb48b2e3dcfe80f625966646df37f34933e978b9e78d00c5a5ce32a93a633dd00c80d4ca13fcb6a6095fe3d267218ea20c6b2f952019ae1ae977fd9695462d14b7fb2df7c22d1a2b6b1f7fc977418dd9f675cd5bb318beb6d7110ee02b90f7b31598ce3bb68ef9adf70dccae17fc7bf787d24ba35d74a3133db2061abc7f4bbf5b9b2e8747985dbf98014a601787ab9773ec4cb738fc14fc23f3bda9447b410ca7c8f22485df5001376631cd3fba9ea2e45956f7ba04a9a5a7393c667e0ec25a2856802ab135b74ed0b0fc7477bb5c2e7f9e47d46d2fdbea8b540201f30c30133cf8c30ab46ce1310300a895676b2bb56f3515d662d829034857c03e0b7f8330743084ddefba3678fc2f619d34ba98f0251352ce0301265080c7cd29cf4ea9187c63a118006e1b87c518c73ed8c66500076ec158d948cd5b34c1c3c6792b759301d4c6829ce3213c63b96e444488e5c83ab8562b206fde9064844bb415f0ae13baa203ec23023cbcdd9c02ae7b903fbe2b368cb13c9de6e914fa0ab949d6ad157c1fd6a7249aaca1159a625c8e29bc3b2785f6691239dec2db737eb176585d643a829f0bb80fba059315beb73a5197a84648f01de6e7be495feea00c04aff641c99d00a26463b917a408c8691778ce6f39461ee2fda6c80e5f4ebaf2101e833c777b3207e2c30f777b97e22f147a0fcb5180d634ec8e7bde52a28d07a14ddfecb0a05e09ed1d74dc3951813710b0f38934a1f43059d847f1edd6682f8e3e503c5c6df2a7b4d77035d29683ec217c596c26b8a9c722f2a75e0f90732847d427ed34ad24b553c4ab44cdfbd68f327c1d9b184728fbc398fd9afb1d2569d090fc97e7d09fe77c9675a823a9a4aa91ecd628c57575e64aef7efaea4b55b1cfbe921a426786e5d4617a3f7a4cefa72e4c7070096ba76262044af93f043c8db3e3f2d18573e314abe979a07ee44ab02fd2b782e630bb86c3309adc3f9acce162a2d13ccca6575a258eada13302ebd61cc75bec4c87cfef3e0448a36fcc91867f13b452c2bbae5083cf615bb0c5649fcf41853f11f6ebcd4b937ad4a5a6e48ecb36b643af9105ce5805cc107f32cbe37d6ccd91fdd9d1ff866e7bfd0af4291ba6c3bf010000ffff364833083b080000",
 		"50d3e266d6148ce655a2a7ff90ce1dd7": "1f8b08000000000000ffbc92414b03311085effb2b1e2b85f552a878743d78d793b7b2946967acc126914cc2e2bf9760060b2a56058f99f95ee6bd4cd66bdd49a0e4e2347581bc60447f8859111f303bde4bd6beeb80777099697b9069ea00c024c7e8477899e2dc0480e32ab85a8c28c5f11d79e1a1e9fb732caefbc6d9d5f78f4ee1b4b9c1d9ca806de4970a68f462dd5ab3fe2e0965e10d651b18e23c1c8f28cffc25f1d320c329de2ffecdfb37fb2a2ae917dbfa34e42da527dc5016b50eb1770123722a62a57d652f57edf8167973ea5ff8e373bc060000fffff48dcecee6020000",
 		"52cdf751a4adab526c64b817f123a6bf": "1f8b08000000000000ff748dc16ec3201044ef7cc58aa3a5d4698ffe19cb8131465d58044b94cfaf6afb5045f56ddebc817da2b6287922fb658ddbe0bedb64881274137fe398b1339193bcc6706422dd2ada26ec27fabcdf4de11e62de976b7c251c33e4e5c1f01369ed304441d6a4578a63be744ffcabf072dc3de6b2a8a21ee76f146a5cb58dc3300e3bdbdf342b9a7e04b167f5ce6f054b68e7f3d21f1cdd098a547851b43f7f67f19893f8ce68a3353f010000ffff524107ee51010000",
+		"543c89ec0b890fad904db35b155d0b21": "1f8b08000000000000ff8c535f6bdb30107ff7a7384c5f6dd33e0c26c660a5d9188c6dc42eec2d28f245516de934e99caea4feeec3499ad86dc2f6645bf7bbdf9f3b7983211a72026e92075a460109c0b2336d2d1200809a548361ff0e9081b152a30065826a519942532b9d16d7f9f5cd01b3dd825901fe869c3cc7fceeb67af208a9a7c83a604c21ebfb8b742f28f13e7f97c9d61b87072c00ba8d09e42c3a16c743809f3fcaeacb7c562eeecbd95cc00bc339c4ddad80ed76efeb93f7f9776931ff6c5aecfb0563e463820cd0d5d0f7497241b89a95d5623e2befbf55a58082ad2f06822c60ec5a8efbbec8e8e369746a8daaa18e8f07a173026c539b009987ab3167720261640ab85052ad719cbbc1a738fe1ec09bebcc373adb6193a98e26d0c8a00dafbb65aec8160f91d15a0c85a6eca1736670ef29f03f1b352dbbd54ab654bc7abe69b454434d8fae25594f6947c69db42860de39184cc030c7f1f614592b5d2de079129683f490beb20e1faeb6e331f643b68130a78ee1235ca81ebaf33fb64d61f6eb6b35513a84db19836760c44b3c83ca2966949bf36b13d33d9d6a5ef2facd4ed34253e11b9d8e9877374206362ba978d231509cbb9027448d918d93bcfbe9837cdc4f803af613f33b89a1b43850fc8fcadf000000ffff09da42524d040000",
 		"567e2638f2c5d15d059defb14e4e463a": "1f8b08000000000000ff7c8ec14ac4301086ef7d8a217441c18d7a2d6d61d9931711ec0b24d9e95a4c9398996835e4dd655d1441e96d0efff77d933344e58e087580a603e90393dc3147826d2955ce308d802f5007b9f7f3ecddf01e1004e3c2e26bd16e3a18e5800bef22aa411d2f44ce7590f76a46f9a0c8283b7d6029e20a72f46fd4c0ed4db9844d7f72a3255ced68efedefcefe09cdb3f6cb7a273973dae1a1815159c2bfbdb3edce85c42baa1fcc1dbebffce7ac5a9d98bd0363155127343bd0ecb6948c412201d15bec04253d4f2cfa47f58aedf519e9abcf000000ffffdcd8bf6980010000",
-		"5d6f2ea1184b1653049f127764858779": "1f8b08000000000000ff84524d6bdc3010bdeb573c9425b40549ec2d98f4104ad99e9a3d945e83ac9d95c56a2da18fa590e6bf17c96e9a26949e9e791f339e678f740c891eb2492e968101027e86c8506375fe90a16c503919b57947660ae08f8f32c492e55d8c72afcd495bda9fecd313c74f985a200ee08a431cb7effb3473781ef1af68f79d4f07972022621dbd334ae74c2577c906582a1015d695a98ed284b3b261acc7a3f641bdc2bf2205e202a9a4949da61f31a482fdddb72f1ff9a6c1b0d9dd3754a39b3963b9684b79e9a1502e8cc906e2a2531e70fdfccc808b4e4e8f7e7103bbfb87cf5fbf0fe0cdc319bbc22e783d5b5c286517669829384398c8474a4cd64cc2768770676d69c0f50bcaebbe1d58b5851e56fa7fe9adb87913ddca1bc65ababdee153e4d7ab68412c06f6f077c78b39b37ad664299080b855df87d0d035ec796a59d7d59536f74c07ace9fffac35bc7eb145fc150000ffff696b81d58a020000",
+		"5d6f2ea1184b1653049f127764858779": "1f8b08000000000000ff84524d6bdc3010bdeb573c9425b40559ec2d98f4104ad99e9a3d945e832ccfca62b51e23c9db429aff5e243b69c852727ae67dcc789eddd181233d241bfd945b012884112a4177b30f7d8276ac53b47af381ecc0908f8f0d4f393577d3d4ec8d3d1a47fba37b7a92f8033b67a81e524ba8c3f6639d66fb9711ff8b56dfe9d8fb0835619abbe0ad3629514e55720c47196a86f37998bbc6f2493beee6c3c104d66ff03972e21e3dff1a039bbe72f47be298b1bffbf1edb3dc146837bbfb82baf3a3142265e3282d25644a5988a6803a9b985a5cbf3c0be06ca2375d58dcc0eefee1ebf79f2d64f14821aeb0e360468733c5e479841dd85bc24061a2289a399172d5a1fcc9386a71fd8a0aa66e07566da1db957e2fbd553717d16d7323444997d7bdc297c18c8e9019f2f6b6c5a78bddb2687322e481b050d8f1f33502781b5b9656f6754db5d116eb39ff7eb2d2f0fab916f16f000000ffffcf5a70eb87020000",
 		"5eb380c2ae8ca6e10dffc3b60fd4c68c": "1f8b08000000000000ff74903d6b342114856befafb8afc58b2e83032917b6d866cb14c942cae08ace4a6655f49a0fc2fcf7e038c51248a93ecf390793366f7ab2a80df9180a80bfa5980905304eb6900f1307607cf274ad1765e26d9ce2a53aa7e73836398fef0ffc2fa0544f968304a0af64f1b8963cb74b2c94ab21fc06b65b29d51f61017035183cdb42af778220dc6d83d45936af4f1ed0e68cfb03f69447fbd1a5174fd793ffa49a6d11c794841c70dddb10c17fc7f301b952a3db0c2e2530efd6ec7f070c7e6e8d8cd449939e85cd59025b00982eadfbff5d52e3fa71bffdead050d6f73dd52068405d242cf0130000ffff7b2fce9c7d010000",
 		"60b5ddeee92d1c5cda67c7a329b10b52": "1f8b08000000000000ff348d310ec2301004ebec2b4ea9628ae40594b4f006c7d8e604b9b30e1b8a287f478250ed6a34d2141fee3e47f2a1b2ca13e0a5a8551ad0f599ebadcd63d065ca3ab794fc43a7ff5a946bb41e0e787923a3c38f8c27c92c11484d02b1701d1cade88c8eb41be7f81ef67b29dfecba396cf8040000ffff2bd288128c000000",
 		"6573548b2fc0f0f412c4d11f61313305": "1f8b08000000000000ff7c904d6ac4300c85f73a854867914071f685aeba2cfd61e6041e47c984269651e4d26274f7629a0ecca62b49f0f4de27251f3efc44e883ce1c3780794d2c8a2d203691b4bfa8a606ea34cd7ac9671778ed273ee771f40bf77b6da003d0ef44588ae3a49b7bf52bb9236d9c2590d95f879b4a0e5a00715fbd8ac0004a41f171223c787c7844b763a119f43d9672f0eea432c7c90c071a7d5e14e7352db452545fb50ec61c03b69f55fd2f4a77ebd7862bd11347a52fed904458b0c20a699688c11d290e246d7d8b3ba9d7bcbd3ddfa3ec366d734d7de18116f72e9c48ccee6eb29aaefbbd96e260063f010000ffffc834eef185010000",
@@ -67,7 +68,7 @@ var _ = func() error {
 		"bf27d2dc0c63524e934bff393b6a81bf": "1f8b08000000000000ffb4525fabd330147fcfa738373048e09282e0cbb4f7c93b15748203c12749dbb4c6a5392149ebc6e87797a415953995827de99ffcceefdfa993f551760a2421ba77e8233002400d7634dd43f4da76213f773a7e1e2a51635f74580d6d2b0d16ad5175bc7decd015e3d33f9ccbfae88bf149423cdf94a05b60e862108f76d41e6daf6c84bb1268a34665d0a577cae1029b879b9cca8ee7990fa684e384b483ad415b1d1987cb2a29dd82f21eb625247af17608f1a022a32fdf7d7adc7fa0f74013e715dfe681f26779f2ae04ab4d564f97c14eec64948629ef3901987e724c001a8fee858cb292417dec0de3e96385a7e4209726f6ea2ba34be6addca674c98628289ffd567812af646054dbbc258d36882f012de58b8d70ff3d54c2eeb46d0e79dfbf1bc9034b0b7fcb32a701c8d4cb2f94fcbe57b2519e851993984ac83ae20dcae6f50f4de657e84d645a367d555e1e5dd95eb31089736ffea1b95fe1ffab35872e77b6f3d8af2eeb5b000000ffffd35ecdf2fc030000",
 		"c21d2243a9690d4f725d253a1eaae057": "1f8b08000000000000ff2a484cce4e4c4f55484c2ec9cccf2be602040000ffffe129fcc910000000",
 		"c5e5aa3411561d2c0c102809e446e220": "1f8b08000000000000ffa4935b4cd3671887ff26de6d59d8922d9b2eb33aa6558aadd406e3d45a40c64108300373ba1a8452a0500e838156401ca70844c7383928c7164a2dd0ca414e15778893a51048c620dbc230195bb22cc8b8a63c0b2064f77b9237bf2f5fbee77baf7e82b04bd82578786ca44848dc2d086f0882201604c143100491b075bfc96e4178eda5add98617acadb937f3f9f3659a4d7da87515f845e57136328f8bdadb7cf9958da53ffedc79bbbebebeade2766f9dedfde3f886e4f2e6891cde3e654074c680e8d475f61ccfe6755926126526f75a1cb0beb6e96fccb65b5963c1439c88e7f9124ec616732cbe0ec9d53abce38d48a38bf009c9c033a89457c449a4196a5ffcb1b5bfbbcfc9ab122d074f5fc753994de0d57c62efd850dfed475d35486c652767626f7128bc0cb1d2c0cbe238caab4c9beef2df7fa1d21bf1d2b4228b337230b21275452fe9ed8f894a2f223aa7820cf3d7846519d92bcfe4685809b24bb5482e55323bf70b2d3d4ec4da0e14993dc8756df8e5b4139e5e8ad7c9300e78fb73c05b85541941f8a795f86aeea248ef24a0681c454e3f85f71cc4df6cc24b67c3476f45a16be1d4875af61c3cc33b9200ce4705e11f1acc5b87fcd92f0d40f5710e87833fc7d3ff069ee70af8405d4a68463d47d3ecc8d36c48350dec93a808bb10c4a0ed0263c3597cebd4d1d61081af4ac561df18fc937bf152d72055d713a83111906e449a6a439e66c53bae91d331494c4d14b3f49b93d68e62ec0faa595eeaa3c79ec989c81b84660fe095d080546f2144dfcdfb294dc852adc8f55d48932d4414753038d2c4946b9edfe7ef303f6361c6354daba39ae8422731d726507e3688a2e009970d03f8c455732cb50b9f940e8e6adbf0cbed22bfc5ccf0680521091a92f232187df405ba9a2e0c75e32494b8f8e4d614970b2729ab1b22bfda8a58d3caf1e4667c7466e4574a286fba4f424115fb4e46f3eed98b14d69ac82a6f446d3061ec71d1f77896fc2a3b13ae196e37f6225237234bb17248634671a58ce8f85444de4a8e28cef19e4cc511df603e4acce2669505ebc8240ee7534cf7fb8175565756d116d713985c4a446e2389e5163a1f0c11a54e65efe1b3ec97faa1bf5648f7c8180ee7389d030fa96e32b3b2f2cf4e7fa6e77e64e1d90293ae27d807da714d7fc7af8b0b34771ae91f3633fbf337fc30fd90c1d12e0686fa585d5dddf4fedba1ed362e3e5be4d1b883a1e1562626cc3cfddec4d8580b63ce1ee6e67ec2ed76efb81b08ff937f030000ffff6ddbe2317e040000",
-		"c7c4ea3097c70c12789fa4422ab742fa": "1f8b08000000000000ff7c51416bf3300cbdfb578850e8f71de2d06bc60e2ddd466174a56b7b0d4ea2b8a64eecda4ad8c8fcdf479a6e743bec24d0d37b7a7ad2a291ad909882348c4993328018a2199fcdf85bc41836ddd87a7ac91ed6877b424f8cf53da80af00cdc58f27cb9d8bd5b84c81a4fd2a18f200e8179749d2ad08ffc2fecac59dfc7804d0921309663651c66be70ca527a81fe560e6194f3670d7101d3c2a120845290c88547e8fb9139b796af458dfc51690c211b8cdf4d21de7f3bb9f53148d6a75239882d4c76dbf961f59a2df6abe765b65c6d13dbe65a1589f01ec90f3165aab6c65166051dd31f3b37a23809899b931cce538d27a1f51881342091402a3ab6392f4c9d4893b75525b4497ed5dbf9c93f69402b4fc013ce397c80746821ee20e9b0298d4bfe33760d10ae7cb8fce9330000ffff3b543eacdd010000",
+		"c7c4ea3097c70c12789fa4422ab742fa": "1f8b08000000000000ff7c51cf6bc23014bee7af789481a7b678edd841711bc270e2d46b784d5f63306d6292ba8d92ff7dd4ead876d82990efc7fbdef734b6b243490548c39834050348219966d369f6913046ed79fc7a7ee58fabfd43201f18eb7b5035d009326383cf16f3eda72548acf1413af209a431324feeac04f9517fc34e9af57d0ad45610236325d5c611f7c2291b8a0bf4bf738ca39d3f6948054c84230c0415062cd113f4fda89c599badb0a1ec49698a910fc1ef2790eebe93fccc315836c74a39482ddc6d37b3fdf28dcf77cb97055f2c37b9ed4aad448ede53f0434d5c35d6b8c02d8643f16be61ac51125ad8f72584fb53ea0d66305d280a4005285435766c234b9346557d7a84dfee7bdf11b534165de5b6db062ecda125c497039c657000000ffffeab6a341c2010000",
 		"ccf670bbd1b940f77e6a33d18bed3b7e": "1f8b08000000000000ff348e314fc330148477ff8ac3ca9030383b12030b124b8580bd7ab8afa9456c07bfe7012cff77948a6e77a7d3ddb791ffa285415e434e624c885b2e8ad100565934a4c59add2c412ff5d3f91c67d1c2ea2f65be16ce3f73e1ef1a0a5b3399d650282d8c81f0f008f73f8cdecdb9268f9104f74fd7f0bd06e5091f2c7a6c6d70795371078aecde58722d9e7bbfa9636b18c8bd92785ac32fa3f771423300897ba6b08ef690152f715b3972523eddd9c9f41d87d3697fff0b0000ffffd638316cea000000",
 		"d258e202261ed56ac0a8449df027094c": "1f8b08000000000000ffaae65250502acecc4b2fcd492c52b252502ac8292d4acc51e2aae502040000ffff3f6c01c21b000000",
 		"d4f2890402006146d78d0aa8f8c5ba2a": "1f8b08000000000000ffb493516bdb301485dffd2b2e228516229bad7b328e47378751d8466065efb2a5d822d79291e48e4ce8bf0f3971da2cd9defae487cb3df73b47c70597cfd020b37645863dfd007d4ddf93320128bafb79c0a9542895a035ea66474aef533d389b7ed35c60ba317a102604a88463126d9175f76512155e696f5133478d6c3b37a90314372b40a9764ffa76d6fbce7a91fe64e633b36283a36118c286b9eef66e097e12ca81d44e41ed14956aab49b8030f370741804facd981d3c010e19cf18bd1e310c2f1308479e71584e0d29d81ccbe26020fe7336658ff588590ff75e848ff43aa164508e96305e11afd2f6694542d5942adf93e07b2e6d2453b9760d7d299f5df848d33d50a43964038738cf6c2759a931c48b5feba7e5a9f068d565b69fa38793002f67a043b1af1f1c55425ac337a7ff255645c3e97c9f193244931e2dc1094d6d136bed3d4412065e23d98c8028b01f2151cbc3c38672c8430350ce5e53a954ef430d4f4dddc3464b538ddb17dac077fe9322c863938db3094bf05845064d3d25160f8d79f109fc9fbc5ff52f6fe423fc4fe15d9708804659944ab42f168abc8462c933f010000ffffef62da7b98030000",
@@ -100,6 +101,7 @@ var _ = func() error {
 
 	func() {
 		b := packr.New("buffalo:genny:ci", "../ci/templates")
+		b.SetResolver("-dot-circleci/config.yml.tmpl", packr.Pointer{ForwardBox: gk, ForwardPath: "543c89ec0b890fad904db35b155d0b21"})
 		b.SetResolver("-dot-gitlab-ci-no-pop.yml.tmpl", packr.Pointer{ForwardBox: gk, ForwardPath: "5d6f2ea1184b1653049f127764858779"})
 		b.SetResolver("-dot-gitlab-ci.yml.tmpl", packr.Pointer{ForwardBox: gk, ForwardPath: "02e9568ee200d1f95e13ba2235a3085a"})
 		b.SetResolver("-dot-travis.yml.tmpl", packr.Pointer{ForwardBox: gk, ForwardPath: "c7c4ea3097c70c12789fa4422ab742fa"})
diff --git a/render/template_engine.go b/render/template_engine.go
index 65c39593..57ed5361 100644
--- a/render/template_engine.go
+++ b/render/template_engine.go
@@ -10,15 +10,7 @@ type TemplateEngine func(input string, data map[string]interface{}, helpers map[
 
 // GoTemplateEngine implements the TemplateEngine interface for using standard Go templates
 func GoTemplateEngine(input string, data map[string]interface{}, helpers map[string]interface{}) (string, error) {
-	// since go templates don't have the concept of an optional map argument like Plush does
-	// add this "null" map so it can be used in templates like this:
-	// {{ partial "flash.html" .nilOpts }}
-	data["nilOpts"] = map[string]interface{}{}
-
 	t := template.New(input)
-	if helpers != nil {
-		t = t.Funcs(helpers)
-	}
 
 	t, err := t.Parse(input)
 	if err != nil {
diff --git a/route_mappings.go b/route_mappings.go
index 6f663111..d77adc09 100644
--- a/route_mappings.go
+++ b/route_mappings.go
@@ -13,6 +13,7 @@ import (
 	"github.com/gobuffalo/envy"
 	"github.com/gobuffalo/flect"
 	"github.com/gobuffalo/flect/name"
+	"github.com/gorilla/handlers"
 )
 
 const (
@@ -99,7 +100,7 @@ func (a *App) ServeFiles(p string, root http.FileSystem) {
 
 func (a *App) fileServer(fs http.FileSystem) http.Handler {
 	fsh := http.FileServer(fs)
-	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+	baseHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		f, err := fs.Open(path.Clean(r.URL.Path))
 		if os.IsNotExist(err) {
 			eh := a.ErrorHandlers.Get(http.StatusNotFound)
@@ -113,6 +114,12 @@ func (a *App) fileServer(fs http.FileSystem) http.Handler {
 		w.Header().Add("Cache-Control", fmt.Sprintf("max-age=%s", maxAge))
 		fsh.ServeHTTP(w, r)
 	})
+
+	if a.CompressFiles {
+		return handlers.CompressHandler(baseHandler)
+	}
+
+	return baseHandler
 }
 
 type newable interface {
diff --git a/runtime/version.go b/runtime/version.go
index d2b7e180..3ace7080 100644
--- a/runtime/version.go
+++ b/runtime/version.go
@@ -1,4 +1,4 @@
 package runtime
 
 // Version is the current version of the buffalo binary
-var Version = "v0.16.5"
+var Version = "v0.16.6"


Test patch:
diff --git a/genny/ci/ci_test.go b/genny/ci/ci_test.go
index 7a5ab2bb..f8d735fb 100644
--- a/genny/ci/ci_test.go
+++ b/genny/ci/ci_test.go
@@ -95,3 +95,30 @@ func Test_New_Gitlab_No_pop(t *testing.T) {
 	r.Equal(".gitlab-ci.yml", f.Name())
 	r.NotContains(f.String(), "postgres:5432")
 }
+
+func Test_New_Circle(t *testing.T) {
+	r := require.New(t)
+
+	g, err := New(&Options{
+		Provider: "circleci",
+		DBType:   "postgres",
+	})
+	r.NoError(err)
+
+	run := gentest.NewRunner()
+	run.With(g)
+
+	r.NoError(run.Run())
+
+	res := run.Results()
+
+	r.Len(res.Commands, 0)
+	r.Len(res.Files, 1)
+
+	f := res.Files[0]
+	r.Equal(".circleci/config.yml", f.Name())
+	circleYml := struct {
+		Version      int
+	}{}
+	r.NoError(yaml.NewDecoder(f).Decode(&circleYml), "config.yml is a valid YAML file")
+}