From: Sascha Steinbiss <satta@debian.org>
Date: Tue, 14 Mar 2017 17:42:02 +0100
Subject: remove benchmark code

---
 benchmark/benchmark.go                     |  181 --
 benchmark/benchmark_codecgen.go            | 3170 ----------------------------
 benchmark/benchmark_easyjson.go            |  701 ------
 benchmark/benchmark_ffjson.go              | 3141 ---------------------------
 benchmark/benchmark_large_payload_test.go  |  131 --
 benchmark/benchmark_medium_payload_test.go |  339 ---
 benchmark/benchmark_small_payload_test.go  |  293 ---
 7 files changed, 7956 deletions(-)
 delete mode 100644 benchmark/benchmark.go
 delete mode 100644 benchmark/benchmark_codecgen.go
 delete mode 100644 benchmark/benchmark_easyjson.go
 delete mode 100644 benchmark/benchmark_ffjson.go
 delete mode 100644 benchmark/benchmark_large_payload_test.go
 delete mode 100644 benchmark/benchmark_medium_payload_test.go
 delete mode 100644 benchmark/benchmark_small_payload_test.go

--- a/benchmark/benchmark.go
+++ /dev/null
@@ -1,181 +0,0 @@
-package benchmark
-
-/*
-   Small paylod, http log like structure. Size: 190 bytes
-*/
-var smallFixture []byte = []byte(`{
-    "st": 1,
-    "sid": 486,
-    "tt": "active",
-    "gr": 0,
-    "uuid": "de305d54-75b4-431b-adb2-eb6b9e546014",
-    "ip": "127.0.0.1",
-    "ua": "user_agent",
-    "tz": -6,
-    "v": 1
-}`)
-
-type SmallPayload struct {
-	St   int
-	Sid  int
-	Tt   string
-	Gr   int
-	Uuid string
-	Ip   string
-	Ua   string
-	Tz   int
-	V    int
-}
-
-/*
-   Medium payload (based on Clearbit API response)
-*/
-type CBAvatar struct {
-	Url string
-}
-
-type CBGravatar struct {
-	Avatars []*CBAvatar
-}
-
-type CBGithub struct {
-	Followers int
-}
-
-type CBName struct {
-	FullName string
-}
-
-type CBPerson struct {
-	Name     *CBName
-	Github   *CBGithub
-	Gravatar *CBGravatar
-}
-
-type MediumPayload struct {
-	Person  *CBPerson
-	Company map[string]interface{}
-}
-
-// Reponse from Clearbit API. Size: 2.4kb
-var mediumFixture []byte = []byte(`{
-  "person": {
-    "id": "d50887ca-a6ce-4e59-b89f-14f0b5d03b03",
-    "name": {
-      "fullName": "Leonid Bugaev",
-      "givenName": "Leonid",
-      "familyName": "Bugaev"
-    },
-    "email": "leonsbox@gmail.com",
-    "gender": "male",
-    "location": "Saint Petersburg, Saint Petersburg, RU",
-    "geo": {
-      "city": "Saint Petersburg",
-      "state": "Saint Petersburg",
-      "country": "Russia",
-      "lat": 59.9342802,
-      "lng": 30.3350986
-    },
-    "bio": "Senior engineer at Granify.com",
-    "site": "http://flickfaver.com",
-    "avatar": "https://d1ts43dypk8bqh.cloudfront.net/v1/avatars/d50887ca-a6ce-4e59-b89f-14f0b5d03b03",
-    "employment": {
-      "name": "www.latera.ru",
-      "title": "Software Engineer",
-      "domain": "gmail.com"
-    },
-    "facebook": {
-      "handle": "leonid.bugaev"
-    },
-    "github": {
-      "handle": "buger",
-      "id": 14009,
-      "avatar": "https://avatars.githubusercontent.com/u/14009?v=3",
-      "company": "Granify",
-      "blog": "http://leonsbox.com",
-      "followers": 95,
-      "following": 10
-    },
-    "twitter": {
-      "handle": "flickfaver",
-      "id": 77004410,
-      "bio": null,
-      "followers": 2,
-      "following": 1,
-      "statuses": 5,
-      "favorites": 0,
-      "location": "",
-      "site": "http://flickfaver.com",
-      "avatar": null
-    },
-    "linkedin": {
-      "handle": "in/leonidbugaev"
-    },
-    "googleplus": {
-      "handle": null
-    },
-    "angellist": {
-      "handle": "leonid-bugaev",
-      "id": 61541,
-      "bio": "Senior engineer at Granify.com",
-      "blog": "http://buger.github.com",
-      "site": "http://buger.github.com",
-      "followers": 41,
-      "avatar": "https://d1qb2nb5cznatu.cloudfront.net/users/61541-medium_jpg?1405474390"
-    },
-    "klout": {
-      "handle": null,
-      "score": null
-    },
-    "foursquare": {
-      "handle": null
-    },
-    "aboutme": {
-      "handle": "leonid.bugaev",
-      "bio": null,
-      "avatar": null
-    },
-    "gravatar": {
-      "handle": "buger",
-      "urls": [
-
-      ],
-      "avatar": "http://1.gravatar.com/avatar/f7c8edd577d13b8930d5522f28123510",
-      "avatars": [
-        {
-          "url": "http://1.gravatar.com/avatar/f7c8edd577d13b8930d5522f28123510",
-          "type": "thumbnail"
-        }
-      ]
-    },
-    "fuzzy": false
-  },
-  "company": null
-}`)
-
-/*
-   Large payload, based on Discourse API. Size: 28kb
-*/
-
-type DSUser struct {
-	Username string
-}
-
-type DSTopic struct {
-	Id   int
-	Slug string
-}
-
-type DSTopicsList struct {
-	Topics        []*DSTopic
-	MoreTopicsUrl string
-}
-
-type LargePayload struct {
-	Users  []*DSUser
-	Topics *DSTopicsList
-}
-
-var largeFixture []byte = []byte(`
-    {"users":[{"id":-1,"username":"system","avatar_template":"/user_avatar/discourse.metabase.com/system/{size}/6_1.png"},{"id":89,"username":"zergot","avatar_template":"https://avatars.discourse.org/v2/letter/z/0ea827/{size}.png"},{"id":1,"username":"sameer","avatar_template":"https://avatars.discourse.org/v2/letter/s/bbce88/{size}.png"},{"id":84,"username":"HenryMirror","avatar_template":"https://avatars.discourse.org/v2/letter/h/ecd19e/{size}.png"},{"id":73,"username":"fimp","avatar_template":"https://avatars.discourse.org/v2/letter/f/ee59a6/{size}.png"},{"id":14,"username":"agilliland","avatar_template":"/user_avatar/discourse.metabase.com/agilliland/{size}/26_1.png"},{"id":87,"username":"amir","avatar_template":"https://avatars.discourse.org/v2/letter/a/c37758/{size}.png"},{"id":82,"username":"waseem","avatar_template":"https://avatars.discourse.org/v2/letter/w/9dc877/{size}.png"},{"id":78,"username":"tovenaar","avatar_template":"https://avatars.discourse.org/v2/letter/t/9de0a6/{size}.png"},{"id":74,"username":"Ben","avatar_template":"https://avatars.discourse.org/v2/letter/b/df788c/{size}.png"},{"id":71,"username":"MarkLaFay","avatar_template":"https://avatars.discourse.org/v2/letter/m/3bc359/{size}.png"},{"id":72,"username":"camsaul","avatar_template":"/user_avatar/discourse.metabase.com/camsaul/{size}/70_1.png"},{"id":53,"username":"mhjb","avatar_template":"/user_avatar/discourse.metabase.com/mhjb/{size}/54_1.png"},{"id":58,"username":"jbwiv","avatar_template":"https://avatars.discourse.org/v2/letter/j/6bbea6/{size}.png"},{"id":70,"username":"Maggs","avatar_template":"https://avatars.discourse.org/v2/letter/m/bbce88/{size}.png"},{"id":69,"username":"andrefaria","avatar_template":"/user_avatar/discourse.metabase.com/andrefaria/{size}/65_1.png"},{"id":60,"username":"bencarter78","avatar_template":"/user_avatar/discourse.metabase.com/bencarter78/{size}/59_1.png"},{"id":55,"username":"vikram","avatar_template":"https://avatars.discourse.org/v2/letter/v/e47774/{size}.png"},{"id":68,"username":"edchan77","avatar_template":"/user_avatar/discourse.metabase.com/edchan77/{size}/66_1.png"},{"id":9,"username":"karthikd","avatar_template":"https://avatars.discourse.org/v2/letter/k/cab0a1/{size}.png"},{"id":23,"username":"arthurz","avatar_template":"/user_avatar/discourse.metabase.com/arthurz/{size}/32_1.png"},{"id":3,"username":"tom","avatar_template":"/user_avatar/discourse.metabase.com/tom/{size}/21_1.png"},{"id":50,"username":"LeoNogueira","avatar_template":"/user_avatar/discourse.metabase.com/leonogueira/{size}/52_1.png"},{"id":66,"username":"ss06vi","avatar_template":"https://avatars.discourse.org/v2/letter/s/3ab097/{size}.png"},{"id":34,"username":"mattcollins","avatar_template":"/user_avatar/discourse.metabase.com/mattcollins/{size}/41_1.png"},{"id":51,"username":"krmmalik","avatar_template":"/user_avatar/discourse.metabase.com/krmmalik/{size}/53_1.png"},{"id":46,"username":"odysseas","avatar_template":"https://avatars.discourse.org/v2/letter/o/5f8ce5/{size}.png"},{"id":5,"username":"jonthewayne","avatar_template":"/user_avatar/discourse.metabase.com/jonthewayne/{size}/18_1.png"},{"id":11,"username":"anandiyer","avatar_template":"/user_avatar/discourse.metabase.com/anandiyer/{size}/23_1.png"},{"id":25,"username":"alnorth","avatar_template":"/user_avatar/discourse.metabase.com/alnorth/{size}/34_1.png"},{"id":52,"username":"j_at_svg","avatar_template":"https://avatars.discourse.org/v2/letter/j/96bed5/{size}.png"},{"id":42,"username":"styts","avatar_template":"/user_avatar/discourse.metabase.com/styts/{size}/47_1.png"}],"topics":{"can_create_topic":false,"more_topics_url":"/c/uncategorized/l/latest?page=1","draft":null,"draft_key":"new_topic","draft_sequence":null,"per_page":30,"topics":[{"id":8,"title":"Welcome to Metabase's Discussion Forum","fancy_title":"Welcome to Metabase&rsquo;s Discussion Forum","slug":"welcome-to-metabases-discussion-forum","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"/images/welcome/discourse-edit-post-animated.gif","created_at":"2015-10-17T00:14:49.526Z","last_posted_at":"2015-10-17T00:14:49.557Z","bumped":true,"bumped_at":"2015-10-21T02:32:22.486Z","unseen":false,"pinned":true,"unpinned":null,"excerpt":"Welcome to Metabase&#39;s discussion forum. This is a place to get help on installation, setting up as well as sharing tips and tricks.","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":197,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"system","category_id":1,"pinned_globally":true,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":-1}]},{"id":169,"title":"Formatting Dates","fancy_title":"Formatting Dates","slug":"formatting-dates","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2016-01-14T06:30:45.311Z","last_posted_at":"2016-01-14T06:30:45.397Z","bumped":true,"bumped_at":"2016-01-14T06:30:45.397Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":11,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"zergot","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":89}]},{"id":168,"title":"Setting for google api key","fancy_title":"Setting for google api key","slug":"setting-for-google-api-key","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2016-01-13T17:14:31.799Z","last_posted_at":"2016-01-14T06:24:03.421Z","bumped":true,"bumped_at":"2016-01-14T06:24:03.421Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":16,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"zergot","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":89}]},{"id":167,"title":"Cannot see non-US timezones on the admin","fancy_title":"Cannot see non-US timezones on the admin","slug":"cannot-see-non-us-timezones-on-the-admin","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2016-01-13T17:07:36.764Z","last_posted_at":"2016-01-13T17:07:36.831Z","bumped":true,"bumped_at":"2016-01-13T17:07:36.831Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":11,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"zergot","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":89}]},{"id":164,"title":"External (Metabase level) linkages in data schema","fancy_title":"External (Metabase level) linkages in data schema","slug":"external-metabase-level-linkages-in-data-schema","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":null,"created_at":"2016-01-11T13:51:02.286Z","last_posted_at":"2016-01-12T11:06:37.259Z","bumped":true,"bumped_at":"2016-01-12T11:06:37.259Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":32,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"zergot","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":89},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":155,"title":"Query working on \"Questions\" but not in \"Pulses\"","fancy_title":"Query working on &ldquo;Questions&rdquo; but not in &ldquo;Pulses&rdquo;","slug":"query-working-on-questions-but-not-in-pulses","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":null,"created_at":"2016-01-01T14:06:10.083Z","last_posted_at":"2016-01-08T22:37:51.772Z","bumped":true,"bumped_at":"2016-01-08T22:37:51.772Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":72,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"agilliland","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":84},{"extras":null,"description":"Frequent Poster","user_id":73},{"extras":"latest","description":"Most Recent Poster","user_id":14}]},{"id":161,"title":"Pulses posted to Slack don't show question output","fancy_title":"Pulses posted to Slack don&rsquo;t show question output","slug":"pulses-posted-to-slack-dont-show-question-output","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":"/uploads/default/original/1X/9d2806517bf3598b10be135b2c58923b47ba23e7.png","created_at":"2016-01-08T22:09:58.205Z","last_posted_at":"2016-01-08T22:28:44.685Z","bumped":true,"bumped_at":"2016-01-08T22:28:44.685Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":34,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":87},{"extras":"latest","description":"Most Recent Poster","user_id":1}]},{"id":152,"title":"Should we build Kafka connecter or Kafka plugin","fancy_title":"Should we build Kafka connecter or Kafka plugin","slug":"should-we-build-kafka-connecter-or-kafka-plugin","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":null,"created_at":"2015-12-28T20:37:23.501Z","last_posted_at":"2015-12-31T18:16:45.477Z","bumped":true,"bumped_at":"2015-12-31T18:16:45.477Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":84,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":82},{"extras":"latest","description":"Most Recent Poster, Frequent Poster","user_id":1}]},{"id":147,"title":"Change X and Y on graph","fancy_title":"Change X and Y on graph","slug":"change-x-and-y-on-graph","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2015-12-21T17:52:46.581Z","last_posted_at":"2015-12-21T17:52:46.684Z","bumped":true,"bumped_at":"2015-12-21T18:19:13.003Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":68,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"tovenaar","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":78}]},{"id":142,"title":"Issues sending mail via office365 relay","fancy_title":"Issues sending mail via office365 relay","slug":"issues-sending-mail-via-office365-relay","posts_count":5,"reply_count":2,"highest_post_number":5,"image_url":null,"created_at":"2015-12-16T10:38:47.315Z","last_posted_at":"2015-12-21T09:26:27.167Z","bumped":true,"bumped_at":"2015-12-21T09:26:27.167Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":122,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"Ben","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":74},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":137,"title":"I see triplicates of my mongoDB collections","fancy_title":"I see triplicates of my mongoDB collections","slug":"i-see-triplicates-of-my-mongodb-collections","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":null,"created_at":"2015-12-14T13:33:03.426Z","last_posted_at":"2015-12-17T18:40:05.487Z","bumped":true,"bumped_at":"2015-12-17T18:40:05.487Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":97,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"MarkLaFay","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":71},{"extras":null,"description":"Frequent Poster","user_id":14}]},{"id":140,"title":"Google Analytics plugin","fancy_title":"Google Analytics plugin","slug":"google-analytics-plugin","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2015-12-15T13:00:55.644Z","last_posted_at":"2015-12-15T13:00:55.705Z","bumped":true,"bumped_at":"2015-12-15T13:00:55.705Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":105,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"fimp","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":73}]},{"id":138,"title":"With-mongo-connection failed: bad connection details:","fancy_title":"With-mongo-connection failed: bad connection details:","slug":"with-mongo-connection-failed-bad-connection-details","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2015-12-14T17:28:11.041Z","last_posted_at":"2015-12-14T17:28:11.111Z","bumped":true,"bumped_at":"2015-12-14T17:28:11.111Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":56,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"MarkLaFay","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":71}]},{"id":133,"title":"\"We couldn't understand your question.\" when I query mongoDB","fancy_title":"&ldquo;We couldn&rsquo;t understand your question.&rdquo; when I query mongoDB","slug":"we-couldnt-understand-your-question-when-i-query-mongodb","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":null,"created_at":"2015-12-11T17:38:30.576Z","last_posted_at":"2015-12-14T13:31:26.395Z","bumped":true,"bumped_at":"2015-12-14T13:31:26.395Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":107,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"MarkLaFay","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":71},{"extras":null,"description":"Frequent Poster","user_id":72}]},{"id":129,"title":"My bar charts are all thin","fancy_title":"My bar charts are all thin","slug":"my-bar-charts-are-all-thin","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":"/uploads/default/original/1X/41bcf3b2a00dc7cfaff01cb3165d35d32a85bf1d.png","created_at":"2015-12-09T22:09:56.394Z","last_posted_at":"2015-12-11T19:00:45.289Z","bumped":true,"bumped_at":"2015-12-11T19:00:45.289Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":116,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"mhjb","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":53},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":106,"title":"What is the expected return order of columns for graphing results when using raw SQL?","fancy_title":"What is the expected return order of columns for graphing results when using raw SQL?","slug":"what-is-the-expected-return-order-of-columns-for-graphing-results-when-using-raw-sql","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":null,"created_at":"2015-11-24T19:07:14.561Z","last_posted_at":"2015-12-11T17:04:14.149Z","bumped":true,"bumped_at":"2015-12-11T17:04:14.149Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":153,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"jbwiv","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":58},{"extras":null,"description":"Frequent Poster","user_id":14}]},{"id":131,"title":"Set site url from admin panel","fancy_title":"Set site url from admin panel","slug":"set-site-url-from-admin-panel","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2015-12-10T06:22:46.042Z","last_posted_at":"2015-12-10T19:12:57.449Z","bumped":true,"bumped_at":"2015-12-10T19:12:57.449Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":77,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":70},{"extras":"latest","description":"Most Recent Poster","user_id":1}]},{"id":127,"title":"Internationalization (i18n)","fancy_title":"Internationalization (i18n)","slug":"internationalization-i18n","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2015-12-08T16:55:37.397Z","last_posted_at":"2015-12-09T16:49:55.816Z","bumped":true,"bumped_at":"2015-12-09T16:49:55.816Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":85,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"agilliland","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":69},{"extras":"latest","description":"Most Recent Poster","user_id":14}]},{"id":109,"title":"Returning raw data with no filters always returns We couldn't understand your question","fancy_title":"Returning raw data with no filters always returns We couldn&rsquo;t understand your question","slug":"returning-raw-data-with-no-filters-always-returns-we-couldnt-understand-your-question","posts_count":3,"reply_count":1,"highest_post_number":3,"image_url":null,"created_at":"2015-11-25T21:35:01.315Z","last_posted_at":"2015-12-09T10:26:12.255Z","bumped":true,"bumped_at":"2015-12-09T10:26:12.255Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":133,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"bencarter78","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":60},{"extras":null,"description":"Frequent Poster","user_id":14}]},{"id":103,"title":"Support for Cassandra?","fancy_title":"Support for Cassandra?","slug":"support-for-cassandra","posts_count":5,"reply_count":1,"highest_post_number":5,"image_url":null,"created_at":"2015-11-20T06:45:31.741Z","last_posted_at":"2015-12-09T03:18:51.274Z","bumped":true,"bumped_at":"2015-12-09T03:18:51.274Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":169,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"vikram","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":55},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":128,"title":"Mongo query with Date breaks [solved: Mongo 3.0 required]","fancy_title":"Mongo query with Date breaks [solved: Mongo 3.0 required]","slug":"mongo-query-with-date-breaks-solved-mongo-3-0-required","posts_count":5,"reply_count":0,"highest_post_number":5,"image_url":null,"created_at":"2015-12-08T18:30:56.562Z","last_posted_at":"2015-12-08T21:03:02.421Z","bumped":true,"bumped_at":"2015-12-08T21:03:02.421Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":102,"like_count":1,"has_summary":false,"archetype":"regular","last_poster_username":"edchan77","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":68},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":23,"title":"Can this connect to MS SQL Server?","fancy_title":"Can this connect to MS SQL Server?","slug":"can-this-connect-to-ms-sql-server","posts_count":7,"reply_count":1,"highest_post_number":7,"image_url":null,"created_at":"2015-10-21T18:52:37.987Z","last_posted_at":"2015-12-07T17:41:51.609Z","bumped":true,"bumped_at":"2015-12-07T17:41:51.609Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":367,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":9},{"extras":null,"description":"Frequent Poster","user_id":23},{"extras":null,"description":"Frequent Poster","user_id":3},{"extras":null,"description":"Frequent Poster","user_id":50},{"extras":"latest","description":"Most Recent Poster","user_id":1}]},{"id":121,"title":"Cannot restart metabase in docker","fancy_title":"Cannot restart metabase in docker","slug":"cannot-restart-metabase-in-docker","posts_count":5,"reply_count":1,"highest_post_number":5,"image_url":null,"created_at":"2015-12-04T21:28:58.137Z","last_posted_at":"2015-12-04T23:02:00.488Z","bumped":true,"bumped_at":"2015-12-04T23:02:00.488Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":96,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":66},{"extras":"latest","description":"Most Recent Poster, Frequent Poster","user_id":1}]},{"id":85,"title":"Edit Max Rows Count","fancy_title":"Edit Max Rows Count","slug":"edit-max-rows-count","posts_count":4,"reply_count":2,"highest_post_number":4,"image_url":null,"created_at":"2015-11-11T23:46:52.917Z","last_posted_at":"2015-11-24T01:01:14.569Z","bumped":true,"bumped_at":"2015-11-24T01:01:14.569Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":169,"like_count":1,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":34},{"extras":"latest","description":"Most Recent Poster, Frequent Poster","user_id":1}]},{"id":96,"title":"Creating charts by querying more than one table at a time","fancy_title":"Creating charts by querying more than one table at a time","slug":"creating-charts-by-querying-more-than-one-table-at-a-time","posts_count":6,"reply_count":4,"highest_post_number":6,"image_url":null,"created_at":"2015-11-17T11:20:18.442Z","last_posted_at":"2015-11-21T02:12:25.995Z","bumped":true,"bumped_at":"2015-11-21T02:12:25.995Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":217,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":51},{"extras":"latest","description":"Most Recent Poster, Frequent Poster","user_id":1}]},{"id":90,"title":"Trying to add RDS postgresql as the database fails silently","fancy_title":"Trying to add RDS postgresql as the database fails silently","slug":"trying-to-add-rds-postgresql-as-the-database-fails-silently","posts_count":4,"reply_count":2,"highest_post_number":4,"image_url":null,"created_at":"2015-11-14T23:45:02.967Z","last_posted_at":"2015-11-21T01:08:45.915Z","bumped":true,"bumped_at":"2015-11-21T01:08:45.915Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":162,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":46},{"extras":"latest","description":"Most Recent Poster, Frequent Poster","user_id":1}]},{"id":17,"title":"Deploy to Heroku isn't working","fancy_title":"Deploy to Heroku isn&rsquo;t working","slug":"deploy-to-heroku-isnt-working","posts_count":9,"reply_count":3,"highest_post_number":9,"image_url":null,"created_at":"2015-10-21T16:42:03.096Z","last_posted_at":"2015-11-20T18:34:14.044Z","bumped":true,"bumped_at":"2015-11-20T18:34:14.044Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":332,"like_count":2,"has_summary":false,"archetype":"regular","last_poster_username":"agilliland","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":5},{"extras":null,"description":"Frequent Poster","user_id":3},{"extras":null,"description":"Frequent Poster","user_id":11},{"extras":null,"description":"Frequent Poster","user_id":25},{"extras":"latest","description":"Most Recent Poster","user_id":14}]},{"id":100,"title":"Can I use DATEPART() in SQL queries?","fancy_title":"Can I use DATEPART() in SQL queries?","slug":"can-i-use-datepart-in-sql-queries","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2015-11-17T23:15:58.033Z","last_posted_at":"2015-11-18T00:19:48.763Z","bumped":true,"bumped_at":"2015-11-18T00:19:48.763Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":112,"like_count":1,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":53},{"extras":"latest","description":"Most Recent Poster","user_id":1}]},{"id":98,"title":"Feature Request: LDAP Authentication","fancy_title":"Feature Request: LDAP Authentication","slug":"feature-request-ldap-authentication","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2015-11-17T17:22:44.484Z","last_posted_at":"2015-11-17T17:22:44.577Z","bumped":true,"bumped_at":"2015-11-17T17:22:44.577Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":97,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"j_at_svg","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":52}]},{"id":87,"title":"Migrating from internal H2 to Postgres","fancy_title":"Migrating from internal H2 to Postgres","slug":"migrating-from-internal-h2-to-postgres","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2015-11-12T14:36:06.745Z","last_posted_at":"2015-11-12T18:05:10.796Z","bumped":true,"bumped_at":"2015-11-12T18:05:10.796Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":111,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":42},{"extras":"latest","description":"Most Recent Poster","user_id":1}]}]}}
-`)
--- a/benchmark/benchmark_codecgen.go
+++ /dev/null
@@ -1,3170 +0,0 @@
-// ************************************************************
-// DO NOT EDIT.
-// THIS FILE IS AUTO-GENERATED BY codecgen.
-// ************************************************************
-
-package benchmark
-
-import (
-	"errors"
-	"fmt"
-	codec1978 "github.com/ugorji/go/codec"
-	"reflect"
-	"runtime"
-)
-
-const (
-	// ----- content types ----
-	codecSelferC_UTF86212 = 1
-	codecSelferC_RAW6212  = 0
-	// ----- value types used ----
-	codecSelferValueTypeArray6212 = 10
-	codecSelferValueTypeMap6212   = 9
-	// ----- containerStateValues ----
-	codecSelfer_containerMapKey6212    = 2
-	codecSelfer_containerMapValue6212  = 3
-	codecSelfer_containerMapEnd6212    = 4
-	codecSelfer_containerArrayElem6212 = 6
-	codecSelfer_containerArrayEnd6212  = 7
-)
-
-var (
-	codecSelferBitsize6212                         = uint8(reflect.TypeOf(uint(0)).Bits())
-	codecSelferOnlyMapOrArrayEncodeToStructErr6212 = errors.New(`only encoded map or array can be decoded into a struct`)
-)
-
-type codecSelfer6212 struct{}
-
-func init() {
-	if codec1978.GenVersion != 5 {
-		_, file, _, _ := runtime.Caller(0)
-		err := fmt.Errorf("codecgen version mismatch: current: %v, need %v. Re-generate file: %v",
-			5, codec1978.GenVersion, file)
-		panic(err)
-	}
-	if false { // reference the types, but skip this branch at build/run time
-	}
-}
-
-func (x *SmallPayload) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [9]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(9)
-			} else {
-				yynn2 = 9
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym4 := z.EncBinary()
-				_ = yym4
-				if false {
-				} else {
-					r.EncodeInt(int64(x.St))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("St"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym5 := z.EncBinary()
-				_ = yym5
-				if false {
-				} else {
-					r.EncodeInt(int64(x.St))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym7 := z.EncBinary()
-				_ = yym7
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Sid))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Sid"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym8 := z.EncBinary()
-				_ = yym8
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Sid))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym10 := z.EncBinary()
-				_ = yym10
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Tt))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Tt"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym11 := z.EncBinary()
-				_ = yym11
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Tt))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym13 := z.EncBinary()
-				_ = yym13
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Gr))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Gr"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym14 := z.EncBinary()
-				_ = yym14
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Gr))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym16 := z.EncBinary()
-				_ = yym16
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Uuid))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Uuid"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym17 := z.EncBinary()
-				_ = yym17
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Uuid))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym19 := z.EncBinary()
-				_ = yym19
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Ip))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Ip"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym20 := z.EncBinary()
-				_ = yym20
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Ip))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym22 := z.EncBinary()
-				_ = yym22
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Ua))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Ua"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym23 := z.EncBinary()
-				_ = yym23
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Ua))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym25 := z.EncBinary()
-				_ = yym25
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Tz))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Tz"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym26 := z.EncBinary()
-				_ = yym26
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Tz))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym28 := z.EncBinary()
-				_ = yym28
-				if false {
-				} else {
-					r.EncodeInt(int64(x.V))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("V"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym29 := z.EncBinary()
-				_ = yym29
-				if false {
-				} else {
-					r.EncodeInt(int64(x.V))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *SmallPayload) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *SmallPayload) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "St":
-			if r.TryDecodeAsNil() {
-				x.St = 0
-			} else {
-				yyv4 := &x.St
-				yym5 := z.DecBinary()
-				_ = yym5
-				if false {
-				} else {
-					*((*int)(yyv4)) = int(r.DecodeInt(codecSelferBitsize6212))
-				}
-			}
-		case "Sid":
-			if r.TryDecodeAsNil() {
-				x.Sid = 0
-			} else {
-				yyv6 := &x.Sid
-				yym7 := z.DecBinary()
-				_ = yym7
-				if false {
-				} else {
-					*((*int)(yyv6)) = int(r.DecodeInt(codecSelferBitsize6212))
-				}
-			}
-		case "Tt":
-			if r.TryDecodeAsNil() {
-				x.Tt = ""
-			} else {
-				yyv8 := &x.Tt
-				yym9 := z.DecBinary()
-				_ = yym9
-				if false {
-				} else {
-					*((*string)(yyv8)) = r.DecodeString()
-				}
-			}
-		case "Gr":
-			if r.TryDecodeAsNil() {
-				x.Gr = 0
-			} else {
-				yyv10 := &x.Gr
-				yym11 := z.DecBinary()
-				_ = yym11
-				if false {
-				} else {
-					*((*int)(yyv10)) = int(r.DecodeInt(codecSelferBitsize6212))
-				}
-			}
-		case "Uuid":
-			if r.TryDecodeAsNil() {
-				x.Uuid = ""
-			} else {
-				yyv12 := &x.Uuid
-				yym13 := z.DecBinary()
-				_ = yym13
-				if false {
-				} else {
-					*((*string)(yyv12)) = r.DecodeString()
-				}
-			}
-		case "Ip":
-			if r.TryDecodeAsNil() {
-				x.Ip = ""
-			} else {
-				yyv14 := &x.Ip
-				yym15 := z.DecBinary()
-				_ = yym15
-				if false {
-				} else {
-					*((*string)(yyv14)) = r.DecodeString()
-				}
-			}
-		case "Ua":
-			if r.TryDecodeAsNil() {
-				x.Ua = ""
-			} else {
-				yyv16 := &x.Ua
-				yym17 := z.DecBinary()
-				_ = yym17
-				if false {
-				} else {
-					*((*string)(yyv16)) = r.DecodeString()
-				}
-			}
-		case "Tz":
-			if r.TryDecodeAsNil() {
-				x.Tz = 0
-			} else {
-				yyv18 := &x.Tz
-				yym19 := z.DecBinary()
-				_ = yym19
-				if false {
-				} else {
-					*((*int)(yyv18)) = int(r.DecodeInt(codecSelferBitsize6212))
-				}
-			}
-		case "V":
-			if r.TryDecodeAsNil() {
-				x.V = 0
-			} else {
-				yyv20 := &x.V
-				yym21 := z.DecBinary()
-				_ = yym21
-				if false {
-				} else {
-					*((*int)(yyv20)) = int(r.DecodeInt(codecSelferBitsize6212))
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *SmallPayload) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj22 int
-	var yyb22 bool
-	var yyhl22 bool = l >= 0
-	yyj22++
-	if yyhl22 {
-		yyb22 = yyj22 > l
-	} else {
-		yyb22 = r.CheckBreak()
-	}
-	if yyb22 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.St = 0
-	} else {
-		yyv23 := &x.St
-		yym24 := z.DecBinary()
-		_ = yym24
-		if false {
-		} else {
-			*((*int)(yyv23)) = int(r.DecodeInt(codecSelferBitsize6212))
-		}
-	}
-	yyj22++
-	if yyhl22 {
-		yyb22 = yyj22 > l
-	} else {
-		yyb22 = r.CheckBreak()
-	}
-	if yyb22 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Sid = 0
-	} else {
-		yyv25 := &x.Sid
-		yym26 := z.DecBinary()
-		_ = yym26
-		if false {
-		} else {
-			*((*int)(yyv25)) = int(r.DecodeInt(codecSelferBitsize6212))
-		}
-	}
-	yyj22++
-	if yyhl22 {
-		yyb22 = yyj22 > l
-	} else {
-		yyb22 = r.CheckBreak()
-	}
-	if yyb22 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Tt = ""
-	} else {
-		yyv27 := &x.Tt
-		yym28 := z.DecBinary()
-		_ = yym28
-		if false {
-		} else {
-			*((*string)(yyv27)) = r.DecodeString()
-		}
-	}
-	yyj22++
-	if yyhl22 {
-		yyb22 = yyj22 > l
-	} else {
-		yyb22 = r.CheckBreak()
-	}
-	if yyb22 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Gr = 0
-	} else {
-		yyv29 := &x.Gr
-		yym30 := z.DecBinary()
-		_ = yym30
-		if false {
-		} else {
-			*((*int)(yyv29)) = int(r.DecodeInt(codecSelferBitsize6212))
-		}
-	}
-	yyj22++
-	if yyhl22 {
-		yyb22 = yyj22 > l
-	} else {
-		yyb22 = r.CheckBreak()
-	}
-	if yyb22 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Uuid = ""
-	} else {
-		yyv31 := &x.Uuid
-		yym32 := z.DecBinary()
-		_ = yym32
-		if false {
-		} else {
-			*((*string)(yyv31)) = r.DecodeString()
-		}
-	}
-	yyj22++
-	if yyhl22 {
-		yyb22 = yyj22 > l
-	} else {
-		yyb22 = r.CheckBreak()
-	}
-	if yyb22 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Ip = ""
-	} else {
-		yyv33 := &x.Ip
-		yym34 := z.DecBinary()
-		_ = yym34
-		if false {
-		} else {
-			*((*string)(yyv33)) = r.DecodeString()
-		}
-	}
-	yyj22++
-	if yyhl22 {
-		yyb22 = yyj22 > l
-	} else {
-		yyb22 = r.CheckBreak()
-	}
-	if yyb22 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Ua = ""
-	} else {
-		yyv35 := &x.Ua
-		yym36 := z.DecBinary()
-		_ = yym36
-		if false {
-		} else {
-			*((*string)(yyv35)) = r.DecodeString()
-		}
-	}
-	yyj22++
-	if yyhl22 {
-		yyb22 = yyj22 > l
-	} else {
-		yyb22 = r.CheckBreak()
-	}
-	if yyb22 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Tz = 0
-	} else {
-		yyv37 := &x.Tz
-		yym38 := z.DecBinary()
-		_ = yym38
-		if false {
-		} else {
-			*((*int)(yyv37)) = int(r.DecodeInt(codecSelferBitsize6212))
-		}
-	}
-	yyj22++
-	if yyhl22 {
-		yyb22 = yyj22 > l
-	} else {
-		yyb22 = r.CheckBreak()
-	}
-	if yyb22 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.V = 0
-	} else {
-		yyv39 := &x.V
-		yym40 := z.DecBinary()
-		_ = yym40
-		if false {
-		} else {
-			*((*int)(yyv39)) = int(r.DecodeInt(codecSelferBitsize6212))
-		}
-	}
-	for {
-		yyj22++
-		if yyhl22 {
-			yyb22 = yyj22 > l
-		} else {
-			yyb22 = r.CheckBreak()
-		}
-		if yyb22 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj22-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x *CBAvatar) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [1]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(1)
-			} else {
-				yynn2 = 1
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym4 := z.EncBinary()
-				_ = yym4
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Url))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Url"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym5 := z.EncBinary()
-				_ = yym5
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Url))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *CBAvatar) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *CBAvatar) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "Url":
-			if r.TryDecodeAsNil() {
-				x.Url = ""
-			} else {
-				yyv4 := &x.Url
-				yym5 := z.DecBinary()
-				_ = yym5
-				if false {
-				} else {
-					*((*string)(yyv4)) = r.DecodeString()
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *CBAvatar) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj6 int
-	var yyb6 bool
-	var yyhl6 bool = l >= 0
-	yyj6++
-	if yyhl6 {
-		yyb6 = yyj6 > l
-	} else {
-		yyb6 = r.CheckBreak()
-	}
-	if yyb6 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Url = ""
-	} else {
-		yyv7 := &x.Url
-		yym8 := z.DecBinary()
-		_ = yym8
-		if false {
-		} else {
-			*((*string)(yyv7)) = r.DecodeString()
-		}
-	}
-	for {
-		yyj6++
-		if yyhl6 {
-			yyb6 = yyj6 > l
-		} else {
-			yyb6 = r.CheckBreak()
-		}
-		if yyb6 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj6-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x *CBGravatar) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [1]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(1)
-			} else {
-				yynn2 = 1
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				if x.Avatars == nil {
-					r.EncodeNil()
-				} else {
-					yym4 := z.EncBinary()
-					_ = yym4
-					if false {
-					} else {
-						h.encSlicePtrtoCBAvatar(([]*CBAvatar)(x.Avatars), e)
-					}
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Avatars"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				if x.Avatars == nil {
-					r.EncodeNil()
-				} else {
-					yym5 := z.EncBinary()
-					_ = yym5
-					if false {
-					} else {
-						h.encSlicePtrtoCBAvatar(([]*CBAvatar)(x.Avatars), e)
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *CBGravatar) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *CBGravatar) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "Avatars":
-			if r.TryDecodeAsNil() {
-				x.Avatars = nil
-			} else {
-				yyv4 := &x.Avatars
-				yym5 := z.DecBinary()
-				_ = yym5
-				if false {
-				} else {
-					h.decSlicePtrtoCBAvatar((*[]*CBAvatar)(yyv4), d)
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *CBGravatar) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj6 int
-	var yyb6 bool
-	var yyhl6 bool = l >= 0
-	yyj6++
-	if yyhl6 {
-		yyb6 = yyj6 > l
-	} else {
-		yyb6 = r.CheckBreak()
-	}
-	if yyb6 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Avatars = nil
-	} else {
-		yyv7 := &x.Avatars
-		yym8 := z.DecBinary()
-		_ = yym8
-		if false {
-		} else {
-			h.decSlicePtrtoCBAvatar((*[]*CBAvatar)(yyv7), d)
-		}
-	}
-	for {
-		yyj6++
-		if yyhl6 {
-			yyb6 = yyj6 > l
-		} else {
-			yyb6 = r.CheckBreak()
-		}
-		if yyb6 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj6-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x *CBGithub) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [1]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(1)
-			} else {
-				yynn2 = 1
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym4 := z.EncBinary()
-				_ = yym4
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Followers))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Followers"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym5 := z.EncBinary()
-				_ = yym5
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Followers))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *CBGithub) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *CBGithub) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "Followers":
-			if r.TryDecodeAsNil() {
-				x.Followers = 0
-			} else {
-				yyv4 := &x.Followers
-				yym5 := z.DecBinary()
-				_ = yym5
-				if false {
-				} else {
-					*((*int)(yyv4)) = int(r.DecodeInt(codecSelferBitsize6212))
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *CBGithub) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj6 int
-	var yyb6 bool
-	var yyhl6 bool = l >= 0
-	yyj6++
-	if yyhl6 {
-		yyb6 = yyj6 > l
-	} else {
-		yyb6 = r.CheckBreak()
-	}
-	if yyb6 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Followers = 0
-	} else {
-		yyv7 := &x.Followers
-		yym8 := z.DecBinary()
-		_ = yym8
-		if false {
-		} else {
-			*((*int)(yyv7)) = int(r.DecodeInt(codecSelferBitsize6212))
-		}
-	}
-	for {
-		yyj6++
-		if yyhl6 {
-			yyb6 = yyj6 > l
-		} else {
-			yyb6 = r.CheckBreak()
-		}
-		if yyb6 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj6-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x *CBName) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [1]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(1)
-			} else {
-				yynn2 = 1
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym4 := z.EncBinary()
-				_ = yym4
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.FullName))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("FullName"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym5 := z.EncBinary()
-				_ = yym5
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.FullName))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *CBName) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *CBName) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "FullName":
-			if r.TryDecodeAsNil() {
-				x.FullName = ""
-			} else {
-				yyv4 := &x.FullName
-				yym5 := z.DecBinary()
-				_ = yym5
-				if false {
-				} else {
-					*((*string)(yyv4)) = r.DecodeString()
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *CBName) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj6 int
-	var yyb6 bool
-	var yyhl6 bool = l >= 0
-	yyj6++
-	if yyhl6 {
-		yyb6 = yyj6 > l
-	} else {
-		yyb6 = r.CheckBreak()
-	}
-	if yyb6 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.FullName = ""
-	} else {
-		yyv7 := &x.FullName
-		yym8 := z.DecBinary()
-		_ = yym8
-		if false {
-		} else {
-			*((*string)(yyv7)) = r.DecodeString()
-		}
-	}
-	for {
-		yyj6++
-		if yyhl6 {
-			yyb6 = yyj6 > l
-		} else {
-			yyb6 = r.CheckBreak()
-		}
-		if yyb6 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj6-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x *CBPerson) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [3]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(3)
-			} else {
-				yynn2 = 3
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				if x.Name == nil {
-					r.EncodeNil()
-				} else {
-					x.Name.CodecEncodeSelf(e)
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Name"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				if x.Name == nil {
-					r.EncodeNil()
-				} else {
-					x.Name.CodecEncodeSelf(e)
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				if x.Github == nil {
-					r.EncodeNil()
-				} else {
-					x.Github.CodecEncodeSelf(e)
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Github"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				if x.Github == nil {
-					r.EncodeNil()
-				} else {
-					x.Github.CodecEncodeSelf(e)
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				if x.Gravatar == nil {
-					r.EncodeNil()
-				} else {
-					x.Gravatar.CodecEncodeSelf(e)
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Gravatar"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				if x.Gravatar == nil {
-					r.EncodeNil()
-				} else {
-					x.Gravatar.CodecEncodeSelf(e)
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *CBPerson) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *CBPerson) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "Name":
-			if r.TryDecodeAsNil() {
-				if x.Name != nil {
-					x.Name = nil
-				}
-			} else {
-				if x.Name == nil {
-					x.Name = new(CBName)
-				}
-				x.Name.CodecDecodeSelf(d)
-			}
-		case "Github":
-			if r.TryDecodeAsNil() {
-				if x.Github != nil {
-					x.Github = nil
-				}
-			} else {
-				if x.Github == nil {
-					x.Github = new(CBGithub)
-				}
-				x.Github.CodecDecodeSelf(d)
-			}
-		case "Gravatar":
-			if r.TryDecodeAsNil() {
-				if x.Gravatar != nil {
-					x.Gravatar = nil
-				}
-			} else {
-				if x.Gravatar == nil {
-					x.Gravatar = new(CBGravatar)
-				}
-				x.Gravatar.CodecDecodeSelf(d)
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *CBPerson) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj7 int
-	var yyb7 bool
-	var yyhl7 bool = l >= 0
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		if x.Name != nil {
-			x.Name = nil
-		}
-	} else {
-		if x.Name == nil {
-			x.Name = new(CBName)
-		}
-		x.Name.CodecDecodeSelf(d)
-	}
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		if x.Github != nil {
-			x.Github = nil
-		}
-	} else {
-		if x.Github == nil {
-			x.Github = new(CBGithub)
-		}
-		x.Github.CodecDecodeSelf(d)
-	}
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		if x.Gravatar != nil {
-			x.Gravatar = nil
-		}
-	} else {
-		if x.Gravatar == nil {
-			x.Gravatar = new(CBGravatar)
-		}
-		x.Gravatar.CodecDecodeSelf(d)
-	}
-	for {
-		yyj7++
-		if yyhl7 {
-			yyb7 = yyj7 > l
-		} else {
-			yyb7 = r.CheckBreak()
-		}
-		if yyb7 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj7-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x *MediumPayload) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [2]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(2)
-			} else {
-				yynn2 = 2
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				if x.Person == nil {
-					r.EncodeNil()
-				} else {
-					x.Person.CodecEncodeSelf(e)
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Person"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				if x.Person == nil {
-					r.EncodeNil()
-				} else {
-					x.Person.CodecEncodeSelf(e)
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				if x.Company == nil {
-					r.EncodeNil()
-				} else {
-					yym7 := z.EncBinary()
-					_ = yym7
-					if false {
-					} else {
-						z.F.EncMapStringIntfV(x.Company, false, e)
-					}
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Company"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				if x.Company == nil {
-					r.EncodeNil()
-				} else {
-					yym8 := z.EncBinary()
-					_ = yym8
-					if false {
-					} else {
-						z.F.EncMapStringIntfV(x.Company, false, e)
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *MediumPayload) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *MediumPayload) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "Person":
-			if r.TryDecodeAsNil() {
-				if x.Person != nil {
-					x.Person = nil
-				}
-			} else {
-				if x.Person == nil {
-					x.Person = new(CBPerson)
-				}
-				x.Person.CodecDecodeSelf(d)
-			}
-		case "Company":
-			if r.TryDecodeAsNil() {
-				x.Company = nil
-			} else {
-				yyv5 := &x.Company
-				yym6 := z.DecBinary()
-				_ = yym6
-				if false {
-				} else {
-					z.F.DecMapStringIntfX(yyv5, false, d)
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *MediumPayload) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj7 int
-	var yyb7 bool
-	var yyhl7 bool = l >= 0
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		if x.Person != nil {
-			x.Person = nil
-		}
-	} else {
-		if x.Person == nil {
-			x.Person = new(CBPerson)
-		}
-		x.Person.CodecDecodeSelf(d)
-	}
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Company = nil
-	} else {
-		yyv9 := &x.Company
-		yym10 := z.DecBinary()
-		_ = yym10
-		if false {
-		} else {
-			z.F.DecMapStringIntfX(yyv9, false, d)
-		}
-	}
-	for {
-		yyj7++
-		if yyhl7 {
-			yyb7 = yyj7 > l
-		} else {
-			yyb7 = r.CheckBreak()
-		}
-		if yyb7 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj7-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x *DSUser) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [1]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(1)
-			} else {
-				yynn2 = 1
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym4 := z.EncBinary()
-				_ = yym4
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Username))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Username"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym5 := z.EncBinary()
-				_ = yym5
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Username))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *DSUser) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *DSUser) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "Username":
-			if r.TryDecodeAsNil() {
-				x.Username = ""
-			} else {
-				yyv4 := &x.Username
-				yym5 := z.DecBinary()
-				_ = yym5
-				if false {
-				} else {
-					*((*string)(yyv4)) = r.DecodeString()
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *DSUser) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj6 int
-	var yyb6 bool
-	var yyhl6 bool = l >= 0
-	yyj6++
-	if yyhl6 {
-		yyb6 = yyj6 > l
-	} else {
-		yyb6 = r.CheckBreak()
-	}
-	if yyb6 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Username = ""
-	} else {
-		yyv7 := &x.Username
-		yym8 := z.DecBinary()
-		_ = yym8
-		if false {
-		} else {
-			*((*string)(yyv7)) = r.DecodeString()
-		}
-	}
-	for {
-		yyj6++
-		if yyhl6 {
-			yyb6 = yyj6 > l
-		} else {
-			yyb6 = r.CheckBreak()
-		}
-		if yyb6 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj6-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x *DSTopic) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [2]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(2)
-			} else {
-				yynn2 = 2
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym4 := z.EncBinary()
-				_ = yym4
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Id))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Id"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym5 := z.EncBinary()
-				_ = yym5
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Id))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym7 := z.EncBinary()
-				_ = yym7
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Slug))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Slug"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym8 := z.EncBinary()
-				_ = yym8
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.Slug))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *DSTopic) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *DSTopic) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "Id":
-			if r.TryDecodeAsNil() {
-				x.Id = 0
-			} else {
-				yyv4 := &x.Id
-				yym5 := z.DecBinary()
-				_ = yym5
-				if false {
-				} else {
-					*((*int)(yyv4)) = int(r.DecodeInt(codecSelferBitsize6212))
-				}
-			}
-		case "Slug":
-			if r.TryDecodeAsNil() {
-				x.Slug = ""
-			} else {
-				yyv6 := &x.Slug
-				yym7 := z.DecBinary()
-				_ = yym7
-				if false {
-				} else {
-					*((*string)(yyv6)) = r.DecodeString()
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *DSTopic) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj8 int
-	var yyb8 bool
-	var yyhl8 bool = l >= 0
-	yyj8++
-	if yyhl8 {
-		yyb8 = yyj8 > l
-	} else {
-		yyb8 = r.CheckBreak()
-	}
-	if yyb8 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Id = 0
-	} else {
-		yyv9 := &x.Id
-		yym10 := z.DecBinary()
-		_ = yym10
-		if false {
-		} else {
-			*((*int)(yyv9)) = int(r.DecodeInt(codecSelferBitsize6212))
-		}
-	}
-	yyj8++
-	if yyhl8 {
-		yyb8 = yyj8 > l
-	} else {
-		yyb8 = r.CheckBreak()
-	}
-	if yyb8 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Slug = ""
-	} else {
-		yyv11 := &x.Slug
-		yym12 := z.DecBinary()
-		_ = yym12
-		if false {
-		} else {
-			*((*string)(yyv11)) = r.DecodeString()
-		}
-	}
-	for {
-		yyj8++
-		if yyhl8 {
-			yyb8 = yyj8 > l
-		} else {
-			yyb8 = r.CheckBreak()
-		}
-		if yyb8 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj8-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x *DSTopicsList) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [2]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(2)
-			} else {
-				yynn2 = 2
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				if x.Topics == nil {
-					r.EncodeNil()
-				} else {
-					yym4 := z.EncBinary()
-					_ = yym4
-					if false {
-					} else {
-						h.encSlicePtrtoDSTopic(([]*DSTopic)(x.Topics), e)
-					}
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Topics"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				if x.Topics == nil {
-					r.EncodeNil()
-				} else {
-					yym5 := z.EncBinary()
-					_ = yym5
-					if false {
-					} else {
-						h.encSlicePtrtoDSTopic(([]*DSTopic)(x.Topics), e)
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				yym7 := z.EncBinary()
-				_ = yym7
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.MoreTopicsUrl))
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("MoreTopicsUrl"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				yym8 := z.EncBinary()
-				_ = yym8
-				if false {
-				} else {
-					r.EncodeString(codecSelferC_UTF86212, string(x.MoreTopicsUrl))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *DSTopicsList) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *DSTopicsList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "Topics":
-			if r.TryDecodeAsNil() {
-				x.Topics = nil
-			} else {
-				yyv4 := &x.Topics
-				yym5 := z.DecBinary()
-				_ = yym5
-				if false {
-				} else {
-					h.decSlicePtrtoDSTopic((*[]*DSTopic)(yyv4), d)
-				}
-			}
-		case "MoreTopicsUrl":
-			if r.TryDecodeAsNil() {
-				x.MoreTopicsUrl = ""
-			} else {
-				yyv6 := &x.MoreTopicsUrl
-				yym7 := z.DecBinary()
-				_ = yym7
-				if false {
-				} else {
-					*((*string)(yyv6)) = r.DecodeString()
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *DSTopicsList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj8 int
-	var yyb8 bool
-	var yyhl8 bool = l >= 0
-	yyj8++
-	if yyhl8 {
-		yyb8 = yyj8 > l
-	} else {
-		yyb8 = r.CheckBreak()
-	}
-	if yyb8 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Topics = nil
-	} else {
-		yyv9 := &x.Topics
-		yym10 := z.DecBinary()
-		_ = yym10
-		if false {
-		} else {
-			h.decSlicePtrtoDSTopic((*[]*DSTopic)(yyv9), d)
-		}
-	}
-	yyj8++
-	if yyhl8 {
-		yyb8 = yyj8 > l
-	} else {
-		yyb8 = r.CheckBreak()
-	}
-	if yyb8 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.MoreTopicsUrl = ""
-	} else {
-		yyv11 := &x.MoreTopicsUrl
-		yym12 := z.DecBinary()
-		_ = yym12
-		if false {
-		} else {
-			*((*string)(yyv11)) = r.DecodeString()
-		}
-	}
-	for {
-		yyj8++
-		if yyhl8 {
-			yyb8 = yyj8 > l
-		} else {
-			yyb8 = r.CheckBreak()
-		}
-		if yyb8 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj8-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x *LargePayload) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		yym1 := z.EncBinary()
-		_ = yym1
-		if false {
-		} else if z.HasExtensions() && z.EncExt(x) {
-		} else if !yym1 && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			var yyq2 [2]bool
-			_, _, _ = yysep2, yyq2, yy2arr2
-			const yyr2 bool = false
-			var yynn2 int
-			if yyr2 || yy2arr2 {
-				r.EncodeArrayStart(2)
-			} else {
-				yynn2 = 2
-				for _, b := range yyq2 {
-					if b {
-						yynn2++
-					}
-				}
-				r.EncodeMapStart(yynn2)
-				yynn2 = 0
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				if x.Users == nil {
-					r.EncodeNil()
-				} else {
-					yym4 := z.EncBinary()
-					_ = yym4
-					if false {
-					} else {
-						h.encSlicePtrtoDSUser(([]*DSUser)(x.Users), e)
-					}
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Users"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				if x.Users == nil {
-					r.EncodeNil()
-				} else {
-					yym5 := z.EncBinary()
-					_ = yym5
-					if false {
-					} else {
-						h.encSlicePtrtoDSUser(([]*DSUser)(x.Users), e)
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-				if x.Topics == nil {
-					r.EncodeNil()
-				} else {
-					x.Topics.CodecEncodeSelf(e)
-				}
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapKey6212)
-				r.EncodeString(codecSelferC_UTF86212, string("Topics"))
-				z.EncSendContainerState(codecSelfer_containerMapValue6212)
-				if x.Topics == nil {
-					r.EncodeNil()
-				} else {
-					x.Topics.CodecEncodeSelf(e)
-				}
-			}
-			if yyr2 || yy2arr2 {
-				z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				z.EncSendContainerState(codecSelfer_containerMapEnd6212)
-			}
-		}
-	}
-}
-
-func (x *LargePayload) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	yym1 := z.DecBinary()
-	_ = yym1
-	if false {
-	} else if z.HasExtensions() && z.DecExt(x) {
-	} else if !yym1 && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6212 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6212 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(codecSelferOnlyMapOrArrayEncodeToStructErr6212)
-		}
-	}
-}
-
-func (x *LargePayload) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yys3Slc = z.DecScratchBuffer() // default slice to decode into
-	_ = yys3Slc
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		z.DecSendContainerState(codecSelfer_containerMapKey6212)
-		yys3Slc = r.DecodeBytes(yys3Slc, true, true)
-		yys3 := string(yys3Slc)
-		z.DecSendContainerState(codecSelfer_containerMapValue6212)
-		switch yys3 {
-		case "Users":
-			if r.TryDecodeAsNil() {
-				x.Users = nil
-			} else {
-				yyv4 := &x.Users
-				yym5 := z.DecBinary()
-				_ = yym5
-				if false {
-				} else {
-					h.decSlicePtrtoDSUser((*[]*DSUser)(yyv4), d)
-				}
-			}
-		case "Topics":
-			if r.TryDecodeAsNil() {
-				if x.Topics != nil {
-					x.Topics = nil
-				}
-			} else {
-				if x.Topics == nil {
-					x.Topics = new(DSTopicsList)
-				}
-				x.Topics.CodecDecodeSelf(d)
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	z.DecSendContainerState(codecSelfer_containerMapEnd6212)
-}
-
-func (x *LargePayload) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj7 int
-	var yyb7 bool
-	var yyhl7 bool = l >= 0
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		x.Users = nil
-	} else {
-		yyv8 := &x.Users
-		yym9 := z.DecBinary()
-		_ = yym9
-		if false {
-		} else {
-			h.decSlicePtrtoDSUser((*[]*DSUser)(yyv8), d)
-		}
-	}
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-		return
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-	if r.TryDecodeAsNil() {
-		if x.Topics != nil {
-			x.Topics = nil
-		}
-	} else {
-		if x.Topics == nil {
-			x.Topics = new(DSTopicsList)
-		}
-		x.Topics.CodecDecodeSelf(d)
-	}
-	for {
-		yyj7++
-		if yyhl7 {
-			yyb7 = yyj7 > l
-		} else {
-			yyb7 = r.CheckBreak()
-		}
-		if yyb7 {
-			break
-		}
-		z.DecSendContainerState(codecSelfer_containerArrayElem6212)
-		z.DecStructFieldNotFound(yyj7-1, "")
-	}
-	z.DecSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x codecSelfer6212) encSlicePtrtoCBAvatar(v []*CBAvatar, e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	r.EncodeArrayStart(len(v))
-	for _, yyv1 := range v {
-		z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-		if yyv1 == nil {
-			r.EncodeNil()
-		} else {
-			yyv1.CodecEncodeSelf(e)
-		}
-	}
-	z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x codecSelfer6212) decSlicePtrtoCBAvatar(v *[]*CBAvatar, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-
-	yyv1 := *v
-	yyh1, yyl1 := z.DecSliceHelperStart()
-	var yyc1 bool
-	_ = yyc1
-	if yyl1 == 0 {
-		if yyv1 == nil {
-			yyv1 = []*CBAvatar{}
-			yyc1 = true
-		} else if len(yyv1) != 0 {
-			yyv1 = yyv1[:0]
-			yyc1 = true
-		}
-	} else if yyl1 > 0 {
-		var yyrr1, yyrl1 int
-		var yyrt1 bool
-		_, _ = yyrl1, yyrt1
-		yyrr1 = yyl1 // len(yyv1)
-		if yyl1 > cap(yyv1) {
-
-			yyrg1 := len(yyv1) > 0
-			yyv21 := yyv1
-			yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8)
-			if yyrt1 {
-				if yyrl1 <= cap(yyv1) {
-					yyv1 = yyv1[:yyrl1]
-				} else {
-					yyv1 = make([]*CBAvatar, yyrl1)
-				}
-			} else {
-				yyv1 = make([]*CBAvatar, yyrl1)
-			}
-			yyc1 = true
-			yyrr1 = len(yyv1)
-			if yyrg1 {
-				copy(yyv1, yyv21)
-			}
-		} else if yyl1 != len(yyv1) {
-			yyv1 = yyv1[:yyl1]
-			yyc1 = true
-		}
-		yyj1 := 0
-		for ; yyj1 < yyrr1; yyj1++ {
-			yyh1.ElemContainerState(yyj1)
-			if r.TryDecodeAsNil() {
-				if yyv1[yyj1] != nil {
-					*yyv1[yyj1] = CBAvatar{}
-				}
-			} else {
-				if yyv1[yyj1] == nil {
-					yyv1[yyj1] = new(CBAvatar)
-				}
-				yyw2 := yyv1[yyj1]
-				yyw2.CodecDecodeSelf(d)
-			}
-
-		}
-		if yyrt1 {
-			for ; yyj1 < yyl1; yyj1++ {
-				yyv1 = append(yyv1, nil)
-				yyh1.ElemContainerState(yyj1)
-				if r.TryDecodeAsNil() {
-					if yyv1[yyj1] != nil {
-						*yyv1[yyj1] = CBAvatar{}
-					}
-				} else {
-					if yyv1[yyj1] == nil {
-						yyv1[yyj1] = new(CBAvatar)
-					}
-					yyw3 := yyv1[yyj1]
-					yyw3.CodecDecodeSelf(d)
-				}
-
-			}
-		}
-
-	} else {
-		yyj1 := 0
-		for ; !r.CheckBreak(); yyj1++ {
-
-			if yyj1 >= len(yyv1) {
-				yyv1 = append(yyv1, nil) // var yyz1 *CBAvatar
-				yyc1 = true
-			}
-			yyh1.ElemContainerState(yyj1)
-			if yyj1 < len(yyv1) {
-				if r.TryDecodeAsNil() {
-					if yyv1[yyj1] != nil {
-						*yyv1[yyj1] = CBAvatar{}
-					}
-				} else {
-					if yyv1[yyj1] == nil {
-						yyv1[yyj1] = new(CBAvatar)
-					}
-					yyw4 := yyv1[yyj1]
-					yyw4.CodecDecodeSelf(d)
-				}
-
-			} else {
-				z.DecSwallow()
-			}
-
-		}
-		if yyj1 < len(yyv1) {
-			yyv1 = yyv1[:yyj1]
-			yyc1 = true
-		} else if yyj1 == 0 && yyv1 == nil {
-			yyv1 = []*CBAvatar{}
-			yyc1 = true
-		}
-	}
-	yyh1.End()
-	if yyc1 {
-		*v = yyv1
-	}
-}
-
-func (x codecSelfer6212) encSlicePtrtoDSTopic(v []*DSTopic, e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	r.EncodeArrayStart(len(v))
-	for _, yyv1 := range v {
-		z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-		if yyv1 == nil {
-			r.EncodeNil()
-		} else {
-			yyv1.CodecEncodeSelf(e)
-		}
-	}
-	z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x codecSelfer6212) decSlicePtrtoDSTopic(v *[]*DSTopic, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-
-	yyv1 := *v
-	yyh1, yyl1 := z.DecSliceHelperStart()
-	var yyc1 bool
-	_ = yyc1
-	if yyl1 == 0 {
-		if yyv1 == nil {
-			yyv1 = []*DSTopic{}
-			yyc1 = true
-		} else if len(yyv1) != 0 {
-			yyv1 = yyv1[:0]
-			yyc1 = true
-		}
-	} else if yyl1 > 0 {
-		var yyrr1, yyrl1 int
-		var yyrt1 bool
-		_, _ = yyrl1, yyrt1
-		yyrr1 = yyl1 // len(yyv1)
-		if yyl1 > cap(yyv1) {
-
-			yyrg1 := len(yyv1) > 0
-			yyv21 := yyv1
-			yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8)
-			if yyrt1 {
-				if yyrl1 <= cap(yyv1) {
-					yyv1 = yyv1[:yyrl1]
-				} else {
-					yyv1 = make([]*DSTopic, yyrl1)
-				}
-			} else {
-				yyv1 = make([]*DSTopic, yyrl1)
-			}
-			yyc1 = true
-			yyrr1 = len(yyv1)
-			if yyrg1 {
-				copy(yyv1, yyv21)
-			}
-		} else if yyl1 != len(yyv1) {
-			yyv1 = yyv1[:yyl1]
-			yyc1 = true
-		}
-		yyj1 := 0
-		for ; yyj1 < yyrr1; yyj1++ {
-			yyh1.ElemContainerState(yyj1)
-			if r.TryDecodeAsNil() {
-				if yyv1[yyj1] != nil {
-					*yyv1[yyj1] = DSTopic{}
-				}
-			} else {
-				if yyv1[yyj1] == nil {
-					yyv1[yyj1] = new(DSTopic)
-				}
-				yyw2 := yyv1[yyj1]
-				yyw2.CodecDecodeSelf(d)
-			}
-
-		}
-		if yyrt1 {
-			for ; yyj1 < yyl1; yyj1++ {
-				yyv1 = append(yyv1, nil)
-				yyh1.ElemContainerState(yyj1)
-				if r.TryDecodeAsNil() {
-					if yyv1[yyj1] != nil {
-						*yyv1[yyj1] = DSTopic{}
-					}
-				} else {
-					if yyv1[yyj1] == nil {
-						yyv1[yyj1] = new(DSTopic)
-					}
-					yyw3 := yyv1[yyj1]
-					yyw3.CodecDecodeSelf(d)
-				}
-
-			}
-		}
-
-	} else {
-		yyj1 := 0
-		for ; !r.CheckBreak(); yyj1++ {
-
-			if yyj1 >= len(yyv1) {
-				yyv1 = append(yyv1, nil) // var yyz1 *DSTopic
-				yyc1 = true
-			}
-			yyh1.ElemContainerState(yyj1)
-			if yyj1 < len(yyv1) {
-				if r.TryDecodeAsNil() {
-					if yyv1[yyj1] != nil {
-						*yyv1[yyj1] = DSTopic{}
-					}
-				} else {
-					if yyv1[yyj1] == nil {
-						yyv1[yyj1] = new(DSTopic)
-					}
-					yyw4 := yyv1[yyj1]
-					yyw4.CodecDecodeSelf(d)
-				}
-
-			} else {
-				z.DecSwallow()
-			}
-
-		}
-		if yyj1 < len(yyv1) {
-			yyv1 = yyv1[:yyj1]
-			yyc1 = true
-		} else if yyj1 == 0 && yyv1 == nil {
-			yyv1 = []*DSTopic{}
-			yyc1 = true
-		}
-	}
-	yyh1.End()
-	if yyc1 {
-		*v = yyv1
-	}
-}
-
-func (x codecSelfer6212) encSlicePtrtoDSUser(v []*DSUser, e *codec1978.Encoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	r.EncodeArrayStart(len(v))
-	for _, yyv1 := range v {
-		z.EncSendContainerState(codecSelfer_containerArrayElem6212)
-		if yyv1 == nil {
-			r.EncodeNil()
-		} else {
-			yyv1.CodecEncodeSelf(e)
-		}
-	}
-	z.EncSendContainerState(codecSelfer_containerArrayEnd6212)
-}
-
-func (x codecSelfer6212) decSlicePtrtoDSUser(v *[]*DSUser, d *codec1978.Decoder) {
-	var h codecSelfer6212
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-
-	yyv1 := *v
-	yyh1, yyl1 := z.DecSliceHelperStart()
-	var yyc1 bool
-	_ = yyc1
-	if yyl1 == 0 {
-		if yyv1 == nil {
-			yyv1 = []*DSUser{}
-			yyc1 = true
-		} else if len(yyv1) != 0 {
-			yyv1 = yyv1[:0]
-			yyc1 = true
-		}
-	} else if yyl1 > 0 {
-		var yyrr1, yyrl1 int
-		var yyrt1 bool
-		_, _ = yyrl1, yyrt1
-		yyrr1 = yyl1 // len(yyv1)
-		if yyl1 > cap(yyv1) {
-
-			yyrg1 := len(yyv1) > 0
-			yyv21 := yyv1
-			yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8)
-			if yyrt1 {
-				if yyrl1 <= cap(yyv1) {
-					yyv1 = yyv1[:yyrl1]
-				} else {
-					yyv1 = make([]*DSUser, yyrl1)
-				}
-			} else {
-				yyv1 = make([]*DSUser, yyrl1)
-			}
-			yyc1 = true
-			yyrr1 = len(yyv1)
-			if yyrg1 {
-				copy(yyv1, yyv21)
-			}
-		} else if yyl1 != len(yyv1) {
-			yyv1 = yyv1[:yyl1]
-			yyc1 = true
-		}
-		yyj1 := 0
-		for ; yyj1 < yyrr1; yyj1++ {
-			yyh1.ElemContainerState(yyj1)
-			if r.TryDecodeAsNil() {
-				if yyv1[yyj1] != nil {
-					*yyv1[yyj1] = DSUser{}
-				}
-			} else {
-				if yyv1[yyj1] == nil {
-					yyv1[yyj1] = new(DSUser)
-				}
-				yyw2 := yyv1[yyj1]
-				yyw2.CodecDecodeSelf(d)
-			}
-
-		}
-		if yyrt1 {
-			for ; yyj1 < yyl1; yyj1++ {
-				yyv1 = append(yyv1, nil)
-				yyh1.ElemContainerState(yyj1)
-				if r.TryDecodeAsNil() {
-					if yyv1[yyj1] != nil {
-						*yyv1[yyj1] = DSUser{}
-					}
-				} else {
-					if yyv1[yyj1] == nil {
-						yyv1[yyj1] = new(DSUser)
-					}
-					yyw3 := yyv1[yyj1]
-					yyw3.CodecDecodeSelf(d)
-				}
-
-			}
-		}
-
-	} else {
-		yyj1 := 0
-		for ; !r.CheckBreak(); yyj1++ {
-
-			if yyj1 >= len(yyv1) {
-				yyv1 = append(yyv1, nil) // var yyz1 *DSUser
-				yyc1 = true
-			}
-			yyh1.ElemContainerState(yyj1)
-			if yyj1 < len(yyv1) {
-				if r.TryDecodeAsNil() {
-					if yyv1[yyj1] != nil {
-						*yyv1[yyj1] = DSUser{}
-					}
-				} else {
-					if yyv1[yyj1] == nil {
-						yyv1[yyj1] = new(DSUser)
-					}
-					yyw4 := yyv1[yyj1]
-					yyw4.CodecDecodeSelf(d)
-				}
-
-			} else {
-				z.DecSwallow()
-			}
-
-		}
-		if yyj1 < len(yyv1) {
-			yyv1 = yyv1[:yyj1]
-			yyc1 = true
-		} else if yyj1 == 0 && yyv1 == nil {
-			yyv1 = []*DSUser{}
-			yyc1 = true
-		}
-	}
-	yyh1.End()
-	if yyc1 {
-		*v = yyv1
-	}
-}
--- a/benchmark/benchmark_easyjson.go
+++ /dev/null
@@ -1,701 +0,0 @@
-package benchmark
-
-import (
-	json "encoding/json"
-	jlexer "github.com/mailru/easyjson/jlexer"
-	jwriter "github.com/mailru/easyjson/jwriter"
-)
-
-var _ = json.RawMessage{} // suppress unused package warning
-
-func easyjson_decode_github_com_buger_jsonparser_benchmark_LargePayload(in *jlexer.Lexer, out *LargePayload) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "users":
-			in.Delim('[')
-			if !in.IsDelim(']') {
-				out.Users = make([]*DSUser, 0, 8)
-			} else {
-				out.Users = nil
-			}
-			for !in.IsDelim(']') {
-				var v1 *DSUser
-				if in.IsNull() {
-					in.Skip()
-					v1 = nil
-				} else {
-					v1 = new(DSUser)
-					(*v1).UnmarshalEasyJSON(in)
-				}
-				out.Users = append(out.Users, v1)
-				in.WantComma()
-			}
-			in.Delim(']')
-		case "topics":
-			if in.IsNull() {
-				in.Skip()
-				out.Topics = nil
-			} else {
-				out.Topics = new(DSTopicsList)
-				(*out.Topics).UnmarshalEasyJSON(in)
-			}
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_LargePayload(out *jwriter.Writer, in *LargePayload) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"users\":")
-	out.RawByte('[')
-	for v2, v3 := range in.Users {
-		if v2 > 0 {
-			out.RawByte(',')
-		}
-		if v3 == nil {
-			out.RawString("null")
-		} else {
-			(*v3).MarshalEasyJSON(out)
-		}
-	}
-	out.RawByte(']')
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"topics\":")
-	if in.Topics == nil {
-		out.RawString("null")
-	} else {
-		(*in.Topics).MarshalEasyJSON(out)
-	}
-	out.RawByte('}')
-}
-func (v *LargePayload) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_LargePayload(w, v)
-}
-func (v *LargePayload) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_LargePayload(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_DSTopicsList(in *jlexer.Lexer, out *DSTopicsList) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "topics":
-			in.Delim('[')
-			if !in.IsDelim(']') {
-				out.Topics = make([]*DSTopic, 0, 8)
-			} else {
-				out.Topics = nil
-			}
-			for !in.IsDelim(']') {
-				var v4 *DSTopic
-				if in.IsNull() {
-					in.Skip()
-					v4 = nil
-				} else {
-					v4 = new(DSTopic)
-					(*v4).UnmarshalEasyJSON(in)
-				}
-				out.Topics = append(out.Topics, v4)
-				in.WantComma()
-			}
-			in.Delim(']')
-		case "more_topics_url":
-			out.MoreTopicsUrl = in.String()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_DSTopicsList(out *jwriter.Writer, in *DSTopicsList) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"topics\":")
-	out.RawByte('[')
-	for v5, v6 := range in.Topics {
-		if v5 > 0 {
-			out.RawByte(',')
-		}
-		if v6 == nil {
-			out.RawString("null")
-		} else {
-			(*v6).MarshalEasyJSON(out)
-		}
-	}
-	out.RawByte(']')
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"more_topics_url\":")
-	out.String(in.MoreTopicsUrl)
-	out.RawByte('}')
-}
-func (v *DSTopicsList) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_DSTopicsList(w, v)
-}
-func (v *DSTopicsList) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_DSTopicsList(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_DSTopic(in *jlexer.Lexer, out *DSTopic) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "id":
-			out.Id = in.Int()
-		case "slug":
-			out.Slug = in.String()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_DSTopic(out *jwriter.Writer, in *DSTopic) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"id\":")
-	out.Int(in.Id)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"slug\":")
-	out.String(in.Slug)
-	out.RawByte('}')
-}
-func (v *DSTopic) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_DSTopic(w, v)
-}
-func (v *DSTopic) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_DSTopic(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_DSUser(in *jlexer.Lexer, out *DSUser) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "username":
-			out.Username = in.String()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_DSUser(out *jwriter.Writer, in *DSUser) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"username\":")
-	out.String(in.Username)
-	out.RawByte('}')
-}
-func (v *DSUser) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_DSUser(w, v)
-}
-func (v *DSUser) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_DSUser(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_MediumPayload(in *jlexer.Lexer, out *MediumPayload) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "person":
-			if in.IsNull() {
-				in.Skip()
-				out.Person = nil
-			} else {
-				out.Person = new(CBPerson)
-				(*out.Person).UnmarshalEasyJSON(in)
-			}
-		case "company":
-			in.Delim('{')
-			if !in.IsDelim('}') {
-				out.Company = make(map[string]interface{})
-			} else {
-				out.Company = nil
-			}
-			for !in.IsDelim('}') {
-				key := in.String()
-				in.WantColon()
-				var v7 interface{}
-				v7 = in.Interface()
-				(out.Company)[key] = v7
-				in.WantComma()
-			}
-			in.Delim('}')
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_MediumPayload(out *jwriter.Writer, in *MediumPayload) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"person\":")
-	if in.Person == nil {
-		out.RawString("null")
-	} else {
-		(*in.Person).MarshalEasyJSON(out)
-	}
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"company\":")
-	out.RawByte('{')
-	v8_first := true
-	for v8_name, v8_value := range in.Company {
-		if !v8_first {
-			out.RawByte(',')
-		}
-		v8_first = false
-		out.String(v8_name)
-		out.Raw(json.Marshal(v8_value))
-	}
-	out.RawByte('}')
-	out.RawByte('}')
-}
-func (v *MediumPayload) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_MediumPayload(w, v)
-}
-func (v *MediumPayload) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_MediumPayload(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_CBPerson(in *jlexer.Lexer, out *CBPerson) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "name":
-			if in.IsNull() {
-				in.Skip()
-				out.Name = nil
-			} else {
-				out.Name = new(CBName)
-				(*out.Name).UnmarshalEasyJSON(in)
-			}
-		case "github":
-			if in.IsNull() {
-				in.Skip()
-				out.Github = nil
-			} else {
-				out.Github = new(CBGithub)
-				(*out.Github).UnmarshalEasyJSON(in)
-			}
-		case "gravatar":
-			if in.IsNull() {
-				in.Skip()
-				out.Gravatar = nil
-			} else {
-				out.Gravatar = new(CBGravatar)
-				(*out.Gravatar).UnmarshalEasyJSON(in)
-			}
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_CBPerson(out *jwriter.Writer, in *CBPerson) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"name\":")
-	if in.Name == nil {
-		out.RawString("null")
-	} else {
-		(*in.Name).MarshalEasyJSON(out)
-	}
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"github\":")
-	if in.Github == nil {
-		out.RawString("null")
-	} else {
-		(*in.Github).MarshalEasyJSON(out)
-	}
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"gravatar\":")
-	if in.Gravatar == nil {
-		out.RawString("null")
-	} else {
-		(*in.Gravatar).MarshalEasyJSON(out)
-	}
-	out.RawByte('}')
-}
-func (v *CBPerson) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_CBPerson(w, v)
-}
-func (v *CBPerson) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_CBPerson(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_CBName(in *jlexer.Lexer, out *CBName) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "full_name":
-			out.FullName = in.String()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_CBName(out *jwriter.Writer, in *CBName) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"full_name\":")
-	out.String(in.FullName)
-	out.RawByte('}')
-}
-func (v *CBName) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_CBName(w, v)
-}
-func (v *CBName) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_CBName(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_CBGithub(in *jlexer.Lexer, out *CBGithub) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "followers":
-			out.Followers = in.Int()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_CBGithub(out *jwriter.Writer, in *CBGithub) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"followers\":")
-	out.Int(in.Followers)
-	out.RawByte('}')
-}
-func (v *CBGithub) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_CBGithub(w, v)
-}
-func (v *CBGithub) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_CBGithub(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_CBGravatar(in *jlexer.Lexer, out *CBGravatar) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "avatars":
-			in.Delim('[')
-			if !in.IsDelim(']') {
-				out.Avatars = make([]*CBAvatar, 0, 8)
-			} else {
-				out.Avatars = nil
-			}
-			for !in.IsDelim(']') {
-				var v9 *CBAvatar
-				if in.IsNull() {
-					in.Skip()
-					v9 = nil
-				} else {
-					v9 = new(CBAvatar)
-					(*v9).UnmarshalEasyJSON(in)
-				}
-				out.Avatars = append(out.Avatars, v9)
-				in.WantComma()
-			}
-			in.Delim(']')
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_CBGravatar(out *jwriter.Writer, in *CBGravatar) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"avatars\":")
-	out.RawByte('[')
-	for v10, v11 := range in.Avatars {
-		if v10 > 0 {
-			out.RawByte(',')
-		}
-		if v11 == nil {
-			out.RawString("null")
-		} else {
-			(*v11).MarshalEasyJSON(out)
-		}
-	}
-	out.RawByte(']')
-	out.RawByte('}')
-}
-func (v *CBGravatar) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_CBGravatar(w, v)
-}
-func (v *CBGravatar) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_CBGravatar(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_CBAvatar(in *jlexer.Lexer, out *CBAvatar) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "url":
-			out.Url = in.String()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_CBAvatar(out *jwriter.Writer, in *CBAvatar) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"url\":")
-	out.String(in.Url)
-	out.RawByte('}')
-}
-func (v *CBAvatar) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_CBAvatar(w, v)
-}
-func (v *CBAvatar) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_CBAvatar(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_SmallPayload(in *jlexer.Lexer, out *SmallPayload) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "st":
-			out.St = in.Int()
-		case "sid":
-			out.Sid = in.Int()
-		case "tt":
-			out.Tt = in.String()
-		case "gr":
-			out.Gr = in.Int()
-		case "uuid":
-			out.Uuid = in.String()
-		case "ip":
-			out.Ip = in.String()
-		case "ua":
-			out.Ua = in.String()
-		case "tz":
-			out.Tz = in.Int()
-		case "v":
-			out.V = in.Int()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_SmallPayload(out *jwriter.Writer, in *SmallPayload) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"st\":")
-	out.Int(in.St)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"sid\":")
-	out.Int(in.Sid)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"tt\":")
-	out.String(in.Tt)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"gr\":")
-	out.Int(in.Gr)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"uuid\":")
-	out.String(in.Uuid)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"ip\":")
-	out.String(in.Ip)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"ua\":")
-	out.String(in.Ua)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"tz\":")
-	out.Int(in.Tz)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"v\":")
-	out.Int(in.V)
-	out.RawByte('}')
-}
-func (v *SmallPayload) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_SmallPayload(w, v)
-}
-func (v *SmallPayload) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_SmallPayload(l, v)
-}
--- a/benchmark/benchmark_ffjson.go
+++ /dev/null
@@ -1,3141 +0,0 @@
-// DO NOT EDIT!
-// Code generated by ffjson <https://github.com/pquerna/ffjson>
-// source: benchmark.go
-// DO NOT EDIT!
-
-package benchmark
-
-import (
-	"bytes"
-	"encoding/json"
-	"fmt"
-	fflib "github.com/pquerna/ffjson/fflib/v1"
-)
-
-func (mj *CBAvatar) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *CBAvatar) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Url":`)
-	fflib.WriteJsonString(buf, string(mj.Url))
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_CBAvatarbase = iota
-	ffj_t_CBAvatarno_such_key
-
-	ffj_t_CBAvatar_Url
-)
-
-var ffj_key_CBAvatar_Url = []byte("Url")
-
-func (uj *CBAvatar) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *CBAvatar) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_CBAvatarbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_CBAvatarno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'U':
-
-					if bytes.Equal(ffj_key_CBAvatar_Url, kn) {
-						currentKey = ffj_t_CBAvatar_Url
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_CBAvatar_Url, kn) {
-					currentKey = ffj_t_CBAvatar_Url
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_CBAvatarno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_CBAvatar_Url:
-					goto handle_Url
-
-				case ffj_t_CBAvatarno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Url:
-
-	/* handler: uj.Url type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Url = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *CBGithub) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *CBGithub) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Followers":`)
-	fflib.FormatBits2(buf, uint64(mj.Followers), 10, mj.Followers < 0)
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_CBGithubbase = iota
-	ffj_t_CBGithubno_such_key
-
-	ffj_t_CBGithub_Followers
-)
-
-var ffj_key_CBGithub_Followers = []byte("Followers")
-
-func (uj *CBGithub) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *CBGithub) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_CBGithubbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_CBGithubno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'F':
-
-					if bytes.Equal(ffj_key_CBGithub_Followers, kn) {
-						currentKey = ffj_t_CBGithub_Followers
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_CBGithub_Followers, kn) {
-					currentKey = ffj_t_CBGithub_Followers
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_CBGithubno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_CBGithub_Followers:
-					goto handle_Followers
-
-				case ffj_t_CBGithubno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Followers:
-
-	/* handler: uj.Followers type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.Followers = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *CBGravatar) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *CBGravatar) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Avatars":`)
-	if mj.Avatars != nil {
-		buf.WriteString(`[`)
-		for i, v := range mj.Avatars {
-			if i != 0 {
-				buf.WriteString(`,`)
-			}
-
-			{
-
-				if v == nil {
-					buf.WriteString("null")
-					return nil
-				}
-
-				err = v.MarshalJSONBuf(buf)
-				if err != nil {
-					return err
-				}
-
-			}
-		}
-		buf.WriteString(`]`)
-	} else {
-		buf.WriteString(`null`)
-	}
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_CBGravatarbase = iota
-	ffj_t_CBGravatarno_such_key
-
-	ffj_t_CBGravatar_Avatars
-)
-
-var ffj_key_CBGravatar_Avatars = []byte("Avatars")
-
-func (uj *CBGravatar) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *CBGravatar) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_CBGravatarbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_CBGravatarno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'A':
-
-					if bytes.Equal(ffj_key_CBGravatar_Avatars, kn) {
-						currentKey = ffj_t_CBGravatar_Avatars
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_CBGravatar_Avatars, kn) {
-					currentKey = ffj_t_CBGravatar_Avatars
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_CBGravatarno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_CBGravatar_Avatars:
-					goto handle_Avatars
-
-				case ffj_t_CBGravatarno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Avatars:
-
-	/* handler: uj.Avatars type=[]*benchmark.CBAvatar kind=slice quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-			uj.Avatars = nil
-		} else {
-
-			uj.Avatars = make([]*CBAvatar, 0)
-
-			wantVal := true
-
-			for {
-
-				var tmp_uj__Avatars *CBAvatar
-
-				tok = fs.Scan()
-				if tok == fflib.FFTok_error {
-					goto tokerror
-				}
-				if tok == fflib.FFTok_right_brace {
-					break
-				}
-
-				if tok == fflib.FFTok_comma {
-					if wantVal == true {
-						// TODO(pquerna): this isn't an ideal error message, this handles
-						// things like [,,,] as an array value.
-						return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-					}
-					continue
-				} else {
-					wantVal = true
-				}
-
-				/* handler: tmp_uj__Avatars type=*benchmark.CBAvatar kind=ptr quoted=false*/
-
-				{
-					if tok == fflib.FFTok_null {
-
-						tmp_uj__Avatars = nil
-
-						state = fflib.FFParse_after_value
-						goto mainparse
-					}
-
-					if tmp_uj__Avatars == nil {
-						tmp_uj__Avatars = new(CBAvatar)
-					}
-
-					err = tmp_uj__Avatars.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-					if err != nil {
-						return err
-					}
-					state = fflib.FFParse_after_value
-				}
-
-				uj.Avatars = append(uj.Avatars, tmp_uj__Avatars)
-				wantVal = false
-			}
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *CBName) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *CBName) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"FullName":`)
-	fflib.WriteJsonString(buf, string(mj.FullName))
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_CBNamebase = iota
-	ffj_t_CBNameno_such_key
-
-	ffj_t_CBName_FullName
-)
-
-var ffj_key_CBName_FullName = []byte("FullName")
-
-func (uj *CBName) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *CBName) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_CBNamebase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_CBNameno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'F':
-
-					if bytes.Equal(ffj_key_CBName_FullName, kn) {
-						currentKey = ffj_t_CBName_FullName
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_CBName_FullName, kn) {
-					currentKey = ffj_t_CBName_FullName
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_CBNameno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_CBName_FullName:
-					goto handle_FullName
-
-				case ffj_t_CBNameno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_FullName:
-
-	/* handler: uj.FullName type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.FullName = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *CBPerson) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *CBPerson) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	if mj.Name != nil {
-		buf.WriteString(`{"Name":`)
-
-		{
-
-			err = mj.Name.MarshalJSONBuf(buf)
-			if err != nil {
-				return err
-			}
-
-		}
-	} else {
-		buf.WriteString(`{"Name":null`)
-	}
-	if mj.Github != nil {
-		buf.WriteString(`,"Github":`)
-
-		{
-
-			err = mj.Github.MarshalJSONBuf(buf)
-			if err != nil {
-				return err
-			}
-
-		}
-	} else {
-		buf.WriteString(`,"Github":null`)
-	}
-	if mj.Gravatar != nil {
-		buf.WriteString(`,"Gravatar":`)
-
-		{
-
-			err = mj.Gravatar.MarshalJSONBuf(buf)
-			if err != nil {
-				return err
-			}
-
-		}
-	} else {
-		buf.WriteString(`,"Gravatar":null`)
-	}
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_CBPersonbase = iota
-	ffj_t_CBPersonno_such_key
-
-	ffj_t_CBPerson_Name
-
-	ffj_t_CBPerson_Github
-
-	ffj_t_CBPerson_Gravatar
-)
-
-var ffj_key_CBPerson_Name = []byte("Name")
-
-var ffj_key_CBPerson_Github = []byte("Github")
-
-var ffj_key_CBPerson_Gravatar = []byte("Gravatar")
-
-func (uj *CBPerson) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *CBPerson) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_CBPersonbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_CBPersonno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'G':
-
-					if bytes.Equal(ffj_key_CBPerson_Github, kn) {
-						currentKey = ffj_t_CBPerson_Github
-						state = fflib.FFParse_want_colon
-						goto mainparse
-
-					} else if bytes.Equal(ffj_key_CBPerson_Gravatar, kn) {
-						currentKey = ffj_t_CBPerson_Gravatar
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'N':
-
-					if bytes.Equal(ffj_key_CBPerson_Name, kn) {
-						currentKey = ffj_t_CBPerson_Name
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_CBPerson_Gravatar, kn) {
-					currentKey = ffj_t_CBPerson_Gravatar
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_CBPerson_Github, kn) {
-					currentKey = ffj_t_CBPerson_Github
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_CBPerson_Name, kn) {
-					currentKey = ffj_t_CBPerson_Name
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_CBPersonno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_CBPerson_Name:
-					goto handle_Name
-
-				case ffj_t_CBPerson_Github:
-					goto handle_Github
-
-				case ffj_t_CBPerson_Gravatar:
-					goto handle_Gravatar
-
-				case ffj_t_CBPersonno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Name:
-
-	/* handler: uj.Name type=benchmark.CBName kind=struct quoted=false*/
-
-	{
-		if tok == fflib.FFTok_null {
-
-			uj.Name = nil
-
-			state = fflib.FFParse_after_value
-			goto mainparse
-		}
-
-		if uj.Name == nil {
-			uj.Name = new(CBName)
-		}
-
-		err = uj.Name.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-		if err != nil {
-			return err
-		}
-		state = fflib.FFParse_after_value
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Github:
-
-	/* handler: uj.Github type=benchmark.CBGithub kind=struct quoted=false*/
-
-	{
-		if tok == fflib.FFTok_null {
-
-			uj.Github = nil
-
-			state = fflib.FFParse_after_value
-			goto mainparse
-		}
-
-		if uj.Github == nil {
-			uj.Github = new(CBGithub)
-		}
-
-		err = uj.Github.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-		if err != nil {
-			return err
-		}
-		state = fflib.FFParse_after_value
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Gravatar:
-
-	/* handler: uj.Gravatar type=benchmark.CBGravatar kind=struct quoted=false*/
-
-	{
-		if tok == fflib.FFTok_null {
-
-			uj.Gravatar = nil
-
-			state = fflib.FFParse_after_value
-			goto mainparse
-		}
-
-		if uj.Gravatar == nil {
-			uj.Gravatar = new(CBGravatar)
-		}
-
-		err = uj.Gravatar.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-		if err != nil {
-			return err
-		}
-		state = fflib.FFParse_after_value
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *DSTopic) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *DSTopic) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Id":`)
-	fflib.FormatBits2(buf, uint64(mj.Id), 10, mj.Id < 0)
-	buf.WriteString(`,"Slug":`)
-	fflib.WriteJsonString(buf, string(mj.Slug))
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_DSTopicbase = iota
-	ffj_t_DSTopicno_such_key
-
-	ffj_t_DSTopic_Id
-
-	ffj_t_DSTopic_Slug
-)
-
-var ffj_key_DSTopic_Id = []byte("Id")
-
-var ffj_key_DSTopic_Slug = []byte("Slug")
-
-func (uj *DSTopic) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *DSTopic) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_DSTopicbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_DSTopicno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'I':
-
-					if bytes.Equal(ffj_key_DSTopic_Id, kn) {
-						currentKey = ffj_t_DSTopic_Id
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'S':
-
-					if bytes.Equal(ffj_key_DSTopic_Slug, kn) {
-						currentKey = ffj_t_DSTopic_Slug
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_DSTopic_Slug, kn) {
-					currentKey = ffj_t_DSTopic_Slug
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_DSTopic_Id, kn) {
-					currentKey = ffj_t_DSTopic_Id
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_DSTopicno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_DSTopic_Id:
-					goto handle_Id
-
-				case ffj_t_DSTopic_Slug:
-					goto handle_Slug
-
-				case ffj_t_DSTopicno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Id:
-
-	/* handler: uj.Id type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.Id = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Slug:
-
-	/* handler: uj.Slug type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Slug = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *DSTopicsList) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *DSTopicsList) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Topics":`)
-	if mj.Topics != nil {
-		buf.WriteString(`[`)
-		for i, v := range mj.Topics {
-			if i != 0 {
-				buf.WriteString(`,`)
-			}
-
-			{
-
-				if v == nil {
-					buf.WriteString("null")
-					return nil
-				}
-
-				err = v.MarshalJSONBuf(buf)
-				if err != nil {
-					return err
-				}
-
-			}
-		}
-		buf.WriteString(`]`)
-	} else {
-		buf.WriteString(`null`)
-	}
-	buf.WriteString(`,"MoreTopicsUrl":`)
-	fflib.WriteJsonString(buf, string(mj.MoreTopicsUrl))
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_DSTopicsListbase = iota
-	ffj_t_DSTopicsListno_such_key
-
-	ffj_t_DSTopicsList_Topics
-
-	ffj_t_DSTopicsList_MoreTopicsUrl
-)
-
-var ffj_key_DSTopicsList_Topics = []byte("Topics")
-
-var ffj_key_DSTopicsList_MoreTopicsUrl = []byte("MoreTopicsUrl")
-
-func (uj *DSTopicsList) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *DSTopicsList) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_DSTopicsListbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_DSTopicsListno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'M':
-
-					if bytes.Equal(ffj_key_DSTopicsList_MoreTopicsUrl, kn) {
-						currentKey = ffj_t_DSTopicsList_MoreTopicsUrl
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'T':
-
-					if bytes.Equal(ffj_key_DSTopicsList_Topics, kn) {
-						currentKey = ffj_t_DSTopicsList_Topics
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_DSTopicsList_MoreTopicsUrl, kn) {
-					currentKey = ffj_t_DSTopicsList_MoreTopicsUrl
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.EqualFoldRight(ffj_key_DSTopicsList_Topics, kn) {
-					currentKey = ffj_t_DSTopicsList_Topics
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_DSTopicsListno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_DSTopicsList_Topics:
-					goto handle_Topics
-
-				case ffj_t_DSTopicsList_MoreTopicsUrl:
-					goto handle_MoreTopicsUrl
-
-				case ffj_t_DSTopicsListno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Topics:
-
-	/* handler: uj.Topics type=[]*benchmark.DSTopic kind=slice quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-			uj.Topics = nil
-		} else {
-
-			uj.Topics = make([]*DSTopic, 0)
-
-			wantVal := true
-
-			for {
-
-				var tmp_uj__Topics *DSTopic
-
-				tok = fs.Scan()
-				if tok == fflib.FFTok_error {
-					goto tokerror
-				}
-				if tok == fflib.FFTok_right_brace {
-					break
-				}
-
-				if tok == fflib.FFTok_comma {
-					if wantVal == true {
-						// TODO(pquerna): this isn't an ideal error message, this handles
-						// things like [,,,] as an array value.
-						return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-					}
-					continue
-				} else {
-					wantVal = true
-				}
-
-				/* handler: tmp_uj__Topics type=*benchmark.DSTopic kind=ptr quoted=false*/
-
-				{
-					if tok == fflib.FFTok_null {
-
-						tmp_uj__Topics = nil
-
-						state = fflib.FFParse_after_value
-						goto mainparse
-					}
-
-					if tmp_uj__Topics == nil {
-						tmp_uj__Topics = new(DSTopic)
-					}
-
-					err = tmp_uj__Topics.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-					if err != nil {
-						return err
-					}
-					state = fflib.FFParse_after_value
-				}
-
-				uj.Topics = append(uj.Topics, tmp_uj__Topics)
-				wantVal = false
-			}
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_MoreTopicsUrl:
-
-	/* handler: uj.MoreTopicsUrl type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.MoreTopicsUrl = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *DSUser) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *DSUser) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Username":`)
-	fflib.WriteJsonString(buf, string(mj.Username))
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_DSUserbase = iota
-	ffj_t_DSUserno_such_key
-
-	ffj_t_DSUser_Username
-)
-
-var ffj_key_DSUser_Username = []byte("Username")
-
-func (uj *DSUser) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *DSUser) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_DSUserbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_DSUserno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'U':
-
-					if bytes.Equal(ffj_key_DSUser_Username, kn) {
-						currentKey = ffj_t_DSUser_Username
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_DSUser_Username, kn) {
-					currentKey = ffj_t_DSUser_Username
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_DSUserno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_DSUser_Username:
-					goto handle_Username
-
-				case ffj_t_DSUserno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Username:
-
-	/* handler: uj.Username type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Username = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *LargePayload) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *LargePayload) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Users":`)
-	if mj.Users != nil {
-		buf.WriteString(`[`)
-		for i, v := range mj.Users {
-			if i != 0 {
-				buf.WriteString(`,`)
-			}
-
-			{
-
-				if v == nil {
-					buf.WriteString("null")
-					return nil
-				}
-
-				err = v.MarshalJSONBuf(buf)
-				if err != nil {
-					return err
-				}
-
-			}
-		}
-		buf.WriteString(`]`)
-	} else {
-		buf.WriteString(`null`)
-	}
-	if mj.Topics != nil {
-		buf.WriteString(`,"Topics":`)
-
-		{
-
-			err = mj.Topics.MarshalJSONBuf(buf)
-			if err != nil {
-				return err
-			}
-
-		}
-	} else {
-		buf.WriteString(`,"Topics":null`)
-	}
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_LargePayloadbase = iota
-	ffj_t_LargePayloadno_such_key
-
-	ffj_t_LargePayload_Users
-
-	ffj_t_LargePayload_Topics
-)
-
-var ffj_key_LargePayload_Users = []byte("Users")
-
-var ffj_key_LargePayload_Topics = []byte("Topics")
-
-func (uj *LargePayload) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *LargePayload) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_LargePayloadbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_LargePayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'T':
-
-					if bytes.Equal(ffj_key_LargePayload_Topics, kn) {
-						currentKey = ffj_t_LargePayload_Topics
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'U':
-
-					if bytes.Equal(ffj_key_LargePayload_Users, kn) {
-						currentKey = ffj_t_LargePayload_Users
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_LargePayload_Topics, kn) {
-					currentKey = ffj_t_LargePayload_Topics
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.EqualFoldRight(ffj_key_LargePayload_Users, kn) {
-					currentKey = ffj_t_LargePayload_Users
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_LargePayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_LargePayload_Users:
-					goto handle_Users
-
-				case ffj_t_LargePayload_Topics:
-					goto handle_Topics
-
-				case ffj_t_LargePayloadno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Users:
-
-	/* handler: uj.Users type=[]*benchmark.DSUser kind=slice quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-			uj.Users = nil
-		} else {
-
-			uj.Users = make([]*DSUser, 0)
-
-			wantVal := true
-
-			for {
-
-				var tmp_uj__Users *DSUser
-
-				tok = fs.Scan()
-				if tok == fflib.FFTok_error {
-					goto tokerror
-				}
-				if tok == fflib.FFTok_right_brace {
-					break
-				}
-
-				if tok == fflib.FFTok_comma {
-					if wantVal == true {
-						// TODO(pquerna): this isn't an ideal error message, this handles
-						// things like [,,,] as an array value.
-						return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-					}
-					continue
-				} else {
-					wantVal = true
-				}
-
-				/* handler: tmp_uj__Users type=*benchmark.DSUser kind=ptr quoted=false*/
-
-				{
-					if tok == fflib.FFTok_null {
-
-						tmp_uj__Users = nil
-
-						state = fflib.FFParse_after_value
-						goto mainparse
-					}
-
-					if tmp_uj__Users == nil {
-						tmp_uj__Users = new(DSUser)
-					}
-
-					err = tmp_uj__Users.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-					if err != nil {
-						return err
-					}
-					state = fflib.FFParse_after_value
-				}
-
-				uj.Users = append(uj.Users, tmp_uj__Users)
-				wantVal = false
-			}
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Topics:
-
-	/* handler: uj.Topics type=benchmark.DSTopicsList kind=struct quoted=false*/
-
-	{
-		if tok == fflib.FFTok_null {
-
-			uj.Topics = nil
-
-			state = fflib.FFParse_after_value
-			goto mainparse
-		}
-
-		if uj.Topics == nil {
-			uj.Topics = new(DSTopicsList)
-		}
-
-		err = uj.Topics.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-		if err != nil {
-			return err
-		}
-		state = fflib.FFParse_after_value
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *MediumPayload) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *MediumPayload) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	if mj.Person != nil {
-		buf.WriteString(`{"Person":`)
-
-		{
-
-			err = mj.Person.MarshalJSONBuf(buf)
-			if err != nil {
-				return err
-			}
-
-		}
-	} else {
-		buf.WriteString(`{"Person":null`)
-	}
-	buf.WriteString(`,"Company":`)
-	/* Falling back. type=map[string]interface {} kind=map */
-	err = buf.Encode(mj.Company)
-	if err != nil {
-		return err
-	}
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_MediumPayloadbase = iota
-	ffj_t_MediumPayloadno_such_key
-
-	ffj_t_MediumPayload_Person
-
-	ffj_t_MediumPayload_Company
-)
-
-var ffj_key_MediumPayload_Person = []byte("Person")
-
-var ffj_key_MediumPayload_Company = []byte("Company")
-
-func (uj *MediumPayload) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *MediumPayload) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_MediumPayloadbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_MediumPayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'C':
-
-					if bytes.Equal(ffj_key_MediumPayload_Company, kn) {
-						currentKey = ffj_t_MediumPayload_Company
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'P':
-
-					if bytes.Equal(ffj_key_MediumPayload_Person, kn) {
-						currentKey = ffj_t_MediumPayload_Person
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_MediumPayload_Company, kn) {
-					currentKey = ffj_t_MediumPayload_Company
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.EqualFoldRight(ffj_key_MediumPayload_Person, kn) {
-					currentKey = ffj_t_MediumPayload_Person
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_MediumPayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_MediumPayload_Person:
-					goto handle_Person
-
-				case ffj_t_MediumPayload_Company:
-					goto handle_Company
-
-				case ffj_t_MediumPayloadno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Person:
-
-	/* handler: uj.Person type=benchmark.CBPerson kind=struct quoted=false*/
-
-	{
-		if tok == fflib.FFTok_null {
-
-			uj.Person = nil
-
-			state = fflib.FFParse_after_value
-			goto mainparse
-		}
-
-		if uj.Person == nil {
-			uj.Person = new(CBPerson)
-		}
-
-		err = uj.Person.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-		if err != nil {
-			return err
-		}
-		state = fflib.FFParse_after_value
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Company:
-
-	/* handler: uj.Company type=map[string]interface {} kind=map quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_left_bracket && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-			uj.Company = nil
-		} else {
-
-			uj.Company = make(map[string]interface{}, 0)
-
-			wantVal := true
-
-			for {
-
-				var k string
-
-				var tmp_uj__Company interface{}
-
-				tok = fs.Scan()
-				if tok == fflib.FFTok_error {
-					goto tokerror
-				}
-				if tok == fflib.FFTok_right_bracket {
-					break
-				}
-
-				if tok == fflib.FFTok_comma {
-					if wantVal == true {
-						// TODO(pquerna): this isn't an ideal error message, this handles
-						// things like [,,,] as an array value.
-						return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-					}
-					continue
-				} else {
-					wantVal = true
-				}
-
-				/* handler: k type=string kind=string quoted=false*/
-
-				{
-
-					{
-						if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-							return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-						}
-					}
-
-					if tok == fflib.FFTok_null {
-
-					} else {
-
-						outBuf := fs.Output.Bytes()
-
-						k = string(string(outBuf))
-
-					}
-				}
-
-				// Expect ':' after key
-				tok = fs.Scan()
-				if tok != fflib.FFTok_colon {
-					return fs.WrapErr(fmt.Errorf("wanted colon token, but got token: %v", tok))
-				}
-
-				tok = fs.Scan()
-				/* handler: tmp_uj__Company type=interface {} kind=interface quoted=false*/
-
-				{
-					/* Falling back. type=interface {} kind=interface */
-					tbuf, err := fs.CaptureField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-
-					err = json.Unmarshal(tbuf, &tmp_uj__Company)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-				}
-
-				uj.Company[k] = tmp_uj__Company
-
-				wantVal = false
-			}
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *SmallPayload) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *SmallPayload) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"St":`)
-	fflib.FormatBits2(buf, uint64(mj.St), 10, mj.St < 0)
-	buf.WriteString(`,"Sid":`)
-	fflib.FormatBits2(buf, uint64(mj.Sid), 10, mj.Sid < 0)
-	buf.WriteString(`,"Tt":`)
-	fflib.WriteJsonString(buf, string(mj.Tt))
-	buf.WriteString(`,"Gr":`)
-	fflib.FormatBits2(buf, uint64(mj.Gr), 10, mj.Gr < 0)
-	buf.WriteString(`,"Uuid":`)
-	fflib.WriteJsonString(buf, string(mj.Uuid))
-	buf.WriteString(`,"Ip":`)
-	fflib.WriteJsonString(buf, string(mj.Ip))
-	buf.WriteString(`,"Ua":`)
-	fflib.WriteJsonString(buf, string(mj.Ua))
-	buf.WriteString(`,"Tz":`)
-	fflib.FormatBits2(buf, uint64(mj.Tz), 10, mj.Tz < 0)
-	buf.WriteString(`,"V":`)
-	fflib.FormatBits2(buf, uint64(mj.V), 10, mj.V < 0)
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_SmallPayloadbase = iota
-	ffj_t_SmallPayloadno_such_key
-
-	ffj_t_SmallPayload_St
-
-	ffj_t_SmallPayload_Sid
-
-	ffj_t_SmallPayload_Tt
-
-	ffj_t_SmallPayload_Gr
-
-	ffj_t_SmallPayload_Uuid
-
-	ffj_t_SmallPayload_Ip
-
-	ffj_t_SmallPayload_Ua
-
-	ffj_t_SmallPayload_Tz
-
-	ffj_t_SmallPayload_V
-)
-
-var ffj_key_SmallPayload_St = []byte("St")
-
-var ffj_key_SmallPayload_Sid = []byte("Sid")
-
-var ffj_key_SmallPayload_Tt = []byte("Tt")
-
-var ffj_key_SmallPayload_Gr = []byte("Gr")
-
-var ffj_key_SmallPayload_Uuid = []byte("Uuid")
-
-var ffj_key_SmallPayload_Ip = []byte("Ip")
-
-var ffj_key_SmallPayload_Ua = []byte("Ua")
-
-var ffj_key_SmallPayload_Tz = []byte("Tz")
-
-var ffj_key_SmallPayload_V = []byte("V")
-
-func (uj *SmallPayload) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *SmallPayload) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_SmallPayloadbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_SmallPayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'G':
-
-					if bytes.Equal(ffj_key_SmallPayload_Gr, kn) {
-						currentKey = ffj_t_SmallPayload_Gr
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'I':
-
-					if bytes.Equal(ffj_key_SmallPayload_Ip, kn) {
-						currentKey = ffj_t_SmallPayload_Ip
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'S':
-
-					if bytes.Equal(ffj_key_SmallPayload_St, kn) {
-						currentKey = ffj_t_SmallPayload_St
-						state = fflib.FFParse_want_colon
-						goto mainparse
-
-					} else if bytes.Equal(ffj_key_SmallPayload_Sid, kn) {
-						currentKey = ffj_t_SmallPayload_Sid
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'T':
-
-					if bytes.Equal(ffj_key_SmallPayload_Tt, kn) {
-						currentKey = ffj_t_SmallPayload_Tt
-						state = fflib.FFParse_want_colon
-						goto mainparse
-
-					} else if bytes.Equal(ffj_key_SmallPayload_Tz, kn) {
-						currentKey = ffj_t_SmallPayload_Tz
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'U':
-
-					if bytes.Equal(ffj_key_SmallPayload_Uuid, kn) {
-						currentKey = ffj_t_SmallPayload_Uuid
-						state = fflib.FFParse_want_colon
-						goto mainparse
-
-					} else if bytes.Equal(ffj_key_SmallPayload_Ua, kn) {
-						currentKey = ffj_t_SmallPayload_Ua
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'V':
-
-					if bytes.Equal(ffj_key_SmallPayload_V, kn) {
-						currentKey = ffj_t_SmallPayload_V
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_V, kn) {
-					currentKey = ffj_t_SmallPayload_V
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Tz, kn) {
-					currentKey = ffj_t_SmallPayload_Tz
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Ua, kn) {
-					currentKey = ffj_t_SmallPayload_Ua
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Ip, kn) {
-					currentKey = ffj_t_SmallPayload_Ip
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Uuid, kn) {
-					currentKey = ffj_t_SmallPayload_Uuid
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Gr, kn) {
-					currentKey = ffj_t_SmallPayload_Gr
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Tt, kn) {
-					currentKey = ffj_t_SmallPayload_Tt
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.EqualFoldRight(ffj_key_SmallPayload_Sid, kn) {
-					currentKey = ffj_t_SmallPayload_Sid
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.EqualFoldRight(ffj_key_SmallPayload_St, kn) {
-					currentKey = ffj_t_SmallPayload_St
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_SmallPayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_SmallPayload_St:
-					goto handle_St
-
-				case ffj_t_SmallPayload_Sid:
-					goto handle_Sid
-
-				case ffj_t_SmallPayload_Tt:
-					goto handle_Tt
-
-				case ffj_t_SmallPayload_Gr:
-					goto handle_Gr
-
-				case ffj_t_SmallPayload_Uuid:
-					goto handle_Uuid
-
-				case ffj_t_SmallPayload_Ip:
-					goto handle_Ip
-
-				case ffj_t_SmallPayload_Ua:
-					goto handle_Ua
-
-				case ffj_t_SmallPayload_Tz:
-					goto handle_Tz
-
-				case ffj_t_SmallPayload_V:
-					goto handle_V
-
-				case ffj_t_SmallPayloadno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_St:
-
-	/* handler: uj.St type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.St = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Sid:
-
-	/* handler: uj.Sid type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.Sid = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Tt:
-
-	/* handler: uj.Tt type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Tt = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Gr:
-
-	/* handler: uj.Gr type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.Gr = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Uuid:
-
-	/* handler: uj.Uuid type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Uuid = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Ip:
-
-	/* handler: uj.Ip type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Ip = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Ua:
-
-	/* handler: uj.Ua type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Ua = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Tz:
-
-	/* handler: uj.Tz type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.Tz = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_V:
-
-	/* handler: uj.V type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.V = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
--- a/benchmark/benchmark_large_payload_test.go
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-   Each test should process 24kb json record (based on Discourse API)
-   It should read 2 arrays, and for each item in array get few fields.
-   Basically it means processing full JSON file.
-*/
-package benchmark
-
-import (
-	"github.com/buger/jsonparser"
-	"testing"
-	// "github.com/Jeffail/gabs"
-	// "github.com/bitly/go-simplejson"
-	"encoding/json"
-	"github.com/a8m/djson"
-	jlexer "github.com/mailru/easyjson/jlexer"
-	"github.com/pquerna/ffjson/ffjson"
-	// "github.com/antonholmquist/jason"
-	// "fmt"
-)
-
-/*
-   github.com/buger/jsonparser
-*/
-func BenchmarkJsonParserLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		jsonparser.ArrayEach(largeFixture, func(value []byte, dataType jsonparser.ValueType, offset int, err error) {
-			jsonparser.Get(value, "username")
-			nothing()
-		}, "users")
-
-		jsonparser.ArrayEach(largeFixture, func(value []byte, dataType jsonparser.ValueType, offset int, err error) {
-			jsonparser.GetInt(value, "id")
-			jsonparser.Get(value, "slug")
-			nothing()
-		}, "topics", "topics")
-	}
-}
-
-/*
-   encoding/json
-*/
-func BenchmarkEncodingJsonStructLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data LargePayload
-		json.Unmarshal(largeFixture, &data)
-
-		for _, u := range data.Users {
-			nothing(u.Username)
-		}
-
-		for _, t := range data.Topics.Topics {
-			nothing(t.Id, t.Slug)
-		}
-	}
-}
-
-func BenchmarkEncodingJsonInterfaceLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data interface{}
-		json.Unmarshal(largeFixture, &data)
-		m := data.(map[string]interface{})
-
-		users := m["users"].([]interface{})
-		for _, u := range users {
-			nothing(u.(map[string]interface{})["username"].(string))
-		}
-
-		topics := m["topics"].(map[string]interface{})["topics"].([]interface{})
-		for _, t := range topics {
-			tI := t.(map[string]interface{})
-			nothing(tI["id"].(float64), tI["slug"].(string))
-		}
-	}
-}
-
-/*
-   github.com/pquerna/ffjson
-*/
-
-func BenchmarkFFJsonLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data LargePayload
-		ffjson.Unmarshal(largeFixture, &data)
-
-		for _, u := range data.Users {
-			nothing(u.Username)
-		}
-
-		for _, t := range data.Topics.Topics {
-			nothing(t.Id, t.Slug)
-		}
-	}
-}
-
-/*
-   github.com/mailru/easyjson
-*/
-func BenchmarkEasyJsonLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		lexer := &jlexer.Lexer{Data: largeFixture}
-		data := new(LargePayload)
-		data.UnmarshalEasyJSON(lexer)
-
-		for _, u := range data.Users {
-			nothing(u.Username)
-		}
-
-		for _, t := range data.Topics.Topics {
-			nothing(t.Id, t.Slug)
-		}
-	}
-}
-
-/*
-   github.com/a8m/djson
-*/
-func BenchmarkDjsonLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		m, _ := djson.DecodeObject(largeFixture)
-		users := m["users"].([]interface{})
-		for _, u := range users {
-			nothing(u.(map[string]interface{})["username"].(string))
-		}
-
-		topics := m["topics"].(map[string]interface{})["topics"].([]interface{})
-		for _, t := range topics {
-			tI := t.(map[string]interface{})
-			nothing(tI["id"].(float64), tI["slug"].(string))
-		}
-	}
-}
--- a/benchmark/benchmark_medium_payload_test.go
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
-   Each test should process 2.4kb json record (based on Clearbit API)
-   It should read multiple nested fields and 1 array
-*/
-package benchmark
-
-import (
-	"encoding/json"
-	"testing"
-
-	"github.com/Jeffail/gabs"
-	"github.com/a8m/djson"
-	"github.com/antonholmquist/jason"
-	"github.com/bitly/go-simplejson"
-	"github.com/buger/jsonparser"
-	jlexer "github.com/mailru/easyjson/jlexer"
-	"github.com/mreiferson/go-ujson"
-	"github.com/pquerna/ffjson/ffjson"
-	"github.com/ugorji/go/codec"
-	// "fmt"
-	"bytes"
-	"errors"
-)
-
-/*
-   github.com/buger/jsonparser
-*/
-func BenchmarkJsonParserMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		jsonparser.Get(mediumFixture, "person", "name", "fullName")
-		jsonparser.GetInt(mediumFixture, "person", "github", "followers")
-		jsonparser.Get(mediumFixture, "company")
-
-		jsonparser.ArrayEach(mediumFixture, func(value []byte, dataType jsonparser.ValueType, offset int, err error) {
-			jsonparser.Get(value, "url")
-			nothing()
-		}, "person", "gravatar", "avatars")
-	}
-}
-
-func BenchmarkJsonParserDeleteMedium(b *testing.B) {
-	fixture := make([]byte, 0, len(mediumFixture))
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		fixture = append(fixture[:0], mediumFixture...)
-		fixture = jsonparser.Delete(fixture, "person", "name", "fullName")
-		fixture = jsonparser.Delete(fixture, "person", "github", "followers")
-		fixture = jsonparser.Delete(fixture, "company")
-
-		nothing()
-	}
-}
-
-func BenchmarkJsonParserEachKeyManualMedium(b *testing.B) {
-	paths := [][]string{
-		[]string{"person", "name", "fullName"},
-		[]string{"person", "github", "followers"},
-		[]string{"company"},
-		[]string{"person", "gravatar", "avatars"},
-	}
-
-	for i := 0; i < b.N; i++ {
-		jsonparser.EachKey(mediumFixture, func(idx int, value []byte, vt jsonparser.ValueType, err error) {
-			switch idx {
-			case 0:
-			// jsonparser.ParseString(value)
-			case 1:
-				jsonparser.ParseInt(value)
-			case 2:
-			// jsonparser.ParseString(value)
-			case 3:
-				jsonparser.ArrayEach(value, func(avalue []byte, dataType jsonparser.ValueType, offset int, err error) {
-					jsonparser.Get(avalue, "url")
-				})
-			}
-		}, paths...)
-	}
-}
-
-func BenchmarkJsonParserEachKeyStructMedium(b *testing.B) {
-	paths := [][]string{
-		[]string{"person", "name", "fullName"},
-		[]string{"person", "github", "followers"},
-		[]string{"company"},
-		[]string{"person", "gravatar", "avatars"},
-	}
-
-	for i := 0; i < b.N; i++ {
-		data := MediumPayload{
-			Person: &CBPerson{
-				Name:     &CBName{},
-				Github:   &CBGithub{},
-				Gravatar: &CBGravatar{},
-			},
-		}
-
-		jsonparser.EachKey(mediumFixture, func(idx int, value []byte, vt jsonparser.ValueType, err error) {
-			switch idx {
-			case 0:
-				data.Person.Name.FullName, _ = jsonparser.ParseString(value)
-			case 1:
-				v, _ := jsonparser.ParseInt(value)
-				data.Person.Github.Followers = int(v)
-			case 2:
-				json.Unmarshal(value, &data.Company) // we don't have a JSON -> map[string]interface{} function yet, so use standard encoding/json here
-			case 3:
-				var avatars []*CBAvatar
-				jsonparser.ArrayEach(value, func(avalue []byte, dataType jsonparser.ValueType, offset int, err error) {
-					url, _ := jsonparser.ParseString(avalue)
-					avatars = append(avatars, &CBAvatar{Url: url})
-				})
-				data.Person.Gravatar.Avatars = avatars
-			}
-		}, paths...)
-	}
-}
-
-func BenchmarkJsonParserObjectEachStructMedium(b *testing.B) {
-	nameKey, githubKey, gravatarKey := []byte("name"), []byte("github"), []byte("gravatar")
-	errStop := errors.New("stop")
-
-	for i := 0; i < b.N; i++ {
-		data := MediumPayload{
-			Person: &CBPerson{
-				Name:     &CBName{},
-				Github:   &CBGithub{},
-				Gravatar: &CBGravatar{},
-			},
-		}
-
-		missing := 3
-
-		jsonparser.ObjectEach(mediumFixture, func(k, v []byte, vt jsonparser.ValueType, o int) error {
-			switch {
-			case bytes.Equal(k, nameKey):
-				data.Person.Name.FullName, _ = jsonparser.GetString(v, "fullName")
-				missing--
-			case bytes.Equal(k, githubKey):
-				x, _ := jsonparser.GetInt(v, "followers")
-				data.Person.Github.Followers = int(x)
-				missing--
-			case bytes.Equal(k, gravatarKey):
-				var avatars []*CBAvatar
-				jsonparser.ArrayEach(v, func(avalue []byte, dataType jsonparser.ValueType, offset int, err error) {
-					url, _ := jsonparser.ParseString(avalue)
-					avatars = append(avatars, &CBAvatar{Url: url})
-				}, "avatars")
-				data.Person.Gravatar.Avatars = avatars
-				missing--
-			}
-
-			if missing == 0 {
-				return errStop
-			} else {
-				return nil
-			}
-		}, "person")
-
-		cv, _, _, _ := jsonparser.Get(mediumFixture, "company")
-		json.Unmarshal(cv, &data.Company)
-	}
-}
-
-/*
-   encoding/json
-*/
-func BenchmarkEncodingJsonStructMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data MediumPayload
-		json.Unmarshal(mediumFixture, &data)
-
-		nothing(data.Person.Name.FullName, data.Person.Github.Followers, data.Company)
-
-		for _, el := range data.Person.Gravatar.Avatars {
-			nothing(el.Url)
-		}
-	}
-}
-
-func BenchmarkEncodingJsonInterfaceMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data interface{}
-		json.Unmarshal(mediumFixture, &data)
-		m := data.(map[string]interface{})
-
-		person := m["person"].(map[string]interface{})
-		name := person["name"].(map[string]interface{})
-		github := person["github"].(map[string]interface{})
-		company := m["company"]
-		gravatar := person["gravatar"].(map[string]interface{})
-		avatars := gravatar["avatars"].([]interface{})
-
-		nothing(name["fullName"].(string), github["followers"].(float64), company)
-		for _, a := range avatars {
-			nothing(a.(map[string]interface{})["url"])
-		}
-	}
-}
-
-/*
-   github.com/Jeffail/gabs
-*/
-func BenchmarkGabsMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := gabs.ParseJSON(mediumFixture)
-		person := json.Path("person")
-		nothing(
-			person.Path("name.fullName").Data().(string),
-			person.Path("github.followers").Data().(float64),
-		)
-
-		json.Path("company").ChildrenMap()
-
-		arr, _ := person.Path("gravatar.avatars.url").Children()
-		for _, el := range arr {
-			nothing(el.String())
-		}
-	}
-}
-
-/*
-   github.com/bitly/go-simplejson
-*/
-func BenchmarkGoSimpleJsonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := simplejson.NewJson(mediumFixture)
-		person := json.Get("person")
-		person.Get("name").Get("fullName").String()
-		person.Get("github").Get("followers").Float64()
-		json.Get("company")
-		arr, _ := person.Get("gravatar").Get("avatars").Array()
-
-		for _, el := range arr {
-			nothing(el.(map[string]interface{})["url"])
-		}
-	}
-}
-
-/*
-   github.com/pquerna/ffjson
-*/
-
-func BenchmarkFFJsonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data MediumPayload
-		ffjson.Unmarshal(mediumFixture, &data)
-
-		nothing(data.Person.Name.FullName, data.Person.Github.Followers, data.Company)
-
-		for _, el := range data.Person.Gravatar.Avatars {
-			nothing(el.Url)
-		}
-	}
-}
-
-/*
-   github.com/bitly/go-simplejson
-*/
-
-func BenchmarkJasonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := jason.NewObjectFromBytes(mediumFixture)
-
-		json.GetString("person.name.fullName")
-		json.GetFloat64("person.github.followers")
-		json.GetObject("company")
-		arr, _ := json.GetObjectArray("person.gravatar.avatars")
-
-		for _, el := range arr {
-			el.GetString("url")
-		}
-
-		nothing()
-	}
-}
-
-/*
-   github.com/mreiferson/go-ujson
-*/
-
-func BenchmarkUjsonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := ujson.NewFromBytes(mediumFixture)
-
-		person := json.Get("person")
-
-		person.Get("name").Get("fullName").String()
-		person.Get("github").Get("followers").Float64()
-		json.Get("company").String()
-
-		arr := person.Get("gravatar").Get("avatars").Array()
-		for _, el := range arr {
-			el.Get("url").String()
-		}
-
-		nothing()
-	}
-}
-
-/*
-   github.com/a8m/djson
-*/
-func BenchmarkDjsonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		m, _ := djson.DecodeObject(mediumFixture)
-		person := m["person"].(map[string]interface{})
-		name := person["name"].(map[string]interface{})
-		github := person["github"].(map[string]interface{})
-		company := m["company"]
-		gravatar := person["gravatar"].(map[string]interface{})
-		avatars := gravatar["avatars"].([]interface{})
-
-		nothing(name["fullName"].(string), github["followers"].(float64), company)
-		for _, a := range avatars {
-			nothing(a.(map[string]interface{})["url"])
-		}
-	}
-}
-
-/*
-   github.com/ugorji/go/codec
-*/
-func BenchmarkUgirjiMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		decoder := codec.NewDecoderBytes(mediumFixture, new(codec.JsonHandle))
-		data := new(MediumPayload)
-		json.Unmarshal(mediumFixture, &data)
-		data.CodecDecodeSelf(decoder)
-
-		nothing(data.Person.Name.FullName, data.Person.Github.Followers, data.Company)
-
-		for _, el := range data.Person.Gravatar.Avatars {
-			nothing(el.Url)
-		}
-	}
-}
-
-/*
-   github.com/mailru/easyjson
-*/
-func BenchmarkEasyJsonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		lexer := &jlexer.Lexer{Data: mediumFixture}
-		data := new(MediumPayload)
-		data.UnmarshalEasyJSON(lexer)
-
-		nothing(data.Person.Name.FullName, data.Person.Github.Followers, data.Company)
-
-		for _, el := range data.Person.Gravatar.Avatars {
-			nothing(el.Url)
-		}
-	}
-}
--- a/benchmark/benchmark_small_payload_test.go
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
-   Each test should process 190 byte http log like json record
-   It should read multiple fields
-*/
-package benchmark
-
-import (
-	"encoding/json"
-	"testing"
-
-	"github.com/Jeffail/gabs"
-	"github.com/a8m/djson"
-	"github.com/antonholmquist/jason"
-	"github.com/bitly/go-simplejson"
-	"github.com/buger/jsonparser"
-	jlexer "github.com/mailru/easyjson/jlexer"
-	"github.com/mreiferson/go-ujson"
-	"github.com/pquerna/ffjson/ffjson"
-	"github.com/ugorji/go/codec"
-	// "fmt"
-	"bytes"
-	"errors"
-)
-
-// Just for emulating field access, so it will not throw "evaluated but not used"
-func nothing(_ ...interface{}) {}
-
-/*
-   github.com/buger/jsonparser
-*/
-func BenchmarkJsonParserSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		jsonparser.Get(smallFixture, "uuid")
-		jsonparser.GetInt(smallFixture, "tz")
-		jsonparser.Get(smallFixture, "ua")
-		jsonparser.GetInt(smallFixture, "st")
-
-		nothing()
-	}
-}
-
-func BenchmarkJsonParserEachKeyManualSmall(b *testing.B) {
-	paths := [][]string{
-		[]string{"uuid"},
-		[]string{"tz"},
-		[]string{"ua"},
-		[]string{"st"},
-	}
-
-	for i := 0; i < b.N; i++ {
-		jsonparser.EachKey(smallFixture, func(idx int, value []byte, vt jsonparser.ValueType, err error) {
-			switch idx {
-			case 0:
-				// jsonparser.ParseString(value)
-			case 1:
-				jsonparser.ParseInt(value)
-			case 2:
-				// jsonparser.ParseString(value)
-			case 3:
-				jsonparser.ParseInt(value)
-			}
-		}, paths...)
-	}
-}
-
-func BenchmarkJsonParserEachKeyStructSmall(b *testing.B) {
-	paths := [][]string{
-		[]string{"uuid"},
-		[]string{"tz"},
-		[]string{"ua"},
-		[]string{"st"},
-	}
-
-	for i := 0; i < b.N; i++ {
-		var data SmallPayload
-
-		jsonparser.EachKey(smallFixture, func(idx int, value []byte, vt jsonparser.ValueType, err error) {
-			switch idx {
-			case 0:
-				data.Uuid, _ = jsonparser.ParseString(value)
-			case 1:
-				v, _ := jsonparser.ParseInt(value)
-				data.Tz = int(v)
-			case 2:
-				data.Ua, _ = jsonparser.ParseString(value)
-			case 3:
-				v, _ := jsonparser.ParseInt(value)
-				data.St = int(v)
-			}
-		}, paths...)
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
-
-func BenchmarkJsonParserObjectEachStructSmall(b *testing.B) {
-	uuidKey, tzKey, uaKey, stKey := []byte("uuid"), []byte("tz"), []byte("ua"), []byte("st")
-	errStop := errors.New("stop")
-
-	for i := 0; i < b.N; i++ {
-		var data SmallPayload
-
-		missing := 4
-
-		jsonparser.ObjectEach(smallFixture, func(key, value []byte, vt jsonparser.ValueType, off int) error {
-			switch {
-			case bytes.Equal(key, uuidKey):
-				data.Uuid, _ = jsonparser.ParseString(value)
-				missing--
-			case bytes.Equal(key, tzKey):
-				v, _ := jsonparser.ParseInt(value)
-				data.Tz = int(v)
-				missing--
-			case bytes.Equal(key, uaKey):
-				data.Ua, _ = jsonparser.ParseString(value)
-				missing--
-			case bytes.Equal(key, stKey):
-				v, _ := jsonparser.ParseInt(value)
-				data.St = int(v)
-				missing--
-			}
-
-			if missing == 0 {
-				return errStop
-			} else {
-				return nil
-			}
-		})
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
-
-func BenchmarkJsonParserSetSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		jsonparser.Set(smallFixture, []byte(`"c90927dd-1588-4fe7-a14f-8a8950cfcbd8"`), "uuid")
-		jsonparser.Set(smallFixture, []byte("-3"), "tz")
-		jsonparser.Set(smallFixture, []byte(`"server_agent"`), "ua")
-		jsonparser.Set(smallFixture, []byte("3"), "st")
-
-		nothing()
-	}
-}
-
-func BenchmarkJsonParserDelSmall(b *testing.B) {
-	fixture := make([]byte, 0, len(smallFixture))
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		fixture = append(fixture[:0], smallFixture...)
-		fixture = jsonparser.Delete(fixture, "uuid")
-		fixture = jsonparser.Delete(fixture, "tz")
-		fixture = jsonparser.Delete(fixture, "ua")
-		fixture = jsonparser.Delete(fixture, "stt")
-
-		nothing()
-	}
-}
-
-/*
-   encoding/json
-*/
-func BenchmarkEncodingJsonStructSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data SmallPayload
-		json.Unmarshal(smallFixture, &data)
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
-
-func BenchmarkEncodingJsonInterfaceSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data interface{}
-		json.Unmarshal(smallFixture, &data)
-		m := data.(map[string]interface{})
-
-		nothing(m["uuid"].(string), m["tz"].(float64), m["ua"].(string), m["st"].(float64))
-	}
-}
-
-/*
-   github.com/Jeffail/gabs
-*/
-
-func BenchmarkGabsSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := gabs.ParseJSON(smallFixture)
-
-		nothing(
-			json.Path("uuid").Data().(string),
-			json.Path("tz").Data().(float64),
-			json.Path("ua").Data().(string),
-			json.Path("st").Data().(float64),
-		)
-	}
-}
-
-/*
-   github.com/bitly/go-simplejson
-*/
-
-func BenchmarkGoSimplejsonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := simplejson.NewJson(smallFixture)
-
-		json.Get("uuid").String()
-		json.Get("tz").Float64()
-		json.Get("ua").String()
-		json.Get("st").Float64()
-
-		nothing()
-	}
-}
-
-func BenchmarkGoSimplejsonSetSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := simplejson.NewJson(smallFixture)
-
-		json.SetPath([]string{"uuid"}, "c90927dd-1588-4fe7-a14f-8a8950cfcbd8")
-		json.SetPath([]string{"tz"}, -3)
-		json.SetPath([]string{"ua"}, "server_agent")
-		json.SetPath([]string{"st"}, 3)
-
-		nothing()
-	}
-}
-
-/*
-   github.com/pquerna/ffjson
-*/
-
-func BenchmarkFFJsonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data SmallPayload
-		ffjson.Unmarshal(smallFixture, &data)
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
-
-/*
-   github.com/bitly/go-simplejson
-*/
-
-func BenchmarkJasonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := jason.NewObjectFromBytes(smallFixture)
-
-		json.GetString("uuid")
-		json.GetFloat64("tz")
-		json.GetString("ua")
-		json.GetFloat64("st")
-
-		nothing()
-	}
-}
-
-/*
-   github.com/mreiferson/go-ujson
-*/
-func BenchmarkUjsonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := ujson.NewFromBytes(smallFixture)
-
-		json.Get("uuid").String()
-		json.Get("tz").Float64()
-		json.Get("ua").String()
-		json.Get("st").Float64()
-
-		nothing()
-	}
-}
-
-/*
-   github.com/a8m/djson
-*/
-func BenchmarkDjsonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		m, _ := djson.DecodeObject(smallFixture)
-		nothing(m["uuid"].(string), m["tz"].(float64), m["ua"].(string), m["st"].(float64))
-	}
-}
-
-/*
-   github.com/ugorji/go/codec
-*/
-func BenchmarkUgirjiSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		decoder := codec.NewDecoderBytes(smallFixture, new(codec.JsonHandle))
-		data := new(SmallPayload)
-		data.CodecDecodeSelf(decoder)
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
-
-/*
-   github.com/mailru/easyjson
-*/
-func BenchmarkEasyJsonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		lexer := &jlexer.Lexer{Data: smallFixture}
-		data := new(SmallPayload)
-		data.UnmarshalEasyJSON(lexer)
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
